📄 guild.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 + -