diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/World/go_scripts.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
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(); } |