From 3e4456644a14c7b2748324a782b7915bae3ff3e3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 14 Oct 2023 22:01:11 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.h | 1 + server/gameserver/hero.h | 1 - server/gameserver/master_agent.cc | 82 +++++++++++++++++++++++++++++++ server/gameserver/master_agent.h | 30 +++++++++++ 4 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 server/gameserver/master_agent.cc create mode 100644 server/gameserver/master_agent.h diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 33a0e014..24628e15 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -101,6 +101,7 @@ class Creature : public MoveableEntity int level = 1; int hero_level = 1; int revive_count = 0; + CreatureWeakPtr master; Weapon second_weapon; glm::vec3 skill_pos; diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h index b164fd8a..b34bb0e6 100644 --- a/server/gameserver/hero.h +++ b/server/gameserver/hero.h @@ -12,7 +12,6 @@ class HeroAgent; class Hero : public Creature { public: - CreatureWeakPtr master; const mt::Hero* meta = nullptr; bool is_pve_boss = false; list_head entry; diff --git a/server/gameserver/master_agent.cc b/server/gameserver/master_agent.cc new file mode 100644 index 00000000..0013505d --- /dev/null +++ b/server/gameserver/master_agent.cc @@ -0,0 +1,82 @@ +#include "precompile.h" + +#include "master_agent.h" + +#include "mt/Hero.h" + +MasterAgent::MasterAgent():BaseAgent() +{ + +} + +MasterAgent::~MasterAgent() +{ +} + +int MasterAgent::GetUniId() +{ + if (owner_->master.Get()) { + return owner_->master.Get()->GetUniId(); + } + return 0; +} + +bool MasterAgent::IsValid() +{ + return owner_->master.Get() && !owner_->master.Get()->dead; +} + +bool MasterAgent::IsDead() +{ + if (owner_->master.Get()) { + return owner_->master.Get()->dead; + } + return true; +} + +const glm::vec3 MasterAgent::GetPos() +{ + return owner_->master.Get()->GetPos().ToGlmVec3(); +} + +float MasterAgent::GetHp() +{ + if (!owner_->master.Get()) { + abort(); + } + return owner_->master.Get()->GetHP(); +} + +float MasterAgent::GetMaxHp() +{ + if (!owner_->master.Get()) { + abort(); + } + return owner_->master.Get()->GetMaxHP(); +} + +int MasterAgent::GetHeroId() +{ + if (!owner_->master.Get()) { + abort(); + } + return owner_->master.Get()->GetHeroMeta()->id(); +} + +int MasterAgent::GetLevel() +{ + if (!owner_->master.Get()) { + abort(); + } + return owner_->master.Get()->level; +} + +void MasterAgent::SetOwner(Creature* owner) +{ + owner_ = owner; +} + +Room* MasterAgent::GetRoom() +{ + return owner_->room; +} diff --git a/server/gameserver/master_agent.h b/server/gameserver/master_agent.h new file mode 100644 index 00000000..4a9a5ce7 --- /dev/null +++ b/server/gameserver/master_agent.h @@ -0,0 +1,30 @@ +#pragma once + +#include "new_base_agent.h" + +#include "creature.h" + +class MasterAgent : public BaseAgent +{ +public: + MasterAgent(); + + virtual ~MasterAgent(); + + BEHAVIAC_DECLARE_AGENTTYPE(MasterAgent, BaseAgent) + + int GetUniId(); + bool IsValid(); + bool IsDead(); + const glm::vec3 GetPos(); + float GetHp(); + float GetMaxHp(); + int GetHeroId(); + int GetLevel(); + + void SetOwner(Creature* owner); + virtual Room* GetRoom() override; + +private: + Creature* owner_ = nullptr; +};