aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-01-01 12:34:42 +0100
committerShauren <shauren.trinity@gmail.com>2022-01-01 12:34:42 +0100
commit645b41ebb9bcec74a588b77ae690f144a87a1904 (patch)
tree5f69ca2bdd862c0f9fd5f5efd946eff726bf20c8 /src/server/game/Entities/Unit
parent2764441eb00042bd1ae697e0a4a81f3020a5c538 (diff)
Core/Units: Sync ProcessTerrainStatusUpdate code with master branch
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Entities/Unit/Unit.h4
2 files changed, 9 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 278087e4890..2f4678c5367 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -3194,25 +3194,26 @@ bool Unit::IsUnderWater() const
void Unit::ProcessPositionDataChanged(PositionFullTerrainStatus const& data)
{
+ ZLiquidStatus oldLiquidStatus = GetLiquidStatus();
WorldObject::ProcessPositionDataChanged(data);
- ProcessTerrainStatusUpdate(data.liquidStatus, data.liquidInfo);
+ ProcessTerrainStatusUpdate(oldLiquidStatus, data.liquidInfo);
}
-void Unit::ProcessTerrainStatusUpdate(ZLiquidStatus status, Optional<LiquidData> const& liquidData)
+void Unit::ProcessTerrainStatusUpdate(ZLiquidStatus /*oldLiquidStatus*/, Optional<LiquidData> const& newLiquidData)
{
- if (IsFlying() || (!IsControlledByPlayer()))
+ if (!IsControlledByPlayer())
return;
// remove appropriate auras if we are swimming/not swimming respectively
- if (status & MAP_LIQUID_STATUS_SWIMMING)
+ if (IsInWater())
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_ABOVEWATER);
else
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_UNDERWATER);
// liquid aura handling
LiquidTypeEntry const* curLiquid = nullptr;
- if ((status & MAP_LIQUID_STATUS_SWIMMING) && liquidData)
- curLiquid = sLiquidTypeStore.LookupEntry(liquidData->entry);
+ if (IsInWater() && newLiquidData)
+ curLiquid = sLiquidTypeStore.LookupEntry(newLiquidData->entry);
if (curLiquid != _lastLiquid)
{
if (_lastLiquid && _lastLiquid->SpellID)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 07f46b6a7c7..795c631358e 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1118,7 +1118,7 @@ class TC_GAME_API Unit : public WorldObject
bool isTargetableForAttack(bool checkFakeDeath = true) const;
- virtual bool IsInWater() const;
+ bool IsInWater() const;
bool IsUnderWater() const;
bool isInAccessiblePlaceFor(Creature const* c) const;
@@ -1833,7 +1833,7 @@ class TC_GAME_API Unit : public WorldObject
void DisableSpline();
void ProcessPositionDataChanged(PositionFullTerrainStatus const& data) override;
- virtual void ProcessTerrainStatusUpdate(ZLiquidStatus status, Optional<LiquidData> const& liquidData);
+ virtual void ProcessTerrainStatusUpdate(ZLiquidStatus oldLiquidStatus, Optional<LiquidData> const& newLiquidData);
// notifiers
virtual void AtEnterCombat() { }