⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 helpstate.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -