📄 helpstate.cpp
字号:
#include "stdafx.h"
#include <Timer.h>
#include "HelpState.h"
#include "Field.h"
#include "AITypes.h"
#include <PacketStruct_CG.h>
#include "Const.h"
#include "AIParamParser.h"
HelpState::HelpState()
{
m_pHelpTimer = new util::Timer;
}
HelpState::~HelpState()
{
SAFE_DELETE( m_pHelpTimer );
}
VOID HelpState::Init()
{
}
VOID HelpState::OnEnter( LPARAM param1, LPARAM param2, LPARAM param3 )
{
State::OnEnter( param1, param2, param3 );
Field *pField = m_pNPC->GetField();
if( pField )
{
// Help惑怕肺 傈券登菌澜阑 林函俊 舅妨霖促.
MSG_CG_STATUS_NPC_STATE_CHANGE_CMD sendMsg;
sendMsg.m_dwObjectKey = m_pNPC->GetObjectKey();
sendMsg.m_byState = eNPC_STATE_HELP_RESPONSE;
m_pNPC->SendPacketAround( &sendMsg, sizeof(sendMsg) );
}
AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
m_pHelpTimer->SetTimer( stAIParamInfo.m_wSEARCH_PERIOD );
// 傍拜 规过 急琶登绢 乐瘤 臼栏搁 急琶
if( m_pNPC->GetSelectedSkill() == SKILLCODE_INVALID )
{
m_pNPC->SelectSkill();
}
DoTrack();
}
VOID HelpState::OnExit()
{
State::OnExit();
}
VOID HelpState::OnUpdate( DWORD dwDeltaTick )
{
__UNUSED(dwDeltaTick);
ASSERT( NULL != m_pNPC->GetTargetChar() );
// 鸥百苞狼 芭府 备窍扁
float fDistToTarget = m_pNPC->GetDistToTarget();
// 鸥百捞 矫具 裹困甫 哈绢唱搁 规炔 惑怕肺 傈捞
AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
if( !m_pNPC->IsMemberOfGroup() && fDistToTarget > ( m_pNPC->GetSightRange() * stAIParamInfo.m_fHELP_SIGHTRANGE_RATIO ) )
{
m_pNPC->GetTargetChar()->FreeEnemySlot( m_pNPC->GetTrackSlot() );
m_pNPC->SetTrackSlot( -1 );
m_pNPC->ChangeState( STATE_ID_IDLE );
return;
}
// 鸥百捞 傍拜 荤芭府 郴俊 甸绢乐栏搁 傍拜 惑怕肺 傈捞
if( fDistToTarget <= m_pNPC->GetAttackRange() )
{
m_pNPC->ChangeState( STATE_ID_ATTACK );
return;
}
if( m_pNPC->IsMoving() )
{
// 1檬付促 鸥百狼 谅钎肺 促矫 茄锅 辨茫扁
if( m_pHelpTimer->IsExpired() )
{
DoTrack();
}
}
else
{
// 鸥百捞 傍拜 荤芭府 郴俊 甸绢乐瘤 臼栏搁 促矫 辨茫扁
DoTrack();
}
}
VOID HelpState::DoTrack()
{
ASSERT( NULL != m_pNPC->GetTargetChar() );
Field *pField = m_pNPC->GetField();
if( !pField ) return;
if( m_pNPC->IsSamePositionWithTarget() )
{
// 敲饭捞绢 困摹客 沥犬洒 鞍促搁 惑怕 傈捞
m_pNPC->ChangeState( STATE_ID_ATTACK );
return;
}
// 货肺款 Track Position阑 茫绰促.
WzVector vTrackPos, vTargetPos;
m_pNPC->GetTrackPos( vTrackPos );
m_pNPC->GetTargetChar()->GetPos( &vTargetPos );
// 辨茫扁..角菩矫 惑怕 傈捞
if( !m_pNPC->MoveAndBroadcast( &vTrackPos, CMS_RUN ) )
{
m_pNPC->ChangeState( STATE_ID_IDLE );
}
}
VOID HelpState::OnMsgHelpRequest( AI_MSG *pMsg )
{
}
// 饭明绊 公矫
VOID HelpState::OnMsgLetsGo( AI_MSG *pMsg )
{
}
// 利惯斑 公矫
VOID HelpState::OnMsgEnemyFound( AI_MSG *pMsg )
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -