Files
Sun1602/Server/GuildServer/Guild/Guild.cpp
T
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

747 lines
19 KiB
C++

#include "StdAfx.h"
#include ".\guild.h"
#include ".\guildMember.h"
#include <Struct.h>
#include <PacketStruct_DZ.h>
#include <GuildServer.h>
#include <SerializeStream.h>
#include <GuildRankInfoParser.h>
#include <MaxGuildMemberInfoParser.h>
#include <Guild/GuildManager.h>
#ifdef _NA_20100604_BETTER_DOMINATION_MANAGER
#include "DominationManager.h"
#endif
__IMPL_GUILDPOOL(Guild)
Guild::Guild(void)
{
}
Guild::~Guild(void)
{
}
VOID Guild::InitializeGuild()
{
m_nMasterChangeTime = 0;
ZeroMemory( &m_GuildInfo, sizeof(m_GuildInfo) );
ZeroMemory( m_szGuildNotice, MAX_GUILDNOTICE_LENGTH * sizeof(TCHAR));
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
memset( &m_ChuntingPVPInfo, 0, sizeof(CHUNTING_PVP_INFO) );
#endif
}
VOID Guild::ReleaseGuild()
{
m_GuildRelationEntry.RelationRelease();
}
VOID Guild::SetGuildInfo( BASE_GUILD_INFO & IN rInfo )
{
SerializeBaseGuildInfo( rInfo, SERIALIZE_STORE );
}
GuildMember* Guild::FindMember( CHARGUID CharGuid )
{
GUILD_CORPS_MAP_ITER iter;
for( iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); iter++ )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
GuildMember* pMember = pCorps->FindMember( CharGuid );
if( !pMember ) continue;
return pMember;
}
return NULL;
}
// ??????? ???
GuildMember * Guild::FindMemberByCharName( const TCHAR* ptszCharName )
{
GUILD_CORPS_MAP_ITER iter;
for( iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
GuildMember* pMember = pCorps->FindMember( ptszCharName );
if( pMember ) return pMember;
}
return NULL;
}
RC::eGUILD_RESULT Guild::CanRankUp( OUT GuildRankInfo& RankInfo )
{
BYTE byGuildMaxLevel = GuildRankInfoParser::Instance()->GetGuildMaxLevel();
// ???? ????? ????? ??? ???????, ?? ?????? ?? ??? ????? ?? ?? ????.
if( m_GuildInfo.m_GuildGrade >= byGuildMaxLevel )
return RC::RC_GUILD_MAX_GUILD_RANK;
#ifdef _NA_003923_20120130_GUILD_RENEWAL
const GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo(
static_cast<BYTE>(m_GuildInfo.m_GuildGrade + 1) );
if( !pInfo )
return RC::RC_GUILD_NOT_FOUND_GUILD_INFO_FOR_GRADE;
if( m_GuildInfo.m_GuildCoin < pInfo->need_guild_coin_to_rankup_ )
return RC::RC_GUILD_NOT_ENOUGH_UP;
#else
GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( (eGUILD_GRADE)(m_GuildInfo.m_GuildGrade + 1) );
if( !pInfo )
return RC::RC_GUILD_NOT_FOUND_GUILD_INFO_FOR_GRADE;
//1. UP ???
if( m_GuildInfo.m_UserPoint < pInfo->m_UP )
return RC::RC_GUILD_NOT_ENOUGH_UP;
//2. GP ???
if( m_GuildInfo.m_GuildPoint < pInfo->m_GP )
return RC::RC_GUILD_NOT_ENOUGH_GP;
#endif
// OUT ???
RankInfo = *pInfo;
return RC::RC_GUILD_SUCCESS;
}
VOID Guild::RankUp()
{
BYTE prevGrade = (BYTE)GetGuildGrade();
#ifdef _NA_003923_20120130_GUILD_RENEWAL
const GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo(
static_cast<BYTE>(m_GuildInfo.m_GuildGrade + 1) );
if( !pInfo )
{
SUNLOG( eCRITICAL_LOG, "[Guild::RankUp()] Error!! CurGuildGrade = %d", m_GuildInfo.m_GuildGrade );
return;
}
SetGuildGrade( (eGUILD_GRADE)(GetGuildGrade() + 1) );
SetGuildCoin( m_GuildInfo.m_GuildCoin - pInfo->need_guild_coin_to_rankup_ );
SetGuildGP( m_GuildInfo.m_GuildPoint + pInfo->reward_gp_by_levelup_ );
#else
GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( (eGUILD_GRADE)( m_GuildInfo.m_GuildGrade + 1) );
if( !pInfo )
{
SUNLOG( eCRITICAL_LOG, "[Guild::RankUp()] Error!! CurGuildGrade = %d", m_GuildInfo.m_GuildGrade );
return;
}
SetGuildGrade( (eGUILD_GRADE)(GetGuildGrade() + 1) );
SetGuildUP( m_GuildInfo.m_UserPoint - pInfo->m_UP );
SetGuildGP( m_GuildInfo.m_GuildPoint - pInfo->m_GP );
#endif
GUILDLOG->LogRankUp(this, prevGrade);
}
BOOL Guild::SendDBProxy( MSG_BASE * pMsg, WORD wSize )
{
return TRUE;
}
//??? ???
BOOL Guild::SetMemberDuty(CHARGUID CharGuid, eGUILD_DUTY eDuty)
{
GuildMember* pMember = FindMember(CharGuid);
if(!pMember) { return FALSE; }
eGUILD_DUTY prevDuty = pMember->GetDuty();
pMember->SetDuty(eDuty);
GUILDLOG->LogDutyChange(this, pMember, prevDuty);
return TRUE;
}
BOOL Guild::IsExistMemberDuty( eGUILD_DUTY eDuty, BYTE byCorpsNum )
{
GuildCorps* pCorps = FindCorps( byCorpsNum );
if( !pCorps ) return FALSE;
return FALSE;
}
VOID Guild::SetGuildNotice( const TCHAR* pszGuildNotice )
{
strncpy( m_szGuildNotice, pszGuildNotice, MAX_GUILDNOTICE_LENGTH );
m_szGuildNotice[MAX_GUILDNOTICE_LENGTH] = '\0';
}
VOID Guild::SetGuildName( const TCHAR* pszGuildName )
{
strncpy(m_GuildInfo.m_tszGuildName, pszGuildName, _countof(m_GuildInfo.m_tszGuildName));
m_GuildInfo.m_tszGuildName[_countof(m_GuildInfo.m_tszGuildName) - 1] = '\0';
}
GuildCorps* Guild::FindCorps( BYTE corps_number ) const
{
GUILD_CORPS_MAP::const_iterator iter = m_mapGuildCorps.find(corps_number);
if (iter != m_mapGuildCorps.end())
{
GuildCorps* corps = iter->second;
if (corps != NULL)
{
return corps;
}
}
return NULL;
}
WORD Guild::GetMemberCount()
{
WORD wCount = 0;
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
wCount += pCorps->GetMemberCount();
}
return wCount;
}
//DB???? ?????? ??????? ?? ??? ???? ???????.
GuildCorps* Guild::CreateCorps( BYTE byCorpsNum )
{
GuildCorps* pCorps = FindCorps( byCorpsNum );
if( pCorps )
{
SUNLOG( eCRITICAL_LOG, "[Guild::CreateCorps] Already Corps Create, GuildGuid = %u, CoprsNum = %d", GetGuildGuid(), byCorpsNum );
return NULL;
}
GuildCorps* pNewCorps = new GuildCorps;
pNewCorps->SetNumber( byCorpsNum );
m_mapGuildCorps.insert( std::make_pair( byCorpsNum, pNewCorps ) );
return pNewCorps;
}
VOID Guild::DestroyCorps( BYTE byCorpsNum )
{
GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.find( byCorpsNum );
if( iter != m_mapGuildCorps.end() )
{
GuildCorps* pCorps = iter->second;
if( pCorps ) delete pCorps;
m_mapGuildCorps.erase( iter );
}
}
//???? ???? ?????? ?????? ???????. ( ?????????? ?????? ???????. )
GuildCorps* Guild::CreateCorpsBySequence()
{
BYTE byCorpsNum = GetEmptyCorpsNumBySequence();
if( byCorpsNum == 0 )
return NULL;
return CreateCorps( byCorpsNum );
}
//?? ????? ???? ????? ????? ?? ??? ?????? ????? ???????.
//???? ??? ?????? ???? ???? ?????? 0?? ???????.
//?? ??????? ???? ?????? ????? ???? ?? ????.
BYTE Guild::GetEmptyCorpsNumBySequence()
{
#ifdef _NA_003923_20120130_GUILD_RENEWAL
const GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( GetGuildGrade() );
if( !pInfo ) return 0;
return 0;
#else
GuildRankInfo* pInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( GetGuildGrade() );
if( !pInfo ) return 0;
for( BYTE i = 1; i < pInfo->m_byCreateCopsCount; i++ )
{
GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.find( i );
if( iter != m_mapGuildCorps.end() )
continue;
return i;
}
return 0;
#endif
}
GuildMember* Guild::FindMaster() const
{
GuildCorps* corps = FindCorps(0);
if (corps == NULL)
{
return NULL;
}
return corps->FindCommander();
}
const TCHAR* Guild::GetMasterCharName()
{
GuildMember* pGuildMaster = FindMaster();
if(!pGuildMaster)
return NULL;
return pGuildMaster->GetCharName();
}
GuildMember* Guild::FindMemberByDuty(eGUILD_DUTY eDuty)
{
GUILD_CORPS_MAP_ITER iter;
for( iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if(pCorps)
{
GuildMember* Member = pCorps->FindMemberByDuty(eDuty);
if(Member) return Member;
else continue;
}
}
return NULL;
}
VOID Guild::CreateGuild( GUILDGUID GuidGuid, const TCHAR* tszGuildName, BYTE byCorpsNum, CHARGUID MasterCharGuid, const TCHAR* tszMasterCharName, eGUILD_DUTY MasterDuty,
BYTE byMasterClass, LEVELTYPE MasterLevel, BYTE byChaoState, INT64 nGuildPanaltyTime, INT64 nDestroyRequestTime, INT64 nMasterChangeTime )
{
InitializeGuild();
SetGuildGuid( GuidGuid );
SetGuildName( tszGuildName );
SetGuildGrade( eGUILD_GRADE_LEGION );
SetGuildGP( 0 );
SetGuildUP( 0 );
SetPenaltyTime( nGuildPanaltyTime );
SetDestroyTime( nDestroyRequestTime );
SetMasterChangeTime( nMasterChangeTime );
GuildCorps* pCorps = CreateCorps( byCorpsNum ); //???? ???? ????
if( !pCorps )
{
SUNLOG( eCRITICAL_LOG, "[Guild::CreateGuild] Corps Create Fail, GuildGuid = %u, MasterCharGuid = %u", GuidGuid, MasterCharGuid );
return;
}
GuildMember* pMaster = pCorps->CreateMember( MasterCharGuid, tszMasterCharName, MasterDuty, byMasterClass, MasterLevel, byChaoState, TRUE );
if( !pMaster )
{
SUNLOG( eCRITICAL_LOG, "[Guild::CreateGuild] Corps Create GuildMaster, GuildGuid = %u, MasterCharGuid = %u", GuidGuid, MasterCharGuid );
return;
}
}
VOID Guild::Destroy()
{
GUILD_CORPS_MAP_ITER iter;
for( iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( pCorps )
{
pCorps->Destroy();
delete pCorps;
}
}
m_mapGuildCorps.clear();
}
BYTE Guild::GetEmptyCommanderInfo( BYTE* pEmptyCommderInfo )
{
BYTE byCount = 0;
GUILD_CORPS_MAP_ITER iter;
for( iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( pCorps && !pCorps->FindCommander() )
{
pEmptyCommderInfo[byCount] = pCorps->GetNumber();
byCount++;
if( byCount >= MAX_GUILD_CORPS_NUM )
{
SUNLOG( eCRITICAL_LOG, "[Guild::GetEmptyCommanderInfo] Overflow CorpsInfo, GuildGuid = %u", GetGuildGuid() );
return 0;
}
}
}
return byCount;
}
//??? ????
RC::eGUILD_RESULT Guild::JoinGuild( BYTE byCorpsNum, CHARGUID CharGuid, const TCHAR* tszCharName, eGUILD_DUTY Duty, BYTE byClass, LEVELTYPE Level, BYTE byChaoState )
{
GuildCorps* pCorps = FindCorps(byCorpsNum);
if( !pCorps )
{
SUNLOG( eCRITICAL_LOG, "[Guild::JoinGuild] Corps(%d) Not Exist", byCorpsNum );
return RC::RC_GUILD_CORPS_NOT_FOUND;
}
//???? ?????? ???? ???????? ???? ???? ?????? ?????? ???????.
GuildMember* pMember = pCorps->CreateMember( CharGuid, tszCharName, Duty, byClass, Level, byChaoState, TRUE );
if( !pMember ) return RC::RC_GUILD_FAILED;
return RC::RC_GUILD_SUCCESS;
}
RC::eGUILD_RESULT Guild::LeaveGuild( CHARGUID CharGuid )
{
GuildMember* pMember = FindMember( CharGuid );
if( !pMember ) return RC::RC_GUILD_NOT_GUILD_MEMBER;
GuildCorps* pCorps = FindCorps( pMember->GetCorpsNumber() );
if( !pCorps ) return RC::RC_GUILD_CORPS_NOT_FOUND;
pCorps->DestroyMember( CharGuid );
return RC::RC_GUILD_SUCCESS;
}
RC::eGUILD_RESULT Guild::ChangeCorps( CHARGUID CharGuid, BYTE byNewCorpsNum )
{
GuildMember* pMember = FindMember( CharGuid );
if( !pMember )
return RC::RC_GUILD_NOT_GUILD_MEMBER;
//???????? ????? ??????????? ??????.
if( byNewCorpsNum == pMember->GetCorpsNumber() )
return RC::RC_GUILD_SUCCESS;
GuildCorps* pOldCorps = FindCorps( pMember->GetCorpsNumber() );
if( !pOldCorps )
return RC::RC_GUILD_CORPS_NOT_FOUND;
GuildCorps* pNewCorps = FindCorps( byNewCorpsNum );
if( !pNewCorps )
return RC::RC_GUILD_CORPS_NOT_FOUND;
pOldCorps->DeleteMember( CharGuid );
pNewCorps->InsertMember( pMember );
pMember->SetCorpsNumber( byNewCorpsNum );
return RC::RC_GUILD_SUCCESS;
}
// ????? ? ?????.
BOOL Guild::IsFullCorpsMemberByDuty( BYTE byCorpsNum, eGUILD_DUTY Duty )
{
GuildCorps* pCorps = FindCorps( byCorpsNum );
if( !pCorps )
{
SUNLOG( eCRITICAL_LOG, "[Guild::IsFullMemberByCorps] Not Exist Corps, Corps = %d, Duty = %d ", byCorpsNum, Duty );
return TRUE;
}
BYTE byCurCount = pCorps->GetMemberCountByDuty( Duty );
BYTE byMaxCount = MaxGuildMemberInfoParser::Instance()->GetMaxCorpsMemberByDuty( GetGuildGrade(), byCorpsNum, Duty );
if( byCurCount >= byMaxCount )
return TRUE;
return FALSE;
}
BOOL Guild::CreateRearCamp( BYTE byCorpsNum )
{
GuildCorps* pCorps = FindCorps( byCorpsNum );
if( !pCorps ) return FALSE;
pCorps->SetRearCamp( TRUE );
return TRUE;
}
BOOL Guild::DestroyRearCamp( BYTE byCorpsNum )
{
GuildCorps* pCorps = FindCorps( byCorpsNum );
if( !pCorps ) return FALSE;
pCorps->SetRearCamp( FALSE );
return TRUE;
}
//????? ??? ????? ???? ???.
RC::eGUILD_RESULT Guild::DestroyMember( CHARGUID CharGuid )
{
GuildMember* pMember = FindMember( CharGuid );
if( !pMember ) return RC::RC_GUILD_NOT_GUILD_MEMBER;
GuildCorps* pCorps = FindCorps( pMember->GetCorpsNumber() );
if( !pCorps ) return RC::RC_GUILD_CORPS_NOT_FOUND;
pCorps->DestroyMember( CharGuid );
return RC::RC_GUILD_SUCCESS;
}
VOID Guild::SerializeBaseGuildInfo( INOUT BASE_GUILD_INFO& rInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
rInfo.m_GuildGuid = GetGuildGuid();
rInfo.m_GuildGrade = (BYTE)GetGuildGrade();
memcpy( rInfo.m_tszGuildName, GetGuildName(), MAX_GUILDNAME_LENGTH*sizeof(TCHAR) );
}
else
{
SetGuildGuid( rInfo.m_GuildGuid );
SetGuildGrade( (eGUILD_GRADE)rInfo.m_GuildGrade );
SetGuildName( rInfo.m_tszGuildName );
}
}
VOID Guild::SerializeGameGuildInfo( INOUT GAME_GUILD_INFO& rInfo, eSERIALIZE se )
{
SerializeBaseGuildInfo( rInfo, se );
if( se == SERIALIZE_LOAD )
{
AcquireGuildMark(rInfo.m_BackGroundIdx, rInfo.m_PatternIdx);
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
rInfo.m_ChuntingPVPInfo = m_ChuntingPVPInfo;
#endif
}
else
{
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
m_ChuntingPVPInfo = rInfo.m_ChuntingPVPInfo;
#endif
}
}
VOID Guild::SerializeGuildInfo( INOUT GUILD_INFO& rInfo, eSERIALIZE se )
{
SerializeGameGuildInfo( rInfo, se );
if( se == SERIALIZE_LOAD )
{
rInfo.m_GuildPoint = GetGuildGP();
rInfo.m_UserPoint = GetGuildUP();
#ifdef _NA_003923_20120130_GUILD_RENEWAL
rInfo.m_GuildCoin = GetGuildCoin();
rInfo.m_GuildGP = m_GuildInfo.m_GuildGP;
#endif
rInfo.m_GuildDestroyWaitFlag = CheckGuildDeleteState();
rInfo.m_GuildPenaltyTime = GetPenaltyTime();
rInfo.m_GuildDestroyTime = GetDestroyTime();
AcquireGuildMark(rInfo.m_BackGroundIdx, rInfo.m_PatternIdx);
rInfo.m_nMasterChangeTime = GetMasterChangeTime();
#ifdef _NA_20100604_BETTER_DOMINATION_MANAGER
rInfo.m_DominationMapCount =
DominationManager::Instance()->NumberOfDominationAreaByGuild(rInfo.m_GuildGuid);
rInfo.m_DominationJoinCount = GetDominationJoinCount();
rInfo.m_DominationDefenseCount = GetDominationDefenseCount();
rInfo.m_DominationHuntingCount = GetDominationHuntingCount();
#endif
}
else
{
SetGuildGP( rInfo.m_GuildPoint );
SetGuildUP( rInfo.m_UserPoint );
#ifdef _NA_003923_20120130_GUILD_RENEWAL
SetGuildCoin( rInfo.m_GuildCoin );
m_GuildInfo.m_GuildGP = rInfo.m_GuildGP;
#endif
SetDeleteGuildState(rInfo.m_GuildDestroyWaitFlag);
SetPenaltyTime(rInfo.m_GuildPenaltyTime);
SetDestroyTime(rInfo.m_GuildDestroyTime);
RegisterGuildMark(rInfo.m_BackGroundIdx, rInfo.m_PatternIdx);
SetMasterChangeTime( rInfo.m_nMasterChangeTime );
#ifdef _NA_20100604_BETTER_DOMINATION_MANAGER
SetDominationJointCount(rInfo.m_DominationJoinCount);
SetDominationDefenseCount(rInfo.m_DominationDefenseCount);
SetDominationHuntingCount(rInfo.m_DominationHuntingCount);
#endif
}
}
VOID Guild::SerializeCorpsInfo( INOUT GUILD_CORPS_TOTAL_INFO& rInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
ZeroMemory( &rInfo, sizeof(rInfo) );
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
BYTE byCorpsNum = pCorps->GetNumber();
rInfo.m_CorpsInfo[byCorpsNum].m_bCreate = TRUE;
rInfo.m_CorpsInfo[byCorpsNum].m_byCorpsNum = byCorpsNum;
rInfo.m_CorpsInfo[byCorpsNum].m_bRearCamp = pCorps->IsExistRearCamp();
}
}
else //STORE
{
for( int i = 0 ; i < MAX_GUILD_CORPS_NUM; i++ )
{
if( rInfo.m_CorpsInfo[i].m_bCreate )
{
GuildCorps* pCorps = FindCorps( i );
if( pCorps )
{
pCorps->SetRearCamp( rInfo.m_CorpsInfo[i].m_bRearCamp );
}
else
{
//DB???? ???????? ???? ?????? ??????? ???? ??????...
GuildCorps* pNewCorps = CreateCorps( rInfo.m_CorpsInfo[i].m_byCorpsNum );
if( pNewCorps ) pNewCorps->SetRearCamp( rInfo.m_CorpsInfo[i].m_bRearCamp );
}
}
}
}
}
VOID Guild::SerializeBaseMemberTotalInfo( INOUT BASE_GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
rInfo.m_byMemberCount = 0;
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
pCorps->SerializeBaseMemberTotalInfo( rInfo, se );
}
}
else
{
SUNLOG( eCRITICAL_LOG, "[Guild::SerializeMemberInfo] ?????" );
}
}
VOID Guild::SerializeMemberTotalInfo( INOUT GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
rInfo.m_byMemberCount = 0;
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
pCorps->SerializeMemberTotalInfo( rInfo, se );
}
}
else
{
//????? ???? ??? ?????? ???? ??????? ???.
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
pCorps->SerializeMemberTotalInfo( rInfo, se );
}
}
}
VOID Guild::SerializeServerMemberTotalInfo( INOUT SERVER_GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se )
{
if( se == SERIALIZE_LOAD )
{
rInfo.m_byMemberCount = 0;
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
pCorps->SerializeServerMemberTotalInfo( rInfo, se );
}
}
else
{
//????? ???? ??? ?????? ???? ??????? ???.
for( GUILD_CORPS_MAP_ITER iter = m_mapGuildCorps.begin(); iter != m_mapGuildCorps.end(); ++iter )
{
GuildCorps* pCorps = iter->second;
if( !pCorps ) continue;
pCorps->SerializeServerMemberTotalInfo( rInfo, se );
}
}
}
BOOL Guild::GetBaseMemberInfo( CHARGUID CharGuid, OUT BASE_GUILD_MEMBER_INFO& info )
{
GuildMember* pMember = FindMember( CharGuid );
if( !pMember ) return FALSE;
pMember->SerializeBaseMemberInfo( info, SERIALIZE_LOAD );
return TRUE;
}
BOOL Guild::GetMemberInfo( CHARGUID CharGuid, OUT GUILD_MEMBER_INFO& info )
{
GuildMember* pMember = FindMember( CharGuid );
if( !pMember ) return FALSE;
pMember->SerializeMemberInfo( info, SERIALIZE_LOAD );
return TRUE;
}
VOID Guild::GetWorldGuildInfo( WORLD_GUILD_INFO& rInfo )
{
SerializeBaseGuildInfo( rInfo, SERIALIZE_LOAD );
CopyMemory( rInfo.m_szGuildNotice, GetGuildNotice(), MAX_GUILDNOTICE_LENGTH * sizeof(TCHAR));
}
BOOL Guild::IsFullMember()
{
#ifdef _NA_003923_20120130_GUILD_RENEWAL
const GuildRankInfo* pGuildInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( m_GuildInfo.m_GuildGrade );
if( !pGuildInfo ) return FALSE;
return ( GetMemberCount() >= pGuildInfo->max_member_count_ );
#else
GuildRankInfo* pGuildInfo = GuildRankInfoParser::Instance()->FindGuildRankInfo( (eGUILD_GRADE)m_GuildInfo.m_GuildGrade );
if( !pGuildInfo ) return FALSE;
return ( GetMemberCount() >= pGuildInfo->m_wMaxMember );
#endif
}
VOID Guild::ChangeGuildName( const TCHAR* pszGuildName )
{
util::GUILDNAMECOPY(m_GuildInfo.m_tszGuildName, pszGuildName);
}
int Guild::GetRelationGuid(STLX_VECTOR<GUILDGUID>& vGuildGuid, eGUILD_RELATION RelationType)
{
int size = m_GuildRelationEntry.GetRelationCount(RelationType);
vGuildGuid.reserve(size);
return m_GuildRelationEntry.GetRelationGuid(vGuildGuid,RelationType);
}