diff options
-rw-r--r-- | sql/updates/world/3.3.5/2017_02_19_01_world.sql | 50 | ||||
-rw-r--r-- | src/server/scripts/World/go_scripts.cpp | 113 |
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(); } |