⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guildmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 3 页
字号:
{
	pGuild->SetMarkName(MarkName);
	CGuildMark * pMark = new CGuildMark;
	pMark->Init(MarkName, imgData);
	m_GuildMarkTable.Add(pMark, MarkName);
}

int CGuildManager::convertCharToInt(char c)
{
	if('0' <= c && c <= '9')
		return c - '0';
	if('A' <= c && c <= 'F')
		return c - 'A' +10;
	if('a' <= c && c <= 'f')
		return c - 'a' +10;
	return 0;
}

//馆靛矫 "FF" 捞繁侥栏肺 涝仿捞 登绢具 茄促.
BYTE CGuildManager::HexToByte(char* pStr)
{
	int n1 = convertCharToInt(pStr[0]);
	int n2 = convertCharToInt(pStr[1]);

	return n1 * 16 + n2;
}

void CGuildManager::RequestMark(CPlayer* pPlayer, MARKNAMETYPE MarkName)
{
	CGuildMark* pMark = GetMark(MarkName);
	if(pMark == 0)
	{
		char buf[128];
		sprintf(buf, "GuildMark Info Wrong! MarkIdx : %u", MarkName);
		ASSERTMSG(0, buf);
		MSG_DWORD nmsg;
		nmsg.Category = MP_GUILD;
		nmsg.Protocol = MP_GUILDMARK_REQUEST_NACK;
		nmsg.dwData = MarkName;
		pPlayer->SendMsg(&nmsg, sizeof(nmsg));
		return;
	}
	MSG_GUILDMARK_IMG msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILDMARK_REQUEST_ACK;
	msg.MarkName = MarkName;
	memcpy(msg.imgData, pMark->GetImgData(), GUILDMARK_BUFSIZE);
	pPlayer->SendMsg(&msg, sizeof(msg));
}

void CGuildManager::DeleteMark(MARKNAMETYPE MarkName)
{
	CGuildMark* pMark = m_GuildMarkTable.GetData(MarkName);
	if(pMark == 0)
		return;
	
	m_GuildMarkTable.Remove(MarkName);
	delete pMark;
}

void CGuildManager::MarkChange(CPlayer* pPlayer, DWORD GuildIdx, MARKNAMETYPE MarkName)
{
	MSG_DWORD3 msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILDMARK_CHANGE;
	msg.dwData1 = pPlayer->GetID();
	msg.dwData2 = GuildIdx;
	msg.dwData3 = MarkName;
	
	PACKEDDATA_OBJ->QuickSend(pPlayer, &msg, sizeof(msg));
}

void CGuildManager::LevelUpSyn(CPlayer* pPlayer)
{
	CGuild* pGuild = GetGuild(pPlayer->GetGuildIdx());
	if(pGuild == 0)
		OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_Err);
	if(pGuild->GetLevel() == MAX_GUILD_LEVEL)
		OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_Err);
	if(pGuild->GetLevel() == GUILD_4LEVEL)
	{
		if(ABILITYMGR->GetAbilityLevel(ABILITYINDEX_MUNPA, pPlayer->GetAbilityGroup()) != 1)
			OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_Err);
		if( pPlayer->GetMoney() < GetLevelUpMoney(pGuild->GetLevel()) )
			OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_Err);
	}
	else
	{
		if(ABILITYMGR->GetAbilityLevel(ABILITYINDEX_LEADERSHIP, pPlayer->GetAbilityGroup()) <= pGuild->GetLevel())
			OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_LevelUp_NotAbil);
		if( pPlayer->GetMoney() < GetLevelUpMoney(pGuild->GetLevel()) )
			OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_LevelUp_NotMoney);
		if(pGuild->GetLevel() >= MAX_GUILD_LEVEL)
			OnErr(pPlayer, MP_GUILD_LEVELUP_NACK, eGuildErr_LevelUp_Complete);
	}
	pPlayer->SetMoney(GetLevelUpMoney(pGuild->GetLevel()), MONEY_SUBTRACTION, MF_LOST, eItemTable_Inventory, eMoneyLog_LoseGuildLevelUp);
	pGuild->LevelUp(pGuild->GetLevel()+1);

	//dbupdate
	GuildLevelUp(pPlayer->GetGuildIdx(), pGuild->GetLevel());

	MSG_BYTE msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILD_LEVELUP_NOTIFY_TO_MAP;
	msg.dwObjectID = pPlayer->GetGuildIdx();
	msg.bData = pGuild->GetLevel();
	g_Network.Send2AgentServer((char*)&msg, sizeof(msg));
}

void CGuildManager::LoadLevelUpInfo()
{
	CMHFile file;
#ifdef _FILE_BIN_
	file.Init("Resource/GuildLevel.bin","rb");
#else
	file.Init("Resource/GuildLevel.txt","rt");
#endif
	if(file.IsInited() == FALSE)
	{
		ASSERTMSG(0, "Fail To Load a File : GuildLevel");
		return;
	}
	
	for(int n=0;n<MAX_GUILD_STEP;++n)
	{
		m_LevelUpInfo[n] = file.GetDword();
	}

	file.Release();
}


MONEYTYPE CGuildManager::GetLevelUpMoney(BYTE GuildLevel)
{
	if((GuildLevel == 0) || (GuildLevel > MAX_GUILD_LEVEL))
	{
		return 0;
	}
	return m_LevelUpInfo[GuildLevel-1];
}

BOOL CGuildManager::CanEntryGuild(char* date)
{
	SYSTEMTIME ti;
	GetLocalTime(&ti);
	DWORD day;

	char ybuf[5];
	strncpy(ybuf, &date[0],4);
	day = atoi(ybuf);
	if( ti.wYear > day)
		return TRUE;
	
	char dbuf[3];
	strncpy(dbuf, &date[5], 2);
	day = atoi(dbuf);
	if(ti.wMonth > day)
		return TRUE;
	
	strncpy(dbuf, &date[8], 2);
	day = atoi(dbuf);
	if(ti.wDay >= day)
		return TRUE;
	
	return FALSE;
}

void CGuildManager::SendGuildEntryDate(CPlayer* pPlayer, char* day)
{
	pPlayer->SetGuildCanEntryDate(day);

	MSG_NAME dmsg;
	dmsg.Category = MP_GUILD;
	dmsg.Protocol = MP_GUILD_SETENTRYDATE;
	SafeStrCpy(dmsg.Name, day, 11);
	pPlayer->SendMsg(&dmsg, sizeof(dmsg));
}

void CGuildManager::ChangeMemberRank(CPlayer* pMaster, DWORD MemberIdx, BYTE Rank)
{
	CGuild* pGuild = GetGuild(pMaster->GetGuildIdx());
	if(pGuild == 0)
		OnErr(pMaster, MP_GUILD_CHANGERANK_NACK, eGuildErr_ChangeRank_NoGuild);
	if(pMaster->GetGuildMemberRank() != GUILD_MASTER)
		OnErr(pMaster, MP_GUILD_CHANGERANK_NACK, eGuildErr_Err);
	if(pGuild->IsMember(MemberIdx) == FALSE)
		OnErr(pMaster, MP_GUILD_CHANGERANK_NACK, eGuildErr_Err);
	if(pGuild->ChangeMemberRank(MemberIdx, Rank) == FALSE)
		OnErr(pMaster, MP_GUILD_CHANGERANK_NACK, eGuildErr_Err);
	
	//db update
	GuildChangeMemberRank(pMaster->GetGuildIdx(), MemberIdx, Rank);

	CPlayer* pMember = (CPlayer*)g_pUserTable->FindUser(MemberIdx);
	if(pMember)
	{
		pMember->SetGuildMemberRank(Rank);
	}
	
	MSG_DWORDBYTE notify;
	notify.Category = MP_GUILD;
	notify.Protocol = MP_GUILD_CHANGERANK_NOTIFY_TO_MAP;
	notify.dwObjectID = pMaster->GetGuildIdx();
	notify.dwData = MemberIdx;
	notify.bData = Rank;
	g_Network.Send2AgentServer((char*)&notify, sizeof(notify));
}

