#include "StdAfx.h" #include "DnBlockBlow.h" #if defined( _GAMESERVER ) #include "DnPlayerActor.h" #endif // #if defined( _GAMESERVER ) #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif CDnBlockBlow::CDnBlockBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_030; SetValue( szValue ); m_fValue = (float)atof( szValue ); m_iCanBlockCount = (int)m_fValue; AddCallBackType( SB_ONDEFENSEATTACK ); } CDnBlockBlow::~CDnBlockBlow(void) { } void CDnBlockBlow::OnBegin(LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnBlockBlow::OnBegin, Value:%d \n", (int)m_fValue ); } void CDnBlockBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { CDnBlow::Process( LocalTime, fDelta ); #ifdef _GAMESERVER if( m_iCanBlockCount <= 0 ) { // Ŭ¶ó¿¡°Ô »óÅÂÈ¿°ú Á¦°ÅÇ϶õ ÆÐŶ¸¸ º¸³»°í ¼­¹ö¿¡¼­´Â ¼ø¸®´ë·Î blow ¸¦ ÇØÁ¦½ÃŲ´Ù. m_hActor->CmdRemoveStateEffect( m_StateBlow.emBlowIndex, false ); SetState( STATE_BLOW::STATE_END ); } #endif } void CDnBlockBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnBlockBlow::OnEnd\n"); } #ifdef _GAMESERVER bool CDnBlockBlow::OnDefenseAttack( DnActorHandle hHitter, CDnState* pAttackerState, CDnDamageBase::SHitParam &HitParam, bool bHitSuccess ) { // #25797 È÷Æ® ½Ã±×³Î¿¡ bIgnoreParring ÀÌ ÄÑÁ® ÀÖÀ¸¸é ¹ßµ¿ÇÏÁö ¾Ê´Â´Ù. if( HitParam.bIgnoreParring ) return false; // ´ëÆ÷¸ðµåÀ϶§´Â ¹ßµ¿ÇÏÁö ¾ÊÀ½. // ºí·Ï »óÅÂÈ¿°ú´Â ¹«Á¶°Ç Ç÷¹À̾ »ç¿ëÇÑ´Ù. _ASSERT( m_hActor->IsPlayerActor() ); if( m_hActor->IsPlayerActor() ) { CDnPlayerActor* pPlayerActor = static_cast(m_hActor.GetPointer()); if( pPlayerActor->IsCannonMode() ) return false; // ¹«±â¸¦ µé°í ÀÖÁö ¾ÊÀº °æ¿ì¿£ ¹ßµ¿ÇÏÁö ¾ÊÀ½. #26772 if( false == (pPlayerActor->IsBattleMode() && pPlayerActor->GetWeapon( 0 ) && pPlayerActor->GetWeapon( 1 )) ) 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 bool bResult = false; #if defined(PRE_ADD_49166) // ÇǰÝÀÚ°¡ µð¹öÇÁ (Freezing / FrameStop) »óÅÂÈ¿°ú°¡ Àû¿ëµÇ¾î ÀÖ´Â °æ¿ì´Â ºí·° ¹ßµ¿ µÇÁö ¾Êµµ·Ï.. if (IsInVaildBlockCondition(m_hActor) == true) return false; #endif // PRE_ADD_49166 if( m_iCanBlockCount > 0 ) { --m_iCanBlockCount; HitParam.szActionName.assign( "Skill_Block" ); OutputDebug( "CDnBlockBlow::OnDefenseAttack, CanBlockCount:%d \n", m_iCanBlockCount ); // °É¾î³õÀº ¾ÖµéÇÑÅ× ¾Ë·ÁÁÜ. ///////////////////////////////////////////// boost::shared_ptr pEvent( IDnObserverNotifyEvent::Create( EVENT_BUBBLE_BLOCK_SUCCESS ) ); pEvent->SetSkillID( m_ParentSkillInfo.iSkillID ); Notify( pEvent ); ////////////////////////////////////////////////////////////////////////// bResult = true; } return bResult; } #endif #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnBlockBlow::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 CDnBlockBlow::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