aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/3.3.5/2017_02_19_01_world.sql50
-rw-r--r--src/server/scripts/World/go_scripts.cpp113
2 files changed, 163 insertions, 0 deletions
diff --git a/sql/updates/world/3.3.5/2017_02_19_01_world.sql b/sql/updates/world/3.3.5/2017_02_19_01_world.sql
new file mode 100644
index 00000000000..4a79543cd28
--- /dev/null
+++ b/sql/updates/world/3.3.5/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 810e0dd5500..358a3d2c2f3 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"
@@ -1569,6 +1570,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();
@@ -1610,4 +1722,5 @@ void AddSC_go_scripts()
new go_midsummer_music();
new go_darkmoon_faire_music();
new go_pirate_day_music();
+ new go_bells();
}