From 7c0f51f73d2939e73838c7697b5c14623749f26d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 1 Jun 2023 14:25:21 +0800 Subject: [PATCH] 1 --- server/gameserver/base_agent.cc | 88 ++++++++++++++++++++++++++++++++- server/gameserver/skill.cc | 6 +++ server/gameserver/skill.h | 1 + 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 71919e1b..2945ac34 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -7,10 +7,12 @@ #include "movement.h" #include "glmhelper.h" #include "trigger.h" +#include "skill.h" #include "f8/btmgr.h" #include "mt/Equip.h" +#include "mt/Skill.h" void DumpBt(BaseAgent* agent) { @@ -286,16 +288,100 @@ bool BaseAgent::CanUseSkill(int skill_id) int BaseAgent::GetUseableSkill(Creature* target) { + if (GetOwner()->IsHuman()) { + Skill* skill = GetOwner()->GetMainSkill(); + if (skill && CanUseSkill(skill->GetSkillId())) { + return skill->GetSkillId(); + } + } return -1; } behaviac::EBTStatus BaseAgent::DoUseSkill(int skill_id) { - + return behaviac::BT_SUCCESS; } bool BaseAgent::InternalUseSkill(int skill_id, CreatureWeakPtr target, int& wait_time) { + if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), + target.Get()->GetPos().ToGlmVec3())) { + return false; + } + Skill* skill = GetOwner()->GetSkill(skill_id); + if (skill) { + wait_time = 0; + glm::vec3 skill_dir = target.Get()->GetPos().ToGlmVec3() - GetOwner()->GetPos().ToGlmVec3(); + float skill_distance = GlmHelper::Norm(skill_dir); + GlmHelper::Normalize(skill_dir); + + switch (skill->GetCurrSkillMeta()->GetMagicId()) { + case MAGIC_20101_HL: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20701_BAO: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20801_LONG: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20901_XIONG: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_21001_NIU: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20201_HX: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20401_MAO: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20601_DJS: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20301_XL: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20501_TZ: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + default: + { + } + break; + } + } return false; } diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index e5c400b3..8412a52a 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -558,3 +558,9 @@ const mt::Skill* Skill::GetCurrSkillMeta() return meta; } } + + +int Skill::GetSkillId() +{ + return meta->skill_id(); +} diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index c01ce87e..591dc7db 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -52,6 +52,7 @@ class Skill void Clear(); void Reset(); const mt::Skill* GetCurrSkillMeta(); + int GetSkillId(); private: void InitActiveSkill();