370 lines
11 KiB
C++
370 lines
11 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DnFreezingExplosionBlow.h"
|
|||
|
|
#include "DnMonsterActor.h"
|
|||
|
|
#include "EtActionSignal.h"
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
#include "DnGameRoom.h"
|
|||
|
|
#include "DnGameDataManager.h"
|
|||
|
|
#include "DnUserSession.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#define FREEZING_EXPLOSION_ACTION_NAME "Hit_Freezing"
|
|||
|
|
#ifdef PRE_FIX_70011
|
|||
|
|
#define FREEZING_EXPLOSION_HIT_ACTION_NAME "Hit_Pushed"
|
|||
|
|
#endif // PRE_FIX_70011
|
|||
|
|
|
|||
|
|
CDnFreezingExplosionBlow::CDnFreezingExplosionBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ),
|
|||
|
|
m_pActionElement( NULL ),
|
|||
|
|
m_fFrame( 0.0f )
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
,m_iOriAttackMMin( 0 ),
|
|||
|
|
m_iOriAttackMMax( 0 ),
|
|||
|
|
m_bFreezingHitAction( false )
|
|||
|
|
#endif
|
|||
|
|
{
|
|||
|
|
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_117;
|
|||
|
|
AddCallBackType(SB_ONTARGETHIT);
|
|||
|
|
|
|||
|
|
SetValue( szValue );
|
|||
|
|
m_fValue = (float)atof(szValue);
|
|||
|
|
|
|||
|
|
m_pActionElement = m_hActor->GetElement( FREEZING_EXPLOSION_ACTION_NAME );
|
|||
|
|
_ASSERT( m_pActionElement && "ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD>." );
|
|||
|
|
|
|||
|
|
m_ActionDurationTime = 0;
|
|||
|
|
|
|||
|
|
if (m_pActionElement)
|
|||
|
|
{
|
|||
|
|
m_ActionDurationTime = m_pActionElement->dwLength;
|
|||
|
|
m_vlpSignalList = m_pActionElement->pVecSignalList;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnFreezingExplosionBlow::~CDnFreezingExplosionBlow(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDnFreezingExplosionBlow::CanBegin( void )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7>ִ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> <20><><EFBFBD>۵<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
bool bCanBegin = m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_041 ) ||
|
|||
|
|
m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_144 ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. (#27838);
|
|||
|
|
|
|||
|
|
if( false == bCanBegin )
|
|||
|
|
OutputDebug( "CDnFreezingExplosionBlow::CanBegin - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>.\n" );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ߵ<EFBFBD><DFB5><EFBFBD>Ű<EFBFBD><C5B0> <20>ʴ´<CAB4>.
|
|||
|
|
if( NULL == m_pActionElement )
|
|||
|
|
{
|
|||
|
|
bCanBegin = false;
|
|||
|
|
OutputDebug( "CDnFreezingExplosionBlow::CanBegin - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> ȭ<><C8AD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>.\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return bCanBegin;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD>
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
|
|||
|
|
// #28747 <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><> <20>߿<EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if( m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_041 ) )
|
|||
|
|
m_hActor->CmdRemoveStateEffect( STATE_BLOW::BLOW_041 );
|
|||
|
|
|
|||
|
|
if( m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_144 ) )
|
|||
|
|
m_hActor->CmdRemoveStateEffect( STATE_BLOW::BLOW_144 ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. (#27838)
|
|||
|
|
|
|||
|
|
_ApplyOtherSE( m_hActor ); // <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>ɸ<EFBFBD> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>߰<EFBFBD>.
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef PRE_FIX_70011
|
|||
|
|
if( m_hActor->GetHitParam()->bSuccessNormalDamage == true && m_hActor->GetHitParam()->szActionName.empty() == true )
|
|||
|
|
m_hActor->CmdAction( FREEZING_EXPLOSION_HIT_ACTION_NAME );
|
|||
|
|
#endif // PRE_FIX_70011
|
|||
|
|
|
|||
|
|
// <20><> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>ӽð<D3BD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC>Ŵ.
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
_ASSERT( m_ParentSkillInfo.hSkillUser );
|
|||
|
|
if( !m_ParentSkillInfo.hSkillUser )
|
|||
|
|
{
|
|||
|
|
g_Log.Log( LogType::_ERROR, L"CDnFreezingExplosionBlow::OnBegin - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD>Ͱ<EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ʾƼ<CABE> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>..\n" );
|
|||
|
|
SetState( STATE_BLOW::STATE_END );
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_iOriAttackMMin = m_hActor->GetAttackMMin();
|
|||
|
|
m_iOriAttackMMax = m_hActor->GetAttackMMax();
|
|||
|
|
|
|||
|
|
m_hActor->SetAttackMMin( m_ParentSkillInfo.hSkillUser->GetAttackMMin() );
|
|||
|
|
m_hActor->SetAttackMMax( m_ParentSkillInfo.hSkillUser->GetAttackMMax() );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> Ŭ<><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( m_hActor && CDnActorState::Reserved6 < m_hActor->GetActorType() )
|
|||
|
|
static_cast<CDnMonsterActor*>(m_hActor.GetPointer())->SlaveOf( m_ParentSkillInfo.hSkillUser->GetUniqueID() );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
float fFPS = 60.0f;
|
|||
|
|
//m_StateBlow.fDurationTime = (float)m_pActionElement->dwLength / fFPS;
|
|||
|
|
m_StateBlow.fDurationTime = m_ActionDurationTime != 0 ? (float)m_ActionDurationTime / fFPS : 0.0f;
|
|||
|
|
|
|||
|
|
// <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( "CDnFreezingExplosionBlow::OnBegin\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::Process( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
CDnBlow::Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
m_hActor->SetAttackMMin( m_iOriAttackMMin );
|
|||
|
|
m_hActor->SetAttackMMax( m_iOriAttackMMax );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> Ŭ<><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
//if( CDnActorState::Reserved6 < m_hActor->GetActorType() )
|
|||
|
|
if( m_hActor && m_hActor->IsMonsterActor() )
|
|||
|
|
{
|
|||
|
|
DWORD dwInvalidMasterActorID = UINT_MAX;
|
|||
|
|
static_cast<CDnMonsterActor*>(m_hActor.GetPointer())->SlaveOf( dwInvalidMasterActorID );
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
m_hActor->RemoveStateBlowSignal(this->GetMySmartPtr());
|
|||
|
|
|
|||
|
|
OutputDebug( "CDnFreezingExplosionBlow::OnEnd\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::OnTargetHit( DnActorHandle hTargetActor )
|
|||
|
|
{
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
if( m_bFreezingHitAction )
|
|||
|
|
_ApplyOtherSE( hTargetActor );
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
void CDnFreezingExplosionBlow::_ApplyOtherSE( DnActorHandle hActor )
|
|||
|
|
{
|
|||
|
|
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>, <20>ڵ忡 <20>ھƳ<DABE><C6B3>´<EFBFBD>. (#7842)
|
|||
|
|
//- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> = 0.5
|
|||
|
|
//- <20>̼<EFBFBD> <20><><EFBFBD><EFBFBD> = -0.5
|
|||
|
|
//- <20><><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD> ȿ<><C8BF>(<28><><EFBFBD><EFBFBD>) -> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
// <20><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
|
CDNGameRoom* pGameRoom = static_cast<CDNGameRoom*>(m_hActor->GetRoom());
|
|||
|
|
bool bNestMap = false;
|
|||
|
|
if( false == pGameRoom->bIsPvPRoom() )
|
|||
|
|
{
|
|||
|
|
UINT uiSessionID = 0;
|
|||
|
|
pGameRoom->GetLeaderSessionID( uiSessionID );
|
|||
|
|
CDNUserSession *pUserSession = pGameRoom ? pGameRoom->GetUserSession(uiSessionID) : NULL;
|
|||
|
|
if( pUserSession )
|
|||
|
|
{
|
|||
|
|
const TMapInfo* pMapData = g_pDataManager->GetMapInfo( pUserSession->GetMapIndex() );
|
|||
|
|
if( pMapData )
|
|||
|
|
#if defined(PRE_ADD_DRAGON_FELLOWSHIP)
|
|||
|
|
bNestMap = CDnBlow::CheckEffectIgnoreMapType(pMapData->MapType, pMapData->MapSubType);
|
|||
|
|
#else // #if defined(PRE_ADD_DRAGON_FELLOWSHIP)
|
|||
|
|
bNestMap = (GlobalEnum::MAP_DUNGEON == pMapData->MapType) && (GlobalEnum::MAPSUB_NEST == pMapData->MapSubType);
|
|||
|
|
#endif // #if defined(PRE_ADD_DRAGON_FELLOWSHIP)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool bBossMonster = false;
|
|||
|
|
if( hActor->IsMonsterActor() )
|
|||
|
|
{
|
|||
|
|
CDnMonsterActor* pMonsterActor = static_cast<CDnMonsterActor*>(m_hActor.GetPointer());
|
|||
|
|
if( (CDnMonsterState::Boss == pMonsterActor->GetGrade() ||
|
|||
|
|
CDnMonsterState::BossHP4 == pMonsterActor->GetGrade() ||
|
|||
|
|
CDnMonsterState::NestBoss == pMonsterActor->GetGrade() ||
|
|||
|
|
CDnMonsterState::NestBoss8 == pMonsterActor->GetGrade()) )
|
|||
|
|
{
|
|||
|
|
bBossMonster = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//#51048 235<33><35> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ൿ<EFBFBD><E0B5BF><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if( m_hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_235) )
|
|||
|
|
{
|
|||
|
|
bNestMap = true;
|
|||
|
|
bBossMonster = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( false == bNestMap ||
|
|||
|
|
false == bBossMonster )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>̵<EFBFBD><CCB5>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ִٸ<D6B4> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
|
bool bCanAdd = true;
|
|||
|
|
if( hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_025) &&
|
|||
|
|
hActor->IsAppliedThisStateBlow(STATE_BLOW::BLOW_076) )
|
|||
|
|
{
|
|||
|
|
DNVector(DnBlowHandle) vlBlows;
|
|||
|
|
hActor->GetAllAppliedStateBlowBySkillID( m_ParentSkillInfo.iSkillID, vlBlows );
|
|||
|
|
bCanAdd = vlBlows.empty();
|
|||
|
|
//for( int i = 0; i < (int)vlBlows.size(); ++i )
|
|||
|
|
//{
|
|||
|
|
// DnBlowHandle hBlow = vlBlows.at( i );
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( bCanAdd )
|
|||
|
|
{
|
|||
|
|
CDnSkill::SkillInfo SkillInfo = m_ParentSkillInfo;
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
_snprintf_s(szBuff, _countof(szBuff), _TRUNCATE, "%d", 22 );
|
|||
|
|
SkillInfo.szEffectOutputIDToClient = szBuff;
|
|||
|
|
//SkillInfo.hSkillUser = m_hActor;/*GetMySmartPtr();*/
|
|||
|
|
hActor->CmdAddStateEffect( &SkillInfo, STATE_BLOW::BLOW_025, 7000, "-0.5" );
|
|||
|
|
hActor->CmdAddStateEffect( &SkillInfo, STATE_BLOW::BLOW_076, 7000, "-0.5" );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
//#ifdef _GAMESERVER
|
|||
|
|
//
|
|||
|
|
//#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::SignalProcess( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20>ñ׳ε鸸 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
float fFPS = 60.0f;
|
|||
|
|
float fPrevFrame = m_fFrame;
|
|||
|
|
m_fFrame += (fDelta * fFPS);
|
|||
|
|
|
|||
|
|
//if(m_pActionElement->dwLength < (DWORD)m_fFrame )
|
|||
|
|
if (m_ActionDurationTime < (DWORD)m_fFrame)
|
|||
|
|
{
|
|||
|
|
m_fFrame = 1.0f;
|
|||
|
|
fPrevFrame = -0.1f;
|
|||
|
|
|
|||
|
|
// <20><EFBFBD><D7BC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٸ<DFB4> <20><> <20>̻<EFBFBD> <20>ñ׳<C3B1> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
// <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ŭ <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( 0.0f == fPrevFrame )
|
|||
|
|
fPrevFrame = -(m_fFrame * 0.1f);
|
|||
|
|
|
|||
|
|
CEtActionSignal *pSignal = NULL;
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_55378)
|
|||
|
|
m_hActor->SetChargerAction(FREEZING_EXPLOSION_ACTION_NAME);
|
|||
|
|
#endif // PRE_FIX_55378
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_62309)
|
|||
|
|
#if defined(_GAMESERVER)
|
|||
|
|
//#62309
|
|||
|
|
//<2F>ñ׳<C3B1> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD>鼭 OnSignal<61><6C> Hit<69><74> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
|||
|
|
//<2F>ñ׳<C3B1> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, Hit<69>ñ׳<C3B1> ó<><C3B3><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>..
|
|||
|
|
m_hActor->PushForceHitElement(m_ParentSkillInfo.eSkillElement);
|
|||
|
|
#endif // _GAMESERVER
|
|||
|
|
#endif // PRE_FIX_62309
|
|||
|
|
|
|||
|
|
//for( DWORD i=0; i < m_pActionElement->pVecSignalList.size(); i++ )
|
|||
|
|
for( DWORD i=0; i < m_vlpSignalList.size(); i++ )
|
|||
|
|
{
|
|||
|
|
//pSignal = m_pActionElement->pVecSignalList[i];
|
|||
|
|
pSignal = m_vlpSignalList[i];
|
|||
|
|
if( pSignal->CheckSignal( fPrevFrame, m_fFrame ) == true )
|
|||
|
|
{
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
if( STE_Hit == pSignal->GetSignalIndex() )
|
|||
|
|
m_bFreezingHitAction = true;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
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_hActor->OnSignal( (SignalTypeEnum)pSignal->GetSignalIndex(), pSignal->GetData(), LocalTime,
|
|||
|
|
StartTime, EndTime, pSignal->GetSignalListArrayIndex() );
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
if( m_bFreezingHitAction )
|
|||
|
|
m_bFreezingHitAction = false;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_62309)
|
|||
|
|
#if defined(_GAMESERVER)
|
|||
|
|
m_hActor->PopForceHitElement();
|
|||
|
|
#endif // _GAMESERVER
|
|||
|
|
#endif // PRE_FIX_62309
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_55378)
|
|||
|
|
m_hActor->SetChargerAction(NULL);
|
|||
|
|
#endif // PRE_FIX_55378
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
|
|||
|
|
void CDnFreezingExplosionBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
float fValue[2];
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//ù<><C3B9>° <20><>
|
|||
|
|
fValue[0] = (float)atof( szOrigValue );
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F>ι<EFBFBD>°
|
|||
|
|
fValue[1] = (float)atof( szAddValue );
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
float fResultValue = fValue[0] + fValue[1];
|
|||
|
|
|
|||
|
|
sprintf_s(szBuff, "%f", fResultValue);
|
|||
|
|
|
|||
|
|
szNewValue = szBuff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnFreezingExplosionBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
float fValue[2];
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//ù<><C3B9>° <20><>
|
|||
|
|
fValue[0] = (float)atof( szOrigValue );
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F>ι<EFBFBD>°
|
|||
|
|
fValue[1] = (float)atof( szAddValue );
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
float fResultValue = fValue[0] - fValue[1];
|
|||
|
|
|
|||
|
|
sprintf_s(szBuff, "%f", fResultValue);
|
|||
|
|
|
|||
|
|
szNewValue = szBuff;
|
|||
|
|
}
|
|||
|
|
#endif // PRE_ADD_PREFIX_SYSTE_RENEW
|