Skip to content

Commit 8c76cca

Browse files
committed
Core/Spells: Correct implementation of SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC, SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2, SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED and rename them (SPELL_ATTR2_ACTIVE_THREAT, SPELL_ATTR3_NOT_A_PROC, SPELL_ATTR3_CAN_PROC_FROM_PROCS)
(cherry picked from commit b6bc8a50acaf153849f58c8b408e236bb2b70c35)
1 parent 670f2bb commit 8c76cca

File tree

4 files changed

+16
-32
lines changed

4 files changed

+16
-32
lines changed

src/server/game/Spells/Auras/SpellAuras.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,8 +2004,8 @@ uint8 Aura::GetProcEffectMask(AuraApplication* aurApp, ProcEventInfo& eventInfo,
20042004
return 0;
20052005

20062006
// check if aura can proc when spell is triggered (exception for hunter auto shot & wands)
2007-
if (spell->IsTriggered() && !(procEntry->AttributesMask & PROC_ATTR_TRIGGERED_CAN_PROC) && !(eventInfo.GetTypeMask() & AUTO_ATTACK_PROC_FLAG_MASK))
2008-
if (!GetSpellInfo()->HasAttribute(SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED))
2007+
if (!GetSpellInfo()->HasAttribute(SPELL_ATTR3_CAN_PROC_FROM_PROCS) && !(procEntry->AttributesMask & PROC_ATTR_TRIGGERED_CAN_PROC) && !(eventInfo.GetTypeMask() & AUTO_ATTACK_PROC_FLAG_MASK))
2008+
if (spell->IsTriggered() && !spell->GetSpellInfo()->HasAttribute(SPELL_ATTR3_NOT_A_PROC))
20092009
return 0;
20102010

20112011
if (spell->m_CastItem && (procEntry->AttributesMask & PROC_ATTR_CANT_PROC_FROM_ITEM_CAST))

src/server/game/Spells/SpellMgr.cpp

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -520,22 +520,6 @@ bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcE
520520
if (eventInfo.GetTypeMask() & (PROC_FLAG_KILLED | PROC_FLAG_KILL | PROC_FLAG_DEATH))
521521
return true;
522522

523-
// do triggered cast checks
524-
// Do not consider autoattacks as triggered spells
525-
if (!(procEntry.AttributesMask & PROC_ATTR_TRIGGERED_CAN_PROC) && !(eventInfo.GetTypeMask() & AUTO_ATTACK_PROC_FLAG_MASK))
526-
{
527-
if (Spell const* spell = eventInfo.GetProcSpell())
528-
{
529-
if (spell->IsTriggered())
530-
{
531-
SpellInfo const* spellInfo = spell->GetSpellInfo();
532-
if (!spellInfo->HasAttribute(SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2) &&
533-
!spellInfo->HasAttribute(SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC))
534-
return false;
535-
}
536-
}
537-
}
538-
539523
// check school mask (if set) for other trigger types
540524
if (procEntry.SchoolMask && !(eventInfo.GetSchoolMask() & procEntry.SchoolMask))
541525
return false;
@@ -3237,7 +3221,7 @@ void SpellMgr::LoadSpellInfoCorrections()
32373221
{
32383222
// due to discrepancies between ranks
32393223
spellInfo->EquippedItemSubClassMask = 0x0000FC33;
3240-
spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED;
3224+
spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_FROM_PROCS;
32413225
});
32423226

32433227
ApplySpellFix({
@@ -3250,7 +3234,7 @@ void SpellMgr::LoadSpellInfoCorrections()
32503234
}, [](SpellInfo* spellInfo)
32513235
{
32523236
// Entries were not updated after spell effect change, we have to do that manually :/
3253-
spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED;
3237+
spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_FROM_PROCS;
32543238
});
32553239

