aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2019_07_24_02_world_2017_02_19_01_world.sql50
-rw-r--r--src/server/scripts/World/go_scripts.cpp114
2 files changed, 164 insertions, 0 deletions
diff --git a/sql/updates/world/master/2019_07_24_02_world_2017_02_19_01_world.sql b/sql/updates/world/master/2019_07_24_02_world_2017_02_19_01_world.sql
new file mode 100644
index 00000000000..c3f0ce7ede2
--- /dev/null
+++ b/sql/updates/world/master/2019_07_24_02_world_2017_02_19_01_world.sql
@@ -0,0 +1,50 @@
+UPDATE `gameobject_template` SET `ScriptName`='go_bells' WHERE `entry` IN (175885, 176573, 182064);
+
+DELETE FROM `game_event` WHERE `eventEntry`=73;
+INSERT INTO `game_event` (`eventEntry`, `start_time`, `end_time`, `occurence`, `length`, `holiday`, `description`, `world_event`, `announce`) VALUES
+(73, '2010-01-01 01:00:00', '2025-01-01 01:00:00', 60, 1, 0, 'Hourly Bells', 0, 2);
+
+DELETE FROM `game_event_gameobject` WHERE `eventEntry`=73;
+INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
+-- (73, 45022), -- Horde Bell
+-- (73, 20802),
+-- (73, 18103),
+-- (73, 18102),
+-- (73, 18101),
+-- (73, 18100),
+-- (73, 18099),
+-- (73, 18098),
+-- (73, 18097),
+-- (73, 15508),
+-- (73, 12439),
+-- (73, 12438),
+-- (73, 12437),
+(73, 18683),
+-- (73, 12436),
+-- (73, 12435),
+-- (73, 42666), -- Alliance Bell
+-- (73, 42905),
+-- (73, 42906),
+-- (73, 42924),
+-- (73, 48107),
+-- (73, 49811),
+-- (73, 94),
+-- (73, 619),
+-- (73, 870),
+-- (73, 1140),
+-- (73, 4841),
+-- (73, 6867),
+-- (73, 20801),
+-- (73, 9114),
+-- (73, 9104),
+-- (73, 14562),
+(73, 18894),
+-- (73, 18901),
+-- (73, 18906),
+-- (73, 26283),
+-- (73, 26414),
+-- (73, 26426),
+-- (73, 26435),
+-- (73, 26469),
+-- (73, 26743),
+(73, 24539); -- Karazhan Bell
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index e03e23aeb90..bb578384ce8 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -42,6 +42,7 @@ go_amberpine_outhouse
go_hive_pod
go_veil_skith_cage
go_toy_train_set
+go_bells
EndContentData */
#include "ScriptMgr.h"
@@ -56,6 +57,7 @@ EndContentData */
#include "ScriptedGossip.h"
#include "TemporarySummon.h"
#include "WorldSession.h"
+#include "World.h"
#include "GameEventMgr.h"
/*######
@@ -1496,6 +1498,117 @@ public:
}
};
+/*####
+## go_bells
+####*/
+
+enum BellHourlySoundFX
+{
+ BELLTOLLHORDE = 6595, // Horde
+ BELLTOLLTRIBAL = 6675,
+ BELLTOLLALLIANCE = 6594, // Alliance
+ BELLTOLLNIGHTELF = 6674,
+ BELLTOLLDWARFGNOME = 7234,
+ BELLTOLLKHARAZHAN = 9154 // Kharazhan
+};
+
+enum BellHourlySoundAreas
+{
+ UNDERCITY_AREA = 1497,
+ IRONFORGE_1_AREA = 809,
+ IRONFORGE_2_AREA = 1,
+ DARNASSUS_AREA = 1657,
+ TELDRASSIL_ZONE = 141,
+ KHARAZHAN_MAPID = 532
+};
+
+enum BellHourlyObjects
+{
+ GO_HORDE_BELL = 175885,
+ GO_ALLIANCE_BELL = 176573,
+ GO_KHARAZHAN_BELL = 182064
+};
+
+enum BellHourlyMisc
+{
+ GAME_EVENT_HOURLY_BELLS = 73,
+ EVENT_RING_BELL = 1
+};
+
+class go_bells : public GameObjectScript
+{
+public:
+ go_bells() : GameObjectScript("go_bells") { }
+
+ struct go_bellsAI : public GameObjectAI
+ {
+ go_bellsAI(GameObject* go) : GameObjectAI(go) { }
+
+ void InitializeAI() override
+ {
+ switch (go->GetEntry())
+ {
+ case GO_HORDE_BELL:
+ _soundId = go->GetAreaId() == UNDERCITY_AREA ? BELLTOLLHORDE : BELLTOLLTRIBAL;
+ break;
+ case GO_ALLIANCE_BELL:
+ {
+ if (go->GetAreaId() == IRONFORGE_1_AREA || go->GetAreaId() == IRONFORGE_2_AREA)
+ _soundId = BELLTOLLDWARFGNOME;
+ else if (go->GetAreaId() == DARNASSUS_AREA || go->GetZoneId() == TELDRASSIL_ZONE)
+ _soundId = BELLTOLLNIGHTELF;
+ else
+ _soundId = BELLTOLLALLIANCE;
+
+ break;
+ }
+ case GO_KHARAZHAN_BELL:
+ _soundId = BELLTOLLKHARAZHAN;
+ break;
+ }
+ }
+
+ void OnGameEvent(bool start, uint16 eventId) override
+ {
+ if (eventId == GAME_EVENT_HOURLY_BELLS && start)
+ {
+ time_t time = sWorld->GetGameTime();
+ tm localTm;
+ localtime_r(&time, &localTm);
+ uint8 _rings = (localTm.tm_hour - 1) % 12 + 1;
+
+ for (auto i = 0; i < _rings; ++i)
+ _events.ScheduleEvent(EVENT_RING_BELL, Seconds(i * 4 + 1));
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_RING_BELL:
+ go->PlayDirectSound(_soundId);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ private:
+ EventMap _events;
+ uint32 _soundId;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_bellsAI(go);
+ }
+};
+
void AddSC_go_scripts()
{
new go_cat_figurine();
@@ -1537,4 +1650,5 @@ void AddSC_go_scripts()
new go_midsummer_music();
new go_darkmoon_faire_music();
new go_pirate_day_music();
+ new go_bells();
}