Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
spell_quest.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/*
7 * Scripts for spells with SPELLFAMILY_GENERIC spells used for quests.
8 * Ordered alphabetically using questId and scriptname.
9 * Scriptnames of files in this file should be prefixed with "spell_q#questID_".
10 */
11
12#include "Player.h"
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "SpellScript.h"
16#include "SpellAuraEffects.h"
17#include "Vehicle.h"
18#include "GridNotifiers.h"
19#include "GridNotifiersImpl.h"
20#include "CellImpl.h"
21
23{
25 private:
32
33 public:
34 spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, uint32 despawnTime = 0) :
35 SpellScript(), _spellEffect(spellEffect), _effIndex(effIndex), _originalEntry(originalEntry),
36 _newEntry(newEntry), _shouldAttack(shouldAttack), _despawnTime(despawnTime) { }
37
38 void HandleDummy(SpellEffIndex /*effIndex*/)
39 {
40 if (Creature* creatureTarget = GetHitCreature())
41 if (!creatureTarget->IsPet() && creatureTarget->GetEntry() == _originalEntry)
42 {
43 creatureTarget->UpdateEntry(_newEntry);
44 if (_shouldAttack && creatureTarget->IsAIEnabled)
45 creatureTarget->AI()->AttackStart(GetCaster());
46
47 if (_despawnTime)
48 creatureTarget->DespawnOrUnsummon(_despawnTime);
49 }
50 }
51
56};
57
58// http://www.wowhead.com/quest=55 Morbent Fel
59// 8913 Sacred Cleansing
61{
64};
65
76
77// 9712 - Thaumaturgy Channel
82
84{
85 public:
86 spell_q2203_thaumaturgy_channel() : SpellScriptLoader("spell_q2203_thaumaturgy_channel") { }
87
89 {
91
92 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
93 {
94 if (!sSpellMgr->GetSpellInfo(SPELL_THAUMATURGY_CHANNEL))
95 return false;
96 return true;
97 }
98
99 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
100 {
102 if (Unit* caster = GetCaster())
103 caster->CastSpell(caster, SPELL_THAUMATURGY_CHANNEL, false);
104 }
105
110 };
111
116};
117
118// http://www.wowhead.com/quest=5206 Marauders of Darrowshire
119// 17271 Test Fetid Skull
125
127{
128 public:
129 spell_q5206_test_fetid_skull() : SpellScriptLoader("spell_q5206_test_fetid_skull") { }
130
132 {
134
136 {
138 }
139
140 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
141 {
142 if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_RESONATING_SKULL) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_BONE_DUST))
143 return false;
144 return true;
145 }
146
147 void HandleDummy(SpellEffIndex /*effIndex*/)
148 {
149 Unit* caster = GetCaster();
151 caster->CastSpell(caster, spellId, true, NULL);
152 }
153
158 };
159
164};
165
166// http://www.wowhead.com/quest=6124 Curing the Sick (A)
167// http://www.wowhead.com/quest=6129 Curing the Sick (H)
168// 19512 Apply Salve
177
179{
180 public:
181 spell_q6124_6129_apply_salve() : SpellScriptLoader("spell_q6124_6129_apply_salve") { }
182
184 {
186
188 {
190 }
191
192 void HandleDummy(SpellEffIndex /*effIndex*/)
193 {
194 Player* caster = GetCaster()->ToPlayer();
195 if (GetCastItem())
196 if (Creature* creatureTarget = GetHitCreature())
197 {
198 uint32 uiNewEntry = 0;
199 switch (caster->GetTeam())
200 {
201 case HORDE:
202 if (creatureTarget->GetEntry() == NPC_SICKLY_GAZELLE)
203 uiNewEntry = NPC_CURED_GAZELLE;
204 break;
205 case ALLIANCE:
206 if (creatureTarget->GetEntry() == NPC_SICKLY_DEER)
207 uiNewEntry = NPC_CURED_DEER;
208 break;
209 }
210 if (uiNewEntry)
211 {
212 creatureTarget->UpdateEntry(uiNewEntry);
213 creatureTarget->DespawnOrUnsummon(DESPAWN_TIME);
214 }
215 }
216 }
217
222 };
223
228};
229
230// http://www.wowhead.com/quest=10255 Testing the Antidote
231// 34665 Administer Antidote
233{
234 NPC_HELBOAR = 16880,
236};
237
248
249// http://www.wowhead.com/quest=11396 Bring Down Those Shields (A)
250// http://www.wowhead.com/quest=11399 Bring Down Those Shields (H)
256
257// 43874 Scourge Mur'gul Camp: Force Shield Arcane Purple x3
291
292// 50133 Scourging Crystal Controller
294{
295 public:
296 spell_q11396_11399_scourging_crystal_controller() : SpellScriptLoader("spell_q11396_11399_scourging_crystal_controller") { }
297
299 {
301
302 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
303 {
305 return false;
306 return true;
307 }
308
309 void HandleDummy(SpellEffIndex /*effIndex*/)
310 {
311 if (Unit* target = GetExplTargetUnit())
312 if (target->GetTypeId() == TypeID::TYPEID_UNIT && target->HasAura(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3))
313 // Make sure nobody else is channeling the same target
314 if (!target->HasAura(SPELL_SCOURGING_CRYSTAL_CONTROLLER))
316 }
317
322 };
323
328};
329
330// 43882 Scourging Crystal Controller Dummy
365
366// http://www.wowhead.com/quest=11515 Blood for Blood
367// 44936 Quest - Fel Siphon Dummy
373
384
385// http://www.wowhead.com/quest=11587 Prison Break
386// 45449 Arcane Prisoner Rescue
388{
389 SPELL_SUMMON_ARCANE_PRISONER_MALE = 45446, // Summon Arcane Prisoner - Male
390 SPELL_SUMMON_ARCANE_PRISONER_FEMALE = 45448, // Summon Arcane Prisoner - Female
391 SPELL_ARCANE_PRISONER_KILL_CREDIT = 45456 // Arcane Prisoner Kill Credit
392};
393
395{
396 public:
397 spell_q11587_arcane_prisoner_rescue() : SpellScriptLoader("spell_q11587_arcane_prisoner_rescue") { }
398
400 {
402
403 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
404 {
406 return false;
407 return true;
408 }
409
410 void HandleDummy(SpellEffIndex /*effIndex*/)
411 {
412 Unit* caster = GetCaster();
413 if (Unit* unitTarget = GetHitUnit())
414 {
416 if (rand() % 2)
418 caster->CastSpell(caster, spellId, true);
419 unitTarget->CastSpell(caster, SPELL_ARCANE_PRISONER_KILL_CREDIT, true);
420 }
421 }
422
427 };
428
433};
434
435// http://www.wowhead.com/quest=11730 Master and Servant
436// 46023 The Ultrasonic Screwdriver
451
453{
454 public:
455 spell_q11730_ultrasonic_screwdriver() : SpellScriptLoader("spell_q11730_ultrasonic_screwdriver") { }
456
458 {
460
462 {
464 }
465
466 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
467 {
469 return false;
470 return true;
471 }
472
473 void HandleDummy(SpellEffIndex /*effIndex*/)
474 {
475 Item* castItem = GetCastItem();
476 Unit* caster = GetCaster();
477 if (Creature* target = GetHitCreature())
478 {
479 uint32 spellId = 0;
480 switch (target->GetEntry())
481 {
483 case NPC_SENTRYBOT_57K: spellId = SPELL_SUMMON_SENTRYBOT_57K; break;
487 default:
488 return;
489 }
490 caster->CastSpell(caster, spellId, true, castItem);
491 caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true);
492 target->DespawnOrUnsummon();
493 }
494 }
495
500 };
501
506};
507
508// http://www.wowhead.com/quest=12459 That Which Creates Can Also Destroy
509// 49587 Seeds of Nature's Wrath
521
523{
524 public:
525 spell_q12459_seeds_of_natures_wrath() : SpellScriptLoader("spell_q12459_seeds_of_natures_wrath") { }
526
528 {
530
531 void HandleDummy(SpellEffIndex /*effIndex*/)
532 {
533 if (Creature* creatureTarget = GetHitCreature())
534 {
535 uint32 uiNewEntry = 0;
536 switch (creatureTarget->GetEntry())
537 {
539 case NPC_TURGID: uiNewEntry = NPC_WEAK_TURGID; break;
540 case NPC_DEATHGAZE: uiNewEntry = NPC_WEAK_DEATHGAZE; break;
541 }
542 if (uiNewEntry)
543 creatureTarget->UpdateEntry(uiNewEntry);
544 }
545 }
546
551 };
552
557};
558
559// http://www.wowhead.com/quest=12634 Some Make Lemonade, Some Make Liquor
560// 51840 Despawn Fruit Tosser
568
570{
571 public:
572 spell_q12634_despawn_fruit_tosser() : SpellScriptLoader("spell_q12634_despawn_fruit_tosser") { }
573
575 {
577
578 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
579 {
581 return false;
582 return true;
583 }
584
585 void HandleDummy(SpellEffIndex /*effIndex*/)
586 {
588 switch (std::rand() % 3)
589 {
590 case 1: spellId = SPELL_ORANGE_FALLS_TO_GROUND; break;
591 case 2: spellId = SPELL_PAPAYA_FALLS_TO_GROUND; break;
592 }
593 // sometimes, if you're lucky, you get a dwarf
594 if (roll_chance_i(5))
596 GetCaster()->CastSpell(GetCaster(), spellId, true, NULL);
597 }
598
603 };
604
609};
610
611// http://www.wowhead.com/quest=12683 Burning to Help
612// 52308 Take Sputum Sample
614{
615 public:
616 spell_q12683_take_sputum_sample() : SpellScriptLoader("spell_q12683_take_sputum_sample") { }
617
619 {
621
622 void HandleDummy(SpellEffIndex /*effIndex*/)
623 {
624 uint32 reqAuraId = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
625
626 Unit* caster = GetCaster();
627 if (caster->HasAuraEffect(reqAuraId, 0))
628 {
630 caster->CastSpell(caster, spellId, true, NULL);
631 }
632 }
633
638 };
639
644};
645
646// http://www.wowhead.com/quest=12851 Going Bearback
647// 54798 FLAMING Arrow Triggered Effect
657
659{
660 public:
661 spell_q12851_going_bearback() : SpellScriptLoader("spell_q12851_going_bearback") { }
662
664 {
666
667 void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
668 {
669 if (Unit* caster = GetCaster())
670 {
671 Unit* target = GetTarget();
672 // Already in fire
673 if (target->HasAura(SPELL_ABLAZE))
674 return;
675
676 if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
677 {
678 switch (target->GetEntry())
679 {
680 case NPC_FROSTWORG:
681 target->CastSpell(player, SPELL_FROSTWORG_CREDIT, true);
682 target->CastSpell(target, SPELL_IMMOLATION, true);
683 target->CastSpell(target, SPELL_ABLAZE, true);
684 break;
685 case NPC_FROSTGIANT:
686 target->CastSpell(player, SPELL_FROSTGIANT_CREDIT, true);
687 target->CastSpell(target, SPELL_IMMOLATION, true);
688 target->CastSpell(target, SPELL_ABLAZE, true);
689 break;
690 }
691 }
692 }
693 }
694
699 };
700
705};
706
707// http://www.wowhead.com/quest=12937 Relief for the Fallen
708// 55804 Healing Finished
714
716{
717 public:
718 spell_q12937_relief_for_the_fallen() : SpellScriptLoader("spell_q12937_relief_for_the_fallen") { }
719
721 {
723
725 {
727 }
728
729 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
730 {
732 return false;
733 return true;
734 }
735
736 void HandleDummy(SpellEffIndex /*effIndex*/)
737 {
738 Player* caster = GetCaster()->ToPlayer();
739 if (Creature* target = GetHitCreature())
740 {
741 caster->CastSpell(caster, SPELL_TRIGGER_AID_OF_THE_EARTHEN, true, NULL);
743 target->DespawnOrUnsummon();
744 }
745 }
746
751 };
752
757};
758
765
767{
768 public:
769 spell_q10041_q10040_who_are_they() : SpellScriptLoader("spell_q10041_q10040_who_are_they") { }
770
772 {
774
775 bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
776 {
777 if (!sSpellMgr->GetSpellInfo(SPELL_MALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_FEMALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_GENERIC_DISGUISE))
778 return false;
779 return true;
780 }
781
783 {
784 PreventHitDefaultEffect(effIndex);
785 if (Player* target = GetHitPlayer())
786 {
787 target->CastSpell(target, target->getGender() == GENDER_MALE ? SPELL_MALE_DISGUISE : SPELL_FEMALE_DISGUISE, true);
788 target->CastSpell(target, SPELL_GENERIC_DISGUISE, true);
789 }
790 }
791
796 };
797
802};
803
808
809// 8593 Symbol of life dummy
811{
812 public:
813 spell_symbol_of_life_dummy() : SpellScriptLoader("spell_symbol_of_life_dummy") { }
814
816 {
818
819 void HandleDummy(SpellEffIndex /*effIndex*/)
820 {
821 if (Creature* target = GetHitCreature())
822 {
823 if (target->HasAura(SPELL_PERMANENT_FEIGN_DEATH))
824 {
825 target->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH);
826 target->SetUInt32Value(OBJECT_FIELD_DYNAMIC_FLAGS, 0);
827 target->SetUInt32Value(UNIT_FIELD_FLAGS2, 0);
828 target->SetHealth(target->GetMaxHealth() / 2);
829 target->SetPower(POWER_MANA, uint32(target->GetMaxPower(POWER_MANA) * 0.75f));
830 }
831 }
832 }
833
838 };
839
844};
845
846// http://www.wowhead.com/quest=12659 Scalps!
847// 52090 Ahunae's Knife
852
854{
855 public:
856 spell_q12659_ahunaes_knife() : SpellScriptLoader("spell_q12659_ahunaes_knife") { }
857
859 {
861
863 {
865 }
866
867 void HandleDummy(SpellEffIndex /*effIndex*/)
868 {
869 Player* caster = GetCaster()->ToPlayer();
870 if (Creature* target = GetHitCreature())
871 {
872 target->DespawnOrUnsummon();
874 }
875 }
876
881 };
882
887};
888
894
896{
897 public:
898 spell_q9874_liquid_fire() : SpellScriptLoader("spell_q9874_liquid_fire")
899 {
900 }
901
903 {
905
907 {
909 }
910
911 void HandleDummy(SpellEffIndex /*effIndex*/)
912 {
913 Player* caster = GetCaster()->ToPlayer();
914 if (Creature* target = GetHitCreature())
915 if (target && target->HasAura(SPELL_FLAMES))
916 {
918 target->CastSpell(target, SPELL_FLAMES, true);
919 target->DespawnOrUnsummon(60000);
920 }
921 }
922
927 };
928
933};
934
939
941{
942 public:
943 spell_q12805_lifeblood_dummy() : SpellScriptLoader("spell_q12805_lifeblood_dummy")
944 {
945 }
946
948 {
950
952 {
954 }
955
956 void HandleScript(SpellEffIndex /*effIndex*/)
957 {
958 Player* caster = GetCaster()->ToPlayer();
959 if (Creature* target = GetHitCreature())
960 {
962 target->CastSpell(target, uint32(GetEffectValue()), true);
963 target->DespawnOrUnsummon(2000);
964 }
965 }
966
971 };
972
977};
978
979/*
980 http://www.wowhead.com/quest=13283 King of the Mountain
981 http://www.wowhead.com/quest=13280 King of the Mountain
982 59643 Plant Horde Battle Standard
983 4338 Plant Alliance Battle Standard
984 */
989
1018
1026
1060
1061// http://old01.wowhead.com/quest=9452 - Red Snapper - Very Tasty!
1068
1070{
1071 public:
1072 spell_q9452_cast_net() : SpellScriptLoader("spell_q9452_cast_net") { }
1073
1075 {
1077
1079 {
1081 }
1082
1083 void HandleDummy(SpellEffIndex /*effIndex*/)
1084 {
1085 Player* caster = GetCaster()->ToPlayer();
1086 if (roll_chance_i(66))
1087 caster->AddItem(ITEM_RED_SNAPPER, 1);
1088 else
1089 caster->CastSpell(caster, SPELL_NEW_SUMMON_TEST, true);
1090 }
1091
1096 };
1097
1099 {
1101 }
1102};
1103
1104#define SAY_1 "Sons of Hodir! I humbly present to you..."
1105#define SAY_2 "The Helm of Hodir!"
1106
1108{
1109 NPC_KILLCREDIT = 30210 // Hodir's Helm KC Bunny
1110};
1111
1113{
1114public:
1115 spell_q12987_read_pronouncement() : SpellScriptLoader("spell_q12987_read_pronouncement") { }
1116
1118 {
1120
1121 void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1122 {
1123 // player must cast kill credit and do emote text, according to sniff
1124 if (Player* target = GetTarget()->ToPlayer())
1125 {
1126 target->MonsterWhisper(SAY_1, target, true);
1127 target->KilledMonsterCredit(NPC_KILLCREDIT, 0);
1128 target->MonsterWhisper(SAY_2, target, true);
1129 }
1130 }
1131
1136 };
1137
1142};
1143
1152
1154{
1155 public:
1156 spell_q12277_wintergarde_mine_explosion() : SpellScriptLoader("spell_q12277_wintergarde_mine_explosion") { }
1157
1159 {
1161
1162 void HandleDummy(SpellEffIndex /*effIndex*/)
1163 {
1164 if (Creature* unitTarget = GetHitCreature())
1165 {
1166 if (Unit* caster = GetCaster())
1167 {
1168 if (caster->GetTypeId() == TypeID::TYPEID_UNIT)
1169 {
1170 if (Unit* owner = caster->GetOwner())
1171 {
1172 switch (unitTarget->GetEntry())
1173 {
1175 caster->CastSpell(owner, SPELL_UPPER_MINE_SHAFT_CREDIT, true);
1176 break;
1178 caster->CastSpell(owner, SPELL_LOWER_MINE_SHAFT_CREDIT, true);
1179 break;
1180 default:
1181 break;
1182 }
1183 }
1184 }
1185 }
1186 }
1187 }
1188
1193 };
1194
1199};
1200
1205
1232
1243
1245{
1246 public:
1247 spell_q12735_song_of_cleansing() : SpellScriptLoader("spell_q12735_song_of_cleansing") { }
1248
1250 {
1252
1253 void HandleScript(SpellEffIndex /*effIndex*/)
1254 {
1255 Unit* caster = GetCaster();
1256 switch (caster->GetAreaId())
1257 {
1259 caster->CastSpell(caster, SPELL_SUMMON_SPIRIT_ATAH);
1260 break;
1261 case AREA_RIVERSHEART:
1262 caster->CastSpell(caster, SPELL_SUMMON_SPIRIT_HAKHALAN);
1263 break;
1265 caster->CastSpell(caster, SPELL_SUMMON_SPIRIT_KOOSU);
1266 break;
1267 default:
1268 break;
1269 }
1270 }
1271
1276 };
1277
1282};
1283
1288
1314
1315// http://www.wowhead.com/quest=12372 Defending Wyrmrest Temple
1316// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect
1318{
1319 // NPCs
1321 // Spells
1323};
1324
1326{
1327 public:
1328 spell_q12372_destabilize_azure_dragonshrine_dummy() : SpellScriptLoader("spell_q12372_destabilize_azure_dragonshrine_dummy") { }
1329
1331 {
1333
1334 void HandleDummy(SpellEffIndex /*effIndex*/)
1335 {
1336 if (GetHitCreature())
1337 if (Unit* caster = GetOriginalCaster())
1338 if (Vehicle* vehicle = caster->GetVehicleKit())
1339 if (Unit* passenger = vehicle->GetPassenger(0))
1340 if (Player* player = passenger->ToPlayer())
1341 player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0);
1342 }
1343
1348 };
1349
1354};
1355
1356// ID - 50287 Azure Dragon: On Death Force Cast Wyrmrest Defender to Whisper to Controller - Random (casted from Azure Dragons and Azure Drakes on death)
1383
1384// "Bombing Run" and "Bomb Them Again!"
1386{
1387 // Spell
1391 // NPCs
1393};
1394
1395// 40113 Knockdown Fel Cannon: The Aggro Check Aura
1423
1424// 40112 Knockdown Fel Cannon: The Aggro Check
1426{
1427 public:
1428 spell_q11010_q11102_q11023_aggro_check() : SpellScriptLoader("spell_q11010_q11102_q11023_aggro_check") { }
1429
1431 {
1433
1434 void HandleDummy(SpellEffIndex /*effIndex*/)
1435 {
1436 if (Player* playerTarget = GetHitPlayer())
1437 // Check if found player target is on fly mount or using flying form
1438 if (playerTarget->HasAuraType(SPELL_AURA_FLY) || playerTarget->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
1439 playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
1440 }
1441
1446 };
1447
1452};
1453
1454// 40119 Knockdown Fel Cannon: The Aggro Burst
1456{
1457 public:
1458 spell_q11010_q11102_q11023_aggro_burst() : SpellScriptLoader("spell_q11010_q11102_q11023_aggro_burst") { }
1459
1461 {
1463
1464 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
1465 {
1466 if (Unit* target = GetTarget())
1467 // On each tick cast Choose Loc to trigger summon
1468 target->CastSpell(target, SPELL_CHOOSE_LOC);
1469 }
1470
1475 };
1476
1481};
1482
1483// 40056 Knockdown Fel Cannon: Choose Loc
1485{
1486 public:
1487 spell_q11010_q11102_q11023_choose_loc() : SpellScriptLoader("spell_q11010_q11102_q11023_choose_loc") { }
1488
1490 {
1492
1493 void HandleDummy(SpellEffIndex /*effIndex*/)
1494 {
1495 Unit* caster = GetCaster();
1496 // Check for player that is in 65 y range
1497 std::list<Player*> playerList;
1498 Skyfire::AnyPlayerInObjectRangeCheck checker(caster, 65.0f);
1499 Skyfire::PlayerListSearcher<Skyfire::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker);
1500 caster->VisitNearbyWorldObject(65.0f, searcher);
1501 for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
1502 // Check if found player target is on fly mount or using flying form
1503 if ((*itr)->HasAuraType(SPELL_AURA_FLY) || (*itr)->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
1504 // Summom Fel Cannon (bunny version) at found player
1505 caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ());
1506 }
1507
1512 };
1513
1518};
1519
1520// 39844 - Skyguard Blasting Charge
1521// 40160 - Throw Bomb
1551
1556
1558{
1559 public:
1560 spell_q12527_zuldrak_rat() : SpellScriptLoader("spell_q12527_zuldrak_rat") { }
1561
1563 {
1565
1566 bool Validate(SpellInfo const* /*spell*/) OVERRIDE
1567 {
1569 return false;
1570 return true;
1571 }
1572
1574 {
1575 if (GetHitAura() && GetHitAura()->GetStackAmount() >= GetSpellInfo()->StackAmount)
1576 {
1578 if (Creature* basilisk = GetHitUnit()->ToCreature())
1579 basilisk->DespawnOrUnsummon();
1580 }
1581 }
1582
1587 };
1588
1593};
1594
1625
1630
1632{
1633 public:
1634 spell_q12730_quenching_mist() : SpellScriptLoader("spell_q12730_quenching_mist") { }
1635
1657
1662};
1663
1664// 13291 - Borrowed Technology/13292 - The Solution Solution /Daily//13239 - Volatility/13261 - Volatiliy /Daily//
1666{
1667 // NPCs
1669 NPC_DECOY = 31578,
1670 // Spells
1672};
1673
1675{
1676 public:
1677 spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy() : SpellScriptLoader("spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy") { }
1678
1680 {
1682
1683 bool Validate(SpellInfo const* /*spell*/) OVERRIDE
1684 {
1685 if (!sSpellMgr->GetSpellInfo(SPELL_RIDE))
1686 return false;
1687
1688 return true;
1689 }
1690
1691 void HandleDummy(SpellEffIndex /*effIndex*/)
1692 {
1693 if (!GetHitCreature())
1694 return;
1695 // TO DO: Being triggered is hack, but in checkcast it doesn't pass aurastate requirements.
1696 // Beside that the decoy won't keep it's freeze animation state when enter.
1698 }
1699
1704 };
1705
1710};
1711
1742
1744{
1745 public:
1746 spell_q12847_summon_soul_moveto_bunny() : SpellScriptLoader("spell_q12847_summon_soul_moveto_bunny") { }
1747
1749 {
1751
1753 {
1754 // Adjust effect summon position
1755 WorldLocation summonPos = *GetExplTargetDest();
1756 Position offset = { 0.0f, 0.0f, 2.5f, 0.0f };
1757 summonPos.RelocateOffset(offset);
1758 SetExplTargetDest(summonPos);
1759 GetHitDest()->RelocateOffset(offset);
1760 }
1761
1766 };
1767
1772};
1773
1780
1782{
1783 public:
1784 spell_q13011_bear_flank_master() : SpellScriptLoader("spell_q13011_bear_flank_master") { }
1785
1787 {
1789
1790 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
1791 {
1792 if (!sSpellMgr->GetSpellInfo(SPELL_BEAR_FLANK_MASTER) ||
1793 !sSpellMgr->GetSpellInfo(SPELL_CREATE_BEAR_FLANK))
1794 return false;
1795 return true;
1796 }
1797
1799 {
1801 }
1802
1803 void HandleScript(SpellEffIndex /*effIndex*/)
1804 {
1805 bool failed = RAND(0, 1); // 50% chance
1806 Creature* creature = GetCaster()->ToCreature();
1807 if (Player* player = GetHitPlayer())
1808 {
1809 if (failed)
1810 {
1811 player->CastSpell(creature, SPELL_BEAR_FLANK_FAIL);
1812 creature->AI()->Talk(0, player);
1813 }
1814 else
1815 player->CastSpell(player, SPELL_CREATE_BEAR_FLANK);
1816 }
1817 }
1818
1823 };
1824
1829};
1830
1832{
1833 public:
1834 spell_q13086_cannons_target() : SpellScriptLoader("spell_q13086_cannons_target") { }
1835
1837 {
1839
1840 bool Validate(SpellInfo const* spellInfo) OVERRIDE
1841 {
1842 if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()))
1843 return false;
1844 return true;
1845 }
1846
1848 {
1849 if (WorldLocation const* pos = GetExplTargetDest())
1850 GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true);
1851 }
1852
1857 };
1858
1863};
1864
1866{
1868
1870
1871 SPELL_BURST_AT_THE_SEAMS = 52510, // Burst at the Seams
1872 SPELL_BURST_AT_THE_SEAMS_DMG = 52508, // Damage spell
1873 SPELL_BURST_AT_THE_SEAMS_DMG_2 = 59580, // Abomination self damage spell
1874 SPELL_BURST_AT_THE_SEAMS_BONE = 52516, // Burst at the Seams:Bone
1875 SPELL_BURST_AT_THE_SEAMS_MEAT = 52520, // Explode Abomination:Meat
1876 SPELL_BURST_AT_THE_SEAMS_BMEAT = 52523, // Explode Abomination:Bloody Meat
1877 SPELL_DRAKKARI_SKULLCRUSHER_CREDIT = 52590, // Credit for Drakkari Skullcrusher
1878 SPELL_SUMMON_DRAKKARI_CHIEFTAIN = 52616, // Summon Drakkari Chieftain
1879 SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT = 52620 // Drakkari Chieftain Kill Credit
1880};
1881
1883{
1884 public:
1885 spell_q12690_burst_at_the_seams() : SpellScriptLoader("spell_q12690_burst_at_the_seams") { }
1886
1888 {
1890
1891 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
1892 {
1893 if (!sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS)
1894 || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_DMG)
1895 || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_DMG_2)
1896 || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_BONE)
1897 || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_MEAT)
1898 || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_BMEAT))
1899 return false;
1900 return true;
1901 }
1902
1904 {
1906 }
1907
1909 {
1910 if (Unit* creature = GetHitCreature())
1911 {
1912 if (Unit* charmer = GetCaster()->GetCharmerOrOwner())
1913 {
1914 if (Player* player = charmer->ToPlayer())
1915 {
1916 if (player->GetQuestStatus(QUEST_BURST_AT_THE_SEAMS) == QUEST_STATUS_INCOMPLETE)
1917 {
1918 creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
1919 creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_MEAT, true);
1920 creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BMEAT, true);
1921 creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_DMG, true);
1922 creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_DMG_2, true);
1923
1924 player->CastSpell(player, SPELL_DRAKKARI_SKULLCRUSHER_CREDIT, true);
1925 uint16 count = player->GetReqKillOrCastCurrentCount(QUEST_BURST_AT_THE_SEAMS, NPC_DRAKKARI_CHIEFTAINK);
1926 if ((count % 20) == 0)
1927 player->CastSpell(player, SPELL_SUMMON_DRAKKARI_CHIEFTAIN, true);
1928 }
1929 }
1930 }
1931 }
1932 }
1933
1934 void HandleScript(SpellEffIndex /*effIndex*/)
1935 {
1937 }
1938
1944 };
1945
1950};
1951
1956
1957// 48682 - Escape from Silverbrook - Periodic Dummy
1959{
1960 public:
1961 spell_q12308_escape_from_silverbrook() : SpellScriptLoader("spell_q12308_escape_from_silverbrook") { }
1962
1984
1989};
1990
1991// 48681 - Summon Silverbrook Worgen
1993{
1994 public:
1995 spell_q12308_escape_from_silverbrook_summon_worgen() : SpellScriptLoader("spell_q12308_escape_from_silverbrook_summon_worgen") { }
1996
1998 {
2000
2001 void ModDest(SpellEffIndex effIndex)
2002 {
2003 float dist = GetSpellInfo()->Effects[effIndex].CalcRadius(GetCaster());
2004 float angle = ((std::rand() % 1) ? -1 : 1) * (frand(0.75f, 1.0f) * M_PI);
2005
2006 Position pos;
2007 GetCaster()->GetNearPosition(pos, dist, angle);
2008 GetHitDest()->Relocate(&pos);
2009 }
2010
2015 };
2016
2021};
2022
2023
2036
2037// 51858 - Siphon of Acherus
2039{
2040 public:
2041 spell_q12641_death_comes_from_on_high() : SpellScriptLoader("spell_q12641_death_comes_from_on_high") { }
2042
2044 {
2046
2047 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
2048 {
2049 if (!sSpellMgr->GetSpellInfo(SPELL_FORGE_CREDIT) ||
2050 !sSpellMgr->GetSpellInfo(SPELL_TOWN_HALL_CREDIT) ||
2051 !sSpellMgr->GetSpellInfo(SPELL_SCARLET_HOLD_CREDIT) ||
2052 !sSpellMgr->GetSpellInfo(SPELL_CHAPEL_CREDIT))
2053 return false;
2054 return true;
2055 }
2056
2057 void HandleDummy(SpellEffIndex /*effIndex*/)
2058 {
2059 uint32 spellId = 0;
2060
2061 switch (GetHitCreature()->GetEntry())
2062 {
2064 spellId = SPELL_FORGE_CREDIT;
2065 break;
2067 spellId = SPELL_TOWN_HALL_CREDIT;
2068 break;
2069 case NPC_SCARLET_HOLD:
2070 spellId = SPELL_SCARLET_HOLD_CREDIT;
2071 break;
2073 spellId = SPELL_CHAPEL_CREDIT;
2074 break;
2075 default:
2076 return;
2077 }
2078
2079 GetCaster()->CastSpell((Unit*)NULL, spellId, true);
2080 }
2081
2086 };
2087
2092};
2093
2094// 51769 - Emblazon Runeblade
2096{
2097 public:
2098 spell_q12619_emblazon_runeblade() : SpellScriptLoader("spell_q12619_emblazon_runeblade") { }
2099
2116
2121};
2122
2123// 51770 - Emblazon Runeblade
2149
2155
2157{
2158 public:
2159 spell_q12919_gymers_grab() : SpellScriptLoader("spell_q12919_gymers_grab") { }
2160
2162 {
2164
2165 bool Validate(SpellInfo const* /*spell*/) OVERRIDE
2166 {
2167 if (!sSpellMgr->GetSpellInfo(SPELL_RIDE_GYMER))
2168 return false;
2169 return true;
2170 }
2171
2172 void HandleScript(SpellEffIndex /*effIndex*/)
2173 {
2174 int8 seatId = 2;
2175 if (!GetHitCreature())
2176 return;
2179 }
2180
2185 };
2186
2191};
2192
2197
2199{
2200 public:
2201 spell_q12919_gymers_throw() : SpellScriptLoader("spell_q12919_gymers_throw") { }
2202
2204 {
2206
2207 void HandleScript(SpellEffIndex /*effIndex*/)
2208 {
2209 Unit* caster = GetCaster();
2210 if (caster->IsVehicle())
2211 if (Unit* passenger = caster->GetVehicleKit()->GetPassenger(1))
2212 {
2213 passenger->ExitVehicle();
2214 caster->CastSpell(passenger, SPELL_VARGUL_EXPLOSION, true);
2215 }
2216 }
2217
2222 };
2223
2228};
2229
2235
2236// 93072 - Get Our Boys Back Dummy
2238{
2239public:
2240 spell_q28813_get_our_boys_back_dummy() : SpellScriptLoader("spell_q28813_get_our_boys_back_dummy") { }
2241
2243 {
2245
2246 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
2247 {
2248 if (!sSpellMgr->GetSpellInfo(SPELL_RENEWED_LIFE))
2249 return false;
2250 return true;
2251 }
2252
2254 {
2255 Unit* caster = GetCaster();
2256
2257 if (Creature* injuredStormwindInfantry = caster->FindNearestCreature(NPC_INJURED_STORMWIND_INFANTRY, 5.0f, true))
2258 {
2259 injuredStormwindInfantry->SetCreatorGUID(caster->GetGUID());
2260 injuredStormwindInfantry->CastSpell(injuredStormwindInfantry, SPELL_RENEWED_LIFE, true);
2261 }
2262 }
2263
2268 };
2269
2274};
2275
2277{
2278public:
2279 spell_q28813_set_health_random() : SpellScriptLoader("spell_q28813_set_health_random") { }
2280
2296
2297 SpellScript* GetSpellScript() const override
2298 {
2300 }
2301};
2302
2304{
2359}
@ IN_MILLISECONDS
Definition Common.h:125
#define M_PI
Definition Common.h:192
const T & RAND(const T &v1, const T &v2)
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
#define OVERRIDE
Definition Define.h:60
std::uint16_t uint16
Definition Define.h:78
@ TYPEID_PLAYER
Definition Object.h:55
@ TYPEID_UNIT
Definition Object.h:54
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:89
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ POWER_MANA
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SUMMON
@ SPELL_EFFECT_KNOCK_BACK
@ GENDER_MALE
@ ALLIANCE
@ HORDE
SpellCastResult
@ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_DUMMY
@ SPELL_AURA_FLY
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_NONE
@ SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
#define sSpellMgr
Definition SpellMgr.h:744
#define SpellCheckCastFn(F)
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellCastFn(F)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ SPELLVALUE_BASE_POINT0
Definition Unit.h:114
@ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE
Will ignore caster aura states including combat requirements and death state.
Definition Unit.h:429
@ UNIT_STATE_ROOT
Definition Unit.h:522
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FIELD_FLAGS2
@ UNIT_FIELD_FLAGS
@ OBJECT_FIELD_DYNAMIC_FLAGS
float frand(float min, float max)
Definition Util.cpp:39
bool roll_chance_i(int chance)
Definition Util.h:89
@ SPELL_IMMOLATION
uint32 GetEffIndex() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
Unit * GetCaster() const
Unit * GetTarget() const
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectApplyHandler > OnEffectApply
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
void DespawnOrUnsummon(uint32 msTimeToDespawn=0)
CreatureAI * AI() const
Definition Creature.h:483
Definition Item.h:202
uint64 GetGUID() const
Definition Object.h:119
Player * ToPlayer()
Definition Object.h:204
TypeID GetTypeId() const
Definition Object.h:131
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:1261
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:1280
uint32 GetEntry() const
Definition Object.h:125
Creature * ToCreature()
Definition Object.h:207
uint32 GetTeam() const
Definition Player.h:2527
bool AddItem(uint32 itemId, uint32 count)
Definition Player.cpp:22238
void KilledMonsterCredit(uint32 entry, uint64 guid=0)
float CalcRadius(Unit *caster=NULL, Spell *=NULL) const
int32 CalcValue(Unit const *caster=NULL, int32 const *basePoints=NULL, Unit const *target=NULL) const
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
Definition SpellInfo.h:255
Creature * GetHitCreature()
Aura * GetHitAura()
Unit * GetExplTargetUnit()
HookList< CheckCastHandler > OnCheckCast
WorldLocation const * GetExplTargetDest()
Player * GetHitPlayer()
void SetExplTargetDest(WorldLocation &loc)
SpellInfo const * GetSpellInfo()
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Item * GetCastItem()
HookList< EffectHandler > OnEffectHitTarget
HookList< CastHandler > OnCast
Unit * GetHitUnit()
WorldLocation * GetHitDest()
int32 GetEffectValue()
Unit * GetOriginalCaster()
Unit * GetCaster()
SpellScriptLoader(const char *name)
Definition Unit.h:1367
bool IsVehicle() const
Definition Unit.h:1523
Unit * GetOwner() const
Definition Unit.cpp:2339
bool HasAuraEffect(uint32 spellId, uint8 effIndex, uint64 caster=0) const
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:2355
void SetHealth(uint32 val)
Definition Unit.cpp:5162
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
void AddUnitState(uint32 f)
Definition Unit.h:1481
bool HasAuraType(AuraType auraType) const
void CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:1633
Vehicle * GetVehicleKit() const
Definition Unit.h:2739
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
Definition Vehicle.cpp:306
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2801
void VisitNearbyWorldObject(float const &radius, NOTIFIER &notifier) const
Definition Object.h:784
uint32 GetAreaId() const
Definition Object.cpp:1602
void GetNearPosition(Position &pos, float dist, float angle)
Definition Object.cpp:3076
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
uint32 _despawnTime
PrepareSpellScript(spell_generic_quest_update_entry_SpellScript)
uint8 _effIndex
void Register() OVERRIDE
void HandleDummy(SpellEffIndex)
spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, uint32 despawnTime=0)
bool _shouldAttack
uint32 _newEntry
uint32 _originalEntry
uint16 _spellEffect
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q12527_zuldrak_rat_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q12659_ahunaes_knife_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q12805_lifeblood_dummy_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const OVERRIDE
PrepareSpellScript(spell_q12919_gymers_grab_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q12919_gymers_throw_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q13086_cannons_target_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_q5206_test_fetid_skull_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q6124_6129_apply_salve_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q9452_cast_net_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_q9874_liquid_fire_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_symbol_of_life_dummy_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
FocusOnTheBeach
@ SPELL_BUNNY_CREDIT_BEAM
Quest13291_13292_13239_13261Data
@ NPC_DECOY
@ SPELL_RIDE
@ NPC_SKYTALON
symboloflife
@ SPELL_PERMANENT_FEIGN_DEATH
Quest12459Data
@ NPC_REANIMATED_FROSTWYRM
@ NPC_WEAK_REANIMATED_FROSTWYRM
@ NPC_TURGID
@ NPC_DEATHGAZE
@ NPC_WEAK_DEATHGAZE
@ NPC_WEAK_TURGID
Whoarethey
@ SPELL_MALE_DISGUISE
@ SPELL_GENERIC_DISGUISE
@ SPELL_FEMALE_DISGUISE
Quest5206Data
@ SPELL_CREATE_BONE_DUST
@ SPELL_CREATE_RESONATING_SKULL
SalvagingLifesStength
@ NPC_SHARD_KILL_CREDIT
DefendingWyrmrestTemple
@ SPELL_SUMMON_WYRMREST_DEFENDER
Quest12372Data
@ NPC_WYRMREST_TEMPLE_CREDIT
@ WHISPER_ON_HIT_BY_FORCE_WHISPER
Quest11730Data
@ 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
Quest_The_Storm_King_Throw
@ SPELL_VARGUL_EXPLOSION
BattleStandard
@ NPC_KING_OF_THE_MOUNTAINT_KC
RedSnapperVeryTasty
@ SPELL_NEW_SUMMON_TEST
@ ITEM_RED_SNAPPER
@ SPELL_CAST_NET
SpellZuldrakRat
@ SPELL_SUMMON_GORGED_LURKING_BASILISK
Quest12851Data
@ SPELL_IMMOLATION
@ SPELL_ABLAZE
@ SPELL_FROSTGIANT_CREDIT
@ SPELL_FROSTWORG_CREDIT
@ NPC_FROSTGIANT
@ NPC_FROSTWORG
QuenchingMist
@ SPELL_FLICKERING_FLAMES
Quest12634Data
@ SPELL_SUMMON_ADVENTUROUS_DWARF
@ SPELL_ORANGE_FALLS_TO_GROUND
@ SPELL_PAPAYA_FALLS_TO_GROUND
@ SPELL_BANANAS_FALL_TO_GROUND
#define SAY_1
DeathComesFromOnHigh
@ NPC_NEW_AVALON_TOWN_HALL
@ NPC_NEW_AVALON_FORGE
@ SPELL_TOWN_HALL_CREDIT
@ NPC_CHAPEL_OF_THE_CRIMSON_FLAME
@ NPC_SCARLET_HOLD
@ SPELL_SCARLET_HOLD_CREDIT
@ SPELL_CHAPEL_CREDIT
@ SPELL_FORGE_CREDIT
StoppingTheSpread
@ SPELL_FLAMES
@ NPC_VILLAGER_KILL_CREDIT
#define SAY_2
HodirsHelm
@ NPC_KILLCREDIT
Quest55Data
@ NPC_MORBENT
@ NPC_WEAKENED_MORBENT
Quest11010_11102_11023Data
@ SPELL_CHOOSE_LOC
@ SPELL_AGGRO_CHECK
@ NPC_FEL_CANNON2
@ SPELL_FLAK_CANNON_TRIGGER
ChumTheWaterSummons
@ SUMMON_NORTH_SEA_MAKO
@ SUMMON_ANGRY_KVALDIR
@ SUMMON_NORTH_SEA_THRESHER
@ SUMMON_NORTH_SEA_BLUE_SHARK
ACleansingSong
@ AREA_BITTERTIDELAKE
@ SPELL_SUMMON_SPIRIT_HAKHALAN
@ AREA_RIVERSHEART
@ AREA_WINTERGRASPRIVER
@ SPELL_SUMMON_SPIRIT_KOOSU
@ SPELL_SUMMON_SPIRIT_ATAH
EscapeFromSilverbrook
@ SPELL_SUMMON_WORGEN
BurstAtTheSeams
@ SPELL_BURST_AT_THE_SEAMS_BONE
@ SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT
@ QUEST_BURST_AT_THE_SEAMS
@ SPELL_BURST_AT_THE_SEAMS_DMG
@ SPELL_BURST_AT_THE_SEAMS_BMEAT
@ NPC_DRAKKARI_CHIEFTAINK
@ SPELL_SUMMON_DRAKKARI_CHIEFTAIN
@ SPELL_BURST_AT_THE_SEAMS_DMG_2
@ SPELL_DRAKKARI_SKULLCRUSHER_CREDIT
@ SPELL_BURST_AT_THE_SEAMS
@ SPELL_BURST_AT_THE_SEAMS_MEAT
FearNoEvil
@ NPC_INJURED_STORMWIND_INFANTRY
@ SPELL_RENEWED_LIFE
LeaveNothingToChance
@ NPC_UPPER_MINE_SHAFT
@ NPC_LOWER_MINE_SHAFT
@ SPELL_UPPER_MINE_SHAFT_CREDIT
@ SPELL_LOWER_MINE_SHAFT_CREDIT
BearFlankMaster
@ SPELL_BEAR_FLANK_MASTER
@ SPELL_BEAR_FLANK_FAIL
@ SPELL_CREATE_BEAR_FLANK
Quest12937Data
@ NPC_FALLEN_EARTHEN_DEFENDER
@ SPELL_TRIGGER_AID_OF_THE_EARTHEN
Quest12659Data
@ NPC_SCALPS_KC_BUNNY
Quest11396_11399Data
@ SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3
@ SPELL_SCOURGING_CRYSTAL_CONTROLLER
Quests6124_6129Data
@ NPC_SICKLY_DEER
@ NPC_SICKLY_GAZELLE
@ NPC_CURED_GAZELLE
@ NPC_CURED_DEER
@ DESPAWN_TIME
void AddSC_quest_spell_scripts()
ThaumaturgyChannel
@ SPELL_THAUMATURGY_CHANNEL
Quest_The_Storm_King
@ SPELL_RIDE_GYMER
@ SPELL_GRABBED
Quest10255Data
@ NPC_HELBOAR
@ NPC_DREADTUSK
Quest11515Data
@ NPC_EMACIATED_FELBLOOD
@ NPC_FELBLOOD_INITIATE
Quest11587Data
@ SPELL_ARCANE_PRISONER_KILL_CREDIT
@ SPELL_SUMMON_ARCANE_PRISONER_FEMALE
@ SPELL_SUMMON_ARCANE_PRISONER_MALE
void RelocateOffset(Position const &offset)
Definition Object.cpp:1841
void Relocate(float x, float y)
Definition Object.h:302
@ SPELL_RIDE