📄 gameguildmanager.cpp
字号:
#include "StdAfx.h"
#include ".\gameguildmanager.h"
#include ".\GameGuild.h"
#include ".\Player.h"
#include <PacketStruct_GZ.h>
GameGuildManager g_GameGuildManager;
GameGuildManager::GameGuildManager(void)
{
m_GuildHash.Initialize(MAX_GUILD_POOL_NUM);
}
GameGuildManager::~GameGuildManager(void)
{
Release();
}
VOID GameGuildManager::Release()
{
for( GUILD_HASH_ITR it = m_GuildHash.begin() ; it != m_GuildHash.end() ; ++it )
{
(*it)->Destroy();
GameGuild::FREE( (*it) );
}
}
BOOL GameGuildManager::ValidPlayer( Player * pPlayer )
{
return TRUE;
}
RC::eGUILD_RESULT GameGuildManager::SelectGuildInfo( Player * pPlayer, PACKET_FOR_GUILD & OUT rGuildInfo )
{
if( !ValidPlayer(pPlayer) ) return RC::RC_GUILD_INVALID_STATE;
GUILDGUID GuildGuid = pPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 == GuildGuid )
return RC::RC_GUILD_CANNOT_SELECT_GUILD_STATE;
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild )
{
MSG_GZ_GUILD_SELECT_SYN ToGuildMsg;
ToGuildMsg.m_GuildGuid = GuildGuid;
ToGuildMsg.m_CharGuid = pPlayer->GetCharGuid();
if( FALSE == pPlayer->SendToGuildServer( &ToGuildMsg, sizeof(ToGuildMsg) ) )
{
return RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
return RC::RC_GUILD_NEED_SELECT;
}
pGuild->SelectInfo( rGuildInfo );
return RC::RC_GUILD_SUCCESS;
}
//1. 辨靛付胶磐啊 促弗 辨靛俊 加秦乐瘤 臼酒具 茄促
//2. 辨靛付胶磐狼 饭骇捞 20捞惑捞绢具 茄促
//3. 辨靛付胶磐啊 100父窍烙阑 家蜡窍绊 乐绢具 茄促
RC::eGUILD_RESULT GameGuildManager::CreateGuild( Player * pPlayer, const TCHAR * tszGuildName )
{
if( !ValidPlayer(pPlayer) ) return RC::RC_GUILD_INVALID_STATE;
GUILDGUID GuildGuid = pPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 != GuildGuid )
return RC::RC_GUILD_CANNOT_CREAT_GUILD_STATE;
if( pPlayer->GetLevel() < CREATE_GUILD_LIMIT_LEVEL )
return RC::RC_GUILD_CANNOT_CREAT_LEVEL_STATE;
if( pPlayer->GetMoney() < CREATE_GUILD_LIMIT_MONEY )
return RC::RC_GUILD_CANNOT_CREAT_MONEY_STATE;
MSG_GZ_GUILD_CREATE_SYN msg;
memcpy( msg.m_tszGuildName, tszGuildName, MAX_GUILDNAME_LENGTH*sizeof(TCHAR) );
msg.m_MasterCharGuid = pPlayer->GetCharGuid();
memcpy( msg.m_tszMasterCharName, pPlayer->GetCharName(), MAX_CHARNAME_LENGTH*sizeof(TCHAR) );
msg.m_byMasterClass = pPlayer->GetCharType();
msg.m_MasterLV = pPlayer->GetLevel();
if( FALSE == pPlayer->SendToGuildServer( &msg, sizeof(msg) ) )
{
return RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
// 固府 家葛厚侩 捣 瞒皑
pPlayer->MinusMoney( CREATE_GUILD_LIMIT_MONEY );
return RC::RC_GUILD_SUCCESS;
}
// 1. 辨靛秦魂阑 脚没茄 捞啊 辨靛付胶磐具 茄促
// 2. 泅犁 辨靛郴俊 辨靛盔捞 辨靛付胶磐 1疙挥捞绢具 茄促
// 3. 傍己傈俊辑 铰府窍咯 荐己阑窍绊 乐瘤 臼篮 辨靛咯具 茄促.
RC::eGUILD_RESULT GameGuildManager::DestroyGuild( Player * pPlayer )
{
if( !ValidPlayer(pPlayer) ) return RC::RC_GUILD_INVALID_STATE;
GUILDGUID GuildGuid = pPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 == GuildGuid )
return RC::RC_GUILD_CANNOT_DESTROY_STATE;
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return RC::RC_GUILD_INVALID_STATE;
if( pGuild->GetMasterCharGuid() != pPlayer->GetCharGuid() )
return RC::RC_GUILD_CANNOT_DESTROY_NOT_MASTER_STATE;
if( 1 != pGuild->GetMemberNum() )
return RC::RC_GUILD_CANNOT_DESTROY_EXIST_MEMBER_STATE;
MSG_GZ_GUILD_DESTROY_SYN msg;
msg.m_GuildGuid = GuildGuid;
msg.m_MasterCharGuid = pPlayer->GetCharGuid();
if( FALSE == pPlayer->SendToGuildServer( &msg, sizeof(msg) ) )
{
return RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
return RC::RC_GUILD_SUCCESS;
}
// 1. 辨靛啊涝狼 鼻茄捞 乐绰 辨靛盔
// 2. 辨靛俊 啊涝且 蜡历啊 促弗 辨靛俊 啊涝登绢 乐瘤 臼酒具 茄促
// 3. 秦寸 珐农狼 辨靛弥措啊涝牢盔捞 盲况柳 惑怕啊 酒聪绢具 茄促.
RC::eGUILD_RESULT GameGuildManager::CanJoin( Player * pHostPlayer, Player * pReceiver )
{
GUILDGUID GuildGuid = pHostPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 == GuildGuid )
return RC::RC_GUILD_CANNOT_INVITE_STATE;
GUILDGUID GuildGuid_Receiver = pReceiver->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 != GuildGuid_Receiver )
return RC::RC_GUILD_CANNOT_INVITE_STATE;
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return RC::RC_GUILD_INVALID_STATE;
if( !pGuild->HaveRights( pHostPlayer, eGUILD_RIGHTS_INVITE ) )
return RC::RC_GUILD_DONT_HAVE_RIGHTS_STATE;
if( pGuild->IsFullMember() )
return RC::RC_GUILD_FULL_MEMBER_STATE;
return RC::RC_GUILD_SUCCESS;
}
RC::eGUILD_RESULT GameGuildManager::InviteMember( Player * pHostPlayer, Player * pReceiver )
{
RC::eGUILD_RESULT rt = CanJoin( pHostPlayer, pReceiver );
if( rt != RC::RC_GUILD_SUCCESS ) return rt;
pReceiver->SetInvitationHostKey( pHostPlayer->GetObjectKey() );
return RC::RC_GUILD_SUCCESS;
}
RC::eGUILD_RESULT GameGuildManager::AnswerMember( Player * pHostPlayer, Player * pReceiver, BOOL bAccept )
{
RC::eGUILD_RESULT rt = CanJoin( pHostPlayer, pReceiver );
if( rt != RC::RC_GUILD_SUCCESS ) return rt;
if( bAccept )
{
GUILDGUID GuildGuid = pHostPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
MSG_GZ_GUILD_JOIN_SYN msg;
msg.m_GuildGuid = GuildGuid;
msg.m_MasterCharGuid = pHostPlayer->GetCharGuid();
msg.m_CharGuid = pReceiver->GetCharGuid();
memcpy( msg.m_tszCharName, pReceiver->GetCharName(), MAX_CHARNAME_LENGTH*sizeof(TCHAR) );
msg.m_byClass = pReceiver->GetCharType();
msg.m_CharLV = pReceiver->GetLevel();
if( FALSE == pReceiver->SendToGuildServer( &msg, sizeof(msg) ) )
{
return RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
}
else
{
pReceiver->SetInvitationHostKey( 0 );
}
return RC::RC_GUILD_SUCCESS;
}
RC::eGUILD_RESULT GameGuildManager::WithdrawMember( Player * pPlayer )
{
GUILDGUID GuildGuid = pPlayer->SCPlayer::GetCharInfo()->m_GuildGuid;
if( 0 == GuildGuid )
return RC::RC_GUILD_CANNOT_WITHDRAW_STATE;
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return RC::RC_GUILD_INVALID_STATE;
if( !pGuild->HaveRights( pPlayer, eGUILD_RIGHTS_WITHDRAW ) )
return RC::RC_GUILD_DONT_HAVE_RIGHTS_STATE;
MSG_GZ_GUILD_WITHDRAW_SYN msg;
msg.m_GuildGuid = pGuild->GetGuildGuid();
msg.m_CharGuid = pPlayer->GetCharGuid();
if( FALSE == pPlayer->SendToGuildServer( &msg, sizeof(msg) ) )
{
return RC::RC_GUILD_DISCONNECTED_GUILD_SERVER;
}
return RC::RC_GUILD_SUCCESS;
}
VOID GameGuildManager::OnAddGuild( const BASE_GUILD_INFO & IN rInfo, const GUILD_MEMBER_INFO * pMemberInfo, BYTE MemberCount )
{
GameGuild * pGuild = NULL;
if( NULL != (pGuild = FindGuild(rInfo.m_GuildGuid)) )
{
RemoveGuild( pGuild->GetGuildGuid() );
pGuild->Destroy();
GameGuild::FREE( pGuild );
pGuild = NULL;
}
pGuild = GameGuild::ALLOC();
pGuild->Create( rInfo, pMemberInfo, MemberCount );
AddGuild( pGuild, pGuild->GetGuildGuid() );
}
VOID GameGuildManager::OnDestroyGuild( GUILDGUID GuildGuid )
{
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return;
RemoveGuild( pGuild->GetGuildGuid() );
pGuild->Destroy();
GameGuild::FREE( pGuild );
pGuild = NULL;
}
VOID GameGuildManager::OnWithdrawGuild( GUILDGUID GuildGuid, CHARGUID CharGuid )
{
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return;
pGuild->Withdraw(CharGuid);
}
VOID GameGuildManager::OnJoinGuild( GUILDGUID GuildGuid, const GUILD_MEMBER_INFO & IN rMemberInfo )
{
GameGuild * pGuild = FindGuild( GuildGuid );
if( !pGuild ) return;
pGuild->Join(rMemberInfo);
}
VOID GameGuildManager::DisplayerGuildInfo()
{
DWORD dwNum = 0;
for( GUILD_HASH_ITR it = m_GuildHash.begin() ; it != m_GuildHash.end() ; ++it )
{
dwNum += (*it)->GetMemberNum();
}
DISPMSG( "Guild : %u, GuildMember : %u\n", m_GuildHash.GetDataNum(), dwNum );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -