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

📄 gamepvproom.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\gamepvproom.h"
#include ".\Player.h"
#include ".\Map.h"
#include ".\Field.h"
#include ".\PVPManager.h"
#include "Party.h"
#include "PVPInfo.h"

__IMPL_GAMEZONEPOOL(GamePVPRoom)
GamePVPRoom::GamePVPRoom(void)
{
	m_pPVPManager = new PVPManager;

	m_pPartyHashTable = new util::SolarHashTable<Party*>;
	m_pPartyHashTable->Initialize( MAX_PVP_TEAM_NUM );
}

GamePVPRoom::~GamePVPRoom(void)
{
	SAFE_DELETE(m_pPVPManager);
	SAFE_DELETE(m_pPartyHashTable);
}

VOID GamePVPRoom::Init( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo, const ADDITIONAL_PVPINFO * IN pAdditionalPVPInfo )
{
	GameRoom::Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo );

	SetAdditionalPVPInfo(pAdditionalPVPInfo);

	GameZone::LoadMap();

	m_pPVPManager->Init( &m_AdditionalPVPInfo );
}

VOID GamePVPRoom::Release()
{
	GameRoom::Release();

	m_pPVPManager->Release();
}

VOID GamePVPRoom::Ready( Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	DEBUG_CODE(
		GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode	= 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	ASSERT( !(eRoomState & ePRS_AT_ZONE) );
	);

	pPlayer->SetGameZone( ePRS_BEFORE_ENTER_PVP, this, FieldCode, AreaID );
}

BOOL GamePVPRoom::Join( Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	DEBUG_CODE(
		GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	ASSERT( (eRoomState & ePRS_BEFORE_ENTER_PVP) );
	);

	pPlayer->SetGameZone( ePRS_AT_PVP, this, FieldCode );

	if( !GameRoom::Join( pPlayer, FieldCode, AreaID ) )
	{
		pPlayer->SetGameZone( ePRS_NOT_AT_ZONE, NULL, 0 );
		return FALSE;
	}

	m_pPVPManager->EnterPlayer( pPlayer );

	// 评傈老 版快俊父 颇萍甫 积己茄促.
	if( m_AdditionalPVPInfo.m_Mode == ePVP_TEAM_MODE )
	{
		// 评 牢郸胶肺 颇萍甫 包府茄促.
		Party *pParty = GetParty( pPlayer->GetPVPInfo().GetTeam() );
		if( pParty )
		{
			pPlayer->JoinParty( pParty->GetPartyKey() );
		}
		// 绝栏搁 货肺 积己茄促.
		else
		{
			WORD wPartyKey = CreateParty( pPlayer->GetUserKey(), pPlayer->GetPVPInfo().GetTeam() );
			pPlayer->JoinParty( wPartyKey );
		}
	}

	return TRUE;
}

VOID GamePVPRoom::Leave( Player * pPlayer )
{
	m_pPVPManager->LeavePlayer( pPlayer );

	GameRoom::Leave( pPlayer );
}

CODETYPE GamePVPRoom::GetEntryFieldCode()
{
	ASSERT( GetMap() );
	ASSERT( GetMap()->GetMapInfo() );
	return GetMap()->GetMapInfo()->GetMapInfo()->FCode[0];
}

VOID GamePVPRoom::Update( DWORD dwDeltaTick )
{
	GameRoom::Update( dwDeltaTick );

	m_pPVPManager->Update( dwDeltaTick );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -