diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index b7b44277e..6afc3da5d 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -4061,7 +4061,12 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - CastSpell(spell_to_cast, castspell->target_id, slot); + if (IsValidSpell(spell_to_cast)) { + CastSpell(spell_to_cast, castspell->target_id, slot); + } + else { + InterruptSpell(); + } } /* Spell Slot or Potion Belt Slot */ else if (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt) // ITEM or POTION cast diff --git a/zone/spells.cpp b/zone/spells.cpp index 7daabb156..11e8f201e 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -180,14 +180,19 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot, { LogSpells("Spell casting canceled: not able to cast now. Valid? [{}], casting [{}], waiting? [{}], spellend? [{}], stunned? [{}], feared? [{}], mezed? [{}], silenced? [{}], amnesiad? [{}]", IsValidSpell(spell_id), casting_spell_id, delaytimer, spellend_timer.Enabled(), IsStunned(), IsFeared(), IsMezzed(), IsSilenced(), IsAmnesiad() ); - if(IsSilenced() && !IsDiscipline(spell_id)) + + if (IsSilenced() && !IsDiscipline(spell_id)) { MessageString(Chat::Red, SILENCED_STRING); - if(IsAmnesiad() && IsDiscipline(spell_id)) + } + if (IsAmnesiad() && IsDiscipline(spell_id)) { MessageString(Chat::Red, MELEE_SILENCE); - if(IsClient()) + } + if (IsClient()) { CastToClient()->SendSpellBarEnable(spell_id); - if(casting_spell_id && IsNPC()) + } + if (casting_spell_id && IsNPC()) { CastToNPC()->AI_Event_SpellCastFinished(false, static_cast(casting_spell_slot)); + } return(false); } //It appears that the Sanctuary effect is removed by a check on the client side (keep this however for redundancy)