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

📄 caction.cpp

📁 墨香最新私服
💻 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 + -