diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 41 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 40 |
3 files changed, 52 insertions, 33 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index b305fe90e8c..2dc66300cef 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -303,8 +303,6 @@ Creature::Creature(bool isWorldObject) : Unit(isWorldObject), MapObject(), m_Pla m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(UI64LIT(0)), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_cannotReachTarget(false), m_cannotReachTimer(0), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), _waypointPathId(0), _currentWaypointNodeInfo(0, 0), m_formation(nullptr), m_triggerJustAppeared(true), m_respawnCompatibilityMode(false), _lastDamagedTime(0), - _staticFlags(CreatureStaticFlags()), _staticFlags2(CreatureStaticFlags2()), _staticFlags3(CreatureStaticFlags3()), _staticFlags4(CreatureStaticFlags4()), - _staticFlags5(CreatureStaticFlags5()), _staticFlags6(CreatureStaticFlags6()), _staticFlags7(CreatureStaticFlags7()), _staticFlags8(CreatureStaticFlags8()), _regenerateHealth(true), _isMissingCanSwimFlagOutOfCombat(false) { m_regenTimer = CREATURE_REGEN_INTERVAL; @@ -1853,7 +1851,7 @@ void Creature::LoadEquipment(int8 id, bool force /*= true*/) void Creature::SetSpawnHealth() { - if (_staticFlags5.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN)) + if (_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN)) return; uint32 curhealth; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index eb796c15707..f88b61b5ba6 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -146,13 +146,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma using Unit::SetImmuneToNPC; void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); } - void SetUnkillable(bool unkillable) - { - if (unkillable) - _staticFlags |= CREATURE_STATIC_FLAG_UNKILLABLE; - else - _staticFlags &= ~CREATURE_STATIC_FLAG_UNKILLABLE; - } + void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_UNKILLABLE, unkillable); } /// @todo Rename these properly bool isCanInteractWithBattleMaster(Player* player, bool msg) const; @@ -310,14 +304,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool hasQuest(uint32 quest_id) const override; bool hasInvolvedQuest(uint32 quest_id) const override; - bool CanRegenerateHealth() const { return !_staticFlags5.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; } - void SetRegenerateHealth(bool value) - { - if (!value) - _staticFlags5 |= CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN; - else - _staticFlags5 &= ~CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN; - } + bool CanRegenerateHealth() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; } + void SetRegenerateHealth(bool value) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN, !value); } virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; } virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const; float GetPetChaseDistance() const; @@ -405,13 +393,13 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void ExitVehicle(Position const* exitPosition = nullptr) override; bool HasFlag(CreatureStaticFlags flag) const { return _staticFlags.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags2.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags3.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags4.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags5.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags6.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags7.HasFlag(flag); } - bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags8.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags.HasFlag(flag); } uint32 GetTrainerId() const; void SetTrainerId(Optional<uint32> trainerId); @@ -496,14 +484,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma time_t _lastDamagedTime; // Part of Evade mechanics CreatureTextRepeatGroup m_textRepeat; - EnumFlag<CreatureStaticFlags>_staticFlags; - EnumFlag<CreatureStaticFlags2> _staticFlags2; - EnumFlag<CreatureStaticFlags3> _staticFlags3; - EnumFlag<CreatureStaticFlags4> _staticFlags4; - EnumFlag<CreatureStaticFlags5> _staticFlags5; - EnumFlag<CreatureStaticFlags6> _staticFlags6; - EnumFlag<CreatureStaticFlags7> _staticFlags7; - EnumFlag<CreatureStaticFlags8> _staticFlags8; + CreatureStaticFlagsHolder _staticFlags; // Regenerate health bool _regenerateHealth; // Set on creation diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index f4d68be752c..da173c7b6db 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -288,6 +288,46 @@ enum CreatureStaticFlags8 DEFINE_ENUM_FLAG(CreatureStaticFlags8); +class CreatureStaticFlagsHolder +{ +public: + explicit CreatureStaticFlagsHolder(CreatureStaticFlags flags = CreatureStaticFlags(), CreatureStaticFlags2 flags2 = CreatureStaticFlags2(), + CreatureStaticFlags3 flags3 = CreatureStaticFlags3(), CreatureStaticFlags4 flags4 = CreatureStaticFlags4(), + CreatureStaticFlags5 flags5 = CreatureStaticFlags5(), CreatureStaticFlags6 flags6 = CreatureStaticFlags6(), + CreatureStaticFlags7 flags7 = CreatureStaticFlags7(), CreatureStaticFlags8 flags8 = CreatureStaticFlags8()) + : _flags(flags), _flags2(flags2), _flags3(flags3), _flags4(flags4), _flags5(flags5), _flags6(flags6), _flags7(flags7), _flags8(flags8) + { + } + + bool HasFlag(CreatureStaticFlags flag) const { return _flags.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags2 flag) const { return _flags2.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags3 flag) const { return _flags3.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags4 flag) const { return _flags4.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags5 flag) const { return _flags5.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags6 flag) const { return _flags6.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags7 flag) const { return _flags7.HasFlag(flag); } + bool HasFlag(CreatureStaticFlags8 flag) const { return _flags8.HasFlag(flag); } + + void ApplyFlag(CreatureStaticFlags flag, bool apply) { if (apply) _flags |= flag; else _flags &= ~flag; } + void ApplyFlag(CreatureStaticFlags2 flag, bool apply) { if (apply) _flags2 |= flag; else _flags2 &= ~flag; } + void ApplyFlag(CreatureStaticFlags3 flag, bool apply) { if (apply) _flags3 |= flag; else _flags3 &= ~flag; } + void ApplyFlag(CreatureStaticFlags4 flag, bool apply) { if (apply) _flags4 |= flag; else _flags4 &= ~flag; } + void ApplyFlag(CreatureStaticFlags5 flag, bool apply) { if (apply) _flags5 |= flag; else _flags5 &= ~flag; } + void ApplyFlag(CreatureStaticFlags6 flag, bool apply) { if (apply) _flags6 |= flag; else _flags6 &= ~flag; } + void ApplyFlag(CreatureStaticFlags7 flag, bool apply) { if (apply) _flags7 |= flag; else _flags7 &= ~flag; } + void ApplyFlag(CreatureStaticFlags8 flag, bool apply) { if (apply) _flags8 |= flag; else _flags8 &= ~flag; } + +private: + EnumFlag<CreatureStaticFlags> _flags; + EnumFlag<CreatureStaticFlags2> _flags2; + EnumFlag<CreatureStaticFlags3> _flags3; + EnumFlag<CreatureStaticFlags4> _flags4; + EnumFlag<CreatureStaticFlags5> _flags5; + EnumFlag<CreatureStaticFlags6> _flags6; + EnumFlag<CreatureStaticFlags7> _flags7; + EnumFlag<CreatureStaticFlags8> _flags8; +}; + // EnumUtils: DESCRIBE THIS enum CreatureFlagsExtra : uint32 { |