248 lines
7.6 KiB
C++
248 lines
7.6 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DnChargerBlow.h"
|
|||
|
|
#include "DnActionBase.h"
|
|||
|
|
#include "EtActionSignal.h"
|
|||
|
|
#include "DnProjectile.h"
|
|||
|
|
#include "DnActor.h"
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
CDnChargerBlow::CDnChargerBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor )
|
|||
|
|
//#ifdef _GAMESERVER
|
|||
|
|
,m_pActionElement( NULL ),
|
|||
|
|
m_fFrame( 0.0f ),
|
|||
|
|
m_iAdditionalWeaponLength( 0 )
|
|||
|
|
//#endif
|
|||
|
|
{
|
|||
|
|
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_062;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20≯<EFBFBD>
|
|||
|
|
_ASSERT( strlen(szValue) < STATE_BLOW_ARGUMENT_MAX_SIZE );
|
|||
|
|
SetValue( szValue );
|
|||
|
|
|
|||
|
|
//#ifdef _GAMESERVER
|
|||
|
|
// <20><><EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>.
|
|||
|
|
m_strChargerActionName = szValue;
|
|||
|
|
//#endif
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_65287)
|
|||
|
|
m_fShooterFinalDamageRate = 0.0f;
|
|||
|
|
#endif // PRE_FIX_65287
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnChargerBlow::~CDnChargerBlow(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
// <20><EFBFBD> <20>ƿ<DEBE>.
|
|||
|
|
//#ifdef _GAMESERVER
|
|||
|
|
if( !m_ParentSkillInfo.hSkillUser )
|
|||
|
|
{
|
|||
|
|
SetState( STATE_BLOW::STATE_END );
|
|||
|
|
OutputDebug( "CDnChargerBlow::OnBegin fail!! SkillUser is Invalid!!\n" );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_pActionElement = NULL;
|
|||
|
|
m_pActionElement = m_ParentSkillInfo.hSkillUser->GetElement( m_strChargerActionName.c_str() );
|
|||
|
|
OutputDebug("%s %s", __FUNCTION__, m_strChargerActionName.c_str());
|
|||
|
|
|
|||
|
|
_ASSERT( m_pActionElement && "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD>." );
|
|||
|
|
|
|||
|
|
// <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD> <20>ƿ´<C6BF>.
|
|||
|
|
DnSkillHandle hParentSkill = m_ParentSkillInfo.hSkillUser->GetProcessSkill();
|
|||
|
|
if( hParentSkill )
|
|||
|
|
m_iAdditionalWeaponLength = hParentSkill->GetIncreaseRange();
|
|||
|
|
|
|||
|
|
if( m_pActionElement )
|
|||
|
|
{
|
|||
|
|
m_vlpSignalList = m_pActionElement->pVecSignalList;
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
if( m_ParentSkillInfo.hSkillUser )
|
|||
|
|
{
|
|||
|
|
m_pShooterStateSnapshot.reset( new CDnState );
|
|||
|
|
*m_pShooterStateSnapshot= *static_cast<CDnState*>( m_ParentSkillInfo.hSkillUser.GetPointer() );
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_65287)
|
|||
|
|
|
|||
|
|
m_fShooterFinalDamageRate = 0.0f;
|
|||
|
|
if (m_ParentSkillInfo.hSkillUser && m_ParentSkillInfo.hSkillUser->IsAppliedThisStateBlow(STATE_BLOW::BLOW_050))
|
|||
|
|
{
|
|||
|
|
DNVector(DnBlowHandle) vlhBlows;
|
|||
|
|
m_ParentSkillInfo.hSkillUser->GatherAppliedStateBlowByBlowIndex( STATE_BLOW::BLOW_050, vlhBlows );
|
|||
|
|
int iNumBlow = (int)vlhBlows.size();
|
|||
|
|
for( int i = 0; i < iNumBlow; ++i )
|
|||
|
|
{
|
|||
|
|
m_fShooterFinalDamageRate += vlhBlows[i]->GetFloatValue();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif // PRE_FIX_65287
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20>ٷ<EFBFBD> <20><><EFBFBD>ᰡ <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> <20>߰<EFBFBD>
|
|||
|
|
if (STATE_BLOW::STATE_BEGIN == GetBlowState())
|
|||
|
|
m_hActor->AddStateBlowSignal(this->GetMySmartPtr());
|
|||
|
|
|
|||
|
|
OutputDebug( "CDnChargerBlow::OnBegin\n" );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SetState( STATE_BLOW::STATE_END );
|
|||
|
|
OutputDebug( "CDnChargerBlow::OnBegin fail!! Can't find Charger action element!!\n" );
|
|||
|
|
}
|
|||
|
|
//#else
|
|||
|
|
// OutputDebug( "CDnChargerBlow::OnBegin\n" );
|
|||
|
|
//#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::Process( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
CDnBlow::Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::OnProjectileSignal( CDnProjectile* pProjectile )
|
|||
|
|
{
|
|||
|
|
// <20><>ų <20><><EFBFBD>Ÿ<EFBFBD> <20>߰<EFBFBD>.
|
|||
|
|
pProjectile->SetWeaponLength( pProjectile->GetWeaponLength() + m_iAdditionalWeaponLength );
|
|||
|
|
|
|||
|
|
// <20><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5>.
|
|||
|
|
// <20><> <20>༮<EFBFBD><E0BCAE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><EFBFBD> ī<><C4AB>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ܽ<EFBFBD>Ų<EFBFBD><C5B2>. (#11329)
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
pProjectile->FromCharger();
|
|||
|
|
pProjectile->FromSkill( true );
|
|||
|
|
pProjectile->SetShooterStateSnapshot( m_pShooterStateSnapshot );
|
|||
|
|
pProjectile->SetForceHitElement( m_ParentSkillInfo.eSkillElement );
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_65287)
|
|||
|
|
pProjectile->SetShooterFinalDamageRate(m_fShooterFinalDamageRate);
|
|||
|
|
#endif // PRE_FIX_65287
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
m_hActor->RemoveStateBlowSignal(this->GetMySmartPtr());
|
|||
|
|
|
|||
|
|
OutputDebug( "CDnChargerBlow::OnEnd\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::SignalProcess( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
//#ifdef _GAMESERVER
|
|||
|
|
if( m_ParentSkillInfo.hSkillUser &&
|
|||
|
|
m_hActor )
|
|||
|
|
{
|
|||
|
|
// <20><> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>ġ<EFBFBD><C4A1> <20>ٲ㼭 <20>ñ׳<C3B1> ó<><C3B3>
|
|||
|
|
if( m_pActionElement )
|
|||
|
|
{
|
|||
|
|
//float fFPS = m_ParentSkillInfo.hSkillUser->CDnActionBase::GetFPS();
|
|||
|
|
float fFPS = 60.0f; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20>ñ׳<C3B1><D7B3><EFBFBD> ó<><C3B3> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ѵ<EFBFBD>. #26439
|
|||
|
|
|
|||
|
|
// [2011/03/07 semozz]
|
|||
|
|
// fDelta<74><61> 1/60(0.01666)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// m_fFrame<6D><65><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD>..
|
|||
|
|
// CheckSignal<61><6C><EFBFBD><EFBFBD> ù<><C3B9>° if<69><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD>, fCur<75><72> 0.0<EFBFBD><EFBFBD> <20>ƴϾ
|
|||
|
|
// ù<><C3B9><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD> <20>ִ<EFBFBD> <20>ñ׳ε<D7B3><CEB5><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ȵ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
// <20><EFBFBD><D7B7><EFBFBD> frame<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD>, fPrevFrame<6D><65><EFBFBD><EFBFBD> m_fFrame<6D><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
|
|||
|
|
// cur<75><72> Frame [S, E]<5D><><EFBFBD>̿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, cur/pre<72><EFBFBD> int<6E><74> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> ũ<><C5A9> <20><EFBFBD> <20>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> cur<75><72> 0.0<EFBFBD><EFBFBD> <20>ƴϸ<C6B4> <20><><EFBFBD><EFBFBD>..
|
|||
|
|
// cur/pre intij<74><C4B3><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD> 1.0 <20><><EFBFBD>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
|
|||
|
|
float fPrevFrame = m_fFrame - 1.0f;
|
|||
|
|
|
|||
|
|
//float fPrevFrame = m_fFrame;
|
|||
|
|
//m_fFrame += (fDelta * fFPS);
|
|||
|
|
|
|||
|
|
if( m_pActionElement->dwLength < (DWORD)m_fFrame )
|
|||
|
|
{
|
|||
|
|
m_fFrame = 1.0f;
|
|||
|
|
fPrevFrame = -0.1f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//if( 0.0f == fPrevFrame )
|
|||
|
|
// fPrevFrame = -(m_fFrame * 0.1f);
|
|||
|
|
|
|||
|
|
// <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;
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetOnSignalFromChargerSE( true );
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerDestActor( m_hActor );
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerBlow( GetMySmartPtr() );
|
|||
|
|
m_ParentSkillInfo.hSkillUser->PushForceHitElement( m_ParentSkillInfo.eSkillElement );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
CEtActionSignal *pSignal = NULL;
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_55378)
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerAction(m_strChargerActionName.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() );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//OutputDebug("%s, Signal start=%d, preFrame=%f, curFrame=%f, end=%d ====> %s\n", __FUNCTION__, pSignal->GetStartFrame(), fPrevFrame, m_fFrame, pSignal->GetEndFrame(), (isCheckSignal ? "true" : "false"));
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_55378)
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerAction(NULL);
|
|||
|
|
#endif // PRE_FIX_55378
|
|||
|
|
|
|||
|
|
*(m_ParentSkillInfo.hSkillUser->GetMatEx()) = OriginalCross;
|
|||
|
|
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetOnSignalFromChargerSE( false );
|
|||
|
|
DnActorHandle hNullActor;
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerDestActor( hNullActor );
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
DnBlowHandle hNullBlow;
|
|||
|
|
m_ParentSkillInfo.hSkillUser->SetChargerBlow( hNullBlow );
|
|||
|
|
m_ParentSkillInfo.hSkillUser->PopForceHitElement();
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
m_fFrame += (fDelta * fFPS);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
|
|||
|
|
void CDnChargerBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
szNewValue = szOrigValue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnChargerBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
szNewValue = szOrigValue;
|
|||
|
|
}
|
|||
|
|
#endif // PRE_ADD_PREFIX_SYSTE_RENEW
|