TrinityCore
Loading...
Searching...
No Matches
go_scripts.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/* ContentData
19go_ethereum_prison
20go_ethereum_stasis
21go_southfury_moonstone
22go_resonite_cask
23go_tablet_of_the_seven
24go_tele_to_dalaran_crystal
25go_tele_to_violet_stand
26go_soulwell
27go_amberpine_outhouse
28go_veil_skith_cage
29go_bells
30EndContentData */
31
32#include "ScriptMgr.h"
33#include "DBCStructure.h"
34#include "GameEventMgr.h"
35#include "GameObject.h"
36#include "GameObjectAI.h"
37#include "GameTime.h"
38#include "Log.h"
39#include "MotionMaster.h"
40#include "ObjectMgr.h"
41#include "Player.h"
42#include "ScriptedCreature.h"
43#include "ScriptedGossip.h"
44#include "TemporarySummon.h"
45#include "WorldSession.h"
46
47/*######
48## go_gilded_brazier (Paladin First Trail quest (9678))
49######*/
50
56
58{
59public:
60 go_gilded_brazier() : GameObjectScript("go_gilded_brazier") { }
61
63 {
65
66 bool OnGossipHello(Player* player) override
67 {
69 {
71 {
72 if (Creature* Stillblade = player->SummonCreature(NPC_STILLBLADE, 8106.11f, -7542.06f, 151.775f, 3.02598f, TEMPSUMMON_DEAD_DESPAWN, 1min))
73 Stillblade->AI()->AttackStart(player);
74 }
75 }
76 return true;
77 }
78 };
79
80 GameObjectAI* GetAI(GameObject* go) const override
81 {
82 return new go_gilded_brazierAI(go);
83 }
84};
85
86/*######
87## go_tablet_of_the_seven
88######*/
89
91{
92public:
93 go_tablet_of_the_seven() : GameObjectScript("go_tablet_of_the_seven") { }
94
96 {
98
100 bool OnGossipHello(Player* player) override
101 {
103 return true;
104
105 if (player->GetQuestStatus(4296) == QUEST_STATUS_INCOMPLETE)
106 player->CastSpell(player, 15065, false);
107
108 return true;
109 }
110 };
111
112 GameObjectAI* GetAI(GameObject* go) const override
113 {
114 return new go_tablet_of_the_sevenAI(go);
115 }
116};
117
118/*######
119## go_ethereum_prison
120######*/
121
131
133{
134 22810, 22811, 22812, 22813, 22814, 22815, //good guys
135 20783, 20784, 20785, 20786, 20788, 20789, 20790 //bad guys
136};
137
139{
140public:
141 go_ethereum_prison() : GameObjectScript("go_ethereum_prison") { }
142
144 {
146
147 bool OnGossipHello(Player* player) override
148 {
150 int Random = rand32() % (sizeof(NpcPrisonEntry) / sizeof(uint32));
151
154 {
155 if (!creature->IsHostileTo(player))
156 {
157 if (FactionTemplateEntry const* pFaction = creature->GetFactionTemplateEntry())
158 {
159 uint32 Spell = 0;
160
161 switch (pFaction->Faction)
162 {
163 case 1011: Spell = SPELL_REP_LC; break;
164 case 935: Spell = SPELL_REP_SHAT; break;
165 case 942: Spell = SPELL_REP_CE; break;
166 case 933: Spell = SPELL_REP_CON; break;
167 case 989: Spell = SPELL_REP_KT; break;
168 case 970: Spell = SPELL_REP_SPOR; break;
169 }
170
171 if (Spell)
172 creature->CastSpell(player, Spell, false);
173 else
174 TC_LOG_ERROR("scripts", "go_ethereum_prison summoned Creature (entry {}) but faction ({}) are not expected by script.", creature->GetEntry(), creature->GetFaction());
175 }
176 }
177 }
178
179 return false;
180 }
181 };
182
183 GameObjectAI* GetAI(GameObject* go) const override
184 {
185 return new go_ethereum_prisonAI(go);
186 }
187};
188
189/*######
190## go_ethereum_stasis
191######*/
192
194{
195 22825, 20888, 22827, 22826, 22828
196};
197
199{
200public:
201 go_ethereum_stasis() : GameObjectScript("go_ethereum_stasis") { }
202
204 {
206
207 bool OnGossipHello(Player* player) override
208 {
210 int Random = rand32() % (sizeof(NpcStasisEntry) / sizeof(uint32));
211
214
215 return false;
216 }
217 };
218
219 GameObjectAI* GetAI(GameObject* go) const override
220 {
221 return new go_ethereum_stasisAI(go);
222 }
223};
224
225/*######
226## go_resonite_cask
227######*/
228
230{
231 NPC_GOGGEROC = 11920
233
235{
236public:
237 go_resonite_cask() : GameObjectScript("go_resonite_cask") { }
238
240 {
242
243 bool OnGossipHello(Player* /*player*/) override
244 {
247
248 return false;
249 }
250 };
251
252 GameObjectAI* GetAI(GameObject* go) const override
253 {
254 return new go_resonite_caskAI(go);
255 }
256};
257
258/*######
259## go_southfury_moonstone
260######*/
261
263{
264 NPC_RIZZLE = 23002,
265 SPELL_BLACKJACK = 39865, //stuns player
266 SPELL_SUMMON_RIZZLE = 39866
268
270{
271public:
272 go_southfury_moonstone() : GameObjectScript("go_southfury_moonstone") { }
273
275 {
277
278 bool OnGossipHello(Player* player) override
279 {
280 //implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose
281 //player->CastSpell(player, SPELL_SUMMON_RIZZLE, false);
282
283 if (Creature* creature = player->SummonCreature(NPC_RIZZLE, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN))
284 creature->CastSpell(player, SPELL_BLACKJACK, false);
285
286 return false;
287 }
288 };
289
290 GameObjectAI* GetAI(GameObject* go) const override
291 {
292 return new go_southfury_moonstoneAI(go);
293 }
294};
295
296/*######
297## go_tele_to_dalaran_crystal
298######*/
299
305
306#define GO_TELE_TO_DALARAN_CRYSTAL_FAILED "This teleport crystal cannot be used until the teleport crystal in Dalaran has been used at least once."
307
309{
310public:
311 go_tele_to_dalaran_crystal() : GameObjectScript("go_tele_to_dalaran_crystal") { }
312
314 {
316
317 bool OnGossipHello(Player* player) override
318 {
320 return false;
321
323 return true;
324 }
325 };
326
327 GameObjectAI* GetAI(GameObject* go) const override
328 {
329 return new go_tele_to_dalaran_crystalAI(go);
330 }
331};
332
333/*######
334## go_tele_to_violet_stand
335######*/
336
338{
339public:
340 go_tele_to_violet_stand() : GameObjectScript("go_tele_to_violet_stand") { }
341
343 {
345
346 bool OnGossipHello(Player* player) override
347 {
349 return false;
350
351 return true;
352 }
353 };
354
355 GameObjectAI* GetAI(GameObject* go) const override
356 {
357 return new go_tele_to_violet_standAI(go);
358 }
359};
360
361/*######
362## go_blood_filled_orb
363######*/
364
366{
367 NPC_ZELEMAR = 17830
368
370
372{
373public:
374 go_blood_filled_orb() : GameObjectScript("go_blood_filled_orb") { }
375
377 {
379
380 bool OnGossipHello(Player* player) override
381 {
383 player->SummonCreature(NPC_ZELEMAR, -369.746f, 166.759f, -21.50f, 5.235f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30s);
384
385 return true;
386 }
387 };
388
389 GameObjectAI* GetAI(GameObject* go) const override
390 {
391 return new go_blood_filled_orbAI(go);
392 }
393};
394
395/*######
396## go_amberpine_outhouse
397######*/
398
399#define GOSSIP_USE_OUTHOUSE "Use the outhouse."
400#define GO_ANDERHOLS_SLIDER_CIDER_NOT_FOUND "Quest item Anderhol's Slider Cider not found."
401
413
415{
416public:
417 go_amberpine_outhouse() : GameObjectScript("go_amberpine_outhouse") { }
418
420 {
422
423 bool OnGossipHello(Player* player) override
424 {
426 if (status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED)
427 {
430 }
431 else
433
434 return true;
435 }
436
437 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
438 {
439 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
440 ClearGossipMenuFor(player);
441 if (action == GOSSIP_ACTION_INFO_DEF + 1)
442 {
443 CloseGossipMenuFor(player);
445 if (target)
446 {
447 target->AI()->SetData(1, player->GetNativeGender());
449 }
450 me->CastSpell(player, SPELL_INDISPOSED);
453 return true;
454 }
455 else
456 {
457 CloseGossipMenuFor(player);
459 return false;
460 }
461 }
462 };
463
464 GameObjectAI* GetAI(GameObject* go) const override
465 {
466 return new go_amberpine_outhouseAI(go);
467 }
468};
469
471{
472 public:
473 go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { }
474
476 {
478
479 bool OnGossipHello(Player* /*player*/) override
480 {
482 return true;
483 }
484 };
485
486 GameObjectAI* GetAI(GameObject* go) const override
487 {
488 return new go_massive_seaforium_chargeAI(go);
489 }
490};
491
492/*######
493#### go_veil_skith_cage
494#####*/
495
502
504{
505 public:
506 go_veil_skith_cage() : GameObjectScript("go_veil_skith_cage") { }
507
509 {
511
512 bool OnGossipHello(Player* player) override
513 {
516 {
517 std::vector<Creature*> childrenList;
519 for (Creature* creature : childrenList)
520 {
521 player->KilledMonsterCredit(NPC_CAPTIVE_CHILD, creature->GetGUID());
522 creature->DespawnOrUnsummon(5s);
523 creature->GetMotionMaster()->MovePoint(1, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ());
524 creature->AI()->Talk(SAY_FREE_0);
525 creature->GetMotionMaster()->Clear();
526 }
527 }
528 return false;
529 }
530 };
531
532 GameObjectAI* GetAI(GameObject* go) const override
533 {
534 return new go_veil_skith_cageAI(go);
535 }
536};
537
538/*######
539## go_midsummer_bonfire
540######*/
541
546
548{
549public:
550 go_midsummer_bonfire() : GameObjectScript("go_midsummer_bonfire") { }
551
553 {
555
556 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
557 {
558 player->CastSpell(player, STAMP_OUT_BONFIRE_QUEST_COMPLETE, true);
559 CloseGossipMenuFor(player);
560 return false;
561 }
562 };
563
564 GameObjectAI* GetAI(GameObject* go) const override
565 {
566 return new go_midsummer_bonfireAI(go);
567 }
568};
569
578
585
587{
588public:
589 go_midsummer_ribbon_pole() : GameObjectScript("go_midsummer_ribbon_pole") { }
590
592 {
594
595 bool OnGossipHello(Player* player) override
596 {
597 if (Creature* creature = me->FindNearestCreature(NPC_POLE_RIBBON_BUNNY, 10.0f))
598 {
599 creature->GetAI()->DoAction(ACTION_COSMETIC_FIRES);
600 player->CastSpell(player, RibbonPoleSpells[urand(0, 2)], true);
601 }
602 return true;
603 }
604 };
605
606 GameObjectAI* GetAI(GameObject* go) const override
607 {
608 return new go_midsummer_ribbon_poleAI(go);
609 }
610};
611
612/*####
613## go_brewfest_music
614####*/
615
617{
618 EVENT_BREWFESTDWARF01 = 11810, // 1.35 min
619 EVENT_BREWFESTDWARF02 = 11812, // 1.55 min
620 EVENT_BREWFESTDWARF03 = 11813, // 0.23 min
621 EVENT_BREWFESTGOBLIN01 = 11811, // 1.08 min
622 EVENT_BREWFESTGOBLIN02 = 11814, // 1.33 min
623 EVENT_BREWFESTGOBLIN03 = 11815 // 0.28 min
625
632
634{
635 SILVERMOON = 3430, // Horde
636 UNDERCITY = 1497,
640 IRONFORGE_1 = 809, // Alliance
643 EXODAR = 3557,
644 DARNASSUS = 1657,
645 SHATTRATH = 3703 // General
647
653
655{
656public:
657 go_brewfest_music() : GameObjectScript("go_brewfest_music") { }
658
660 {
663
669
670 void UpdateAI(uint32 diff) override
671 {
672 _events.Update(diff);
673 while (uint32 eventId = _events.ExecuteEvent())
674 {
675 switch (eventId)
676 {
678 if (!IsHolidayActive(HOLIDAY_BREWFEST)) // Check if Brewfest is active
679 break;
680 rnd = urand(0, 2); // Select random music sample
681 _events.ScheduleEvent(EVENT_BM_SELECT_MUSIC, musicTime); // Select new song music after play time is over
682 break;
684 if (!IsHolidayActive(HOLIDAY_BREWFEST)) // Check if Brewfest is active
685 break;
686
687 switch (me->GetAreaId())
688 {
689 // Horde
690 case SILVERMOON:
691 case UNDERCITY:
692 case ORGRIMMAR_1:
693 case ORGRIMMAR_2:
694 case THUNDERBLUFF:
695 if (rnd == 0)
696 {
699 }
700 else if (rnd == 1)
701 {
704 }
705 else
706 {
709 }
710 break;
711 // Alliance
712 case IRONFORGE_1:
713 case IRONFORGE_2:
714 case STORMWIND:
715 case EXODAR:
716 case DARNASSUS:
717 if (rnd == 0)
718 {
721 }
722 else if (rnd == 1)
723 {
726 }
727 else
728 {
731 }
732 break;
733 // Neurtal
734 case SHATTRATH:
735 std::vector<Player*> playersNearby;
736 me->GetPlayerListInGrid(playersNearby, me->GetVisibilityRange());
737 for (Player* player : playersNearby)
738 {
739 if (player->GetTeamId() == TEAM_HORDE)
740 {
741 if (rnd == 0)
742 {
745 }
746 else if (rnd == 1)
747 {
750 }
751 else
752 {
755 }
756 }
757 else
758 {
759 if (rnd == 0)
760 {
763 }
764 else if (rnd == 1)
765 {
768 }
769 else
770 {
773 }
774 }
775 }
776 break;
777 }
778
779 _events.ScheduleEvent(EVENT_BM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client
780 break;
781 default:
782 break;
783 }
784 }
785 }
786 private:
788 };
789
790 GameObjectAI* GetAI(GameObject* go) const override
791 {
792 return new go_brewfest_musicAI(go);
793 }
794};
795
796/*####
797## go_midsummer_music
798####*/
799
801{
802 EVENTMIDSUMMERFIREFESTIVAL_A = 12319, // 1.08 min
803 EVENTMIDSUMMERFIREFESTIVAL_H = 12325, // 1.12 min
804};
805
810
812{
813public:
814 go_midsummer_music() : GameObjectScript("go_midsummer_music") { }
815
817 {
822
823 void UpdateAI(uint32 diff) override
824 {
825 _events.Update(diff);
826 while (uint32 eventId = _events.ExecuteEvent())
827 {
828 switch (eventId)
829 {
831 {
833 break;
834
835 std::vector<Player*> playersNearby;
836 me->GetPlayerListInGrid(playersNearby, me->GetVisibilityRange());
837 for (Player* player : playersNearby)
838 {
839 if (player->GetTeamId() == TEAM_HORDE)
841 else
843 }
844 _events.ScheduleEvent(EVENT_MM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
845 break;
846 }
847 default:
848 break;
849 }
850 }
851 }
852 private:
854 };
855
856 GameObjectAI* GetAI(GameObject* go) const override
857 {
858 return new go_midsummer_musicAI(go);
859 }
860};
861
862/*####
863## go_darkmoon_faire_music
864####*/
865
870
875
877{
878public:
879 go_darkmoon_faire_music() : GameObjectScript("go_darkmoon_faire_music") { }
880
882 {
887
888 void UpdateAI(uint32 diff) override
889 {
890 _events.Update(diff);
891 while (uint32 eventId = _events.ExecuteEvent())
892 {
893 switch (eventId)
894 {
897 break;
899 _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
900 break;
901 default:
902 break;
903 }
904 }
905 }
906 private:
908 };
909
910 GameObjectAI* GetAI(GameObject* go) const override
911 {
912 return new go_darkmoon_faire_musicAI(go);
913 }
914};
915
916/*####
917## go_pirate_day_music
918####*/
919
924
929
931{
932public:
933 go_pirate_day_music() : GameObjectScript("go_pirate_day_music") { }
934
936 {
941
942 void UpdateAI(uint32 diff) override
943 {
944 _events.Update(diff);
945 while (uint32 eventId = _events.ExecuteEvent())
946 {
947 switch (eventId)
948 {
951 break;
953 _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
954 break;
955 default:
956 break;
957 }
958 }
959 }
960 private:
962 };
963
964 GameObjectAI* GetAI(GameObject* go) const override
965 {
966 return new go_pirate_day_musicAI(go);
967 }
968};
969
970/*####
971## go_bells
972####*/
973
975{
976 BELLTOLLHORDE = 6595, // Undercity
977 BELLTOLLTRIBAL = 6675, // Orgrimma/Thunderbluff
978 BELLTOLLALLIANCE = 6594, // Stormwind
979 BELLTOLLNIGHTELF = 6674, // Darnassus
980 BELLTOLLDWARFGNOME = 7234, // Ironforge
981 BELLTOLLKHARAZHAN = 9154 // Kharazhan
983
996
1003
1009
1011{
1012public:
1013 go_bells() : GameObjectScript("go_bells") { }
1014
1015 struct go_bellsAI : public GameObjectAI
1016 {
1018
1019 void InitializeAI() override
1020 {
1021 uint32 zoneId = me->GetZoneId();
1022
1023 switch (me->GetEntry())
1024 {
1025 case GO_HORDE_BELL:
1026 {
1027 switch (zoneId)
1028 {
1029 case TIRISFAL_ZONE:
1030 case UNDERCITY_ZONE:
1032 case DUSKWOOD_ZONE:
1033 _soundId = BELLTOLLHORDE; // undead bell sound
1034 break;
1035 default:
1036 _soundId = BELLTOLLTRIBAL; // orc drum sound
1037 break;
1038 }
1039 break;
1040 }
1041 case GO_ALLIANCE_BELL:
1042 {
1043 switch (zoneId)
1044 {
1045 case IRONFORGE_ZONE:
1046 case DUN_MOROGH_ZONE:
1047 _soundId = BELLTOLLDWARFGNOME; // horn sound
1048 break;
1049 case DARNASSUS_ZONE:
1050 case TELDRASSIL_ZONE:
1051 case ASHENVALE_ZONE:
1052 _soundId = BELLTOLLNIGHTELF; // nightelf bell sound
1053 break;
1054 default:
1055 _soundId = BELLTOLLALLIANCE; // human bell sound
1056 }
1057 break;
1058 }
1059 case GO_KHARAZHAN_BELL:
1060 {
1062 break;
1063 }
1064 }
1065 }
1066
1067 void OnGameEvent(bool start, uint16 eventId) override
1068 {
1069 if (eventId == GAME_EVENT_HOURLY_BELLS && start)
1070 {
1071 time_t time = GameTime::GetGameTime();
1072 tm localTm;
1073 localtime_r(&time, &localTm);
1074 uint8 _rings = (localTm.tm_hour) % 12;
1075 if (_rings == 0) // 00:00 and 12:00
1076 {
1077 _rings = 12;
1078 }
1079
1080 // Dwarf hourly horn should only play a single time, each time the next hour begins.
1082 {
1083 _rings = 1;
1084 }
1085
1086 for (auto i = 0; i < _rings; ++i)
1088 }
1089 }
1090
1091 void UpdateAI(uint32 diff) override
1092 {
1093 _events.Update(diff);
1094
1095 while (uint32 eventId = _events.ExecuteEvent())
1096 {
1097 switch (eventId)
1098 {
1099 case EVENT_RING_BELL:
1101 break;
1102 default:
1103 break;
1104 }
1105 }
1106 }
1107 private:
1110 };
1111
1112 GameObjectAI* GetAI(GameObject* go) const override
1113 {
1114 return new go_bellsAI(go);
1115 }
1116};
1117
1119{
1120 new go_gilded_brazier();
1123 new go_ethereum_prison();
1124 new go_ethereum_stasis();
1125 new go_resonite_cask();
1128 new go_blood_filled_orb();
1131 new go_veil_skith_cage();
1134 new go_brewfest_music();
1135 new go_midsummer_music();
1137 new go_pirate_day_music();
1138 new go_bells();
1139}
uint8_t uint8
Definition Define.h:135
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:27
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
bool IsHolidayActive(HolidayIds id)
@ GO_JUST_DEACTIVATED
Definition GameObject.h:79
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:60
#define TC_LOG_ERROR(filterType__,...)
Definition Log.h:165
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
#define INTERACTION_DISTANCE
QuestStatus
Definition QuestDef.h:103
@ QUEST_STATUS_REWARDED
Definition QuestDef.h:110
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:107
@ QUEST_STATUS_COMPLETE
Definition QuestDef.h:105
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
uint32 rand32()
Definition Random.cpp:70
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive=true)
void SendGossipMenuFor(Player *player, uint32 npcTextID, ObjectGuid const &guid)
void AddGossipItemFor(Player *player, GossipOptionIcon icon, std::string const &text, uint32 sender, uint32 action)
void ClearGossipMenuFor(Player *player)
void CloseGossipMenuFor(Player *player)
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
@ GAMEOBJECT_TYPE_QUESTGIVER
@ GAMEOBJECT_TYPE_GOOBER
@ TEAM_HORDE
@ HOLIDAY_DARKMOON_FAIRE_THUNDER
@ HOLIDAY_DARKMOON_FAIRE_ELWYNN
@ HOLIDAY_FIRE_FESTIVAL
@ HOLIDAY_DARKMOON_FAIRE_SHATTRATH
@ HOLIDAY_PIRATES_DAY
@ HOLIDAY_BREWFEST
CreatureAI * AI() const
Definition Creature.h:154
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:73
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
GameObject *const me
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
void SetLootState(LootState s, Unit *unit=nullptr)
GameobjectTypes GetGoType() const
Definition GameObject.h:176
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
uint32 GetGossipOptionAction(uint32 selection) const
Definition GossipDef.h:269
void KilledMonsterCredit(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition Player.cpp:16140
Gender GetNativeGender() const override
Definition Player.h:1039
bool GetQuestRewardStatus(uint32 quest_id) const
Definition Player.cpp:15626
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition Player.cpp:9763
WorldSession * GetSession() const
Definition Player.h:1719
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition Player.cpp:15642
PlayerMenu * PlayerTalkClass
Definition Player.h:1969
Definition Spell.h:152
virtual void SetData(uint32, uint32)
Definition UnitAI.h:156
void GetPlayerListInGrid(Container &playerContainer, float maxSearchRange, bool alive=true) const
Definition Object.cpp:3173
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
void PlayDirectMusic(uint32 musicId, Player *target=nullptr)
Definition Object.cpp:3441
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2099
float GetVisibilityRange() const
Definition Object.cpp:1492
void PlayDirectSound(uint32 soundId, Player *target=nullptr)
Definition Object.cpp:3433
uint32 GetAreaId() const
Definition Object.h:374
uint32 GetZoneId() const
Definition Object.h:373
void SendNotification(const char *format,...) ATTR_PRINTF(2
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
GameObjectAI * GetAI(GameObject *go) const override
AmberpineOuthouse
@ NPC_OUTHOUSE_BUNNY
@ QUEST_DOING_YOUR_DUTY
@ SPELL_INDISPOSED_III
@ SPELL_INDISPOSED
@ ITEM_ANDERHOLS_SLIDER_CIDER
@ GOSSIP_OUTHOUSE_INUSE
@ GOSSIP_OUTHOUSE_VACANT
@ SPELL_CREATE_AMBERSEEDS
MidsummerPoleRibbon
@ ACTION_COSMETIC_FIRES
@ SPELL_TEST_RIBBON_POLE_2
@ SPELL_TEST_RIBBON_POLE_1
@ NPC_POLE_RIBBON_BUNNY
@ SPELL_TEST_RIBBON_POLE_3
#define GO_ANDERHOLS_SLIDER_CIDER_NOT_FOUND
BloodFilledOrb
@ NPC_ZELEMAR
#define GO_TELE_TO_DALARAN_CRYSTAL_FAILED
void AddSC_go_scripts()
BrewfestMusicEvents
@ EVENT_BM_SELECT_MUSIC
@ EVENT_BM_START_MUSIC
constexpr Seconds EVENT_BREWFESTDWARF02_TIME
BellHourlyMisc
@ GAME_EVENT_HOURLY_BELLS
@ EVENT_RING_BELL
constexpr Seconds EVENT_BREWFESTGOBLIN03_TIME
GildedBrazier
@ QUEST_THE_FIRST_TRIAL
@ NPC_STILLBLADE
BellHourlyObjects
@ GO_ALLIANCE_BELL
@ GO_KHARAZHAN_BELL
@ GO_HORDE_BELL
constexpr Seconds EVENT_BREWFESTGOBLIN01_TIME
PirateDayMusic
@ MUSIC_PIRATE_DAY_MUSIC
#define GOSSIP_USE_OUTHOUSE
constexpr Seconds EVENT_BREWFESTDWARF01_TIME
EthereumPrison
@ SPELL_REP_KT
@ SPELL_REP_CON
@ SPELL_REP_SPOR
@ SPELL_REP_LC
@ SPELL_REP_SHAT
@ SPELL_REP_CE
const uint32 NpcPrisonEntry[]
uint32 const RibbonPoleSpells[3]
BrewfestMusic
@ EVENT_BREWFESTGOBLIN03
@ EVENT_BREWFESTDWARF02
@ EVENT_BREWFESTDWARF01
@ EVENT_BREWFESTDWARF03
@ EVENT_BREWFESTGOBLIN02
@ EVENT_BREWFESTGOBLIN01
PirateDayMusicEvents
@ EVENT_PDM_START_MUSIC
BrewfestMusicAreas
@ UNDERCITY
@ IRONFORGE_1
@ ORGRIMMAR_2
@ SHATTRATH
@ IRONFORGE_2
@ THUNDERBLUFF
@ DARNASSUS
@ SILVERMOON
@ STORMWIND
@ EXODAR
@ ORGRIMMAR_1
constexpr Seconds EVENT_BREWFESTGOBLIN02_TIME
BellHourlySoundZones
@ HILLSBRAD_FOOTHILLS_ZONE
@ TIRISFAL_ZONE
@ ASHENVALE_ZONE
@ DUSKWOOD_ZONE
@ TELDRASSIL_ZONE
@ IRONFORGE_ZONE
@ DARNASSUS_ZONE
@ DUN_MOROGH_ZONE
@ UNDERCITY_ZONE
BellHourlySoundFX
@ BELLTOLLNIGHTELF
@ BELLTOLLALLIANCE
@ BELLTOLLKHARAZHAN
@ BELLTOLLHORDE
@ BELLTOLLTRIBAL
@ BELLTOLLDWARFGNOME
ResoniteCask
@ NPC_GOGGEROC
Southfury
@ SPELL_BLACKJACK
@ SPELL_SUMMON_RIZZLE
@ NPC_RIZZLE
MidsummerBonfire
@ STAMP_OUT_BONFIRE_QUEST_COMPLETE
const uint32 NpcStasisEntry[]
MidsummerMusicEvents
@ EVENT_MM_START_MUSIC
DalaranCrystal
@ QUEST_TELE_CRYSTAL_FLAG
@ QUEST_LEARN_LEAVE_RETURN
MissingFriends
@ NPC_CAPTIVE_CHILD
@ SAY_FREE_0
@ QUEST_MISSING_FRIENDS
DarkmoonFaireMusic
@ MUSIC_DARKMOON_FAIRE_MUSIC
constexpr Seconds EVENT_BREWFESTDWARF03_TIME
DarkmoonFaireMusicEvents
@ EVENT_DFM_START_MUSIC
MidsummerMusic
@ EVENTMIDSUMMERFIREFESTIVAL_A
@ EVENTMIDSUMMERFIREFESTIVAL_H
time_t GetGameTime()
Definition GameTime.cpp:42
float GetPositionZ() const
Definition Position.h:81
float GetAbsoluteAngle(float x, float y) const
Definition Position.h:128
float GetPositionX() const
Definition Position.h:79
float GetPositionY() const
Definition Position.h:80
bool OnGossipHello(Player *player) override
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
void OnGameEvent(bool start, uint16 eventId) override
void UpdateAI(uint32 diff) override
void InitializeAI() override
go_bellsAI(GameObject *go)
bool OnGossipHello(Player *player) override
void UpdateAI(uint32 diff) override
bool OnGossipHello(Player *player) override
bool OnGossipHello(Player *player) override
bool OnGossipHello(Player *player) override
bool OnGossipSelect(Player *player, uint32, uint32) override
void UpdateAI(uint32 diff) override
bool OnGossipHello(Player *) override
bool OnGossipHello(Player *player) override
bool OnGossipHello(Player *player) override
bool OnGossipHello(Player *player) override