DragonNest/GameCommon/DnActorStateChecker.cpp
2024-12-20 16:56:44 +08:00

70 lines
3.5 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "DnActorStateChecker.h"
#include "DnActor.h"
#ifndef USE_BOOST_MEMPOOL
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif
CDnActorStateChecker::CDnActorStateChecker( DnActorHandle hActor,
CDnActorState::ActorStateEnum eRequiredState, int iOperator ) : IDnSkillUsableChecker( hActor ),
m_iOperator( iOperator ),
m_eRequiredState( eRequiredState )
{
_ASSERT( 0 <= m_iOperator && m_iOperator < OP_COUNT && "잘못된 연산자 대입" );
m_iType = STATE_CHECKER;
}
CDnActorStateChecker::~CDnActorStateChecker(void)
{
}
bool CDnActorStateChecker::CanUse( void )
{
bool bResult = false;
if( m_hHasActor )
{
// DnActorState::StateEnum 의 각 요소들은 비트 조합이 가능하도록 선언되어 있다.
switch( m_iOperator )
{
case OP_EQUAL:
bResult = ( m_hHasActor->GetState() == m_eRequiredState );
break;
case OP_NOT_EQUAL:
bResult = ( m_hHasActor->GetState() != m_eRequiredState );
#ifdef _GAMESERVER
// 공격스킬 사용후 < 공격중에서는 사용불가능한 스킬을 연달아 바로 사용하면 여기에 걸려서 서버에서는 못써서 실패가 될수가 있다.
// 서버 프레임과 클라 프레임과의 미묘한 동기가 틀어지는경우인데 일단은 공격중일때 라는 상황은 잦은 경우 이기 때문에 빼두도록 한다.
if((m_eRequiredState == CDnActorState::ActorStateEnum::Attack) && (bResult == false) )
bResult = true;
#endif
break;
case OP_AND:
bResult = ( m_hHasActor->GetState() & m_eRequiredState ) ? true : false;
break;
case OP_NOT_AND:
bResult = !( m_hHasActor->GetState() & m_eRequiredState ) ? true : false;
break;
}
}
return bResult;
}
IDnSkillUsableChecker* CDnActorStateChecker::Clone()
{
CDnActorStateChecker* pNewChecker = new CDnActorStateChecker(m_hHasActor, m_eRequiredState, m_iOperator);
return pNewChecker;
}