diff options
-rw-r--r-- | sql/updates/7707_world_spell_dbc.sql | 1 | ||||
-rw-r--r-- | sql/world.sql | 2 | ||||
-rw-r--r-- | src/game/Spell.cpp | 30 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 12 |
4 files changed, 26 insertions, 19 deletions
diff --git a/sql/updates/7707_world_spell_dbc.sql b/sql/updates/7707_world_spell_dbc.sql new file mode 100644 index 00000000000..215d7576228 --- /dev/null +++ b/sql/updates/7707_world_spell_dbc.sql @@ -0,0 +1 @@ +UPDATE `spell_dbc` SET `DurationIndex` = 25 WHERE `Id` = 61988; diff --git a/sql/world.sql b/sql/world.sql index db2021c6f2b..3a61ec57278 100644 --- a/sql/world.sql +++ b/sql/world.sql @@ -5199,7 +5199,7 @@ INSERT INTO `spell_dbc` (`Id`,`Dispel`,`Mechanic`,`Attributes`,`AttributesEx`,`A (58888, 0, 0, 0, 0, 0, 0x04000000, 0, 0, 0, 1, 0, 0, 101, 0, 0, 68, 68, 0, 1, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Ritual of Souls Rank 2 - Trigger Create Soulwell (58889)'), (34145, 0, 0, 0, 0, 0, 0x04000000, 0, 0, 0, 1, 0, 0, 101, 0, 0, 80, 80, 0, 1, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Ritual of Souls Rank 1 - Trigger Create Soulwell (29886)'), (200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, -1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 'Drain Soul increased damage - serverside spell'), -(61988, 0, 0, 0x28000180, 0x10000400, 0x4, 0x10100000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 13, 0, '-1', 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Divine Shield Exclude Aura - 61988'), +(61988, 0, 0, 0x28000180, 0x10000400, 0x4, 0x10100000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 13, 0, '-1', 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Divine Shield Exclude Aura - 61988'), (42876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Quest 9275 reward serverside spell'), (44987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Quest 11521 reward serverside spell'), (48803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Quest 12214 reward serverside spell'), diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index c0948ce3bdd..9a17722bd24 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1414,14 +1414,20 @@ void Spell::DoTriggersOnSpellHit(Unit *unit) // Apply additional spell effects to target if (m_preCastSpell) { - // Special spell id - if(m_preCastSpell==61988) + // Paladin immunity shields + if (m_preCastSpell == 61988) { - //Cast Forbearance - m_caster->CastSpell(unit,25771, true, m_CastItem); + // Cast Forbearance + m_caster->CastSpell(unit, 25771, true); // Cast Avenging Wrath Marker - m_caster->CastSpell(unit,61987, true, m_CastItem); + unit->CastSpell(unit, 61987, true); } + + // Avenging Wrath + if (m_preCastSpell == 61987) + // Cast the serverside immunity shield marker + m_caster->CastSpell(unit, 61988, true); + if (sSpellStore.LookupEntry(m_preCastSpell)) // Blizz seems to just apply aura without bothering to cast m_caster->AddAura(m_preCastSpell, unit); @@ -4512,11 +4518,6 @@ SpellCastResult Spell::CheckCast(bool strict) if(m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) return SPELL_FAILED_TARGET_AURASTATE; - // Special exclude - Hand of Protection, Divine Protection, Divine Shield cannot be cast on target after it used Avenging Wrath - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->Mechanic == MECHANIC_IMMUNE_SHIELD) - if (target->HasAura(61987)) // Avenging Wrath Marker - return SPELL_FAILED_TARGET_AURASTATE; - if(!m_IsTriggeredSpell && target == m_caster && m_spellInfo->AttributesEx & SPELL_ATTR_EX_CANT_TARGET_SELF) return SPELL_FAILED_BAD_TARGETS; @@ -4587,13 +4588,8 @@ SpellCastResult Spell::CheckCast(bool strict) } // Lay on Hands - cannot be self-cast on paladin with Forbearance or after using Avenging Wrath if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags[0] & 0x0008000) - { - if (target->HasAura(61987)) // Avenging Wrath Marker - return SPELL_FAILED_TARGET_AURASTATE; - - if (target->HasAura(25771)) // Forbearance (we could test for the immune shield marker 61988 instead) - return SPELL_FAILED_TARGET_AURASTATE; - } + if (target->HasAura(61988)) // Immunity shield marker + return SPELL_FAILED_TARGET_AURASTATE; } } diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 1732656b8b1..3a91bcffe58 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1043,6 +1043,11 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, } switch(GetSpellProto()->SpellFamilyName) { + case SPELLFAMILY_GENERIC: + // Remove the immunity shield marker on Avenging Wrath removal if Forbearance is not present + if (GetId() == 61987 && target->HasAura(61988) && !target->HasAura(25771)) + target->RemoveAura(61988); + break; case SPELLFAMILY_MAGE: switch(GetId()) { @@ -1217,6 +1222,11 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, break; } break; + case SPELLFAMILY_PALADIN: + // Remove the immunity shield marker on Forbearance removal if AW marker is not present + if (GetId() == 25771 && target->HasAura(61988) && !target->HasAura(61987)) + target->RemoveAura(61988); + break; case SPELLFAMILY_DEATHKNIGHT: // Blood of the North // Reaping @@ -1241,7 +1251,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, target->CastSpell(target, GetEffect(0)->GetAmount(), true, NULL, GetEffect(0)); break; } - break; + break; } } |