DragonNest/GameCommon/DnPileAddEffectBlow.cpp

190 lines
4.8 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnPileAddEffectBlow.h"
#include "DnTableDB.h"
#include "EtActionSignal.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
/*
<EFBFBD>ش<EFBFBD> ȿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ƚ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ(<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<EFBFBD><EFBFBD> <EFBFBD>׼<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
<EFBFBD><EFBFBD>ø <EFBFBD>ɶ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
Ư<EFBFBD><EFBFBD> <EFBFBD>׼<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ų <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̵<EFBFBD> <EFBFBD><EFBFBD>Ŵ.
*/
CDnPileAddEffectBlow::CDnPileAddEffectBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor )
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_249;
SetValue( szValue );
m_fValue = 0.0f;
m_szTargetAction = szValue;
m_pActionElement = NULL;
m_fFrame = 0.0f;
m_ActionDurationTime = 0;
m_bActivatedBlow = false;
}
CDnPileAddEffectBlow::~CDnPileAddEffectBlow(void)
{
}
void CDnPileAddEffectBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
__super::OnBegin(LocalTime, fDelta);
OutputDebug( "%s\n", __FUNCTION__ );
}
void CDnPileAddEffectBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
__super::Process( LocalTime, fDelta );
}
void CDnPileAddEffectBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
__super::OnEnd(LocalTime, fDelta);
m_hActor->RemoveStateBlowSignal(this->GetMySmartPtr());
OutputDebug( "%s\n", __FUNCTION__);
}
void CDnPileAddEffectBlow::OnDuplicate( const STATE_BLOW& StateBlowInfo )
{
// <20>ð<EFBFBD><C3B0><EFBFBD> <20>Ѿ<EFBFBD><D1BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC>
m_StateBlow.fDurationTime = StateBlowInfo.fDurationTime;
//<2F>ߺ<EFBFBD><DFBA>ɶ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>..
#ifndef _GAMESERVER
std::string szAction = "Idle_";
char buffer[65];
_itoa_s(m_iDuplicateCount, buffer, 65, 10 );
szAction += buffer;
if (m_hEtcObjectEffect)
m_hEtcObjectEffect->SetActionQueue(szAction.c_str());
#endif // _GAMESERVER
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߺ<EFBFBD> ī<><C4AB>Ʈ<EFBFBD><C6AE> <20>Ǹ<EFBFBD>
DNTableFileFormat* pSkillTable = NULL;
int iDuplicateCount = 0;
pSkillTable = GetDNTable( CDnTableDB::TSKILL );
if (pSkillTable)
iDuplicateCount = pSkillTable->GetFieldFromLablePtr( m_ParentSkillInfo.iSkillID, "_EffectAmassCount" )->GetInteger();
if (iDuplicateCount != 0 && iDuplicateCount == m_iDuplicateCount)
{
//<2F><>ø ī<><C4AB>Ʈ <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> Ȱ<><C8B0>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
SetActivateBlow(true);
m_hActor->AddStateBlowSignal(this->GetMySmartPtr());
}
}
void CDnPileAddEffectBlow::OnSetParentSkillInfo()
{
if (m_ParentSkillInfo.hSkillUser)
{
m_pActionElement = m_ParentSkillInfo.hSkillUser->GetElement( m_szTargetAction.c_str() );
m_ActionDurationTime = 0;
if (m_pActionElement)
{
m_ActionDurationTime = m_pActionElement->dwLength;
m_vlpSignalList = m_pActionElement->pVecSignalList;
}
}
}
void CDnPileAddEffectBlow::SignalProcess( LOCAL_TIME LocalTime, float fDelta )
{
if (IsEnd() == true)
return;
//#ifdef _GAMESERVER
if( m_ParentSkillInfo.hSkillUser &&
m_hActor )
{
if( m_pActionElement )
{
float fFPS = 60.0f;
float fPrevFrame = m_fFrame - 1.0f;
if( m_pActionElement->dwLength < (DWORD)m_fFrame )
{
m_fFrame = 1.0f;
fPrevFrame = -0.1f;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><>??
SetState(STATE_BLOW::STATE_END);
return;
}
// <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ͷ<EFBFBD> <20>ٲ㼭 <20>ñ׳ε<D7B3><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ.
MatrixEx OriginalCross = *(m_ParentSkillInfo.hSkillUser->GetMatEx());
MatrixEx ChargerActorCross = *(m_hActor->GetMatEx());
*(m_ParentSkillInfo.hSkillUser->GetMatEx()) = ChargerActorCross;
#ifdef _GAMESERVER
m_ParentSkillInfo.hSkillUser->PushForceHitElement( m_ParentSkillInfo.eSkillElement );
#endif
CEtActionSignal *pSignal = NULL;
#if defined(PRE_FIX_55378)
m_ParentSkillInfo.hSkillUser->SetChargerAction(m_szTargetAction.c_str());
#endif // PRE_FIX_55378
for( DWORD i=0; i < m_vlpSignalList.size(); i++ )
{
pSignal = m_vlpSignalList[i];
if( pSignal->CheckSignal( fPrevFrame, m_fFrame ) == true )
{
LOCAL_TIME StartTime = LocalTime - (LOCAL_TIME)( 1000.f / fFPS * ( m_fFrame - pSignal->GetStartFrame() ) );
LOCAL_TIME EndTime = LocalTime + (LOCAL_TIME)( 1000.f / fFPS * ( pSignal->GetEndFrame() - m_fFrame ) );
m_ParentSkillInfo.hSkillUser->OnSignal( (SignalTypeEnum)pSignal->GetSignalIndex(), pSignal->GetData(), LocalTime,
StartTime, EndTime, pSignal->GetSignalListArrayIndex() );
}
}
#if defined(PRE_FIX_55378)
m_ParentSkillInfo.hSkillUser->SetChargerAction(NULL);
#endif // PRE_FIX_55378
*(m_ParentSkillInfo.hSkillUser->GetMatEx()) = OriginalCross;
#ifdef _GAMESERVER
m_ParentSkillInfo.hSkillUser->PopForceHitElement();
#endif
m_fFrame += (fDelta * fFPS);
}
}
}
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnPileAddEffectBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
szNewValue = szOrigValue;
}
void CDnPileAddEffectBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
szNewValue = szOrigValue;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW