#include "StdAfx.h" #include "DnActionChangeRatioBlow.h" #if !defined( USE_BOOST_MEMPOOL ) #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif #endif // #if !defined( USE_BOOST_MEMPOOL ) CDnActionChangeRatioBlow::CDnActionChangeRatioBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_206; SetValue( szValue ); m_fValue = 0.0f; std::string str = szValue;//"ºñÀ²;¾×¼Ç"; std::vector tokens; std::string delimiters = ";"; //1. »óÅÂÈ¿°ú À妽º ¸®½ºÆ®¿Í Àû¿ë ·¹º§ ±¸ºÐ TokenizeA(str, tokens, delimiters); if (2 == tokens.size()) { m_fRate = (float)atof( tokens[0].c_str() ); m_strActionName = tokens[1]; } else { m_fRate = 0.0f; m_strActionName = ""; } #if defined(_GAMESERVER) AddCallBackType(SB_ONTARGETHIT); #endif // _GAMESERVER } CDnActionChangeRatioBlow::~CDnActionChangeRatioBlow(void) { } void CDnActionChangeRatioBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { __super::OnBegin(LocalTime, fDelta); #if defined(_GAMESERVER) OnChangeAction(); #endif // _GAMESERVER } void CDnActionChangeRatioBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { __super::Process( LocalTime, fDelta ); } void CDnActionChangeRatioBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { __super::OnEnd(LocalTime, fDelta); } #if defined(_GAMESERVER) // float CDnActionChangeRatioBlow::OnCalcDamage( float fOriginalDamage, CDnDamageBase::SHitParam& HitParam ) // { // OnChangeAction(m_hActor); // } void CDnActionChangeRatioBlow::OnChangeAction() { //È®·ü °è»ê.. bool bExecuteable = rand() % 10000 <= (m_fRate * 10000.0f); ////////////////////////////////////////////////////////////////////////// //¿Î½º°æ¿ì Debuff°¡ ¾Æ´Ï¶ó »óÅÂÈ¿°ú Ãß°¡½ÃÁ¡¿¡ ¸é¿ªÃ³¸®°¡ ¾ÈµÊ.. //±×·¡¼­ ¿©±â¼­ ¸é¿ª È®ÀÎ ÇØ¼­ ¸é¿ªÀ̸é ó¸® ¾ÈµÇµµ·ÏÇÑ´Ù. if (m_hActor->IsImmuned(m_StateBlow.emBlowIndex)) bExecuteable = false; ////////////////////////////////////////////////////////////////////////// if (m_hActor && bExecuteable && !m_strActionName.empty()) { m_hActor->CmdAction(m_strActionName.c_str(), 0, 3.0f, true, true, false); // #37325 [¿Î½º¸Â°í ÀϾÁö¸øÇÔ] ´Ù¿îÀÌ Æ÷ÇÔµÈ ¾×¼ÇÀÏ °æ¿ì GetState() & CDnActorState::Down) && m_hActor->GetDownRemainDelta() <= 0) m_hActor->SetDownRemainDelta(0.1f); // ÀÏ´Ü ¿¹¿ÜÀûÀÎ °æ¿ì´Ï ¹Ù·Î ÀϾ°Ô ÇÑ´Ù. // #37553 //¸ó½ºÅÍ ¾×ÅÍÀΰæ¿ì´Â Ŭ¶óÀÌ¾ðÆ®·Î CdmAction¿¡¼­ ÆÐŶÀ» º¸³»Áö¸¸ //Ç÷¹ÀÌ¾î ¾×ÅÍÀΰæ¿ì´Â Ŭ¶óÀÌ¾ðÆ®·Î ÆÐŶÀ» º¸³»Áö ¾Ê´Â´Ù. ±×·¡¼­ //¿©±â¼­ SC_ACTION_CHANGEÆÐŶÀ» Àü¼ÛÇÑ´Ù. if (!m_hActor->IsMonsterActor()) { int nActionIndex = m_hActor->GetElementIndex( m_strActionName.c_str() ); m_hActor->RequestActionChange(nActionIndex); } } } #endif // _GAMESERVER #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnActionChangeRatioBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÆÄ½Ì¿¡ ÇÊ¿äÇÑ º¯¼ö ¼±¾ð std::vector vlTokens[2]; string strArgument[2]; //ÇÊ¿äÇÑ °ª º¯¼ö float fRate[2] = {0.0f, }; std::string strActionName[2]; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[0] = szOrigValue; TokenizeA( strArgument[0], vlTokens[0], ";" ); if( vlTokens[0].size() == 2 ) { fRate[0] = (float)atof( vlTokens[0][0].c_str() ); strActionName[0] = vlTokens[0][1]; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì strArgument[1] = szAddValue; TokenizeA( strArgument[1], vlTokens[1], ";" ); if( vlTokens[1].size() == 2 ) { fRate[1] = (float)atof( vlTokens[1][0].c_str() ); strActionName[1] = vlTokens[1][1]; } ////////////////////////////////////////////////////////////////////////// //µÎ °ªÀ» ´õÇÑ´Ù. float fResultRate = fRate[0] + fRate[1]; sprintf_s(szBuff, "%f;%s", fResultRate, strActionName[0].c_str()); szNewValue = szBuff; } void CDnActionChangeRatioBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; //ÆÄ½Ì¿¡ ÇÊ¿äÇÑ º¯¼ö ¼±¾ð std::vector vlTokens[2]; string strArgument[2]; //ÇÊ¿äÇÑ °ª º¯¼ö float fRate[2] = {0.0f, }; std::string strActionName[2]; ////////////////////////////////////////////////////////////////////////// //ù¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì. strArgument[0] = szOrigValue; TokenizeA( strArgument[0], vlTokens[0], ";" ); if( vlTokens[0].size() == 2 ) { fRate[0] = (float)atof( vlTokens[0][0].c_str() ); strActionName[0] = vlTokens[0][1]; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //µÎ¹øÂ° ¹®ÀÚ¿­ ÆÄ½Ì strArgument[1] = szAddValue; TokenizeA( strArgument[1], vlTokens[1], ";" ); if( vlTokens[1].size() == 2 ) { fRate[1] = (float)atof( vlTokens[1][0].c_str() ); strActionName[1] = vlTokens[1][1]; } ////////////////////////////////////////////////////////////////////////// //µÎ °ªÀ» ´õÇÑ´Ù. float fResultRate = fRate[0] - fRate[1]; sprintf_s(szBuff, "%f;%s", fResultRate, strActionName[0].c_str()); szNewValue = szBuff; } #endif // PRE_ADD_PREFIX_SYSTE_RENEW