📄 player_party.cpp
字号:
#include "stdafx.h"
#include "Player.h"
#include "Party.h"
#include "PartyManager.h"
#include "PartyState.h"
#include <Protocol_AG.h>
#include <PacketStruct_AG.h>
#include "GameRoom.h"
RC::ePARTY_RESULT Player::JoinParty( WORD wPartyKey )
{
// 可廉滚葛靛(捧疙葛靛)老 版快俊绰 颇萍俊 家加登瘤 臼绰促.
if( IsStatus(eCHAR_STATE_ETC_OBSERVER) )
{
return RC::RC_PARTY_PLAYER_OBSERVER_MODE;
}
// 捞固 促弗 颇萍俊 啊涝吝牢瘤 眉农茄促.
if( m_PartyState.IsMember() )
{
SUNLOG( eFULL_LOG, "[Player::JoinParty] The Player Already is the member of another party " );
return RC::RC_PARTY_ALREADY_IS_MEMBEROFPARTY;
}
if( ( m_eGameZoneState & ePRS_AT_ROOM) != ePRS_AT_ROOM || !m_pGameZone )
{
SUNLOG( eCRITICAL_LOG, "[Player::JoinParty] Zone is NULL! " );
return RC::RC_PARTY_INVALID_ROOMTYPE;
}
GameRoom *pGameRoom = (GameRoom*)m_pGameZone;
// 颇萍甫 茫绰促.
Party *pParty = PartyManager::Instance()->FindParty( wPartyKey );
// 颇萍啊 绝促搁
if( !pParty )
{
// 货酚霸 颇萍甫 搬己茄促.
pParty = PartyManager::Instance()->AllocParty();
pParty->Init( pGameRoom->GetMasterUserKey() );
pParty->Join( this );
SUNLOG( eMIDDLE_LOG, "[Player::JoinParty] New AllocParty!!" );
}
else
{
// 颇萍俊 啊涝
pParty->Join( this );
}
// 促弗 颇萍盔甸俊霸 货肺 啊涝沁澜阑 舅赴促.
MSG_CG_PARTY_MEMBER_JOIN_BRD PartyJoinMsg;
PartyJoinMsg.m_byCategory = CG_PARTY;
PartyJoinMsg.m_byProtocol = CG_PARTY_MEMBER_JOIN_BRD;
PartyJoinMsg.m_NewMemberInfo.m_dwObjKey = GetObjectKey();
strncpy( PartyJoinMsg.m_NewMemberInfo.m_szCharName, GetCharName(), MAX_CHARNAME_LENGTH );
PartyJoinMsg.m_NewMemberInfo.m_wLevel = GetLevel();
PartyJoinMsg.m_NewMemberInfo.m_dwHP = GetHP();
PartyJoinMsg.m_NewMemberInfo.m_bMaster = m_PartyState.IsMaster();
pParty->SendPacketExceptMe( GetObjectKey(), &PartyJoinMsg, sizeof(PartyJoinMsg) );
// 夯牢俊霸 颇萍盔 傈眉 沥焊甫 舅妨霖促.
MSG_CG_PARTY_MEMBER_INFO_CMD PartyInfoMsg;
PartyInfoMsg.m_byCategory = CG_PARTY;
PartyInfoMsg.m_byProtocol = CG_PARTY_MEMBER_INFO_CMD;
PartyInfoMsg.m_dwTargetKeyOfParty = pParty->GetTargetObjKeyOfParty();
PartyInfoMsg.m_byMemberNum = (BYTE)(pParty->GetMemberNum());
pParty->GetMemberInfoAll( &PartyInfoMsg.m_MemberInfo[0] );
SendPacket( &PartyInfoMsg, sizeof(PartyInfoMsg) );
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::LeaveParty()
{
// 颇萍甫 栋朝 荐 乐绰 炼扒牢瘤 眉农
RC::ePARTY_RESULT rcResult = CanLeaveParty();
if( rcResult != RC::RC_PARTY_SUCCESS )
{
return rcResult;
}
// 颇萍甫 茫绰促.
Party *pParty = PartyManager::Instance()->FindParty( m_PartyState.GetPartyKey() );
// 颇萍呕硼 荤角阑 夯牢力寇窍绊 颇萍盔甸俊霸 舅妨霖促.
MSG_CG_PARTY_LEAVE_COMPLETE_BRD PartyLeaveMsg;
PartyLeaveMsg.m_byCategory = CG_PARTY;
PartyLeaveMsg.m_byProtocol = CG_PARTY_LEAVE_COMPLETE_BRD;
PartyLeaveMsg.m_dwObjKey = GetObjectKey();
pParty->SendPacketExceptMe( GetObjectKey(), &PartyLeaveMsg, sizeof(PartyLeaveMsg) );
// 颇萍俊辑 猾促.
pParty->Leave( GetObjectKey() );
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::CanLeaveParty()
{
// 颇萍俊 啊涝沁绰瘤 眉农茄促.
if( !m_PartyState.IsMember() )
{
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
}
if( ( m_eGameZoneState & ePRS_AT_ROOM ) != ePRS_AT_ROOM || !m_pGameZone )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanLeaveParty] Zone is NULL! " );
return RC::RC_PARTY_INVALID_ROOMTYPE;
}
// 颇萍甫 茫绰促.
Party *pParty = PartyManager::Instance()->FindParty( GetPartyState().GetPartyKey() );
if( !pParty )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanLeaveParty] Can't Find Party " );
return RC::RC_PARTY_PARTY_NOTEXIST;
}
// 呕硼窍妨绰 某腐磐啊 颇萍盔捞 酒聪促.
Player *pMember = pParty->GetMemberInfo( GetObjectKey() );
if( !pMember )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanLeaveParty] The Player isn't the member of a Party " );
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
}
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::DestroyParty( BOOL bSendPacket )
{
// 颇萍俊 啊涝沁绰瘤 眉农茄促.
if( !m_PartyState.IsMember() )
{
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
}
// 颇萍厘捞 酒聪促.
if( !GetPartyState().IsMaster() )
{
return RC::RC_PARTY_ISNOT_MASTEROFPARTY;
}
// 颇萍甫 昏力茄促.
BOOL bRemove = PartyManager::Instance()->RemoveParty( m_PartyState.GetPartyKey(), bSendPacket );
if( bRemove )
{
return RC::RC_PARTY_SUCCESS;
}
else
{
SUNLOG( eCRITICAL_LOG, "[Player::DestroyParty] Can't Remove Party " );
return RC::RC_PARTY_UNKNOWN_REASON;
}
}
Player* Player::ChangeMaster( DWORD dwObjKey, RC::ePARTY_RESULT & OUT rcReturnOut )
{
Player *pNextMaster = NULL;
rcReturnOut = RC::RC_PARTY_SUCCESS;
// 颇萍厘捞 酒聪促.
if( !GetPartyState().IsMaster() )
{
rcReturnOut = RC::RC_PARTY_ISNOT_MASTEROFPARTY;
return NULL;
}
// 颇萍啊 粮犁窍瘤 臼绰促.
Party *pParty = PartyManager::Instance()->FindParty( GetPartyState().GetPartyKey() );
if( !pParty )
{
rcReturnOut = RC::RC_PARTY_PARTY_NOTEXIST;
return NULL;
}
// 颇萍厘栏肺 烙疙窍妨绰 某腐磐啊 颇萍盔捞 酒聪促.
pNextMaster = pParty->GetMemberInfo( dwObjKey );
if( !pNextMaster )
{
rcReturnOut = RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
return NULL;
}
if( m_eGameZoneState != ePRS_AT_VILLAGE )
{
// 颇萍厘阑 函版茄促.
RC::ePARTY_RESULT rcResult = PartyManager::Instance()->ChangeMaster( GetPartyState().GetPartyKey(), dwObjKey );
if( rcResult != RC::RC_PARTY_SUCCESS )
{
rcReturnOut = rcResult;
return NULL;
}
}
else
{
rcReturnOut = RC::RC_PARTY_INVALID_ROOMTYPE;
}
return pNextMaster;
}
RC::ePARTY_RESULT Player::CanPurgeFromParty( DWORD dwObjKey )
{
// 颇萍厘捞 酒聪促.
if( !GetPartyState().IsMaster() )
{
return RC::RC_PARTY_ISNOT_MASTEROFPARTY;
}
// 颇萍啊 粮犁窍瘤 臼绰促.
Party *pParty = PartyManager::Instance()->FindParty( GetPartyState().GetPartyKey() );
if( !pParty )
{
return RC::RC_PARTY_PARTY_NOTEXIST;
}
// 眠规窍妨绰 某腐磐啊 颇萍盔捞 酒聪促.
Player *pMember = pParty->GetMemberInfo( dwObjKey );
if( !pMember )
{
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
}
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::CanInvite()
{
// 颇萍厘捞 酒聪促.
if( !GetPartyState().IsMaster() )
{
return RC::RC_PARTY_ISNOT_MASTEROFPARTY;
}
// 付阑肺 唱客滚赴 版快
if( m_eGameZoneState == ePRS_AT_VILLAGE || m_eGameZoneState == ePRS_AT_MISSION )
{
return RC::RC_PARTY_INVALID_ROOMTYPE;
}
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::CanInvited()
{
// 捞固 颇萍俊 家加等 版快
if( m_PartyState.IsMember() )
{
return RC::RC_PARTY_ALREADY_IS_MEMBEROFPARTY;
}
// 付阑俊 绝绰 版快
if( m_eGameZoneState != ePRS_AT_VILLAGE )
{
return RC::RC_PARTY_INVALID_ROOMTYPE;
}
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::RequestInvite( char* szCharName )
{
// 颇萍檬措甫 夸没且 荐 乐绰啊
RC::ePARTY_RESULT rcResult = CanInvite();
if( rcResult != RC::RC_PARTY_SUCCESS )
{
return rcResult;
}
// 檬措窍妨绰 措惑捞 粮犁窍绰瘤 眉农
Player * pOtherPlayer = PlayerManager::Instance()->FindPlayer( szCharName );
if( !pOtherPlayer )
{
return RC::RC_PARTY_PLAYER_NOTEXIST;
}
// 颇萍夸没阑 罐阑 荐 乐绰啊
rcResult = pOtherPlayer->CanInvited();
if( rcResult != RC::RC_PARTY_SUCCESS )
{
return rcResult;
}
// 敲饭捞绢狼 颇萍沥焊甫 函版茄促.
m_PartyState.SetOtherUserKey( pOtherPlayer->GetUserKey() );
pOtherPlayer->GetPartyState().SetOtherUserKey( GetUserKey() );
// 檬措俊 铰遏且 巴牢瘤 惑措规俊霸 拱绢夯促.
MSG_CG_PARTY_INVITE_RESPONSE_SERVER_SYN SYNMsg;
SYNMsg.m_byCategory = CG_PARTY;
SYNMsg.m_byProtocol = CG_PARTY_INVITE_RESPONSE_SERVER_SYN;
strncpy( SYNMsg.m_szMasterName, szCharName, MAX_CHARNAME_LENGTH );
pOtherPlayer->SendPacket( &SYNMsg, sizeof(SYNMsg) );
return RC::RC_PARTY_SUCCESS;
}
RC::ePARTY_RESULT Player::AcceptInvite( DWORD dwOtherUserKey )
{
// 辑肺狼 OtherKey啊 老摹窍绰瘤 眉农
RC::ePARTY_RESULT rcResult = RC::RC_PARTY_SUCCESS;
if( m_PartyState.GetOtherUserKey() != dwOtherUserKey )
{
return RC::RC_PARTY_WASNOT_REQUEST_PARTY;
}
// 颇萍狼 OtherKey甫 檬扁拳茄促.
m_PartyState.SetOtherUserKey( INITIAL_KEY_VALUE );
// 颇萍檬措甫 夸没且 荐 乐绰啊
rcResult = CanInvite();
if( rcResult != RC::RC_PARTY_SUCCESS )
{
return rcResult;
}
// 荐遏茄 惑措甫 规栏肺 阂矾甸牢促.(惑措甫 茫扁困秦 Agent肺 菩哦阑 焊辰促.)
MSG_AG_PARTY_BATTLE_AGENT_JOINROOM_CMD CmdMsg;
CmdMsg.m_dwOtherUserKey = dwOtherUserKey;
CmdMsg.m_byRoomType = m_pGameZone->GetZoneType();
CmdMsg.m_RoomKey = m_pGameZone->GetKey();
SendPacket( &CmdMsg, sizeof(CmdMsg) );
// 惑措啊 颇萍夸没阑 荐遏沁促绊 颇萍厘俊霸 舅妨霖促.
MSG_CG_PARTY_INVITE_REQUEST_SERVER_ACK AckMsg;
AckMsg.m_byCategory = CG_PARTY;
AckMsg.m_byProtocol = CG_PARTY_INVITE_REQUEST_SERVER_ACK;
SendPacket( &AckMsg, sizeof(AckMsg) );
return RC::RC_PARTY_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -