2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnUsingSkillWhenDieBlow.h"
# include "DnMonsterActor.h"
# include "DnInvincibleBlow.h"
# ifdef _DEBUG
# define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
# endif
CDnUsingSkillWhenDieBlow : : CDnUsingSkillWhenDieBlow ( DnActorHandle hActor , const char * szValue ) : CDnBlow ( hActor ) ,
m_bUsedDieSkill ( false ) ,
m_bDead ( false )
{
m_StateBlow . emBlowIndex = STATE_BLOW : : BLOW_137 ;
SetValue ( szValue ) ;
m_fValue = ( float ) atof ( szValue ) ;
}
CDnUsingSkillWhenDieBlow : : ~ CDnUsingSkillWhenDieBlow ( void )
{
}
# ifdef _GAMESERVER
bool CDnUsingSkillWhenDieBlow : : CanBegin ( void )
{
bool bResult = true ;
// <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
DnSkillHandle hSkill = m_hActor - > FindSkill ( ( int ) m_fValue ) ;
if ( ! hSkill )
{
OutputDebug ( " CDnUsingSkillWhenDieBlow::CanBegin - Don't have skill \n " ) ;
bResult = false ;
}
return bResult ;
}
# endif
void CDnUsingSkillWhenDieBlow : : OnBegin ( LOCAL_TIME LocalTime , float fDelta )
{
_ASSERT ( m_hActor - > IsMonsterActor ( ) & & " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 鼭 Ư<> <C6AF> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> ." ) ;
if ( false = = m_hActor - > IsMonsterActor ( ) )
SetState ( STATE_BLOW : : STATE_END ) ;
// hp <20> <> 0 <20> <> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD> <C6B4> <EFBFBD> <20> Ǵ<EFBFBD> <C7B4> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// CDnActor::Die() ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> <> hp 1 <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <20> Լ<EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų<EFBFBD> <C5B2> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> δ<EFBFBD> ..
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> ..
OutputDebug ( " CDnUsingSkillWhenDieBlow::OnBegin \n " ) ;
}
void CDnUsingSkillWhenDieBlow : : OnDie ( void )
{
// <20> <> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> ..
m_hActor - > SetHP ( 1 ) ;
m_bDead = true ;
// <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> hp <20> <> 1<> <31> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ai <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų<EFBFBD> <C5B2> .
# ifdef _GAMESERVER
CDnMonsterActor * pMonsterActor = static_cast < CDnMonsterActor * > ( m_hActor . GetPointer ( ) ) ;
pMonsterActor - > SetAIState ( MAAiReceiver : : Disable ) ;
m_hActor - > CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_069 , 0 , " 10 " , false , false ) ;
m_hActor - > CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_099 , - 1 , " " , false , false ) ;
# endif
}
void CDnUsingSkillWhenDieBlow : : Process ( LOCAL_TIME LocalTime , float fDelta )
{
CDnBlow : : Process ( LocalTime , fDelta ) ;
# ifdef _GAMESERVER
if ( m_bDead )
{
# endif
if ( false = = m_bUsedDieSkill )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 鼭 <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> .
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Stand <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ѵ <EFBFBD> .
DnSkillHandle hSkill = m_hActor - > GetProcessSkill ( ) ;
if ( hSkill & &
( hSkill - > GetClassID ( ) = = ( int ) m_fValue ) )
{
m_bUsedDieSkill = true ;
}
# ifdef _GAMESERVER
else
{
// <20> <> <EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> س<EFBFBD> <D8B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> Ƹ<EFBFBD> <C6B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <D8BE> <EFBFBD> <20> <> .
if ( strstr ( m_hActor - > GetCurrentAction ( ) , " Stand " ) )
{
m_hActor - > UseSkill ( ( int ) m_fValue , false ) ;
//#44884 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> DieSkill <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> /Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD>
//Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> <> <EFBFBD> 찡 <20> <EFBFBD> <DFBB> <EFBFBD> .
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> ȭ <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> ..
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> ShowStateEffect <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> ̿<EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> ..
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
DWORD dwUniqueID = m_hActor ? m_hActor - > GetUniqueID ( ) : - 1 ;
STATE_BLOW : : emBLOW_INDEX blowIndex = STATE_BLOW : : BLOW_137 ;
bool bShowEffect = true ;
Stream . Write ( & dwUniqueID , sizeof ( dwUniqueID ) ) ;
Stream . Write ( & blowIndex , sizeof ( blowIndex ) ) ;
Stream . Write ( & bShowEffect , sizeof ( bShowEffect ) ) ;
m_hActor - > Send ( eActor : : SC_SHOW_STATE_EFFECT , & Stream ) ;
}
else if ( ! m_hActor - > IsAir ( ) )
{
m_hActor - > CmdAction ( " Stand " ) ;
}
}
# endif
}
if ( m_bUsedDieSkill )
{
// HP <20> <> 0 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ״<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 鼭 <20> <> ü <20> <> <EFBFBD> <EFBFBD> .
// HP <20> <> 0 <20> <> <20> Ǹ<EFBFBD> , ProcessDie <20> <> <EFBFBD> <EFBFBD> destroy <20> <> <20> <> <EFBFBD> õȴ<C3B5> .
if ( false = = m_hActor - > IsProcessSkill ( ) )
{
m_hActor - > SetActionQueue ( " Die " ) ;
m_hActor - > SetHP ( 0 ) ;
# if defined(PRE_FIX_44884)
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E2BFA1> OnDie<69> <65> ȣ <> <C8A3> <20> Ѵ <EFBFBD> ..
//Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ CDnActor::OnDie<69> <65> protected<65> <64> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> ־
//<2F> <> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ͷ<EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> ؼ<EFBFBD> OnDieȣ <65> <C8A3> <20> Ѵ <EFBFBD> .
CDnMonsterActor * pMonsterActor = static_cast < CDnMonsterActor * > ( m_hActor . GetPointer ( ) ) ;
if ( pMonsterActor )
pMonsterActor - > OnDie ( m_FinalHitterActor ) ;
SetState ( STATE_BLOW : : STATE_END ) ;
# endif // PRE_FIX_44884
# ifndef _GAMESERVER
m_hActor - > SetDieDelta ( 3.0f ) ;
# endif
}
}
# ifdef _GAMESERVER
}
# endif
}
void CDnUsingSkillWhenDieBlow : : OnEnd ( LOCAL_TIME LocalTime , float fDelta )
{
OutputDebug ( " CDnUsingSkillWhenDieBlow::OnEnd \n " ) ;
}
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnUsingSkillWhenDieBlow : : AddStateEffectValue ( const char * szOrigValue , const char * szAddValue , std : : string & szNewValue )
{
char szBuff [ 128 ] = { 0 , } ;
szNewValue = szOrigValue ;
}
void CDnUsingSkillWhenDieBlow : : RemoveStateEffectValue ( const char * szOrigValue , const char * szAddValue , std : : string & szNewValue )
{
char szBuff [ 128 ] = { 0 , } ;
szNewValue = szOrigValue ;
}
# endif // PRE_ADD_PREFIX_SYSTE_RENEW