aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rw-r--r--src/server/game/Entities/Creature/Creature.h41
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h40
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
{