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

📄 guild.cpp

📁 墨香最新私服
💻 CPP
字号:
// Guild.cpp: implementation of the CGuild class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Guild.h"
#include "GameIn.h"
#include "GuildDialog.h"
#include "ObjectManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGuild::CGuild()
{
	m_GuildIdx = 0;
}

CGuild::~CGuild()
{
	Release();
}

void CGuild::Init(GUILDINFO* pInfo)
{
	Release();
	if(pInfo)
	{
		m_GuildIdx = pInfo->GuildIdx;
		m_GuildLvl = pInfo->GuildLevel;
		m_GuildLocation = pInfo->MapNum;
		SafeStrCpy(m_MasterName, pInfo->MasterName, MAX_NAME_LENGTH+1);
		SafeStrCpy(m_GuildName, pInfo->GuildName, MAX_GUILD_NAME+1);
		m_UnionIdx = pInfo->UnionIdx;
		for(int i=0; i<eRankPos_Max; ++i)
			m_RankMemberIdx[i] = 0;
	}
}

void CGuild::Release()
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		SAFE_DELETE(pInfo);
	}
	m_MemberList.RemoveAll();

	m_UnionIdx = 0;
	for(int i=0; i<eRankPos_Max; ++i)
		m_RankMemberIdx[i] = 0;
}

BOOL CGuild::DeleteMember(DWORD PlayerIDX)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pos)
	{
		pInfo = (GUILDMEMBERINFO*)m_MemberList.GetAt(pos);
		if(pInfo)
		{
			if(pInfo->MemberIdx == PlayerIDX)
			{
				ResetRankMemberInfo(PlayerIDX, pInfo->Rank);
				SAFE_DELETE(pInfo);
				m_MemberList.RemoveAt(pos);
				RefreshMember();
				return TRUE;
			}
		}
		m_MemberList.GetNext(pos);
	}

	return FALSE;
}

BOOL CGuild::AddMember(GUILDMEMBERINFO* pMemberInfo)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		if(pInfo->MemberIdx == pMemberInfo->MemberIdx)
		{
			return FALSE;
		}
	}
	
	pInfo = new GUILDMEMBERINFO;
	pInfo->InitInfo(pMemberInfo->MemberIdx, pMemberInfo->MemberName, pMemberInfo->Memberlvl, pMemberInfo->Rank);
	m_MemberList.AddTail(pInfo);
	if(pInfo->Rank == GUILD_VICEMASTER)
		m_RankMemberIdx[0] = pInfo->MemberIdx;
	else if(pInfo->Rank == GUILD_SENIOR)
	{
		int pos = IsVacancy(GUILD_SENIOR);
		if((pos <0) || (pos > eRankPos_Max))
		{
			ASSERTMSG(0, "Load GuildMemberInfo - Set Ranked Member");
			return TRUE;
		}
		m_RankMemberIdx[pos] = pInfo->MemberIdx;
	}
	return TRUE;
}

BOOL CGuild::IsMember(DWORD PlayerIDX)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		if(pInfo->MemberIdx == PlayerIDX)
		{
			return TRUE;
		}
	}
	return FALSE;
}

void CGuild::SetTotalInfo(GUILDINFO* pInfo, GUILDMEMBERINFO* pMemberInfo, int MemberNum)
{
	m_GuildIdx = pInfo->GuildIdx;
	m_GuildLvl = pInfo->GuildLevel;
	for(int i=0; i<MemberNum; ++i)
		AddMember(&pMemberInfo[i]);
	m_GuildLocation = pInfo->MapNum;
	SafeStrCpy(m_MasterName, pInfo->MasterName, MAX_NAME_LENGTH+1);
	SafeStrCpy(m_GuildName, pInfo->GuildName , MAX_GUILD_NAME+1);
	RefreshMember();	
}

void CGuild::RefreshMember()
{
	GAMEIN->GetGuildDlg()->DeleteMemberAll();
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		GAMEIN->GetGuildDlg()->ResetMemberInfo(pInfo->MemberName, pInfo->Rank, pInfo->Memberlvl, pInfo->MemberIdx);	
	}
	GAMEIN->GetGuildDlg()->SetDisableFuncBtn(HERO->GetGuildMemberRank());
}

