diff --git a/Projects/UOContent/Engines/Factions/Mobiles/Guards/GuardAI.cs b/Projects/UOContent/Engines/Factions/Mobiles/Guards/GuardAI.cs index 2345d09bc..804ddbef7 100644 --- a/Projects/UOContent/Engines/Factions/Mobiles/Guards/GuardAI.cs +++ b/Projects/UOContent/Engines/Factions/Mobiles/Guards/GuardAI.cs @@ -487,7 +487,7 @@ namespace Server.Factions { targ.Invoke(m_Guard, toHarm); } - else if ((targ as ISpellTarget)?.Spell is DispelSpell) + else if ((targ as ISpellTarget)?.Spell is DispelSpell) { targ.Cancel(m_Guard, TargetCancelType.Canceled); } diff --git a/Projects/UOContent/Mobiles/AI/HealerAI.cs b/Projects/UOContent/Mobiles/AI/HealerAI.cs index 9e228ba75..9a08703ea 100644 --- a/Projects/UOContent/Mobiles/AI/HealerAI.cs +++ b/Projects/UOContent/Mobiles/AI/HealerAI.cs @@ -31,7 +31,7 @@ public class HealerAI : BaseAI if (targ != null) { - var spellTarg = targ as ISpellTarget; + var spellTarg = targ as ISpellTarget; if (spellTarg?.Spell is CureSpell) { diff --git a/Projects/UOContent/Mobiles/AI/MageAI.cs b/Projects/UOContent/Mobiles/AI/MageAI.cs index 65b2df2b7..9a323f812 100644 --- a/Projects/UOContent/Mobiles/AI/MageAI.cs +++ b/Projects/UOContent/Mobiles/AI/MageAI.cs @@ -777,7 +777,7 @@ public class MageAI : BaseAI m_Mobile.DebugSay("I used my abilities!"); } } - else if (m_Mobile.Spell == null && Core.TickCount - m_NextCastTime >= 0 && m_Mobile.InRange(c, Core.ML ? 10 : 12)) + else if (m_Mobile.Spell == null && Core.TickCount - m_NextCastTime >= 0) { // We are ready to cast a spell Spell spell; @@ -816,24 +816,30 @@ public class MageAI : BaseAI }; // Now we have a spell picked - // Move first before casting + var range = (spell as IRangedSpell)?.TargetRange ?? m_Mobile.RangePerception; + // Move first before casting if (!SmartAI || toDispel == null) { RunTo(c); } - else if (m_Mobile.InRange(toDispel, 10)) + else if (m_Mobile.InRange(toDispel, Math.Min(10, range))) { RunFrom(toDispel); } - else if (!m_Mobile.InRange(toDispel, Core.ML ? 10 : 12)) + else if (!m_Mobile.InRange(toDispel, range)) { RunTo(toDispel); } - spell?.Cast(); + // After running, make sure we are still in range + if (spell == null || m_Mobile.InRange(c, range)) + { + spell?.Cast(); - m_NextCastTime = Core.TickCount + (int)GetDelay(spell).TotalMilliseconds; + // Even if we don't have a spell, delay the next potential cast + m_NextCastTime = Core.TickCount + (int)GetDelay(spell).TotalMilliseconds; + } } else if (m_Mobile.Spell?.IsCasting != true) { @@ -857,7 +863,7 @@ public class MageAI : BaseAI { var map = m_Mobile.Map; - if (map == null || !m_Mobile.InRange(m_LastTargetLoc, Core.ML ? 10 : 12)) + if (map == null || !m_Mobile.InRange(m_LastTargetLoc, m_Mobile.RangePerception)) { m_LastTarget = null; } @@ -967,7 +973,7 @@ public class MageAI : BaseAI var comb = m_Mobile.Combatant; if (comb?.Deleted == false && comb.Alive && !comb.IsDeadBondedPet && - m_Mobile.InRange(comb, Core.ML ? 10 : 12) && CanDispel(comb)) + m_Mobile.InRange(comb, m_Mobile.RangePerception) && CanDispel(comb)) { active = comb; activePrio = m_Mobile.GetDistanceToSqrt(comb); @@ -983,7 +989,7 @@ public class MageAI : BaseAI var info = aggressed[i]; var m = info.Defender; - if (m != comb && m.Combatant == m_Mobile && m_Mobile.InRange(m, Core.ML ? 10 : 12) && CanDispel(m)) + if (m != comb && m.Combatant == m_Mobile && m_Mobile.InRange(m, m_Mobile.RangePerception) && CanDispel(m)) { var prio = m_Mobile.GetDistanceToSqrt(m); @@ -1005,7 +1011,7 @@ public class MageAI : BaseAI var info = aggressors[i]; var m = info.Attacker; - if (m != comb && m.Combatant == m_Mobile && m_Mobile.InRange(m, Core.ML ? 10 : 12) && CanDispel(m)) + if (m != comb && m.Combatant == m_Mobile && m_Mobile.InRange(m, m_Mobile.RangePerception) && CanDispel(m)) { var prio = m_Mobile.GetDistanceToSqrt(m); @@ -1040,7 +1046,7 @@ public class MageAI : BaseAI actPrio = inactPrio = m_Mobile.GetDistanceToSqrt(comb); } - foreach (var m in m_Mobile.GetMobilesInRange(Core.ML ? 10 : 12)) + foreach (var m in m_Mobile.GetMobilesInRange(m_Mobile.RangePerception)) { if (m != m_Mobile && CanDispel(m)) { @@ -1079,7 +1085,7 @@ public class MageAI : BaseAI return false; } - var spellTarg = targ as ISpellTarget; + var spellTarg = targ as ISpellTarget; var isReveal = spellTarg?.Spell is RevealSpell; var isDispel = spellTarg?.Spell is DispelSpell; diff --git a/Projects/UOContent/Mobiles/BaseCreature.cs b/Projects/UOContent/Mobiles/BaseCreature.cs index c8f8114ea..2cc3adea1 100644 --- a/Projects/UOContent/Mobiles/BaseCreature.cs +++ b/Projects/UOContent/Mobiles/BaseCreature.cs @@ -181,7 +181,6 @@ namespace Server.Mobiles public const int MaxOwners = 5; public const int DefaultRangePerception = 16; - public const int OldRangePerception = 10; private const double ChanceToRummage = 0.5; // 50% @@ -350,15 +349,10 @@ namespace Server.Mobiles public BaseCreature( AIType ai, FightMode mode = FightMode.Closest, - int iRangePerception = 10, + int iRangePerception = DefaultRangePerception, int iRangeFight = 1 ) { - if (iRangePerception == OldRangePerception) - { - iRangePerception = DefaultRangePerception; - } - m_Loyalty = MaxLoyalty; // Wonderfully Happy m_CurrentAI = ai; @@ -1980,11 +1974,6 @@ namespace Server.Mobiles _passiveSpeed = reader.ReadDouble(); _currentSpeed = reader.ReadDouble(); - if (RangePerception == OldRangePerception) - { - RangePerception = DefaultRangePerception; - } - m_Home.X = reader.ReadInt(); m_Home.Y = reader.ReadInt(); m_Home.Z = reader.ReadInt(); diff --git a/Projects/UOContent/Spells/Chivalry/CleanseByFire.cs b/Projects/UOContent/Spells/Chivalry/CleanseByFire.cs index 20f7add6c..ebd1838b8 100644 --- a/Projects/UOContent/Spells/Chivalry/CleanseByFire.cs +++ b/Projects/UOContent/Spells/Chivalry/CleanseByFire.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Chivalry { - public class CleanseByFireSpell : PaladinSpell, ISpellTargetingMobile + public class CleanseByFireSpell : PaladinSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Cleanse By Fire", @@ -113,7 +113,7 @@ namespace Server.Spells.Chivalry public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Chivalry/CloseWounds.cs b/Projects/UOContent/Spells/Chivalry/CloseWounds.cs index 4e5fb00b5..0c1e8c8b7 100644 --- a/Projects/UOContent/Spells/Chivalry/CloseWounds.cs +++ b/Projects/UOContent/Spells/Chivalry/CloseWounds.cs @@ -6,7 +6,7 @@ using Server.Targeting; namespace Server.Spells.Chivalry { - public class CloseWoundsSpell : PaladinSpell, ISpellTargetingMobile + public class CloseWoundsSpell : PaladinSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Close Wounds", @@ -93,7 +93,7 @@ namespace Server.Spells.Chivalry public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Chivalry/RemoveCurse.cs b/Projects/UOContent/Spells/Chivalry/RemoveCurse.cs index 667470005..6f89d8562 100644 --- a/Projects/UOContent/Spells/Chivalry/RemoveCurse.cs +++ b/Projects/UOContent/Spells/Chivalry/RemoveCurse.cs @@ -8,7 +8,7 @@ using Server.Targeting; namespace Server.Spells.Chivalry { - public class RemoveCurseSpell : PaladinSpell, ISpellTargetingMobile + public class RemoveCurseSpell : PaladinSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Remove Curse", @@ -139,7 +139,7 @@ namespace Server.Spells.Chivalry public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Eighth/EnergyVortex.cs b/Projects/UOContent/Spells/Eighth/EnergyVortex.cs index 13b20ea74..bd5ee1c6c 100644 --- a/Projects/UOContent/Spells/Eighth/EnergyVortex.cs +++ b/Projects/UOContent/Spells/Eighth/EnergyVortex.cs @@ -3,7 +3,7 @@ using Server.Mobiles; namespace Server.Spells.Eighth { - public class EnergyVortexSpell : MagerySpell, ISpellTargetingPoint3D + public class EnergyVortexSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Energy Vortex", @@ -60,7 +60,7 @@ namespace Server.Spells.Eighth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, retryOnLOS: true); + Caster.Target = new SpellTarget(this, retryOnLos: true); } } } diff --git a/Projects/UOContent/Spells/Eighth/Resurrection.cs b/Projects/UOContent/Spells/Eighth/Resurrection.cs index b4f2c2604..09e99085d 100644 --- a/Projects/UOContent/Spells/Eighth/Resurrection.cs +++ b/Projects/UOContent/Spells/Eighth/Resurrection.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Eighth { - public class ResurrectionSpell : MagerySpell, ISpellTargetingMobile + public class ResurrectionSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Resurrection", @@ -22,6 +22,8 @@ namespace Server.Spells.Eighth public override SpellCircle Circle => SpellCircle.Eighth; + public int TargetRange => 1; + public void Target(Mobile m) { if (m == Caster) @@ -79,7 +81,7 @@ namespace Server.Spells.Eighth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, 1); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Fifth/BladeSpirits.cs b/Projects/UOContent/Spells/Fifth/BladeSpirits.cs index 2a6716664..f0b3e56cc 100644 --- a/Projects/UOContent/Spells/Fifth/BladeSpirits.cs +++ b/Projects/UOContent/Spells/Fifth/BladeSpirits.cs @@ -3,7 +3,7 @@ using Server.Mobiles; namespace Server.Spells.Fifth { - public class BladeSpiritsSpell : MagerySpell, ISpellTargetingPoint3D + public class BladeSpiritsSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Blade Spirits", @@ -78,7 +78,7 @@ namespace Server.Spells.Fifth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, retryOnLOS: true); + Caster.Target = new SpellTarget(this, retryOnLos: true); } } } diff --git a/Projects/UOContent/Spells/Fifth/DispelField.cs b/Projects/UOContent/Spells/Fifth/DispelField.cs index 5b544c636..9e805bf10 100644 --- a/Projects/UOContent/Spells/Fifth/DispelField.cs +++ b/Projects/UOContent/Spells/Fifth/DispelField.cs @@ -3,7 +3,7 @@ using Server.Misc; namespace Server.Spells.Fifth { - public class DispelFieldSpell : MagerySpell, ISpellTargetingItem + public class DispelFieldSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Dispel Field", @@ -51,7 +51,7 @@ namespace Server.Spells.Fifth public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Fifth/MindBlast.cs b/Projects/UOContent/Spells/Fifth/MindBlast.cs index 2f980f65f..38e0c5548 100644 --- a/Projects/UOContent/Spells/Fifth/MindBlast.cs +++ b/Projects/UOContent/Spells/Fifth/MindBlast.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Fifth { - public class MindBlastSpell : MagerySpell, ISpellTargetingMobile + public class MindBlastSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mind Blast", @@ -110,7 +110,7 @@ namespace Server.Spells.Fifth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } private void AosDelay_Callback(Mobile caster, Mobile target, Mobile defender, int damage) diff --git a/Projects/UOContent/Spells/Fifth/Paralyze.cs b/Projects/UOContent/Spells/Fifth/Paralyze.cs index bb99cdb17..7f3a8a0de 100644 --- a/Projects/UOContent/Spells/Fifth/Paralyze.cs +++ b/Projects/UOContent/Spells/Fifth/Paralyze.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.Fifth { - public class ParalyzeSpell : MagerySpell, ISpellTargetingMobile + public class ParalyzeSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Paralyze", @@ -82,7 +82,7 @@ namespace Server.Spells.Fifth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Fifth/PoisonField.cs b/Projects/UOContent/Spells/Fifth/PoisonField.cs index 6bd9fc417..6c550ef6d 100644 --- a/Projects/UOContent/Spells/Fifth/PoisonField.cs +++ b/Projects/UOContent/Spells/Fifth/PoisonField.cs @@ -7,7 +7,7 @@ using Server.Mobiles; namespace Server.Spells.Fifth; -public class PoisonFieldSpell : MagerySpell, ISpellTargetingPoint3D +public class PoisonFieldSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Poison Field", @@ -57,7 +57,7 @@ public class PoisonFieldSpell : MagerySpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/First/Clumsy.cs b/Projects/UOContent/Spells/First/Clumsy.cs index 96632e0a4..5d942991b 100644 --- a/Projects/UOContent/Spells/First/Clumsy.cs +++ b/Projects/UOContent/Spells/First/Clumsy.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.First { - public class ClumsySpell : MagerySpell, ISpellTargetingMobile + public class ClumsySpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Clumsy", @@ -47,7 +47,7 @@ namespace Server.Spells.First public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/First/Feeblemind.cs b/Projects/UOContent/Spells/First/Feeblemind.cs index 175aeeaff..e762d5684 100644 --- a/Projects/UOContent/Spells/First/Feeblemind.cs +++ b/Projects/UOContent/Spells/First/Feeblemind.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.First { - public class FeeblemindSpell : MagerySpell, ISpellTargetingMobile + public class FeeblemindSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Feeblemind", @@ -49,7 +49,7 @@ namespace Server.Spells.First public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/First/Heal.cs b/Projects/UOContent/Spells/First/Heal.cs index 024e899fc..e9cb8eb4e 100644 --- a/Projects/UOContent/Spells/First/Heal.cs +++ b/Projects/UOContent/Spells/First/Heal.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.First { - public class HealSpell : MagerySpell, ISpellTargetingMobile + public class HealSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Heal", @@ -84,7 +84,7 @@ namespace Server.Spells.First public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/First/MagicArrow.cs b/Projects/UOContent/Spells/First/MagicArrow.cs index 3ccff9163..7816d8805 100644 --- a/Projects/UOContent/Spells/First/MagicArrow.cs +++ b/Projects/UOContent/Spells/First/MagicArrow.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.First { - public class MagicArrowSpell : MagerySpell, ISpellTargetingMobile + public class MagicArrowSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Magic Arrow", @@ -68,7 +68,7 @@ namespace Server.Spells.First public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/First/NightSight.cs b/Projects/UOContent/Spells/First/NightSight.cs index 1f47337bd..6c23a13f7 100644 --- a/Projects/UOContent/Spells/First/NightSight.cs +++ b/Projects/UOContent/Spells/First/NightSight.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.First; -public class NightSightSpell : MagerySpell, ISpellTargetingMobile +public class NightSightSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Night Sight", @@ -14,6 +14,8 @@ public class NightSightSpell : MagerySpell, ISpellTargetingMobile Reagent.SpidersSilk ); + public int TargetRange => 12; + public NightSightSpell(Mobile caster, Item scroll = null) : base(caster, scroll, _info) { } @@ -22,7 +24,7 @@ public class NightSightSpell : MagerySpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } public void Target(Mobile m) diff --git a/Projects/UOContent/Spells/First/Weaken.cs b/Projects/UOContent/Spells/First/Weaken.cs index 2379b0fe0..082027ad0 100644 --- a/Projects/UOContent/Spells/First/Weaken.cs +++ b/Projects/UOContent/Spells/First/Weaken.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.First { - public class WeakenSpell : MagerySpell, ISpellTargetingMobile + public class WeakenSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Weaken", @@ -47,7 +47,7 @@ namespace Server.Spells.First public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Fourth/ArchCure.cs b/Projects/UOContent/Spells/Fourth/ArchCure.cs index 116eb3c09..9531903c1 100644 --- a/Projects/UOContent/Spells/Fourth/ArchCure.cs +++ b/Projects/UOContent/Spells/Fourth/ArchCure.cs @@ -4,7 +4,7 @@ using Server.Mobiles; namespace Server.Spells.Fourth { - public class ArchCureSpell : MagerySpell, ISpellTargetingPoint3D + public class ArchCureSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Arch Cure", @@ -95,7 +95,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } private bool AreaCanTarget(Mobile target, bool feluccaRules) diff --git a/Projects/UOContent/Spells/Fourth/ArchProtection.cs b/Projects/UOContent/Spells/Fourth/ArchProtection.cs index d16c47c6e..cb156635d 100644 --- a/Projects/UOContent/Spells/Fourth/ArchProtection.cs +++ b/Projects/UOContent/Spells/Fourth/ArchProtection.cs @@ -6,7 +6,7 @@ using Server.Spells.Second; namespace Server.Spells.Fourth { - public class ArchProtectionSpell : MagerySpell, ISpellTargetingPoint3D + public class ArchProtectionSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Arch Protection", @@ -94,7 +94,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } private static void AddEntry(Mobile m, int v) diff --git a/Projects/UOContent/Spells/Fourth/Curse.cs b/Projects/UOContent/Spells/Fourth/Curse.cs index 5443057fc..0f01b0a3c 100644 --- a/Projects/UOContent/Spells/Fourth/Curse.cs +++ b/Projects/UOContent/Spells/Fourth/Curse.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Fourth { - public class CurseSpell : MagerySpell, ISpellTargetingMobile + public class CurseSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Curse", @@ -105,7 +105,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool RemoveEffect(Mobile m) diff --git a/Projects/UOContent/Spells/Fourth/FireField.cs b/Projects/UOContent/Spells/Fourth/FireField.cs index efd172183..4632edd1a 100644 --- a/Projects/UOContent/Spells/Fourth/FireField.cs +++ b/Projects/UOContent/Spells/Fourth/FireField.cs @@ -7,7 +7,7 @@ using Server.Mobiles; namespace Server.Spells.Fourth; -public class FireFieldSpell : MagerySpell, ISpellTargetingPoint3D +public class FireFieldSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Fire Field", @@ -60,7 +60,7 @@ public class FireFieldSpell : MagerySpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/Fourth/GreaterHeal.cs b/Projects/UOContent/Spells/Fourth/GreaterHeal.cs index d030f9739..995473974 100644 --- a/Projects/UOContent/Spells/Fourth/GreaterHeal.cs +++ b/Projects/UOContent/Spells/Fourth/GreaterHeal.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.Fourth { - public class GreaterHealSpell : MagerySpell, ISpellTargetingMobile + public class GreaterHealSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Greater Heal", @@ -72,7 +72,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Fourth/Lightning.cs b/Projects/UOContent/Spells/Fourth/Lightning.cs index 07f40d73a..335580c33 100644 --- a/Projects/UOContent/Spells/Fourth/Lightning.cs +++ b/Projects/UOContent/Spells/Fourth/Lightning.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.Fourth { - public class LightningSpell : MagerySpell, ISpellTargetingMobile + public class LightningSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Lightning", @@ -57,7 +57,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Fourth/ManaDrain.cs b/Projects/UOContent/Spells/Fourth/ManaDrain.cs index 3164e69f9..eaa7e2ece 100644 --- a/Projects/UOContent/Spells/Fourth/ManaDrain.cs +++ b/Projects/UOContent/Spells/Fourth/ManaDrain.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Fourth { - public class ManaDrainSpell : MagerySpell, ISpellTargetingMobile + public class ManaDrainSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mana Drain", @@ -77,7 +77,7 @@ namespace Server.Spells.Fourth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } private static void AosDelay_Callback(Mobile m, int mana) diff --git a/Projects/UOContent/Spells/Mysticism/AnimatedWeaponSpell.cs b/Projects/UOContent/Spells/Mysticism/AnimatedWeaponSpell.cs index 8bfed5c94..6b5ed7bdb 100644 --- a/Projects/UOContent/Spells/Mysticism/AnimatedWeaponSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/AnimatedWeaponSpell.cs @@ -3,7 +3,7 @@ using Server.Mobiles; namespace Server.Spells.Mysticism; -public class AnimatedWeaponSpell : MysticSpell, ISpellTargetingPoint3D +public class AnimatedWeaponSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Animated Weapon", @@ -55,6 +55,6 @@ public class AnimatedWeaponSpell : MysticSpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/Mysticism/BombardSpell.cs b/Projects/UOContent/Spells/Mysticism/BombardSpell.cs index 1ec7e8fd2..1847ac421 100644 --- a/Projects/UOContent/Spells/Mysticism/BombardSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/BombardSpell.cs @@ -3,7 +3,7 @@ using System; namespace Server.Spells.Mysticism; -public class BombardSpell : MysticSpell, ISpellTargetingMobile +public class BombardSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Bombard", "Corp Por Ylem", @@ -26,7 +26,7 @@ public class BombardSpell : MysticSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public void Target(Mobile m) diff --git a/Projects/UOContent/Spells/Mysticism/CleansingWindsSpell.cs b/Projects/UOContent/Spells/Mysticism/CleansingWindsSpell.cs index ebfe79f69..c871dd9b8 100644 --- a/Projects/UOContent/Spells/Mysticism/CleansingWindsSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/CleansingWindsSpell.cs @@ -7,7 +7,7 @@ using Server.Collections; namespace Server.Spells.Mysticism; -public class CleansingWindsSpell : MysticSpell, ISpellTargetingMobile +public class CleansingWindsSpell : MysticSpell, ITargetingSpell { public override SpellCircle Circle => SpellCircle.Sixth; @@ -27,7 +27,7 @@ public class CleansingWindsSpell : MysticSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } public void Target(Mobile m) diff --git a/Projects/UOContent/Spells/Mysticism/EagleStrikeSpell.cs b/Projects/UOContent/Spells/Mysticism/EagleStrikeSpell.cs index b541e22de..0e1d1af28 100644 --- a/Projects/UOContent/Spells/Mysticism/EagleStrikeSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/EagleStrikeSpell.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Mysticism; -public class EagleStrikeSpell : MysticSpell, ISpellTargetingMobile +public class EagleStrikeSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Eagle Strike", @@ -55,7 +55,7 @@ public class EagleStrikeSpell : MysticSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } private void Damage(Mobile to) diff --git a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs index c5327893c..febd11f0b 100644 --- a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs @@ -2,7 +2,7 @@ namespace Server.Spells.Mysticism; -public class HailStormSpell : MysticSpell, ISpellTargetingPoint3D +public class HailStormSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Hail Storm", @@ -73,7 +73,7 @@ public class HailStormSpell : MysticSpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this); + Caster.Target = new SpellTarget(this); } private static void PlayEffect(Point3D p, Map map) diff --git a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs index 9c193462c..71ac15a96 100644 --- a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs @@ -2,7 +2,7 @@ namespace Server.Spells.Mysticism; -public class NetherCycloneSpell : MysticSpell, ISpellTargetingPoint3D +public class NetherCycloneSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Nether Cyclone", @@ -89,7 +89,7 @@ public class NetherCycloneSpell : MysticSpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this); + Caster.Target = new SpellTarget(this); } private static void PlayEffect(Point3D p, Map map) diff --git a/Projects/UOContent/Spells/Mysticism/SpellPlagueSpell.cs b/Projects/UOContent/Spells/Mysticism/SpellPlagueSpell.cs index 4dd0a7b2d..360dad773 100644 --- a/Projects/UOContent/Spells/Mysticism/SpellPlagueSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/SpellPlagueSpell.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Mysticism; -public class SpellPlagueSpell : MysticSpell, ISpellTargetingMobile +public class SpellPlagueSpell : MysticSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Spell Plague", @@ -32,7 +32,7 @@ public class SpellPlagueSpell : MysticSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public void Target(Mobile m) diff --git a/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs b/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs index a8178593d..d411e7cf4 100644 --- a/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs +++ b/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs @@ -7,7 +7,7 @@ using Server.Mobiles; namespace Server.Spells.Necromancy; -public class AnimateDeadSpell : NecromancerSpell, ISpellTargetingItem +public class AnimateDeadSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Animate Dead", @@ -190,7 +190,7 @@ public class AnimateDeadSpell : NecromancerSpell, ISpellTargetingItem public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); Caster.SendLocalizedMessage(1061083); // Animate what corpse? } diff --git a/Projects/UOContent/Spells/Necromancy/BloodOathSpell.cs b/Projects/UOContent/Spells/Necromancy/BloodOathSpell.cs index 8068b172d..5ccf49ea4 100644 --- a/Projects/UOContent/Spells/Necromancy/BloodOathSpell.cs +++ b/Projects/UOContent/Spells/Necromancy/BloodOathSpell.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class BloodOathSpell : NecromancerSpell, ISpellTargetingMobile +public class BloodOathSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Blood Oath", @@ -96,7 +96,7 @@ public class BloodOathSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool RemoveCurse(Mobile target) diff --git a/Projects/UOContent/Spells/Necromancy/CorpseSkin.cs b/Projects/UOContent/Spells/Necromancy/CorpseSkin.cs index 5f2cb7336..74f81eb1c 100644 --- a/Projects/UOContent/Spells/Necromancy/CorpseSkin.cs +++ b/Projects/UOContent/Spells/Necromancy/CorpseSkin.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class CorpseSkinSpell : NecromancerSpell, ISpellTargetingMobile +public class CorpseSkinSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Corpse Skin", @@ -95,7 +95,7 @@ public class CorpseSkinSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool RemoveCurse(Mobile m) diff --git a/Projects/UOContent/Spells/Necromancy/EvilOmen.cs b/Projects/UOContent/Spells/Necromancy/EvilOmen.cs index fa40513dd..b515fc736 100644 --- a/Projects/UOContent/Spells/Necromancy/EvilOmen.cs +++ b/Projects/UOContent/Spells/Necromancy/EvilOmen.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class EvilOmenSpell : NecromancerSpell, ISpellTargetingMobile +public class EvilOmenSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Evil Omen", @@ -70,7 +70,7 @@ public class EvilOmenSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool EndEffect(Mobile m) diff --git a/Projects/UOContent/Spells/Necromancy/MindRot.cs b/Projects/UOContent/Spells/Necromancy/MindRot.cs index 637881ea9..9d32af258 100644 --- a/Projects/UOContent/Spells/Necromancy/MindRot.cs +++ b/Projects/UOContent/Spells/Necromancy/MindRot.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class MindRotSpell : NecromancerSpell, ISpellTargetingMobile +public class MindRotSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mind Rot", @@ -63,7 +63,7 @@ public class MindRotSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool ClearMindRotScalar(Mobile m) diff --git a/Projects/UOContent/Spells/Necromancy/PainSpike.cs b/Projects/UOContent/Spells/Necromancy/PainSpike.cs index 7253bbd0c..b3623ce48 100644 --- a/Projects/UOContent/Spells/Necromancy/PainSpike.cs +++ b/Projects/UOContent/Spells/Necromancy/PainSpike.cs @@ -5,7 +5,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class PainSpikeSpell : NecromancerSpell, ISpellTargetingMobile +public class PainSpikeSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Pain Spike", @@ -85,7 +85,7 @@ public class PainSpikeSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } private class InternalTimer : Timer diff --git a/Projects/UOContent/Spells/Necromancy/PoisonStrike.cs b/Projects/UOContent/Spells/Necromancy/PoisonStrike.cs index 26f0559e5..ec358c8b1 100644 --- a/Projects/UOContent/Spells/Necromancy/PoisonStrike.cs +++ b/Projects/UOContent/Spells/Necromancy/PoisonStrike.cs @@ -6,7 +6,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class PoisonStrikeSpell : NecromancerSpell, ISpellTargetingMobile +public class PoisonStrikeSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Poison Strike", @@ -146,6 +146,6 @@ public class PoisonStrikeSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } diff --git a/Projects/UOContent/Spells/Necromancy/Strangle.cs b/Projects/UOContent/Spells/Necromancy/Strangle.cs index 645d050b4..d887505bb 100644 --- a/Projects/UOContent/Spells/Necromancy/Strangle.cs +++ b/Projects/UOContent/Spells/Necromancy/Strangle.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class StrangleSpell : NecromancerSpell, ISpellTargetingMobile +public class StrangleSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Strangle", @@ -111,7 +111,7 @@ public class StrangleSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public static bool RemoveCurse(Mobile m) diff --git a/Projects/UOContent/Spells/Necromancy/VengefulSpirit.cs b/Projects/UOContent/Spells/Necromancy/VengefulSpirit.cs index 3a69ae0b4..87e63137d 100644 --- a/Projects/UOContent/Spells/Necromancy/VengefulSpirit.cs +++ b/Projects/UOContent/Spells/Necromancy/VengefulSpirit.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Necromancy; -public class VengefulSpiritSpell : NecromancerSpell, ISpellTargetingMobile +public class VengefulSpiritSpell : NecromancerSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Vengeful Spirit", @@ -66,7 +66,7 @@ public class VengefulSpiritSpell : NecromancerSpell, ISpellTargetingMobile public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public override bool CheckCast() diff --git a/Projects/UOContent/Spells/Ninjitsu/ShadowJump.cs b/Projects/UOContent/Spells/Ninjitsu/ShadowJump.cs index 7e37c4ff7..c281e1299 100644 --- a/Projects/UOContent/Spells/Ninjitsu/ShadowJump.cs +++ b/Projects/UOContent/Spells/Ninjitsu/ShadowJump.cs @@ -5,11 +5,10 @@ using Server.Misc; using Server.Mobiles; using Server.Regions; using Server.SkillHandlers; -using Server.Targeting; namespace Server.Spells.Ninjitsu; -public class Shadowjump : NinjaSpell, ISpellTargetingPoint3D +public class Shadowjump : NinjaSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Shadowjump", @@ -29,6 +28,8 @@ public class Shadowjump : NinjaSpell, ISpellTargetingPoint3D public override bool BlockedByAnimalForm => false; + public int TargetRange => 11; + public void Target(IPoint3D p) { var orig = p; @@ -111,6 +112,6 @@ public class Shadowjump : NinjaSpell, ISpellTargetingPoint3D public override void OnCast() { Caster.SendLocalizedMessage(1063088); // You prepare to perform a Shadowjump. - Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, 11); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/Second/Agility.cs b/Projects/UOContent/Spells/Second/Agility.cs index fdef1bdec..73ef9c554 100644 --- a/Projects/UOContent/Spells/Second/Agility.cs +++ b/Projects/UOContent/Spells/Second/Agility.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Second { - public class AgilitySpell : MagerySpell, ISpellTargetingMobile + public class AgilitySpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Agility", @@ -51,7 +51,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Second/Cunning.cs b/Projects/UOContent/Spells/Second/Cunning.cs index 9ea4ca479..d44881640 100644 --- a/Projects/UOContent/Spells/Second/Cunning.cs +++ b/Projects/UOContent/Spells/Second/Cunning.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Second { - public class CunningSpell : MagerySpell, ISpellTargetingMobile + public class CunningSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Cunning", @@ -51,7 +51,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Second/Cure.cs b/Projects/UOContent/Spells/Second/Cure.cs index 9a3d1fc64..e57a952fc 100644 --- a/Projects/UOContent/Spells/Second/Cure.cs +++ b/Projects/UOContent/Spells/Second/Cure.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Second { - public class CureSpell : MagerySpell, ISpellTargetingMobile + public class CureSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Cure", @@ -70,7 +70,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Second/Harm.cs b/Projects/UOContent/Spells/Second/Harm.cs index f9d5aee2c..e6abad766 100644 --- a/Projects/UOContent/Spells/Second/Harm.cs +++ b/Projects/UOContent/Spells/Second/Harm.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.Second { - public class HarmSpell : MagerySpell, ISpellTargetingMobile + public class HarmSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Harm", @@ -75,7 +75,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public override double GetSlayerDamageScalar(Mobile target) => 1.0; diff --git a/Projects/UOContent/Spells/Second/MagicTrap.cs b/Projects/UOContent/Spells/Second/MagicTrap.cs index fd27ef98f..6c2498e92 100644 --- a/Projects/UOContent/Spells/Second/MagicTrap.cs +++ b/Projects/UOContent/Spells/Second/MagicTrap.cs @@ -2,7 +2,7 @@ using Server.Items; namespace Server.Spells.Second { - public class MagicTrapSpell : MagerySpell, ISpellTargetingItem + public class MagicTrapSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Magic Trap", @@ -82,7 +82,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Second/RemoveTrap.cs b/Projects/UOContent/Spells/Second/RemoveTrap.cs index 70a72224e..9be119c7e 100644 --- a/Projects/UOContent/Spells/Second/RemoveTrap.cs +++ b/Projects/UOContent/Spells/Second/RemoveTrap.cs @@ -2,7 +2,7 @@ using Server.Items; namespace Server.Spells.Second { - public class RemoveTrapSpell : MagerySpell, ISpellTargetingItem + public class RemoveTrapSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Remove Trap", @@ -52,7 +52,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); Caster.SendLocalizedMessage(502368); } } diff --git a/Projects/UOContent/Spells/Second/Strength.cs b/Projects/UOContent/Spells/Second/Strength.cs index e4f776a2d..82d5dff13 100644 --- a/Projects/UOContent/Spells/Second/Strength.cs +++ b/Projects/UOContent/Spells/Second/Strength.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Second { - public class StrengthSpell : MagerySpell, ISpellTargetingMobile + public class StrengthSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Strength", @@ -51,7 +51,7 @@ namespace Server.Spells.Second public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Seventh/ChainLightning.cs b/Projects/UOContent/Spells/Seventh/ChainLightning.cs index 9271d8590..e033d6890 100644 --- a/Projects/UOContent/Spells/Seventh/ChainLightning.cs +++ b/Projects/UOContent/Spells/Seventh/ChainLightning.cs @@ -2,7 +2,7 @@ using Server.Collections; namespace Server.Spells.Seventh { - public class ChainLightningSpell : MagerySpell, ISpellTargetingPoint3D + public class ChainLightningSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Chain Lightning", @@ -99,7 +99,7 @@ namespace Server.Spells.Seventh public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Seventh/EnergyField.cs b/Projects/UOContent/Spells/Seventh/EnergyField.cs index e48a4be4b..9d079f5ab 100644 --- a/Projects/UOContent/Spells/Seventh/EnergyField.cs +++ b/Projects/UOContent/Spells/Seventh/EnergyField.cs @@ -6,7 +6,7 @@ using Server.Mobiles; namespace Server.Spells.Seventh; -public class EnergyFieldSpell : MagerySpell, ISpellTargetingPoint3D +public class EnergyFieldSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Energy Field", @@ -71,7 +71,7 @@ public class EnergyFieldSpell : MagerySpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/Seventh/FlameStrike.cs b/Projects/UOContent/Spells/Seventh/FlameStrike.cs index 47cdf1ebd..1e021a5fa 100644 --- a/Projects/UOContent/Spells/Seventh/FlameStrike.cs +++ b/Projects/UOContent/Spells/Seventh/FlameStrike.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.Seventh { - public class FlameStrikeSpell : MagerySpell, ISpellTargetingMobile + public class FlameStrikeSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Flame Strike", @@ -58,7 +58,7 @@ namespace Server.Spells.Seventh public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Seventh/ManaVampire.cs b/Projects/UOContent/Spells/Seventh/ManaVampire.cs index 7dcd95d3e..a0d813b73 100644 --- a/Projects/UOContent/Spells/Seventh/ManaVampire.cs +++ b/Projects/UOContent/Spells/Seventh/ManaVampire.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Seventh { - public class ManaVampireSpell : MagerySpell, ISpellTargetingMobile + public class ManaVampireSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mana Vampire", @@ -79,7 +79,7 @@ namespace Server.Spells.Seventh public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } public override double GetResistPercent(Mobile target) => 98.0; diff --git a/Projects/UOContent/Spells/Seventh/MassDispel.cs b/Projects/UOContent/Spells/Seventh/MassDispel.cs index 2341279df..3f1b0c8e5 100644 --- a/Projects/UOContent/Spells/Seventh/MassDispel.cs +++ b/Projects/UOContent/Spells/Seventh/MassDispel.cs @@ -4,7 +4,7 @@ using Server.Mobiles; namespace Server.Spells.Seventh { - public class MassDispelSpell : MagerySpell, ISpellTargetingPoint3D + public class MassDispelSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mass Dispel", @@ -76,7 +76,7 @@ namespace Server.Spells.Seventh public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Seventh/MeteorSwarm.cs b/Projects/UOContent/Spells/Seventh/MeteorSwarm.cs index b0b27ead8..fd1ba6282 100644 --- a/Projects/UOContent/Spells/Seventh/MeteorSwarm.cs +++ b/Projects/UOContent/Spells/Seventh/MeteorSwarm.cs @@ -2,7 +2,7 @@ using Server.Collections; namespace Server.Spells.Seventh { - public class MeteorSwarmSpell : MagerySpell, ISpellTargetingPoint3D + public class MeteorSwarmSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Meteor Swarm", @@ -104,7 +104,7 @@ namespace Server.Spells.Seventh public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Sixth/Dispel.cs b/Projects/UOContent/Spells/Sixth/Dispel.cs index 3587aa10d..cf3171109 100644 --- a/Projects/UOContent/Spells/Sixth/Dispel.cs +++ b/Projects/UOContent/Spells/Sixth/Dispel.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Sixth { - public class DispelSpell : MagerySpell, ISpellTargetingMobile + public class DispelSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Dispel", @@ -58,7 +58,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Sixth/EnergyBolt.cs b/Projects/UOContent/Spells/Sixth/EnergyBolt.cs index 62a0cbfef..a253cd1bb 100644 --- a/Projects/UOContent/Spells/Sixth/EnergyBolt.cs +++ b/Projects/UOContent/Spells/Sixth/EnergyBolt.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.Sixth { - public class EnergyBoltSpell : MagerySpell, ISpellTargetingMobile + public class EnergyBoltSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Energy Bolt", @@ -63,7 +63,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Sixth/Explosion.cs b/Projects/UOContent/Spells/Sixth/Explosion.cs index 1d9b3b2e5..687d2a7f4 100644 --- a/Projects/UOContent/Spells/Sixth/Explosion.cs +++ b/Projects/UOContent/Spells/Sixth/Explosion.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Sixth { - public class ExplosionSpell : MagerySpell, ISpellTargetingMobile + public class ExplosionSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Explosion", @@ -45,7 +45,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } private class InternalTimer : Timer diff --git a/Projects/UOContent/Spells/Sixth/Invisibility.cs b/Projects/UOContent/Spells/Sixth/Invisibility.cs index 407948302..916707bcb 100644 --- a/Projects/UOContent/Spells/Sixth/Invisibility.cs +++ b/Projects/UOContent/Spells/Sixth/Invisibility.cs @@ -7,7 +7,7 @@ using Server.Targeting; namespace Server.Spells.Sixth { - public class InvisibilitySpell : MagerySpell, ISpellTargetingMobile + public class InvisibilitySpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Invisibility", @@ -82,7 +82,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } public static bool HasTimer(Mobile m) => _table.ContainsKey(m); diff --git a/Projects/UOContent/Spells/Sixth/Mark.cs b/Projects/UOContent/Spells/Sixth/Mark.cs index 23aaa8b07..7e4e1cd82 100644 --- a/Projects/UOContent/Spells/Sixth/Mark.cs +++ b/Projects/UOContent/Spells/Sixth/Mark.cs @@ -3,7 +3,7 @@ using Server.Network; namespace Server.Spells.Sixth { - public class MarkSpell : MagerySpell, ISpellTargetingItem + public class MarkSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mark", @@ -59,7 +59,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } public override bool CheckCast() diff --git a/Projects/UOContent/Spells/Sixth/MassCurse.cs b/Projects/UOContent/Spells/Sixth/MassCurse.cs index 28e04183a..5f38e7547 100644 --- a/Projects/UOContent/Spells/Sixth/MassCurse.cs +++ b/Projects/UOContent/Spells/Sixth/MassCurse.cs @@ -1,6 +1,6 @@ namespace Server.Spells.Sixth { - public class MassCurseSpell : MagerySpell, ISpellTargetingPoint3D + public class MassCurseSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Mass Curse", @@ -58,7 +58,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Sixth/ParalyzeField.cs b/Projects/UOContent/Spells/Sixth/ParalyzeField.cs index 5fd4dd211..e05009dea 100644 --- a/Projects/UOContent/Spells/Sixth/ParalyzeField.cs +++ b/Projects/UOContent/Spells/Sixth/ParalyzeField.cs @@ -6,7 +6,7 @@ using Server.Mobiles; namespace Server.Spells.Sixth; -public class ParalyzeFieldSpell : MagerySpell, ISpellTargetingPoint3D +public class ParalyzeFieldSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Paralyze Field", @@ -71,7 +71,7 @@ public class ParalyzeFieldSpell : MagerySpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } diff --git a/Projects/UOContent/Spells/Sixth/Reveal.cs b/Projects/UOContent/Spells/Sixth/Reveal.cs index 4cdff62ce..73a9ce296 100644 --- a/Projects/UOContent/Spells/Sixth/Reveal.cs +++ b/Projects/UOContent/Spells/Sixth/Reveal.cs @@ -2,7 +2,7 @@ using Server.Mobiles; namespace Server.Spells.Sixth { - public class RevealSpell : MagerySpell, ISpellTargetingPoint3D + public class RevealSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Reveal", @@ -55,7 +55,7 @@ namespace Server.Spells.Sixth public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } // Reveal uses magery and detect hidden vs. hide and stealth diff --git a/Projects/UOContent/Spells/Spellweaving/GiftOfLife.cs b/Projects/UOContent/Spells/Spellweaving/GiftOfLife.cs index d2fef9604..e40a0b674 100644 --- a/Projects/UOContent/Spells/Spellweaving/GiftOfLife.cs +++ b/Projects/UOContent/Spells/Spellweaving/GiftOfLife.cs @@ -6,7 +6,7 @@ using Server.Targeting; namespace Server.Spells.Spellweaving { - public class GiftOfLifeSpell : ArcanistSpell, ISpellTargetingMobile + public class GiftOfLifeSpell : ArcanistSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Gift of Life", @@ -77,7 +77,7 @@ namespace Server.Spells.Spellweaving public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, 10); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } public static void HandleDeath(Mobile m) diff --git a/Projects/UOContent/Spells/Spellweaving/GiftOfRenewal.cs b/Projects/UOContent/Spells/Spellweaving/GiftOfRenewal.cs index 5ccf57e5d..557367e71 100644 --- a/Projects/UOContent/Spells/Spellweaving/GiftOfRenewal.cs +++ b/Projects/UOContent/Spells/Spellweaving/GiftOfRenewal.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Spellweaving { - public class GiftOfRenewalSpell : ArcanistSpell, ISpellTargetingMobile + public class GiftOfRenewalSpell : ArcanistSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Gift of Renewal", @@ -69,7 +69,7 @@ namespace Server.Spells.Spellweaving public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, 10); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } public static bool StopEffect(Mobile m) diff --git a/Projects/UOContent/Spells/Spellweaving/NatureFury.cs b/Projects/UOContent/Spells/Spellweaving/NatureFury.cs index 4a2e3f6a5..2527d2a93 100644 --- a/Projects/UOContent/Spells/Spellweaving/NatureFury.cs +++ b/Projects/UOContent/Spells/Spellweaving/NatureFury.cs @@ -1,11 +1,10 @@ using System; using Server.Mobiles; using Server.Regions; -using Server.Targeting; namespace Server.Spells.Spellweaving { - public class NatureFurySpell : ArcanistSpell, ISpellTargetingPoint3D + public class NatureFurySpell : ArcanistSpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Nature's Fury", @@ -71,7 +70,7 @@ namespace Server.Spells.Spellweaving public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, 10); + Caster.Target = new SpellTarget(this); } private class InternalTimer : Timer diff --git a/Projects/UOContent/Spells/Spellweaving/WordOfDeath.cs b/Projects/UOContent/Spells/Spellweaving/WordOfDeath.cs index 6211f4e35..04143c6cf 100644 --- a/Projects/UOContent/Spells/Spellweaving/WordOfDeath.cs +++ b/Projects/UOContent/Spells/Spellweaving/WordOfDeath.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Spellweaving { - public class WordOfDeathSpell : ArcanistSpell, ISpellTargetingMobile + public class WordOfDeathSpell : ArcanistSpell, ITargetingSpell { private static readonly SpellInfo _info = new("Word of Death", "Nyraxle", -1); @@ -72,7 +72,7 @@ namespace Server.Spells.Spellweaving public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, 10); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Targeting/IRecallSpell.cs b/Projects/UOContent/Spells/Targeting/IRecallSpell.cs index 76ca6bd77..94b52e920 100644 --- a/Projects/UOContent/Spells/Targeting/IRecallSpell.cs +++ b/Projects/UOContent/Spells/Targeting/IRecallSpell.cs @@ -1,9 +1,6 @@ -namespace Server.Spells +namespace Server.Spells; + +public interface IRecallSpell : IRangedSpell { - public interface IRecallSpell - { - Mobile Caster { get; } - void Effect(Point3D loc, Map map, bool checkMulti); - void FinishSequence(); - } + void Effect(Point3D loc, Map map, bool checkMulti); } diff --git a/Projects/UOContent/Spells/Targeting/ISpellTarget.cs b/Projects/UOContent/Spells/Targeting/ISpellTarget.cs index 9da3a893a..dc5446e94 100644 --- a/Projects/UOContent/Spells/Targeting/ISpellTarget.cs +++ b/Projects/UOContent/Spells/Targeting/ISpellTarget.cs @@ -1,7 +1,6 @@ -namespace Server.Spells +namespace Server.Spells; + +public interface ISpellTarget where T : IPoint3D { - public interface ISpellTarget - { - ISpell Spell { get; } - } + ITargetingSpell Spell { get; } } diff --git a/Projects/UOContent/Spells/Targeting/ITargetingSpell.cs b/Projects/UOContent/Spells/Targeting/ITargetingSpell.cs new file mode 100644 index 000000000..f2671e1a5 --- /dev/null +++ b/Projects/UOContent/Spells/Targeting/ITargetingSpell.cs @@ -0,0 +1,14 @@ +namespace Server.Spells; + +public interface IRangedSpell +{ + Mobile Caster { get; } + + int TargetRange => Core.ML ? 10 : 12; + void FinishSequence(); +} + +public interface ITargetingSpell : IRangedSpell where T : IPoint3D +{ + void Target(T target); +} diff --git a/Projects/UOContent/Spells/Targeting/RecallSpellTarget.cs b/Projects/UOContent/Spells/Targeting/RecallSpellTarget.cs index 2a7084a85..4de003f78 100644 --- a/Projects/UOContent/Spells/Targeting/RecallSpellTarget.cs +++ b/Projects/UOContent/Spells/Targeting/RecallSpellTarget.cs @@ -10,7 +10,7 @@ public class RecallSpellTarget : Target private readonly IRecallSpell _spell; private readonly bool _toBoat; - public RecallSpellTarget(IRecallSpell spell, bool toBoat = true) : base(Core.ML ? 10 : 12, false, TargetFlags.None) + public RecallSpellTarget(IRecallSpell spell, bool toBoat = true) : base(spell.TargetRange, false, TargetFlags.None) { _spell = spell; _toBoat = toBoat; @@ -68,8 +68,5 @@ public class RecallSpellTarget : Target { } - protected override void OnTargetFinish(Mobile from) - { - _spell?.FinishSequence(); - } + protected override void OnTargetFinish(Mobile from) => _spell?.FinishSequence(); } diff --git a/Projects/UOContent/Spells/Targeting/SpellTarget.cs b/Projects/UOContent/Spells/Targeting/SpellTarget.cs new file mode 100644 index 000000000..ccc9be520 --- /dev/null +++ b/Projects/UOContent/Spells/Targeting/SpellTarget.cs @@ -0,0 +1,58 @@ +using Server.Targeting; + +namespace Server.Spells; + +public class SpellTarget : Target, ISpellTarget where T : class, IPoint3D +{ + private static readonly bool _canTargetStatic = typeof(T).IsAssignableFrom(typeof(StaticTarget)); + private static readonly bool _canTargetMobile = typeof(T).IsAssignableFrom(typeof(Mobile)); + private static readonly bool _canTargetItem = typeof(T).IsAssignableFrom(typeof(Item)); + + private readonly bool _retryOnLos; + protected readonly ITargetingSpell _spell; + + public SpellTarget( + ITargetingSpell spell, + TargetFlags flags = TargetFlags.None, + bool retryOnLos = false + ) : this(spell, false, flags, retryOnLos) + { + } + + public SpellTarget(ITargetingSpell spell, bool allowGround, TargetFlags flags = TargetFlags.None, bool retryOnLos = false) + : base(spell.TargetRange, allowGround, flags) + { + _spell = spell; + _retryOnLos = retryOnLos; + } + + public ITargetingSpell Spell => _spell; + + protected override bool CanTarget(Mobile from, StaticTarget staticTarget, ref Point3D loc, ref Map map) + => _canTargetStatic; + + protected override bool CanTarget(Mobile from, Mobile mobile, ref Point3D loc, ref Map map) => _canTargetMobile; + + protected override bool CanTarget(Mobile from, Item item, ref Point3D loc, ref Map map) => _canTargetItem; + + protected override void OnCantSeeTarget(Mobile from, object o) + { + from.SendLocalizedMessage(500237); // Target can not be seen. + } + + protected override void OnTarget(Mobile from, object o) => _spell.Target(o as T); + + protected override void OnTargetOutOfLOS(Mobile from, object o) + { + if (!_retryOnLos) + { + return; + } + + from.SendLocalizedMessage(501943); // Target cannot be seen. Try again. + from.Target = new SpellTarget(_spell, AllowGround, Flags, true); + from.Target.BeginTimeout(from, TimeoutTime - Core.TickCount); + } + + protected override void OnTargetFinish(Mobile from) => _spell?.FinishSequence(); +} diff --git a/Projects/UOContent/Spells/Targeting/SpellTargetItem.cs b/Projects/UOContent/Spells/Targeting/SpellTargetItem.cs deleted file mode 100644 index 84ec397d9..000000000 --- a/Projects/UOContent/Spells/Targeting/SpellTargetItem.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Server.Targeting; - -namespace Server.Spells -{ - public interface ISpellTargetingItem : ISpell - { - void Target(Item item); - } - - public class SpellTargetItem : Target, ISpellTarget - { - private readonly ISpellTargetingItem _spell; - - public SpellTargetItem(ISpellTargetingItem spell, TargetFlags flags = TargetFlags.None, int range = 12) - : base(range, false, flags) => _spell = spell; - - public ISpell Spell => _spell; - - protected override bool CanTarget(Mobile from, StaticTarget staticTarget, ref Point3D loc, ref Map map) => false; - protected override bool CanTarget(Mobile from, Mobile mobile, ref Point3D loc, ref Map map) => false; - - protected override void OnCantSeeTarget(Mobile from, object o) - { - from.SendLocalizedMessage(500237); // Target can not be seen. - } - - protected override void OnTarget(Mobile from, object o) - { - _spell.Target(o as Item); - } - - protected override void OnTargetFinish(Mobile from) - { - _spell?.FinishSequence(); - } - } -} diff --git a/Projects/UOContent/Spells/Targeting/SpellTargetMobile.cs b/Projects/UOContent/Spells/Targeting/SpellTargetMobile.cs deleted file mode 100644 index c6c413d13..000000000 --- a/Projects/UOContent/Spells/Targeting/SpellTargetMobile.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Server.Targeting; - -namespace Server.Spells -{ - public interface ISpellTargetingMobile : ISpell - { - void Target(Mobile m); - } - - public class SpellTargetMobile : Target, ISpellTarget - { - private readonly ISpellTargetingMobile _spell; - - public SpellTargetMobile(ISpellTargetingMobile spell, TargetFlags flags, int range = 12) : - base(range, false, flags) => _spell = spell; - - public ISpell Spell => _spell; - - protected override bool CanTarget(Mobile from, StaticTarget staticTarget, ref Point3D loc, ref Map map) => false; - protected override bool CanTarget(Mobile from, Item item, ref Point3D loc, ref Map map) => false; - - protected override void OnTarget(Mobile from, object o) - { - _spell.Target(o as Mobile); - } - - protected override void OnTargetFinish(Mobile from) - { - _spell?.FinishSequence(); - } - } -} diff --git a/Projects/UOContent/Spells/Targeting/SpellTargetPoint3D.cs b/Projects/UOContent/Spells/Targeting/SpellTargetPoint3D.cs deleted file mode 100644 index 57240b502..000000000 --- a/Projects/UOContent/Spells/Targeting/SpellTargetPoint3D.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Server.Targeting; - -namespace Server.Spells -{ - public interface ISpellTargetingPoint3D : ISpell - { - void Target(IPoint3D p); - } - - public class SpellTargetPoint3D : Target, ISpellTarget - { - private readonly bool _retryOnLos; - private ISpellTargetingPoint3D _spell; - - public SpellTargetPoint3D( - ISpellTargetingPoint3D spell, TargetFlags flags = TargetFlags.None, int range = 12, bool retryOnLOS = false - ) : base(range, true, flags) - { - _spell = spell; - _retryOnLos = retryOnLOS; - } - - public ISpell Spell => _spell; - - protected override void OnTarget(Mobile from, object o) - { - _spell.Target(o as IPoint3D); - } - - protected override void OnCantSeeTarget(Mobile from, object o) - { - from.SendLocalizedMessage(500237); // Target can not be seen. - } - - protected override void OnTargetOutOfLOS(Mobile from, object o) - { - if (!_retryOnLos) - { - return; - } - - from.SendLocalizedMessage(501943); // Target cannot be seen. Try again. - from.Target = new SpellTargetPoint3D(_spell); - from.Target.BeginTimeout(from, TimeoutTime - Core.TickCount); - _spell = null; // Needed? - } - - protected override void OnTargetFinish(Mobile from) - { - _spell?.FinishSequence(); - } - } -} diff --git a/Projects/UOContent/Spells/Third/Bless.cs b/Projects/UOContent/Spells/Third/Bless.cs index b0d0dcfef..9cb2f16aa 100644 --- a/Projects/UOContent/Spells/Third/Bless.cs +++ b/Projects/UOContent/Spells/Third/Bless.cs @@ -3,7 +3,7 @@ using Server.Targeting; namespace Server.Spells.Third { - public class BlessSpell : MagerySpell, ISpellTargetingMobile + public class BlessSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Bless", @@ -55,7 +55,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Beneficial, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Beneficial); } } } diff --git a/Projects/UOContent/Spells/Third/Fireball.cs b/Projects/UOContent/Spells/Third/Fireball.cs index 061b9e339..2ec73fecb 100644 --- a/Projects/UOContent/Spells/Third/Fireball.cs +++ b/Projects/UOContent/Spells/Third/Fireball.cs @@ -2,7 +2,7 @@ using Server.Targeting; namespace Server.Spells.Third { - public class FireballSpell : MagerySpell, ISpellTargetingMobile + public class FireballSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Fireball", @@ -59,7 +59,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Third/MagicLock.cs b/Projects/UOContent/Spells/Third/MagicLock.cs index 903c197cd..80239e91e 100644 --- a/Projects/UOContent/Spells/Third/MagicLock.cs +++ b/Projects/UOContent/Spells/Third/MagicLock.cs @@ -3,7 +3,7 @@ using Server.Multis; namespace Server.Spells.Third { - public class MagicLockSpell : MagerySpell, ISpellTargetingItem + public class MagicLockSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Magic Lock", @@ -62,7 +62,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Third/Poison.cs b/Projects/UOContent/Spells/Third/Poison.cs index d86d35591..5a87a3cba 100644 --- a/Projects/UOContent/Spells/Third/Poison.cs +++ b/Projects/UOContent/Spells/Third/Poison.cs @@ -4,7 +4,7 @@ using Server.Targeting; namespace Server.Spells.Third { - public class PoisonSpell : MagerySpell, ISpellTargetingMobile + public class PoisonSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Poison", @@ -99,7 +99,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetMobile(this, TargetFlags.Harmful, Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this, TargetFlags.Harmful); } } } diff --git a/Projects/UOContent/Spells/Third/Telekinesis.cs b/Projects/UOContent/Spells/Third/Telekinesis.cs index 01a0e2f3f..47051f92e 100644 --- a/Projects/UOContent/Spells/Third/Telekinesis.cs +++ b/Projects/UOContent/Spells/Third/Telekinesis.cs @@ -2,7 +2,7 @@ using Server.Items; namespace Server.Spells.Third { - public class TelekinesisSpell : MagerySpell, ISpellTargetingItem + public class TelekinesisSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Telekinesis", @@ -72,7 +72,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Third/Teleport.cs b/Projects/UOContent/Spells/Third/Teleport.cs index 93a1adbb5..7bcbb6fa9 100644 --- a/Projects/UOContent/Spells/Third/Teleport.cs +++ b/Projects/UOContent/Spells/Third/Teleport.cs @@ -9,7 +9,7 @@ using Server.Spells.Sixth; namespace Server.Spells.Third { - public class TeleportSpell : MagerySpell, ISpellTargetingPoint3D + public class TeleportSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Teleport", @@ -139,7 +139,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Third/Unlock.cs b/Projects/UOContent/Spells/Third/Unlock.cs index f3681f372..b0ac12f56 100644 --- a/Projects/UOContent/Spells/Third/Unlock.cs +++ b/Projects/UOContent/Spells/Third/Unlock.cs @@ -3,7 +3,7 @@ using Server.Multis; namespace Server.Spells.Third { - public class UnlockSpell : MagerySpell, ISpellTargetingPoint3D + public class UnlockSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Unlock Spell", @@ -84,7 +84,7 @@ namespace Server.Spells.Third public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } } } diff --git a/Projects/UOContent/Spells/Third/WallOfStone.cs b/Projects/UOContent/Spells/Third/WallOfStone.cs index 4955714d6..8b2e5621e 100644 --- a/Projects/UOContent/Spells/Third/WallOfStone.cs +++ b/Projects/UOContent/Spells/Third/WallOfStone.cs @@ -5,7 +5,7 @@ using Server.Mobiles; namespace Server.Spells.Third; -public class WallOfStoneSpell : MagerySpell, ISpellTargetingPoint3D +public class WallOfStoneSpell : MagerySpell, ITargetingSpell { private static readonly SpellInfo _info = new( "Wall of Stone", @@ -56,7 +56,7 @@ public class WallOfStoneSpell : MagerySpell, ISpellTargetingPoint3D public override void OnCast() { - Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12); + Caster.Target = new SpellTarget(this); } }