#include "StdAfx.h" #include "DnShieldBlow.h" #if defined( _GAMESERVER ) #include "DnPlayerActor.h" #endif // #if defined( _GAMESERVER ) #if !defined( USE_BOOST_MEMPOOL ) #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif #endif // #if !defined( USE_BOOST_MEMPOOL ) CDnShieldBlow::CDnShieldBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_055; SetValue( szValue ); m_fValue = (float)atof( szValue ); m_iDurability = (int)m_fValue; m_bCalcDamage = false; #if defined(_GAMESERVER) AddCallBackType( SB_AFTERONDEFENSEATTACK ); AddCallBackType( SB_ONCALCDAMAGE ); #endif // _GAMESERVER } CDnShieldBlow::~CDnShieldBlow(void) { } void CDnShieldBlow::OnBegin(LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnBlockBlow::OnBegin, Value:%d \n", (int)m_fValue ); } void CDnShieldBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { CDnBlow::Process( LocalTime, fDelta ); #ifdef _GAMESERVER if( m_iDurability <= 0 ) { // Ŭ¶ó¿¡°Ô »óÅÂÈ¿°ú Á¦°ÅÇ϶õ ÆÐŶ¸¸ º¸³»°í ¼­¹ö¿¡¼­´Â ¼ø¸®´ë·Î blow ¸¦ ÇØÁ¦½ÃŲ´Ù. m_hActor->CmdRemoveStateEffect( m_StateBlow.emBlowIndex, false ); SetState( STATE_BLOW::STATE_END ); } #endif } void CDnShieldBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnBlockBlow::OnEnd\n"); } #ifdef _GAMESERVER bool CDnShieldBlow::OnDefenseAttack( DnActorHandle hHitter, CDnState* pAttackerState, CDnDamageBase::SHitParam &HitParam, bool bHitSuccess ) { /* // #25797 È÷Æ® ½Ã±×³Î¿¡ bIgnoreParring ÀÌ ÄÑÁ® ÀÖÀ¸¸é ¹ßµ¿ÇÏÁö ¾Ê´Â´Ù. if( HitParam.bIgnoreParring ) return false; #if defined(PRE_FIX_BLOCK_CONDITION) //ºí·°ÀÇ ¹ßµ¿ÀÌ fDamage°¡ 0ÀÌ¶óµµ ÀûÀ̶ó¸é ºí·° ¹ßµ¿ °¡´É Çϵµ·Ï.. //¾Æ±ºÀÎ °æ¿ì ±âÁ¸ ó·³ fDamage °¡0ÀÌ¸é ºí·° µÇÁö ¾Êµµ·Ï ÇÔ. if (IsCanBlock(hHitter, m_hActor, HitParam) == false) return false; #else // hit percent °¡ 0% ÀÏ °æ¿ì ¹ßµ¿ÇÏÁö ¾Ê´Â °ÍÀ¸·Î µÊ. (#21175) if( 0.0f == HitParam.fDamage ) return false; #endif // PRE_FIX_BLOCK_CONDITION #if defined(PRE_ADD_49166) // ÇǰÝÀÚ°¡ µð¹öÇÁ (Freezing / FrameStop) »óÅÂÈ¿°ú°¡ Àû¿ëµÇ¾î ÀÖ´Â °æ¿ì´Â ºí·° ¹ßµ¿ µÇÁö ¾Êµµ·Ï.. if (IsInVaildBlockCondition(m_hActor) == true) return false; #endif // PRE_ADD_49166 */ bool bResult = false; //¿©±â¼­ µ¥¹ÌÁö º¸Á¤ °è»êÀº ¾ÈµÇ¾ß ÇÑ´Ù.. m_bCalcDamage = false; int fDamage = (int)m_hActor->PreCalcDamage(hHitter, HitParam); ////////////////////////////////////////////////////////////////////////// //#37215°ü·Ã.. //³»±¸µµ°¡ µ¥¹ÌÁöº¸´Ù ¸¹À»°æ¿ì ¿©±â¼­ ¹æ¾î ¼º°øÇÏ¸é ³»±¸µµ¸¦ µ¥¹ÌÁö¸¸Å­ °¨¼Ò //³»±¸µµ°¡ µ¥¹ÌÁöº¸´Ù ÀûÀ» °æ¿ì ¿©±â¼­ ¹æ¾î ½ÇÆÐ.. //¹æ¾î ½ÇÆÐ¶§¹®¿¡ OnCalcDamage°¡ È£Ãâ µÊ.. //¹æ¾î ¼º°ø Çϸé OnCalcDamage´Â È£Ã⠾ȵÊ.. ////////////////////////////////////////////////////////////////////////// if( m_iDurability >= fDamage ) { m_iDurability -= fDamage; //¸Â´Â µ¿ÀÛ ÇÏÁö ¾Êµµ·ÏÇÑ´Ù. HitParam.szActionName.assign( "" ); bResult = true; } else { //¿©±â¿¡ µé¾î ¿À°Ô µÇ¸é OnCalcDamage·Î µé¾î °¡°Ô µÇ°í //³»±¸µµ ¸¸Å­ µ¥¹ÌÁö º¸Á¤À» ÇØÁà¾ß ÇÑ´Ù. m_bCalcDamage = true; } return bResult; } float CDnShieldBlow::OnCalcDamage( float fOriginalDamage, CDnDamageBase::SHitParam& HitParam ) { //OnDefenseAttack¿¡¼­µµ °è»êÀÌ µÇ¹Ç·Î ½ÇÁ¦ µ¥¹ÌÁö °è»ê¿¡¼­¸¸ µ¥¹ÌÁö º¸Á¤ 󸮰¡ µÇ·Î·ÏÇÑ´Ù. if (m_bCalcDamage == false) return 0.0f; //µ¥¹ÌÁö º¸Á¤ °è»ê //³²Àº ³»±¸µµ ¸¸Å­ µ¥¹ÌÁö º¸Á¤Çϰí, ³»±¸µµ´Â 0À¸·Î. float fDelta = (float)m_iDurability; m_iDurability = 0; return -fDelta; } #endif #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnShieldBlow::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 CDnShieldBlow::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