using Server.Items; using Server.Multis; using Server.Network; using Server.Targeting; namespace Server.Spells.Third { public class UnlockSpell : MagerySpell, ISpellTargetingPoint3D { private static readonly SpellInfo m_Info = new( "Unlock Spell", "Ex Por", 215, 9001, Reagent.Bloodmoss, Reagent.SulfurousAsh ); public UnlockSpell(Mobile caster, Item scroll = null) : base(caster, scroll, m_Info) { } public override SpellCircle Circle => SpellCircle.Third; public void Target(IPoint3D p) { if (CheckSequence()) { SpellHelper.Turn(Caster, p); var loc = new Point3D(p); Effects.SendLocationParticles( EffectItem.Create(loc, Caster.Map, EffectItem.DefaultDuration), 0x376A, 9, 32, 5024 ); Effects.PlaySound(loc, Caster.Map, 0x1FF); if (p is Mobile) { Caster.LocalOverheadMessage(MessageType.Regular, 0x3B2, 503101); // That did not need to be unlocked. } else if (!(p is LockableContainer cont)) { Caster.SendLocalizedMessage(501666); // You can't unlock that! } else { if (BaseHouse.CheckSecured(cont)) { Caster.SendLocalizedMessage(503098); // You cannot cast this on a secure item. } else if (!cont.Locked) { Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503101 ); // That did not need to be unlocked. } else if (cont.LockLevel == 0) { Caster.SendLocalizedMessage(501666); // You can't unlock that! } else { var level = (int)(Caster.Skills.Magery.Value * 0.8) - 4; if (level >= cont.RequiredSkill && !(cont is TreasureMapChest chest && chest.Level > 2)) { cont.Locked = false; if (cont.LockLevel == -255) { cont.LockLevel = cont.RequiredSkill - 10; } } else { Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503099 ); // My spell does not seem to have an effect on that lock. } } } } FinishSequence(); } public override void OnCast() { Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); } } }