Core/Instances: Reimplement resetting instances from UI

Port From (https://github.com/TrinityCore/TrinityCore/commit/ddd0c7b152d65b980db0cc2d00f15ae62a602936)
This commit is contained in:
hondacrx
2022-10-04 14:31:07 -04:00
parent 67d6fa48eb
commit 807caef08c
7 changed files with 147 additions and 140 deletions
+8
View File
@@ -2892,6 +2892,11 @@ namespace Game.Entities
// flight will started later
}
}
else if (mapEntry.IsDungeon() && instanceId != 0)
{
// try finding instance by id first
map = Global.MapMgr.FindMap(mapId, instanceId);
}
// Map could be changed before
mapEntry = CliDB.MapStorage.LookupByKey(mapId);
@@ -2940,6 +2945,9 @@ namespace Game.Entities
case EnterState.CannotEnterZoneInCombat:
SendTransferAborted(map.GetId(), TransferAbortReason.ZoneInCombat);
break;
case EnterState.CannotEnterInstanceShuttingDown:
SendTransferAborted(map.GetId(), TransferAbortReason.NotFound);
break;
default:
break;
}
+33 -3
View File
@@ -16,7 +16,6 @@
*/
using Framework.Constants;
using Framework.Database;
using Game.DataStorage;
using Game.Groups;
using Game.Guilds;
@@ -24,7 +23,7 @@ using Game.Maps;
using Game.Networking.Packets;
using System;
using System.Collections.Generic;
using Framework.Dynamic;
using System.Linq;
namespace Game.Entities
{
@@ -498,9 +497,40 @@ namespace Game.Entities
}
// Reset all solo instances and optionally send a message on success for each
public void ResetInstances(InstanceResetMethod method, bool isRaid, bool isLegacy)
public void ResetInstances(InstanceResetMethod method)
{
foreach (var (mapId, instanceId) in m_recentInstances.ToList())
{
Map map = Global.MapMgr.FindMap(mapId, instanceId);
bool forgetInstance = false;
if (map)
{
InstanceMap instance = map.ToInstanceMap();
if (instance != null)
{
switch (instance.Reset(method))
{
case InstanceResetResult.Success:
SendResetInstanceSuccess(map.GetId());
forgetInstance = true;
break;
case InstanceResetResult.NotEmpty:
if (method == InstanceResetMethod.Manual)
SendResetInstanceFailed(ResetFailedReason.Failed, map.GetId());
else if (method == InstanceResetMethod.OnChangeDifficulty)
forgetInstance = true;
break;
case InstanceResetResult.CannotReset:
break;
default:
break;
}
}
}
if (forgetInstance)
m_recentInstances.Remove(mapId);
}
}
public void SendResetInstanceSuccess(uint MapId)