📄 pvpmanager.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 + -