From 31bce00b2a2dd5ee1ee2606be8445b024e1265b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viste=28=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=29?= Date: Tue, 8 Jan 2019 16:15:38 +0300 Subject: [PATCH] Core/Events: announce event system improvement. (#1228) * DB: update timestamps for #1187 --- .../pending_db_world/rev_1546538959760274673.sql | 11 +++++++++++ src/server/game/Events/GameEventMgr.cpp | 16 ++++++---------- src/server/game/Events/GameEventMgr.h | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1546538959760274673.sql diff --git a/data/sql/updates/pending_db_world/rev_1546538959760274673.sql b/data/sql/updates/pending_db_world/rev_1546538959760274673.sql new file mode 100644 index 000000000..4903888f8 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1546538959760274673.sql @@ -0,0 +1,11 @@ +INSERT INTO version_db_world (`sql_rev`) VALUES ('1546538959760274673'); + +ALTER TABLE `game_event` +ADD COLUMN `announce` tinyint(3) unsigned NOT NULL DEFAULT 2 COMMENT '0 dont announce, 1 announce, 2 value from config' AFTER `world_event`; + +ALTER TABLE `game_event` + CHANGE `start_time` `start_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'Absolute start date, the event will never start before', + CHANGE `end_time` `end_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'Absolute end date, the event will never start after'; + +UPDATE `game_event` SET `start_time`=NULL WHERE `start_time`='0000-00-00 00:00:00'; +UPDATE `game_event` SET `end_time`=NULL WHERE `end_time`='0000-00-00 00:00:00'; diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index d9eba8a70..050f89005 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -209,8 +209,8 @@ void GameEventMgr::LoadFromDB() { { uint32 oldMSTime = getMSTime(); - // 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 FROM game_event"); + // 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, description, world_event, announce FROM game_event"); if (!result) { mGameEvent.clear(); @@ -243,6 +243,7 @@ void GameEventMgr::LoadFromDB() pGameEvent.holidayStage = fields[6].GetUInt8(); pGameEvent.description = fields[7].GetString(); pGameEvent.state = (GameEventState)(fields[8].GetUInt8()); + pGameEvent.announce = fields[9].GetUInt8(); pGameEvent.nextstart = 0; ++count; @@ -1189,14 +1190,9 @@ void GameEventMgr::UnApplyEvent(uint16 event_id) void GameEventMgr::ApplyNewEvent(uint16 event_id) { - switch (sWorld->getIntConfig(CONFIG_EVENT_ANNOUNCE)) - { - case 0: // disable - break; - case 1: // announce events - sWorld->SendWorldText(LANG_EVENTMESSAGE, mGameEvent[event_id].description.c_str()); - break; - } + uint8 announce = mGameEvent[event_id].announce; + if (announce == 1 || (announce == 2 && sWorld->getIntConfig(CONFIG_EVENT_ANNOUNCE))) + sWorld->SendWorldText(LANG_EVENTMESSAGE, mGameEvent[event_id].description.c_str()); #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outDetail("GameEvent %u \"%s\" started.", event_id, mGameEvent[event_id].description.c_str()); diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index e4ec2f748..77d70f0de 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -55,6 +55,7 @@ struct GameEventData GameEventConditionMap conditions; // conditions to finish std::set prerequisite_events; // events that must be completed before starting this event std::string description; + uint8 announce; // if 0 dont announce, if 1 announce, if 2 take config value bool isValid() const { return length > 0 || state > GAMEEVENT_NORMAL; } };