TrinityCore
Loading...
Searching...
No Matches
spell_priest.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/*
19 * Scripts for spells with SPELLFAMILY_PRIEST and SPELLFAMILY_GENERIC spells used by priest players.
20 * Ordered alphabetically using scriptname.
21 * Scriptnames of files in this file should be prefixed with "spell_pri_".
22 */
23
24#include "ScriptMgr.h"
25#include "Creature.h"
26#include "Errors.h"
27#include "GridNotifiers.h"
28#include "Player.h"
29#include "Random.h"
30#include "SharedDefines.h"
31#include "SpellAuraEffects.h"
32#include "SpellDefines.h"
33#include "SpellMgr.h"
34#include "SpellScript.h"
35#include "TemporarySummon.h"
36
38{
83};
84
92
102
109
115
117{
118 public:
119 explicit PowerCheck(Powers const power) : _power(power) { }
120
121 bool operator()(WorldObject* obj) const
122 {
123 if (Unit* target = obj->ToUnit())
124 return target->GetPowerType() != _power;
125
126 return true;
127 }
128
129 private:
131};
132
133class RaidCheck
134{
135 public:
136 explicit RaidCheck(Unit const* caster) : _caster(caster) { }
137
138 bool operator()(WorldObject* obj) const
139 {
140 if (Unit* target = obj->ToUnit())
141 return !_caster->IsInRaidWith(target);
142
143 return true;
144 }
145
146 private:
147 Unit const* _caster;
148};
149
150// 26169 - Oracle Healing Bonus
152{
154
155 bool Validate(SpellInfo const* /*spellInfo*/) override
156 {
158 }
159
160 bool CheckProc(ProcEventInfo& eventInfo)
161 {
162 if (eventInfo.GetActor() == eventInfo.GetActionTarget())
163 return false;
164
165 HealInfo* healInfo = eventInfo.GetHealInfo();
166 return healInfo && healInfo->GetHeal();
167 }
168
169 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
170 {
172
173 CastSpellExtraArgs args(aurEff);
174 args.AddSpellBP0(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), 10));
175 eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_PRIEST_ORACULAR_HEAL, args);
176 }
177
183};
184
185// -27811 - Blessed Recovery
187{
189
190 bool Validate(SpellInfo const* /*spellInfo*/) override
191 {
193 }
194
195 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
196 {
198 DamageInfo* dmgInfo = eventInfo.GetDamageInfo();
199 if (!dmgInfo || !dmgInfo->GetDamage())
200 return;
201
202 Unit* target = eventInfo.GetActionTarget();
203 uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_BLESSED_RECOVERY_R1, aurEff->GetSpellInfo()->GetRank());
204 SpellInfo const* triggerInfo = sSpellMgr->AssertSpellInfo(triggerSpell);
205
206 int32 bp = CalculatePct(static_cast<int32>(dmgInfo->GetDamage()), aurEff->GetAmount());
207
208 ASSERT(triggerInfo->GetMaxTicks() > 0);
209 bp /= triggerInfo->GetMaxTicks();
210
211 CastSpellExtraArgs args(aurEff);
212 args.AddSpellBP0(bp);
213 target->CastSpell(target, triggerSpell, args);
214 }
215
220};
221
222// -64127 - Body and Soul
224{
226
227 bool Validate(SpellInfo const* /*spellInfo*/) override
228 {
229 return ValidateSpellInfo(
230 {
233 });
234 }
235
236 bool CheckProcTriggerSpell(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
237 {
238 // Proc only on Power Word: Shield
239 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
240 return spellInfo && (spellInfo->SpellFamilyFlags[0] & 0x00000001) != 0;
241 }
242
243 bool CheckProcDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
244 {
245 // Proc only on self casted abolish disease
246 if (eventInfo.GetActor() != eventInfo.GetActionTarget())
247 return false;
248
249 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
250 return spellInfo && spellInfo->Id == SPELL_PRIEST_ABOLISH_DISEASE;
251 }
252
253 void HandleProcDummy(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
254 {
256
257 if (roll_chance_i(aurEff->GetAmount()))
258 eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, aurEff);
259 }
260
267};
268
269// -34861 - Circle of Healing
271{
273
274 bool Validate(SpellInfo const* /*spellInfo*/) override
275 {
277 }
278
279 void FilterTargets(std::list<WorldObject*>& targets)
280 {
281 targets.remove_if(RaidCheck(GetCaster()));
282
283 uint32 const maxTargets = GetCaster()->HasAura(SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING) ? 6 : 5; // Glyph of Circle of Healing
284
285 if (targets.size() > maxTargets)
286 {
287 targets.sort(Trinity::HealthPctOrderPred());
288 targets.resize(maxTargets);
289 }
290 }
291
296};
297
298// 47585 - Dispersion
328
329// -47509 - Divine Aegis
331{
333
334 bool Validate(SpellInfo const* /*spellInfo*/) override
335 {
337 }
338
339 bool CheckProc(ProcEventInfo& eventInfo)
340 {
341 HealInfo* healInfo = eventInfo.GetHealInfo();
342 return healInfo && healInfo->GetHeal();
343 }
344
345 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
346 {
348
349 int32 absorb = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
350
351 // Multiple effects stack, so let's try to find this aura.
353 absorb += aegis->GetAmount();
354
355 absorb = std::min(absorb, eventInfo.GetActionTarget()->GetLevel() * 125);
356
357 CastSpellExtraArgs args(aurEff);
358 args.AddSpellBP0(absorb);
359 eventInfo.GetActor()->CastSpell(eventInfo.GetActionTarget(), SPELL_PRIEST_DIVINE_AEGIS, args);
360 }
361
367};
368
369// 64844 - Divine Hymn
371{
373
374 void FilterTargets(std::list<WorldObject*>& targets)
375 {
376 targets.remove_if(RaidCheck(GetCaster()));
377
378 uint32 const maxTargets = 3;
379
380 if (targets.size() > maxTargets)
381 {
382 targets.sort(Trinity::HealthPctOrderPred());
383 targets.resize(maxTargets);
384 }
385 }
386
391};
392
393// 55677 - Glyph of Dispel Magic
395{
397
398 bool Validate(SpellInfo const* /*spellInfo*/) override
399 {
401 }
402
403 bool CheckProc(ProcEventInfo& eventInfo)
404 {
405 // Dispel Magic shares spellfamilyflag with abolish disease
406 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
407 return spellInfo && spellInfo->SpellIconID == 74;
408 }
409
410 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
411 {
413
414 Unit* target = eventInfo.GetActionTarget();
415
416 CastSpellExtraArgs args(aurEff);
417 args.AddSpellBP0(target->CountPctFromMaxHealth(aurEff->GetAmount()));
419 }
420
426};
427
428// 55680 - Glyph of Prayer of Healing
430{
432
433 bool Validate(SpellInfo const* /*spellInfo*/) override
434 {
436 }
437
438 bool CheckProc(ProcEventInfo& eventInfo)
439 {
440 HealInfo* healInfo = eventInfo.GetHealInfo();
441 return healInfo && healInfo->GetHeal();
442 }
443
444 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
445 {
447
448 SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL);
449
450 ASSERT(triggeredSpellInfo->GetMaxTicks() > 0);
451 CastSpellExtraArgs args(aurEff);
452 args.AddSpellBP0(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks());
454 }
455
461};
462
463// 47788 - Guardian Spirit
465{
467
469
470 bool Validate(SpellInfo const* /*spellInfo*/) override
471 {
473 }
474
475 bool Load() override
476 {
478 return true;
479 }
480
481 void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
482 {
483 // Set absorbtion amount to unlimited
484 amount = -1;
485 }
486
487 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
488 {
489 Unit* target = GetTarget();
490 if (dmgInfo.GetDamage() < target->GetHealth())
491 return;
492
493 int32 healAmount = int32(target->CountPctFromMaxHealth(healPct));
494 // remove the aura now, we don't want 40% healing bonus
497 args.AddSpellBP0(healAmount);
498 target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, args);
499 absorbAmount = dmgInfo.GetDamage();
500 }
501
507};
508
509// -15237 - Holy Nova
511{
513
514 bool Validate(SpellInfo const* /*spellInfo*/) override
515 {
517 }
518
520 {
521 uint32 triggerSpellId = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_HOLY_NOVA_HEAL_R1, GetSpellInfo()->GetRank());
522 GetCaster()->CastSpell(GetCaster(), triggerSpellId, true);
523 }
524
529};
530
531// 64904 - Hymn of Hope
533{
535
536 void FilterTargets(std::list<WorldObject*>& targets)
537 {
538 targets.remove_if(PowerCheck(POWER_MANA));
539 targets.remove_if(RaidCheck(GetCaster()));
540
541 uint32 const maxTargets = 3;
542
543 if (targets.size() > maxTargets)
544 {
546 targets.resize(maxTargets);
547 }
548 }
549
554};
555
556// -47569 - Improved Shadowform
573
574// -15337 - Improved Spirit Tap
576{
578
579 bool Validate(SpellInfo const* /*spellInfo*/) override
580 {
581 return ValidateSpellInfo(
582 {
585 });
586 }
587
588 bool CheckProc(ProcEventInfo& eventInfo)
589 {
590 if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo())
591 {
592 if (spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_SHADOW_WORD_DEATH_R1)) ||
593 spellInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_PRIEST_MIND_BLAST_R1)))
594 return true;
595 else if (spellInfo->Id == SPELL_PRIEST_MIND_FLAY_DAMAGE)
596 return roll_chance_i(50);
597 }
598
599 return false;
600 }
601
606};
607
608// 40438 - Priest Tier 6 Trinket
610{
612
613 bool Validate(SpellInfo const* /*spellInfo*/) override
614 {
615 return ValidateSpellInfo(
616 {
619 });
620 }
621
622 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
623 {
625 Unit* caster = eventInfo.GetActor();
626 if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_HEAL)
627 caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_BLESSING, aurEff);
628
630 caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_WRATH, aurEff);
631 }
632
637};
638
639// 60123 - Lightwell
641{
643
656
657 bool Load() override
658 {
659 return GetCaster()->GetTypeId() == TYPEID_UNIT;
660 }
661
663 {
664 Creature* caster = GetCaster()->ToCreature();
665 if (!caster || !caster->IsSummon())
666 return;
667
668 uint32 lightwellRenew = 0;
669 switch (caster->GetEntry())
670 {
672 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R1;
673 break;
675 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R2;
676 break;
678 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R3;
679 break;
681 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R4;
682 break;
684 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R5;
685 break;
687 lightwellRenew = SPELL_PRIEST_LIGHTWELL_RENEW_R6;
688 break;
689 default:
690 return;
691 }
692
693 // proc a spellcast
694 if (Aura* chargesAura = caster->GetAura(SPELL_PRIEST_LIGHTWELL_CHARGES))
695 {
696 caster->CastSpell(GetHitUnit(), lightwellRenew, caster->ToTempSummon()->GetSummonerGUID());
697 if (chargesAura->ModCharges(-1))
698 caster->ToTempSummon()->UnSummon();
699 }
700 }
701
706};
707
708// -7001 - Lightwell Renew
710{
712
713 void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
714 {
715 if (Unit* caster = GetCaster())
716 {
717 // Bonus from Glyph of Lightwell
718 if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_LIGHTWELL, EFFECT_0))
719 AddPct(amount, modHealing->GetAmount());
720 }
721 }
722
723 void InitializeAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
724 {
725 // Attacks done to you equal to 30% of your total health will cancel the effect
727 }
728
730 {
731 DamageInfo* damageInfo = eventInfo.GetDamageInfo();
732 if (!damageInfo)
733 return;
734
735 uint32 damage = damageInfo->GetDamage();
736 if (_remainingAmount <= damage)
737 return;
738
739 _remainingAmount -= damage;
740 // prevent drop charge
742 }
743
751
753};
754
755// 28305 - Mana Leech (Passive) (Priest Pet Aura)
757{
759
760 bool Validate(SpellInfo const* /*spellInfo*/) override
761 {
763 }
764
765 bool CheckProc(ProcEventInfo& /*eventInfo*/)
766 {
768 return _procTarget != nullptr;
769 }
770
771 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
772 {
775 }
776
782
783 Unit* _procTarget = nullptr;
784};
785
786// -49821 - Mind Sear
788{
790
791 void FilterTargets(std::list<WorldObject*>& unitList)
792 {
793 unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetChannelObjectGuid()));
794 }
795
800};
801
802// -47580 - Pain and Suffering (dummy aura)
817
818// 47948 - Pain and Suffering (Proc)
820{
822
824 {
825 Unit* caster = GetCaster();
826 // Refresh Shadow Word: Pain on target
827 if (Unit* target = GetHitUnit())
828 {
829 if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, caster->GetGUID()))
830 {
831 aur->ChangeAmount(aur->CalculateAmount(aur->GetCaster()), false);
832 aur->CalculatePeriodic(caster, false, false);
833 aur->GetBase()->RefreshDuration();
834 }
835 }
836 }
837
842};
843
844// -47540 - Penance
846{
848
849 bool Load() override
850 {
851 return GetCaster()->GetTypeId() == TYPEID_PLAYER;
852 }
853
854 bool Validate(SpellInfo const* spellInfo) override
855 {
856 SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1);
857 if (!firstRankSpellInfo)
858 return false;
859
860 // can't use other spell than this penance due to spell_ranks dependency
861 if (!spellInfo->IsRankOf(firstRankSpellInfo))
862 return false;
863
864 uint8 rank = spellInfo->GetRank();
865 if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank, true))
866 return false;
867 if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank, true))
868 return false;
869
870 return true;
871 }
872
873 void HandleDummy(SpellEffIndex /*effIndex*/)
874 {
875 Unit* caster = GetCaster();
876 if (Unit* unitTarget = GetHitUnit())
877 {
878 if (!unitTarget->IsAlive())
879 return;
880
881 uint8 rank = GetSpellInfo()->GetRank();
882
883 if (caster->IsFriendlyTo(unitTarget))
884 caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank), TRIGGERED_DISALLOW_PROC_EVENTS);
885 else
886 caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank), TRIGGERED_DISALLOW_PROC_EVENTS);
887 }
888 }
889
891 {
892 Player* caster = GetCaster()->ToPlayer();
893 if (Unit* target = GetExplTargetUnit())
894 if (!caster->IsFriendlyTo(target))
895 {
896 if (!caster->IsValidAttackTarget(target))
898 if (!caster->isInFront(target))
900 }
901 return SPELL_CAST_OK;
902 }
903
909};
910
911// -17 - Power Word: Shield
913{
915
916 bool Validate(SpellInfo const* spellInfo) override
917 {
918 return ValidateSpellInfo({ spellInfo->ExcludeTargetAuraSpell });
919 }
920
922 {
923 if (Unit* target = GetHitUnit())
924 GetCaster()->CastSpell(target, GetSpellInfo()->ExcludeTargetAuraSpell, true);
925 }
926
931};
932
934{
936
937 bool Validate(SpellInfo const* /*spellInfo*/) override
938 {
939 return ValidateSpellInfo(
940 {
943 });
944 }
945
946 void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated)
947 {
948 canBeRecalculated = false;
949 if (Unit* caster = GetCaster())
950 {
951 // +80.68% from sp bonus
952 float bonus = 0.8068f;
953
954 // Borrowed Time
955 if (AuraEffect const* borrowedTime = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_BORROWED_TIME, EFFECT_1))
956 bonus += CalculatePct(1.0f, borrowedTime->GetAmount());
957
958 bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask());
959
960 // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :)
961 // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage
962 bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus);
963 bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo());
964
965 amount += int32(bonus);
966
967 // Twin Disciplines
968 if (AuraEffect const* twinDisciplines = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, GetCasterGUID()))
969 AddPct(amount, twinDisciplines->GetAmount());
970
971 // Focused Power
973 AddPct(amount, focusedPower->GetAmount());
974
975 // Arena - Dampening
976 if (AuraEffect const* auraEffArenaDampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0))
977 AddPct(amount, auraEffArenaDampening->GetAmount());
978 // Battleground - Dampening
979 else if (AuraEffect const* auraEffBattlegroudDampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0))
980 AddPct(amount, auraEffBattlegroudDampening->GetAmount());
981
982 // ICC buff
983 if (AuraEffect const* auraStrengthOfWrynn = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_STRENGTH_OF_WRYNN, EFFECT_2))
984 AddPct(amount, auraStrengthOfWrynn->GetAmount());
985 else if (AuraEffect const* auraHellscreamsWarsong = caster->GetAuraEffect(SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELLFAMILY_GENERIC, SPELL_ICON_ID_HELLSCREAM_WARSONG, EFFECT_2))
986 AddPct(amount, auraHellscreamsWarsong->GetAmount());
987 }
988 }
989
990 void ReflectDamage(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount)
991 {
992 Unit* target = GetTarget();
993 if (dmgInfo.GetAttacker() == target)
994 return;
995
996 // Don't try to reflect the reflect spell
998 return;
999
1001 {
1002 CastSpellExtraArgs args(aurEff);
1003 args.AddSpellBP0(CalculatePct(absorbAmount, talentAurEff->GetAmount()));
1005 }
1006 }
1007
1013};
1014
1015// 33110 - Prayer of Mending Heal
1017{
1019
1020 bool Validate(SpellInfo const* /*spellInfo*/) override
1021 {
1022 return ValidateSpellInfo(
1023 {
1028 });
1029 }
1030
1031 void HandleHeal(SpellEffIndex /*effIndex*/)
1032 {
1033 if (Unit* caster = GetOriginalCaster())
1034 {
1035 int32 heal = GetEffectValue();
1036 if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_PRIEST_T9_HEALING_2P, EFFECT_0))
1037 AddPct(heal, aurEff->GetAmount());
1038
1039 if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_TWIN_DISCIPLINE_R1, EFFECT_0))
1040 AddPct(heal, aurEff->GetAmount());
1041
1042 if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_SPIRITUAL_HEALING_R1, EFFECT_0))
1043 AddPct(heal, aurEff->GetAmount());
1044
1045 if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_DIVINE_PROVIDENCE_R1, EFFECT_0))
1046 AddPct(heal, aurEff->GetAmount());
1047
1048 SetEffectValue(heal);
1049 }
1050 }
1051
1056};
1057
1058// -139 - Renew
1060{
1062
1063 bool Load() override
1064 {
1065 return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
1066 }
1067
1068 bool Validate(SpellInfo const* /*spellInfo*/) override
1069 {
1071 }
1072
1074 {
1075 Unit* caster = GetCaster();
1076 if (!caster)
1077 return;
1078
1079 // Empowered Renew
1081 {
1082 int32 heal = aurEff->GetAmount();
1083 heal *= aurEff->GetTotalTicks();
1084
1085 CastSpellExtraArgs args(aurEff);
1086 args.AddSpellBP0(CalculatePct(heal, empoweredRenewAurEff->GetAmount()));
1088 }
1089 }
1090
1095};
1096
1097// 57989 - Shadowfiend Death
1099{
1101
1102 bool Validate(SpellInfo const* /*spellInfo*/) override
1103 {
1105 }
1106
1107 bool CheckProc(ProcEventInfo& eventInfo)
1108 {
1109 DamageInfo* damageInfo = eventInfo.GetDamageInfo();
1110 if (!damageInfo || !damageInfo->GetDamage())
1111 return false;
1112
1113 Unit* shadowfiend = eventInfo.GetActionTarget();
1114 if (!shadowfiend->GetOwner())
1115 return false;
1116
1117 return shadowfiend->HealthBelowPctDamaged(1, damageInfo->GetDamage());
1118 }
1119
1120 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1121 {
1123 Unit* caster = eventInfo.GetActionTarget()->GetOwner();
1124 caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA, aurEff);
1125 }
1126
1132};
1133
1134// -32379 - Shadow Word Death
1136{
1138
1140 {
1141 int32 damage = GetHitDamage();
1142
1143 // Pain and Suffering reduces damage
1145 AddPct(damage, aurEff->GetAmount());
1146
1148 args.AddSpellBP0(damage);
1150 }
1151
1156};
1157
1158// 15286 - Vampiric Embrace
1160{
1162
1163 bool Validate(SpellInfo const* /*spellInfo*/) override
1164 {
1166 }
1167
1168 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1169 {
1171 DamageInfo* damageInfo = eventInfo.GetDamageInfo();
1172 if (!damageInfo || !damageInfo->GetDamage())
1173 return;
1174
1175 int32 selfHeal = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount());
1176 int32 partyHeal = selfHeal / 5;
1177 CastSpellExtraArgs args(aurEff);
1178 args.AddSpellBP0(partyHeal);
1179 args.AddSpellMod(SPELLVALUE_BASE_POINT1, selfHeal);
1180 eventInfo.GetActor()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args);
1181 }
1182
1187};
1188
1189// -34914 - Vampiric Touch
1191{
1193
1194 bool Validate(SpellInfo const* /*spellInfo*/) override
1195 {
1196 return ValidateSpellInfo(
1197 {
1200 });
1201 }
1202
1203 bool CheckDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
1204 {
1205 return false;
1206 }
1207
1208 void HandleDispel(DispelInfo* /*dispelInfo*/)
1209 {
1210 if (Unit* caster = GetCaster())
1211 {
1212 if (Unit* target = GetUnitOwner())
1213 {
1214 if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
1215 {
1216 // backfire damage
1217 int32 bp = aurEff->GetAmount();
1218 bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp, DOT);
1219 bp *= 8;
1220
1221 CastSpellExtraArgs args(aurEff);
1222 args.AddSpellBP0(bp);
1223 caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args);
1224 }
1225 }
1226 }
1227 }
1228
1229 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1230 {
1232 eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff);
1233 }
1234
1242};
1243
1244// 28809 - Greater Heal
1246{
1248
1249 bool Validate(SpellInfo const* /*spellInfo*/) override
1250 {
1252 }
1253
1254 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1255 {
1257 eventInfo.GetActor()->CastSpell(eventInfo.GetActionTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, aurEff);
1258 }
1259
1264};
1265
1266// 37594 - Greater Heal Refund
1268{
1270
1271 bool Validate(SpellInfo const* /*spellInfo*/) override
1272 {
1274 }
1275
1276 bool CheckProc(ProcEventInfo& eventInfo)
1277 {
1278 if (HealInfo* healInfo = eventInfo.GetHealInfo())
1279 if (Unit* healTarget = healInfo->GetTarget())
1280 if (healInfo->GetEffectiveHeal())
1281 if (healTarget->GetHealth() >= healTarget->GetMaxHealth())
1282 return true;
1283
1284 return false;
1285 }
1286
1287 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
1288 {
1291 }
1292
1298};
1299
1300// 70770 - Item - Priest T10 Healer 2P Bonus
1302{
1304
1305 bool Validate(SpellInfo const* /*spellInfo*/) override
1306 {
1308 }
1309
1310 bool CheckProc(ProcEventInfo& eventInfo)
1311 {
1312 HealInfo* healInfo = eventInfo.GetHealInfo();
1313 return healInfo && healInfo->GetHeal();
1314 }
1315
1316 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1317 {
1319
1320 SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_BLESSED_HEALING);
1321 int32 amount = CalculatePct(static_cast<int32>(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount());
1322
1323 ASSERT(spellInfo->GetMaxTicks() > 0);
1324 amount /= spellInfo->GetMaxTicks();
1325
1326 Unit* caster = eventInfo.GetActor();
1327 Unit* target = eventInfo.GetActionTarget();
1328
1329 CastSpellExtraArgs args(aurEff);
1330 args.AddSpellBP0(amount);
1331 caster->CastSpell(target, SPELL_PRIEST_BLESSED_HEALING, args);
1332 }
1333
1339};
1340
1341// 10060 - Power Infusion
1343{
1345
1347 {
1348 if (Unit* target = GetExplTargetUnit())
1349 if (target->HasAura(SPELL_MAGE_ARCANE_POWER))
1351
1352 return SPELL_CAST_OK;
1353 }
1354
1359};
1360
1362{
1396}
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define ASSERT
Definition Errors.h:68
@ TYPEID_UNIT
Definition ObjectGuid.h:38
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
bool roll_chance_i(int chance)
Definition Random.h:59
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
Definition ScriptMgr.h:1130
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ EFFECT_2
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_HEAL
@ TARGET_UNIT_DEST_AREA_ALLY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ALLY
@ SPELLFAMILY_PRIEST
@ SPELLFAMILY_GENERIC
Powers
@ POWER_MANA
#define EFFECT_ALL
SpellCastResult
@ SPELL_FAILED_UNIT_NOT_INFRONT
@ SPELL_FAILED_AURA_BOUNCED
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_CAST_OK
@ AURA_REMOVE_BY_ENEMY_SPELL
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_ADD_PCT_MODIFIER
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_MOD_HEALING_DONE_PERCENT
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_SCHOOL_ABSORB
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ TRIGGERED_DISALLOW_PROC_EVENTS
Will ignore caster aura states including combat requirements and death state.
@ SPELLVALUE_BASE_POINT1
#define sSpellMgr
Definition SpellMgr.h:738
@ PROC_SPELL_TYPE_HEAL
Definition SpellMgr.h:203
@ PROC_SPELL_TYPE_DAMAGE
Definition SpellMgr.h:202
#define AuraProcFn(F)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define SpellCastFn(F)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define SpellHitFn(F)
#define AuraDispelFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ DOT
Definition Unit.h:355
T AddPct(T &base, U pct)
Definition Util.h:77
T CalculatePct(T base, U pct)
Definition Util.h:71
SpellInfo const * GetSpellInfo() const
SpellEffIndex GetEffIndex() const
uint32 GetTotalTicks() const
int32 GetAmount() const
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectAbsorbHandler > AfterEffectAbsorb
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Unit * GetCaster() const
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Unit * GetTarget() const
ObjectGuid GetCasterGUID() const
HookList< CheckProcHandler > DoCheckProc
HookList< AuraDispelHandler > AfterDispel
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
HookList< AuraProcHandler > DoPrepareProc
HookList< EffectApplyHandler > OnEffectApply
Unit * GetAttacker() const
Definition Unit.h:458
SpellInfo const * GetSpellInfo() const
Definition Unit.h:460
uint32 GetDamage() const
Definition Unit.h:464
uint32 GetHeal() const
Definition Unit.h:492
static Creature * ToCreature(Object *o)
Definition Object.h:186
static Unit * ToUnit(Object *o)
Definition Object.h:192
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
static Player * ToPlayer(Object *o)
Definition Object.h:180
bool operator()(WorldObject *obj) const
Powers const _power
PowerCheck(Powers const power)
HealInfo * GetHealInfo() const
Definition Unit.h:520
Unit * GetActionTarget() const
Definition Unit.h:509
uint32 GetSpellTypeMask() const
Definition Unit.h:512
SpellInfo const * GetSpellInfo() const
Definition Unit.cpp:268
Unit * GetActor()
Definition Unit.h:508
DamageInfo * GetDamageInfo() const
Definition Unit.h:519
Unit const * _caster
RaidCheck(Unit const *caster)
bool operator()(WorldObject *obj) const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
bool IsRankOf(SpellInfo const *spellInfo) const
uint32 GetMaxTicks() const
uint32 ExcludeTargetAuraSpell
Definition SpellInfo.h:315
flag96 SpellFamilyFlags
Definition SpellInfo.h:357
uint32 Id
Definition SpellInfo.h:289
uint8 GetRank() const
uint32 SpellIconID
Definition SpellInfo.h:349
HookList< CastHandler > AfterCast
HookList< CheckCastHandler > OnCheckCast
void SetEffectValue(int32 value)
int32 GetHitDamage() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
HookList< HitHandler > OnHit
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
HookList< EffectHandler > OnEffectLaunchTarget
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
virtual void UnSummon(uint32 msTime=0)
ObjectGuid GetSummonerGUID() const
Definition Unit.h:769
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4439
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
Definition Unit.cpp:4359
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
bool IsSummon() const
Definition Unit.h:882
uint32 GetHealth() const
Definition Unit.h:913
AuraEffect * GetAuraEffectOfRankedSpell(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
Definition Unit.cpp:4373
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:11892
uint32 CountPctFromMaxHealth(int32 pct) const
Definition Unit.h:922
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
Definition Unit.h:918
AuraEffect * GetDummyAuraEffect(SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
Definition Unit.cpp:4415
void RemoveMovementImpairingAuras(bool withRoot)
Definition Unit.cpp:4069
ObjectGuid GetTarget() const
Definition Unit.h:1797
uint8 GetLevel() const
Definition Unit.h:889
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition Object.cpp:2856
Unit * GetOwner() const
Definition Object.cpp:2180
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Definition Object.cpp:1366
bool IsFriendlyTo(WorldObject const *target) const
Definition Object.cpp:2801
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_pri_aq_3p_bonus)
void Register() override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_blessed_recovery)
bool Validate(SpellInfo const *) override
void HandleProcDummy(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProcDummy(AuraEffect const *, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_body_and_soul)
bool CheckProcTriggerSpell(AuraEffect const *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_pri_circle_of_healing)
void FilterTargets(std::list< WorldObject * > &targets)
void Register() override
PrepareAuraScript(spell_pri_dispersion)
bool Validate(SpellInfo const *) override
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
void Register() override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_divine_aegis)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
PrepareSpellScript(spell_pri_divine_hymn)
void Register() override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_glyph_of_dispel_magic)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing)
PrepareAuraScript(spell_pri_guardian_spirit)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
void Absorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_pri_holy_nova)
void Register() override
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void Register() override
PrepareSpellScript(spell_pri_hymn_of_hope)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_imp_shadowform)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_pri_improved_spirit_tap)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_item_t6_trinket)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void InitializeAmount(AuraEffect const *, AuraEffectHandleModes)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
void CheckDropCharge(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_lightwell_renew)
bool Load() override
bool Validate(SpellInfo const *) override
void Register() override
void HandleScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_pri_lightwell)
void Register() override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_pri_mana_leech)
bool CheckProc(ProcEventInfo &)
void FilterTargets(std::list< WorldObject * > &unitList)
PrepareSpellScript(spell_pri_mind_sear)
void Register() override
PrepareAuraScript(spell_pri_pain_and_suffering_dummy)
bool CheckDummy(AuraEffect const *, ProcEventInfo &)
void HandleEffectScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_pri_pain_and_suffering_proc)
bool Load() override
PrepareSpellScript(spell_pri_penance)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void Register() override
SpellCastResult CheckCast()
SpellCastResult CheckCast()
PrepareSpellScript(spell_pri_power_infusion)
void CalculateAmount(AuraEffect const *aurEff, int32 &amount, bool &canBeRecalculated)
PrepareAuraScript(spell_pri_power_word_shield_aura)
void ReflectDamage(AuraEffect *aurEff, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_pri_power_word_shield)
PrepareSpellScript(spell_pri_prayer_of_mending_heal)
bool Validate(SpellInfo const *) override
void HandleApplyEffect(AuraEffect const *aurEff, AuraEffectHandleModes)
PrepareAuraScript(spell_pri_renew)
bool Validate(SpellInfo const *) override
bool Load() override
void Register() override
PrepareSpellScript(spell_pri_shadow_word_death)
PrepareAuraScript(spell_pri_shadowfiend_death)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_pri_t10_heal_2p_bonus)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void Register() override
PrepareAuraScript(spell_pri_t3_4p_bonus)
PrepareAuraScript(spell_pri_t5_heal_2p_bonus)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &)
bool CheckProc(ProcEventInfo &eventInfo)
PrepareAuraScript(spell_pri_vampiric_embrace)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDispel(DispelInfo *)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool CheckDummy(AuraEffect const *, ProcEventInfo &)
PrepareAuraScript(spell_pri_vampiric_touch)
PriestSpells
MiscSpellIcons
void AddSC_priest_spell_scripts()
@ SPELL_GENERIC_ARENA_DAMPENING
@ SPELL_MAGE_ARCANE_POWER
@ SPELL_GENERIC_BATTLEGROUND_DAMPENING
@ SPELL_ICON_ID_HELLSCREAM_WARSONG
@ SPELL_ICON_ID_STRENGTH_OF_WRYNN
PriestMisc
@ PRIEST_LIGHTWELL_NPC_3
@ PRIEST_LIGHTWELL_NPC_2
@ PRIEST_LIGHTWELL_NPC_6
@ PRIEST_LIGHTWELL_NPC_4
@ PRIEST_LIGHTWELL_NPC_1
@ PRIEST_LIGHTWELL_NPC_5
@ SPELL_PRIEST_BLESSED_RECOVERY_R1
@ SPELL_PRIEST_DIVINE_BLESSING
@ SPELL_PRIEST_GLYPH_OF_LIGHTWELL
@ SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL
@ SPELL_PRIEST_MIND_FLAY_DAMAGE
@ SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED
@ SPELL_PRIEST_REFLECTIVE_SHIELD_R1
@ SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA
@ SPELL_PRIEST_ARMOR_OF_FAITH
@ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL
@ SPELL_PRIEST_LIGHTWELL_RENEW_R4
@ SPELL_PRIEST_LIGHTWELL_RENEW_R5
@ SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER
@ SPELL_PRIEST_DISPERSION_IMMUNITY
@ SPELL_PRIEST_DIVINE_AEGIS
@ SPELL_PRIEST_MANA_LEECH_PROC
@ SPELL_PRIEST_HOLY_NOVA_HEAL_R1
@ SPELL_PRIEST_TWIN_DISCIPLINE_R1
@ SPELL_PRIEST_ORACULAR_HEAL
@ SPELL_PRIEST_LIGHTWELL_RENEW_R3
@ SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL
@ SPELL_PRIEST_DISPERSION_MOD_POWER
@ SPELL_PRIEST_PENANCE_R1_DAMAGE
@ SPELL_PRIEST_DIVINE_WRATH
@ SPELL_PRIEST_SHADOW_WORD_DEATH_R1
@ SPELL_PRIEST_LIGHTWELL_RENEW_R1
@ SPELL_PRIEST_PENANCE_R1
@ SPELL_PRIEST_LIGHTWELL_CHARGES
@ SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING
@ SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL
@ SPELL_REPLENISHMENT
@ SPELL_PRIEST_LIGHTWELL_RENEW_R6
@ SPELL_PRIEST_ITEM_EFFICIENCY
@ SPELL_PRIEST_SHADOW_WORD_DEATH
@ SPELL_PRIEST_EMPOWERED_RENEW
@ SPELL_PRIEST_BLESSED_HEALING
@ SPELL_PRIEST_LIGHTWELL_RENEW_R2
@ SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL
@ SPELL_PRIEST_ABOLISH_DISEASE
@ SPELL_PRIEST_DIVINE_PROVIDENCE_R1
@ SPELL_PRIEST_T9_HEALING_2P
@ SPELL_PRIEST_SPIRITUAL_HEALING_R1
@ SPELL_PRIEST_MIND_BLAST_R1
@ SPELL_PRIEST_PENANCE_R1_HEAL
PriestSpellIcons
@ PRIEST_ICON_ID_FOCUSED_POWER
@ PRIEST_ICON_ID_BORROWED_TIME
@ PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT
@ PRIEST_ICON_ID_PAIN_AND_SUFFERING
CastSpellExtraArgs & AddSpellBP0(int32 val)
CastSpellExtraArgs & AddSpellMod(SpellValueMod mod, int32 val)
MiscSpells