531 lines
16 KiB
C++
531 lines
16 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DnFreezingPrisonBlow.h"
|
|||
|
|
#include "DnHighLanderBlow.h"
|
|||
|
|
#include "DnCantMoveBlow.h"
|
|||
|
|
#include "DnCantActionBlow.h"
|
|||
|
|
#include "DnFrameStopBlow.h"
|
|||
|
|
|
|||
|
|
#include "EtActionBase.h"
|
|||
|
|
#include "EtActionSignal.h"
|
|||
|
|
|
|||
|
|
#if !defined( USE_BOOST_MEMPOOL )
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
|
|||
|
|
#endif
|
|||
|
|
#endif // #if !defined( USE_BOOST_MEMPOOL )
|
|||
|
|
|
|||
|
|
const int FREEZING_PRISON_INTERVAL_TIME = 1000;
|
|||
|
|
|
|||
|
|
|
|||
|
|
CDnFreezingPrisonBlow::CDnFreezingPrisonBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ),
|
|||
|
|
m_pCantMoveBlow( new CDnCantMoveBlow(hActor, NULL ) ),
|
|||
|
|
m_pCantActionBlow( new CDnCantActionBlow(hActor, NULL) ),
|
|||
|
|
m_pFrameStopBlow( new CDnFrameStopBlow(hActor, NULL) ),
|
|||
|
|
m_IntervalChecker( hActor, GetMySmartPtr() ),
|
|||
|
|
m_fIntervalDamage( 0.0f ),
|
|||
|
|
m_iDurability( 0 ),
|
|||
|
|
m_bDurabilityDestroyed( false )
|
|||
|
|
{
|
|||
|
|
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_149;
|
|||
|
|
|
|||
|
|
SetValue( szValue );
|
|||
|
|
|
|||
|
|
m_iFinalDamage = 0;
|
|||
|
|
m_iOriginalTeam = -1;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڰ<EFBFBD> <20><> 3<><33><EFBFBD><EFBFBD>.
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ӽð<D3BD> <20><> <20>Ǿ<EFBFBD> <20><><EFBFBD>߽<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
string strValue( szValue );
|
|||
|
|
|
|||
|
|
// <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
|||
|
|
std::vector<string> vlTokens;
|
|||
|
|
TokenizeA( strValue, vlTokens, ";" );
|
|||
|
|
|
|||
|
|
bool bValidArgument = (3 == (int)vlTokens.size());
|
|||
|
|
_ASSERT( bValidArgument && "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>." );
|
|||
|
|
|
|||
|
|
if( bValidArgument )
|
|||
|
|
{
|
|||
|
|
string strDurability = vlTokens.at( 0 );
|
|||
|
|
string strFinalDamage = vlTokens.at( 1 );
|
|||
|
|
string strIntervalDamage = vlTokens.at( 2 );
|
|||
|
|
|
|||
|
|
m_iDurability = atoi( strDurability.c_str() );
|
|||
|
|
m_iFinalDamage = atoi( strFinalDamage.c_str() );
|
|||
|
|
m_fIntervalDamage = (float)atoi( strIntervalDamage.c_str() );
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
AddCallBackType( SB_ONDEFENSEATTACK );
|
|||
|
|
AddCallBackType( SB_ONCALCDAMAGE );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
m_pCantActionBlow->SetActionWhenCancelAttack( "Freezing" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_fOrigWight = 0.0f;
|
|||
|
|
m_iOrigPressLevel = 0;
|
|||
|
|
m_iMaxDurability = m_iDurability;
|
|||
|
|
|
|||
|
|
// [2010/12/13 semozz]
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>
|
|||
|
|
if (m_pCantMoveBlow)
|
|||
|
|
m_pCantMoveBlow->SetPermanent(true);
|
|||
|
|
if (m_pCantActionBlow)
|
|||
|
|
m_pCantActionBlow->SetPermanent(true);
|
|||
|
|
if (m_pFrameStopBlow)
|
|||
|
|
m_pFrameStopBlow->SetPermanent(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDnFreezingPrisonBlow::~CDnFreezingPrisonBlow(void)
|
|||
|
|
{
|
|||
|
|
SAFE_DELETE( m_pCantMoveBlow );
|
|||
|
|
SAFE_DELETE( m_pCantActionBlow );
|
|||
|
|
SAFE_DELETE( m_pFrameStopBlow );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnFreezingPrisonBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
m_IntervalChecker.OnBegin( LocalTime, FREEZING_PRISON_INTERVAL_TIME );
|
|||
|
|
|
|||
|
|
// <20>ൿ<EFBFBD>Ұ<EFBFBD>, <20>̵<EFBFBD><CCB5>Ұ<EFBFBD>
|
|||
|
|
if( m_pCantMoveBlow )
|
|||
|
|
m_pCantMoveBlow->OnBegin( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pCantActionBlow )
|
|||
|
|
m_pCantActionBlow->OnBegin( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pFrameStopBlow )
|
|||
|
|
m_pFrameStopBlow->OnBegin( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_50482)
|
|||
|
|
if (m_hActor && m_hActor->GetChangeTeamRefCount() == 0)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
|
|||
|
|
m_iOriginalTeam = m_hActor->GetTeam();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>´<EFBFBD>.
|
|||
|
|
m_hActor->SetOriginalTeam(m_iOriginalTeam);
|
|||
|
|
}
|
|||
|
|
m_hActor->AddChangeTeamRefCount();
|
|||
|
|
|
|||
|
|
m_hActor->SetTeam( m_ParentSkillInfo.iSkillUserTeam );
|
|||
|
|
#else
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
|
|||
|
|
m_iOriginalTeam = m_hActor->GetTeam();
|
|||
|
|
m_hActor->SetTeam( m_ParentSkillInfo.iSkillUserTeam );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>´<EFBFBD>.
|
|||
|
|
m_hActor->SetOriginalTeam(m_iOriginalTeam);
|
|||
|
|
#endif // PRE_FIX_50482
|
|||
|
|
|
|||
|
|
#ifndef _GAMESERVER
|
|||
|
|
_AttachGraphicEffect();
|
|||
|
|
|
|||
|
|
// ó<><C3B3><EFBFBD><EFBFBD> idle <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
|
if( m_hEtcObjectEffect )
|
|||
|
|
m_hEtcObjectEffect->SetActionQueue( "Idle" );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>۵ɶ<DBB5> Weight/PressLevel<65><6C> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
|||
|
|
m_fOrigWight = m_hActor->GetWeight();
|
|||
|
|
m_iOrigPressLevel = m_hActor->GetPressLevel();
|
|||
|
|
|
|||
|
|
//ij<><C4B3><EFBFBD><EFBFBD> <20>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
m_hActor->SetWeight(0.0f);
|
|||
|
|
m_hActor->SetPressLevel(-1);
|
|||
|
|
|
|||
|
|
#if defined(_GAMESERVER)
|
|||
|
|
//StateBlow<6F><77> <20><><EFBFBD>۵ɶ<DBB5> UI ǥ<><C7A5>
|
|||
|
|
m_hActor->CmdFreezingPrisonDurablity(GetBlowID(), 100.0f, true);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
OutputDebug( "CDnFreezingPrisonBlow::OnBegin\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
void CDnFreezingPrisonBlow::_RequestDamage( float fDamage )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_FIX_44884)
|
|||
|
|
#if defined(PRE_FIX_61382)
|
|||
|
|
DnActorHandle hActor = CDnActor::GetOwnerActorHandle(m_hActor);
|
|||
|
|
if (hActor &&
|
|||
|
|
hActor->IsDie() == false)
|
|||
|
|
{
|
|||
|
|
m_hActor->RequestDamageFromStateBlow(GetMySmartPtr(), (int)fDamage);
|
|||
|
|
|
|||
|
|
//#48491 Ÿ<≯ӷ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ActorStatIntervlaManipulator<6F><72><EFBFBD><EFBFBD> Dieȣ<65><C8A3><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
//<2F><><EFBFBD>⼭<EFBFBD><E2BCAD> Dieȣ<65><C8A3><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
//if (m_hActor->IsDie())
|
|||
|
|
// m_hActor->Die(m_ParentSkillInfo.hSkillUser);
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
if (m_hActor->IsDie() == false)
|
|||
|
|
{
|
|||
|
|
m_hActor->RequestDamageFromStateBlow(GetMySmartPtr(), (int)fDamage);
|
|||
|
|
|
|||
|
|
//#48491 Ÿ<≯ӷ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ActorStatIntervlaManipulator<6F><72><EFBFBD><EFBFBD> Dieȣ<65><C8A3><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
//<2F><><EFBFBD>⼭<EFBFBD><E2BCAD> Dieȣ<65><C8A3><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
//if (m_hActor->IsDie())
|
|||
|
|
// m_hActor->Die(m_ParentSkillInfo.hSkillUser);
|
|||
|
|
}
|
|||
|
|
#endif // PRE_FIX_61382
|
|||
|
|
#else
|
|||
|
|
// <20><><EFBFBD>̷<EFBFBD><CCB7><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾƾ<CABE> <20>Ѵ<EFBFBD>.
|
|||
|
|
float fResultDamage = fDamage;
|
|||
|
|
if( m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_143 ) )
|
|||
|
|
{
|
|||
|
|
// IsAppliedThisStateBlow() <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> true <20><> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><> <20><>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> GatherAppliedStateBlowByBlowIndex() <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
|||
|
|
DNVector( DnBlowHandle ) vlhHighLanderBlow;
|
|||
|
|
m_hActor->GatherAppliedStateBlowByBlowIndex( STATE_BLOW::BLOW_143, vlhHighLanderBlow );
|
|||
|
|
if( 0 < (int)vlhHighLanderBlow.size() )
|
|||
|
|
{
|
|||
|
|
CDnHighlanderBlow* pHighlanderBlow = static_cast<CDnHighlanderBlow*>(vlhHighLanderBlow.front().GetPointer());
|
|||
|
|
fResultDamage += pHighlanderBlow->CalcDamage( fResultDamage );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DWORD dwHitterUniqueID = m_ParentSkillInfo.hSkillUser ? m_ParentSkillInfo.hSkillUser->GetUniqueID() : -1;
|
|||
|
|
m_hActor->SetHP( m_hActor->GetHP()-(INT64)fResultDamage );
|
|||
|
|
m_hActor->RequestHPMPDelta( m_ParentSkillInfo.eSkillElement, -(INT64)fResultDamage, dwHitterUniqueID );
|
|||
|
|
#endif // PRE_FIX_44884
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
bool CDnFreezingPrisonBlow::OnCustomIntervalProcess( void )
|
|||
|
|
{
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
if( 0.0f < m_fIntervalDamage )
|
|||
|
|
{
|
|||
|
|
_RequestDamage( m_fIntervalDamage );
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
//if( m_hEtcObjectEffect )
|
|||
|
|
//{
|
|||
|
|
// CEtActionBase::ActionElementStruct* pStruct = m_hEtcObjectEffect->GetElement( "Idle" );
|
|||
|
|
// if( pStruct )
|
|||
|
|
// {
|
|||
|
|
// m_fEffectLength = (float)pStruct->dwLength / 1000.0f;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// _SetDiffuse( 0.0f, 1.0f, 0.0f, 1.0f );
|
|||
|
|
// m_bEffecting = true;
|
|||
|
|
//}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnFreezingPrisonBlow::Process( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
CDnBlow::Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
m_IntervalChecker.Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pCantMoveBlow )
|
|||
|
|
m_pCantMoveBlow->Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pCantActionBlow )
|
|||
|
|
m_pCantActionBlow->Process( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pFrameStopBlow )
|
|||
|
|
m_pFrameStopBlow->Process( LocalTime, fDelta );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDnFreezingPrisonBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
|
|||
|
|
{
|
|||
|
|
#ifndef _GAMESERVER
|
|||
|
|
//_SetDiffuse( 1.0f, 1.0f, 1.0f, 1.0f );
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>. <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
//_DetachGraphicEffect();
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if( m_pCantMoveBlow )
|
|||
|
|
m_pCantMoveBlow->OnEnd( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pCantActionBlow )
|
|||
|
|
m_pCantActionBlow->OnEnd( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
if( m_pFrameStopBlow )
|
|||
|
|
m_pFrameStopBlow->OnEnd( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
// <20>̷<EFBFBD><CCB7><EFBFBD> <20>ؾ<EFBFBD> <20><><EFBFBD>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ǯ<><C7AE><EFBFBD><EFBFBD>.
|
|||
|
|
m_hActor->SetStiffDelta( 0.001f );
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
// <20><><EFBFBD>ӽð<D3BD> <20><> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
|
|||
|
|
if( false == m_bDurabilityDestroyed )
|
|||
|
|
{
|
|||
|
|
_RequestDamage( (float)m_iFinalDamage );
|
|||
|
|
|
|||
|
|
//#48491<39><31><EFBFBD><EFBFBD> Ÿ<≯ӷ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ActorStatIntervlaManipulator<6F><72><EFBFBD><EFBFBD> Dieȣ<65><C8A3><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OnEnd<6E><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Dieó<65><C3B3> <20>ؾ<EFBFBD><D8BE><EFBFBD>.
|
|||
|
|
#if defined(PRE_FIX_61382)
|
|||
|
|
DnActorHandle hActor = CDnActor::GetOwnerActorHandle(m_hActor);
|
|||
|
|
if (hActor && hActor->IsDie())
|
|||
|
|
hActor->Die(m_ParentSkillInfo.hSkillUser);
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
if (m_hActor->IsDie())
|
|||
|
|
m_hActor->Die(m_ParentSkillInfo.hSkillUser);
|
|||
|
|
#endif // PRE_FIX_61382
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
if (m_hActor->IsDie())
|
|||
|
|
{
|
|||
|
|
// ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><EFBFBD><D7BE>ٸ<EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Effect <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
if( m_hEtcObjectEffect )
|
|||
|
|
m_hEtcObjectEffect->SetActionQueue( "Summon_Off" );
|
|||
|
|
|
|||
|
|
OutputDebug("SetActionQueue ---> Summon_Off\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִµ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD>ӽð<D3BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ű<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> <20><EFBFBD><D7BC><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
|
if( IsEnd() )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ʈ <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( m_hEtcObjectEffect )
|
|||
|
|
m_hEtcObjectEffect->SetActionQueue( "Attack" );
|
|||
|
|
|
|||
|
|
OutputDebug("SetActionQueue ---> Attack\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ʈ <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( m_hEtcObjectEffect )
|
|||
|
|
m_hEtcObjectEffect->SetActionQueue( "Break" );
|
|||
|
|
|
|||
|
|
OutputDebug("SetActionQueue ---> Break\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
TSmartPtrSignalImp<DnEtcHandle, EtcObjectSignalStruct>::SmartPtrSignalImpStruct *pStruct =
|
|||
|
|
(TSmartPtrSignalImp<DnEtcHandle, EtcObjectSignalStruct>::SmartPtrSignalImpStruct *)m_hActor->TSmartPtrSignalImp<DnEtcHandle, EtcObjectSignalStruct>::GetStruct( STATEBLOWEFFECT_ETCOFFSET + m_StateBlow.emBlowIndex, GetBlowID() );
|
|||
|
|
if( pStruct )
|
|||
|
|
pStruct->bLinkObject = false;
|
|||
|
|
|
|||
|
|
// ȿ<><C8BF> <20><><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ִ<EFBFBD> <20><> <20>ƴϰ<C6B4>, <20><><EFBFBD><EFBFBD>Ʈ <20><>ü<EFBFBD><C3BC> destroy <20>ñ׳η<D7B3> <20>˾Ƽ<CBBE> <20>״´<D7B4>.
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD><DFB0><EFBFBD> <20><> <20>Ǵ<EFBFBD> <20>ٰŰ<D9B0> <20>Ǵ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
|
// <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD><DFB0><EFBFBD> <20>ȵ<EFBFBD>.
|
|||
|
|
m_hActor->DetachSEEffectSkillInfo( m_ParentSkillInfo );
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
m_IntervalChecker.OnEnd( LocalTime, fDelta );
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
m_hActor->SetWeight(m_fOrigWight);
|
|||
|
|
m_hActor->SetPressLevel(m_iOrigPressLevel);
|
|||
|
|
|
|||
|
|
#if defined(_GAMESERVER)
|
|||
|
|
//StateBlow<6F><77> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI<55><49> <20><><EFBFBD>־<EFBFBD><D6BE><EFBFBD>.
|
|||
|
|
m_hActor->CmdFreezingPrisonDurablity(GetBlowID(), 0.0f, false);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_50482)
|
|||
|
|
if (m_hActor && m_hActor->GetChangeTeamRefCount() == 1)
|
|||
|
|
{
|
|||
|
|
m_hActor->SetTeam(m_iOriginalTeam);
|
|||
|
|
}
|
|||
|
|
m_hActor->RemoveChangeTeamRefCount();
|
|||
|
|
#else
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><> <20><>ų<EFBFBD><C5B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
|
|||
|
|
m_hActor->SetTeam( m_iOriginalTeam );
|
|||
|
|
#endif // PRE_FIX_50482
|
|||
|
|
|
|||
|
|
OutputDebug( "CDnFreezingPrisonBlow::OnEnd\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if !defined(_GAMESERVER)
|
|||
|
|
void CDnFreezingPrisonBlow::OnHit()
|
|||
|
|
{
|
|||
|
|
if (m_hEtcObjectEffect)
|
|||
|
|
m_hEtcObjectEffect->SetActionQueue( "Hit" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Guage<67>ǿ<D7BC><C7BF><EFBFBD> Action<6F>ñ׳<C3B1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Offset<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
EtVector3 CDnFreezingPrisonBlow::GetGaugePos()
|
|||
|
|
{
|
|||
|
|
// m_hEtcObjectEffect<63><74> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>. [2010/12/15 semozz]
|
|||
|
|
EtVector3 vPos = EtVector3(0.0f, 0.0f, 0.0f);
|
|||
|
|
|
|||
|
|
if (m_hEtcObjectEffect)
|
|||
|
|
{
|
|||
|
|
vPos = *m_hEtcObjectEffect->GetPosition();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><E2BFA1> Hit Signal<61><6C> <20>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>..
|
|||
|
|
CEtActionBase::ActionElementStruct* pActionElement = m_hEtcObjectEffect->GetElement("Gauge");
|
|||
|
|
if (pActionElement)
|
|||
|
|
{
|
|||
|
|
if (pActionElement->pVecSignalList.size() != 1)
|
|||
|
|
{
|
|||
|
|
OutputDebug("Gauge <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Hit Signal<61><6C> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.. !!!\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CEtActionSignal *pSignal = pActionElement->pVecSignalList[0];
|
|||
|
|
HitStruct *pStruct = pSignal ? (HitStruct *)pSignal->GetData() : NULL;
|
|||
|
|
|
|||
|
|
if (pStruct)
|
|||
|
|
vPos += *pStruct->vOffset;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return vPos;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef _GAMESERVER
|
|||
|
|
|
|||
|
|
bool CDnFreezingPrisonBlow::OnDefenseAttack( DnActorHandle hHitter, CDnState* pAttackerState, CDnDamageBase::SHitParam &HitParam, bool bHitSuccess )
|
|||
|
|
{
|
|||
|
|
// <20>ǰݽ<C7B0> <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>?<3F><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
HitParam.vResistance = EtVector3( 0.0f, 0.0f, 0.0f );
|
|||
|
|
HitParam.vVelocity = EtVector3( 0.0f, 0.0f, 0.0f );
|
|||
|
|
HitParam.vViewVec = *(m_hActor->GetLookDir());
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
float CDnFreezingPrisonBlow::OnCalcDamage( float fOriginalDamage, CDnDamageBase::SHitParam& HitParam )
|
|||
|
|
{
|
|||
|
|
// <20><>Ʈ <20>ñ׳ο<D7B3> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
m_iDurability -= (int)(HitParam.fDurability * 100.0f);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ǥ<><C7A5> & <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
float fCurrentValue = min((float)m_iMaxDurability, max(0.0f, (float)m_iDurability));
|
|||
|
|
float fRate = m_iMaxDurability != 0 ? (fCurrentValue / (float)m_iMaxDurability) : 0.0f;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>⼭ false<73><65> <20><><EFBFBD><EFBFBD> <20>ָ<EFBFBD> UI<55><49> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> OnEnd<6E><64><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><E2BFA1><EFBFBD><EFBFBD> bShowGauge<67><65><EFBFBD><EFBFBD> <20><EFBFBD> true<75>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
// OnEnd<6E><64><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>..
|
|||
|
|
bool bShowGauge = true;//fRate > 0.0f;
|
|||
|
|
m_hActor->CmdFreezingPrisonDurablity(GetBlowID(), fRate, bShowGauge);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
|
|||
|
|
if( m_iDurability <= 0 )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ǿ<EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>ƹ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>.
|
|||
|
|
m_bDurabilityDestroyed = true;
|
|||
|
|
|
|||
|
|
// CDnStateBlow::Process() <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD>ٷ<EFBFBD> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD> <20>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ŵȴ<C5B5>.
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
m_hActor->AddReserveRemoveBlow( GetMySmartPtr() );
|
|||
|
|
OutputDebug( "CDnFreezingBlow::OnCalcDamage - Freezing Broken by Attack!\n" );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return -fOriginalDamage;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
|
|||
|
|
void CDnFreezingPrisonBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
//<2F>Ľ̿<C4BD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
std::vector<string> vlTokens[2];
|
|||
|
|
string strArgument[2];
|
|||
|
|
|
|||
|
|
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
int iDurability[2] = {0, };
|
|||
|
|
int iFinalDamage[2] = {0, };
|
|||
|
|
float fIntervalDamage[2] = {0.0f, };
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
|
|||
|
|
strArgument[0] = szOrigValue;
|
|||
|
|
TokenizeA( strArgument[0], vlTokens[0], ";" );
|
|||
|
|
|
|||
|
|
if( vlTokens[0].size() == 3 )
|
|||
|
|
{
|
|||
|
|
iDurability[0] = atoi( vlTokens[0][0].c_str() );
|
|||
|
|
iFinalDamage[0] = atoi( vlTokens[0][1].c_str() );
|
|||
|
|
fIntervalDamage[0] = (float)atof( vlTokens[0][2].c_str() );
|
|||
|
|
}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F>ι<EFBFBD>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>
|
|||
|
|
strArgument[1] = szAddValue;
|
|||
|
|
TokenizeA( strArgument[1], vlTokens[1], ";" );
|
|||
|
|
|
|||
|
|
if( vlTokens[1].size() == 3 )
|
|||
|
|
{
|
|||
|
|
iDurability[1] = atoi( vlTokens[1][0].c_str() );
|
|||
|
|
iFinalDamage[1] = atoi( vlTokens[1][1].c_str() );
|
|||
|
|
fIntervalDamage[1] = (float)atof( vlTokens[1][2].c_str() );
|
|||
|
|
}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
int iResultDurability = iDurability[0] + iDurability[1];
|
|||
|
|
int iResultFinalDamage = iFinalDamage[0] + iFinalDamage[1];
|
|||
|
|
float fResultIntervalDamage = fIntervalDamage[0] + fIntervalDamage[1];
|
|||
|
|
|
|||
|
|
sprintf_s(szBuff, "%d;%d;%f", iResultDurability, iResultFinalDamage, fResultIntervalDamage);
|
|||
|
|
|
|||
|
|
szNewValue = szBuff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnFreezingPrisonBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
|
|||
|
|
{
|
|||
|
|
char szBuff[128] = {0, };
|
|||
|
|
|
|||
|
|
//<2F>Ľ̿<C4BD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
std::vector<string> vlTokens[2];
|
|||
|
|
string strArgument[2];
|
|||
|
|
|
|||
|
|
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
int iDurability[2] = {0, };
|
|||
|
|
int iFinalDamage[2] = {0, };
|
|||
|
|
float fIntervalDamage[2] = {0.0f, };
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
|
|||
|
|
strArgument[0] = szOrigValue;
|
|||
|
|
TokenizeA( strArgument[0], vlTokens[0], ";" );
|
|||
|
|
|
|||
|
|
if( vlTokens[0].size() == 3 )
|
|||
|
|
{
|
|||
|
|
iDurability[0] = atoi( vlTokens[0][0].c_str() );
|
|||
|
|
iFinalDamage[0] = atoi( vlTokens[0][1].c_str() );
|
|||
|
|
fIntervalDamage[0] = (float)atof( vlTokens[0][2].c_str() );
|
|||
|
|
}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F>ι<EFBFBD>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>
|
|||
|
|
strArgument[1] = szAddValue;
|
|||
|
|
TokenizeA( strArgument[1], vlTokens[1], ";" );
|
|||
|
|
|
|||
|
|
if( vlTokens[1].size() == 3 )
|
|||
|
|
{
|
|||
|
|
iDurability[1] = atoi( vlTokens[1][0].c_str() );
|
|||
|
|
iFinalDamage[1] = atoi( vlTokens[1][1].c_str() );
|
|||
|
|
fIntervalDamage[1] = (float)atof( vlTokens[1][2].c_str() );
|
|||
|
|
}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
int iResultDurability = iDurability[0] - iDurability[1];
|
|||
|
|
int iResultFinalDamage = iFinalDamage[0] - iFinalDamage[1];
|
|||
|
|
float fResultIntervalDamage = fIntervalDamage[0] - fIntervalDamage[1];
|
|||
|
|
|
|||
|
|
sprintf_s(szBuff, "%d;%d;%f", iResultDurability, iResultFinalDamage, fResultIntervalDamage);
|
|||
|
|
|
|||
|
|
szNewValue = szBuff;
|
|||
|
|
}
|
|||
|
|
#endif // PRE_ADD_PREFIX_SYSTE_RENEW
|