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

📄 player_party.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -