📄 guildmanager.cpp
字号:
{
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*)¬ify, 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 + -