aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKittnz <Kittnz@users.noreply.github.com>2017-02-19 20:47:40 +0100
committerShauren <shauren.trinity@gmail.com>2019-08-17 20:04:14 +0200
commit1c926d0171cfd2ddb60cea6ef2903314848da7aa (patch)
tree80de6746ccc77ea6df66f3eb76908d26063c4729 /src
parent973c97777d8b7bba6e5832a6551f07ca4c2e65c6 (diff)
Script/GO: Alliance Bell, Horde Bell and Karazhan Bell will now send a bell sound on the start of each hour. (#19145)
* Script/GO: Alliance Bell, Horde Bell and Karazhan Bell will now send a bell sound on the start of each hour. How many times it rings depence on the hour. * fix little things from pr comments * Added OnGameEvent * Fix braces * almost finished * fix enum * Add gameobjects to the game event Fix override for InitializeAI * enum squash * remove braces * Rename 9999_99_99_99_world.sql to 2017_02_19_01_world.sql (cherrypicked from 495339a2c7741d0ad56dfbb8756ad6e1e7d19b8b)
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();
}