Core/Scenarios: Allow scripts to set instance scenario by id
Port From (https://github.com/TrinityCore/TrinityCore/commit/c7f5696479bb85c8fc7ee0d9fdaeb92e2b32213f)
This commit is contained in:
+14
-2
@@ -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)
|
||||
{
|
||||
if (i_instanceLock != null)
|
||||
@@ -5302,8 +5316,6 @@ namespace Game.Maps
|
||||
|
||||
public InstanceScenario GetInstanceScenario() { return i_scenario; }
|
||||
|
||||
public void SetInstanceScenario(InstanceScenario scenario) { i_scenario = scenario; }
|
||||
|
||||
public InstanceLock GetInstanceLock() { return i_instanceLock; }
|
||||
|
||||
InstanceScript i_data;
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Game.Entities
|
||||
map.TrySetOwningGroup(group);
|
||||
|
||||
map.CreateInstanceData();
|
||||
map.SetInstanceScenario(Global.ScenarioMgr.CreateInstanceScenario(map, team));
|
||||
map.SetInstanceScenario(Global.ScenarioMgr.CreateInstanceScenarioForTeam(map, team));
|
||||
map.InitSpawnGroupState();
|
||||
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.InstancemapLoadGrids))
|
||||
|
||||
@@ -14,16 +14,9 @@ namespace Game.Scenarios
|
||||
{
|
||||
public class InstanceScenario : Scenario
|
||||
{
|
||||
public InstanceScenario(InstanceMap map, ScenarioData scenarioData) : base(map, scenarioData)
|
||||
{
|
||||
LoadInstanceData();
|
||||
public InstanceScenario(InstanceMap map, ScenarioData scenarioData) : base(map, scenarioData) { }
|
||||
|
||||
var players = map.GetPlayers();
|
||||
foreach (var player in players)
|
||||
SendScenarioState(player);
|
||||
}
|
||||
|
||||
void LoadInstanceData()
|
||||
public void LoadInstanceData()
|
||||
{
|
||||
InstanceScript instanceScript = _map.ToInstanceMap().GetInstanceScript();
|
||||
if (instanceScript == null)
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Game.Scenarios
|
||||
{
|
||||
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()));
|
||||
// No scenario registered for this map and difficulty in the database
|
||||
@@ -34,11 +34,15 @@ namespace Game.Scenarios
|
||||
break;
|
||||
}
|
||||
|
||||
return CreateInstanceScenario(map, scenarioID);
|
||||
}
|
||||
|
||||
InstanceScenario CreateInstanceScenario(InstanceMap map, uint scenarioID)
|
||||
{
|
||||
var scenarioData = _scenarioData.LookupByKey(scenarioID);
|
||||
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.",
|
||||
scenarioID, map.GetId(), map.GetDifficultyID());
|
||||
Log.outError(LogFilter.Scenario, $"No scenario data was found related to scenario(Id: {scenarioID}) for map(Id: {map.GetId()}), difficulty(Id: {map.GetDifficultyID()}).");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user