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)
|
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;
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user