#include "StdAfx.h" #include "DnHighlanderBlow.h" #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif // dnactor.cpp #ifdef _GAMESERVER extern int GetGaussianRandom( int nMin, int nMax, CMultiRoom *pRoom ); #endif CDnHighlanderBlow::CDnHighlanderBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_143; // ½Ã°£¸¸ 2°³·Î »ç¿ëÇÑ´Ù. ÀÎÀÚ·Î hp 1ÀÎ »óÅÂÀÇ ½Ã°£À» ¹Þ´Â´Ù. SetValue( szValue ); m_fValue = (float)atof( szValue ); m_iState = NORMAL; AddCallBackType( SB_ONCALCDAMAGE ); } CDnHighlanderBlow::~CDnHighlanderBlow(void) { } void CDnHighlanderBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { m_iState = NORMAL; OutputDebug( "CDnHighlanderBlow::OnBegin Value:%2.2f\n", m_fValue ); } void CDnHighlanderBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { CDnBlow::Process( LocalTime, fDelta ); } void CDnHighlanderBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnHighlanderBlow::OnEnd Value:%2.2f\n", m_fValue ); } #ifdef _GAMESERVER float CDnHighlanderBlow::CalcDamage( float fOriginalDamage ) { float fResult = 0.0f; switch( m_iState ) { case NORMAL: { int iNowHP = (int)m_hActor->GetHP(); // ÀÌ Å¸°ÝÀ» ¹Þ¾Æ¼­ hp °¡ 0 ÀÌÇϰ¡ µÇ¾î Á×°Ô µÈ´Ù¸é µ¥¹ÌÁö¸¦ 1¸¸ ³²°Ô ¼öÁ¤ÇØÁØ´Ù. // ±×¸®°í ÇÏÀÌ·£´õ »óÅ·Π¹Ù²ãÁÜ. if( (iNowHP - (int)fOriginalDamage) <= 0 ) { //fOriginalDamage = float(iNowHP - 1); fResult = float(iNowHP - 1)-fOriginalDamage; // »óŸ¦ ÇÏÀÌ·£´õ·Î ¹Ù²ãÁÖ°í, »óÅÂÈ¿°ú ½Ã°£À» // ÇÏÀÌ·£´õ »óÅÂÀ϶§ ½Ã°£À¸·Î ¼ÂÆÃÇØÁØ´Ù. m_iState = HIGHLANDER; m_StateBlow.fDurationTime = m_fValue; // Ŭ¶óÀÌ¾ðÆ®¿¡°Ôµµ ÀÌ »óÅÂÈ¿°úÀÇ Áö¼Ó½Ã°£À» ¹æ±Ý ¾÷µ¥ÀÌÆ® µÈ °ÍÀ¸·Î ¹Ù²ãÁØ´Ù. m_hActor->CmdModifyStateEffect( GetBlowID(), m_StateBlow ); } } break; case HIGHLANDER: { // ÇÏÀÌ·£´õ »óÅ¿¡¼­´Â Á¤ÇØÁø ½Ã°£ÀÌ ´Ù µÇ¾î »óÅÂÈ¿°ú°¡ Áö¼ÓµÉ ¶§±îÁö Á×Áö ¾Ê´Â´Ù. // ÈúÀ̳ª ¹°¾à°°Àº °É·Î HP °¡ 1 ÀÌ»óÀÌ µÇ¾ú´Ù¸é ´Ù½Ã 1 ±îÁö¸¸ HP ³²µµ·Ï µ¥¹ÌÁö¸¦ Çã¿ë. int iNowHP = (int)m_hActor->GetHP(); if( 1 < iNowHP ) { if( (iNowHP - (int)fOriginalDamage) <= 0 ) { //fOriginalDamage = float(iNowHP - 1); fResult = float(iNowHP - 1)-fOriginalDamage; } } else { fResult = -fOriginalDamage; } } break; } return fResult; } float CDnHighlanderBlow::OnCalcDamage( float fOriginalDamage, CDnDamageBase::SHitParam& HitParam ) { // #25781 CanHit ¹«½Ã È÷Æ® ½Ã±×³ÎÀÎ °æ¿ì ÇÏÀÌ·£´õµµ ¹«½ÃµÈ´Ù. if( HitParam.bIgnoreCanHit ) return 0.0f; return CalcDamage( fOriginalDamage ); } #endif #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnHighlanderBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÇÊ¿äÇÑ °ª º¯¼ö float fValue[2]; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° °ª fValue[0] = (float)atof( szOrigValue ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° fValue[1] = (float)atof( szAddValue ); ////////////////////////////////////////////////////////////////////////// //µÎ °ªÀ» ´õÇÑ´Ù. float fResultValue = fValue[0] + fValue[1]; sprintf_s(szBuff, "%f", fResultValue); szNewValue = szBuff; } void CDnHighlanderBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÇÊ¿äÇÑ °ª º¯¼ö float fValue[2]; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° °ª fValue[0] = (float)atof( szOrigValue ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° fValue[1] = (float)atof( szAddValue ); ////////////////////////////////////////////////////////////////////////// //°ª °è»ê float fResultValue = fValue[0] - fValue[1]; sprintf_s(szBuff, "%f", fResultValue); szNewValue = szBuff; } #endif // PRE_ADD_PREFIX_SYSTE_RENEW