176 lines
4.9 KiB
C++
176 lines
4.9 KiB
C++
|
|
#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
|