diff --git a/common/spdat.cpp b/common/spdat.cpp index 08530df80..e0af5f0f4 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -266,7 +266,8 @@ bool IsInvisSpell(uint16 spell_id) IsEffectInSpell(spell_id, SE_Invisibility2) || IsEffectInSpell(spell_id, SE_InvisVsUndead) || IsEffectInSpell(spell_id, SE_InvisVsUndead2) || - IsEffectInSpell(spell_id, SE_InvisVsAnimals)) { + IsEffectInSpell(spell_id, SE_InvisVsAnimals) || + IsEffectInSpell(spell_id, SE_ImprovedInvisAnimals)) { return true; } return false; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index c154ff2e6..13530c040 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -3983,21 +3983,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - if (invisible) { - ZeroInvisibleVars(InvisType::T_INVISIBLE); - BuffFadeByEffect(SE_Invisibility); - BuffFadeByEffect(SE_Invisibility2); - } - - // Hack for broken RoF2 which allows casting after a zoned IVU/IVA - if (invisible_undead) { - BuffFadeByEffect(SE_InvisVsUndead); - BuffFadeByEffect(SE_InvisVsUndead2); - } - if (invisible_animals) { - BuffFadeByEffect(SE_InvisVsAnimals); - BuffFadeByEffect(SE_ImprovedInvisAnimals); - } + BreakInvisibleSpells(); CastSpell_Struct* castspell = (CastSpell_Struct*)app->pBuffer; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 1a5da0a7a..4a3b7b68e 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -3239,6 +3239,12 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_FFItemClass: case SE_SpellEffectResistChance: case SE_SeeInvis: + case SE_Invisibility: + case SE_Invisibility2: + case SE_InvisVsAnimals: + case SE_ImprovedInvisAnimals: + case SE_InvisVsUndead: + case SE_InvisVsUndead2: { break; }