From 06bb95cb6d1dd36063c61044d3cc0003ffafe4ef Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 8 Dec 2025 10:21:57 -0500 Subject: [PATCH] Core/GameEvents: Added holiday/event world state field Port From (https://github.com/TrinityCore/TrinityCore/commit/c575b397c591e7051c325046204da61086a0dbb9) --- Source/Game/Events/GameEventManager.cs | 44 +++++++++++++++----------- Source/Game/World/WorldManager.cs | 7 ++-- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Source/Game/Events/GameEventManager.cs b/Source/Game/Events/GameEventManager.cs index ab0b376f5..0000ec299 100644 --- a/Source/Game/Events/GameEventManager.cs +++ b/Source/Game/Events/GameEventManager.cs @@ -4,6 +4,7 @@ using Framework.Collections; using Framework.Constants; using Framework.Database; +using Game.BattleGrounds; using Game.DataStorage; using Game.Entities; using Game.Maps; @@ -193,8 +194,8 @@ namespace Game { { uint oldMSTime = Time.GetMSTime(); - // 0 1 2 3 4 5 6 7 8 9 - SQLResult result = DB.World.Query("SELECT eventEntry, UNIX_TIMESTAMP(start_time), UNIX_TIMESTAMP(end_time), occurence, length, holiday, holidayStage, description, world_event, announce FROM game_event"); + // 0 1 2 3 4 5 6 7 8 9 10 + SQLResult result = DB.World.Query("SELECT eventEntry, UNIX_TIMESTAMP(start_time), UNIX_TIMESTAMP(end_time), occurence, length, holiday, holidayStage, WorldStateId, description, world_event, announce FROM game_event"); if (result.IsEmpty()) { mGameEvent.Clear(); @@ -222,9 +223,10 @@ namespace Game pGameEvent.holiday_id = (HolidayIds)result.Read(5); pGameEvent.holidayStage = result.Read(6); - pGameEvent.description = result.Read(7); - pGameEvent.state = (GameEventState)result.Read(8); - pGameEvent.announce = result.Read(9); + pGameEvent.WorldStateId = result.Read(7); + pGameEvent.description = result.Read(8); + pGameEvent.state = (GameEventState)result.Read(9); + pGameEvent.announce = result.Read(10); pGameEvent.nextstart = 0; ++count; @@ -250,9 +252,23 @@ namespace Game continue; } + var bl = CliDB.BattlemasterListStorage.LookupByKey(Global.BattlegroundMgr.WeekendHolidayIdToBGType(pGameEvent.holiday_id)); + if (bl != null && bl.HolidayWorldState != 0) + { + if (pGameEvent.WorldStateId.HasValue && pGameEvent.WorldStateId != bl.HolidayWorldState) + Log.outError(LogFilter.Sql, $"`game_event` game event id ({event_id}) has world state id set, but holiday {pGameEvent.holiday_id} is linked to battleground, set to battlemaster world state id {bl.HolidayWorldState}"); + pGameEvent.WorldStateId = bl.HolidayWorldState; + } + SetHolidayEventTime(pGameEvent); } + if (pGameEvent.WorldStateId.HasValue && Global.WorldStateMgr.GetWorldStateTemplate(pGameEvent.WorldStateId.Value) == null) + { + Log.outError(LogFilter.Sql, $"`game_event` game event id ({event_id}) has an invalid world state Id {pGameEvent.WorldStateId}, set to 0."); + pGameEvent.WorldStateId = null; + } + mGameEvent[event_id] = pGameEvent; } while (result.NextRow()); @@ -1031,7 +1047,7 @@ namespace Game Log.outInfo(LogFilter.Gameevent, "GameEvent {0} \"{1}\" started.", event_id, mGameEvent[event_id].description); - // spawn positive event tagget objects + // spawn positive event tagged objects GameEventSpawn((short)event_id); // un-spawn negative event tagged objects short event_nid = (short)(-1 * event_id); @@ -1411,18 +1427,9 @@ namespace Game void UpdateWorldStates(ushort event_id, bool Activate) { - GameEventData Event = mGameEvent[event_id]; - if (Event.holiday_id != HolidayIds.None) - { - BattlegroundTypeId bgTypeId = Global.BattlegroundMgr.WeekendHolidayIdToBGType(Event.holiday_id); - if (bgTypeId != BattlegroundTypeId.None) - { - var bl = CliDB.BattlemasterListStorage.LookupByKey(Global.BattlegroundMgr.WeekendHolidayIdToBGType(Event.holiday_id)); - if (bl != null) - if (bl.HolidayWorldState != 0) - Global.WorldStateMgr.SetValue(bl.HolidayWorldState, Activate ? 1 : 0, false, null); - } - } + var worldStateId = mGameEvent[event_id].WorldStateId; + if (worldStateId.HasValue) + Global.WorldStateMgr.SetValue(worldStateId.Value, Activate ? 1 : 0, false, null); } public void HandleQuestComplete(uint quest_id) @@ -1691,6 +1698,7 @@ namespace Game public uint length; // length of the event (Time.Minutes) after finishing all conditions public HolidayIds holiday_id; public byte holidayStage; + public int? WorldStateId; public GameEventState state; // state of the game event, these are saved into the game_event table on change! public Dictionary conditions = new(); // conditions to finish public List prerequisite_events = new(); // events that must be completed before starting this event diff --git a/Source/Game/World/WorldManager.cs b/Source/Game/World/WorldManager.cs index cd474df2e..774615bc4 100644 --- a/Source/Game/World/WorldManager.cs +++ b/Source/Game/World/WorldManager.cs @@ -702,6 +702,9 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loading Quest Pooling Data..."); Global.QuestPoolMgr.LoadFromDB(); // must be after quest templates + Log.outInfo(LogFilter.ServerLoading, "Loading World State templates..."); + Global.WorldStateMgr.LoadFromDB(); // must be loaded before battleground, outdoor PvP, game events and conditions + Log.outInfo(LogFilter.ServerLoading, "Loading Game Event Data..."); // must be after loading pools fully Global.GameEventMgr.LoadFromDB(); @@ -890,7 +893,6 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loading Guilds..."); Global.GuildMgr.LoadGuilds(); - Log.outInfo(LogFilter.ServerLoading, "Loading ArenaTeams..."); Global.ArenaTeamMgr.LoadArenaTeams(); @@ -936,9 +938,6 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loading Creature Formations..."); FormationMgr.LoadCreatureFormations(); - Log.outInfo(LogFilter.ServerLoading, "Loading World State templates..."); - Global.WorldStateMgr.LoadFromDB(); // must be loaded before battleground, outdoor PvP and conditions - Log.outInfo(LogFilter.ServerLoading, "Loading Persistend World Variables..."); // must be loaded before Battleground, outdoor PvP and conditions LoadPersistentWorldVariables();