void CGuildManager::GiveNickNameSyn(CPlayer* pMaster, DWORD TargetId, char* NickName)
{
	CGuild* pGuild = GetGuild(pMaster->GetGuildIdx());
	if(pGuild == 0)
		OnErr(pMaster, MP_GUILD_GIVENICKNAME_NACK, eGuildErr_Err);
	if(pMaster->GetGuildMemberRank() != GUILD_MASTER)
		OnErr(pMaster, MP_GUILD_GIVENICKNAME_NACK, eGuildErr_Err);

	//DB UPDATE

	//GUILDINFO SET , MEMBERINFO SET 

	// SEND TO 
}

void CGuildManager::RegistGuildItem(DWORD GuildIdx, ITEMBASE* Guilditem)
{
	CGuild* pGuild = GetGuild(GuildIdx);
	if(pGuild == 0)
	{
		char buf[64];
		sprintf(buf, "RegistGuildItem - NO %d Guild Info", GuildIdx);
		ASSERTMSG(0, buf);
		return;
	}

	if( pGuild )
		pGuild->InitGuildItem(Guilditem);
}

CItemSlot* CGuildManager::GetSlot(DWORD GuildIdx)
{
	CGuild* pGuild = GetGuild(GuildIdx);
	if(pGuild)
	{
		return pGuild->GetSlot();
	}
	return NULL;
}

void CGuildManager::GuildWarehouseInfo(CPlayer* pPlayer, BYTE TabNum)
{
	CGuild* pGuild = GetGuild(pPlayer->GetGuildIdx());
	if(!pGuild)
	{
		SendNackMsg(pPlayer, MP_ITEM_GUILD_WAREHOUSE_INFO_NACK, eGuildErr_NoGuild);
		return;
	}
	if(pGuild->GetLocation() !=  GAMERESRCMNGR->GetLoadMapNum())
	{
		OnErr(pPlayer, MP_ITEM_GUILD_WAREHOUSE_INFO_NACK, eGuildErr_Err);
	}
		
	if((TabNum < 0) || (TabNum >= TAB_GUILDWAREHOUSE_NUM))
	{
		ASSERTMSG(0, "GuildWarehouseInfo - TabNum Error");
		SendNackMsg(pPlayer, MP_ITEM_GUILD_WAREHOUSE_INFO_NACK, eGuildErr_Err);
		return;
	}
	pGuild->EnterWareHouse(pPlayer, TabNum);
}

void CGuildManager::LeaveWareHouse(CPlayer* pPlayer, BYTE TabNum)
{
	CGuild* pGuild = GetGuild(pPlayer->GetGuildIdx());
	if(pGuild == 0)
	{
		return;
	}
	if((TabNum < 0) || (TabNum >= TAB_GUILDWAREHOUSE_NUM))
	{
		ASSERTMSG(0, "GuildWarehouseInfo - TabNum Error");
		return;
	}
	pGuild->LeaveWareHouse(pPlayer->GetID(), TabNum);
}

void CGuildManager::AddGuildItemOption(ITEM_OPTION_INFO * pInfo)
{
	if(pInfo->dwOptionIdx == 0)
		return;
	if(m_ItemOptionList.GetData(pInfo->dwOptionIdx))
	{
		return;
	}
	ITEM_OPTION_INFO * pNewInfo = new ITEM_OPTION_INFO;
	memcpy(pNewInfo, pInfo, sizeof(ITEM_OPTION_INFO));
	m_ItemOptionList.Add(pNewInfo, pNewInfo->dwOptionIdx);
}

void CGuildManager::RemoveGuildItemOption(DWORD dwOptionIdx)
{
	ITEM_OPTION_INFO * pNewInfo = m_ItemOptionList.GetData(dwOptionIdx);
	ASSERT(m_ItemOptionList.GetData(dwOptionIdx));
	SAFE_DELETE( pNewInfo );
	m_ItemOptionList.Remove(dwOptionIdx);
}

ITEM_OPTION_INFO * CGuildManager::GetItemOption(DWORD dwOptionIdx)
{
	return m_ItemOptionList.GetData(dwOptionIdx);
}

void CGuildManager::PutInMoneyGuild(CPlayer* pPlayer, DWORD Money)
{
	if(pPlayer->GetGuildMemberRank() < GUILD_MEMBER)
	{
		ASSERT(0);
		return;
	}
	CGuild* pGuild = GetGuild(pPlayer->GetGuildIdx());
	if(!pGuild)
	{
		return;
	}

	DWORD playermon = pPlayer->GetMoney();
	DWORD guildmon = pGuild->GetMoney();
	MONEYTYPE maxmon = pGuild->GetMaxPurseMoney();
	
	if( playermon < Money )
	{
		Money = playermon;
	}	
	if( maxmon - guildmon < Money)
	{
		Money = maxmon - guildmon;
	}	
	if(Money == 0)
		return;

	// 角力 函拳樊 锭巩俊 距埃 荐沥 钦聪促. (LBS)
	Money = pGuild->SetMoney(Money, MONEY_ADDITION, MF_PUTINGUILD);
	pPlayer->SetMoney(Money, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LoseGuild, pPlayer->GetGuildIdx());
	
	GuildMoneyUpdate(pPlayer->GetGuildIdx(), pGuild->GetMoney());	//dbUpdate 
	
	MSG_DWORD3 msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILD_PUTIN_MONEY_ACK;
	msg.dwData1 = pPlayer->GetID();
	msg.dwData2 = pPlayer->GetMoney();
	msg.dwData3 = pGuild->GetMoney();
	pGuild->SendtoWarehousePlayerAll(&msg, sizeof(msg));

	InsertLogMoney( eMoneyLog_LoseGuild, pPlayer->GetID(), pPlayer->GetMoney(), Money, pPlayer->GetGuildIdx(), pGuild->GetMoney());
}

void CGuildManager::PutOutMoneyGuild(CPlayer* pPlayer, DWORD Money)
{
	CGuild* pGuild = GetGuild(pPlayer->GetGuildIdx());
	MONEYTYPE maxmon = pPlayer->GetMaxPurseMoney(eItemTable_Inventory); //牢亥配府肺 捣 颗扁聪鳖.
	
	if(!pGuild)
	{
		ASSERT(0);
		return;
	}
	if(Money > pGuild->GetMoney())
	{
		Money = pGuild->GetMoney();
	}
	if(Money + pPlayer->GetMoney() > maxmon)
	{
		Money = maxmon - pPlayer->GetMoney();
	}
	if(Money == 0)
		return;

	Money = pPlayer->SetMoney(Money, MONEY_ADDITION, 0, eItemTable_Inventory, eMoneyLog_GetGuild, pPlayer->GetGuildIdx());
	pGuild->SetMoney(Money, MONEY_SUBTRACTION, MF_PUTOUTGUILD);
	GuildMoneyUpdate(pPlayer->GetGuildIdx(), pGuild->GetMoney());	//dbUpdate 
	
	MSG_DWORD3 msg;
	msg.Category = MP_GUILD;
	msg.Protocol = MP_GUILD_PUTOUT_MONEY_ACK;
	msg.dwData1 = pPlayer->GetID();
	msg.dwData2 = pPlayer->GetMoney();
	msg.dwData3 = pGuild->GetMoney();
	pGuild->SendtoWarehousePlayerAll(&msg, sizeof(msg));

	InsertLogMoney( eMoneyLog_GetGuild, pPlayer->GetID(), pPlayer->GetMoney(), Money, pPlayer->GetGuildIdx(), pGuild->GetMoney());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -