aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/World/go_scripts.cpp114
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();
}