#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; }