Core/Instances: Prevent sending PendingRaidLock in instances that don't have a InstanceScript

Closes #29470
This commit is contained in:
Shauren
2023-11-28 16:24:38 +01:00
parent 7e76e91152
commit 75a306e422

View File

@@ -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;
}