From 14edda6c904fe73db6085471542628ff50114bf7 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Fri, 1 Apr 2022 11:59:12 +0200 Subject: [PATCH] fix(Core/Players): Fixed setting player's zone id to unknown value. (#10996) * fix(Core/Players): Fixed setting player's zone id to unknown value. Fixed #10945 * Update. * Update. --- src/server/game/Entities/Player/PlayerUpdates.cpp | 5 +++++ src/server/game/Spells/SpellInfo.cpp | 2 +- src/server/scripts/Spells/spell_generic.cpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 267a50f03..c7d74e889 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -1192,6 +1192,11 @@ void Player::UpdateArea(uint32 newArea) void Player::UpdateZone(uint32 newZone, uint32 newArea) { + if (!newZone) + { + return; + } + if (m_zoneUpdateId != newZone) { sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 3e09ad3d0..63fefa962 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1499,7 +1499,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a } // continent limitation (virtual continent) - if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS)) + if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS) && (area_id || zone_id)) { AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(area_id); if (!areaEntry) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index edba1398e..668043d67 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3827,7 +3827,7 @@ public: AreaTableEntry const* area = sAreaTableStore.LookupEntry(target->GetAreaId()); // Xinef: add battlefield check Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(target->GetZoneId()); - if (!area || (canFly && ((area->flags & AREA_FLAG_NO_FLY_ZONE) || (Bf && !Bf->CanFlyIn())))) + if ((area && canFly && (area->flags & AREA_FLAG_NO_FLY_ZONE)) || (Bf && !Bf->CanFlyIn())) canFly = false; uint32 mount = 0;