79 lines
No EOL
1.7 KiB
C++
79 lines
No EOL
1.7 KiB
C++
#include "StdAfx.h"
|
|
#include "DnGroundMovableChecker.h"
|
|
#include "DnActor.h"
|
|
|
|
#ifndef USE_BOOST_MEMPOOL
|
|
#ifdef _DEBUG
|
|
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef _GAMESERVER
|
|
bool CDnGroundMovableChecker::s_bUseSignalSkillCheck = false;
|
|
bool CDnGroundMovableChecker::s_PrimUseSignalSkillCheck = false;
|
|
LOCAL_TIME CDnGroundMovableChecker::s_EndTime = 0;
|
|
#endif
|
|
|
|
|
|
CDnGroundMovableChecker::CDnGroundMovableChecker( DnActorHandle hActor ) : IDnSkillUsableChecker( hActor )
|
|
{
|
|
m_iType = GROUNDMOVABLE_CHECKER;
|
|
}
|
|
|
|
CDnGroundMovableChecker::~CDnGroundMovableChecker(void)
|
|
{
|
|
}
|
|
|
|
|
|
#ifndef _GAMESERVER
|
|
void CDnGroundMovableChecker::SetUseSignalSkillCheck( bool bUseSignalSkillCheck, LOCAL_TIME SignalEndTime )
|
|
{
|
|
s_bUseSignalSkillCheck = bUseSignalSkillCheck;
|
|
s_EndTime = SignalEndTime;
|
|
}
|
|
#endif
|
|
|
|
|
|
bool CDnGroundMovableChecker::CanUse( void )
|
|
{
|
|
bool bResult = false;
|
|
|
|
if( m_hHasActor )
|
|
{
|
|
#ifndef _GAMESERVER
|
|
if (s_PrimUseSignalSkillCheck)
|
|
return true;
|
|
|
|
if( s_bUseSignalSkillCheck )
|
|
return true;
|
|
#else
|
|
if( m_hHasActor && m_hHasActor->IsUseSignalSkillCheck() && m_hHasActor->IsAllowedSkillCheck(2) )
|
|
return true;
|
|
#endif
|
|
|
|
if( !m_hHasActor->IsAir() )
|
|
{
|
|
// 이동불가만 걸려있는 경우엔 스킬 사용이 가능해야 하므로 지저분하지만 이렇게 체크할 수 밖에 없다.. (#22550)
|
|
if( !m_hHasActor->IsProcessSkill() &&
|
|
!m_hHasActor->IsStun() &&
|
|
!m_hHasActor->IsDown() &&
|
|
(m_hHasActor->GetStateEffect() & CDnActorState::Cant_Move) == CDnActorState::Cant_Move )
|
|
{
|
|
bResult = true;
|
|
}
|
|
else if( m_hHasActor->IsMovable() )
|
|
{
|
|
bResult = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
IDnSkillUsableChecker* CDnGroundMovableChecker::Clone()
|
|
{
|
|
CDnGroundMovableChecker* pNewChecker = new CDnGroundMovableChecker(m_hHasActor);
|
|
|
|
return pNewChecker;
|
|
} |