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

📄 guild.cpp

📁 墨香最新私服
💻 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 + -