Core/Scenarios: Allow scripts to set instance scenario by id

Port From (https://github.com/TrinityCore/TrinityCore/commit/c7f5696479bb85c8fc7ee0d9fdaeb92e2b32213f)
This commit is contained in:
Hondacrx
2025-08-19 21:35:28 -04:00
parent 4103c07b3c
commit 0a77e07705
4 changed files with 24 additions and 15 deletions
+14 -2
View File
@@ -5197,6 +5197,20 @@ namespace Game.Maps
} }
} }
public void SetInstanceScenario(InstanceScenario scenario)
{
i_scenario.Reset(); // sends exit packets to all players
if (scenario != null)
{
i_scenario = scenario;
scenario.LoadInstanceData();
DoOnPlayers(scenario.OnPlayerEnter);
}
}
public void UpdateInstanceLock(UpdateAdditionalSaveDataEvent updateSaveDataEvent) public void UpdateInstanceLock(UpdateAdditionalSaveDataEvent updateSaveDataEvent)
{ {
if (i_instanceLock != null) if (i_instanceLock != null)
@@ -5302,8 +5316,6 @@ namespace Game.Maps
public InstanceScenario GetInstanceScenario() { return i_scenario; } public InstanceScenario GetInstanceScenario() { return i_scenario; }
public void SetInstanceScenario(InstanceScenario scenario) { i_scenario = scenario; }
public InstanceLock GetInstanceLock() { return i_instanceLock; } public InstanceLock GetInstanceLock() { return i_instanceLock; }
InstanceScript i_data; InstanceScript i_data;
+1 -1
View File
@@ -82,7 +82,7 @@ namespace Game.Entities
map.TrySetOwningGroup(group); map.TrySetOwningGroup(group);
map.CreateInstanceData(); map.CreateInstanceData();
map.SetInstanceScenario(Global.ScenarioMgr.CreateInstanceScenario(map, team)); map.SetInstanceScenario(Global.ScenarioMgr.CreateInstanceScenarioForTeam(map, team));
map.InitSpawnGroupState(); map.InitSpawnGroupState();
if (WorldConfig.GetBoolValue(WorldCfg.InstancemapLoadGrids)) if (WorldConfig.GetBoolValue(WorldCfg.InstancemapLoadGrids))
+2 -9
View File
@@ -14,16 +14,9 @@ namespace Game.Scenarios
{ {
public class InstanceScenario : Scenario public class InstanceScenario : Scenario
{ {
public InstanceScenario(InstanceMap map, ScenarioData scenarioData) : base(map, scenarioData) public InstanceScenario(InstanceMap map, ScenarioData scenarioData) : base(map, scenarioData) { }
{
LoadInstanceData();
var players = map.GetPlayers(); public void LoadInstanceData()
foreach (var player in players)
SendScenarioState(player);
}
void LoadInstanceData()
{ {
InstanceScript instanceScript = _map.ToInstanceMap().GetInstanceScript(); InstanceScript instanceScript = _map.ToInstanceMap().GetInstanceScript();
if (instanceScript == null) if (instanceScript == null)
+7 -3
View File
@@ -14,7 +14,7 @@ namespace Game.Scenarios
{ {
ScenarioManager() { } ScenarioManager() { }
public InstanceScenario CreateInstanceScenario(InstanceMap map, int team) public InstanceScenario CreateInstanceScenarioForTeam(InstanceMap map, int team)
{ {
var dbData = _scenarioDBData.LookupByKey(Tuple.Create(map.GetId(), (byte)map.GetDifficultyID())); var dbData = _scenarioDBData.LookupByKey(Tuple.Create(map.GetId(), (byte)map.GetDifficultyID()));
// No scenario registered for this map and difficulty in the database // No scenario registered for this map and difficulty in the database
@@ -34,11 +34,15 @@ namespace Game.Scenarios
break; break;
} }
return CreateInstanceScenario(map, scenarioID);
}
InstanceScenario CreateInstanceScenario(InstanceMap map, uint scenarioID)
{
var scenarioData = _scenarioData.LookupByKey(scenarioID); var scenarioData = _scenarioData.LookupByKey(scenarioID);
if (scenarioData == null) if (scenarioData == null)
{ {
Log.outError(LogFilter.Scenario, "Table `scenarios` contained data linking scenario (Id: {0}) to map (Id: {1}), difficulty (Id: {2}) but no scenario data was found related to that scenario Id.", Log.outError(LogFilter.Scenario, $"No scenario data was found related to scenario(Id: {scenarioID}) for map(Id: {map.GetId()}), difficulty(Id: {map.GetDifficultyID()}).");
scenarioID, map.GetId(), map.GetDifficultyID());
return null; return null;
} }