初步修复
This commit is contained in:
parent
8fc4357cc6
commit
e4714f3f0e
46705 changed files with 12004901 additions and 0 deletions
109
Server/DNGameServer/RevengeSystem.cpp
Normal file
109
Server/DNGameServer/RevengeSystem.cpp
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
#include "Stdafx.h"
|
||||
|
||||
#if defined(PRE_ADD_REVENGE)
|
||||
#include "RevengeSystem.h"
|
||||
#include "DNPvPGameRoom.h"
|
||||
#include "DNUserSession.h"
|
||||
#include "PvPGameMode.h"
|
||||
|
||||
CRevengeSystem::CRevengeSystem(CPvPGameMode* pGameMode) : m_pGameMode(pGameMode)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CRevengeSystem::~CRevengeSystem()
|
||||
{
|
||||
ResetAllRevengeConditionCount();
|
||||
SAFE_DELETE_MAP(m_MapRevengeTarget);
|
||||
}
|
||||
|
||||
bool CRevengeSystem::CheckRevenge( CDNUserSession *pGameSession, CDNUserSession *pHitterSession )
|
||||
{
|
||||
if( !pGameSession || !pHitterSession )
|
||||
return false;
|
||||
|
||||
if( GetRevengeTargetSessionID(pGameSession->GetSessionID()) <= 0)
|
||||
{
|
||||
int nCount = IncreaseRevengeConditionCount(pGameSession->GetSessionID(), pHitterSession->GetSessionID());
|
||||
if(nCount >= Revenge::RevengeConditionCount)
|
||||
{
|
||||
SetRevengeTargetSessionID(pGameSession->GetSessionID(), pHitterSession->GetSessionID());
|
||||
ResetRevengeConditionCount(pGameSession->GetSessionID());
|
||||
|
||||
pGameSession->SendPvPSetRevengeTarget( pGameSession->GetSessionID(), pHitterSession->GetSessionID(), Revenge::TargetReason::SetNewRevengeTarget);
|
||||
pGameSession->GetEventSystem()->OnEvent( EventSystem::OnSetRevengeTarget );
|
||||
}
|
||||
}
|
||||
|
||||
if( GetRevengeTargetSessionID(pHitterSession->GetSessionID()) == pGameSession->GetSessionID() )
|
||||
{
|
||||
SetRevengeTargetSessionID(pHitterSession->GetSessionID(), 0);
|
||||
pHitterSession->SendPvPSetRevengeTarget( pHitterSession->GetSessionID(), 0, Revenge::TargetReason::SuccessRevenge );
|
||||
//성공패킷 브로드캐스트
|
||||
static_cast<CDNPvPGameRoom*>(pHitterSession->GetGameRoom())->BroadcastRevengeSuccess( pHitterSession->GetSessionID(), pGameSession->GetSessionID() );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CRevengeSystem::LeaveUser(UINT nSessionID)
|
||||
{
|
||||
CDNUserSession * pLeaveUserSession = m_pGameMode->GetGameRoom()->GetUserSession(nSessionID);
|
||||
if( pLeaveUserSession && pLeaveUserSession->GetTeam() == PvPCommon::Team::Observer )
|
||||
return; //옵저버인 경우 그냥 리턴
|
||||
|
||||
//나가는 유저의 리벤지 컨디션 정보 초기화
|
||||
SetRevengeTargetSessionID(nSessionID, 0);
|
||||
ResetRevengeConditionCount(nSessionID);
|
||||
ResetRevengeConditionTarget(nSessionID);
|
||||
|
||||
//나가는 유저를 리벤지 타겟으로 하는 유저 초기화
|
||||
std::map<UINT,UINT>::iterator iter = m_MapRevengeTarget.begin();
|
||||
for( ; iter != m_MapRevengeTarget.end() ; iter++ )
|
||||
{
|
||||
if( iter->second == nSessionID )
|
||||
{
|
||||
SetRevengeTargetSessionID(iter->first, 0);
|
||||
CDNUserSession * pSession= m_pGameMode->GetGameRoom()->GetUserSession(iter->first);
|
||||
if( pSession )
|
||||
pSession->SendPvPSetRevengeTarget(iter->first, 0, Revenge::TargetReason::TargetLeaveGame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int CRevengeSystem::IncreaseRevengeConditionCount(UINT nSessionID, UINT nTargetSessionID)
|
||||
{
|
||||
std::map<UINT,int>::iterator iter = m_MapRevengeConditions[nSessionID].find(nTargetSessionID);
|
||||
if( iter == m_MapRevengeConditions[nSessionID].end() )
|
||||
m_MapRevengeConditions[nSessionID][nTargetSessionID] = 0;
|
||||
|
||||
return ++m_MapRevengeConditions[nSessionID][nTargetSessionID];
|
||||
}
|
||||
|
||||
void CRevengeSystem::ResetRevengeConditionCount(UINT nSessionID)
|
||||
{
|
||||
m_MapRevengeConditions[nSessionID].clear();
|
||||
}
|
||||
|
||||
void CRevengeSystem::ResetRevengeConditionTarget(UINT nSessionID)
|
||||
{
|
||||
std::map<UINT,std::map<UINT,int>>::iterator iter = m_MapRevengeConditions.begin();
|
||||
for( ; iter != m_MapRevengeConditions.end(); iter++ )
|
||||
{
|
||||
if( iter->second.find(nSessionID) != iter->second.end() )
|
||||
(iter->second)[nSessionID] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void CRevengeSystem::ResetAllRevengeConditionCount()
|
||||
{
|
||||
std::map<UINT,std::map<UINT,int>>::iterator iter = m_MapRevengeConditions.begin();
|
||||
for( ; iter != m_MapRevengeConditions.end(); iter++ )
|
||||
{
|
||||
SAFE_DELETE_MAP(iter->second);
|
||||
}
|
||||
|
||||
SAFE_DELETE_MAP(m_MapRevengeConditions);
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue