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{
125
133
138
146
151
152// 469411 - A Just Reward
154{
155 bool Validate(SpellInfo const* /*spellInfo*/) override
156 {
158 }
159
160 static void HandleEffectProc(AuraScript const&, AuraEffect const* aurEff, ProcEventInfo const& eventInfo)
161 {
163 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
164 .TriggeringAura = aurEff
165 });
166 }
167
172};
173
174// 31850 - Ardent Defender
176{
177 bool Validate(SpellInfo const* spellInfo) override
178 {
180 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
181 }
182
183 void HandleAbsorb(AuraEffect const* aurEff, DamageInfo const& dmgInfo, uint32& absorbAmount)
184 {
186
188 uint64 targetHealth = int32(GetTarget()->CountPctFromMaxHealth(targetHealthPercent));
189 if (GetTarget()->HealthBelowPct(targetHealthPercent))
190 {
191 // we are currently below desired health
192 // absorb everything and heal up
194 CastSpellExtraArgs(aurEff)
195 .AddSpellMod(SPELLVALUE_BASE_POINT0, int32(targetHealth - GetTarget()->GetHealth())));
196 }
197 else
198 {
199 // we are currently above desired health
200 // just absorb enough to reach that percentage
201 absorbAmount = dmgInfo.GetDamage() - int32(GetTarget()->GetHealth() - targetHealth);
202 }
203
204 Remove();
205 }
206
211};
212
213// 267344 - Art of War
238
239// 19042 - Ashen Hallow
241{
243
245 {
246 if (Unit* caster = at->GetCaster())
247 {
248 if (AuraEffect const* ashen = caster->GetAuraEffect(SPELL_PALADIN_ASHEN_HALLOW, EFFECT_1))
249 _period = Milliseconds(ashen->GetPeriod());
250 }
251 }
252
253 void OnCreate(Spell const* /*creatingSpell*/) override
254 {
257 }
258
259 void OnUpdate(uint32 diff) override
260 {
262
263 while (_refreshTimer <= 0s)
264 {
265 if (Unit* caster = at->GetCaster())
266 {
267 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_HEAL);
268 caster->CastSpell(at->GetPosition(), SPELL_PALADIN_ASHEN_HALLOW_DAMAGE);
269 }
270
272
274 }
275 }
276
277 void OnUnitEnter(Unit* unit) override
278 {
279 if (unit->GetGUID() == at->GetCasterGuid())
281 }
282
283 void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
284 {
285 if (unit->GetGUID() == at->GetCasterGuid())
287 }
288
289private:
292};
293
294// 248033 - Awakening
296{
297 bool Validate(SpellInfo const* spellInfo) override
298 {
300 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
301 }
302
303 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
304 {
305 return roll_chance(aurEff->GetAmount());
306 }
307
308 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
309 {
310 Milliseconds extraDuration = 0ms;
311 if (AuraEffect const* durationEffect = GetEffect(EFFECT_1))
312 extraDuration = duration_cast<Milliseconds>(FloatSeconds(durationEffect->GetAmount()));
313
314 if (Aura* avengingWrath = GetTarget()->GetAura(SPELL_PALADIN_AVENGING_WRATH))
315 {
316 avengingWrath->SetDuration(avengingWrath->GetDuration() + extraDuration.count());
317 avengingWrath->SetMaxDuration(avengingWrath->GetMaxDuration() + extraDuration.count());
318 }
319 else
322 .SetTriggeringSpell(eventInfo.GetProcSpell())
323 .AddSpellMod(SPELLVALUE_DURATION, extraDuration.count()));
324 }
325
331};
332
333// Called by 184575 - Blade of Justice
335{
336 bool Validate(SpellInfo const* spellInfo) override
337 {
339 && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } })
341 }
342
343 bool Load() override
344 {
346 }
347
348 static void PreventProc(SpellScript const&, WorldObject*& target)
349 {
350 target = nullptr;
351 }
352
357};
358
359// 404358 - Blade of Justice
372
373// 1022 - Blessing of Protection
374// 204018 - Blessing of Spellwarding
399
400// 115750 - Blinding Light
421
422// 26573 - Consecration
424{
425 bool Validate(SpellInfo const* /*spellInfo*/) override
426 {
427 return ValidateSpellInfo
428 ({
430 // validate for areatrigger_pal_consecration
433 });
434 }
435
436 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
437 {
438 if (AreaTrigger* at = GetTarget()->GetAreaTrigger(SPELL_PALADIN_CONSECRATION))
440 }
441
446};
447
448// 26573 - Consecration
449// 9228 - AreaTriggerId
451{
453
454 void OnUnitEnter(Unit* unit) override
455 {
456 if (Unit* caster = at->GetCaster())
457 {
458 // 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
459 if (unit == caster && caster->IsPlayer() && caster->ToPlayer()->GetPrimarySpecialization() == ChrSpecialization::PaladinProtection)
460 caster->CastSpell(caster, SPELL_PALADIN_CONSECRATION_PROTECTION_AURA);
461
462 // 204054 - Consecrated Ground slow is handled by DBC and needs no further checks
463 if (caster->IsValidAttackTarget(unit))
464 caster->CastSpell(unit, SPELL_PALADIN_CONSECRATION_DEBUFF);
465 }
466 }
467
475};
476
477// 196926 - Crusader Might
479{
480 bool Validate(SpellInfo const* /*spellInfo*/) override
481 {
483 }
484
489
494};
495
496// 406833 - Crusading Strikes
498{
499 bool Validate(SpellInfo const* /*spellInfo*/) override
500 {
502 }
503
505 {
506 if (GetStackAmount() == 2)
507 {
509
510 // this spell has weird proc order dependency set up in db2 data so we do removal manually
511 Remove();
512 }
513 }
514
519};
520
521// 406158 - Divine Auxiliary (attached to 343721 - Final Reckoning and 343527 - Execution Sentence)
548
549// 223817 - Divine Purpose
551{
552 bool Validate(SpellInfo const* /*spellInfo*/) override
553 {
555 }
556
557 bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
558 {
559 Spell const* procSpell = eventInfo.GetProcSpell();
560 if (!procSpell)
561 return false;
562
563 if (!procSpell->HasPowerTypeCost(POWER_HOLY_POWER))
564 return false;
565
566 return roll_chance(aurEff->GetAmount());
567 }
568
569 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
570 {
572 CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetTriggeringSpell(eventInfo.GetProcSpell()));
573 }
574
580};
581
582// 642 - Divine Shield
616
617// 190784 - Divine Steed
619{
634
636 {
637 Unit* caster = GetCaster();
638
640 switch (caster->GetRace())
641 {
642 case RACE_HUMAN:
644 break;
645 case RACE_DWARF:
647 break;
648 case RACE_DRAENEI:
650 break;
653 break;
656 break;
657 case RACE_BLOODELF:
659 break;
660 case RACE_TAUREN:
662 break;
665 break;
666 default:
667 break;
668 }
669
670 caster->CastSpell(caster, spellId, true);
671 }
672
677};
678
679// 53385 - Divine Storm
681{
682 bool Validate(SpellInfo const* /*spellInfo*/) override
683 {
685 }
686
691
696};
697
698// 156322 - Eternal Flame
700{
701 bool Validate(SpellInfo const* spellInfo) override
702 {
703 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } });
704 }
705
706 void CalculateHealing(SpellEffectInfo const& /*effectInfo*/, Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
707 {
708 Unit* caster = GetCaster();
709 if (victim == caster)
710 AddPct(pctMod, GetEffectInfo(EFFECT_2).CalcValue(caster));
711 }
712
717};
718
720{
721 bool Validate(SpellInfo const* spellInfo) override
722 {
723 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } });
724 }
725
726 void CalculateHealing(AuraEffect const* /*aurEff*/, Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
727 {
728 Unit* caster = GetCaster();
729 if (victim == caster)
730 AddPct(pctMod, GetEffectInfo(EFFECT_2).CalcValue(caster));
731 }
732
737};
738
739// 343527 - Execution Sentence
770
772{
773 bool Validate(SpellInfo const* spellInfo) override
774 {
775 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } })
776 && spellInfo->GetEffect(EFFECT_1).IsAura();
777 }
778
779 void HandleProc(AuraEffect* aurEff, ProcEventInfo const& eventInfo) const
780 {
781 if (DamageInfo const* damageInfo = eventInfo.GetDamageInfo())
782 aurEff->ChangeAmount(aurEff->GetAmount() + CalculatePct(damageInfo->GetDamage(), GetEffect(EFFECT_1)->GetAmount()));
783 }
784
785 void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
786 {
787 SpellEffectValue amount = aurEff->GetAmount();
788 if (!amount || GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
789 return;
790
791 if (Unit* caster = GetCaster())
794 .TriggeringAura = aurEff,
795 .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, amount } }
796 });
797 }
798
804};
805
806// 383344 - Expurgation
808{
809 bool Validate(SpellInfo const* /*spellInfo*/) override
810 {
812 }
813
814 static void HandleProc(AuraScript const&, AuraEffect const* /*aurEff*/, ProcEventInfo const& eventInfo)
815 {
817 }
818
823};
824
825// 205191 - Eye for an Eye
827{
828 bool Validate(SpellInfo const* /*spellInfo*/) override
829 {
831 }
832
833 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
834 {
836 }
837
842};
843
844// 383328 - Final Verdict
846{
847 bool Validate(SpellInfo const* /*spellInfo*/) override
848 {
850 }
851
852 void HandleDummy(SpellEffIndex /*effIndex*/) const
853 {
855 return;
856
857 Unit* caster = GetCaster();
860 .TriggeringSpell = GetSpell()
861 });
862 }
863
868};
869
870// 234299 - Fist of Justice
872{
873 bool Validate(SpellInfo const* /*spellInfo*/) override
874 {
876 }
877
878 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
879 {
880 if (Spell const* procSpell = eventInfo.GetProcSpell())
881 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
882
883 return false;
884 }
885
886 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
887 {
888 int32 value = aurEff->GetAmount() / 10;
889
891 }
892
898};
899
900// -85043 - Grand Crusader
924
925// 54968 - Glyph of Holy Light
927{
928 void FilterTargets(std::list<WorldObject*>& targets)
929 {
930 uint32 const maxTargets = GetSpellInfo()->MaxAffectedTargets;
931
932 if (targets.size() > maxTargets)
933 {
935 targets.resize(maxTargets);
936 }
937 }
938
943};
944
945// 53595 - Hammer of the Righteous
968
969// 6940 - Hand of Sacrifice
971{
972public:
977
978private:
980
981 bool Load() override
982 {
983 if (Unit* caster = GetCaster())
984 {
985 remainingAmount = caster->GetMaxHealth();
986 return true;
987 }
988 return false;
989 }
990
991 void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
992 {
993 remainingAmount -= splitAmount;
994
995 if (remainingAmount <= 0)
996 {
998 }
999 }
1000
1005};
1006
1007// 54149 - Infusion of Light
1009{
1010 static constexpr flag128 HolyLightSpellClassMask = { 0, 0, 0x400 };
1011
1012 bool Validate(SpellInfo const* /*spellInfo*/) override
1013 {
1015 }
1016
1017 bool CheckFlashOfLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1018 {
1019 return eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->m_appliedMods.find(GetAura()) != eventInfo.GetProcSpell()->m_appliedMods.end();
1020 }
1021
1022 bool CheckHolyLightProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1023 {
1025 }
1026
1027 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
1028 {
1030 CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetTriggeringSpell(eventInfo.GetProcSpell()));
1031 }
1032
1041};
1042
1043// 327193 - Moment of Glory
1045{
1046 bool Validate(SpellInfo const* /*spellInfo*/) override
1047 {
1049 }
1050
1055
1056 void Register() override
1057 {
1059 }
1060};
1061
1062// 20271/275779/275773 - Judgement (Retribution/Protection/Holy)
1064{
1065 bool Validate(SpellInfo const* /*spellInfo*/) override
1066 {
1067 return ValidateSpellInfo
1068 ({
1071 });
1072 }
1073
1074 bool Load() override
1075 {
1077 }
1078
1079 void HandleOnCast() const
1080 {
1081 Unit* caster = GetCaster();
1084 .TriggeringSpell = GetSpell()
1085 });
1086 }
1087
1088 void Register() override
1089 {
1091 }
1092};
1093
1094// 403495 - Judgment of Justice (attached to 20271 - Judgment)
1127
1128// 215661 - Justicar's Vengeance
1130{
1131 bool Validate(SpellInfo const* spellInfo) override
1132 {
1133 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
1134 }
1135
1136 void HandleDamage(SpellEffectInfo const& /*spellEffectInfo*/, Unit const* victim, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const
1137 {
1138 if (victim->HasUnitState(UNIT_STATE_STUNNED))
1139 AddPct(pctMod, GetEffectInfo(EFFECT_1).CalcValue(GetCaster()));
1140 }
1141
1146};
1147
1148// 114165 - Holy Prism
1171
1172// 114852 - Holy Prism (Damage)
1173// 114871 - Holy Prism (Heal)
1175{
1180
1182 {
1184 }
1185
1186 void FilterTargets(std::list<WorldObject*>& targets)
1187 {
1188 uint8 const maxTargets = 5;
1189
1190 if (targets.size() > maxTargets)
1191 {
1193 {
1195 targets.resize(maxTargets);
1196 }
1197 else
1198 Trinity::Containers::RandomResize(targets, maxTargets);
1199 }
1200
1201 _sharedTargets = targets;
1202 }
1203
1204 void ShareTargets(std::list<WorldObject*>& targets)
1205 {
1206 targets = _sharedTargets;
1207 }
1208
1209 void HandleScript(SpellEffIndex /*effIndex*/)
1210 {
1211 if (Unit* initialTarget = ObjectAccessor::GetUnit(*GetCaster(), _targetGUID))
1212 initialTarget->CastSpell(GetHitUnit(), SPELL_PALADIN_HOLY_PRISM_AREA_BEAM_VISUAL, true);
1213 }
1214
1227
1228private:
1229 std::list<WorldObject*> _sharedTargets;
1231};
1232
1233// 199422 - Holy Ritual (attached to 6940 - Blessing of Sacrifice and 1022 - Blessing of Protection)
1259
1260// 20473 - Holy Shock
1262{
1263 bool Validate(SpellInfo const* /*spellInfo*/) override
1264 {
1265 return ValidateSpellInfo
1266 ({
1270 });
1271 }
1272
1274 {
1275 Unit* caster = GetCaster();
1276
1277 if (Unit* target = GetExplTargetUnit())
1278 {
1279 if (!caster->IsFriendlyTo(target))
1280 {
1281 if (!caster->IsValidAttackTarget(target))
1283
1284 if (!caster->isInFront(target))
1286 }
1287 }
1288 else
1290
1291 return SPELL_CAST_OK;
1292 }
1293
1294 void HandleDummy(SpellEffIndex /*effIndex*/)
1295 {
1296 Unit* caster = GetCaster();
1297
1298 if (Unit* unitTarget = GetHitUnit())
1299 {
1300 if (caster->IsFriendlyTo(unitTarget))
1301 caster->CastSpell(unitTarget, SPELL_PALADIN_HOLY_SHOCK_HEALING, GetSpell());
1302 else
1303 caster->CastSpell(unitTarget, SPELL_PALADIN_HOLY_SHOCK_DAMAGE, GetSpell());
1304 }
1305 }
1306
1312};
1313
1314// 25912 - Holy Shock
1333
1334// 25914 - Holy Shock
1353
1354// 37705 - Healing Discount
1356{
1357 bool Validate(SpellInfo const* /*spellInfo*/) override
1358 {
1360 }
1361
1362 void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
1363 {
1366 }
1367
1372};
1373
1374// 40470 - Paladin Tier 6 Trinket
1376{
1377 bool Validate(SpellInfo const* /*spellInfo*/) override
1378 {
1379 return ValidateSpellInfo(
1380 {
1383 });
1384 }
1385
1386 bool CheckProc(ProcEventInfo& eventInfo)
1387 {
1388 SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
1389 if (!spellInfo)
1390 return false;
1391
1392 // Holy Light & Flash of Light
1393 if (spellInfo->SpellFamilyFlags[0] & 0xC0000000)
1394 {
1395 if (!roll_chance(15))
1396 return false;
1397
1399 return true;
1400 }
1401 // Judgements
1402 else if (spellInfo->SpellFamilyFlags[0] & 0x00800000)
1403 {
1404 if (!roll_chance(50))
1405 return false;
1406
1408 return true;
1409 }
1410
1411 return false;
1412 }
1413
1414 void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
1415 {
1417 eventInfo.GetActor()->CastSpell(eventInfo.GetActionTarget(), _triggeredSpellId, aurEff);
1418 }
1419
1425
1427};
1428
1429// 633 - Lay on Hands
1430// 471195 - Lay on Hands (from 387791 - Empyreal Ward)
1452
1453// 53651 - Light's Beacon - Beacon of Light
1455{
1456 bool Validate(SpellInfo const* /*spellInfo*/) override
1457 {
1459 }
1460
1461 bool CheckProc(ProcEventInfo& eventInfo)
1462 {
1463 if (!eventInfo.GetActionTarget())
1464 return false;
1465 if (eventInfo.GetActionTarget()->HasAura(SPELL_PALADIN_BEACON_OF_LIGHT, eventInfo.GetActor()->GetGUID()))
1466 return false;
1467 HealInfo* healInfo = eventInfo.GetHealInfo();
1468 return healInfo && healInfo->GetHeal();
1469 }
1470
1471 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1472 {
1474
1475 SpellEffectValue heal = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
1476
1477 Unit::AuraList const& auras = GetCaster()->GetSingleCastAuras();
1478 for (Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
1479 {
1480 if ((*itr)->GetId() == SPELL_PALADIN_BEACON_OF_LIGHT)
1481 {
1482 std::vector<AuraApplication*> applications;
1483 (*itr)->GetApplicationVector(applications);
1484 if (!applications.empty())
1485 {
1486 CastSpellExtraArgs args(aurEff);
1488 eventInfo.GetActor()->CastSpell(applications.front()->GetTarget(), SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, args);
1489 }
1490 return;
1491 }
1492 }
1493 }
1494
1500};
1501
1502// 122773 - Light's Hammer
1533
1534// 114918 - Light's Hammer (Periodic)
1536{
1537 bool Validate(SpellInfo const* /*spellInfo*/) override
1538 {
1539 return ValidateSpellInfo
1540 ({
1543 });
1544 }
1545
1546 void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
1547 {
1548 Unit* lightHammer = GetTarget();
1549 if (Unit* originalCaster = lightHammer->GetOwner())
1550 {
1551 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1552 originalCaster->CastSpell(lightHammer->GetPosition(), SPELL_PALADIN_LIGHT_HAMMER_HEALING, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
1553 }
1554 }
1555
1560};
1561
1562// 204074 - Righteous Protector
1564{
1565 bool Validate(SpellInfo const* /*spellInfo*/) override
1566 {
1568 }
1569
1570 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1571 {
1572 if (SpellInfo const* procSpell = eventInfo.GetSpellInfo())
1573 _baseHolyPowerCost = procSpell->CalcPowerCost(POWER_HOLY_POWER, false, eventInfo.GetActor(), eventInfo.GetSchoolMask());
1574 else
1575 _baseHolyPowerCost.reset();
1576
1577 return _baseHolyPowerCost.has_value();
1578 }
1579
1587
1593
1595};
1596
1597// 267610 - Righteous Verdict
1599{
1600 bool Validate(SpellInfo const* /*spellEntry*/) override
1601 {
1603 }
1604
1605 void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
1606 {
1607 procInfo.GetActor()->CastSpell(procInfo.GetActor(), SPELL_PALADIN_RIGHTEOUS_VERDICT_AURA, true);
1608 }
1609
1614};
1615
1616// 85804 - Selfless Healer
1618{
1619 bool CheckEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
1620 {
1621 if (Spell const* procSpell = eventInfo.GetProcSpell())
1622 return procSpell->HasPowerTypeCost(POWER_HOLY_POWER);
1623
1624 return false;
1625 }
1626
1631};
1632
1633// 53600 - Shield of the Righteous
1635{
1636 bool Validate(SpellInfo const* /*spellInfo*/) override
1637 {
1639 }
1640
1645
1650};
1651
1652// 184662 - Shield of Vengeance
1654{
1655 bool Validate(SpellInfo const* spellInfo) override
1656 {
1658 }
1659
1660 void CalculateAmount(AuraEffect const* /*aurEff*/, SpellEffectValue& amount, bool& /*canBeRecalculated*/)
1661 {
1662 amount = CalculatePct(GetUnitOwner()->GetMaxHealth(), GetEffectInfo(EFFECT_1).CalcValue());
1663 if (Player const* player = GetUnitOwner()->ToPlayer())
1664 AddPct(amount, player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + player->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
1665
1666 _initialAmount = amount;
1667 }
1668
1674
1680
1682};
1683
1684// 469304 - Steed of Liberty
1686{
1687 bool Validate(SpellInfo const* /*spellInfo*/) override
1688 {
1690 }
1691
1692 void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/) const
1693 {
1694 Unit* target = GetTarget();
1697 .TriggeringAura = aurEff,
1698 .SpellValueOverrides = { { SPELLVALUE_DURATION, aurEff->GetAmountAsInt() } }
1699 });
1700 }
1701
1706};
1707
1708// 85256 - Templar's Verdict
1710{
1711 bool Validate(SpellInfo const* /*spellEntry*/) override
1712 {
1714 }
1715
1720
1725};
1726
1727// 28789 - Holy Power
1729{
1740
1741 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1742 {
1744
1745 uint32 spellId;
1746 Unit* caster = eventInfo.GetActor();
1747 Unit* target = eventInfo.GetActionTarget();
1748
1749 switch (target->GetClass())
1750 {
1751 case CLASS_PALADIN:
1752 case CLASS_PRIEST:
1753 case CLASS_SHAMAN:
1754 case CLASS_DRUID:
1756 break;
1757 case CLASS_MAGE:
1758 case CLASS_WARLOCK:
1760 break;
1761 case CLASS_HUNTER:
1762 case CLASS_ROGUE:
1764 break;
1765 case CLASS_WARRIOR:
1767 break;
1768 default:
1769 return;
1770 }
1771
1772 caster->CastSpell(target, spellId, aurEff);
1773 }
1774
1779};
1780
1781// 64890 - Item - Paladin T8 Holy 2P Bonus
1783{
1784 bool Validate(SpellInfo const* /*spellInfo*/) override
1785 {
1787 && sSpellMgr->AssertSpellInfo(SPELL_PALADIN_HOLY_MENDING, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount() > 0;
1788 }
1789
1790 bool CheckProc(ProcEventInfo& eventInfo)
1791 {
1792 HealInfo* healInfo = eventInfo.GetHealInfo();
1793 return healInfo && healInfo->GetHeal();
1794 }
1795
1796 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
1797 {
1799
1800 Unit* caster = eventInfo.GetActor();
1801 Unit* target = eventInfo.GetActionTarget();
1802
1803 SpellEffectInfo const& hotEffect = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_HOLY_MENDING, GetCastDifficulty())->GetEffect(EFFECT_0);
1804 SpellEffectValue amount = CalculatePct(static_cast<SpellEffectValue>(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount());
1805
1806 amount /= hotEffect.GetPeriodicTickCount();
1807
1808 CastSpellExtraArgs args(aurEff);
1809 args.AddSpellBP0(amount);
1810 caster->CastSpell(target, SPELL_PALADIN_HOLY_MENDING, args);
1811 }
1812
1818};
1819
1820// 405547 - Paladin Protection 10.1 Class Set 2pc
1822{
1823 bool Validate(SpellInfo const* /*spellInfo*/) override
1824 {
1826 && sSpellMgr->AssertSpellInfo(SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount() > 0;
1827 }
1828
1829 void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
1830 {
1832
1833 Unit* caster = procInfo.GetActor();
1834 uint32 ticks = sSpellMgr->AssertSpellInfo(SPELL_PALADIN_T30_2P_HEARTFIRE_DAMAGE, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount();
1835 SpellEffectValue damage = CalculatePct(procInfo.GetDamageInfo()->GetOriginalDamage(), aurEff->GetAmount()) / ticks;
1836
1838 .SetTriggeringSpell(procInfo.GetProcSpell())
1840 }
1841
1846};
1847
1848// 408461 - Heartfire
1874
1875// 255937 - Wake of Ashes
1877{
1878 bool Validate(SpellInfo const* /*spellEntry*/) override
1879 {
1881 }
1882
1883 void HandleHitTarget(SpellEffIndex /*effIndex*/) const
1884 {
1885 Unit* target = GetHitUnit();
1886
1890 .TriggeringSpell = GetSpell()
1891 });
1892 }
1893
1898};
1899
1900// 269569 - Zeal
1902{
1903 bool Validate(SpellInfo const* /*spellInfo*/) override
1904 {
1906 }
1907
1908 void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
1909 {
1910 Unit* target = GetTarget();
1912
1914 }
1915
1920};
1921
1923{
1982}
AreaTriggerExitReason
Definition AreaTrigger.h:70
DB2Storage< SpellVisualEntry > sSpellVisualStore("SpellVisual.db2", &SpellVisualLoadInfo::Instance)
DB2Storage< SpellVisualKitEntry > sSpellVisualKitStore("SpellVisualKit.db2", &SpellVisualKitLoadInfo::Instance)
@ DIFFICULTY_NONE
Definition DBCEnums.h:936
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:63
@ RACE_LIGHTFORGED_DRAENEI
Definition RaceMask.h:59
@ RACE_DRAENEI
Definition RaceMask.h:40
@ RACE_ZANDALARI_TROLL
Definition RaceMask.h:60
@ RACE_BLOODELF
Definition RaceMask.h:39
@ RACE_DWARF
Definition RaceMask.h:32
@ RACE_HUMAN
Definition RaceMask.h:30
@ RACE_TAUREN
Definition RaceMask.h:35
bool roll_chance(float chance, PseudoRandomDistributionState &state)
Definition Random.cpp:131
#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
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_SPELL
@ SPELL_EFFECT_SUMMON
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ 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
@ TARGET_UNIT_CASTER
@ CREATURE_TYPE_UNDEAD
@ CREATURE_TYPE_DEMON
@ 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:278
@ CR_VERSATILITY_DAMAGE_DONE
Definition Unit.h:359
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:467
uint32 GetDamage() const
Definition Unit.h:466
uint32 GetHeal() const
Definition Unit.h:496
HealInfo * GetHealInfo() const
Definition Unit.h:525
SpellSchoolMask GetSchoolMask() const
Definition Unit.cpp:292
Unit * GetActionTarget() const
Definition Unit.h:514
Spell const * GetProcSpell() const
Definition Unit.h:527
SpellInfo const * GetSpellInfo() const
Definition Unit.cpp:281
DamageInfo * GetDamageInfo() const
Definition Unit.h:524
Unit * GetActor() const
Definition Unit.h:513
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:590
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:8088
std::vector< T > & GetExecuteLogEffectTargets(SpellEffects effect, Optional< std::vector< T > > SpellLogEffect::*member)
Definition Spell.h:572
UsedSpellMods m_appliedMods
Definition Spell.h:654
Binary predicate for sorting Units based on percent value of health.
Definition Unit.h:647
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3846
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
Definition Unit.cpp:12400
uint8 GetClass() const
Definition Unit.h:776
virtual bool HasSpell(uint32) const
Definition Unit.h:1099
uint32 GetCreatureType() const
Definition Unit.cpp:9478
std::forward_list< Aura * > AuraList
Definition Unit.h:665
bool HasUnitState(const uint32 f) const
Definition Unit.h:755
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
Definition Unit.cpp:12437
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4822
SpellHistory * GetSpellHistory()
Definition Unit.h:1521
AuraList & GetSingleCastAuras()
Definition Unit.h:1364
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3992
uint8 GetRace() const
Definition Unit.h:773
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2222
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition Object.cpp:2329
Unit * GetOwner() const
Definition Object.cpp:1603
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Definition Object.cpp:668
bool IsFriendlyTo(WorldObject const *target) const
Definition Object.cpp:2191
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
bool Validate(SpellInfo const *) override
void Register() override
static void HandleProc(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
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
void HandleHeal(SpellEffIndex) const
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 CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *spellInfo) override
void HandleDummy(SpellEffIndex) const
void PreventSpeed(WorldObject *&target) const
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
bool CheckProc(ProcEventInfo &eventInfo)
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_JUDGMENT_OF_JUSTICE_TALENT
@ 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_HOLY_RITUAL_HEAL
@ 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_EXPURGATION
@ 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_HOLY_RITUAL_TALENT
@ SPELL_PALADIN_HAMMER_OF_JUSTICE
@ SPELL_PALADIN_CONSECRATION
@ SPELL_PALADIN_JUDGMENT_OF_JUSTICE
@ 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:9646
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