diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-13 14:52:11 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-13 14:52:11 +0100 |
commit | eb93afffc08a45354e1b896adf38d1f8e8b352ac (patch) | |
tree | 2838398fc2fe98d0206934f5dac075035b0001bf | |
parent | 155cf58236f7adbd169f57e0578c96fd7ce2173f (diff) |
Core/Creatures: Allow toggling creature default root state
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 6 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 90e0b98398c..63c7bd49552 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -684,7 +684,6 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, SetIsCombatDisallowed((cInfo->flags_extra & CREATURE_FLAG_EXTRA_CANNOT_ENTER_COMBAT) != 0); - LoadTemplateRoot(); InitializeMovementFlags(); LoadCreaturesAddon(); @@ -1895,8 +1894,13 @@ void Creature::SetSpawnHealth() void Creature::LoadTemplateRoot() { - if (GetMovementTemplate().IsRooted()) - SetControlled(true, UNIT_STATE_ROOT); + SetTemplateRooted(GetMovementTemplate().IsRooted()); +} + +void Creature::SetTemplateRooted(bool rooted) +{ + _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_SESSILE, rooted); + SetControlled(rooted, UNIT_STATE_ROOT); } bool Creature::hasQuest(uint32 quest_id) const @@ -2766,6 +2770,7 @@ void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, floa void Creature::InitializeMovementFlags() { + LoadTemplateRoot(); // It does the same, for now UpdateMovementFlags(); } diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a2354945950..403ed25d0ac 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -94,6 +94,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void LoadEquipment(int8 id = 1, bool force = false); void SetSpawnHealth(); void LoadTemplateRoot(); + bool IsTemplateRooted() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_SESSILE); } + void SetTemplateRooted(bool rooted); ObjectGuid::LowType GetSpawnId() const { return m_spawnId; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index bb31ad0fff6..2228324d965 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10962,7 +10962,7 @@ void Unit::SetControlled(bool apply, UnitState state) SetStunned(false); break; case UNIT_STATE_ROOT: - if (HasAuraType(SPELL_AURA_MOD_ROOT) || HasAuraType(SPELL_AURA_MOD_ROOT_2) || HasAuraType(SPELL_AURA_MOD_ROOT_DISABLE_GRAVITY) || GetVehicle() || (ToCreature() && ToCreature()->GetMovementTemplate().IsRooted())) + if (HasAuraType(SPELL_AURA_MOD_ROOT) || HasAuraType(SPELL_AURA_MOD_ROOT_2) || HasAuraType(SPELL_AURA_MOD_ROOT_DISABLE_GRAVITY) || GetVehicle() || (ToCreature() && ToCreature()->IsTemplateRooted())) return; ClearUnitState(state); @@ -12760,7 +12760,7 @@ bool Unit::SetDisableGravity(bool disable, bool updateAnimTier /*= true*/) SendMessageToSet(packet.Write(), true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !ToCreature()->GetMovementTemplate().IsRooted()) + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !ToCreature()->IsTemplateRooted()) { if (IsGravityDisabled()) SetAnimTier(AnimTier::Fly); @@ -12976,7 +12976,7 @@ bool Unit::SetHover(bool enable, bool updateAnimTier /*= true*/) SendMessageToSet(packet.Write(), true); } - if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !ToCreature()->GetMovementTemplate().IsRooted()) + if (IsCreature() && updateAnimTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !ToCreature()->IsTemplateRooted()) { if (IsGravityDisabled()) SetAnimTier(AnimTier::Fly); |