/// <summary> /// Casts the cloak proc spell /// </summary> public static bool HandleProcSpell(Creature defender, WorldObject attacker, WorldObject cloak) { if (cloak.ProcSpell == null) { return(false); } var spell = new Spell(cloak.ProcSpell.Value); if (spell.NotFound) { if (defender is Player player) { if (spell._spellBase == null) { player.Session.Network.EnqueueSend(new GameMessageSystemChat($"SpellId {cloak.ProcSpell} Invalid.", ChatMessageType.System)); } else { player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{spell.Name} spell not implemented, yet!", ChatMessageType.System)); } } return(false); } var targetSelf = spell.Flags.HasFlag(SpellFlags.SelfTargeted); var untargeted = spell.NonComponentTargetType == ItemType.None; var target = attacker; if (untargeted) { target = null; } else if (targetSelf) { target = defender; } // cloak range? var msg = new GameMessageSystemChat($"The cloak of {defender.Name} weaves the magic of {spell.Name}!", ChatMessageType.Spellcasting); defender.EnqueueBroadcast(msg, WorldObject.LocalBroadcastRange, ChatMessageType.Spellcasting); defender.TryCastSpell(spell, target, cloak, cloak, true, true, false); return(true); }