From 75a306e422cfb83c688b90ea428522251a70e68b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 28 Nov 2023 16:24:38 +0100 Subject: Core/Instances: Prevent sending PendingRaidLock in instances that don't have a InstanceScript Closes #29470 --- src/server/game/Maps/Map.cpp | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'src/server/game/Maps/Map.cpp') diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 95b1f3a204d..4610cecd4b2 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2862,7 +2862,7 @@ bool InstanceMap::AddPlayerToMap(Player* player, bool initPlayer /*= true*/) player->AddInstanceEnterTime(GetInstanceId(), GameTime::GetGameTime()); MapDb2Entries entries{ GetEntry(), GetMapDifficulty() }; - if (entries.MapDifficulty->HasResetSchedule() && i_instanceLock && !i_instanceLock->IsNew()) + if (entries.MapDifficulty->HasResetSchedule() && i_instanceLock && !i_instanceLock->IsNew() && i_data) { if (!entries.MapDifficulty->IsUsingEncounterLocks()) { @@ -2995,7 +2995,7 @@ InstanceResetResult InstanceMap::Reset(InstanceResetMethod method) { case InstanceResetMethod::Manual: // notify the players to leave the instance so it can be reset - for (MapReference& ref : m_mapRefManager) + for (MapReference const& ref : m_mapRefManager) ref.GetSource()->SendResetFailedNotify(GetId()); break; case InstanceResetMethod::OnChangeDifficulty: @@ -3009,20 +3009,25 @@ InstanceResetResult InstanceMap::Reset(InstanceResetMethod method) raidInstanceMessage.DifficultyID = GetDifficultyID(); raidInstanceMessage.Write(); - WorldPackets::Instance::PendingRaidLock pendingRaidLock; - pendingRaidLock.TimeUntilLock = 60000; - pendingRaidLock.CompletedMask = i_instanceLock->GetData()->CompletedEncountersMask; - pendingRaidLock.Extending = true; - pendingRaidLock.WarningOnly = GetEntry()->IsFlexLocking(); - pendingRaidLock.Write(); - - for (MapReference& ref : m_mapRefManager) - { + for (MapReference const& ref : m_mapRefManager) ref.GetSource()->SendDirectMessage(raidInstanceMessage.GetRawPacket()); - ref.GetSource()->SendDirectMessage(pendingRaidLock.GetRawPacket()); - if (!pendingRaidLock.WarningOnly) - ref.GetSource()->SetPendingBind(GetInstanceId(), 60000); + if (i_data) + { + WorldPackets::Instance::PendingRaidLock pendingRaidLock; + pendingRaidLock.TimeUntilLock = 60000; + pendingRaidLock.CompletedMask = i_instanceLock->GetData()->CompletedEncountersMask; + pendingRaidLock.Extending = true; + pendingRaidLock.WarningOnly = GetEntry()->IsFlexLocking(); + pendingRaidLock.Write(); + + for (MapReference const& ref : m_mapRefManager) + { + ref.GetSource()->SendDirectMessage(pendingRaidLock.GetRawPacket()); + + if (!pendingRaidLock.WarningOnly) + ref.GetSource()->SetPendingBind(GetInstanceId(), 60000); + } } break; } -- cgit v1.2.3