32563240
ApplySpellFix({

src/server/shared/SharedDefines.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ enum SpellAttr2 : uint32
507507
SPELL_ATTR2_UNK27 = 0x08000000, // TITLE Unknown attribute 27@Attr2
508508
SPELL_ATTR2_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr2
509509
SPELL_ATTR2_CANT_CRIT = 0x20000000, // TITLE Cannot critically strike
510-
SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // TITLE Allow triggered spell to trigger (type 1) DESCRIPTION Without this attribute, any triggered spell will be unable to trigger other auras' procs
510+
SPELL_ATTR2_ACTIVE_THREAT = 0x40000000, // TITLE Active Threat
511511
SPELL_ATTR2_FOOD_BUFF = 0x80000000 // TITLE Food buff (client only)
512512
};
513513

@@ -523,7 +523,7 @@ enum SpellAttr3 : uint32
523523
SPELL_ATTR3_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr3
524524
SPELL_ATTR3_STACK_FOR_DIFF_CASTERS = 0x00000080, // TITLE Stack separately for each caster
525525
SPELL_ATTR3_ONLY_TARGET_PLAYERS = 0x00000100, // TITLE Can only target players
526-
SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 = 0x00000200, // TITLE Allow triggered spell to trigger (type 2) DESCRIPTION Without this attribute, any triggered spell will be unable to trigger other auras' procs
526+
SPELL_ATTR3_NOT_A_PROC = 0x00000200, // TITLE Not a Proc DESCRIPTION Without this attribute, any triggered spell will be unable to trigger other auras' procs
527527
SPELL_ATTR3_MAIN_HAND = 0x00000400, // TITLE Require main hand weapon
528528
SPELL_ATTR3_BATTLEGROUND = 0x00000800, // TITLE Can only be cast in battleground
529529
SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // TITLE Can only target ghost players
@@ -540,7 +540,7 @@ enum SpellAttr3 : uint32
540540
SPELL_ATTR3_UNK23 = 0x00800000, // TITLE Unknown attribute 23@Attr3
541541
SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // TITLE Requires offhand weapon
542542
SPELL_ATTR3_TREAT_AS_PERIODIC = 0x02000000, // TITLE Treat as periodic effect
543-
SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED = 0x04000000, // TITLE Can trigger from triggered spells
543+
SPELL_ATTR3_CAN_PROC_FROM_PROCS = 0x04000000, // TITLE Can Proc From Procs
544544
SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // TITLE Drain Soul
545545
SPELL_ATTR3_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr3
546546
SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // TITLE Damage dealt is unaffected by modifiers

src/server/shared/enuminfo_SharedDefines.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr2>::ToString(SpellAttr2 value)
556556
case SPELL_ATTR2_UNK27: return { "SPELL_ATTR2_UNK27", "Unknown attribute 27@Attr2", "" };
557557
case SPELL_ATTR2_UNK28: return { "SPELL_ATTR2_UNK28", "Unknown attribute 28@Attr2", "" };
558558
case SPELL_ATTR2_CANT_CRIT: return { "SPELL_ATTR2_CANT_CRIT", "Cannot critically strike", "" };
559-
case SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC: return { "SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC", "Allow triggered spell to trigger (type 1)", "Without this attribute, any triggered spell will be unable to trigger other auras' procs" };
559+
case SPELL_ATTR2_ACTIVE_THREAT: return { "SPELL_ATTR2_ACTIVE_THREAT", "Active Threat", "" };
560560
case SPELL_ATTR2_FOOD_BUFF: return { "SPELL_ATTR2_FOOD_BUFF", "Food buff (client only)", "" };
561561
default: throw std::out_of_range("value");
562562
}
@@ -600,7 +600,7 @@ TC_API_EXPORT SpellAttr2 EnumUtils<SpellAttr2>::FromIndex(size_t index)
600600
case 27: return SPELL_ATTR2_UNK27;
601601
case 28: return SPELL_ATTR2_UNK28;
602602
case 29: return SPELL_ATTR2_CANT_CRIT;
603-
case 30: return SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC;
603+
case 30: return SPELL_ATTR2_ACTIVE_THREAT;
604604
case 31: return SPELL_ATTR2_FOOD_BUFF;
605605
default: throw std::out_of_range("index");
606606
}
@@ -641,7 +641,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr2>::ToIndex(SpellAttr2 value)
641641
case SPELL_ATTR2_UNK27: return 27;
642642
case SPELL_ATTR2_UNK28: return 28;
643643
case SPELL_ATTR2_CANT_CRIT: return 29;
644-
case SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC: return 30;
644+
case SPELL_ATTR2_ACTIVE_THREAT: return 30;
645645
case SPELL_ATTR2_FOOD_BUFF: return 31;
646646
default: throw std::out_of_range("value");
647647
}
@@ -664,7 +664,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr3>::ToString(SpellAttr3 value)
664664
case SPELL_ATTR3_UNK6: return { "SPELL_ATTR3_UNK6", "Unknown attribute 6@Attr3", "" };
665665
case SPELL_ATTR3_STACK_FOR_DIFF_CASTERS: return { "SPELL_ATTR3_STACK_FOR_DIFF_CASTERS", "Stack separately for each caster", "" };
666666
case SPELL_ATTR3_ONLY_TARGET_PLAYERS: return { "SPELL_ATTR3_ONLY_TARGET_PLAYERS", "Can only target players", "" };
667-
case SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2: return { "SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2", "Allow triggered spell to trigger (type 2)", "Without this attribute, any triggered spell will be unable to trigger other auras' procs" };
667+
case SPELL_ATTR3_NOT_A_PROC: return { "SPELL_ATTR3_NOT_A_PROC", "Not a Proc", "Without this attribute, any triggered spell will be unable to trigger other auras' procs" };
668668
case SPELL_ATTR3_MAIN_HAND: return { "SPELL_ATTR3_MAIN_HAND", "Require main hand weapon", "" };
669669
case SPELL_ATTR3_BATTLEGROUND: return { "SPELL_ATTR3_BATTLEGROUND", "Can only be cast in battleground", "" };
670670
case SPELL_ATTR3_ONLY_TARGET_GHOSTS: return { "SPELL_ATTR3_ONLY_TARGET_GHOSTS", "Can only target ghost players", "" };
@@ -681,7 +681,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr3>::ToString(SpellAttr3 value)
681681
case SPELL_ATTR3_UNK23: return { "SPELL_ATTR3_UNK23", "Unknown attribute 23@Attr3", "" };
682682
case SPELL_ATTR3_REQ_OFFHAND: return { "SPELL_ATTR3_REQ_OFFHAND", "Requires offhand weapon", "" };
683683
case SPELL_ATTR3_TREAT_AS_PERIODIC: return { "SPELL_ATTR3_TREAT_AS_PERIODIC", "Treat as periodic effect", "" };
684-
case SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED: return { "SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED", "Can trigger from triggered spells", "" };
684+
case SPELL_ATTR3_CAN_PROC_FROM_PROCS: return { "SPELL_ATTR3_CAN_PROC_FROM_PROCS", "Can Proc From Procs", "" };
685685
case SPELL_ATTR3_DRAIN_SOUL: return { "SPELL_ATTR3_DRAIN_SOUL", "Drain Soul", "" };
686686
case SPELL_ATTR3_UNK28: return { "SPELL_ATTR3_UNK28", "Unknown attribute 28@Attr3", "" };
687687
case SPELL_ATTR3_NO_DONE_BONUS: return { "SPELL_ATTR3_NO_DONE_BONUS", "Damage dealt is unaffected by modifiers", "" };
@@ -708,7 +708,7 @@ TC_API_EXPORT SpellAttr3 EnumUtils<SpellAttr3>::FromIndex(size_t index)
708708
case 6: return SPELL_ATTR3_UNK6;
709709
case 7: return SPELL_ATTR3_STACK_FOR_DIFF_CASTERS;
710710
case 8: return SPELL_ATTR3_ONLY_TARGET_PLAYERS;
711-
case 9: return SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2;
711+
case 9: return SPELL_ATTR3_NOT_A_PROC;
712712
case 10: return SPELL_ATTR3_MAIN_HAND;
713713
case 11: return SPELL_ATTR3_BATTLEGROUND;
714714
case 12: return SPELL_ATTR3_ONLY_TARGET_GHOSTS;
@@ -725,7 +725,7 @@ TC_API_EXPORT SpellAttr3 EnumUtils<SpellAttr3>::FromIndex(size_t index)
725725
case 23: return SPELL_ATTR3_UNK23;
726726
case 24: return SPELL_ATTR3_REQ_OFFHAND;
727727
case 25: return SPELL_ATTR3_TREAT_AS_PERIODIC;
728-
case 26: return SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED;
728+
case 26: return SPELL_ATTR3_CAN_PROC_FROM_PROCS;
729729
case 27: return SPELL_ATTR3_DRAIN_SOUL;
730730
case 28: return SPELL_ATTR3_UNK28;
731731
case 29: return SPELL_ATTR3_NO_DONE_BONUS;
@@ -749,7 +749,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr3>::ToIndex(SpellAttr3 value)
749749
case SPELL_ATTR3_UNK6: return 6;
750750
case SPELL_ATTR3_STACK_FOR_DIFF_CASTERS: return 7;
751751
case SPELL_ATTR3_ONLY_TARGET_PLAYERS: return 8;
752-
case SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2: return 9;
752+
case SPELL_ATTR3_NOT_A_PROC: return 9;
753753
case SPELL_ATTR3_MAIN_HAND: return 10;
754754
case SPELL_ATTR3_BATTLEGROUND: return 11;
755755
case SPELL_ATTR3_ONLY_TARGET_GHOSTS: return 12;
@@ -766,7 +766,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr3>::ToIndex(SpellAttr3 value)
766766
case SPELL_ATTR3_UNK23: return 23;
767767
case SPELL_ATTR3_REQ_OFFHAND: return 24;
768768
case SPELL_ATTR3_TREAT_AS_PERIODIC: return 25;
769-
case SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED: return 26;
769+
case SPELL_ATTR3_CAN_PROC_FROM_PROCS: return 26;
770770
case SPELL_ATTR3_DRAIN_SOUL: return 27;
771771
case SPELL_ATTR3_UNK28: return 28;
772772
case SPELL_ATTR3_NO_DONE_BONUS: return 29;

0 commit comments

Comments
 (0)