TrinityCore
Loading...
Searching...
No Matches
zone_borean_tundra.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#include "ScriptMgr.h"
19#include "Containers.h"
20#include "CreatureAIImpl.h"
21#include "GameObject.h"
22#include "GameObjectAI.h"
23#include "MotionMaster.h"
24#include "ObjectAccessor.h"
25#include "ObjectMgr.h"
26#include "Player.h"
27#include "QuestDef.h"
28#include "ScriptedEscortAI.h"
29#include "ScriptedFollowerAI.h"
30#include "ScriptedGossip.h"
31#include "SpellAuras.h"
32#include "SpellAuraEffects.h"
33#include "SpellInfo.h"
34#include "SpellScript.h"
35#include "TemporarySummon.h"
36#include "WorldSession.h"
37
38/*######
39## Quest 11865: Unfit for Death
40######*/
41
42// Gameobjects 187982,187995,187996,187997,187998,187999,188000,188001,188002,188003,188004,188005,188006,188007,188008: Caribou Trap
63
65{
67
68 void Reset() override
69 {
71 }
72
73 void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
74 {
75 if (_placedFur)
76 return;
77
78 Player* playerCaster = caster->ToPlayer();
79 if (!playerCaster)
80 return;
81
82 if (spellInfo->Id == SPELL_PLACE_FAKE_FUR)
83 {
84 _playerGUID = caster->GetGUID();
85 _placedFur = true;
87 }
88 }
89
90 void UpdateAI(uint32 diff) override
91 {
92 if (!_placedFur)
93 return;
94
95 _events.Update(diff);
96
97 while (uint32 eventId = _events.ExecuteEvent())
98 {
99 switch (eventId)
100 {
101 case EVENT_FUR_SPAWN:
102 if (GameObject* fur = me->SummonGameObject(GO_HIGH_QUALITY_FUR, me->GetPosition(), QuaternionData(0.0f, 0.0f, 0.77162457f, 0.63607824f), 20s))
103 _goFurGUID = fur->GetGUID();
105 break;
108 {
109 trapper->SetFacingToObject(me);
110 _trapperGUID = trapper->GetGUID();
111 }
113 break;
116 trapper->GetMotionMaster()->MovePoint(0, trapper->GetFirstCollisionPosition(20.0f, 0));
118 break;
120 {
122 {
123 if (trapper->IsAIEnabled())
124 trapper->AI()->Talk(SAY_NESINGWARY_1);
125 }
127 break;
128 }
131 trapper->HandleEmoteCommand(EMOTE_ONESHOT_LOOT);
133 break;
136 fur->Delete();
138 break;
142 {
144 player->KilledMonsterCredit(trapper->GetEntry(), trapper->GetGUID());
145 trapper->CastSpell(trapper, SPELL_TRAPPED);
146 }
148 break;
151 trapper->DespawnOrUnsummon();
152 me->DespawnOrUnsummon(0s, 50s);
153 break;
154 default:
155 break;
156 }
157 }
158 }
159private:
165};
166
167/*######
168## Quest 11876: Help Those That Cannot Help Themselves
169######*/
170
171// Gameobjects 188022,188024,188025,188026,188027,188028,188029,188030,188031,188032,188033,188034,188035,188036,188037,188038,188039,188040,188041,188042,188043,188044: Mammoth Trap
189
191{
193
194 void Reset() override
195 {
198 }
199
200 void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
201 {
202 Player* playerCaster = caster->ToPlayer();
203 if (!playerCaster)
204 return;
205
206 if (me->GetGoState() == GO_STATE_READY)
207 return;
208
209 if (spellInfo->Id == SPELL_SMASH_TRAP)
210 {
211 _playerGUID = caster->GetGUID();
212 _trapSmashed = true;
215 }
216 }
217
218 void UpdateAI(uint32 diff) override
219 {
220 if (!_trapSmashed)
221 return;
222
223 _events.Update(diff);
224
225 while (uint32 eventId = _events.ExecuteEvent())
226 {
227 switch (eventId)
228 {
230 if (Creature* mammoth = me->FindNearestCreature(NPC_TRAPPED_MAMMOTH, 1.0f, true))
231 {
232 _mammothGUID = mammoth->GetGUID();
233 _trapSmashed = false;
234 }
235 break;
239 {
240 mammoth->SetStandState(UNIT_STAND_STATE_STAND);
241 mammoth->SetFacingToObject(player);
242 }
244 break;
247 player->KilledMonsterCredit(NPC_TRAPPED_MAMMOTH);
249 break;
252 if (mammoth->IsAIEnabled())
253 mammoth->AI()->Talk(SAY_MAMMOTH);
255 break;
258 mammoth->GetMotionMaster()->MovePoint(0, mammoth->GetFirstCollisionPosition(50.0f, me->GetOrientation()));
260 break;
263 mammoth->DespawnOrUnsummon(0s, 120s);
265 break;
268 Reset();
269 else
271 break;
272 default:
273 break;
274 }
275 }
276 }
277private:
282};
283
284/*######
285## Valiance Keep Cannoneer script to activate cannons
286######*/
287
293
295{
297 {
298 Initialize();
299 }
300
302 {
303 uiTimer = urand(13000, 18000);
304 }
305
307
308 void Reset() override
309 {
310 Initialize();
311 }
312
313 void UpdateAI(uint32 diff) override
314 {
315 if (uiTimer <= diff)
316 {
319 if (!pCannon)
321 if (pCannon)
322 pCannon->Use(me);
323 uiTimer = urand(13000, 18000);
324 }
325 else uiTimer -= diff;
326
327 if (!UpdateVictim())
328 return;
329 }
330};
331
332/*######
333## Quest 12019: Last Rites
334######*/
335
336// NPC 26170: Thassarian
338{
368
370
375 NPC_LERYSSA = 25251,
376
378 SPELL_STUN = 46957,
379
400
402 PATH_ARTHAS = 8104248,
403 PATH_TALBOT = 8104256,
404 PATH_ARLOS = 8104264,
405 PATH_LERYSSA = 8104272
407
409{
411
419
420 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
421 {
422 if (pathId == PATH_THASSARIAN)
423 {
424 me->SetWalk(false);
427 }
428 }
429
430 void UpdateAI(uint32 diff) override
431 {
433 return;
434
436 {
437 ArlosInPosition = false;
438 LeryssaInPosition = false;
440 }
441
443 {
444 TalbotJustDied = false;
446 }
447
448 _events.Update(diff);
449
450 if (uint32 eventId = _events.ExecuteEvent())
451 {
452 switch (eventId)
453 {
455 // Summon Arthas and Talbot
456 if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3729.4614f, 3520.386f, 473.4048f, 1.361f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2min))
457 {
458 _arthasGUID = arthas->GetGUID();
459 arthas->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
460 arthas->SetReactState(REACT_PASSIVE);
461 arthas->SetWalk(true);
462 }
463 if (Creature* talbot = me->SummonCreature(NPC_COUNSELOR_TALBOT, 3748.7627f, 3614.0374f, 473.4048f, 4.5553f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2min))
464 {
465 _talbotGUID = talbot->GetGUID();
466 talbot->SetWalk(true);
467 TalbotJustDied = false;
468 }
470 break;
472 // Arthas load path
474 arthas->GetMotionMaster()->MovePath(PATH_ARTHAS, false);
476 break;
478 // Talbot load path
480 talbot->GetMotionMaster()->MovePath(PATH_TALBOT, false);
482 break;
484 // Talbot transform and knell
486 {
487 talbot->UpdateEntry(NPC_PRINCE_VALANAR);
488 talbot->SetFullHealth();
489 talbot->SetFaction(FACTION_UNDEAD_SCOURGE);
490 talbot->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
491 talbot->SetReactState(REACT_PASSIVE);
492 talbot->SetStandState(UNIT_STAND_STATE_KNEEL);
493 }
495 break;
497 // Talbot say text 1
499 if (talbot->IsAIEnabled())
500 talbot->AI()->Talk(SAY_TALBOT_1);
502 break;
504 // Summon General Arlos and Leryssa
505 if (Creature* arlos = me->SummonCreature(NPC_GENERAL_ARLOS, 3746.2825f, 3616.3699f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2min))
506 {
507 _arlosGUID = arlos->GetGUID();
508 arlos->SetWalk(true);
509 arlos->SetReactState(REACT_PASSIVE);
510 arlos->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
511 arlos->GetMotionMaster()->MovePath(PATH_ARLOS, false);
512 }
513 if (Creature* leryssa = me->SummonCreature(NPC_LERYSSA, 3751.0986f, 3614.9219f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2min))
514 {
515 _leryssaGUID = leryssa->GetGUID();
516 leryssa->SetWalk(true);
517 leryssa->SetReactState(REACT_PASSIVE);
518 leryssa->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
519 leryssa->GetMotionMaster()->MovePath(PATH_LERYSSA, false);
520 }
522 break;
524 // Talbot say text 2
526 if (talbot->IsAIEnabled())
527 talbot->AI()->Talk(SAY_TALBOT_2);
528 break;
530 // Thassarian say text 1 and move to location
532 me->SetWalk(false);
533 me->GetMotionMaster()->MovePoint(0, 3722.527f, 3567.2583f, 477.44086f);
535 break;
537 // Thassarian say text 2
540 break;
542 // Arthas turn to Thassarian and Talbot stand
544 arthas->SetFacingToObject(me);
546 talbot->SetStandState(UNIT_STAND_STATE_STAND);
548 break;
550 // Arthas say text 2
552 if (arthas->IsAIEnabled())
553 arthas->AI()->Talk(SAY_LICH_2);
555 break;
557 // Thassarian say text 3
560 break;
562 // Talbot say text 3
564 if (talbot->IsAIEnabled())
565 talbot->AI()->Talk(SAY_TALBOT_3);
567 break;
569 // Arthas turn to Talbot say text 3
571 {
573 arthas->SetFacingToObject(talbot);
574 if (arthas->IsAIEnabled())
575 arthas->AI()->Talk(SAY_LICH_3);
576 }
578 break;
580 // Arthas turn to me and emote
582 {
583 arthas->SetFacingToObject(me);
584 arthas->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
585 }
587 break;
589 // Arthas despawn
591 arthas->RemoveFromWorld();
593 break;
595 // Talbot say text 4 and attack
598 {
599 if (talbot->IsAIEnabled())
600 talbot->AI()->Talk(SAY_TALBOT_4);
601 talbot->SetFaction(FACTION_VALANAR_COMBAT);
602 talbot->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
603 talbot->SetReactState(REACT_AGGRESSIVE);
604 talbot->Attack(me, false);
605 _preFightComplete = true;
606 }
607 break;
609 // Arlos say text 1
612 {
613 if (arlos->IsAIEnabled())
614 arlos->AI()->Talk(SAY_ARLOS_1);
615 arlos->SetEmoteState(EMOTE_STATE_NONE);
616 arlos->SetStandState(UNIT_STAND_STATE_KNEEL);
617 arlos->RemoveAura(SPELL_STUN);
618 }
620 {
621 leryssa->SetEmoteState(EMOTE_STATE_NONE);
622 leryssa->RemoveAura(SPELL_STUN);
623 }
625 break;
627 // Leryssa set facing to me
630 if (Creature* leryssa = me->FindNearestCreature(NPC_LERYSSA, 50.0f, true))
631 {
632 _leryssaGUID = leryssa->GetGUID();
633 leryssa->SetFacingToObject(me);
634 me->SetFacingToObject(leryssa);
635 }
637 break;
639 // Arlos say text 2 and die. Leryssa say text 1
640 if (Creature* arlos = me->FindNearestCreature(NPC_GENERAL_ARLOS, 50.0f, true))
641 {
642 _arlosGUID = arlos->GetGUID();
643 if (arlos->IsAIEnabled())
644 arlos->AI()->Talk(SAY_ARLOS_2);
645 arlos->SetStandState(UNIT_STAND_STATE_DEAD);
646 }
648 {
649 if (leryssa->IsAIEnabled())
650 leryssa->AI()->Talk(SAY_LERYSSA_1);
651 }
653 break;
655 // Thassarian say text 4
659 break;
661 // Leryssa run to Thassarian
663 {
664 leryssa->SetWalk(false);
665 leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN), true, true);
666 }
668 break;
670 // Leryssa say text 2
672 {
673 if (leryssa->IsAIEnabled())
674 leryssa->AI()->Talk(SAY_LERYSSA_2);
675 leryssa->SetStandState(UNIT_STAND_STATE_SIT);
676 }
678 break;
680 // Thassarian say text 5
683 break;
685 // Leryssa say text 3
687 if (leryssa->IsAIEnabled())
688 leryssa->AI()->Talk(SAY_LERYSSA_3);
690 break;
692 // Thassarian say text 6
695 break;
697 // Leryssa say text 4
699 if (leryssa->IsAIEnabled())
700 leryssa->AI()->Talk(SAY_LERYSSA_4);
702 break;
704 // Thassarian say text 7
707 break;
709 Cleanup();
710 me->DespawnOrUnsummon(0s, 30s);
711 break;
712 default:
713 break;
714 }
715 }
716
717 if (!UpdateVictim())
718 return;
719
721 }
722
723 void JustDied(Unit* /*killer*/) override
724 {
725 Cleanup();
726 }
727
728 void Cleanup()
729 {
731 talbot->DespawnOrUnsummon();
732
734 leryssa->DespawnOrUnsummon();
735
737 arlos->DespawnOrUnsummon();
738
740 arthas->DespawnOrUnsummon();
741 }
742
743 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
744 {
745 if (gossipListId == 0)
746 {
747 _playerGUID = player->GetGUID();
748 CloseGossipMenuFor(player);
750 _questEventStarted = true;
752 }
753 return false;
754 }
755
756private:
765public:
769};
770
771// NPC 25250: General Arlos
773{
774 npc_general_arlos(Creature* creature) : ScriptedAI(creature) { }
775
776 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
777 {
778 if (pathId == PATH_ARLOS)
779 {
782 if (TempSummon* tempSummon = me->ToTempSummon())
783 if (Unit* summoner = tempSummon->GetSummonerUnit())
784 ENSURE_AI(npc_thassarian, summoner->GetAI())->ArlosInPosition = true;
785 }
786 }
787};
788
789// NPC 25251: Leryssa
790struct npc_leryssa : public ScriptedAI
791{
792 npc_leryssa(Creature* creature) : ScriptedAI(creature) {}
793
794 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
795 {
796 if (pathId == PATH_LERYSSA)
797 {
798 me->SetFacingTo(4.537856f);
801 if (TempSummon* tempSummon = me->ToTempSummon())
802 if (Unit* summoner = tempSummon->GetSummonerUnit())
803 ENSURE_AI(npc_thassarian, summoner->GetAI())->LeryssaInPosition = true;
804 }
805 }
806};
807
808// NPC 25301: Counselor Talbot
821
823{
824 npc_counselor_talbot(Creature* creature) : ScriptedAI(creature) {}
825
832
833 void UpdateAI(uint32 diff) override
834 {
835 if (!UpdateVictim())
836 return;
837
838 if (me->GetAreaId() == AREA_LAST_RITES)
839 {
840 _events.Update(diff);
841
842 if (uint32 eventId = _events.ExecuteEvent())
843 {
844 switch (eventId)
845 {
846 case EVENT_DEFLECTION:
849 break;
850 case EVENT_SOUL_BLAST:
853 break;
857 break;
858 default:
859 break;
860 }
861 }
862 }
864 }
865
866 void JustDied(Unit* /*killer*/) override
867 {
868 if (TempSummon* tempSummon = me->ToTempSummon())
869 if (Unit* summoner = tempSummon->GetSummonerUnit())
870 ENSURE_AI(npc_thassarian, summoner->GetAI())->TalbotJustDied = true;
871 }
872
873private:
875};
876
884
885// 45997 - Bloodspore Ruination
887{
889
890 void HandleEffect(SpellEffIndex /*effIndex*/)
891 {
892 if (Unit* caster = GetCaster())
893 if (Creature* laurith = caster->FindNearestCreature(NPC_BLOODMAGE_LAURITH, 100.0f))
894 laurith->AI()->SetGUID(caster->GetGUID());
895 }
896
901};
902
904{
905 npc_bloodmage_laurith(Creature* creature) : ScriptedAI(creature) { }
906
907 void Reset() override
908 {
909 _events.Reset();
911 }
912
913 void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
914 {
915 if (!_playerGUID.IsEmpty())
916 return;
917
918 _playerGUID = guid;
919
921 me->SetFacingToObject(player);
922
924 }
925
926 void UpdateAI(uint32 diff) override
927 {
928 if (UpdateVictim())
929 {
931 return;
932 }
933
934 _events.Update(diff);
935
936 if (uint32 eventId = _events.ExecuteEvent())
937 {
938 switch (eventId)
939 {
940 case EVENT_TALK:
945 break;
947 me->SetFacingTo(me->GetHomePosition().GetOrientation());
948 break;
949 }
950 }
951 }
952
953private:
956};
957
958/*######
959## Quest 11653: Hah... You're Not So Big Now!
960######*/
961
979
982
983// 45668 - Crafty's Ultra-Advanced Proto-Typical Shortening Blaster
1007
1008// 45691 - Hah... : Magnataur On Death 1
1010{
1012
1017
1018 void HandleScript(SpellEffIndex /*effIndex*/)
1019 {
1020 Creature* caster = GetCaster()->ToCreature();
1021 if (!caster)
1022 return;
1023
1024 Player* player = caster->GetLootRecipient();
1025 if (!player)
1026 return;
1027
1028 if (std::ranges::none_of(BlasterTargetSpells, [caster](uint32 spell) { return caster->HasAura(spell); }))
1029 return;
1030
1031 player->CastSpell(player, SPELL_MAGNATAUR_KILL_CREDIT);
1032 caster->CastSpell(caster, SPELL_MAGNATAUR_ON_DEATH_2);
1033 }
1034
1039};
1040
1041// 45685 - Hah... : Magnataur On Death 2
1062
1063/*######
1064## Quest 11611: Taken by the Scourge
1065######*/
1066
1075
1080
1081// 45516 - Nerub'ar Web Random Unit (Not On Quest, Script Effect)
1101
1102// 45515 - Nerub'ar Web Random Unit (Not On Quest, Dummy)
1127
1128// 45535 - Nerub'ar Web Random Unit (On Quest, Dummy)
1130{
1132
1137
1138 void HandleDummy(SpellEffIndex /*effIndex*/)
1139 {
1140 Unit* caster = GetCaster();
1141
1142 // Always summon peon if has 3 soldiers
1143 Aura* aura = caster->GetAura(SPELL_FREED_SOLDIER_DEBUFF);
1144 if ((!aura || aura->GetStackAmount() < 3) && roll_chance_i(75))
1146 else
1147 caster->CastSpell(nullptr, SPELL_FREED_WARSONG_PEON, true);
1148 }
1149
1154};
1155
1156// 45522 - Dispel Freed Soldier Debuff
1158{
1160
1161 bool Validate(SpellInfo const* spellInfo) override
1162 {
1163 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
1164 }
1165
1166 void HandleScript(SpellEffIndex /*effIndex*/)
1167 {
1168 if (Aura* aura = GetHitUnit()->GetAura(GetEffectInfo().CalcValue()))
1169 aura->ModStackAmount(-1);
1170 }
1171
1176};
1177
1178/*######
1179## Quest 11690: Bring 'Em Back Alive
1180######*/
1181
1192
1193// 45877 - Deliver Kodo
1195{
1197
1198 bool Validate(SpellInfo const* /*spell*/) override
1199 {
1201 }
1202
1203 void HandleScript(SpellEffIndex /*effIndex*/)
1204 {
1205 Unit* caster = GetCaster();
1206 caster->CastSpell(caster, SPELL_KODO_DELIVERED, true);
1207 }
1208
1213};
1214
1215// 48204 - Kodo Delivered
1217{
1219
1220 bool Validate(SpellInfo const* /*spellInfo*/) override
1221 {
1222 return sObjectMgr->GetBroadcastText(TEXT_DELIVERED_1) &&
1223 sObjectMgr->GetBroadcastText(TEXT_DELIVERED_2) &&
1224 sObjectMgr->GetBroadcastText(TEXT_DELIVERED_3) &&
1225 sObjectMgr->GetBroadcastText(TEXT_DELIVERED_4) &&
1226 sObjectMgr->GetBroadcastText(TEXT_DELIVERED_5);
1227 }
1228
1229 void HandleScript(SpellEffIndex /*effIndex*/)
1230 {
1231 Unit* caster = GetCaster();
1233 }
1234
1239};
1240
1241/*######
1242## Quest 11648: The Art of Persuasion
1243######*/
1244
1270
1271// 45634 - Neural Needle
1273{
1275
1276 bool Validate(SpellInfo const* /*spellInfo*/) override
1277 {
1279 }
1280
1282 {
1283 Player* caster = GetCaster()->ToPlayer();
1284 Creature* target = GetHitCreature();
1285 if (!caster || !target)
1286 return;
1287
1288 target->CastSpell(target, SPELL_NEURAL_NEEDLE_IMPACT);
1289
1290 if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
1291 {
1292 switch (aura->GetStackAmount())
1293 {
1294 case 1:
1295 target->AI()->Talk(WHISPER_TORTURE_1, caster);
1296 break;
1297 case 2:
1298 target->AI()->Talk(WHISPER_TORTURE_2, caster);
1299 break;
1300 case 3:
1301 target->AI()->Talk(WHISPER_TORTURE_3, caster);
1302 break;
1303 case 4:
1304 target->AI()->Talk(WHISPER_TORTURE_4, caster);
1305 break;
1306 case 5:
1307 target->AI()->Talk(WHISPER_TORTURE_5, caster);
1308 caster->KilledMonsterCredit(target->GetEntry());
1309 break;
1310 case 6:
1312 break;
1313 default:
1314 return;
1315 }
1316 }
1317 }
1318
1323};
1324
1325// 48252 - Prototype Neural Needle
1327{
1329
1330 bool Validate(SpellInfo const* /*spellInfo*/) override
1331 {
1333 }
1334
1336 {
1337 Player* caster = GetCaster()->ToPlayer();
1338 Creature* target = GetHitCreature();
1339 if (!caster || !target)
1340 return;
1341
1343
1344 uint32 text = 0;
1345 if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
1346 {
1347 switch (aura->GetStackAmount())
1348 {
1349 case 1: text = WHISPER_TORTURE_PROTO_1; break;
1350 case 2: text = WHISPER_TORTURE_PROTO_2; break;
1351 case 3: text = WHISPER_TORTURE_PROTO_3; break;
1352 case 4: text = WHISPER_TORTURE_PROTO_4; break;
1353 case 5: text = WHISPER_TORTURE_PROTO_5; break;
1354 case 6: text = WHISPER_TORTURE_PROTO_6; break;
1355 case 7: text = WHISPER_TORTURE_PROTO_7; break;
1356 case 8: text = WHISPER_TORTURE_PROTO_8; break;
1357 case 9: text = WHISPER_TORTURE_PROTO_9; break;
1358 case 10: text = WHISPER_TORTURE_PROTO_10; break;
1359 default: return;
1360 }
1361 }
1362
1363 if (text)
1364 target->AI()->Talk(text, caster);
1365 }
1366
1371};
1372
1373/*######
1374## Quest 11587: Prison Break
1375######*/
1376
1382
1383// 45449 - Arcane Prisoner Rescue
1403
1404/*######
1405## Quest 11896: Weakness to Lightning
1406######*/
1407
1413
1414// 46444 - Weakness to Lightning: Cast on Master Script Effect
1434
1435// 46446 - Weakness to Lightning: Cancel Power of the Storm Aura
1455
1456// 46550 - Weakness to Lightning: On Quest Complete
1476
1477/*######
1478## Quest 11711: Coward Delivery... Under 30 Minutes or it's Free
1479######*/
1480
1481// 45958 - Signal Alliance
1483{
1485
1486 bool Validate(SpellInfo const* spellInfo) override
1487 {
1488 return ValidateSpellInfo(
1489 {
1490 uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()),
1491 uint32(spellInfo->GetEffect(EFFECT_1).CalcValue())
1492 });
1493 }
1494
1495 void HandleDummy(SpellEffIndex /*effIndex*/)
1496 {
1497 Unit* caster = GetCaster();
1498 if (caster->HasAura(uint32(GetEffectInfo(EFFECT_0).CalcValue())))
1499 caster->CastSpell(caster, uint32(GetEffectValue()));
1500 }
1501
1506};
1507
1508/*######
1509## Quest 11730: Master and Servant
1510######*/
1511
1526
1527// 46023 - The Ultrasonic Screwdriver
1529{
1531
1532 bool Load() override
1533 {
1534 return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem();
1535 }
1536
1549
1550 void HandleDummy(SpellEffIndex /*effIndex*/)
1551 {
1552 Item* castItem = GetCastItem();
1553 Unit* caster = GetCaster();
1554 if (Creature* target = GetHitCreature())
1555 {
1556 uint32 spellId = 0;
1557 switch (target->GetEntry())
1558 {
1560 case NPC_SENTRYBOT_57K: spellId = SPELL_SUMMON_SENTRYBOT_57K; break;
1564 default:
1565 return;
1566 }
1567 caster->CastSpell(caster, spellId, castItem);
1568 caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true);
1569 target->DespawnOrUnsummon();
1570 }
1571 }
1572
1577};
1578
1579/*######
1580## Quest 11652: The Plains of Nasam
1581######*/
1582
1594
1600
1601// 45750 - Land Mine Barrier
1603{
1605
1606 bool Validate(SpellInfo const* /*spellInfo*/) override
1607 {
1609 }
1610
1611 void HandleScript(SpellEffIndex /*effIndex*/)
1612 {
1613 Unit* caster = GetCaster();
1614 for (uint32 spells : DropLandMineSpells)
1615 caster->CastSpell(caster, spells);
1616 }
1617
1622};
1623
1624/*######
1625## Quest 11681: Rescuing Evanor
1626######*/
1627
1632
1633// 45992 - Taxi - Amber Ledge to Beryl Point Platform
1653
1654/*######
1655## Quest 11969: Springing the Trap
1656######*/
1657
1662
1663// 46813 - Taxi - Coldarra Ledge to Transitus Shield
1683
1684/*######
1685## Quest 11712: Re-Cursive
1686######*/
1687
1692
1693// 45980 - Re-Cursive Transmatter Injection
1713
1714/*######
1715## Quest 11919, 11940: Drake Hunt
1716######*/
1717
1726
1727// 46607 - Drake Harpoon
1729{
1731
1732 bool Validate(SpellInfo const* /*spellInfo*/) override
1733 {
1735 }
1736
1737 void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1738 {
1739 if (Unit* caster = GetCaster())
1740 caster->CastSpell(GetTarget(), SPELL_RED_DRAGONBLOOD, true);
1741 }
1742
1747};
1748
1749// 46620 - Red Dragonblood
1751{
1753
1754 bool Validate(SpellInfo const* /*spellInfo*/) override
1755 {
1757 }
1758
1759 void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1760 {
1761 if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
1762 return;
1763
1764 if (Unit* caster = GetCaster())
1765 caster->CastSpell(GetTarget(), SPELL_CAPTURE_TRIGGER, true);
1766 }
1767
1772};
1773
1774// 46691 - Drake Hatchling Subdued
1776{
1778
1779 bool Validate(SpellInfo const* /*spellInfo*/) override
1780 {
1782 }
1783
1784 void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1785 {
1786 switch (GetTargetApplication()->GetRemoveMode())
1787 {
1789 if (Unit* caster = GetCaster())
1790 GetTarget()->CastSpell(caster, SPELL_DRAKE_TURN_IN, true);
1791 break;
1794 if (Creature* creature = Object::ToCreature(GetCaster()))
1795 creature->DespawnOrUnsummon();
1796 break;
1797 default:
1798 break;
1799 }
1800 }
1801
1806};
1807
1808// 46693 - Strip Auras
1829
1830/*######
1831## Quest 11590: Abduction
1832######*/
1833
1834// 45625 - Arcane Chains: Character Force Cast
1854
1855// 45651 - Abduction: Quest Completion
1871
1873{
1910}
First const & RAND(First const &first, Second const &second, Rest const &... rest)
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
#define sObjectMgr
Definition ObjectMgr.h:1721
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
bool roll_chance_i(int chance)
Definition Random.h:59
#define RegisterCreatureAI(ai_name)
Definition ScriptMgr.h:1139
#define RegisterGameObjectAI(ai_name)
Definition ScriptMgr.h:1157
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
void CloseGossipMenuFor(Player *player)
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SEND_EVENT
@ EMOTE_STATE_READY1H
@ EMOTE_ONESHOT_LOOT
@ EMOTE_ONESHOT_KNEEL
@ EMOTE_ONESHOT_POINT
@ EMOTE_STATE_NONE
@ FACTION_UNDEAD_SCOURGE
@ GO_STATE_READY
@ GO_STATE_ACTIVE
@ AURA_REMOVE_BY_DEFAULT
@ AURA_REMOVE_BY_DEATH
@ AURA_REMOVE_BY_EXPIRE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MECHANIC_IMMUNITY
#define SpellEffectFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define SpellHitFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
#define ENSURE_AI(a, b)
Definition UnitAI.h:28
@ REACT_PASSIVE
@ REACT_AGGRESSIVE
@ UNIT_STAND_STATE_DEAD
Definition UnitDefines.h:41
@ UNIT_STAND_STATE_KNEEL
Definition UnitDefines.h:42
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:34
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:35
@ UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_QUESTGIVER
@ MOVE_RUN
@ UNIT_FLAG_NON_ATTACKABLE
@ UNIT_STATE_STUNNED
Definition Unit.h:223
@ UNIT_NPC_EMOTESTATE
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectApplyHandler > AfterEffectApply
Unit * GetCaster() const
Unit * GetTarget() const
uint8 GetStackAmount() const
Definition SpellAuras.h:164
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:295
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Player * GetLootRecipient() const
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
void Reset()
Definition EventMap.cpp:21
GameObject *const me
void SetGoState(GOState state)
GOState GetGoState() const
Definition GameObject.h:178
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
void Use(Unit *user)
Definition Item.h:62
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
void MovePath(uint32 pathId, bool repeatable)
bool IsEmpty() const
Definition ObjectGuid.h:172
void Clear()
Definition ObjectGuid.h:150
static Creature * ToCreature(Object *o)
Definition Object.h:186
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
Creature * ToCreature()
Definition Object.h:188
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:585
static Player * ToPlayer(Object *o)
Definition Object.h:180
void KilledMonsterCredit(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition Player.cpp:16140
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
uint32 Id
Definition SpellInfo.h:289
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition SpellInfo.h:483
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Item * GetCastItem() const
SpellInfo const * GetSpellInfo() const
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:166
Definition Unit.h:769
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4439
void RestoreFaction()
Definition Unit.cpp:11776
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:1098
TempSummon * ToTempSummon()
Definition Unit.h:1794
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4535
void AddUnitState(uint32 f)
Definition Unit.h:875
void SetFacingToObject(WorldObject const *object, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13259
void SetEmoteState(Emote emote)
Definition Unit.h:967
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:1097
bool SetWalk(bool enable)
Definition Unit.cpp:13268
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
void HandleEmoteCommand(Emote emoteId)
Definition Unit.cpp:1568
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13250
void SetStandState(UnitStandStateType state)
Definition Unit.cpp:10363
void RemoveUnitFlag(UnitFlags flags)
Definition Unit.h:955
GameObject * FindNearestGameObject(uint32 entry, float range, bool spawnedOnly=true) const
Definition Object.cpp:2121
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
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2015
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2099
uint32 GetAreaId() const
Definition Object.h:374
Position GetFirstCollisionPosition(float dist, float angle)
Definition Object.cpp:3257
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
PrepareSpellScript(spell_borean_tundra_abduction_quest_completion)
PrepareSpellScript(spell_borean_tundra_arcane_chains_character_force_cast)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_borean_tundra_arcane_prisoner_rescue)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_deliver_kodo)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_borean_tundra_dispel_freed_soldier_debuff)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_borean_tundra_drake_harpoon)
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_borean_tundra_drake_hatchling_subdued)
PrepareSpellScript(spell_borean_tundra_kodo_delivered)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_land_mine_barrier)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_magnataur_on_death_1)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_magnataur_on_death_2)
PrepareSpellScript(spell_borean_tundra_nerubar_web_random_unit_not_on_quest_dummy)
PrepareSpellScript(spell_borean_tundra_nerubar_web_random_unit_not_on_quest)
PrepareSpellScript(spell_borean_tundra_nerubar_web_random_unit_on_quest_dummy)
PrepareSpellScript(spell_borean_tundra_neural_needle)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_prototype_neural_needle)
PrepareSpellScript(spell_borean_tundra_re_cursive_transmatter_injection)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_borean_tundra_red_dragonblood)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_borean_tundra_shortening_blaster)
PrepareSpellScript(spell_borean_tundra_signal_alliance)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_borean_tundra_strip_auras)
bool Validate(SpellInfo const *) override
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform)
PrepareAuraScript(spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareSpellScript(spell_borean_tundra_ultrasonic_screwdriver)
PrepareSpellScript(spell_borean_tundra_weakness_to_lightning_cancel_aura)
PrepareSpellScript(spell_borean_tundra_weakness_to_lightning_cast_on_master)
PrepareSpellScript(spell_borean_tundra_weakness_to_lightning_on_quest_complete)
PrepareSpellScript(spell_q11719_bloodspore_ruination_45997)
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:108
float GetOrientation() const
Definition Position.h:82
void GetPosition(float &x, float &y) const
Definition Position.h:84
void SpellHit(WorldObject *caster, SpellInfo const *spellInfo) override
go_caribou_trap(GameObject *go)
void Reset() override
void UpdateAI(uint32 diff) override
void SpellHit(WorldObject *caster, SpellInfo const *spellInfo) override
go_mammoth_trap(GameObject *go)
void Reset() override
void UpdateAI(uint32 diff) override
npc_bloodmage_laurith(Creature *creature)
void UpdateAI(uint32 diff) override
void SetGUID(ObjectGuid const &guid, int32) override
npc_counselor_talbot(Creature *creature)
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *) override
npc_general_arlos(Creature *creature)
void WaypointPathEnded(uint32, uint32 pathId) override
void WaypointPathEnded(uint32, uint32 pathId) override
npc_leryssa(Creature *creature)
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
npc_thassarian(Creature *creature)
void JustAppeared() override
void WaypointPathEnded(uint32, uint32 pathId) override
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
npc_valiance_keep_cannoneer(Creature *creature)
void UpdateAI(uint32 diff) override
Valiancekeepcannons
@ GO_VALIANCE_KEEP_CANNON_2
@ GO_VALIANCE_KEEP_CANNON_1
@ EVENT_THASSARIAN_SCRIPT_29
@ EVENT_THASSARIAN_SCRIPT_5
@ SAY_THASSARIAN_3
@ SAY_LERYSSA_4
@ EVENT_THASSARIAN_SCRIPT_22
@ EVENT_THASSARIAN_SCRIPT_7
@ SAY_THASSARIAN_4
@ EVENT_THASSARIAN_SCRIPT_11
@ EVENT_THASSARIAN_SCRIPT_2
@ EVENT_THASSARIAN_SCRIPT_18
@ NPC_PRINCE_VALANAR
@ EVENT_THASSARIAN_SCRIPT_16
@ EVENT_THASSARIAN_SCRIPT_17
@ EVENT_THASSARIAN_SCRIPT_20
@ EVENT_THASSARIAN_SCRIPT_12
@ NPC_IMAGE_LICH_KING
@ EVENT_THASSARIAN_SCRIPT_8
@ PATH_THASSARIAN
@ NPC_COUNSELOR_TALBOT
@ EVENT_THASSARIAN_SCRIPT_27
@ EVENT_THASSARIAN_SCRIPT_1
@ NPC_GENERAL_ARLOS
@ EVENT_THASSARIAN_SCRIPT_26
@ SAY_LERYSSA_2
@ EVENT_THASSARIAN_SCRIPT_4
@ SPELL_TRANSFORM_VALANAR
@ EVENT_THASSARIAN_SCRIPT_25
@ FACTION_VALANAR_COMBAT
@ EVENT_THASSARIAN_SCRIPT_21
@ EVENT_THASSARIAN_SCRIPT_9
@ EVENT_THASSARIAN_SCRIPT_6
@ EVENT_THASSARIAN_SCRIPT_15
@ EVENT_THASSARIAN_SCRIPT_14
@ SAY_THASSARIAN_7
@ SAY_THASSARIAN_1
@ SAY_LERYSSA_1
@ SAY_THASSARIAN_6
@ SAY_LERYSSA_3
@ EVENT_THASSARIAN_SCRIPT_19
@ SAY_THASSARIAN_5
@ EVENT_THASSARIAN_SCRIPT_23
@ EVENT_THASSARIAN_SCRIPT_13
@ SAY_THASSARIAN_2
@ EVENT_THASSARIAN_SCRIPT_24
@ EVENT_THASSARIAN_SCRIPT_10
@ EVENT_THASSARIAN_SCRIPT_3
@ EVENT_THASSARIAN_SCRIPT_28
@ EVENT_DESPAWN_ALL
@ SAY_NESINGWARY_1
@ NPC_NESINGWARY_TRAPPER
@ SPELL_PLACE_FAKE_FUR
@ EVENT_TRAPPER_TEXT
@ EVENT_FUR_DESPAWN
@ EVENT_FUR_SPAWN
@ EVENT_TRAPPER_LOOT
@ EVENT_SPAWN_TRAPPER
@ EVENT_TRAPPER_MOVE
@ GO_HIGH_QUALITY_FUR
@ SPELL_TRAPPED
@ EVENT_TRAPPER_DIE
@ SPELL_DRAKE_TURN_IN
@ SPELL_CAPTURE_TRIGGER
@ SPELL_DRAKE_HATCHLING_SUBDUED
@ SPELL_ROPE_BEAM
@ SPELL_RED_DRAGONBLOOD
@ SPELL_SUMMON_ARCANE_PRISONER_1
@ SPELL_SUMMON_ARCANE_PRISONER_2
@ EVENT_MAMMOTH_MOVE
@ EVENT_TRAP_RESET
@ EVENT_QUEST_CREDIT
@ SPELL_SMASH_TRAP
@ NPC_TRAPPED_MAMMOTH
@ EVENT_FACE_PLAYER
@ EVENT_FIND_MAMMOTH
@ EVENT_MAMMOTH_TEXT
@ EVENT_MAMMOTH_RESPAWN
@ EVENT_MAMMOTH_DESPAWN
@ EVENT_SOUL_BLAST
@ SPELL_VAMPIRIC_BOLT
@ SPELL_DEFLECTION
@ EVENT_VAMPIRIC_BOLT
@ AREA_LAST_RITES
@ SPELL_SOUL_BLAST
@ EVENT_DEFLECTION
@ SPELL_SUMMON_FIZZCRANK_SURVIVOR
HahYoureNotSoBigNow
@ SPELL_POLYMORPH_1
@ SPELL_SHRUNK_2
@ SPELL_GHOST_2
@ SPELL_MAGNATAUR_KILL_CREDIT
@ SPELL_SHRUNK_1
@ SPELL_POLYMORPH_2
@ SPELL_MAGNATAUR_ON_DEATH_2
@ SPELL_YELLOW_1
@ SPELL_YELLOW_2
@ SPELL_GHOST_1
@ SPELL_BIGGER_1
@ SPELL_BIGGER_2
static constexpr std::array< uint32, 5 > BlasterTargetSpells
std::array< uint32, 3 > const CocoonSummonSpells
@ SPELL_SUMMON_SENTRYBOT_57K
@ SPELL_SUMMON_SCAVENGEBOT_004A8
@ NPC_DEFENDOTANK_66D
@ SPELL_SUMMON_55D_COLLECTATRON
@ SPELL_SUMMON_SCAVENGEBOT_005B6
@ NPC_SCAVENGEBOT_004A8
@ NPC_SCAVENGEBOT_005B6
@ NPC_SENTRYBOT_57K
@ SPELL_SUMMON_DEFENDOTANK_66D
@ SPELL_ROBOT_KILL_CREDIT
@ NPC_55D_COLLECTATRON
@ SPELL_COLDARRA_TO_TRANSITUS
BloodsporeRuination
@ NPC_BLOODMAGE_LAURITH
@ SAY_BLOODMAGE_LAURITH
@ EVENT_RESET_ORIENTATION
void AddSC_borean_tundra()
@ SPELL_POWER_OF_THE_STORM_ITEM
@ SPELL_POWER_OF_THE_STORM
@ SPELL_DROP_WARSONG_LAND_MINE_1
@ SPELL_DROP_WARSONG_LAND_MINE_4
@ SPELL_DROP_WARSONG_LAND_MINE_8
@ SPELL_DROP_WARSONG_LAND_MINE_3
@ SPELL_DROP_WARSONG_LAND_MINE_2
@ SPELL_DROP_WARSONG_LAND_MINE_7
@ SPELL_DROP_WARSONG_LAND_MINE_5
@ SPELL_DROP_WARSONG_LAND_MINE_6
@ SPELL_AMBER_LEDGE_TO_BERYL_POINT
static constexpr std::array< uint32, 8 > DropLandMineSpells
@ SPELL_FREED_WARSONG_MAGE
@ SPELL_FREED_SOLDIER_DEBUFF
@ SPELL_FREED_WARSONG_WARRIOR
@ SPELL_FREED_WARSONG_PEON
@ SPELL_FREED_WARSONG_SHAMAN
static constexpr std::array< uint32, 5 > BlasterCasterSpells
@ TEXT_DELIVERED_5
@ TEXT_DELIVERED_4
@ TEXT_DELIVERED_3
@ TEXT_DELIVERED_2
@ TEXT_DELIVERED_1
@ SPELL_KODO_DELIVERED
@ WHISPER_TORTURE_RANDOM_2
@ WHISPER_TORTURE_5
@ WHISPER_TORTURE_RANDOM_3
@ WHISPER_TORTURE_PROTO_10
@ WHISPER_TORTURE_PROTO_9
@ WHISPER_TORTURE_PROTO_4
@ WHISPER_TORTURE_PROTO_3
@ SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT
@ WHISPER_TORTURE_PROTO_5
@ WHISPER_TORTURE_1
@ WHISPER_TORTURE_4
@ WHISPER_TORTURE_3
@ WHISPER_TORTURE_PROTO_1
@ WHISPER_TORTURE_PROTO_7
@ WHISPER_TORTURE_2
@ WHISPER_TORTURE_PROTO_2
@ WHISPER_TORTURE_PROTO_8
@ WHISPER_TORTURE_RANDOM_1
@ WHISPER_TORTURE_PROTO_6
@ SPELL_NEURAL_NEEDLE_IMPACT