#include "StdAfx.h" #include "DnDissolveBufBlow.h" #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif CDnDissolveBufBlow::CDnDissolveBufBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ) { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_083; SetValue( szValue ); //m_nValue = atoi( szValue ); m_fValue = (float)atof(szValue); } CDnDissolveBufBlow::~CDnDissolveBufBlow(void) { } void CDnDissolveBufBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { // ÇØÁ¦ ´ÜÀ§´Â »óÅÂÈ¿°ú °¹¼ö°¡ ¾Æ´Ï¶ó µð¹öÇÁ ½ºÅ³ ¹­À½ ´ÜÀ§. multimap mmapBuffBlowsBySkill; int iDissolveCount = 0; int iNumAppliedBlow = m_hActor->GetNumAppliedStateBlow(); vector vlBuffSkillID; for( int iBlow = 0; iBlow < iNumAppliedBlow; ++iBlow ) { DnBlowHandle hBlow = m_hActor->GetAppliedStateBlow( iBlow ); if( !hBlow ) continue; const CDnSkill::SkillInfo* pSkillInfo = hBlow->GetParentSkillInfo(); // ÀÓÀÇ·Î ³Ö¾îÁÖ´Â ¹«ÇÑ »óÅÂÈ¿°ú´Â ÇØÁ¦ ´ë»óÀÌ ¾Æ´Ô. if( hBlow->IsPermanent() ) continue; if( pSkillInfo && pSkillInfo->iSkillID ) { // ÁÁÀº »óÅÂÈ¿°ú. ¹öÇÁ·Î ÁöÁ¤µÈ ½ºÅ³µéÀ» ÇØÁ¦ÇÑ´Ù. // ´Ü, ÆÐ½Ãºê ¹öÇÁ·Î µÇ¾îÀÖ´Â °ÍµéÀº Á¦¿Ü. if( (0 == pSkillInfo->iDissolvable) && (CDnSkill::Passive != pSkillInfo->eSkillType ) && (CDnSkill::Buff == pSkillInfo->eDurationType) ) { // ±Ù¿ø ¾ÆÀÌÅÛ¿¡¼­ »ç¿ëÇϴ ƯÁ¤ ½ºÅ³ ȸÇÇ »óÅÂÈ¿°ú´Â ¹öÇÁ Á¦°Å »óÅÂÈ¿°ú·Î Áö¿öÁöÁö ¾Ê´Â´Ù. // ÃßÈÄ¿¡ ÀϹÝÀûÀ¸·Î ¾²ÀÏ °æ¿ì µû·Î ó¸®ÇØÁÖ¾î¾ß ÇÔ. if( hBlow->IsFromSourceItem() ) continue; if( hBlow->IsEternity() ) continue; mmapBuffBlowsBySkill.insert( make_pair(pSkillInfo->iSkillID, hBlow) ); // ÇϳªÀÇ ½ºÅ³¿¡ ¿©·¯°³ÀÇ »óÅÂÈ¿°ú°¡ ÀÖÀ» ¼ö ÀÖ´Ù. À¯´ÏÅ©ÇÑ ½ºÅ³ ¾ÆÀ̵𸸠³Ö¾îÁØ´Ù. if( vlBuffSkillID.end() == find( vlBuffSkillID.begin(), vlBuffSkillID.end(), pSkillInfo->iSkillID ) ) vlBuffSkillID.push_back( pSkillInfo->iSkillID ); } } } DNVector(int) vlAppliedBuffBlowIDs; for( int i = 0; i < (int)vlBuffSkillID.size(); ++i ) { if( iDissolveCount >= (int)m_fValue ) break; pair::iterator, multimap::iterator> iter_pair = mmapBuffBlowsBySkill.equal_range( vlBuffSkillID.at(i) ); // °°Àº ½ºÅ³¿¡¼­ ºñ·ÔµÈ µð¹öÇÁ »óÅÂÈ¿°úµéÀ» ¸ð¾ÆµÐ´Ù. multimap::iterator iter = iter_pair.first; for( iter; iter != iter_pair.second; ++iter ) vlAppliedBuffBlowIDs.push_back( iter->second->GetBlowID() ); ++iDissolveCount; } // ÇØÁ¦ °¡´ÉÇÑ ÆÐ½Ãºê ½ºÅ³ÀÌ ¾Æ´Ñ ¹öÇÁ »óÅÂÈ¿°ú¸¸ ÇØÁ¦ int iNumBlow = (int)vlAppliedBuffBlowIDs.size(); for( int iBlow = 0; iBlow < iNumBlow; ++iBlow ) { int iBlowID = vlAppliedBuffBlowIDs.at( iBlow ); m_hActor->RemoveStateBlowFromID( iBlowID ); //// Note: Á¤ÀÇµÈ »óÅÂÈ¿°ú À妽º·Î Á¦°ÅÇϹǷΠ°°Àº ŸÀÔÀÌ 1°³ ÀÌ»óÀÏ ¼ö ÀÖ´Ù. //// µû¶ó¼­ hBlow °¡ ÀÌÀü ·çÇÁ¿¡¼­ ÀÌ¹Ì »èÁ¦µÇ¾úÀ» ¼öµµ ÀÖÀ¸¹Ç·Î À¯È¿¼º °ËÁõÀ» ÇÑ´Ù. //if( hBlow ) //{ // m_hActor->RemoveStateBlowByBlowDefineIndex( hBlow->GetBlowIndex() ); //} } OutputDebug( "CDnDissolveBufBlow::OnBegin, Value:%d \n", (int)m_fValue ); } void CDnDissolveBufBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { OutputDebug( "CDnDissolveBufBlow::OnEnd\n"); } #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnDissolveBufBlow::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 CDnDissolveBufBlow::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