From d42b92cac1ff304c3bb5414434d07d6492fba26c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 2 Jun 2023 17:45:49 +0800 Subject: [PATCH] 1 --- server/gameserver/base_agent.cc | 24 +++++++++++++++----- server/gameserver/constant.h | 5 ++++ server/gameserver/creature.cc | 1 + server/gameserver/hero.cc | 8 +++++++ server/gameserver/hero_agent.cc | 39 ++++++++++++++++++++++++++++---- server/gameserver/skill.cc | 3 ++- server/gameserver/skillhelper.cc | 7 ++++++ 7 files changed, 75 insertions(+), 12 deletions(-) diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index e8023db2..fd39e77e 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -13,6 +13,7 @@ #include "mt/Equip.h" #include "mt/Skill.h" +#include "mt/Hero.h" void DumpBt(BaseAgent* agent) { @@ -317,14 +318,17 @@ int BaseAgent::GetUseableSkill(Creature* target) return -1; } #endif + #if 0 if (GetOwner()->IsHuman()) { - Skill* skill = GetOwner()->GetMainSkill(); - if (skill && GetOwner()->CanUseSkill(skill->GetSkillId())) { - if (skill->GetMinorType()) { - return -1; - } - return skill->GetSkillId(); + return -1; + } + #endif + Skill* skill = GetOwner()->GetMainSkill(); + if (skill && GetOwner()->CanUseSkill(skill->GetSkillId())) { + if (skill->GetMinorType()) { + return -1; } + return skill->GetSkillId(); } return -1; } @@ -411,6 +415,14 @@ bool BaseAgent::InternalUseSkill(int skill_id, CreatureWeakPtr target, int& wait return true; } break; + case MAGIC_60100_1_BOSS: + case MAGIC_60100_2_BOSS: + case MAGIC_60100_3_BOSS: + { + GetOwner()->DoSkill(skill->GetSkillId(), target.Get()->GetUniId(), skill_dir, skill_distance); + return true; + } + break; default: { } diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 91f0cfd6..166ebe29 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -438,9 +438,14 @@ A8_DECLARE_ENUM(MagicType_e, MAGIC_30801_LONG, //30801 龙-救援防护 MAGIC_30901_XIONG, //30901 熊-复活 MAGIC_31001_NIU, //31001 牛-此面向敌 + MAGIC_END ); +const int MAGIC_60100_1_BOSS = (int)MagicType_e::MAGIC_END + 1; //60100 boss1 +const int MAGIC_60100_2_BOSS = (int)MagicType_e::MAGIC_END + 2; //60100 boss2 +const int MAGIC_60100_3_BOSS = (int)MagicType_e::MAGIC_END + 3; //60100 boss3 + enum PolyExtDataFlag_e { kWater1ExtFlag = 1, //能打出水坑 diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 9f595012..f1fa9782 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3031,6 +3031,7 @@ float Creature::GetSpeed() ruduce += GetHeroMeta()->medicine_speed(); } } else if (shot_hold && + GetCurrWeapon() && ( GetCurrWeapon()->weapon_idx == GUN_SLOT1 || GetCurrWeapon()->weapon_idx == GUN_SLOT2 diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 16916af5..b766b8f9 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -79,6 +79,13 @@ void Hero::Initialize() } SetHP(GetBattleContext()->GetMaxHP()); SetMaxHP(GetHP()); + { + std::vector skill_list; + GetBattleContext()->GetSkillList(skill_list); + for (auto& skill_id : skill_list) { + AddSkill(skill_id); + } + } } void Hero::Update(int delta_time) @@ -165,6 +172,7 @@ void Hero::OnBulletHit(IBullet* bullet) } RemoveBuffByEffectId(kBET_PeaceMode); + GetTrigger()->Attacked(bullet->GetSender().Get()); if (!IsDead(room) && (bullet->IsBomb() || bullet->GetSender().Get()->team_id != team_id)) { float finaly_dmg = bullet->GetSender().Get()->GetBattleContext()->CalcDmg(this, bullet); if (bullet->GetSender().Get()->IsHuman()) { diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index 663043b8..3e7f0c2f 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -12,6 +12,7 @@ #include "human.h" #include "mt/Map.h" +#include "mt/Hero.h" HeroAgent::HeroAgent():BaseAgent() { @@ -89,7 +90,6 @@ behaviac::EBTStatus HeroAgent::DoRandomWalk() context->last_attacked_frameno); } }; - return StartCoroutine(co); } @@ -344,10 +344,39 @@ behaviac::EBTStatus HeroAgent::DoPursuit() is_shot = true; } if (is_shot) { - bool shot_ok = false; - glm::vec3 shot_dir = dir; - GetOwner()->SetAttackDir(dir); - GetOwner()->Shot(shot_dir, shot_ok, 0, 0); + bool use_skill_ok = false; + if (context->target.Get() && + !context->target.Get()->dead) { + int skill_id = GetUseableSkill(context->target.Get()); + if (skill_id >= 0) { + GetOwner()->shot_hold = false; + int wait_time = 0; + use_skill_ok = InternalUseSkill(skill_id, context->target, wait_time); + if (use_skill_ok) { + Sleep(wait_time); + } + } + } +#ifdef DEBUG1 + if (context->target.Get()->IsPlayer()) { + a8::XPrintf("DoPursuit %d use_skill_ok:%d time:%d\n", + {GetOwner()->GetUniId(), + use_skill_ok ? 1 : 0, + GetOwner()->GetMainSkill() ? GetOwner()->GetMainSkill()->GetLeftTime() : 0 + }); + } +#endif + if (!use_skill_ok) { + bool shot_ok = false; + glm::vec3 shot_dir = dir; + GetOwner()->shot_hold = true; + GetOwner()->SetAttackDir(shot_dir); + #if 0 + GetOwner()->Shot(AdjustShotDir(shot_dir), shot_ok, 0, 0); + #endif + } + } else { + GetOwner()->shot_hold = false; } } return behaviac::BT_RUNNING; diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 75d3d7c2..20efef71 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -26,6 +26,7 @@ #include "mt/SkillNumber.h" #include "mt/Equip.h" #include "mt/MergeItem.h" +#include "mt/Hero.h" static int GetTraceTargetId(Creature* c) { @@ -257,7 +258,7 @@ void Skill::InitActiveSkill() }, &xtimer_attacher); actived_ = !owner->GetBattleContext()->IsMainSkill(this); - if (owner->IsAndroid()) { + if (owner->IsAndroid() || owner->IsHero()) { actived_ = true; } } diff --git a/server/gameserver/skillhelper.cc b/server/gameserver/skillhelper.cc index d3bd8ce8..73934a1c 100644 --- a/server/gameserver/skillhelper.cc +++ b/server/gameserver/skillhelper.cc @@ -38,6 +38,13 @@ void SkillHelper::Init() } } } + magic_skill_hash_[MAGIC_60100_1_BOSS] = 60101; + magic_skill_hash_[MAGIC_60100_2_BOSS] = 60102; + magic_skill_hash_[MAGIC_60100_3_BOSS] = 60103; + + skill_magic_hash_[60101] = MAGIC_60100_1_BOSS; + skill_magic_hash_[60102] = MAGIC_60100_2_BOSS; + skill_magic_hash_[60103] = MAGIC_60100_3_BOSS; } void SkillHelper::GetMagicIdAndBaseSkillId(int skill_id, int& magic_id, int& base_skill_id)