Core/GameEvents: Added holiday/event world state field (#31284)
Closes #30622
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
ALTER TABLE `game_event` ADD `WorldStateId` INT DEFAULT NULL AFTER `holidayStage`;
|
||||
|
||||
DELETE FROM `world_state` WHERE `ID` IN (521, 522, 523, 524);
|
||||
INSERT INTO `world_state` (`ID`, `DefaultValue`, `MapIDs`, `AreaIDs`, `ScriptName`, `Comment`) VALUES
|
||||
(521, 0, NULL, NULL, '', 'Season - Spring'),
|
||||
(522, 0, NULL, NULL, '', 'Season - Summer'),
|
||||
(523, 0, NULL, NULL, '', 'Season - Fall'),
|
||||
(524, 0, NULL, NULL, '', 'Season - Winter');
|
||||
|
||||
SET @EENTRY := 90;
|
||||
DELETE FROM `game_event` WHERE `eventEntry` BETWEEN @EENTRY+0 AND @EENTRY+3;
|
||||
INSERT INTO `game_event` (`eventEntry`,`start_time`,`end_time`,`occurence`,`length`,`holiday`,`holidayStage`,`WorldStateId`,`description`,`world_event`,`announce`) VALUES
|
||||
(@EENTRY+0, '2025-03-19 23:59:59', '2035-06-21 00:00:00', 525600, 133920, 0, 0, 521, 'Season - Spring', 0, 2),
|
||||
(@EENTRY+1, '2025-06-20 23:59:59', '2035-09-22 00:00:00', 525600, 133920, 0, 0, 522, 'Season - Summer', 0, 2),
|
||||
(@EENTRY+2, '2025-09-21 23:59:59', '2035-12-21 00:00:00', 525600, 131040, 0, 0, 523, 'Season - Fall', 0, 2),
|
||||
(@EENTRY+3, '2025-12-20 23:59:59', '2036-03-20 00:00:00', 525600, 128160, 0, 0, 524, 'Season - Winter', 0, 2);
|
||||
@@ -217,8 +217,8 @@ void GameEventMgr::LoadFromDB()
|
||||
{
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
QueryResult result = WorldDatabase.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
|
||||
QueryResult result = WorldDatabase.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)
|
||||
{
|
||||
mGameEvent.clear();
|
||||
@@ -247,9 +247,10 @@ void GameEventMgr::LoadFromDB()
|
||||
pGameEvent.length = fields[4].GetUInt64();
|
||||
pGameEvent.holiday_id = HolidayIds(fields[5].GetUInt32());
|
||||
pGameEvent.holidayStage = fields[6].GetUInt8();
|
||||
pGameEvent.description = fields[7].GetString();
|
||||
pGameEvent.state = (GameEventState)(fields[8].GetUInt8());
|
||||
pGameEvent.announce = fields[9].GetUInt8();
|
||||
pGameEvent.WorldStateId = fields[7].GetInt32OrNull();
|
||||
pGameEvent.description = fields[8].GetString();
|
||||
pGameEvent.state = (GameEventState)(fields[9].GetUInt8());
|
||||
pGameEvent.announce = fields[10].GetUInt8();
|
||||
pGameEvent.nextstart = 0;
|
||||
|
||||
++count;
|
||||
@@ -275,9 +276,25 @@ void GameEventMgr::LoadFromDB()
|
||||
continue;
|
||||
}
|
||||
|
||||
if (BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(BattlegroundMgr::WeekendHolidayIdToBGType(pGameEvent.holiday_id)))
|
||||
{
|
||||
if (bl->HolidayWorldState)
|
||||
{
|
||||
if (pGameEvent.WorldStateId && *pGameEvent.WorldStateId != bl->HolidayWorldState)
|
||||
TC_LOG_ERROR("sql.sql", "`game_event` game event id ({}) has world state id set, but holiday {} is linked to battleground, set to battlemaster world state id {}", event_id, pGameEvent.holiday_id, bl->HolidayWorldState);
|
||||
pGameEvent.WorldStateId = bl->HolidayWorldState;
|
||||
}
|
||||
}
|
||||
|
||||
SetHolidayEventTime(pGameEvent);
|
||||
}
|
||||
|
||||
if (pGameEvent.WorldStateId && !sWorldStateMgr->GetWorldStateTemplate(*pGameEvent.WorldStateId))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "`game_event` game event id ({}) has an invalid world state Id {}, set to 0.", event_id, *pGameEvent.WorldStateId);
|
||||
pGameEvent.WorldStateId.reset();
|
||||
}
|
||||
|
||||
}
|
||||
while (result->NextRow());
|
||||
|
||||
@@ -1091,7 +1108,7 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id)
|
||||
|
||||
TC_LOG_INFO("gameevent", "GameEvent {} \"{}\" started.", event_id, mGameEvent[event_id].description);
|
||||
|
||||
// spawn positive event tagget objects
|
||||
// spawn positive event tagged objects
|
||||
GameEventSpawn(event_id);
|
||||
// un-spawn negative event tagged objects
|
||||
int16 event_nid = (-1) * event_id;
|
||||
@@ -1501,11 +1518,8 @@ void GameEventMgr::UpdateEventQuests(uint16 event_id, bool activate)
|
||||
|
||||
void GameEventMgr::UpdateWorldStates(uint16 event_id, bool Activate)
|
||||
{
|
||||
GameEventData const& event = mGameEvent[event_id];
|
||||
if (event.holiday_id != HOLIDAY_NONE)
|
||||
if (BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(BattlegroundMgr::WeekendHolidayIdToBGType(event.holiday_id)))
|
||||
if (bl->HolidayWorldState)
|
||||
sWorldStateMgr->SetValue(bl->HolidayWorldState, Activate ? 1 : 0, false, nullptr);
|
||||
if (Optional<int32> worldStateId = mGameEvent[event_id].WorldStateId)
|
||||
sWorldStateMgr->SetValue(*worldStateId, Activate ? 1 : 0, false, nullptr);
|
||||
}
|
||||
|
||||
GameEventMgr::GameEventMgr() : isSystemInit(false)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "SharedDefines.h"
|
||||
#include "Define.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "Optional.h"
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <set>
|
||||
@@ -68,6 +69,7 @@ struct GameEventData
|
||||
uint32 length; // length of the event (minutes) after finishing all conditions
|
||||
HolidayIds holiday_id;
|
||||
uint8 holidayStage;
|
||||
Optional<int32> WorldStateId;
|
||||
GameEventState state; // state of the game event, these are saved into the game_event table on change!
|
||||
GameEventConditionMap conditions; // conditions to finish
|
||||
std::set<uint16 /*gameevent id*/> prerequisite_events; // events that must be completed before starting this event
|
||||
|
||||
@@ -1610,6 +1610,9 @@ bool World::SetInitialWorldSettings()
|
||||
TC_LOG_INFO("server.loading", "Loading Quest Pooling Data...");
|
||||
sQuestPoolMgr->LoadFromDB(); // must be after quest templates
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading World State templates...");
|
||||
sWorldStateMgr->LoadFromDB(); // must be loaded before battleground, outdoor PvP, game events and conditions
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading Game Event Data..."); // must be after loading pools fully
|
||||
sGameEventMgr->LoadFromDB();
|
||||
|
||||
@@ -1842,9 +1845,6 @@ bool World::SetInitialWorldSettings()
|
||||
TC_LOG_INFO("server.loading", "Loading Creature Formations...");
|
||||
sFormationMgr->LoadCreatureFormations();
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading World State templates...");
|
||||
sWorldStateMgr->LoadFromDB(); // must be loaded before battleground, outdoor PvP and conditions
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading Persistend World Variables...");
|
||||
LoadPersistentWorldVariables();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user