From 27564fa261a8f3c45faf1b3599dd322186f9ec97 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 19 Oct 2023 17:01:48 +0800 Subject: [PATCH] 1 --- server/gameserver/new_hero_agent.cc | 105 +++++++++++++++++++++++++++- server/gameserver/new_hero_agent.h | 1 + 2 files changed, 104 insertions(+), 2 deletions(-) diff --git a/server/gameserver/new_hero_agent.cc b/server/gameserver/new_hero_agent.cc index bcbe63c9..35534670 100644 --- a/server/gameserver/new_hero_agent.cc +++ b/server/gameserver/new_hero_agent.cc @@ -19,9 +19,11 @@ #include "team.h" #include "master_agent.h" #include "team_agent.h" +#include "skill.h" #include "mt/Hero.h" #include "mt/Equip.h" +#include "mt/Skill.h" HeroAgent::HeroAgent():BaseAgent() { @@ -619,9 +621,11 @@ behaviac::EBTStatus HeroAgent::CoSleep(int time) behaviac::EBTStatus HeroAgent::CoUseSkill(int skill_id) { - if (!current_target_agent->IsValid()) { - return behaviac::BT_FAILURE; + int wait_time = 0; + if (InternalUseSkill(skill_id, wait_time)) { + return behaviac::BT_SUCCESS; } + return behaviac::BT_FAILURE; } Room* HeroAgent::GetRoom() @@ -848,3 +852,100 @@ bool HeroAgent::HasUseableSkill() { return owner_->HasUseableSkill(); } + +bool HeroAgent::InternalUseSkill(int skill_id, int& wait_time) +{ + if (!current_target_agent->IsValid()) { + return false; + } + if (GlmHelper::IsEqual2D(owner_->GetPos().ToGlmVec3(), + current_target_agent->GetPos())) { + return false; + } + Skill* skill = owner_->GetSkill(skill_id); + if (skill) { + wait_time = 500; + glm::vec3 skill_dir = current_target_agent->GetPos() - owner_->GetPos().ToGlmVec3(); + float skill_distance = GlmHelper::Norm(skill_dir); + GlmHelper::Normalize(skill_dir); + + switch (skill->GetCurrSkillMeta()->GetMagicId()) { + case MAGIC_20101_HL: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20701_BAO: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20801_LONG: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20901_XIONG: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_21001_NIU: + { +#if 0 + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; +#endif + } + break; + case MAGIC_20201_HX: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20401_MAO: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20601_DJS: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20301_XL: + { + skill_distance = 30; + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_20501_TZ: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + case MAGIC_60100_1_BOSS: + case MAGIC_60100_2_BOSS: + case MAGIC_60100_3_BOSS: + { + owner_->DoSkill(skill->GetSkillId(), current_target_agent->GetUniId(), skill_dir, skill_distance); + return true; + } + break; + default: + { + } + break; + } + } + return false; +} diff --git a/server/gameserver/new_hero_agent.h b/server/gameserver/new_hero_agent.h index 779bd580..2a7fa60a 100644 --- a/server/gameserver/new_hero_agent.h +++ b/server/gameserver/new_hero_agent.h @@ -142,6 +142,7 @@ public: protected: behaviac::EBTStatus DoRunningCb(); behaviac::EBTStatus StartCoroutine(std::shared_ptr coroutine); + bool InternalUseSkill(int skill_id, int& wait_time); private: Creature* owner_ = nullptr;