#include "StdAfx.h" #include "DnFrameStopBlow.h" #ifdef _GAMESERVER // #include "DnGameRoom.h" // #include "DnGameDataManager.h" // #include "DnUserSession.h" #include "DnStateBlow.h" #else #include "DnEtcObject.h" #include "DnLocalPlayerActor.h" #include "DnInterface.h" #include "navigationmesh.h" #include "InputWrapper.h" #endif #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif const LOCAL_TIME SHAKE_TIME = 3000; CDnFrameStopBlow::CDnFrameStopBlow(DnActorHandle hActor, const char *szValue) : CDnBlow(hActor) #if defined(PRE_FIX_53274) #ifndef _GAMESERVER ,m_ComboCalc( CDnComboCalculator::CIRCULAR_CHECK ) #endif #endif // PRE_FIX_53274 { m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_146; #if defined(PRE_FIX_53274) SetValue(szValue); m_fValue = (szValue == NULL ? 0.0f : (float)atof(szValue)); m_bPlayerCharacter = false; #ifndef _GAMESERVER if (m_fValue != 0) { std::vector vlKeysToCheck; vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] ); vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] ); vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] ); vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] ); vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVELEFT] ); vlKeysToCheck.push_back( g_WrappingKeyData[IW_MOVERIGHT] ); m_ComboCalc.SetKeysToCheck( vlKeysToCheck ); vlKeysToCheck.clear(); vlKeysToCheck.push_back( IW_MOVELEFT ); vlKeysToCheck.push_back( IW_MOVELEFT ); vlKeysToCheck.push_back( IW_MOVELEFT ); vlKeysToCheck.push_back( IW_MOVERIGHT ); vlKeysToCheck.push_back( IW_MOVERIGHT ); vlKeysToCheck.push_back( IW_MOVERIGHT ); vlKeysToCheck.push_back( IW_MOVEBACK ); vlKeysToCheck.push_back( IW_MOVEBACK ); vlKeysToCheck.push_back( IW_MOVEBACK ); vlKeysToCheck.push_back( IW_MOVEFRONT ); vlKeysToCheck.push_back( IW_MOVEFRONT ); vlKeysToCheck.push_back( IW_MOVEFRONT ); m_ComboCalc.SetPadsToCheck( vlKeysToCheck, 3.0f ); m_bPlayerCharacter = dynamic_cast(m_hActor.GetPointer()) ? true : false; } #endif // _GAMESERVER #endif // PRE_FIX_53274 } CDnFrameStopBlow::~CDnFrameStopBlow(void) { } void CDnFrameStopBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta ) { //// °ð¹Ù·Î Ç÷¹ÀÌ ½ºÇÇµå ¸®¼Â½Ã۰í Á¤Áö ½ÃÅ´. //m_hActor->ResetPlaySpeed(); //m_hActor->SetPlaySpeed( 1000000, 0.0f ); m_hActor->AddedFrameStop(); // #29627 ¸±¸®ºê »ç¿ë °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­ hit state °¡ ¾Æ´Ò ¶§´Â hit state Ãß°¡. if( m_hActor->IsPlayerActor() ) // Ç÷¹À̾îÀÎ °æ¿ì¸¸. { if( false == m_hActor->IsHit() ) { int nState = m_hActor->GetState(); nState |= CDnActorState::ActorStateEnum::Hit; m_hActor->SetState( (CDnActorState::ActorStateEnum)nState ); } } ////////////////////////////////////////////////////////////////////////// #if defined(PRE_FIX_53274) #ifndef _GAMESERVER // Ç÷¹À̾ °É·ÈÀ» °æ¿ì¿¡ ¹öư ¿¬Å¸ UI º¸¿©ÁÜ if( m_fValue != 0.0f && m_bPlayerCharacter ) { #if defined(PRE_FIX_57706) if (m_hActor->GetStickAniDlgRefCount() == 0) { GetInterface().ShowStickAniDialog( true ); } m_hActor->AddStickAniDlgRefCount(); #else GetInterface().ShowStickAniDialog( true ); #endif // PRE_FIX_57706 } #endif // _GAMESERVER #endif // PRE_FIX_53274 OutputDebug( "CDnFrameStopBlow::OnBegin, Value:%f \n", m_fValue ); } #if defined(PRE_FIX_53274) void CDnFrameStopBlow::Process( LOCAL_TIME LocalTime, float fDelta ) { __super::Process(LocalTime, fDelta); #ifndef _GAMESERVER if (m_fValue != 0.0f) { if( CDnLocalPlayerActor::s_hLocalActor == m_hActor ) { // TODO: Á¿ì ÀÔ·Â ¹ÞÀ» ¶§ ¸¶´Ù ½Ã°£ ÁÙ¿©ÁÜ. °á°úÀûÀ¸·Î ¼­¹ö·Îµµ º¸³»Áà¾ß ÇÔ... int iNumComboCount = 0; bool bComboSatisfy = m_ComboCalc.Process( LocalTime, fDelta, &iNumComboCount ); for( int i = 0; i < iNumComboCount; ++i ) m_StateBlow.fDurationTime -= 1.0f; if( bComboSatisfy ) { OutputDebug( "[À§±âÅ»Ãâ] %d ȸ ÄÞº¸ ¼º°ø, ½Ã°£ %2.2f ·Î ÁÙ¾îµë \n", iNumComboCount, m_StateBlow.fDurationTime ); } } // ÀÚ±â ÀÚ½ÅÀÇ Ç÷¹À̾î ij¸¯Å͸¸ À§±â Å»Ãâ·Î ½Ã°£À» ÁÙÀÏ ¼ö ÀÖÀ¸¹Ç·Î Ã¼Å©ÇØ¼­ ¼­¹ö·Î »óÅÂÈ¿°ú ³¡³½´Ù°í º¸³¿. if( CDnLocalPlayerActor::s_hLocalActor == m_hActor ) { if( m_StateBlow.fDurationTime < 0.2f ) { // °ÔÀÓ¼­¹ö·Î ¹Ì¸® ½÷ÁØ´Ù. #if defined(PRE_FIX_57706) //Ŭ¶óÀÌ¾ðÆ®¿¡¼­ »óÅÂÈ¿°ú Á¾·á Á¶°ÇÀÌ È®ÀÎ µÊ.. ÀÏ´Ü ¼­¹ö·Î ÆÐŶ º¸³»°í, ¼­¹ö¿¡¼­ ºê·Îµåij½ºÆÃ ÇØÁ༭ ÆÐŶ ¹Þ¾Æ Á¦°Å µÇµµ·Ï ¼öÁ¤ÇÔ.. //ÀÌ Å¬¶óÀÌ¾ðÆ®´Â ½ÇÁ¦ Á¦°Å´Â ÇÏÁö ¾Ê°í ÆÐŶ¸¸ º¸³¿. ½Ã°£ÀÌ ´Ù µÇ¼­ ÀÚµ¿À¸·Î Á¦°Å µÇ°Å³ª, ¼­¹ö¿¡¼­ ÆÐŶ ¹Þ¾Æ¼­ Á¦°Å µÇµµ·Ï ÇÑ´Ù. CDnLocalPlayerActor* pLocalPlayerActor = static_cast(m_hActor.GetPointer()); if (pLocalPlayerActor) pLocalPlayerActor->CmdRemoveStateEffectByServerBlowID(GetServerBlowID()); #else m_hActor->CmdRemoveStateEffect( m_StateBlow.emBlowIndex, true ); #endif // PRE_FIX_57706 } } } #endif // _GAMESERVER } #endif // PRE_FIX_53274 void CDnFrameStopBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta ) { //m_hActor->ResetPlaySpeed(); m_hActor->RemovedFrameStop(); #if defined(PRE_FIX_53274) #ifndef _GAMESERVER // Ç÷¹À̾ °É·ÈÀ» °æ¿ì¿¡ ¹öư ¿¬Å¸ UI º¸¿©ÁÜ if( dynamic_cast(m_hActor.GetPointer()) ) { #if defined(PRE_FIX_57706) m_hActor->RemoveStickAniDlgRefCount(); if (m_hActor->GetStickAniDlgRefCount() == 0) { GetInterface().ShowStickAniDialog( false ); } #else GetInterface().ShowStickAniDialog( false ); #endif // PRE_FIX_57706 } #endif // _GAMESERVER #endif // PRE_FIX_53274 #if defined(_GAMESERVER) if (m_fValue != 0.0f) { //°°Àº ½ºÅ³·Î Ãß°¡µÈ »óÅÂÈ¿°úµéÀ» ã¾Æ¼­ °°ÀÌ Á¦°Å Çϵµ·Ï ÇÑ´Ù. CDnStateBlow* pStateBlow = m_hActor->GetStateBlow(); int nStateCount = pStateBlow ? pStateBlow->GetNumStateBlow() : 0; for( int iBlow = 0; iBlow < nStateCount; ++iBlow ) { DnBlowHandle hExistingBlow = pStateBlow->GetStateBlow( iBlow ); CDnSkill::SkillInfo* pSkillInfo = const_cast(hExistingBlow->GetParentSkillInfo()); //½ºÅ³ÀÌ °°°í, °°Àº ½ºÅ³ »ç¿ëÀÚÀϰæ¿ì.. if (pSkillInfo && pSkillInfo->iSkillID == m_ParentSkillInfo.iSkillID && pSkillInfo->hSkillUser && pSkillInfo->hSkillUser == m_ParentSkillInfo.hSkillUser) { hExistingBlow->SetState(STATE_BLOW::STATE_END); m_hActor->CmdRemoveStateEffectFromID(hExistingBlow->GetBlowID()); } } } #endif // _GAMESERVER OutputDebug( "CDnFrameStopBlow::OnEnd\n" ); } #if defined(PRE_ADD_PREFIX_SYSTE_RENEW) void CDnFrameStopBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; szNewValue = szOrigValue; } void CDnFrameStopBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue) { char szBuff[128] = {0, }; szNewValue = szOrigValue; } #endif // PRE_ADD_PREFIX_SYSTE_RENEW