Skip to content

Commit

Permalink
fix(Core/Spell): Implement SPELL_ATTR6_NO_PUSHBACK (azerothcore#19292)
Browse files Browse the repository at this point in the history
fix(Core/Spell): ImplementSPELL_ATTR6_NO_PUSHBACK
  • Loading branch information
avarishd authored Jul 17, 2024
1 parent ca70459 commit cf7c015
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 2 deletions.
6 changes: 6 additions & 0 deletions src/server/game/Spells/Spell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7746,6 +7746,9 @@ void Spell::Delayed() // only called in DealDamage()
if (isDelayableNoMore()) // Spells may only be delayed twice
return;

if (m_spellInfo->HasAttribute(SPELL_ATTR6_NO_PUSHBACK))
return;

// spells not loosing casting time (slam, dynamites, bombs..)
//if (!(m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_DAMAGE))
// return;
Expand Down Expand Up @@ -7785,6 +7788,9 @@ void Spell::DelayedChannel()
if (isDelayableNoMore()) // Spells may only be delayed twice
return;

if (m_spellInfo->HasAttribute(SPELL_ATTR6_NO_PUSHBACK))
return;

//check pushback reduce
// should be affected by modifiers, not take the dbc duration.
int32 duration = ((m_channeledDuration > 0) ? m_channeledDuration : m_spellInfo->GetDuration());
Expand Down
6 changes: 6 additions & 0 deletions src/server/game/Spells/SpellInfoCorrections.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4815,6 +4815,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
});

// Shadow Grasp
ApplySpellFix({ 30410 }, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_PUSHBACK;
});

for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
SpellInfo* spellInfo = mSpellInfoMap[i];
Expand Down
2 changes: 1 addition & 1 deletion src/server/shared/SharedDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ enum SpellAttr6 : uint32
SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE = 0x00001000, // TITLE Castable while caster is on vehicle
SPELL_ATTR6_IGNORE_PHASE_SHIFT = 0x00002000, // TITLE Can target invisible units
SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK = 0x00004000, // TITLE Unknown attribute 14@Attr6
SPELL_ATTR6_NO_PUSHBACK = 0x00008000, // TITLE Unknown attribute 15@Attr6 DESCRIPTION only 54368, 67892
SPELL_ATTR6_NO_PUSHBACK = 0x00008000, // TITLE Not affected by pushback DESCRIPTION Casts/Channels will not affected by pushback
SPELL_ATTR6_NO_JUMP_PATHING = 0x00010000, // TITLE Unknown attribute 16@Attr6
SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING = 0x00020000, // TITLE Unknown attribute 17@Attr6 DESCRIPTION Mount related?
SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER = 0x00040000, // TITLE Spell is cast by charmer DESCRIPTION Client will prevent casting if not possessed, charmer will be caster for all intents and purposes
Expand Down
2 changes: 1 addition & 1 deletion src/server/shared/enuminfo_SharedDefines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -946,7 +946,7 @@ AC_API_EXPORT EnumText EnumUtils<SpellAttr6>::ToString(SpellAttr6 value)
case SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE: return { "SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE", "Castable while caster is on vehicle", "" };
case SPELL_ATTR6_IGNORE_PHASE_SHIFT: return { "SPELL_ATTR6_IGNORE_PHASE_SHIFT", "Can target invisible units", "" };
case SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK: return { "SPELL_ATTR6_AI_PRIMARY_RANGED_ATTACK", "Unknown attribute 14@Attr6", "" };
case SPELL_ATTR6_NO_PUSHBACK: return { "SPELL_ATTR6_NO_PUSHBACK", "Unknown attribute 15@Attr6", "only 54368, 67892" };
case SPELL_ATTR6_NO_PUSHBACK: return { "SPELL_ATTR6_NO_PUSHBACK", "Not affected by pushback", "Casts/Channels will not affected by pushback" };
case SPELL_ATTR6_NO_JUMP_PATHING: return { "SPELL_ATTR6_NO_JUMP_PATHING", "Unknown attribute 16@Attr6", "" };
case SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING: return { "SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING", "Unknown attribute 17@Attr6", "Mount related?" };
case SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER: return { "SPELL_ATTR6_ORIGINATE_FROM_CONTROLLER", "Spell is cast by charmer", "Client will prevent casting if not possessed, charmer will be caster for all intents and purposes" };
Expand Down

0 comments on commit cf7c015

Please sign in to comment.