From 645b41ebb9bcec74a588b77ae690f144a87a1904 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 1 Jan 2022 12:34:42 +0100 Subject: Core/Units: Sync ProcessTerrainStatusUpdate code with master branch --- src/server/game/Entities/Unit/Unit.cpp | 13 +++++++------ src/server/game/Entities/Unit/Unit.h | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'src/server/game/Entities/Unit') 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 const& liquidData) +void Unit::ProcessTerrainStatusUpdate(ZLiquidStatus /*oldLiquidStatus*/, Optional 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 const& liquidData); + virtual void ProcessTerrainStatusUpdate(ZLiquidStatus oldLiquidStatus, Optional const& newLiquidData); // notifiers virtual void AtEnterCombat() { } -- cgit v1.2.3