📄 guild.cpp
字号:
// Guild.cpp: implementation of the CGuild class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Guild.h"
#include "Player.h"
#include "UserTable.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGuild::CGuild(GUILDINFO* pInfo)
{
m_GuildInfo.GuildIdx = pInfo->GuildIdx;
m_GuildInfo.MasterIdx = pInfo->MasterIdx;
m_GuildInfo.MapNum = pInfo->MapNum;
SafeStrCpy(m_GuildInfo.GuildName, pInfo->GuildName, MAX_GUILD_NAME+1);
m_GuildInfo.UnionIdx = pInfo->UnionIdx;
m_GuildInfo.GuildLevel = pInfo->GuildLevel;
SafeStrCpy(m_GuildInfo.MasterName, pInfo->MasterName, MAX_NAME_LENGTH+1);
}
CGuild::~CGuild()
{
m_MemberList.RemoveAll();
}
BOOL CGuild::IsMaster(DWORD PlayerIDX)
{
if(m_GuildInfo.MasterIdx != PlayerIDX)
return FALSE;
else
return TRUE;
}
void CGuild::BreakUp()
{
// set member info clear
CPlayer* pPlayer = NULL;
MSGBASE msg;
msg.Category = MP_GUILD;
msg.Protocol = MP_GUILD_BREAKUP_ACK;
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
GUILDMEMBERINFO* pInfo = NULL;
while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
pPlayer = (CPlayer*)g_pUserTable->FindUser(pInfo->MemberIdx);
if(pPlayer)
{
pPlayer->SetGuildInfo(0, GUILD_NOTMEMBER, "");
pPlayer->SendMsg(&msg, sizeof(msg));
}
SAFE_DELETE(pInfo);
}
m_MemberList.RemoveAll();
}
BOOL CGuild::AddMember(GUILDMEMBERINFO* pMemberInfo)
{
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
GUILDMEMBERINFO* pInfo = NULL;
if(m_MemberList.Find(pMemberInfo->MemberIdx))
return FALSE;
pInfo = new GUILDMEMBERINFO;
pInfo->InitInfo(pMemberInfo->MemberIdx, pMemberInfo->MemberName, pMemberInfo->Memberlvl, pMemberInfo->Rank);
m_MemberList.AddTail(pInfo);
SendAddMsg(pInfo, pMemberInfo->MemberIdx);
return TRUE;
}
BOOL CGuild::DeleteMember(DWORD PlayerIDX, BYTE bType)
{
CPlayer* pPlayer = NULL;
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
GUILDMEMBERINFO* pInfo = NULL;
/* while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
if(pInfo->MemberIdx == PlayerIDX)
{
SAFE_DELETE(pInfo);
m_MemberList.RemoveAt(pos);
return TRUE;
}
}
*/
while(pos)
{
pInfo = (GUILDMEMBERINFO*)m_MemberList.GetAt(pos);
if(pInfo)
{
if(pInfo->MemberIdx == PlayerIDX)
{
SAFE_DELETE(pInfo);
m_MemberList.RemoveAt(pos);
return TRUE;
}
}
m_MemberList.GetNext(pos);
}
return FALSE;
}
void CGuild::SendDeleteMsg(DWORD PlayerIDX, BYTE bType)
{
MSG_DWORDBYTE msg;
msg.Category = MP_GUILD;
msg.Protocol = MP_GUILD_DELETEMEMBER_ACK;
msg.dwData = PlayerIDX;
msg.bData = bType;
SendMsgToAll(&msg, sizeof(msg));
}
void CGuild::SendAddMsg(GUILDMEMBERINFO* pInfo, DWORD CharacterIDX)
{
SEND_GUILD_MEMBER_INFO msg;
msg.Category = MP_GUILD;
msg.Protocol = MP_GUILD_ADDMEMBER_ACK;
msg.GuildIdx = GetIdx();
SafeStrCpy(msg.GuildName, GetGuildName(), MAX_GUILD_NAME+1);
msg.MemberInfo.MemberIdx = pInfo->MemberIdx;
SafeStrCpy(msg.MemberInfo.MemberName, pInfo->MemberName, MAX_NAME_LENGTH+1);
msg.MemberInfo.Rank = pInfo->Rank;
msg.MemberInfo.Memberlvl = pInfo->Memberlvl;
SendMsgToAllExceptOne(&msg, sizeof(msg), CharacterIDX);
}
void CGuild::SendMsgToAll(MSGBASE* msg, int size)
{
CPlayer* pPlayer = NULL;
GUILDMEMBERINFO* pInfo = NULL;
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
pPlayer = (CPlayer*)g_pUserTable->FindUser(pInfo->MemberIdx);
if(pPlayer)
{
pPlayer->SendMsg(msg, size);
}
}
}
void CGuild::SendMsgToAllExceptOne(MSGBASE* msg, int size, DWORD CharacterIdx)
{
CPlayer* pPlayer = NULL;
GUILDMEMBERINFO* pInfo = NULL;
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
pPlayer = (CPlayer*)g_pUserTable->FindUser(pInfo->MemberIdx);
if(pPlayer)
{
if(pPlayer->GetID() == CharacterIdx)
continue;
pPlayer->SendMsg(msg, size);
}
}
}
BOOL CGuild::IsMember(DWORD MemberIDX)
{
CPlayer* pMember = (CPlayer*)g_pUserTable->FindUser(MemberIDX);
if(pMember)
{
if(pMember->GetGuildIdx() == GetIdx())
return TRUE;
}
else
{
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
GUILDMEMBERINFO* pInfo;
while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
if(pInfo->MemberIdx == MemberIDX)
return TRUE;
}
}
return FALSE;
}
DWORD CGuild::GetIdx()
{
return m_GuildInfo.GuildIdx;
}
void CGuild::GetTotalMember(GUILDMEMBERINFO* pRtInfo)
{
PTRLISTPOS pos = m_MemberList.GetHeadPosition();
GUILDMEMBERINFO* pInfo = NULL;
int i=0;
while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
{
pRtInfo[i].InitInfo(pInfo->MemberIdx, pInfo->MemberName, pInfo->Memberlvl, pInfo->Rank);
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -