#include "stdafx.h" #include "ThrustState.h" #include "GameField.h" #include #include #include "AIParamParser.h" ThrustState::ThrustState() { m_dwDownTimeAfterThrust = 0; } ThrustState::~ThrustState() { } void ThrustState::Init() { __noop; } void ThrustState::OnEnter(LPARAM param1, LPARAM param2, LPARAM param3) { State::OnEnter(param1, param2, param3); m_bDownAfterThrust = (BOOL)param1; eCHAR_MOVE_STATE move_state = m_bDownAfterThrust ? CMS_KNOCKBACK_DOWN : CMS_KNOCKBACK; m_pNPC->SetMoveState(move_state); // ¹Ð¸®´Â »óÅ´ 1.5ÃÊÈÄ¿¡ Á¾·á //m_ThrustTimer.SetTimer(AIParamParser::AICommonInfo.m_wTHRUST_TIME); m_ThrustTimer.SetTimer(m_ThrustTimer.eStaticTimer_Thrust, 0); } void ThrustState::OnExit() { State::OnExit(); m_pNPC->StopMoving(); } // »óÅ ¹ö±× ¹®Á¦ [5/14/2010 lst1024] // ¹ö¼­Ä¿ÀÇ ÅÂŬ ½ºÅ³ÀÇ °æ¿ì ³Ë¹é, Æ®·¯½ºÆ®, ½ºÅ³ °ø°Ý µ¥¹ÌÁö, 3°¡ÁöÀÇ ¾îºô¸®Æ¼°¡ ÀÖ´Ù. // ³Ë¹é ¾îºô¸®Æ¼´Â npc¸¦ KnockDownState·Î ¸¸µé°í, // Æ®·¯½ºÆ®´Â npc¸¦ ThrustState·Î, // ½ºÅ³ °ø°Ý µ¥¹ÌÁö´Â °ü·Ã »óÅ À¯¹ß ¾øÀÌ ÇöÀç »óÅ¿¡ OnMsgAttacked ¸¦ º¸³½´Ù. // // ¹®Á¦ 1. ³Ë¹é°ú Æ®·¯½ºÆ®´Â °ø°ÝÀÚ¿¡ ´ëÇÑ ¼ÂÆÃÀ» ÇÏÁö ¾Ê´Â´Ù. ÀǵµµÈ °ÍÀΰ¡? // ¹®Á¦ 2. ÅÂŬÀÇ °æ¿ì npc°¡ ³Ë¹é°ú Æ®·¯½ºÆ®»óŸ¦ À¯¹ß, ÀÌÈÄ¿¡ µé¾î¿À´Â ½ºÅ³ °ø°Ý µ¥¹ÌÁö¿¡ ÀÇÇÑ OnMsgAttacked À» ¹«½ÃÇÑ´Ù. BOOL ThrustState::OnUpdate(DWORD dwDeltaTick) { __UNUSED(dwDeltaTick); if (m_ThrustTimer.IsExpired()) { if (m_bDownAfterThrust) { m_pNPC->ChangeState(STATE_ID_KNOCKDOWN, m_dwDownTimeAfterThrust); } else { if (m_pNPC->GetTargetChar()) { m_pNPC->ChangeState(STATE_ID_TRACK); } else { m_pNPC->ChangeState(STATE_ID_IDLE); } } } return true; } // ¹Ð¸®´Â µµÁß¿¡ ³¯¾Æ¿Â ´Ù¿î ¸Þ¼¼Áö´Â ¹«½Ã void ThrustState::OnMsgKnockDown(const AI_MSG* pMsg) { const AI_MSG_KNOCKDOWN* pRecvMsg = static_cast(pMsg); m_bDownAfterThrust = true; m_dwDownTimeAfterThrust = pRecvMsg->dwKnockDownTick; } void ThrustState::OnMsgStun(const AI_MSG* pMsg) { m_bDownAfterThrust = true; } // ¹Ð¸®±â°¡ ³¡³ª¸é Follow(Idle)»óÅ·Πº¹±ÍÇÑ´Ù. void ThrustState::OnMsgCommandFollow(const AI_MSG* pMsg) { m_pNPC->SetTargetChar(NULL); } #ifdef _NA_007009_20140102_ATTACK_AFTER_THRUSTSTATE void ThrustState::OnMsgAttacked( const AI_MSG* pMsg ) { State::OnMsgAttacked(pMsg); const AI_MSG_ATTACKED* pAttackMsg = static_cast(pMsg); GameField* pField = m_pNPC->GetField(); if (pField == NULL) return; Character* pAttacker = pField->FindCharacter(pAttackMsg->dwAttackerKey); if (pAttacker == NULL) return; // »ó´ë°¡ Àû±ºÀÌ¸é °ø°Ý »óÅ·ΠÀüÀÌ #ifdef _NA_007667_20141001_WITCHBLADE_SKILL State::SetTarget(pMsg); #else if (m_pNPC->IsFriend(pAttacker) == USER_RELATION_ENEMY) { m_pNPC->SetTargetChar(pAttacker); } #endif //_NA_007667_20141001_WITCHBLADE_SKILL } #endif //_NA_007009_20140102_ATTACK_AFTER_THRUSTSTATE