TrinityCore
spell_paladin.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_PALADIN and SPELLFAMILY_GENERIC spells used by paladin players.
20 * Ordered alphabetically using scriptname.
21 * Scriptnames of files in this file should be prefixed with "spell_pal_".
22 */
23
24#include "ScriptMgr.h"
25#include "AreaTrigger.h"
26#include "AreaTriggerAI.h"
27#include "CommonPredicates.h"
28#include "Containers.h"
29#include "DB2Stores.h"
30#include "Group.h"
31#include "ObjectAccessor.h"
32#include "Player.h"
33#include "Random.h"
34#include "Spell.h"
35#include "SpellAuraEffects.h"
36#include "SpellHistory.h"
37#include "SpellMgr.h"
38#include "SpellScript.h"
39
41{
111
113{
119
121{
124
126{
132
134{
137
138// 31850 - Ardent Defender
140{
141 bool Validate(SpellInfo const* spellInfo) override
142 {
144 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
145 }
146
147 void HandleAbsorb(AuraEffect const* aurEff, DamageInfo const& dmgInfo, uint32& absorbAmount)
148 {
150
151 int32 targetHealthPercent = GetEffectInfo(EFFECT_1).CalcValue(GetTarget());
152 uint64 targetHealth = int32(GetTarget()->CountPctFromMaxHealth(targetHealthPercent));
153 if (GetTarget()->HealthBelowPct(targetHealthPercent))
154 {
155 // we are currently below desired health
156 // absorb everything and heal up
158 CastSpellExtraArgs(aurEff)
159 .AddSpellMod(SPELLVALUE_BASE_POINT0, int32(targetHealth - GetTarget()->GetHealth())));
160 }
161 else
162 {
163 // we are currently above desired health
164 // just absorb enough to reach that percentage
165 absorbAmount = dmgInfo.GetDamage() - int32(GetTarget()->GetHealth() - targetHealth);
166 }
167
168 Remove();
169 }
170
171 void Register() override
172 {
174 }
175};
176
177// 267344 - Art of War
179{
180 bool Validate(SpellInfo const* /*spellInfo*/) override
181 {
183 }
184
185 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
186 {
187 return roll_chance_i(aurEff->GetAmount());
188 }
189
190 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
191 {
194 }
195
196 void Register() override
197 {
200 }
201};
202
203// 19042 - Ashen Hallow
205{
207
209 {
210 if (Unit* caster = at->GetCaster())
211 {
212 if (AuraEffect const* ashen = caster->GetAuraEffect(SPELL_PALADIN_ASHEN_HALLOW, EFFECT_1))
213 _period = Milliseconds(ashen->GetPeriod());
214 }
215 }
216
217 void OnCreate(Spell const* /*creatingSpell*/) override
218 {
221 }
222
223 void OnUpdate(uint32 diff) override
224 {
226
227 while (_refreshTimer <= 0s)
228 {
229 if (Unit* caster = at->GetCaster())
230 {
231 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_HEAL);
232 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_DAMAGE);
233 }
234
236
238 }
239 }
240
241 void OnUnitEnter(Unit* unit) override
242 {
243 if (unit->GetGUID() == at->GetCasterGuid())
245 }
246
247 void OnUnitExit(Unit* unit) override
248 {
249 if (unit->GetGUID() == at->GetCasterGuid())
251 }
252
253private:
256};
257
258// 248033 - Awakening
260{
261 bool Validate(SpellInfo const* spellInfo) override
262 {
264 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
265 }
266
267 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
268 {
269 return roll_chance_i(aurEff->GetAmount());
270 }
271
272 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
273 {
274 Milliseconds extraDuration = 0ms;
275 if (AuraEffect const* durationEffect = GetEffect(EFFECT_1))
276 extraDuration = Seconds(durationEffect->GetAmount());
277
278 if (Aura* avengingWrath = GetTarget()->GetAura(SPELL_PALADIN_AVENGING_WRATH))
279 {
280 avengingWrath->SetDuration(avengingWrath->GetDuration() + extraDuration.count());
281 avengingWrath->SetMaxDuration(avengingWrath->GetMaxDuration() + extraDuration.count());
282 }
283 else
286 .SetTriggeringSpell(eventInfo.GetProcSpell())
287 .AddSpellMod(SPELLVALUE_DURATION, extraDuration.count()));
288 }
289
290 void Register() override
291 {
294 }
295};
296
297// 1022 - Blessing of Protection
298// 204018 - Blessing of Spellwarding
300{
301 bool Validate(SpellInfo const* spellInfo) override
302 {
303 return ValidateSpellInfo(
304 {
306 // uncomment when we have serverside only spells
307 //SPELL_PALADIN_IMMUNE_SHIELD_MARKER
309 }
310
312 {
313 Unit* target = GetExplTargetUnit();
314 if (!target || target->HasAura(SPELL_PALADIN_FORBEARANCE))
316
317 return SPELL_CAST_OK;
318 }
319
321 {
322 if (Unit* target = GetHitUnit())
323 {
326 }
327 }
328
329 void Register() override
330 {
333 }
334};
335
336// 115750 - Blinding Light
338{
339 bool Validate(SpellInfo const* /*spellInfo*/) override
340 {
342 }
343
344 void HandleDummy(SpellEffIndex /*effIndex*/)
345 {
346 if (Unit* target = GetHitUnit())
348 }
349
350 void Register() override
351 {
353 }
354};
355
356// 26573 - Consecration
358{
359 bool Validate(SpellInfo const* /*spellInfo*/) override
360 {
361 return ValidateSpellInfo
362 ({
364 // validate for areatrigger_pal_consecration
368 });
369 }
370
371 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
372 {
375 }
376
377 void Register() override
378 {
380 }
381};
382
383// 26573 - Consecration
384// 9228 - AreaTriggerId
386{
388
389 void OnUnitEnter(Unit* unit) override
390 {
391 if (Unit* caster = at->GetCaster())
392 {
393 // 243597 is also being cast as protection, but CreateObject is not sent, either serverside areatrigger for this aura or unused - also no visual is seen
394 if (unit == caster && caster->IsPlayer() && caster->ToPlayer()->GetPrimarySpecialization() == ChrSpecialization::PaladinProtection)
395 caster->CastSpell(caster, SPELL_PALADIN_CONSECRATION_PROTECTION_AURA);
396
397 if (caster->IsValidAttackTarget(unit))
398 if (caster->HasAura(SPELL_PALADIN_CONSECRATED_GROUND_PASSIVE))
399 caster->CastSpell(unit, SPELL_PALADIN_CONSECRATED_GROUND_SLOW);
400 }
401 }
402
403 void OnUnitExit(Unit* unit) override
404 {
405 if (at->GetCasterGuid() == unit->GetGUID())
407
409 }
410};
411
412// 196926 - Crusader Might
414{
415 bool Validate(SpellInfo const* /*spellInfo*/) override
416 {
418 }
419
420 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
421 {
423 }
424
425 void Register() override
426 {
428 }
429};
430
431// 406833 - Crusading Strikes
433{
434 bool Validate(SpellInfo const* /*spellInfo*/) override
435 {
437 }
438
440 {
441 if (GetStackAmount() == 2)
442 {
444
445 // this spell has weird proc order dependency set up in db2 data so we do removal manually
446 Remove();
447 }
448 }
449
450 void Register() override
451 {
453 }
454};
455
456// 223817 - Divine Purpose
458{
459 bool Validate(SpellInfo const* /*spellInfo*/) override
460 {
462 }
463
464 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
465 {
466 Spell const* procSpell = eventInfo.GetProcSpell();
467 if (!procSpell)
468 return false;
469
470 if (!procSpell->HasPowerTypeCost(POWER_HOLY_POWER))
471 return false;
472
473 return roll_chance_i(aurEff->GetAmount());
474 }
475
476 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
477 {
479 CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetTriggeringSpell(eventInfo.GetProcSpell()));
480 }
481
482 void Register() override
483 {
486 }
487};
488
489// 642 - Divine Shield
491{
492 bool Validate(SpellInfo const* spellInfo) override
493 {
494 return ValidateSpellInfo(
495 {
499 // uncomment when we have serverside only spells
500 //SPELL_PALADIN_IMMUNE_SHIELD_MARKER
502 }
503
505 {
508
509 return SPELL_CAST_OK;
510 }
511
513 {
516 }
517
519 {
520 Unit* caster = GetCaster();
521 caster->CastSpell(caster, SPELL_PALADIN_FORBEARANCE, true);
522 caster->CastSpell(caster, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, true);
523 }
524
525 void Register() override
526 {
530 }
531};
532
533// 190784 - Divine Steed
535{
536 bool Validate(SpellInfo const* /*spellInfo*/) override
537 {
538 return ValidateSpellInfo(
539 {
548 });
549 }
550
552 {
553 Unit* caster = GetCaster();
554
556 switch (caster->GetRace())
557 {
558 case RACE_HUMAN:
560 break;
561 case RACE_DWARF:
563 break;
564 case RACE_DRAENEI:
566 break;
569 break;
572 break;
573 case RACE_BLOODELF:
575 break;
576 case RACE_TAUREN:
578 break;
581 break;
582 default:
583 break;
584 }
585
586 caster->CastSpell(caster, spellId, true);
587 }
588
589 void Register() override
590 {
592 }
593};
594
595// 53385 - Divine Storm
597{
598 bool Validate(SpellInfo const* /*spellInfo*/) override
599 {
601 }
602
604 {
606 }
607
608 void Register() override
609 {
611 }
612};
613
614// 205191 - Eye for an Eye
616{
617 bool Validate(SpellInfo const* /*spellInfo*/) override
618 {
620 }
621
622 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
623 {
625 }
626
627 void Register() override
628 {
630 }
631};
632
633// 234299 - Fist of Justice
635{
636 bool Validate(SpellInfo const* /*spellInfo*/) override
637 {
639 }
640
641 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
642 {
643 if (Spell const* procSpell = eventInfo.GetProcSpell())
644 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
645
646 return false;
647 }
648
649 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
650 {
651 int32 value = aurEff->GetAmount() / 10;
652
654 }
655
656 void Register() override
657 {
660 }
661};
662
663// -85043 - Grand Crusader
665{
666 bool Validate(SpellInfo const* /*spellInfo*/) override
667 {
669 }
670
671 bool CheckProc(ProcEventInfo& /*eventInfo*/)
672 {
673 return GetTarget()->GetTypeId() == TYPEID_PLAYER;
674 }
675
676 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
677 {
679 }
680
681 void Register() override
682 {
685 }
686};
687
688// 54968 - Glyph of Holy Light
690{
691 void FilterTargets(std::list<WorldObject*>& targets)
692 {
693 uint32 const maxTargets = GetSpellInfo()->MaxAffectedTargets;
694
695 if (targets.size() > maxTargets)
696 {
698 targets.resize(maxTargets);
699 }
700 }
701
702 void Register() override
703 {
705 }
706};
707
708// 53595 - Hammer of the Righteous
710{
711 bool Validate(SpellInfo const* /*spellInfo*/) override
712 {
713 return ValidateSpellInfo
714 ({
717 });
718 }
719
720 void HandleAoEHit(SpellEffIndex /*effIndex*/)
721 {
724 }
725
726 void Register() override
727 {
729 }
730};
731
732// 6940 - Hand of Sacrifice
734{
735public:
737 {
738 remainingAmount = 0;
739 }
740
741private:
743
744 bool Load() override
745 {
746 if (Unit* caster = GetCaster())
747 {
748 remainingAmount = caster->GetMaxHealth();
749 return true;
750 }
751 return false;
752 }
753
754 void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
755 {
756 remainingAmount -= splitAmount;
757
758 if (remainingAmount <= 0)
759 {
761 }
762 }
763
764 void Register() override
765 {
767 }
768};
769
770// 54149 - Infusion of Light
772{
773 static constexpr flag128 HolyLightSpellClassMask = { 0, 0, 0x400 };
774
775 bool Validate(SpellInfo const* /*spellInfo*/) override
776 {
778 }
779
780 bool CheckFlashOfLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
781 {
782 return eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->m_appliedMods.find(GetAura()) != eventInfo.GetProcSpell()->m_appliedMods.end();
783 }
784
785 bool CheckHolyLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
786 {
788 }
789
790 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
791 {
793 CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetTriggeringSpell(eventInfo.GetProcSpell()));
794 }
795
796 void Register() override
797 {
800
803 }
804};
805
806// 327193 - Moment of Glory
808{
809 bool Validate(SpellInfo const* /*spellInfo*/) override
810 {
812 }
813
815 {
817 }
818
819 void Register() override
820 {
822 }
823};
824
825// 20271/275779/275773 - Judgement (Retribution/Protection/Holy)
827{
828 bool Validate(SpellInfo const* /*spellInfo*/) override
829 {
830 return ValidateSpellInfo
831 ({
836 });
837 }
838
840 {
841 Unit* caster = GetCaster();
842
845
848 }
849
850 void Register() override
851 {
853 }
854};
855
856// 114165 - Holy Prism
858{
859 bool Validate(SpellInfo const* /*spellInfo*/) override
860 {
862 }
863
864 void HandleDummy(SpellEffIndex /*effIndex*/)
865 {
866 if (GetCaster()->IsFriendlyTo(GetHitUnit()))
868 else
870
872 }
873
874 void Register() override
875 {
877 }
878};
879
880// 114852 - Holy Prism (Damage)
881// 114871 - Holy Prism (Heal)
883{
884 bool Validate(SpellInfo const* /*spellInfo*/) override
885 {
887 }
888
889 void SaveTargetGuid(SpellEffIndex /*effIndex*/)
890 {
892 }
893
894 void FilterTargets(std::list<WorldObject*>& targets)
895 {
896 uint8 const maxTargets = 5;
897
898 if (targets.size() > maxTargets)
899 {
901 {
903 targets.resize(maxTargets);
904 }
905 else
906 Trinity::Containers::RandomResize(targets, maxTargets);
907 }
908
909 _sharedTargets = targets;
910 }
911
912 void ShareTargets(std::list<WorldObject*>& targets)
913 {
914 targets = _sharedTargets;
915 }
916
917 void HandleScript(SpellEffIndex /*effIndex*/)
918 {
919 if (Unit* initialTarget = ObjectAccessor::GetUnit(*GetCaster(), _targetGUID))
920 initialTarget->CastSpell(GetHitUnit(), SPELL_PALADIN_HOLY_PRISM_AREA_BEAM_VISUAL, true);
921 }
922
923 void Register() override
924 {
929
931
934 }
935
936private:
937 std::list<WorldObject*> _sharedTargets;
939};
940
941// 20473 - Holy Shock
943{
944 bool Validate(SpellInfo const* /*spellInfo*/) override
945 {
946 return ValidateSpellInfo
947 ({
951 });
952 }
953
955 {
956 Unit* caster = GetCaster();
957
958 if (Unit* target = GetExplTargetUnit())
959 {
960 if (!caster->IsFriendlyTo(target))
961 {
962 if (!caster->IsValidAttackTarget(target))
964
965 if (!caster->isInFront(target))
967 }
968 }
969 else
971
972 return SPELL_CAST_OK;
973 }
974
975 void HandleDummy(SpellEffIndex /*effIndex*/)
976 {
977 Unit* caster = GetCaster();
978
979 if (Unit* unitTarget = GetHitUnit())
980 {
981 if (caster->IsFriendlyTo(unitTarget))
983 else
984 caster->CastSpell(unitTarget, SPELL_PALADIN_HOLY_SHOCK_DAMAGE, GetSpell());
985 }
986 }
987
988 void Register() override
989 {
992 }
993};
994
995// 25912 - Holy Shock
997{
998 bool Validate(SpellInfo const*) override
999 {
1002 }
1003
1005 {
1007 }
1008
1009 void Register() override
1010 {
1012 }
1013};
1014
1015// 25914 - Holy Shock
1017{
1018 bool Validate(SpellInfo const*) override
1019 {
1022 }
1023
1025 {
1027 }
1028
1029 void Register() override
1030 {
1032 }
1033};
1034
1035// 37705 - Healing Discount
1037{
1038 bool Validate(SpellInfo const* /*spellInfo*/) override
1039 {
1041 }
1042
1043 void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
1044 {
1047 }
1048
1049 void Register() override
1050 {
1052 }
1053};
1054
1055// 40470 - Paladin Tier 6 Trinket
1057{
1058 bool Validate(SpellInfo const* /*spellInfo*/) override
1059 {
1060 return ValidateSpellInfo(
1061 {
1064 });
1065 }
1066
1067 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1068 {
1070 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
1071 if (!spellInfo)
1072 return;
1073
1074 uint32 spellId;
1075 int32 chance;
1076
1077 // Holy Light & Flash of Light
1078 if (spellInfo->SpellFamilyFlags[0] & 0xC0000000)
1079 {
1081 chance = 15;
1082 }
1083 // Judgements
1084 else if (spellInfo->SpellFamilyFlags[0] & 0x00800000)
1085 {
1087 chance = 50;
1088 }
1089 else
1090 return;
1091
1092 if (roll_chance_i(chance))
1093 eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff);
1094 }
1095
1096 void Register() override
1097 {
1099 }
1100};
1101
1102// 633 - Lay on Hands
1104{
1105 bool Validate(SpellInfo const* spellInfo) override
1106 {
1107 return ValidateSpellInfo(
1108 {
1110 // uncomment when we have serverside only spells
1111 //SPELL_PALADIN_IMMUNE_SHIELD_MARKER
1113 }
1114
1116 {
1117 Unit* target = GetExplTargetUnit();
1118 if (!target || target->HasAura(SPELL_PALADIN_FORBEARANCE))
1120
1121 return SPELL_CAST_OK;
1122 }
1123
1125 {
1126 if (Unit* target = GetHitUnit())
1127 {
1130 }
1131 }
1132
1133 void Register() override
1134 {
1137 }
1138};
1139
1140// 53651 - Light's Beacon - Beacon of Light
1142{
1143 bool Validate(SpellInfo const* /*spellInfo*/) override
1144 {
1146 }
1147
1148 bool CheckProc(ProcEventInfo& eventInfo)
1149 {
1150 if (!eventInfo.GetActionTarget())
1151 return false;
1152 if (eventInfo.GetActionTarget()->HasAura(SPELL_PALADIN_BEACON_OF_LIGHT, eventInfo.GetActor()->GetGUID()))
1153 return false;
1154 return true;
1155 }
1156
1157 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1158 {
1160
1161 HealInfo* healInfo = eventInfo.GetHealInfo();
1162 if (!healInfo || !healInfo->GetHeal())
1163 return;
1164
1165 uint32 heal = CalculatePct(healInfo->GetHeal(), aurEff->GetAmount());
1166
1167 Unit::AuraList const& auras = GetCaster()->GetSingleCastAuras();
1168 for (Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
1169 {
1170 if ((*itr)->GetId() == SPELL_PALADIN_BEACON_OF_LIGHT)
1171 {
1172 std::vector<AuraApplication*> applications;
1173 (*itr)->GetApplicationVector(applications);
1174 if (!applications.empty())
1175 {
1176 CastSpellExtraArgs args(aurEff);
1178 eventInfo.GetActor()->CastSpell(applications.front()->GetTarget(), SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, args);
1179 }
1180 return;
1181 }
1182 }
1183 }
1184
1185 void Register() override
1186 {
1189 }
1190};
1191
1192// 122773 - Light's Hammer
1194{
1195 bool Validate(SpellInfo const* /*spellInfo*/) override
1196 {
1197 return ValidateSpellInfo
1198 ({
1201 });
1202 }
1203
1205 {
1206 for (SpellLogEffectGenericVictimParams const& summonedObject : GetSpell()->GetExecuteLogEffectTargets(SPELL_EFFECT_SUMMON, &SpellLogEffect::GenericVictimTargets))
1207 {
1208 if (Unit* hammer = ObjectAccessor::GetUnit(*GetCaster(), summonedObject.Victim))
1209 {
1210 hammer->CastSpell(hammer, SPELL_PALADIN_LIGHT_HAMMER_COSMETIC,
1212 hammer->CastSpell(hammer, SPELL_PALADIN_LIGHT_HAMMER_PERIODIC,
1214 }
1215 }
1216 }
1217
1218 void Register() override
1219 {
1221 }
1222};
1223
1224// 114918 - Light's Hammer (Periodic)
1226{
1227 bool Validate(SpellInfo const* /*spellInfo*/) override
1228 {
1229 return ValidateSpellInfo
1230 ({
1233 });
1234 }
1235
1236 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
1237 {
1238 Unit* lightHammer = GetTarget();
1239 if (Unit* originalCaster = lightHammer->GetOwner())
1240 {
1241 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1242 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_HEALING, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1243 }
1244 }
1245
1246 void Register() override
1247 {
1249 }
1250};
1251
1252// 204074 - Righteous Protector
1254{
1255 bool Validate(SpellInfo const* /*spellInfo*/) override
1256 {
1258 }
1259
1260 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1261 {
1262 if (SpellInfo const* procSpell = eventInfo.GetSpellInfo())
1263 _baseHolyPowerCost = procSpell->CalcPowerCost(POWER_HOLY_POWER, false, eventInfo.GetActor(), eventInfo.GetSchoolMask());
1264 else
1265 _baseHolyPowerCost.reset();
1266
1267 return _baseHolyPowerCost.has_value();
1268 }
1269
1270 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
1271 {
1272 int32 value = aurEff->GetAmount() * 100 * _baseHolyPowerCost->Amount;
1273
1276 }
1277
1278 void Register() override
1279 {
1282 }
1283
1285};
1286
1287// 267610 - Righteous Verdict
1289{
1290 bool Validate(SpellInfo const* /*spellEntry*/) override
1291 {
1293 }
1294
1295 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
1296 {
1297 procInfo.GetActor()->CastSpell(procInfo.GetActor(), SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA, true);
1298 }
1299
1300 void Register() override
1301 {
1303 }
1304};
1305
1306// 85804 - Selfless Healer
1308{
1309 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1310 {
1311 if (Spell const* procSpell = eventInfo.GetProcSpell())
1312 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
1313
1314 return false;
1315 }
1316
1317 void Register() override
1318 {
1320 }
1321};
1322
1323// 53600 - Shield of the Righteous
1325{
1326 bool Validate(SpellInfo const* /*spellInfo*/) override
1327 {
1329 }
1330
1332 {
1334 }
1335
1336 void Register() override
1337 {
1339 }
1340};
1341
1342// 184662 - Shield of Vengeance
1344{
1345 bool Validate(SpellInfo const* spellInfo) override
1346 {
1348 }
1349
1350 void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
1351 {
1352 amount = CalculatePct(GetUnitOwner()->GetMaxHealth(), GetEffectInfo(EFFECT_1).CalcValue());
1353 if (Player const* player = GetUnitOwner()->ToPlayer())
1354 AddPct(amount, player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + player->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
1355
1356 _initialAmount = amount;
1357 }
1358
1359 void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
1360 {
1363 }
1364
1365 void Register() override
1366 {
1369 }
1370
1372};
1373
1374// 85256 - Templar's Verdict
1376{
1377 bool Validate(SpellInfo const* /*spellEntry*/) override
1378 {
1380 }
1381
1383 {
1385 }
1386
1387 void Register() override
1388 {
1390 }
1391};
1392
1393// 28789 - Holy Power
1395{
1396 bool Validate(SpellInfo const* /*spellInfo*/) override
1397 {
1398 return ValidateSpellInfo(
1399 {
1404 });
1405 }
1406
1407 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1408 {
1410
1411 uint32 spellId;
1412 Unit* caster = eventInfo.GetActor();
1413 Unit* target = eventInfo.GetProcTarget();
1414
1415 switch (target->GetClass())
1416 {
1417 case CLASS_PALADIN:
1418 case CLASS_PRIEST:
1419 case CLASS_SHAMAN:
1420 case CLASS_DRUID:
1422 break;
1423 case CLASS_MAGE:
1424 case CLASS_WARLOCK:
1426 break;
1427 case CLASS_HUNTER:
1428 case CLASS_ROGUE:
1430 break;
1431 case CLASS_WARRIOR:
1433 break;
1434 default:
1435 return;
1436 }
1437
1438 caster->CastSpell(target, spellId, aurEff);
1439 }
1440
1441 void Register() override
1442 {
1444 }
1445};
1446
1447// 64890 - Item - Paladin T8 Holy 2P Bonus
1449{
1450 bool Validate(SpellInfo const* /*spellInfo*/) override
1451 {
1453 }
1454
1455 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1456 {
1458
1459 HealInfo* healInfo = eventInfo.GetHealInfo();
1460 if (!healInfo || !healInfo->GetHeal())
1461 return;
1462
1463 Unit* caster = eventInfo.GetActor();
1464 Unit* target = eventInfo.GetProcTarget();
1465
1466 SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_HOLY_MENDING, GetCastDifficulty());
1467 int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount());
1468
1469 ASSERT(spellInfo->GetMaxTicks() > 0);
1470 amount /= spellInfo->GetMaxTicks();
1471
1472 CastSpellExtraArgs args(aurEff);
1473 args.AddSpellBP0(amount);
1474 caster->CastSpell(target, SPELL_PALADIN_HOLY_MENDING, args);
1475 }
1476
1477 void Register() override
1478 {
1480 }
1481};
1482
1483// 405547 - Paladin Protection 10.1 Class Set 2pc
1485{
1486 bool Validate(SpellInfo const* /*spellInfo*/) override
1487 {
1489 }
1490
1491 void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
1492 {
1494
1495 Unit* caster = procInfo.GetActor();
1496 uint32 ticks = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE, DIFFICULTY_NONE)->GetMaxTicks();
1497 uint32 damage = CalculatePct(procInfo.GetDamageInfo()->GetOriginalDamage(), aurEff->GetAmount()) / ticks;
1498
1500 .SetTriggeringSpell(procInfo.GetProcSpell())
1502 }
1503
1504 void Register() override
1505 {
1507 }
1508};
1509
1510// 408461 - Heartfire
1512{
1513 bool Validate(SpellInfo const* /*spellInfo*/) override
1514 {
1516 }
1517
1518 bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& procInfo)
1519 {
1520 return procInfo.GetDamageInfo() && procInfo.GetSpellInfo() && procInfo.GetSpellInfo()->HasLabel(SPELL_LABEL_PALADIN_T30_2P_HEARTFIRE);
1521 }
1522
1523 void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
1524 {
1526 .SetTriggeringSpell(procInfo.GetProcSpell())
1528 }
1529
1530 void Register() override
1531 {
1534 }
1535};
1536
1537// 269569 - Zeal
1539{
1540 bool Validate(SpellInfo const* /*spellInfo*/) override
1541 {
1543 }
1544
1545 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
1546 {
1547 Unit* target = GetTarget();
1549
1551 }
1552
1553 void Register() override
1554 {
1556 }
1557};
1558
1560{
1606}
DB2Storage< SpellVisualEntry > sSpellVisualStore("SpellVisual.db2", &SpellVisualLoadInfo::Instance)
DB2Storage< SpellVisualKitEntry > sSpellVisualKitStore("SpellVisualKit.db2", &SpellVisualKitLoadInfo::Instance)
@ DIFFICULTY_NONE
Definition: DBCEnums.h:874
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
#define ASSERT
Definition: Errors.h:68
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
@ RACE_DARK_IRON_DWARF
Definition: RaceMask.h:61
@ RACE_LIGHTFORGED_DRAENEI
Definition: RaceMask.h:57
@ RACE_DRAENEI
Definition: RaceMask.h:38
@ RACE_ZANDALARI_TROLL
Definition: RaceMask.h:58
@ RACE_BLOODELF
Definition: RaceMask.h:37
@ RACE_DWARF
Definition: RaceMask.h:30
@ RACE_HUMAN
Definition: RaceMask.h:28
@ RACE_TAUREN
Definition: RaceMask.h:33
bool roll_chance_i(int chance)
Definition: Random.h:59
#define RegisterAreaTriggerAI(ai_name)
Definition: ScriptMgr.h:1416
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_1
Definition: SharedDefines.h:31
@ EFFECT_0
Definition: SharedDefines.h:30
@ EFFECT_2
Definition: SharedDefines.h:32
@ CLASS_HUNTER
@ CLASS_DRUID
@ CLASS_SHAMAN
@ CLASS_PRIEST
@ CLASS_WARRIOR
@ CLASS_WARLOCK
@ CLASS_MAGE
@ CLASS_PALADIN
@ CLASS_ROGUE
@ TARGET_UNIT_DEST_AREA_ALLY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SUMMON
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ POWER_HOLY_POWER
SpellCastResult
@ SPELL_FAILED_UNIT_NOT_INFRONT
@ SPELL_FAILED_TARGET_AURASTATE
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_CAST_OK
@ SPELLFAMILY_PALADIN
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_ADD_PCT_MODIFIER
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_ADD_FLAT_MODIFIER
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_VERSATILITY
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_DUMMY
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
Definition: SpellDefines.h:266
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore Spell and Category cooldowns.
Definition: SpellDefines.h:248
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
Definition: SpellDefines.h:252
@ SPELLVALUE_AURA_STACK
Definition: SpellDefines.h:231
@ SPELLVALUE_BASE_POINT0
Definition: SpellDefines.h:196
@ SPELLVALUE_DURATION
Definition: SpellDefines.h:234
#define sSpellMgr
Definition: SpellMgr.h:849
#define SpellCheckCastFn(F)
Definition: SpellScript.h:830
#define AuraEffectProcFn(F, I, N)
Definition: SpellScript.h:2160
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define AuraEffectCalcAmountFn(F, I, N)
Definition: SpellScript.h:2058
#define SpellObjectAreaTargetSelectFn(F, I, N)
Definition: SpellScript.h:864
#define AuraEffectPeriodicFn(F, I, N)
Definition: SpellScript.h:2046
#define AuraCheckEffectProcFn(F, I, N)
Definition: SpellScript.h:2136
#define SpellCastFn(F)
Definition: SpellScript.h:825
#define SPELL_EFFECT_ANY
Definition: SpellScript.h:58
#define AuraEffectApplyFn(F, I, N, M)
Definition: SpellScript.h:2029
#define AuraEffectSplitFn(F, I)
Definition: SpellScript.h:2124
#define AuraEffectAbsorbOverkillFn(F, I)
Definition: SpellScript.h:2091
#define AuraCheckProcFn(F)
Definition: SpellScript.h:2130
#define SpellHitFn(F)
Definition: SpellScript.h:854
@ CR_VERSATILITY_DAMAGE_DONE
Definition: Unit.h:339
T AddPct(T &base, U pct)
Definition: Util.h:85
T CalculatePct(T base, U pct)
Definition: Util.h:72
AreaTrigger *const at
Definition: AreaTriggerAI.h:33
ObjectGuid const & GetCasterGuid() const
Definition: AreaTrigger.h:143
Unit * GetCaster() const
int32 GetAmount() const
void PreventDefaultAction()
HookList< CheckEffectProcHandler > DoCheckEffectProc
Definition: SpellScript.h:2135
HookList< EffectPeriodicHandler > OnEffectPeriodic
Definition: SpellScript.h:2045
HookList< EffectApplyHandler > AfterEffectApply
Definition: SpellScript.h:2028
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Definition: SpellScript.h:2057
Unit * GetCaster() const
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Definition: SpellScript.h:2089
Aura * GetAura() const
Unit * GetTarget() const
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
Definition: SpellScript.h:2129
HookList< EffectApplyHandler > OnEffectRemove
Definition: SpellScript.h:2035
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
Definition: SpellScript.h:2155
Unit * GetUnitOwner() const
uint8 GetStackAmount() const
HookList< EffectAbsorbHandler > OnEffectSplit
Definition: SpellScript.h:2123
uint32 GetOriginalDamage() const
Definition: Unit.h:447
uint32 GetDamage() const
Definition: Unit.h:446
Definition: Unit.h:456
uint32 GetHeal() const
Definition: Unit.h:476
bool IsPlayer() const
Definition: Object.h:212
TypeID GetTypeId() const
Definition: Object.h:173
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
HealInfo * GetHealInfo() const
Definition: Unit.h:506
SpellSchoolMask GetSchoolMask() const
Definition: Unit.cpp:291
Unit * GetActionTarget() const
Definition: Unit.h:494
Spell const * GetProcSpell() const
Definition: Unit.h:508
SpellInfo const * GetSpellInfo() const
Definition: Unit.cpp:280
DamageInfo * GetDamageInfo() const
Definition: Unit.h:505
Unit * GetProcTarget() const
Definition: Unit.h:495
Unit * GetActor() const
Definition: Unit.h:493
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
Definition: SpellInfo.cpp:495
void ResetCooldown(uint32 spellId, bool update=false)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
uint32 GetMaxTicks() const
Definition: SpellInfo.cpp:3823
uint32 ExcludeTargetAuraSpell
Definition: SpellInfo.h:360
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
Definition: SpellInfo.cpp:1795
uint32 const Id
Definition: SpellInfo.h:325
flag128 SpellFamilyFlags
Definition: SpellInfo.h:409
uint32 MaxAffectedTargets
Definition: SpellInfo.h:407
uint32 ExcludeCasterAuraSpell
Definition: SpellInfo.h:359
bool HasLabel(uint32 labelId) const
Definition: SpellInfo.cpp:4937
uint32 m_scriptSpellId
Definition: SpellScript.h:134
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
Definition: SpellScript.h:173
bool IsHitCrit() const
HookList< CastHandler > AfterCast
Definition: SpellScript.h:824
HookList< CheckCastHandler > OnCheckCast
Definition: SpellScript.h:829
Unit * GetCaster() const
HookList< HitHandler > AfterHit
Definition: SpellScript.h:852
HookList< HitHandler > OnHit
Definition: SpellScript.h:850
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
HookList< CastHandler > OnCast
Definition: SpellScript.h:822
Spell * GetSpell() const
Definition: SpellScript.h:987
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Definition: SpellScript.h:863
Definition: Spell.h:255
bool HasPowerTypeCost(Powers power) const
Definition: Spell.cpp:7953
UsedSpellMods m_appliedMods
Definition: Spell.h:610
Binary predicate for sorting Units based on percent value of health.
Definition: Unit.h:627
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3685
uint8 GetClass() const
Definition: Unit.h:752
virtual bool HasSpell(uint32) const
Definition: Unit.h:1069
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
Definition: Unit.cpp:11674
std::forward_list< Aura * > AuraList
Definition: Unit.h:645
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
Definition: Unit.cpp:11711
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition: Unit.cpp:4664
SpellHistory * GetSpellHistory()
Definition: Unit.h:1457
AuraList & GetSingleCastAuras()
Definition: Unit.h:1323
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
uint8 GetRace() const
Definition: Unit.h:749
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition: Object.cpp:2991
Unit * GetOwner() const
Definition: Object.cpp:2229
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Definition: Object.cpp:1321
bool IsFriendlyTo(WorldObject const *target) const
Definition: Object.cpp:2865
void HandleAbsorb(AuraEffect const *aurEff, DamageInfo const &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *spellInfo) override
void Register() override
bool Validate(SpellInfo const *) override
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &)
void HandleProc(AuraEffect *, ProcEventInfo &)
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *spellInfo) override
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &)
void Register() override
bool Validate(SpellInfo const *spellInfo) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *)
void Register() override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
void HandleEffectProc(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void Register() override
bool Validate(SpellInfo const *spellInfo) override
SpellCastResult CheckForbearance()
bool Validate(SpellInfo const *) override
void Register() override
bool Validate(SpellInfo const *) override
void Register() override
void HandleEffectProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckEffectProc(AuraEffect const *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
void FilterTargets(std::list< WorldObject * > &targets)
void HandleEffectProc(AuraEffect *, ProcEventInfo &)
bool CheckProc(ProcEventInfo &)
bool Validate(SpellInfo const *) override
void Split(AuraEffect *, DamageInfo &, uint32 &splitAmount)
std::list< WorldObject * > _sharedTargets
void SaveTargetGuid(SpellEffIndex)
void ShareTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void Register() override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
SpellCastResult CheckCast()
void HandleDummy(SpellEffIndex)
void Register() override
bool Validate(SpellInfo const *) override
bool CheckHolyLightProc(AuraEffect const *, ProcEventInfo &eventInfo)
bool CheckFlashOfLightProc(AuraEffect const *, ProcEventInfo &eventInfo)
static constexpr flag128 HolyLightSpellClassMask
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void Register() override
bool Validate(SpellInfo const *spellInfo) override
SpellCastResult CheckForbearance()
void Register() override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
bool CheckEffectProc(AuraEffect const *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
Optional< SpellPowerCost > _baseHolyPowerCost
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *, ProcEventInfo &procInfo)
bool CheckEffectProc(AuraEffect const *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void HandleRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool CheckProc(AuraEffect const *, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void Register() override
bool Validate(SpellInfo const *) override
void Register() override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void Register() override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API AreaTrigger * GetAreaTrigger(WorldObject const &u, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
Definition: Containers.h:67
PaladinSpellVisualKit
@ PALADIN_VISUAL_KIT_DIVINE_STORM
PaladinSpellLabel
@ SPELL_LABEL_PALADIN_T30_2P_HEARTFIRE
PaladinSpells
@ SPELL_PALADIN_DIVINE_STORM_DAMAGE
@ SPELL_PALADIN_HOLY_POWER_MP5
@ SPELL_PALADIN_DIVINE_STEED_ZANDALARI_TROLL
@ SPELL_PALADIN_HOLY_SHOCK_DAMAGE
@ SPELL_PALADIN_CONSECRATED_GROUND_SLOW
@ SPELL_PALADIN_DIVINE_STEED_BLOODELF
@ SPELL_PALADIN_DIVINE_STEED_DWARF
@ SPELL_PALADIN_DIVINE_PURPOSE_TRIGGERED
@ SPELL_PALADIN_BLADE_OF_JUSTICE
@ SPELL_PALADIN_HOLY_MENDING
@ SPELL_PALADIN_LIGHT_HAMMER_COSMETIC
@ SPELL_PALADIN_SHIELD_OF_VENGEANCE_DAMAGE
@ SPELL_PALADIN_HOLY_PRISM_AREA_BEAM_VISUAL
@ SPELL_PALADIN_HOLY_POWER_ARMOR
@ SPELL_PALADIN_HOLY_SHOCK_HEALING
@ SPELL_PALADIN_ARDENT_DEFENDER_HEAL
@ SPELL_PALADIN_CONSECRATION_DAMAGE
@ SPELL_PALADIN_HOLY_PRISM_TARGET_ENEMY
@ SPELL_PALADIN_HOLY_POWER_SPELL_POWER
@ SPELL_PALADIN_TEMPLAR_VERDICT_DAMAGE
@ SPELL_PALADIN_FINAL_STAND_EFFECT
@ SPELL_PALADIN_CONSECRATED_GROUND_PASSIVE
@ SPELL_PALADIN_LIGHT_HAMMER_DAMAGE
@ SPELL_PALADIN_ZEAL_AURA
@ SPELL_PALADIN_JUDGMENT_HOLY_R3
@ SPELL_PALADIN_BEACON_OF_LIGHT_HEAL
@ SPELL_PALADIN_DIVINE_STEED_TAUREN
@ SPELL_PALADIN_DIVINE_STEED_DRAENEI
@ SPELL_PALADIN_DIVINE_STEED_DARK_IRON_DWARF
@ SPELL_PALADIN_T30_2P_HEARTFIRE_HEAL
@ SPELL_PALADIN_CRUSADING_STRIKES_ENERGIZE
@ SPELL_PALADIN_LIGHT_HAMMER_PERIODIC
@ SPELL_PALADIN_AVENGING_WRATH
@ SPELL_PALADIN_DIVINE_STEED_LF_DRAENEI
@ SPELL_PALADIN_BLINDING_LIGHT_EFFECT
@ SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS
@ SPELL_PALADIN_JUDGMENT_HOLY_R3_DEBUFF
@ SPELL_PALADIN_EYE_FOR_AN_EYE_TRIGGERED
@ SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT
@ SPELL_PALADIN_INFUSION_OF_LIGHT_ENERGIZE
@ SPELL_PALADIN_HOLY_PRISM_TARGET_BEAM_VISUAL
@ SPELL_PALADIN_LIGHT_HAMMER_HEALING
@ SPELL_PALADIN_GUARDIAN_OF_ANCIENT_KINGS
@ SPELL_PALADIN_HOLY_SHOCK
@ SPELL_PALADIN_FINAL_STAND
@ SPELL_PALADIN_CONCENTRACTION_AURA
@ SPELL_PALADIN_FORBEARANCE
@ SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA
@ SPELL_PALADIN_ENDURING_LIGHT
@ SPELL_PALADIN_HAND_OF_SACRIFICE
@ SPELL_PALADIN_HAMMER_OF_THE_RIGHTEOUS_AOE
@ SPELL_PALADIN_JUDGMENT_GAIN_HOLY_POWER
@ SPELL_PALADIN_IMMUNE_SHIELD_MARKER
@ SPELL_PALADIN_AVENGERS_SHIELD
@ SPELL_PALADIN_ITEM_HEALING_TRANCE
@ SPELL_PALADIN_HOLY_PRISM_TARGET_ALLY
@ SPELL_PALADIN_SHIELD_OF_THE_RIGHTEOUS_ARMOR
@ SPELL_PALADIN_HOLY_POWER_ATTACK_POWER
@ SPELL_PALADIN_CONSECRATION_PROTECTION_AURA
@ SPELL_PALADIN_JUDGMENT_PROT_RET_R3
@ SPELL_PALADIN_DIVINE_STEED_HUMAN
@ SPELL_PALADIN_BEACON_OF_LIGHT
@ SPELL_PALADIN_ENDURING_JUDGEMENT
@ SPELL_PALADIN_HOLY_LIGHT
@ SPELL_PALADIN_HAMMER_OF_JUSTICE
@ SPELL_PALADIN_CONSECRATION
@ SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE
@ SPELL_PALADIN_ART_OF_WAR_TRIGGERED
void AddSC_paladin_spell_scripts()
PaladinSpellVisual
@ PALADIN_VISUAL_SPELL_HOLY_SHOCK_DAMAGE
@ PALADIN_VISUAL_SPELL_HOLY_SHOCK_HEAL
@ PALADIN_VISUAL_SPELL_HOLY_SHOCK_HEAL_CRIT
@ PALADIN_VISUAL_SPELL_HOLY_SHOCK_DAMAGE_CRIT
PaladinCovenantSpells
@ SPELL_PALADIN_ASHEN_HALLOW
@ SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER
@ SPELL_PALADIN_ASHEN_HALLOW_DAMAGE
@ SPELL_PALADIN_ASHEN_HALLOW_HEAL
CastSpellExtraArgs & AddSpellBP0(int32 val)
Definition: SpellDefines.h:475
CastSpellExtraArgs & AddSpellMod(SpellValueMod mod, int32 val)
Definition: SpellDefines.h:474
constexpr void GetPosition(float &x, float &y) const
Definition: Position.h:81
Optional< std::vector< SpellLogEffectGenericVictimParams > > GenericVictimTargets
Definition: Spell.h:212
void OnUpdate(uint32 diff) override
void OnCreate(Spell const *) override
void OnUnitExit(Unit *unit) override
areatrigger_pal_ashen_hallow(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
void OnUnitExit(Unit *unit) override
areatrigger_pal_consecration(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
bool Validate(SpellInfo const *) override