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

📄 pvpmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\pvpmanager.h"
#include ".\Player.h"
#include <PacketStruct_CG.h>
#include ".\PVPInfo.h"

__IMPL_PVPPOOL(PVP_PLAYER_INFO)
PVPManager::PVPManager(void):
m_pAdditionalPVPInfo(NULL)
{
	m_PVPPlayerHash.Initialize(MAX_PARTYMEMBER_NUM*4);
	m_PVPPlayerInfoHash.Initialize(MAX_PARTYMEMBER_NUM*4);
}

PVPManager::~PVPManager(void)
{
}

VOID PVPManager::Release()
{
	m_PVPPlayerHash.RemoveAll();
	ClearPVPInfo();
}

VOID PVPManager::ClearPVPInfo()
{
	for( PVP_PLAYER_INFO_HASH_ITR it = m_PVPPlayerInfoHash.begin() ; it != m_PVPPlayerInfoHash.end() ; ++it )
	{
		PVP_PLAYER_INFO::Destroy((*it));
	}
	m_PVPPlayerInfoHash.RemoveAll();
}

VOID PVPManager::Init( ADDITIONAL_PVPINFO * pInfo )
{
	m_pAdditionalPVPInfo = pInfo;
	SetPVPState( ePVP_ZONE_NONE );
}

VOID PVPManager::StartPVP()
{
	m_Timer.SetTimer( PVP_PRESS_KEY_TIMEOUT_TIME );
	SetPVPState( ePVP_ZONE_START_MODE );
	DISPMSG( "PVP 粮 矫累\n");
}

BOOL PVPManager::IsOpponentDieAll()
{
	for( PVP_PLAYER_HASH_ITR it = m_PVPPlayerHash.begin() ; it != m_PVPPlayerHash.end() ; ++it )
	{
		if( (*it)->GetPVPInfo().GetPVPState() != ePVP_USER_DIE )
			return FALSE;
	}
	return TRUE;
}

BOOL PVPManager::IsDrawCheck( Player * pPlayer )
{
	if( pPlayer->GetPVPInfo().GetPVPState() == ePVP_USER_ENTERED )
		return TRUE;
	return FALSE;
}

VOID PVPManager::EnterPlayer( Player * pPlayer )
{
	if( GetPVPState() == ePVP_ZONE_END_MODE )			return;
	if( FindMember( pPlayer->GetObjectKey() ) )			return;

	PVP_PLAYER_INFO * pInfo = FindPVPInfo( pPlayer->GetObjectKey() );
	if( NULL == pInfo ) return;

	// 惑怕 悸泼
	pPlayer->GetPVPInfo().Clear();
	pPlayer->GetPVPInfo().SetPVPState( ePVP_USER_ENTERED );
	pPlayer->GetPVPInfo().SetTeam( pInfo->m_Team );				//< 评 悸泼
	AddMember( pPlayer, pPlayer->GetObjectKey() );

	RemovePVPInfo( pPlayer->GetObjectKey() );
	PVP_PLAYER_INFO::Destroy( pInfo );
		
	// 唱俊霸 评盔 沥焊甫 焊辰促.
	MSG_CG_PVP_INFO_CMD cm;
	cm.m_Team		= pPlayer->GetPVPInfo().GetTeam();
	cm.m_Count	= 0;
	m_PVPPlayerHash.SetFirst();
	Player * pOther = NULL;
	while( (pOther=m_PVPPlayerHash.GetNext()) != NULL )
	{
		cm.m_Info[cm.m_Count].m_dwPlayerKey = pOther->GetObjectKey();
		cm.m_Info[cm.m_Count].m_Team		= pOther->GetPVPInfo().GetTeam();
		++cm.m_Count;
	}
	pPlayer->SendPacket( &cm, cm.GetSize() );

	// 促弗 荤恩俊 甸绢 柯 荤恩 沥焊 焊晨
	MSG_CG_PVP_INFO_BRD bmsg;
	bmsg.m_dwPlayerKey	= pPlayer->GetObjectKey();
	bmsg.m_Team			= pPlayer->GetPVPInfo().GetTeam();
	SendToAll( &bmsg, sizeof(bmsg), pPlayer->GetObjectKey() );

	DISPMSG( "PVP敲饭捞绢甸绢咳\n");
}

VOID PVPManager::LeavePlayer( Player * pPlayer )
{
	if( !FindMember( pPlayer->GetObjectKey() ) )		return;

	// 惑措 评 趣篮 促弗 荤恩狼 惑怕俊 蝶扼 Draw牢瘤, Die牢瘤 魄沥
	if( pPlayer->GetPVPInfo().GetPVPState() == ePVP_USER_MATCH )
	{
		if( !IsOpponentDieAll() )	
			pPlayer->GetPVPInfo().IncDie();
	}
	else if( IsDrawCheck(pPlayer) )
	{
		pPlayer->GetPVPInfo().IncDraw();
	}

	// 器牢飘 拌魂
	pPlayer->GetPVPInfo().CalcPoint();


	RemoveMember( pPlayer->GetObjectKey() );
	pPlayer->GetPVPInfo().SetPVPState( ePVP_USER_NONE );

	DISPMSG( "PVP敲饭捞绢唱皑\n");
}

// 贸澜 甸绢客辑 虐甫 喘范阑 锭
RC::ePVP_RESULT PVPManager::PressKeyPlayer( Player * pKeyPressedPlayer )
{
	if( GetPVPState() == ePVP_ZONE_END_MODE ) return RC::RC_PVP_INVALID_USER_STATE;

	if( pKeyPressedPlayer->GetPVPInfo().GetPVPState() != ePVP_USER_ENTERED )
		return RC::RC_PVP_INVALID_USER_STATE;

	pKeyPressedPlayer->GetPVPInfo().SetPVPState( ePVP_USER_KEYPRESSED );

	DISPMSG( "PVP敲饭捞绢虐穿抚\n");

	if( 0 == m_PVPPlayerInfoHash.GetDataNum() && IsContinueMatchlessMode() )
		OnStartMatchlessModeAll();


	return RC::RC_PVP_SUCCESS;
}

BOOL PVPManager::IsContinueMatchlessMode()
{
	IsContinueMatchlessModeCheck mode;
	return Foreach( mode );
}

VOID PVPManager::Update( DWORD dwDeltaTick )
{
	if( GetPVPState() == ePVP_ZONE_END_MODE ) return;


	if( m_Timer.IsExpiredManual(FALSE) )
	{
		switch( GetPVPState() )
		{
		case ePVP_ZONE_START_MODE:
			{
				DISPMSG( "PVPTimeout : ePVP_ZONE_START_MODE\n");
				// Timeout俊辑 力寇
				// 酒流 甸绢 坷瘤 臼篮 荤恩 : 甸绢 坷瘤 给窃
				ClearPVPInfo();
				// 甸绢吭绰单 虐甫 穿福瘤 臼篮 荤恩 : 

⌨️ 快捷键说明

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