📄 guildmanager.cpp
字号:
// GuildManager.cpp: implementation of the CGuildManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GuildManager.h"
#include "MapDBMsgParser.h"
#include "UserTable.h"
#include "Network.h"
#include "Player.h"
#include "Guild.h"
#include "..\[CC]Header\GameResourceManager.h"
#include "AbilityManager.h"
#include "GuildMark.h"
#include "PackedData.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGuildManager::CGuildManager()
{
m_GuildRoomHashTable.Initialize(256);
m_GuildMarkTable.Initialize(128);
m_ItemOptionList.Initialize(32);
LoadLevelUpInfo();
}
CGuildManager::~CGuildManager()
{
void* pInfo;
m_GuildRoomHashTable.SetPositionHead();
while(pInfo = m_GuildRoomHashTable.GetData())
delete pInfo;
m_GuildRoomHashTable.RemoveAll();
void* pMarkInfo;
m_GuildMarkTable.SetPositionHead();
while(pMarkInfo = m_GuildMarkTable.GetData())
delete pMarkInfo;
m_GuildMarkTable.RemoveAll();
ITEM_OPTION_INFO * pOInfo = NULL;
m_ItemOptionList.SetPositionHead();
while(pOInfo = m_ItemOptionList.GetData())
delete pOInfo;
m_ItemOptionList.RemoveAll();
}
void CGuildManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
switch(Protocol)
{
case MP_GUILD_CREATE_SYN:
{
SEND_GUILD_CREATE_SYN* pmsg = (SEND_GUILD_CREATE_SYN*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
CreateGuildSyn(pPlayer, pmsg->GuildName, pmsg->Intro);
}
break;
case MP_GUILD_BREAKUP_SYN:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
BreakUpGuildSyn(pPlayer);
}
break;
case MP_GUILD_DELETEMEMBER_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pMaster == 0)
return;
DeleteMemberSyn(pMaster, pmsg->dwData);
}
break;
case MP_GUILD_ADDMEMBER_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pMaster == 0)
return;
AddMemberSyn(pMaster, pmsg->dwData);
}
break;
case MP_GUILD_INVITE_ACCEPT:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
AddMemberResult(pPlayer, pmsg->dwData);
}
break;
case MP_GUILD_INVITE_DENY:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(pmsg->dwData);
if(pMaster == 0)
return;
MSGBASE msg;
msg.Category = MP_GUILD;
msg.Protocol = MP_GUILD_INVITE_DENY;
pMaster->SendMsg(&msg, sizeof(msg));
}
break;
case MP_GUILD_SECEDE_SYN:
{
MSGBASE * pmsg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
SecedeSyn(pPlayer);
}
break;
case MP_GUILD_LEVELUP_SYN:
{
MSGBASE * pmsg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
LevelUpSyn(pPlayer);
}
break;
case MP_GUILD_CHANGERANK_SYN:
{
MSG_DWORDBYTE* pmsg = (MSG_DWORDBYTE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
ChangeMemberRank(pPlayer, pmsg->dwData, pmsg->bData);
}
break;
case MP_GUILD_GIVENICKNAME_SYN:
{
SEND_GUILD_NICKNAME * pmsg = (SEND_GUILD_NICKNAME*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
GiveNickNameSyn(pPlayer, pmsg->TargetIdx, pmsg->NickName);
}
break;
case MP_GUILD_PUTIN_MONEY_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer)
return;
PutInMoneyGuild(pPlayer, pmsg->dwData);
}
break;
case MP_GUILD_PUTOUT_MONEY_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer)
return;
PutOutMoneyGuild(pPlayer, pmsg->dwData);
}
break;
///////////////////////////////////////////////////////////////////////////
//NOTIFY
case MP_GUILD_CREATE_NOTIFY_TO_MAP:
{
SEND_GUILD_CREATE_NOTIFY* pmsg = (SEND_GUILD_CREATE_NOTIFY*)pMsg;
CGuild* pGuild = RegistGuild(&pmsg->GuildInfo, 0);
if(pGuild == 0)
return;
GUILDMEMBERINFO Memberinfo;
Memberinfo.InitInfo(pmsg->GuildInfo.MasterIdx, pmsg->GuildInfo.MasterName, pmsg->MasterLvl, GUILD_MASTER);
pGuild->AddMember(&Memberinfo);
}
break;
case MP_GUILD_BREAKUP_NOTIFY_TO_MAP:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
DoBreakUp(pmsg->dwObjectID);
}
break;
case MP_GUILD_DELETEMEMBER_NOTIFY_TO_MAP:
{
MSG_NAME_DWORD* pmsg = (MSG_NAME_DWORD*)pMsg;
DoDeleteMember(pmsg->dwObjectID, pmsg->dwData, eGuild_Delete, pmsg->Name);
}
break;
case MP_GUILD_ADDMEMBER_NOTIFY_TO_MAP:
{
SEND_GUILD_MEMBER_INFO* pmsg = (SEND_GUILD_MEMBER_INFO*)pMsg;
CGuild* pGuild = GetGuild(pmsg->GuildIdx);
if(pGuild == 0)
{
ASSERTMSG(0, "Different Guild Info!");
return;
}
if(pGuild->CanAddMember() == FALSE )
{
ASSERTMSG(0, "Different Guild Member Info!");
return;
}
GUILDMEMBERINFO member;
member.InitInfo(pmsg->MemberInfo.MemberIdx, pmsg->MemberInfo.MemberName, pmsg->MemberInfo.Memberlvl);
if(pGuild->AddMember(&member) == FALSE)
{
char buf[128];
sprintf(buf, "Add Notify Failed! GuildIdx : %u, MemberIdx : %u", pmsg->GuildIdx, pmsg->MemberInfo.MemberIdx);
ASSERTMSG(0, buf);
}
}
break;
case MP_GUILD_SECEDE_NOTIFY_TO_MAP:
{
MSG_DWORD * pmsg = (MSG_DWORD*)pMsg;
DoDeleteMember(pmsg->dwObjectID, pmsg->dwData, eGuild_Secede, "2000.01.01");
}
break;
case MP_GUILD_LEVELUP_NOTIFY_TO_MAP:
{
MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
CGuild* pGuild = GetGuild(pmsg->dwObjectID);
if(pGuild == 0)
{
char buf[128];
sprintf(buf, "LevelUp Notify Failed! GuildIdx: %d", pmsg->dwObjectID);
ASSERTMSG(0, buf);
}
pGuild->LevelUp(pmsg->bData);
}
break;
case MP_GUILD_CHANGERANK_NOTIFY_TO_MAP:
{
MSG_DWORDBYTE* pmsg = (MSG_DWORDBYTE*)pMsg;
CGuild* pGuild = GetGuild(pmsg->dwObjectID);
if(pGuild == 0)
{
char buf[128];
sprintf(buf, "ChangeRank Notify Failed! GuildIdx: %d", pmsg->dwObjectID);
ASSERTMSG(0, buf);
}
if(pGuild->ChangeMemberRank(pmsg->dwData, pmsg->bData) == FALSE)
{
ASSERTMSG(0, "Notify Change Rank Err, Must Check.");
return;
}
}
break;
///////////////////////////////////////////////////////////////////////////
//MARK
case MP_GUILDMARK_UPDATE_SYN:
{
MSG_GUILDMARK_IMG * pmsg = (MSG_GUILDMARK_IMG*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
CGuild* pGuild = GetGuild(pmsg->GuildIdx);
if(pGuild == 0)
{
char buf[256];
sprintf(buf, "GuildIdx: %u, CharacterIdx: %u", pmsg->GuildIdx, pmsg->dwObjectID);
ASSERTMSG(0, buf);
OnErr(pPlayer, MP_GUILDMARK_UPDATE_NACK, eGuildErr_Mark_NoGuild);
}
RegistMarkSyn(pmsg->GuildIdx, pmsg->imgData, pmsg->dwObjectID);
}
break;
case MP_GUILDMARK_REQUEST_SYN:
{
MSG_DWORD * pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == 0)
return;
RequestMark(pPlayer, pmsg->dwData);
}
break;
case MP_GUILDMARK_NOTIFY_TO_MAP:
{
MSG_GUILDMARK_IMG* pmsg = (MSG_GUILDMARK_IMG*)pMsg;
CGuild* pGuild = GetGuild(pmsg->GuildIdx);
if(pGuild == 0)
return;
DoRegistMark(pGuild, pmsg->MarkName, pmsg->imgData);
}
break;
default:
{
char buf[32];
sprintf(buf, "Protocol : %d", Protocol);
ASSERTMSG(0, buf);
}
}
}
CGuild* CGuildManager::RegistGuild(GUILDINFO* pGuildInfo, MONEYTYPE GuildMoney)
{
if(m_GuildRoomHashTable.GetData(pGuildInfo->GuildIdx))
{
char buf[64];
sprintf(buf, "Error! GuildIdx : %u", pGuildInfo->GuildIdx);
ASSERTMSG(0, buf);
return NULL;
}
CGuild* pGuild = new CGuild(pGuildInfo, GuildMoney);
m_GuildRoomHashTable.Add(pGuild, pGuildInfo->GuildIdx);
return pGuild;
}
void CGuildManager::CreateGuildSyn(CPlayer* pPlayer, char* GuildName, char* Intro)
{
if(pPlayer->GetGuildIdx())
{
ASSERT(0);
OnErr(pPlayer, MP_GUILD_CREATE_NACK, eGuildErr_Err);
}
if(ABILITYMGR->GetAbilityLevel(ABILITYINDEX_LEADERSHIP, pPlayer->GetAbilityGroup()) < 1)
{
ASSERT(0);
OnErr(pPlayer, MP_GUILD_CREATE_NACK, eGuildErr_Err);
}
if(CanEntryGuild(pPlayer->GetGuildCanEntryDate()) == FALSE)
{
ASSERT(0);
OnErr(pPlayer, MP_GUILD_CREATE_NACK, eGuildErr_Err);
}
if(IsVaildGuildName(GuildName) == FALSE)
{
ASSERT(0);
OnErr(pPlayer, MP_GUILD_CREATE_NACK, eGuildErr_Create_Name);
}
if(strlen(Intro) > MAX_GUILD_INTRO)
{
ASSERT(0);
OnErr(pPlayer, MP_GUILD_CREATE_NACK, eGuildErr_Create_Intro);
}
//db insert
GuildCreate(pPlayer->GetID(), pPlayer->GetObjectName(), pPlayer->GetLevel(), GuildName, Intro);
}
void CGuildManager::CreateGuildResult(LEVELTYPE MasterLvl, GUILDINFO* pGuildInfo)
{
CGuild* pGuild = RegistGuild(pGuildInfo, 0);
if(pGuild == 0)
return;
//client
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pGuildInfo->MasterIdx);
if(pPlayer)
{
pPlayer->SetGuildInfo(pGuildInfo->GuildIdx, GUILD_MASTER, pGuildInfo->GuildName, pGuild->GetMarkName());
//ack
SEND_GUILD_CREATE_ACK msg;
msg.Category = MP_GUILD;
msg.Protocol = MP_GUILD_CREATE_ACK;
msg.GuildIdx = pGuildInfo->GuildIdx;
SafeStrCpy(msg.GuildName, pGuildInfo->GuildName, MAX_GUILD_NAME+1);
pPlayer->SendMsg(&msg, sizeof(msg));
}
GUILDMEMBERINFO Memberinfo;
Memberinfo.InitInfo(pGuildInfo->MasterIdx, pGuildInfo->MasterName, MasterLvl, GUILD_MASTER);
pGuild->AddMember(&Memberinfo);
//NOTIFY
SEND_GUILD_CREATE_NOTIFY notify;
notify.Category = MP_GUILD;
notify.Protocol = MP_GUILD_CREATE_NOTIFY_TO_MAP;
notify.GuildInfo.GuildIdx = pGuildInfo->GuildIdx;
notify.GuildInfo.GuildLevel = GUILD_1LEVEL;
SafeStrCpy(notify.GuildInfo.MasterName, pGuildInfo->MasterName, MAX_NAME_LENGTH+1);
SafeStrCpy(notify.GuildInfo.GuildName, pGuildInfo->GuildName, MAX_GUILD_NAME+1);
notify.GuildInfo.MapNum = GAMERESRCMNGR->GetLoadMapNum();
notify.GuildInfo.MasterIdx = pGuildInfo->MasterIdx;
notify.GuildInfo.UnionIdx = 0;
notify.MasterLvl = MasterLvl;
g_Network.Send2AgentServer((char*)¬ify, sizeof(notify));
}
void CGuildManager::BreakUpGuildSyn(CPlayer* pMaster)
{
if(pMaster->GetGuildMemberRank() != GUILD_MASTER)
OnErr(pMaster, MP_GUILD_BREAKUP_NACK, eGuildErr_BreakUp);
//DB update
GuildBreakUp(pMaster->GetGuildIdx(), pMaster->GetID());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -