Files
Sun1602/Client/GameClient/State/SkillStateDefenceMotion.cpp
2022-10-26 12:25:11 +08:00

142 lines
3.1 KiB
C++

//------------------------------------------------------------------------------
// SkillStateDefenceMotion.cpp
// (C) 2005 Webzen Sunstudio
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "statebase.h"
#include "SkillState.h"
#include "SkillStateDefenceMotion.h"
#include "Character.h"
#include "ProjectileManagerEx.h"
#include "SkillInfoParser.h"
//------------------------------------------------------------------------------
/**
*/
SkillStateDefenceMotion::SkillStateDefenceMotion()
{
}
//------------------------------------------------------------------------------
/**
*/
SkillStateDefenceMotion::~SkillStateDefenceMotion()
{
}
//------------------------------------------------------------------------------
/**
*/
STATECHANGE::TYPE SkillStateDefenceMotion::OnStart(Object* pOwner, DWORD CurTime)
{
Character* pChr = (Character*)pOwner;
SkillScriptInfo *pInfo = SkillInfoParser::Instance()->GetSkillInfo((SLOTCODE)pChr->GetCurrentAction()->SKILL.dwSkillID);
assert(pInfo);
if(pInfo)
{
BASE_ABILITYINFO *pAInfo = pInfo->GetAbilityInfoByIndex(1);
assert(pAInfo);
if(pAInfo)
{
m_dwlifeTime=pAInfo->m_iParam[2];//세번째 파라미터가 유지 시간이다.
}
else
{
m_dwlifeTime=0;
}
}
m_dwCurTime=0;
return StateSkill::OnStart(pOwner,CurTime);
}
//------------------------------------------------------------------------------
/**
*/
STATEPROCESS::TYPE SkillStateDefenceMotion::OnProcess(Object* pOwner, DWORD CurTime,DWORD dwTick)
{
Character* pChr = (Character*)pOwner;
EnterProcess(pOwner,CurTime,dwTick);
#ifdef _NA_008472_20150903_IMPROVED_BALANCE
if( GetAnimationRate() == 100.0f )
SetAnimationRate(50.0f);
#endif // _NA_008472_20150903_IMPROVED_BALANCE
// 타격점체크
CheckEvent();
m_dwCurTime+=dwTick;
if(pChr->IsDead())
{
return STATEPROCESS::END;
}
// 종료~
if (m_dwCurTime >=m_dwlifeTime)//에니메이션 진척도가 100%일때
{
#ifdef _NA_008472_20150903_IMPROVED_BALANCE
if (pChr->FindSkillEffect(eCHAR_STATE_PROTECTION))
{
return STATEPROCESS::HOLD;
}
else
{
if (pChr->ProcessNextAction())
{
return STATEPROCESS::SUSPEND;
}
else
{
return STATEPROCESS::END;
}
}
#else
if (pChr->ProcessNextAction())
{
return STATEPROCESS::SUSPEND;
}
else
{
return STATEPROCESS::END;
}
#endif // _NA_008472_20150903_IMPROVED_BALANCE
}
return STATEPROCESS::HOLD;
}
void SkillStateDefenceMotion::ProcessExtraCommand()
{
#ifdef _NA_004530_20120315_1202_SKILL_RENEWAL
// 라이프타임을 0으로 설정해서 종료되도록
m_dwlifeTime = 0;
#endif
}
//------------------------------------------------------------------------------
/**
*/
#ifdef _NA_008783_20160418_DEFENCEMOTION_CANCEL_BUG
BOOL SkillStateDefenceMotion::CanTransite( Object* owner_ptr, DWORD cur_time, StateBase* to_transite_state )
{
Character* character_ptr = (Character *)owner_ptr;
if ( m_dwCurTime >=m_dwlifeTime )
{
if (!(character_ptr->FindSkillEffect(eCHAR_STATE_PROTECTION)))
{
return TRUE;
}
}
return FALSE;
}
#endif // _NA_008783_20160418_DEFENCEMOTION_CANCEL_BUG