DragonNest/GameCommon/DnFrameStopBlow.cpp

222 lines
6.6 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnFrameStopBlow.h"
#ifdef _GAMESERVER
// #include "DnGameRoom.h"
// #include "DnGameDataManager.h"
// #include "DnUserSession.h"
#include "DnStateBlow.h"
#else
#include "DnEtcObject.h"
#include "DnLocalPlayerActor.h"
#include "DnInterface.h"
#include "navigationmesh.h"
#include "InputWrapper.h"
#endif
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
const LOCAL_TIME SHAKE_TIME = 3000;
CDnFrameStopBlow::CDnFrameStopBlow(DnActorHandle hActor, const char *szValue) : CDnBlow(hActor)
#if defined(PRE_FIX_53274)
#ifndef _GAMESERVER
,m_ComboCalc( CDnComboCalculator::CIRCULAR_CHECK )
#endif
#endif // PRE_FIX_53274
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_146;
#if defined(PRE_FIX_53274)
SetValue(szValue);
m_fValue = (szValue == NULL ? 0.0f : (float)atof(szValue));
m_bPlayerCharacter = false;
#ifndef _GAMESERVER
if (m_fValue != 0)
{
std::vector<BYTE> vlKeysToCheck;
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] );
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] );
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] );
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] );
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] );
vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] );
m_ComboCalc.SetKeysToCheck( vlKeysToCheck );
vlKeysToCheck.clear();
vlKeysToCheck.push_back( IW_MOVELEFT ); vlKeysToCheck.push_back( IW_MOVELEFT ); vlKeysToCheck.push_back( IW_MOVELEFT );
vlKeysToCheck.push_back( IW_MOVERIGHT ); vlKeysToCheck.push_back( IW_MOVERIGHT ); vlKeysToCheck.push_back( IW_MOVERIGHT );
vlKeysToCheck.push_back( IW_MOVEBACK ); vlKeysToCheck.push_back( IW_MOVEBACK ); vlKeysToCheck.push_back( IW_MOVEBACK );
vlKeysToCheck.push_back( IW_MOVEFRONT ); vlKeysToCheck.push_back( IW_MOVEFRONT ); vlKeysToCheck.push_back( IW_MOVEFRONT );
m_ComboCalc.SetPadsToCheck( vlKeysToCheck, 3.0f );
m_bPlayerCharacter = dynamic_cast<CDnLocalPlayerActor*>(m_hActor.GetPointer()) ? true : false;
}
#endif // _GAMESERVER
#endif // PRE_FIX_53274
}
CDnFrameStopBlow::~CDnFrameStopBlow(void)
{
}
void CDnFrameStopBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
//// <20><><EFBFBD>ٷ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20><><EFBFBD>½<EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD> <20><>Ŵ.
//m_hActor->ResetPlaySpeed();
//m_hActor->SetPlaySpeed( 1000000, 0.0f );
m_hActor->AddedFrameStop();
// #29627 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> hit state <20><> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD> hit state <20>߰<EFBFBD>.
if( m_hActor->IsPlayerActor() ) // <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><><EFBFBD>츸.
{
if( false == m_hActor->IsHit() )
{
int nState = m_hActor->GetState();
nState |= CDnActorState::ActorStateEnum::Hit;
m_hActor->SetState( (CDnActorState::ActorStateEnum)nState );
}
}
//////////////////////////////////////////////////////////////////////////
#if defined(PRE_FIX_53274)
#ifndef _GAMESERVER
// <20>÷<EFBFBD><C3B7>̾ <20>ɷ<EFBFBD><C9B7><EFBFBD> <20><><EFBFBD><20><>ư <20><>Ÿ UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( m_fValue != 0.0f && m_bPlayerCharacter )
{
#if defined(PRE_FIX_57706)
if (m_hActor->GetStickAniDlgRefCount() == 0)
{
GetInterface().ShowStickAniDialog( true );
}
m_hActor->AddStickAniDlgRefCount();
#else
GetInterface().ShowStickAniDialog( true );
#endif // PRE_FIX_57706
}
#endif // _GAMESERVER
#endif // PRE_FIX_53274
OutputDebug( "CDnFrameStopBlow::OnBegin, Value:%f \n", m_fValue );
}
#if defined(PRE_FIX_53274)
void CDnFrameStopBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
__super::Process(LocalTime, fDelta);
#ifndef _GAMESERVER
if (m_fValue != 0.0f)
{
if( CDnLocalPlayerActor::s_hLocalActor == m_hActor )
{
// TODO: <20>¿<EFBFBD> <20>Է<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>...
int iNumComboCount = 0;
bool bComboSatisfy = m_ComboCalc.Process( LocalTime, fDelta, &iNumComboCount );
for( int i = 0; i < iNumComboCount; ++i )
m_StateBlow.fDurationTime -= 1.0f;
if( bComboSatisfy )
{
OutputDebug( "[<5B><><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB>] %d ȸ <20>޺<EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ð<EFBFBD> %2.2f <20><> <20>پ<EFBFBD><D9BE><EFBFBD> \n", iNumComboCount, m_StateBlow.fDurationTime );
}
}
// <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD> Ż<><C5BB><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> üũ<C3BC>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
if( CDnLocalPlayerActor::s_hLocalActor == m_hActor )
{
if( m_StateBlow.fDurationTime < 0.2f )
{
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
#if defined(PRE_FIX_57706)
//Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE> <20><>.. <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><20><>Ŷ <20>޾<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
//<2F><> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ŵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD>. <20>ð<EFBFBD><C3B0><EFBFBD> <20><> <20>Ǽ<EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǰų<C7B0>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20>޾Ƽ<DEBE> <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ѵ<EFBFBD>.
CDnLocalPlayerActor* pLocalPlayerActor = static_cast<CDnLocalPlayerActor*>(m_hActor.GetPointer());
if (pLocalPlayerActor)
pLocalPlayerActor->CmdRemoveStateEffectByServerBlowID(GetServerBlowID());
#else
m_hActor->CmdRemoveStateEffect( m_StateBlow.emBlowIndex, true );
#endif // PRE_FIX_57706
}
}
}
#endif // _GAMESERVER
}
#endif // PRE_FIX_53274
void CDnFrameStopBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
//m_hActor->ResetPlaySpeed();
m_hActor->RemovedFrameStop();
#if defined(PRE_FIX_53274)
#ifndef _GAMESERVER
// <20>÷<EFBFBD><C3B7>̾ <20>ɷ<EFBFBD><C9B7><EFBFBD> <20><><EFBFBD><20><>ư <20><>Ÿ UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( dynamic_cast<CDnLocalPlayerActor*>(m_hActor.GetPointer()) )
{
#if defined(PRE_FIX_57706)
m_hActor->RemoveStickAniDlgRefCount();
if (m_hActor->GetStickAniDlgRefCount() == 0)
{
GetInterface().ShowStickAniDialog( false );
}
#else
GetInterface().ShowStickAniDialog( false );
#endif // PRE_FIX_57706
}
#endif // _GAMESERVER
#endif // PRE_FIX_53274
#if defined(_GAMESERVER)
if (m_fValue != 0.0f)
{
//<2F><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>.
CDnStateBlow* pStateBlow = m_hActor->GetStateBlow();
int nStateCount = pStateBlow ? pStateBlow->GetNumStateBlow() : 0;
for( int iBlow = 0; iBlow < nStateCount; ++iBlow )
{
DnBlowHandle hExistingBlow = pStateBlow->GetStateBlow( iBlow );
CDnSkill::SkillInfo* pSkillInfo = const_cast<CDnSkill::SkillInfo*>(hExistingBlow->GetParentSkillInfo());
//<2F><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>..
if (pSkillInfo &&
pSkillInfo->iSkillID == m_ParentSkillInfo.iSkillID &&
pSkillInfo->hSkillUser &&
pSkillInfo->hSkillUser == m_ParentSkillInfo.hSkillUser)
{
hExistingBlow->SetState(STATE_BLOW::STATE_END);
m_hActor->CmdRemoveStateEffectFromID(hExistingBlow->GetBlowID());
}
}
}
#endif // _GAMESERVER
OutputDebug( "CDnFrameStopBlow::OnEnd\n" );
}
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnFrameStopBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
szNewValue = szOrigValue;
}
void CDnFrameStopBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
szNewValue = szOrigValue;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW