#include "StdAfx.h" #include "DnCurseBreakDownBlow.h" #include "DnMonsterActor.h" #include "EtActionSignal.h" #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif #define CURSE_BREKDOWN_ACTION_NAME "Hit_Curse" CDnCurseBreakDownBlow::CDnCurseBreakDownBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ), m_pActionElement( NULL ), m_fFrame( 0.0f ) #ifdef _GAMESERVER ,m_iOriAttackMMin( 0 ), m_iOriAttackMMax( 0 ) #endif { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_245; SetValue( szValue ); m_fValue = (float)atof(szValue); m_pActionElement = m_hActor->GetElement( CURSE_BREKDOWN_ACTION_NAME ); _ASSERT( m_pActionElement && "ÀúÁÖ ÆÄ±« ¾×¼Ç Á¤º¸¸¦ ãÀ» ¼ö ¾øÀ½." ); m_ActionDurationTime = 0; if (m_pActionElement) { m_ActionDurationTime = m_pActionElement->dwLength; m_vlpSignalList = m_pActionElement->pVecSignalList; } } CDnCurseBreakDownBlow::~CDnCurseBreakDownBlow(void) { } bool CDnCurseBreakDownBlow::CanBegin( void ) { // È­»ó »óÅÂÈ¿°ú°¡ °É·ÁÀÖ´Â »óŰ¡ ¾Æ´Ï¶ó¸é ½ÃÀÛµÉ ¼ö ¾ø´Ù. bool bCanBegin = m_hActor->IsAppliedThisStateBlow( STATE_BLOW::BLOW_244 ); if( false == bCanBegin ) OutputDebug( "CDnCurseBreakDownBlow::CanBegin - ÀúÁÖ »óÅÂÈ¿°ú°¡ °É·ÁÀÖÁö ¾ÊÀ¸¹Ç·Î ÀúÁÖ Æø¹ß »óÅÂÈ¿°ú ¹ßµ¿ ½ÇÆÐ.\n" ); // Æø¹ß ¾×¼Ç ¾øÀ» ¶© ¹ßµ¿½ÃŰÁö ¾Ê´Â´Ù. if( NULL == m_pActionElement ) { bCanBegin = false; OutputDebug( "CDnCurseBreakDownBlow::CanBegin - ÀúÁÖ Æø¹ß ¾×¼ÇÀÌ ¾øÀ¸¹Ç·Î ÀúÁÖ Æø¹ß »óÅÂÈ¿°ú ¹ßµ¿ ½ÇÆÐ.\n" ); } return bCanBegin; } void CDnCurseBreakDownBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { // ÀúÁÖ´Â ÇØÁ¦ µÇÁö ¾Ê´Â´Ù.. // #ifdef _GAMESERVER // m_hActor->CmdRemoveStateEffect( STATE_BLOW::BLOW_244 ); // #endif // ÀÌ »óÅÂÈ¿°ú°¡ ³¢¾îÀÖ´Â ½ºÅ³ÀÇ ½ÃÀüÀÚÀÇ ¸¶¹ý °ø°Ý·ÂÀ¸·Î »óÅÂÈ¿°ú°¡ Àû¿ëµÈ ¾×ÅÍÀÇ ¸¶¹ý°ø°Ý·ÂÀ» Áö¼Ó½Ã°£ µ¿¾È ´ëü½ÃÅ´. #ifdef _GAMESERVER _ASSERT( m_ParentSkillInfo.hSkillUser ); if( !m_ParentSkillInfo.hSkillUser ) { g_Log.Log( LogType::_ERROR, L"CDnCurseBreakDownBlow::OnBegin - ÀúÁÖ ÆÄ±« »óÅÂÈ¿°ú ¾×ÅͰ¡ À¯È¿ÇÏÁö ¾Ê¾Æ¼­ ¹ßµ¿ ½ÇÆÐ..\n" ); SetState( STATE_BLOW::STATE_END ); return; } m_iOriAttackMMin = m_hActor->GetAttackMMin(); m_iOriAttackMMax = m_hActor->GetAttackMMax(); m_hActor->SetAttackMMin( m_ParentSkillInfo.hSkillUser->GetAttackMMin() ); m_hActor->SetAttackMMax( m_ParentSkillInfo.hSkillUser->GetAttackMMax() ); // ¸ó½ºÅͶó¸é Ŭ¶ó¿¡¼­ µ¥¹ÌÁö Ç¥½Ã¸¦ À§ÇØ ¼ÂÆÃ. if( m_hActor && CDnActorState::Reserved6 < m_hActor->GetActorType() ) static_cast(m_hActor.GetPointer())->SlaveOf( m_ParentSkillInfo.hSkillUser->GetUniqueID() ); #endif // Áö¼Ó½Ã°£Àº Æø¹ß ¾×¼ÇÀÇ Áö¼Ó½Ã°£À¸·Î ó¸®ÇÑ´Ù. float fFPS = 60.0f; //m_StateBlow.fDurationTime = (float)m_pActionElement->dwLength / fFPS; m_StateBlow.fDurationTime = m_ActionDurationTime != 0 ? (float)m_ActionDurationTime / fFPS : 0.0f; // ¹Ù·Î Á¾·á°¡ µÉ ¼ö ÀÖÀ¸¹Ç·Î Á¤»ó »óÅÂÀ϶§¸¸ Ãß°¡ if (STATE_BLOW::STATE_BEGIN == GetBlowState()) m_hActor->AddStateBlowSignal(this->GetMySmartPtr()); OutputDebug( "%s\n", __FUNCTION__ ); } void CDnCurseBreakDownBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { CDnBlow::Process( LocalTime, fDelta ); } void CDnCurseBreakDownBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { #ifdef _GAMESERVER m_hActor->SetAttackMMin( m_iOriAttackMMin ); m_hActor->SetAttackMMax( m_iOriAttackMMax ); // ¸ó½ºÅͶó¸é Ŭ¶ó¿¡¼­ µ¥¹ÌÁö Ç¥½Ã¸¦ À§ÇØ ¼ÂÆÃÇÑ °Í ¿ø»ó º¹±¸. //if( CDnActorState::Reserved6 < m_hActor->GetActorType() ) if( m_hActor && m_hActor->IsMonsterActor() ) { DWORD dwInvalidMasterActorID = UINT_MAX; static_cast(m_hActor.GetPointer())->SlaveOf( dwInvalidMasterActorID ); } #endif m_hActor->RemoveStateBlowSignal(this->GetMySmartPtr()); OutputDebug( "%s\n", __FUNCTION__); } void CDnCurseBreakDownBlow::SignalProcess( LOCAL_TIME LocalTime, float fDelta ) { // ½ÇÁ¦ ¾×¼ÇÀ» ½ÇÇàÇÏÁö ¾Ê°í ½Ã±×³Îµé¸¸ ½ÇÇà½Ã۵µ·Ï ÇÑ´Ù. float fFPS = 60.0f; float fPrevFrame = m_fFrame; m_fFrame += (fDelta * fFPS); if (m_ActionDurationTime < (DWORD)m_fFrame) { m_fFrame = 1.0f; fPrevFrame = -0.1f; // ¾×¼ÇÀ» ´Ù ½ÇÇàÇß´Ù¸é ´õ ÀÌ»ó ½Ã±×³Î 󸮸¦ ÇÏÁö ¾Ê°í »óÅÂÈ¿°ú°¡ ³¡³­´Ù. // ¾×¼Ç ±æÀÌ ¸¸Å­ Áö¼Ó½Ã°£À» ¼³Á¤ÇßÀ¸¹Ç·Î °ð »óÅÂÈ¿°ú Á¾·áµÊ. return; } if( 0.0f == fPrevFrame ) fPrevFrame = -(m_fFrame * 0.1f); CEtActionSignal *pSignal = NULL; #if defined(PRE_FIX_55378) m_hActor->SetChargerAction(CURSE_BREKDOWN_ACTION_NAME); #endif // PRE_FIX_55378 for( DWORD i=0; i < m_vlpSignalList.size(); i++ ) { pSignal = m_vlpSignalList[i]; if( pSignal->CheckSignal( fPrevFrame, m_fFrame ) == true ) { LOCAL_TIME StartTime = LocalTime - (LOCAL_TIME)( 1000.f / fFPS * ( m_fFrame - pSignal->GetStartFrame() ) ); LOCAL_TIME EndTime = LocalTime + (LOCAL_TIME)( 1000.f / fFPS * ( pSignal->GetEndFrame() - m_fFrame ) ); m_hActor->OnSignal( (SignalTypeEnum)pSignal->GetSignalIndex(), pSignal->GetData(), LocalTime, StartTime, EndTime, pSignal->GetSignalListArrayIndex() ); } } #if defined(PRE_FIX_55378) m_hActor->SetChargerAction(NULL); #endif // PRE_FIX_55378 } #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnCurseBreakDownBlow::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 CDnCurseBreakDownBlow::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