TrinityCore
Loading...
Searching...
No Matches
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{
120
128
133
141
146
147// 469411 - A Just Reward
149{
150 bool Validate(SpellInfo const* /*spellInfo*/) override
151 {
153 }
154
155 static void HandleEffectProc(AuraScript const&, AuraEffect const* aurEff, ProcEventInfo const& eventInfo)
156 {
158 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
159 .TriggeringAura = aurEff
160 });
161 }
162
167};
168
169// 31850 - Ardent Defender
171{
172 bool Validate(SpellInfo const* spellInfo) override
173 {
175 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
176 }
177
178 void HandleAbsorb(AuraEffect const* aurEff, DamageInfo const& dmgInfo, uint32& absorbAmount)
179 {
181
183 uint64 targetHealth = int32(GetTarget()->CountPctFromMaxHealth(targetHealthPercent));
184 if (GetTarget()->HealthBelowPct(targetHealthPercent))
185 {
186 // we are currently below desired health
187 // absorb everything and heal up
189 CastSpellExtraArgs(aurEff)
190 .AddSpellMod(SPELLVALUE_BASE_POINT0, int32(targetHealth - GetTarget()->GetHealth())));
191 }
192 else
193 {
194 // we are currently above desired health
195 // just absorb enough to reach that percentage
196 absorbAmount = dmgInfo.GetDamage() - int32(GetTarget()->GetHealth() - targetHealth);
197 }
198
199 Remove();
200 }
201
206};
207
208// 267344 - Art of War
233
234// 19042 - Ashen Hallow
236{
238
240 {
241 if (Unit* caster = at->GetCaster())
242 {
243 if (AuraEffect const* ashen = caster->GetAuraEffect(SPELL_PALADIN_ASHEN_HALLOW, EFFECT_1))
244 _period = Milliseconds(ashen->GetPeriod());
245 }
246 }
247
248 void OnCreate(Spell const* /*creatingSpell*/) override
249 {
252 }
253
254 void OnUpdate(uint32 diff) override
255 {
257
258 while (_refreshTimer <= 0s)
259 {
260 if (Unit* caster = at->GetCaster())
261 {
262 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_HEAL);
263 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_DAMAGE);
264 }
265
267
269 }
270 }
271
272 void OnUnitEnter(Unit* unit) override
273 {
274 if (unit->GetGUID() == at->GetCasterGuid())
276 }
277
278 void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
279 {
280 if (unit->GetGUID() == at->GetCasterGuid())
282 }
283
284private:
287};
288
289// 248033 - Awakening
291{
292 bool Validate(SpellInfo const* spellInfo) override
293 {
295 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
296 }
297
298 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
299 {
300 return roll_chance(aurEff->GetAmount());
301 }
302
303 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
304 {
305 Milliseconds extraDuration = 0ms;
306 if (AuraEffect const* durationEffect = GetEffect(EFFECT_1))
307 extraDuration = duration_cast<Milliseconds>(FloatSeconds(durationEffect->GetAmount()));
308
309 if (Aura* avengingWrath = GetTarget()->GetAura(SPELL_PALADIN_AVENGING_WRATH))
310 {
311 avengingWrath->SetDuration(avengingWrath->GetDuration() + extraDuration.count());
312 avengingWrath->SetMaxDuration(avengingWrath->GetMaxDuration() + extraDuration.count());
313 }
314 else
317 .SetTriggeringSpell(eventInfo.GetProcSpell())
318 .AddSpellMod(SPELLVALUE_DURATION, extraDuration.count()));
319 }
320
326};
327
328// Called by 184575 - Blade of Justice
330{
331 bool Validate(SpellInfo const* spellInfo) override
332 {
334 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } })
336 }
337
338 bool Load() override
339 {
341 }
342
343 static void PreventProc(SpellScript const&, WorldObject*& target)
344 {
345 target = nullptr;
346 }
347
352};
353
354// 404358 - Blade of Justice
367
368// 1022 - Blessing of Protection
369// 204018 - Blessing of Spellwarding
394
395// 115750 - Blinding Light
416
417// 26573 - Consecration
419{
420 bool Validate(SpellInfo const* /*spellInfo*/) override
421 {
422 return ValidateSpellInfo
423 ({
425 // validate for areatrigger_pal_consecration
428 });
429 }
430
431 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
432 {
433 if (AreaTrigger* at = GetTarget()->GetAreaTrigger(SPELL_PALADIN_CONSECRATION))
435 }
436
441};
442
443// 26573 - Consecration
444// 9228 - AreaTriggerId
446{
448
449 void OnUnitEnter(Unit* unit) override
450 {
451 if (Unit* caster = at->GetCaster())
452 {
453 // 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
454 if (unit == caster && caster->IsPlayer() && caster->ToPlayer()->GetPrimarySpecialization() == ChrSpecialization::PaladinProtection)
455 caster->CastSpell(caster, SPELL_PALADIN_CONSECRATION_PROTECTION_AURA);
456
457 // 204054 - Consecrated Ground slow is handled by DBC and needs no further checks
458 if (caster->IsValidAttackTarget(unit))
459 caster->CastSpell(unit, SPELL_PALADIN_CONSECRATION_DEBUFF);
460 }
461 }
462
470};
471
472// 196926 - Crusader Might
474{
475 bool Validate(SpellInfo const* /*spellInfo*/) override
476 {
478 }
479
484
489};
490
491// 406833 - Crusading Strikes
493{
494 bool Validate(SpellInfo const* /*spellInfo*/) override
495 {
497 }
498
500 {
501 if (GetStackAmount() == 2)
502 {
504
505 // this spell has weird proc order dependency set up in db2 data so we do removal manually
506 Remove();
507 }
508 }
509
514};
515
516// 406158 - Divine Auxiliary (attached to 343721 - Final Reckoning and 343527 - Execution Sentence)
543
544// 223817 - Divine Purpose
546{
547 bool Validate(SpellInfo const* /*spellInfo*/) override
548 {
550 }
551
552 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
553 {
554 Spell const* procSpell = eventInfo.GetProcSpell();
555 if (!procSpell)
556 return false;
557
558 if (!procSpell->HasPowerTypeCost(POWER_HOLY_POWER))
559 return false;
560
561 return roll_chance(aurEff->GetAmount());
562 }
563
564 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
565 {
567 CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetTriggeringSpell(eventInfo.GetProcSpell()));
568 }
569
575};
576
577// 642 - Divine Shield
611
612// 190784 - Divine Steed
614{
629
631 {
632 Unit* caster = GetCaster();
633
635 switch (caster->GetRace())
636 {
637 case RACE_HUMAN:
639 break;
640 case RACE_DWARF:
642 break;
643 case RACE_DRAENEI:
645 break;
648 break;
651 break;
652 case RACE_BLOODELF:
654 break;
655 case RACE_TAUREN:
657 break;
660 break;
661 default:
662 break;
663 }
664
665 caster->CastSpell(caster, spellId, true);
666 }
667
672};
673
674// 53385 - Divine Storm
676{
677 bool Validate(SpellInfo const* /*spellInfo*/) override
678 {
680 }
681
686
691};
692
693// 156322 - Eternal Flame
695{
696 bool Validate(SpellInfo const* spellInfo) override
697 {
698 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } });
699 }
700
701 void CalculateHealing(SpellEffectInfo const& /*effectInfo*/, Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
702 {
703 Unit* caster = GetCaster();
704 if (victim == caster)
705 AddPct(pctMod, GetEffectInfo(EFFECT_2).CalcValue(caster));
706 }
707
712};
713
715{
716 bool Validate(SpellInfo const* spellInfo) override
717 {
718 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } });
719 }
720
721 void CalculateHealing(AuraEffect const* /*aurEff*/, Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
722 {
723 Unit* caster = GetCaster();
724 if (victim == caster)
725 AddPct(pctMod, GetEffectInfo(EFFECT_2).CalcValue(caster));
726 }
727
732};
733
734// 343527 - Execution Sentence
765
767{
768 bool Validate(SpellInfo const* spellInfo) override
769 {
770 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } })
771 && spellInfo->GetEffect(EFFECT_1).IsAura();
772 }
773
774 void HandleProc(AuraEffect* aurEff, ProcEventInfo const& eventInfo) const
775 {
776 if (DamageInfo const* damageInfo = eventInfo.GetDamageInfo())
777 aurEff->ChangeAmount(aurEff->GetAmount() + CalculatePct(damageInfo->GetDamage(), GetEffect(EFFECT_1)->GetAmount()));
778 }
779
780 void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
781 {
782 SpellEffectValue amount = aurEff->GetAmount();
783 if (!amount || GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
784 return;
785
786 if (Unit* caster = GetCaster())
789 .TriggeringAura = aurEff,
790 .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, amount } }
791 });
792 }
793
799};
800
801// 205191 - Eye for an Eye
803{
804 bool Validate(SpellInfo const* /*spellInfo*/) override
805 {
807 }
808
809 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
810 {
812 }
813
818};
819
820// 383328 - Final Verdict
822{
823 bool Validate(SpellInfo const* /*spellInfo*/) override
824 {
826 }
827
828 void HandleDummy(SpellEffIndex /*effIndex*/) const
829 {
831 return;
832
833 Unit* caster = GetCaster();
836 .TriggeringSpell = GetSpell()
837 });
838 }
839
844};
845
846// 234299 - Fist of Justice
848{
849 bool Validate(SpellInfo const* /*spellInfo*/) override
850 {
852 }
853
854 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
855 {
856 if (Spell const* procSpell = eventInfo.GetProcSpell())
857 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
858
859 return false;
860 }
861
862 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
863 {
864 int32 value = aurEff->GetAmount() / 10;
865
867 }
868
874};
875
876// -85043 - Grand Crusader
900
901// 54968 - Glyph of Holy Light
903{
904 void FilterTargets(std::list<WorldObject*>& targets)
905 {
906 uint32 const maxTargets = GetSpellInfo()->MaxAffectedTargets;
907
908 if (targets.size() > maxTargets)
909 {
911 targets.resize(maxTargets);
912 }
913 }
914
919};
920
921// 53595 - Hammer of the Righteous
944
945// 6940 - Hand of Sacrifice
947{
948public:
953
954private:
956
957 bool Load() override
958 {
959 if (Unit* caster = GetCaster())
960 {
961 remainingAmount = caster->GetMaxHealth();
962 return true;
963 }
964 return false;
965 }
966
967 void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
968 {
969 remainingAmount -= splitAmount;
970
971 if (remainingAmount <= 0)
972 {
974 }
975 }
976
981};
982
983// 54149 - Infusion of Light
985{
986 static constexpr flag128 HolyLightSpellClassMask = { 0, 0, 0x400 };
987
988 bool Validate(SpellInfo const* /*spellInfo*/) override
989 {
991 }
992
993 bool CheckFlashOfLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
994 {
995 return eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->m_appliedMods.find(GetAura()) != eventInfo.GetProcSpell()->m_appliedMods.end();
996 }
997
998 bool CheckHolyLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
999 {
1001 }
1002
1003 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
1004 {
1006 CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetTriggeringSpell(eventInfo.GetProcSpell()));
1007 }
1008
1017};
1018
1019// 327193 - Moment of Glory
1021{
1022 bool Validate(SpellInfo const* /*spellInfo*/) override
1023 {
1025 }
1026
1031
1032 void Register() override
1033 {
1035 }
1036};
1037
1038// 20271/275779/275773 - Judgement (Retribution/Protection/Holy)
1040{
1041 bool Validate(SpellInfo const* /*spellInfo*/) override
1042 {
1043 return ValidateSpellInfo
1044 ({
1047 });
1048 }
1049
1050 bool Load() override
1051 {
1053 }
1054
1055 void HandleOnCast() const
1056 {
1057 Unit* caster = GetCaster();
1060 .TriggeringSpell = GetSpell()
1061 });
1062 }
1063
1064 void Register() override
1065 {
1067 }
1068};
1069
1070// 215661 - Justicar's Vengeance
1072{
1073 bool Validate(SpellInfo const* spellInfo) override
1074 {
1075 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
1076 }
1077
1078 void HandleDamage(SpellEffectInfo const& /*spellEffectInfo*/, Unit const* victim, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const
1079 {
1080 if (victim->HasUnitState(UNIT_STATE_STUNNED))
1081 AddPct(pctMod, GetEffectInfo(EFFECT_1).CalcValue(GetCaster()));
1082 }
1083
1088};
1089
1090// 114165 - Holy Prism
1113
1114// 114852 - Holy Prism (Damage)
1115// 114871 - Holy Prism (Heal)
1117{
1122
1124 {
1126 }
1127
1128 void FilterTargets(std::list<WorldObject*>& targets)
1129 {
1130 uint8 const maxTargets = 5;
1131
1132 if (targets.size() > maxTargets)
1133 {
1135 {
1137 targets.resize(maxTargets);
1138 }
1139 else
1140 Trinity::Containers::RandomResize(targets, maxTargets);
1141 }
1142
1143 _sharedTargets = targets;
1144 }
1145
1146 void ShareTargets(std::list<WorldObject*>& targets)
1147 {
1148 targets = _sharedTargets;
1149 }
1150
1151 void HandleScript(SpellEffIndex /*effIndex*/)
1152 {
1153 if (Unit* initialTarget = ObjectAccessor::GetUnit(*GetCaster(), _targetGUID))
1154 initialTarget->CastSpell(GetHitUnit(), SPELL_PALADIN_HOLY_PRISM_AREA_BEAM_VISUAL, true);
1155 }
1156
1169
1170private:
1171 std::list<WorldObject*> _sharedTargets;
1173};
1174
1175// 20473 - Holy Shock
1177{
1178 bool Validate(SpellInfo const* /*spellInfo*/) override
1179 {
1180 return ValidateSpellInfo
1181 ({
1185 });
1186 }
1187
1189 {
1190 Unit* caster = GetCaster();
1191
1192 if (Unit* target = GetExplTargetUnit())
1193 {
1194 if (!caster->IsFriendlyTo(target))
1195 {
1196 if (!caster->IsValidAttackTarget(target))
1198
1199 if (!caster->isInFront(target))
1201 }
1202 }
1203 else
1205
1206 return SPELL_CAST_OK;
1207 }
1208
1209 void HandleDummy(SpellEffIndex /*effIndex*/)
1210 {
1211 Unit* caster = GetCaster();
1212
1213 if (Unit* unitTarget = GetHitUnit())
1214 {
1215 if (caster->IsFriendlyTo(unitTarget))
1216 caster->CastSpell(unitTarget, SPELL_PALADIN_HOLY_SHOCK_HEALING, GetSpell());
1217 else
1218 caster->CastSpell(unitTarget, SPELL_PALADIN_HOLY_SHOCK_DAMAGE, GetSpell());
1219 }
1220 }
1221
1227};
1228
1229// 25912 - Holy Shock
1248
1249// 25914 - Holy Shock
1268
1269// 37705 - Healing Discount
1271{
1272 bool Validate(SpellInfo const* /*spellInfo*/) override
1273 {
1275 }
1276
1277 void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
1278 {
1281 }
1282
1287};
1288
1289// 40470 - Paladin Tier 6 Trinket
1291{
1292 bool Validate(SpellInfo const* /*spellInfo*/) override
1293 {
1294 return ValidateSpellInfo(
1295 {
1298 });
1299 }
1300
1301 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1302 {
1304 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
1305 if (!spellInfo)
1306 return;
1307
1308 uint32 spellId;
1309 int32 chance;
1310
1311 // Holy Light & Flash of Light
1312 if (spellInfo->SpellFamilyFlags[0] & 0xC0000000)
1313 {
1315 chance = 15;
1316 }
1317 // Judgements
1318 else if (spellInfo->SpellFamilyFlags[0] & 0x00800000)
1319 {
1321 chance = 50;
1322 }
1323 else
1324 return;
1325
1326 if (roll_chance(chance))
1327 eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff);
1328 }
1329
1334};
1335
1336// 633 - Lay on Hands
1337// 471195 - Lay on Hands (from 387791 - Empyreal Ward)
1359
1360// 53651 - Light's Beacon - Beacon of Light
1362{
1363 bool Validate(SpellInfo const* /*spellInfo*/) override
1364 {
1366 }
1367
1368 bool CheckProc(ProcEventInfo& eventInfo)
1369 {
1370 if (!eventInfo.GetActionTarget())
1371 return false;
1372 if (eventInfo.GetActionTarget()->HasAura(SPELL_PALADIN_BEACON_OF_LIGHT, eventInfo.GetActor()->GetGUID()))
1373 return false;
1374 return true;
1375 }
1376
1377 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1378 {
1380
1381 HealInfo* healInfo = eventInfo.GetHealInfo();
1382 if (!healInfo || !healInfo->GetHeal())
1383 return;
1384
1385 SpellEffectValue heal = CalculatePct(healInfo->GetHeal(), aurEff->GetAmount());
1386
1387 Unit::AuraList const& auras = GetCaster()->GetSingleCastAuras();
1388 for (Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
1389 {
1390 if ((*itr)->GetId() == SPELL_PALADIN_BEACON_OF_LIGHT)
1391 {
1392 std::vector<AuraApplication*> applications;
1393 (*itr)->GetApplicationVector(applications);
1394 if (!applications.empty())
1395 {
1396 CastSpellExtraArgs args(aurEff);
1398 eventInfo.GetActor()->CastSpell(applications.front()->GetTarget(), SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, args);
1399 }
1400 return;
1401 }
1402 }
1403 }
1404
1410};
1411
1412// 122773 - Light's Hammer
1443
1444// 114918 - Light's Hammer (Periodic)
1446{
1447 bool Validate(SpellInfo const* /*spellInfo*/) override
1448 {
1449 return ValidateSpellInfo
1450 ({
1453 });
1454 }
1455
1456 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
1457 {
1458 Unit* lightHammer = GetTarget();
1459 if (Unit* originalCaster = lightHammer->GetOwner())
1460 {
1461 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1462 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_HEALING, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1463 }
1464 }
1465
1470};
1471
1472// 204074 - Righteous Protector
1474{
1475 bool Validate(SpellInfo const* /*spellInfo*/) override
1476 {
1478 }
1479
1480 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1481 {
1482 if (SpellInfo const* procSpell = eventInfo.GetSpellInfo())
1483 _baseHolyPowerCost = procSpell->CalcPowerCost(POWER_HOLY_POWER, false, eventInfo.GetActor(), eventInfo.GetSchoolMask());
1484 else
1485 _baseHolyPowerCost.reset();
1486
1487 return _baseHolyPowerCost.has_value();
1488 }
1489
1497
1503
1505};
1506
1507// 267610 - Righteous Verdict
1509{
1510 bool Validate(SpellInfo const* /*spellEntry*/) override
1511 {
1513 }
1514
1515 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
1516 {
1517 procInfo.GetActor()->CastSpell(procInfo.GetActor(), SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA, true);
1518 }
1519
1524};
1525
1526// 85804 - Selfless Healer
1528{
1529 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1530 {
1531 if (Spell const* procSpell = eventInfo.GetProcSpell())
1532 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
1533
1534 return false;
1535 }
1536
1541};
1542
1543// 53600 - Shield of the Righteous
1545{
1546 bool Validate(SpellInfo const* /*spellInfo*/) override
1547 {
1549 }
1550
1555
1560};
1561
1562// 184662 - Shield of Vengeance
1564{
1565 bool Validate(SpellInfo const* spellInfo) override
1566 {
1568 }
1569
1570 void CalculateAmount(AuraEffect const* /*aurEff*/, SpellEffectValue& amount, bool& /*canBeRecalculated*/)
1571 {
1572 amount = CalculatePct(GetUnitOwner()->GetMaxHealth(), GetEffectInfo(EFFECT_1).CalcValue());
1573 if (Player const* player = GetUnitOwner()->ToPlayer())
1574 AddPct(amount, player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + player->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
1575
1576 _initialAmount = amount;
1577 }
1578
1584
1590
1592};
1593
1594// 469304 - Steed of Liberty
1596{
1597 bool Validate(SpellInfo const* /*spellInfo*/) override
1598 {
1600 }
1601
1602 void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/) const
1603 {
1604 Unit* target = GetTarget();
1607 .TriggeringAura = aurEff,
1608 .SpellValueOverrides = { { SPELLVALUE_DURATION, aurEff->GetAmountAsInt() } }
1609 });
1610 }
1611
1616};
1617
1618// 85256 - Templar's Verdict
1620{
1621 bool Validate(SpellInfo const* /*spellEntry*/) override
1622 {
1624 }
1625
1630
1635};
1636
1637// 28789 - Holy Power
1639{
1650
1651 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1652 {
1654
1655 uint32 spellId;
1656 Unit* caster = eventInfo.GetActor();
1657 Unit* target = eventInfo.GetProcTarget();
1658
1659 switch (target->GetClass())
1660 {
1661 case CLASS_PALADIN:
1662 case CLASS_PRIEST:
1663 case CLASS_SHAMAN:
1664 case CLASS_DRUID:
1666 break;
1667 case CLASS_MAGE:
1668 case CLASS_WARLOCK:
1670 break;
1671 case CLASS_HUNTER:
1672 case CLASS_ROGUE:
1674 break;
1675 case CLASS_WARRIOR:
1677 break;
1678 default:
1679 return;
1680 }
1681
1682 caster->CastSpell(target, spellId, aurEff);
1683 }
1684
1689};
1690
1691// 64890 - Item - Paladin T8 Holy 2P Bonus
1693{
1694 bool Validate(SpellInfo const* /*spellInfo*/) override
1695 {
1697 && sSpellMgr->AssertSpellInfo(SPELL_PALADIN_HOLY_MENDING, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount() > 0;
1698 }
1699
1700 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1701 {
1703
1704 HealInfo* healInfo = eventInfo.GetHealInfo();
1705 if (!healInfo || !healInfo->GetHeal())
1706 return;
1707
1708 Unit* caster = eventInfo.GetActor();
1709 Unit* target = eventInfo.GetProcTarget();
1710
1711 SpellEffectInfo const& hotEffect = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_HOLY_MENDING, GetCastDifficulty())->GetEffect(EFFECT_0);
1712 SpellEffectValue amount = CalculatePct(static_cast<SpellEffectValue>(healInfo->GetHeal()), aurEff->GetAmount());
1713
1714 amount /= hotEffect.GetPeriodicTickCount();
1715
1716 CastSpellExtraArgs args(aurEff);
1717 args.AddSpellBP0(amount);
1718 caster->CastSpell(target, SPELL_PALADIN_HOLY_MENDING, args);
1719 }
1720
1725};
1726
1727// 405547 - Paladin Protection 10.1 Class Set 2pc
1729{
1730 bool Validate(SpellInfo const* /*spellInfo*/) override
1731 {
1733 && sSpellMgr->AssertSpellInfo(SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount() > 0;
1734 }
1735
1736 void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
1737 {
1739
1740 Unit* caster = procInfo.GetActor();
1741 uint32 ticks = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount();
1742 SpellEffectValue damage = CalculatePct(procInfo.GetDamageInfo()->GetOriginalDamage(), aurEff->GetAmount()) / ticks;
1743
1745 .SetTriggeringSpell(procInfo.GetProcSpell())
1747 }
1748
1753};
1754
1755// 408461 - Heartfire
1781
1782// 255937 - Wake of Ashes
1784{
1785 bool Validate(SpellInfo const* /*spellEntry*/) override
1786 {
1788 }
1789
1790 void HandleHitTarget(SpellEffIndex /*effIndex*/) const
1791 {
1792 Unit* target = GetHitUnit();
1793
1797 .TriggeringSpell = GetSpell()
1798 });
1799 }
1800
1805};
1806
1807// 269569 - Zeal
1809{
1810 bool Validate(SpellInfo const* /*spellInfo*/) override
1811 {
1813 }
1814
1815 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
1816 {
1817 Unit* target = GetTarget();
1819
1821 }
1822
1827};
1828
1830{
1886}
AreaTriggerExitReason
Definition AreaTrigger.h:69
DB2Storage< SpellVisualEntry > sSpellVisualStore("SpellVisual.db2", &SpellVisualLoadInfo::Instance)
DB2Storage< SpellVisualKitEntry > sSpellVisualKitStore("SpellVisualKit.db2", &SpellVisualKitLoadInfo::Instance)
@ DIFFICULTY_NONE
Definition DBCEnums.h:933
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint32_t uint32
Definition Define.h:154
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
std::chrono::duration< double, Seconds::period > FloatSeconds
Definition Duration.h:29
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:28
@ TYPEID_PLAYER
Definition ObjectGuid.h:44
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
@ RACE_DARK_IRON_DWARF
Definition RaceMask.h:62
@ RACE_LIGHTFORGED_DRAENEI
Definition RaceMask.h:58
@ RACE_DRAENEI
Definition RaceMask.h:39
@ RACE_ZANDALARI_TROLL
Definition RaceMask.h:59
@ RACE_BLOODELF
Definition RaceMask.h:38
@ RACE_DWARF
Definition RaceMask.h:31
@ RACE_HUMAN
Definition RaceMask.h:29
@ RACE_TAUREN
Definition RaceMask.h:34
bool roll_chance(T chance)
Definition Random.h:55
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
Definition ScriptMgr.h:1381
#define RegisterAreaTriggerAI(ai_name)
Definition ScriptMgr.h:1428
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1383
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ EFFECT_2
@ 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_TARGET_ENEMY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ CREATURE_TYPE_UNDEAD
@ CREATURE_TYPE_DEMON
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_SPELL
@ SPELL_EFFECT_SUMMON
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ POWER_HOLY_POWER
SpellCastResult
@ SPELL_FAILED_UNIT_NOT_INFRONT
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_CAST_OK
@ SPELLFAMILY_PALADIN
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_EXPIRE
@ SPELL_AURA_ADD_PCT_MODIFIER
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_ADD_FLAT_MODIFIER
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_VERSATILITY
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELLVALUE_AURA_STACK
@ SPELLVALUE_DURATION
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore Spell and Category cooldowns.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ SPELLVALUE_BASE_POINT0
#define sSpellMgr
Definition SpellMgr.h:812
#define SpellObjectTargetSelectFn(F, I, N)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define AuraEffectCalcHealingFn(F, I, N)
#define SpellCalcDamageFn(F)
#define SpellCastFn(F)
#define SPELL_EFFECT_ANY
Definition SpellScript.h:60
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectSplitFn(F, I)
#define AuraEffectAbsorbOverkillFn(F, I)
#define AuraCheckProcFn(F)
#define SpellHitFn(F)
#define SpellCalcHealingFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ UNIT_STATE_STUNNED
Definition Unit.h:264
@ CR_VERSATILITY_DAMAGE_DONE
Definition Unit.h:345
T AddPct(T &base, U pct)
Definition Util.h:85
T CalculatePct(T base, U pct)
Definition Util.h:72
AreaTrigger *const at
AreaTriggerAI(AreaTrigger *a, uint32 scriptId={}) noexcept
ObjectGuid const & GetCasterGuid() const
Unit * GetCaster() const
void ChangeAmount(SpellEffectValue newAmount, bool mark=true, bool onStackOrReapply=false, AuraEffect const *triggeredBy=nullptr)
int32 GetAmountAsInt() const
SpellEffectValue GetAmount() const
HookList< EffectCalcDamageAndHealingHandler > DoEffectCalcDamageAndHealing
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Unit * GetCaster() const
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Aura * GetAura() const
Unit * GetTarget() const
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
uint8 GetStackAmount() const
HookList< EffectAbsorbHandler > OnEffectSplit
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
bool IsPlayer() const
Definition BaseEntity.h:173
TypeID GetTypeId() const
Definition BaseEntity.h:166
uint32 GetOriginalDamage() const
Definition Unit.h:453
uint32 GetDamage() const
Definition Unit.h:452
uint32 GetHeal() const
Definition Unit.h:482
HealInfo * GetHealInfo() const
Definition Unit.h:512
SpellSchoolMask GetSchoolMask() const
Definition Unit.cpp:292
Unit * GetActionTarget() const
Definition Unit.h:500
Spell const * GetProcSpell() const
Definition Unit.h:514
SpellInfo const * GetSpellInfo() const
Definition Unit.cpp:281
DamageInfo * GetDamageInfo() const
Definition Unit.h:511
Unit * GetProcTarget() const
Definition Unit.h:501
Unit * GetActor() const
Definition Unit.h:499
SpellEffectValue CalcValue(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
uint32 GetPeriodicTickCount() const
bool IsAura() const
bool IsEffect() const
void ResetCooldown(uint32 spellId, bool update=false)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
uint32 ExcludeTargetAuraSpell
Definition SpellInfo.h:365
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
uint32 const Id
Definition SpellInfo.h:328
flag128 SpellFamilyFlags
Definition SpellInfo.h:415
uint32 MaxAffectedTargets
Definition SpellInfo.h:413
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition SpellInfo.h:588
uint32 ExcludeCasterAuraSpell
Definition SpellInfo.h:364
bool HasLabel(uint32 labelId) const
uint32 m_scriptSpellId
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
bool IsHitCrit() const
HookList< DamageAndHealingCalcHandler > CalcDamage
HookList< CastHandler > AfterCast
HookList< CheckCastHandler > OnCheckCast
Unit * GetCaster() const
HookList< HitHandler > AfterHit
SpellEffectValue GetEffectValue() const
HookList< HitHandler > OnHit
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
Spell * GetSpell() const
WorldObject * GetExplTargetWorldObject() const
HookList< DamageAndHealingCalcHandler > CalcHealing
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Definition Spell.h:277
bool HasPowerTypeCost(Powers power) const
Definition Spell.cpp:8152
UsedSpellMods m_appliedMods
Definition Spell.h:654
std::vector< T > & GetExecuteLogEffectTargets(SpellEffectName effect, Optional< std::vector< T > > SpellLogEffect::*member)
Definition Spell.h:572
Binary predicate for sorting Units based on percent value of health.
Definition Unit.h:635
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3828
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
Definition Unit.cpp:12305
uint8 GetClass() const
Definition Unit.h:764
virtual bool HasSpell(uint32) const
Definition Unit.h:1084
uint32 GetCreatureType() const
Definition Unit.cpp:9451
std::forward_list< Aura * > AuraList
Definition Unit.h:653
bool HasUnitState(const uint32 f) const
Definition Unit.h:743
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
Definition Unit.cpp:12342
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4804
SpellHistory * GetSpellHistory()
Definition Unit.h:1498
AuraList & GetSingleCastAuras()
Definition Unit.h:1344
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3974
uint8 GetRace() const
Definition Unit.h:761
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2217
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition Object.cpp:2324
Unit * GetOwner() const
Definition Object.cpp:1598
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Definition Object.cpp:670
bool IsFriendlyTo(WorldObject const *target) const
Definition Object.cpp:2186
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
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
void RemoveExplicitTarget(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
static void PreventProc(SpellScript const &, WorldObject *&target)
bool Validate(SpellInfo const *spellInfo) override
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *)
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
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void CalculateHealing(AuraEffect const *, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) override
void CalculateHealing(SpellEffectInfo const &, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) override
void AfterRemove(AuraEffect const *aurEff, AuraEffectHandleModes) const
void HandleProc(AuraEffect *aurEff, ProcEventInfo const &eventInfo) const
void HandleVisual(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex) const
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)
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)
void HandleOnCast() const
bool Validate(SpellInfo const *) override
bool Load() override
void Register() override
bool Validate(SpellInfo const *spellInfo) override
void HandleDamage(SpellEffectInfo const &, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) 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 *, SpellEffectValue &amount, bool &)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
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)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void Register() override
void HandleEffectProc(AuraEffect *aurEff, ProcEventInfo &)
TC_GAME_API Unit * GetUnit(WorldObject const &, 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_DIVINE_STEED_BLOODELF
@ SPELL_PALADIN_DIVINE_STEED_DWARF
@ SPELL_PALADIN_DIVINE_PURPOSE_TRIGGERED
@ SPELL_PALADIN_BLADE_OF_JUSTICE
@ SPELL_PALADIN_BLESSING_OF_FREEDOM
@ 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_EXECUTION_SENTENCE_11_SECONDS
@ SPELL_PALADIN_A_JUST_REWARD_HEAL
@ SPELL_PALADIN_HOLY_PRISM_TARGET_ENEMY
@ SPELL_PALADIN_DIVINE_AUXILIARY_ENERGIZE
@ SPELL_PALADIN_HOLY_POWER_SPELL_POWER
@ SPELL_PALADIN_DIVINE_AUXILIARY_TALENT
@ SPELL_PALADIN_TEMPLAR_VERDICT_DAMAGE
@ SPELL_PALADIN_FINAL_STAND_EFFECT
@ SPELL_PALADIN_LIGHT_HAMMER_DAMAGE
@ SPELL_PALADIN_ZEAL_AURA
@ SPELL_PALADIN_BEACON_OF_LIGHT_HEAL
@ SPELL_PALADIN_DIVINE_STEED_TAUREN
@ SPELL_PALADIN_FINAL_VERDICT
@ SPELL_PALADIN_EXECUTIONERS_WILL
@ 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_BLADE_OF_VENGEANCE
@ SPELL_PALADIN_BLINDING_LIGHT_EFFECT
@ SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS
@ SPELL_PALADIN_EYE_FOR_AN_EYE_TRIGGERED
@ SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT
@ SPELL_PALADIN_JUDGMENT_RANK_3
@ 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_CONSECRATION_DEBUFF
@ SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA
@ SPELL_PALADIN_ENDURING_LIGHT
@ SPELL_PALADIN_ETERNAL_FLAME
@ SPELL_PALADIN_HAND_OF_SACRIFICE
@ SPELL_PALADIN_HAMMER_OF_THE_RIGHTEOUS_AOE
@ SPELL_PALADIN_JUDGMENT_GAIN_HOLY_POWER
@ SPELL_PALADIN_WAKE_OF_ASHES_STUN
@ 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_DIVINE_STEED_HUMAN
@ SPELL_PALADIN_EXECUTION_SENTENCE_DAMAGE
@ SPELL_PALADIN_EXECUTION_SENTENCE_8_SECONDS
@ 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
TriggerCastFlags TriggerFlags
CastSpellExtraArgs & SetTriggeringSpell(Spell const *triggeringSpell)
Definition Spell.cpp:9707
CastSpellExtraArgs & AddSpellBP0(SpellEffectValue val)
CastSpellExtraArgs & AddSpellMod(SpellValueMod mod, int32 val)
constexpr void GetPosition(float &x, float &y) const
Definition Position.h:92
Optional< std::vector< SpellLogEffectGenericVictimParams > > GenericVictimTargets
Definition Spell.h:234
void OnUpdate(uint32 diff) override
void OnCreate(Spell const *) override
areatrigger_pal_ashen_hallow(AreaTrigger *areatrigger)
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void OnUnitEnter(Unit *unit) override
void OnUnitEnter(Unit *unit) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
bool Validate(SpellInfo const *) override