GUILDMEMBERINFO* CGuild::GetMemberInfo(DWORD PlayerIDX)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		if(pInfo->MemberIdx == PlayerIDX)
		{
			return pInfo;
		}
	}
	return NULL;
}

char* CGuild::GetMemberName(DWORD MemberID)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	while(pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos))
	{
		if(pInfo->MemberIdx == MemberID)
		{
			return pInfo->MemberName;
		}
	}
	return "";
}

DWORD CGuild::GetMemberIdx(int num)
{
	PTRLISTPOS pos = m_MemberList.GetHeadPosition();
	GUILDMEMBERINFO* pInfo = NULL;
	for(int i=0; i<num+1; ++i)
		pInfo = (GUILDMEMBERINFO*)m_MemberList.GetNext(pos);
	if(pInfo == 0)
		return 0;
	else
		return pInfo->MemberIdx;
}

void CGuild::SetLevel(BYTE Level)
{
	m_GuildLvl = Level;
}

BYTE CGuild::GetMaxMemberNum()
{
	if(( m_GuildLvl <= 0) || ( m_GuildLvl > GUILD_5LEVEL))
	{
		char buf[64];
		sprintf(buf, "Wrong Member Num, GuildIdx : %u", m_GuildIdx);
		ASSERTMSG(0, buf);
		return 0;
	}
	return 10 + ( (m_GuildLvl-1) * 5 ); 
}

BOOL CGuild::CanAddMember()
{
	if( GetMemberNum() < GetMaxMemberNum() )
		return TRUE;
	else
		return FALSE;
}

int CGuild::IsVacancy(BYTE ToRank)
{
	int end = 0;
	int start = 0;
	switch(ToRank)
	{
	case GUILD_VICEMASTER:
		{
			start = 0; end = 1;
		}
		break;
	case GUILD_SENIOR:
		{
			start = 1; end = 3;
		}
		break;
	case GUILD_MEMBER:
		return eRankPos_Max;
		
	default:
		ASSERTMSG(0, "IsVancancy Err.");
		return eRankPos_Err;
	}

	int rt = eRankPos_Err;
	for(int i=start; i<end; ++i)
	{
		if( m_RankMemberIdx[i] == 0 )
		{
			return i;
		}
	}
	return rt;
}

BOOL CGuild::ChangeRank(DWORD MemberID, BYTE Rank)
{
	int Pos = IsVacancy(Rank);
	if(Pos == eRankPos_Err)
	{
		ASSERTMSG(0, "Client Change Rank IsVacancy Error");
		return FALSE;
	}
	GUILDMEMBERINFO* pMemberInfo = GetMemberInfo(MemberID);
	if(pMemberInfo == 0)
	{
		ASSERTMSG(0, "Change Rank - No Member Data");
		return FALSE;
	}
	if((Pos <0) || (Pos >eRankPos_Max))
	{
		ASSERTMSG(0, "change rank pos boundary error");
		return FALSE;
	}
	ResetRankMemberInfo(MemberID, pMemberInfo->Rank);
	pMemberInfo->Rank = Rank;
	if(Pos == eRankPos_Max)
		return TRUE;
	m_RankMemberIdx[Pos] = MemberID;
	return TRUE;
}

void CGuild::ResetRankMemberInfo(DWORD MemberIdx, BYTE Rank)
{
	switch(Rank)
	{
	case GUILD_VICEMASTER:
		m_RankMemberIdx[0] = 0; break;
	case GUILD_SENIOR:
		{
			if(m_RankMemberIdx[1] == MemberIdx)
				m_RankMemberIdx[1] = 0;
			else if(m_RankMemberIdx[2] == MemberIdx)
				m_RankMemberIdx[2] = 0;
			else 
				ASSERTMSG(0, "ResetRankMemberInfo() - No Rank");
		}
		break;
	}
}

⌨️ 快捷键说明

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