2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnAttackerHPRatio.h"
# ifdef _DEBUG
# define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
# endif
CDnAttackerHPRatio : : CDnAttackerHPRatio ( DnActorHandle hActor , const char * szValue ) : CDnBlow ( hActor )
{
m_StateBlow . emBlowIndex = STATE_BLOW : : BLOW_092 ;
SetValue ( szValue ) ;
m_fValue = ( float ) atof ( szValue ) ;
# ifdef _GAMESERVER
AddCallBackType ( SB_ONDEFENSEATTACK ) ;
AddCallBackType ( SB_ONCALCDAMAGE ) ;
# endif
}
CDnAttackerHPRatio : : ~ CDnAttackerHPRatio ( void )
{
}
void CDnAttackerHPRatio : : OnSetParentSkillInfo ( )
{
# if defined( _GAMESERVER )
CalcHealValueLimit ( m_StateBlow . emBlowIndex , m_fValue ) ;
# endif
}
void CDnAttackerHPRatio : : OnBegin ( LOCAL_TIME LocalTime , float fDelta )
{
OutputDebug ( " CDnAttackerHPRatio::OnBegin \n " ) ;
}
void CDnAttackerHPRatio : : Process ( LOCAL_TIME LocalTime , float fDelta )
{
CDnBlow : : Process ( LocalTime , fDelta ) ;
}
void CDnAttackerHPRatio : : OnEnd ( LOCAL_TIME LocalTime , float fDelta )
{
OutputDebug ( " CDnAttackerHPRatio::OnEnd \n " ) ;
}
# ifdef _GAMESERVER
// hp <20> <> Attacker <20> <> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> ָ鼭 <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> ۾Ƹ<DBBE> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <D8BE> Ϲ Ƿ<CFB9> false <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> <> ƾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ְ<EFBFBD> , OnCalcDamage <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ε<EFBFBD> <CEB5> ؼ<EFBFBD> <20> Ҵ<DEBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
bool CDnAttackerHPRatio : : OnDefenseAttack ( DnActorHandle hHitter , CDnState * pAttackerState , CDnDamageBase : : SHitParam & HitParam , bool bHitSuccess )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> hp <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <>
// HP ȸ<> <C8B8> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> . (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> ϼ<EFBFBD> <CFBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
INT64 iMaxHP = hHitter - > GetMaxHP ( ) ;
INT64 iNowHP = hHitter - > GetHP ( ) ;
INT64 iDelta = INT64 ( ( float ) iMaxHP * m_fValue ) ;
INT64 iResultHP = iNowHP + iDelta ;
if ( iResultHP > iMaxHP )
{
iDelta = iMaxHP - iNowHP ;
iResultHP = iMaxHP ;
}
else
if ( iResultHP < 0 )
{
iDelta = iDelta - iResultHP ;
iResultHP = 0 ;
}
if ( 0 ! = iDelta )
{
hHitter - > SetHP ( iResultHP ) ;
hHitter - > RequestHPMPDelta ( CDnState : : ElementEnum_Amount , iDelta , hHitter - > GetUniqueID ( ) ) ;
}
// OnCalcDamage <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0<> <30> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ۾Ƹ<DBBE> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <20> Ǹ<EFBFBD> <20> ڿ<EFBFBD> <DABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǰ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
// <20> <> <EFBFBD> ⼱ <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
//HitParam.szActionName.clear();
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 CDnAttackerHPRatio : : OnCalcDamage ( float fOriginalDamage , CDnDamageBase : : SHitParam & HitParam )
{
return - fOriginalDamage ;
}
# endif
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnAttackerHPRatio : : 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 CDnAttackerHPRatio : : 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