Core/World: implement database support for default map and realm wide world states

Port From (https://github.com/TrinityCore/TrinityCore/commit/737d94d7efe0b6c308ac1bf3692b6aa2e43f5adb)
This commit is contained in:
hondacrx
2022-06-25 22:52:20 -04:00
parent ed7a07d893
commit 7be2eb52cc
9 changed files with 217 additions and 0 deletions
+13
View File
@@ -843,4 +843,17 @@ namespace Game.Scripting
// Called when a quest objective data change
public virtual void OnQuestObjectiveChange(Player player, Quest quest, QuestObjective objective, int oldAmount, int newAmount) { }
}
public class WorldStateScript : ScriptObject
{
public WorldStateScript(string name) : base(name)
{
Global.ScriptMgr.AddScript(this);
}
public override bool IsDatabaseBound() { return true; }
// Called when worldstate changes value, map is optional
public virtual void OnValueChange(int worldStateId, int oldValue, int newValue, Map map) { }
}
}
+8
View File
@@ -1198,6 +1198,14 @@ namespace Game.Scripting
RunScript<QuestScript>(script => script.OnQuestObjectiveChange(player, quest, objective, oldAmount, newAmount), quest.ScriptId);
}
// WorldState
public void OnWorldStateValueChange(WorldStateTemplate worldStateTemplate, int oldValue, int newValue, Map map)
{
Cypher.Assert(worldStateTemplate != null);
RunScript<WorldStateScript>(script => script.OnValueChange(worldStateTemplate.Id, oldValue, newValue, map), worldStateTemplate.ScriptId);
}
public void ForEach<T>(Action<T> a) where T : ScriptObject
{
var reg = GetScriptRegistry<T>();