fix(Core/Spell): Implement SPELL_ATTR6_NO_PUSHBACK (#19292)

fix(Core/Spell): ImplementSPELL_ATTR6_NO_PUSHBACK
This commit is contained in:
avarishd
2024-07-17 15:09:34 +03:00
committed by GitHub
parent ca70459f05
commit cf7c015ea4
4 changed files with 14 additions and 2 deletions

View File

@@ -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;
@@ -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());

View File

@@ -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];

View File

@@ -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

View File

@@ -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" };