aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-03-13 14:52:11 +0100
committerShauren <shauren.trinity@gmail.com>2023-03-13 14:52:11 +0100
commiteb93afffc08a45354e1b896adf38d1f8e8b352ac (patch)
tree2838398fc2fe98d0206934f5dac075035b0001bf
parent155cf58236f7adbd169f57e0578c96fd7ce2173f (diff)
Core/Creatures: Allow toggling creature default root state
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp11
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp6
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);