diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-07-19 23:18:19 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-07-19 23:18:19 +0200 |
| commit | 073a036d84365dae60a70064eb67e68f0447bd72 (patch) | |
| tree | b9c74a852d8135c26e3d952e26ade11155c65f29 /src/server/game | |
| parent | 83b32667940844a257059965711284c9ab38ce44 (diff) | |
Core/Battlefields: Refactor Battlefield creation to be linked to host map creation instead of having globally accessible objects
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Battlefield/Battlefield.h | 2 | ||||
| -rw-r--r-- | src/server/game/Battlefield/BattlefieldMgr.cpp | 122 | ||||
| -rw-r--r-- | src/server/game/Battlefield/BattlefieldMgr.h | 31 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/BattleGroundHandler.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 8 |
14 files changed, 111 insertions, 88 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 6542277bea1..94881ea0f32 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -33,10 +33,9 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "WorldSession.h" -#include "WorldStatePackets.h" #include <G3D/g3dmath.h> -Battlefield::Battlefield() +Battlefield::Battlefield(Map* map) { m_Timer = 0; m_IsEnabled = true; @@ -46,8 +45,8 @@ Battlefield::Battlefield() m_TypeId = 0; m_BattleId = 0; m_ZoneId = 0; - m_Map = nullptr; - m_MapId = 0; + m_Map = map; + m_MapId = map->GetId(); m_MaxPlayer = 0; m_MinPlayer = 0; m_MinLevel = 0; diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 09fddd04750..4ef68b4343c 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -212,7 +212,7 @@ class TC_GAME_API Battlefield : public ZoneScript public: /// Constructor - Battlefield(); + explicit Battlefield(Map* map); /// Destructor virtual ~Battlefield(); diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 4f1e0e1e824..a0400ff6090 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -16,25 +16,28 @@ */ #include "BattlefieldMgr.h" +#include "Containers.h" #include "DatabaseEnv.h" -#include "ObjectMgr.h" #include "Log.h" +#include "Map.h" +#include "ObjectMgr.h" #include "Player.h" #include "ScriptMgr.h" -BattlefieldMgr::BattlefieldMgr() +namespace { - _updateTimer = 0; +constexpr std::array<uint32, BATTLEFIELD_MAX> BattlefieldIdToMapId = { 0, 571, 732 }; +constexpr std::array<uint32, BATTLEFIELD_MAX> BattlefieldIdToZoneId = { 0, 4197, 5095 }; // imitate World_PVP_Area.db2 +std::array<uint32, BATTLEFIELD_MAX> BattlefieldIdToScriptId = { 0, 0, 0 }; } -BattlefieldMgr::~BattlefieldMgr() +BattlefieldMgr::BattlefieldMgr() { - for (BattlefieldSet::iterator itr = _battlefieldSet.begin(); itr != _battlefieldSet.end(); ++itr) - delete *itr; - - _battlefieldMap.clear(); + _updateTimer = 0; } +BattlefieldMgr::~BattlefieldMgr() = default; + BattlefieldMgr* BattlefieldMgr::instance() { static BattlefieldMgr instance; @@ -61,22 +64,8 @@ void BattlefieldMgr::InitBattlefield() continue; } - uint32 scriptId = sObjectMgr->GetScriptId(fields[1].GetString()); + BattlefieldIdToScriptId[typeId] = sObjectMgr->GetScriptId(fields[1].GetString()); - Battlefield* bf = sScriptMgr->CreateBattlefield(scriptId); - if (!bf) - continue; - - if (!bf->SetupBattlefield()) - { - TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u failed.", typeId); - delete bf; - } - else - { - _battlefieldSet.push_back(bf); - TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u succeeded.", typeId); - } ++count; } while (result->NextRow()); @@ -85,15 +74,45 @@ void BattlefieldMgr::InitBattlefield() TC_LOG_INFO("server.loading", ">> Loaded %u battlefields in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void BattlefieldMgr::CreateBattlefieldsForMap(Map* map) +{ + for (uint32 i = 0; i < BATTLEFIELD_MAX; ++i) + { + if (!BattlefieldIdToScriptId[i]) + continue; + + if (BattlefieldIdToMapId[i] != map->GetId()) + continue; + + Battlefield* bf = sScriptMgr->CreateBattlefield(BattlefieldIdToScriptId[i], map); + if (!bf) + continue; + + if (!bf->SetupBattlefield()) + { + TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u on map %u instance id %u failed.", i, map->GetId(), map->GetInstanceId()); + delete bf; + } + + _battlefieldsByMap[map].emplace_back(bf); + TC_LOG_INFO("bg.battlefield", "Setting up battlefield with TypeId %u on map %u instance id %u succeeded.", i, map->GetId(), map->GetInstanceId()); + } +} + +void BattlefieldMgr::DestroyBattlefieldsForMap(Map const* map) +{ + _battlefieldsByMap.erase(map); +} + void BattlefieldMgr::AddZone(uint32 zoneId, Battlefield* bf) { - _battlefieldMap[zoneId] = bf; + _battlefieldsByZone[{ bf->GetMap(), zoneId }] = bf; } void BattlefieldMgr::HandlePlayerEnterZone(Player* player, uint32 zoneId) { - BattlefieldMap::iterator itr = _battlefieldMap.find(zoneId); - if (itr == _battlefieldMap.end()) + auto itr = _battlefieldsByZone.find({ player->GetMap(), zoneId }); + if (itr == _battlefieldsByZone.end()) return; Battlefield* bf = itr->second; @@ -106,8 +125,8 @@ void BattlefieldMgr::HandlePlayerEnterZone(Player* player, uint32 zoneId) void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId) { - BattlefieldMap::iterator itr = _battlefieldMap.find(zoneId); - if (itr == _battlefieldMap.end()) + auto itr = _battlefieldsByZone.find({ player->GetMap(), zoneId }); + if (itr == _battlefieldsByZone.end()) return; // teleport: remove once in removefromworld, once in updatezone @@ -118,10 +137,15 @@ void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId) TC_LOG_DEBUG("bg.battlefield", "Player %s left battlefield id %u", player->GetGUID().ToString().c_str(), itr->second->GetTypeId()); } -Battlefield* BattlefieldMgr::GetBattlefieldToZoneId(uint32 zoneId) +bool BattlefieldMgr::IsWorldPvpArea(uint32 zoneId) const { - BattlefieldMap::iterator itr = _battlefieldMap.find(zoneId); - if (itr == _battlefieldMap.end()) + return std::find(BattlefieldIdToZoneId.begin(), BattlefieldIdToZoneId.end(), zoneId) != BattlefieldIdToZoneId.end(); +} + +Battlefield* BattlefieldMgr::GetBattlefieldToZoneId(Map const* map, uint32 zoneId) +{ + auto itr = _battlefieldsByZone.find({ map, zoneId }); + if (itr == _battlefieldsByZone.end()) { // no handle for this zone, return return nullptr; @@ -133,30 +157,12 @@ Battlefield* BattlefieldMgr::GetBattlefieldToZoneId(uint32 zoneId) return itr->second; } -Battlefield* BattlefieldMgr::GetBattlefieldByBattleId(uint32 battleId) +Battlefield* BattlefieldMgr::GetBattlefieldByBattleId(Map const* map, uint32 battleId) { - for (BattlefieldSet::iterator itr = _battlefieldSet.begin(); itr != _battlefieldSet.end(); ++itr) - { - if ((*itr)->GetBattleId() == battleId) - return *itr; - } - return nullptr; -} - -Battlefield* BattlefieldMgr::GetBattlefieldByQueueId(uint64 queueId) -{ - for (Battlefield* bf : _battlefieldSet) - if (bf->GetQueueId() == queueId) - return bf; - - return nullptr; -} - -ZoneScript* BattlefieldMgr::GetZoneScript(uint32 zoneId) -{ - BattlefieldMap::iterator itr = _battlefieldMap.find(zoneId); - if (itr != _battlefieldMap.end()) - return itr->second; + if (BattlefieldsMapByMap::mapped_type const* battlefields = Trinity::Containers::MapGetValuePtr(_battlefieldsByMap, map)) + for (std::unique_ptr<Battlefield> const& battlefield : *battlefields) + if (battlefield->GetBattleId() == battleId) + return battlefield.get(); return nullptr; } @@ -166,9 +172,11 @@ void BattlefieldMgr::Update(uint32 diff) _updateTimer += diff; if (_updateTimer > BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL) { - for (BattlefieldSet::iterator itr = _battlefieldSet.begin(); itr != _battlefieldSet.end(); ++itr) - if ((*itr)->IsEnabled()) - (*itr)->Update(_updateTimer); + for (auto const& [map, battlefields] : _battlefieldsByMap) + for (std::unique_ptr<Battlefield> const& bfItr : battlefields) + if (bfItr->IsEnabled()) + bfItr->Update(_updateTimer); + _updateTimer = 0; } } diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h index a18f3608bce..9f34d419dd8 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.h +++ b/src/server/game/Battlefield/BattlefieldMgr.h @@ -19,6 +19,10 @@ #define BATTLEFIELD_MGR_H_ #include "Battlefield.h" +#include "Hash.h" +#include <memory> +#include <unordered_map> +#include <vector> class Player; class ZoneScript; @@ -27,22 +31,31 @@ class ZoneScript; class TC_GAME_API BattlefieldMgr { public: + BattlefieldMgr(BattlefieldMgr const&) = delete; + BattlefieldMgr(BattlefieldMgr&&) = delete; + + BattlefieldMgr& operator=(BattlefieldMgr const&) = delete; + BattlefieldMgr& operator=(BattlefieldMgr&&) = delete; + static BattlefieldMgr* instance(); // create battlefield events void InitBattlefield(); + void CreateBattlefieldsForMap(Map* map); + + void DestroyBattlefieldsForMap(Map const* map); + // called when a player enters an battlefield area void HandlePlayerEnterZone(Player* player, uint32 zoneId); // called when player leaves an battlefield area void HandlePlayerLeaveZone(Player* player, uint32 zoneId); - // return assigned battlefield - Battlefield* GetBattlefieldToZoneId(uint32 zoneId); - Battlefield* GetBattlefieldByBattleId(uint32 battleId); - Battlefield* GetBattlefieldByQueueId(uint64 queueId); + bool IsWorldPvpArea(uint32 zoneId) const; - ZoneScript* GetZoneScript(uint32 zoneId); + // return assigned battlefield + Battlefield* GetBattlefieldToZoneId(Map const* map, uint32 zoneId); + Battlefield* GetBattlefieldByBattleId(Map const* map, uint32 battleId); void AddZone(uint32 zoneId, Battlefield* bf); @@ -52,14 +65,14 @@ class TC_GAME_API BattlefieldMgr BattlefieldMgr(); ~BattlefieldMgr(); - typedef std::vector<Battlefield*> BattlefieldSet; - typedef std::map<uint32 /*zoneId*/, Battlefield*> BattlefieldMap; + typedef std::unordered_map<Map const*, std::vector<std::unique_ptr<Battlefield>>> BattlefieldsMapByMap; + typedef std::unordered_map<std::pair<Map const*, uint32 /*zoneid*/>, Battlefield*> BattlefieldMapByZone; // contains all initiated battlefield events // used when initing / cleaning up - BattlefieldSet _battlefieldSet; + BattlefieldsMapByMap _battlefieldsByMap; // maps the zone ids to an battlefield event // used in player event handling - BattlefieldMap _battlefieldMap; + BattlefieldMapByZone _battlefieldsByZone; // update interval uint32 _updateTimer; }; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 71a85d3d3f3..d4c8b8aec40 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1901,7 +1901,7 @@ ZoneScript* WorldObject::FindZoneScript() const return reinterpret_cast<ZoneScript*>(instanceMap->GetInstanceScript()); else if (!map->IsBattlegroundOrArena()) { - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(map, GetZoneId())) return bf; else return sOutdoorPvPMgr->GetOutdoorPvPToZoneId(map, GetZoneId()); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2f176ea74a4..6d428abf54e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4769,7 +4769,7 @@ void Player::RepopAtGraveyard() ClosestGrave = bg->GetClosestGraveyard(this); else { - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(GetMap(), GetZoneId())) ClosestGrave = bf->GetClosestGraveyard(this); else ClosestGrave = sObjectMgr->GetClosestGraveyard(*this, GetTeam(), this); @@ -26736,7 +26736,7 @@ bool Player::IsAreaThatActivatesPvpTalents(uint32 areaID) const if (area->Flags[0] & AREA_FLAG_ARENA) return true; - if (sBattlefieldMgr->GetBattlefieldToZoneId(area->ID)) + if (sBattlefieldMgr->IsWorldPvpArea(area->ID)) return true; area = sAreaTableStore.LookupEntry(area->ParentAreaID); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index bf816e5409c..d42751dcbf0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10813,7 +10813,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId) if (OutdoorPvP* pvp = player->GetOutdoorPvP()) pvp->HandleKill(player, victim); - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetMap(), player->GetZoneId())) bf->HandleKill(player, victim); } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 1cdf21855c7..6ba748d3f6b 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -661,7 +661,7 @@ void WorldSession::HandleAreaSpiritHealerQueryOpcode(WorldPackets::Battleground: if (Battleground* bg = _player->GetBattleground()) sBattlegroundMgr->SendAreaSpiritHealerQueryOpcode(_player, bg, areaSpiritHealerQuery.HealerGuid); - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetMap(), _player->GetZoneId())) bf->SendAreaSpiritHealerQueryOpcode(_player, areaSpiritHealerQuery.HealerGuid); } @@ -677,7 +677,7 @@ void WorldSession::HandleAreaSpiritHealerQueueOpcode(WorldPackets::Battleground: if (Battleground* bg = _player->GetBattleground()) bg->AddPlayerToResurrectQueue(areaSpiritHealerQueue.HealerGuid, _player->GetGUID()); - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetMap(), _player->GetZoneId())) bf->AddPlayerToResurrectQueue(areaSpiritHealerQueue.HealerGuid, _player->GetGUID()); } @@ -686,7 +686,7 @@ void WorldSession::HandleHearthAndResurrect(WorldPackets::Battleground::HearthAn if (_player->IsInFlight()) return; - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(_player->GetMap(), _player->GetZoneId())) { bf->PlayerAskToLeave(_player); return; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 4eab4881150..3c122dfd70a 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -16,6 +16,7 @@ */ #include "Map.h" +#include "BattlefieldMgr.h" #include "Battleground.h" #include "CellImpl.h" #include "CharacterPackets.h" @@ -96,6 +97,7 @@ Map::~Map() sMapMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); sOutdoorPvPMgr->DestroyOutdoorPvPForMap(this); + sBattlefieldMgr->DestroyBattlefieldsForMap(this); if (m_parentMap == this) delete m_childTerrainMaps; @@ -379,6 +381,7 @@ i_scriptLock(false), _respawnCheckTimer(0) _worldStateValues = sWorldStateMgr->GetInitialWorldStatesForMap(this); sOutdoorPvPMgr->CreateOutdoorPvPForMap(this); + sBattlefieldMgr->CreateBattlefieldsForMap(this); sScriptMgr->OnCreateMap(this); } diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 4cf0c6c3eea..9c2821fa962 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1737,10 +1737,10 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger, b return entered ? tmpscript->OnTrigger(player, trigger) : tmpscript->OnExit(player, trigger); } -Battlefield* ScriptMgr::CreateBattlefield(uint32 scriptId) +Battlefield* ScriptMgr::CreateBattlefield(uint32 scriptId, Map* map) { GET_SCRIPT_RET(BattlefieldScript, scriptId, tmpscript, nullptr); - return tmpscript->GetBattlefield(); + return tmpscript->GetBattlefield(map); } Battleground* ScriptMgr::CreateBattleground(BattlegroundTypeId /*typeId*/) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index d729a0309f0..06ab3c2d0c8 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -522,7 +522,7 @@ class TC_GAME_API BattlefieldScript : public ScriptObject ~BattlefieldScript(); - virtual Battlefield* GetBattlefield() const = 0; + virtual Battlefield* GetBattlefield(Map* map) const = 0; }; class TC_GAME_API BattlegroundScript : public ScriptObject @@ -1146,7 +1146,7 @@ class TC_GAME_API ScriptMgr public: /* BattlefieldScript */ - Battlefield* CreateBattlefield(uint32 scriptId); + Battlefield* CreateBattlefield(uint32 scriptId, Map* map); public: /* BattlegroundScript */ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 449ee122b37..52fb6ea128b 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4583,7 +4583,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool { if (Battleground* bg = target->ToPlayer()->GetBattleground()) bg->RemovePlayerFromResurrectQueue(target->GetGUID()); - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(target->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(target->GetMap(), target->GetZoneId())) bf->RemovePlayerFromResurrectQueue(target->GetGUID()); } break; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 1268330ceec..a5a974601d3 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6528,7 +6528,7 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32 // allow always ghost flight spells if (m_originalCaster && m_originalCaster->GetTypeId() == TYPEID_PLAYER && m_originalCaster->IsAlive()) { - Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(m_originalCaster->GetZoneId()); + Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(m_originalCaster->GetMap(), m_originalCaster->GetZoneId()); if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(m_originalCaster->GetAreaId())) if (area->Flags[0] & AREA_FLAG_NO_FLY_ZONE || (Bf && !Bf->CanFlyIn())) return SPELL_FAILED_NOT_HERE; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 87603c9a888..5eb160086c2 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -750,7 +750,7 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 if (!player) return false; - Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()); + Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetMap(), player->GetZoneId()); if (!Bf || Bf->CanFlyIn() || (!player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !player->HasAuraType(SPELL_AURA_FLY))) return false; break; @@ -761,7 +761,7 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 if (!player) return false; - Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetMap(), player->GetZoneId()); if (!bf || bf->GetTypeId() != BATTLEFIELD_WG) return false; @@ -781,7 +781,7 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 if (!player) return false; - if (Battlefield* battlefieldWG = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) + if (Battlefield* battlefieldWG = sBattlefieldMgr->GetBattlefieldByBattleId(player->GetMap(), BATTLEFIELD_BATTLEID_WG)) return battlefieldWG->IsEnabled() && (player->GetTeamId() == battlefieldWG->GetDefenderTeam()) && !battlefieldWG->IsWarTime(); break; } @@ -790,7 +790,7 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 if (!player) return false; - if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId())) + if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetMap(), player->GetZoneId())) return bf->IsWarTime(); break; } |
