📄 caction.cpp
字号:
// Action.cpp: implementation of the CAction class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CAction.h"
#include "SkillManager_Client.h"
#include "SkillInfo.h"
#include "StreetStallManager.h"
#include "ObjectManager.h"
#include "NpcScriptManager.h"
#include "cMsgBox.h"
#include "./interface/cWindowManager.h"
#include "WindowIDEnum.h"
#include "ChatManager.h"
#include "MoveManager.h"
#include "objectstatemanager.h"
#include "ItemManager.h"
#include "Gamein.h"
#include "InventoryExDialog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAction::CAction()
{
Clear();
}
CAction::~CAction()
{
}
BOOL CAction::HasAction()
{
return m_ActionKind==eActionKind_None ? FALSE : TRUE;
}
void CAction::CopyFrom(CAction* pSrc)
{
if(pSrc == NULL)
Clear();
else
memcpy(this,pSrc,sizeof(CAction));
}
void CAction::InitSkillAction(CSkillInfo* pSkillInfo,CActionTarget* pTarget)
{
InitAction(eActionKind_Skill,pSkillInfo,pSkillInfo->GetSkillRange()-50,pTarget); //
}
void CAction::InitSkillActionRealExecute(CSkillInfo* pSkillInfo,CActionTarget* pTarget)
{
InitAction(eActionKind_Skill_RealExecute,pSkillInfo,pSkillInfo->GetSkillRange()-50,pTarget); //
}
void CAction::InitStallAction( float Distance, CActionTarget* pTarget )
{
InitAction(eActionKind_TalkToOwner, NULL, Distance, pTarget); //
}
void CAction::InitMoveAction(VECTOR3* pToPos)
{
m_ActionTarget.InitActionTarget(pToPos,0);
InitAction(eActionKind_Move, NULL, 0, &m_ActionTarget);
}
void CAction::InitAction(int ActionKind,void* pActionInfo,float Distance,CActionTarget* pTarget)
{
m_ActionKind = ActionKind;
m_Distance = Distance;
m_pActionInfo = pActionInfo;
m_ActionTarget.CopyFrom(pTarget);
}
void CAction::Clear()
{
m_ActionKind = eActionKind_None;
}
BOOL CAction::CheckTargetDistance(VECTOR3* pCurPos)
{
VECTOR3* pTargetPos = m_ActionTarget.GetTargetPosition();
if(pTargetPos == NULL)
return FALSE;
float dist = CalcDistanceXZ(pCurPos,pTargetPos);
if(dist <= m_Distance)
return TRUE;
else
return FALSE;
}
void CAction::ExcuteAction(CHero* pOperator)
{
switch(m_ActionKind) {
case eActionKind_Skill:
{
CSkillInfo* pNextSkill = (CSkillInfo*)m_pActionInfo;
if(pNextSkill->IsInSkillRange(pOperator,&m_ActionTarget) == TRUE)
{ // 己傍
SKILLMGR->ExcuteSkillSYN(pOperator,&m_ActionTarget,pNextSkill);
}
else
{ // 角菩
SKILLMGR->ExcuteSkillSYN(pOperator,&m_ActionTarget,pNextSkill->IsMugong());
}
}
break;
case eActionKind_Skill_RealExecute:
SKILLMGR->RealExcuteSkillSYN(pOperator,&m_ActionTarget,(CSkillInfo*)m_pActionInfo);
break;
case eActionKind_TalkToNpc:
{
CNpc* pNpc = (CNpc*)OBJECTMGR->GetObject( m_ActionTarget.GetTargetID() );
MSG_DWORD msg;
msg.Category = MP_NPC;
msg.Protocol = MP_NPC_SPEECH_SYN;
msg.dwObjectID = HERO->GetID();
msg.dwData = m_ActionTarget.GetTargetID(); //NPC Idx
OBJECTSTATEMGR->StartObjectState(HERO, eObjectState_Deal);
NETWORK->Send(&msg, sizeof(msg));
pNpc->OnClicked();
// jsd quest
// CQuestEvent qe;
// qe.SetValue( eQuestEvent_NpcTalk, msg.dwData, 0 );
// QUESTMGR->OnQuestEvent( HERO, &qe );
}
break;
case eActionKind_TalkToOwner:
//畴痢扁瓷 沥惑拳 瞪锭鳖瘤 菩摹棵府磊.
// CHATMGR->AddMsg( CTC_SYSMSG, "畴痢惑 扁瓷捞 老矫利栏肺 吝窜登菌嚼聪促. 捞侩俊 阂祈阑 靛妨 了价钦聪促." );
STREETSTALLMGR->EnterStreetStall( m_ActionTarget.GetTargetID() );
break;
case eActionKind_Move:
MOVEMGR->SetHeroTarget( m_ActionTarget.GetTargetPosition(), TRUE);
break;
case eActionKind_EquipItem:
{
CItem* pItem = ITEMMGR->GetItem((DWORD)m_pActionInfo);
if(pItem == NULL)
return;
GAMEIN->GetInventoryDialog()->UseItem(pItem);
}
break;
default:
ASSERT(0);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -