fix: Cleans up spell targeting (#851)

This commit is contained in:
Kamron Batman 2021-11-14 21:07:54 -08:00 • committed by GitHub
parent 15b2d08ea2
commit 239dda4b3b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 61 additions and 70 deletions

View file

@ -377,20 +377,19 @@ namespace Server.Spells
return; return;
} }
if (!firstCircle && !Core.AOS && (this as MagerySpell)?.Circle == SpellCircle.First)
{
return;
}
State = SpellState.None;
Caster.Spell = null;
if (State == SpellState.Casting) if (State == SpellState.Casting)
{ {
if (!firstCircle && !Core.AOS && this is MagerySpell && ((MagerySpell)this).Circle == SpellCircle.First)
{
return;
}
State = SpellState.None;
Caster.Spell = null;
OnDisturb(type, true); OnDisturb(type, true);
m_CastTimer?.Stop(); m_CastTimer?.Stop();
m_AnimTimer?.Stop(); m_AnimTimer?.Stop();
if (Core.AOS && Caster.Player && type == DisturbType.Hurt) if (Core.AOS && Caster.Player && type == DisturbType.Hurt)
@ -402,14 +401,6 @@ namespace Server.Spells
} }
else if (State == SpellState.Sequencing) else if (State == SpellState.Sequencing)
{ {
if (!firstCircle && !Core.AOS && this is MagerySpell && ((MagerySpell)this).Circle == SpellCircle.First)
{
return;
}
State = SpellState.None;
Caster.Spell = null;
OnDisturb(type, false); OnDisturb(type, false);
Target.Cancel(Caster); Target.Cancel(Caster);

View file

@ -70,7 +70,7 @@ namespace Server.Spells.Eighth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this); Caster.Target = new SpellTargetPoint3D(this, retryOnLOS: true);
} }
} }
} }

View file

@ -79,7 +79,7 @@ namespace Server.Spells.Fifth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this); Caster.Target = new SpellTargetPoint3D(this, retryOnLOS: true);
} }
} }
} }

View file

@ -54,7 +54,7 @@ namespace Server.Spells.Fifth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -55,7 +55,7 @@ namespace Server.Spells.Fifth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12, false); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
[DispellableField] [DispellableField]

View file

@ -100,7 +100,7 @@ namespace Server.Spells.Fourth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
private bool AreaCanTarget(Mobile target, bool feluccaRules) private bool AreaCanTarget(Mobile target, bool feluccaRules)

View file

@ -103,7 +103,7 @@ namespace Server.Spells.Fourth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
private static void AddEntry(Mobile m, int v) private static void AddEntry(Mobile m, int v)

View file

@ -64,7 +64,7 @@ namespace Server.Spells.Fourth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
[DispellableField] [DispellableField]

View file

@ -206,7 +206,7 @@ namespace Server.Spells.Necromancy
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
Caster.SendLocalizedMessage(1061083); // Animate what corpse? Caster.SendLocalizedMessage(1061083); // Animate what corpse?
} }

View file

@ -85,7 +85,7 @@ namespace Server.Spells.Second
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -55,7 +55,7 @@ namespace Server.Spells.Second
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
Caster.SendMessage("What do you wish to untrap?"); // TODO: Localization? Caster.SendMessage("What do you wish to untrap?"); // TODO: Localization?
} }
} }

View file

@ -119,7 +119,7 @@ namespace Server.Spells.Seventh
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -82,7 +82,7 @@ namespace Server.Spells.Seventh
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
[DispellableField] [DispellableField]

View file

@ -77,7 +77,7 @@ namespace Server.Spells.Seventh
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -119,7 +119,7 @@ namespace Server.Spells.Seventh
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -61,7 +61,7 @@ namespace Server.Spells.Sixth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
} }
public override bool CheckCast() => base.CheckCast() && SpellHelper.CheckTravel(Caster, TravelCheckType.Mark); public override bool CheckCast() => base.CheckCast() && SpellHelper.CheckTravel(Caster, TravelCheckType.Mark);

View file

@ -67,7 +67,7 @@ namespace Server.Spells.Sixth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -68,7 +68,7 @@ namespace Server.Spells.Sixth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
[DispellableField] [DispellableField]

View file

@ -60,7 +60,7 @@ namespace Server.Spells.Sixth
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
// Reveal uses magery and detect hidden vs. hide and stealth // Reveal uses magery and detect hidden vs. hide and stealth

View file

@ -7,14 +7,14 @@ namespace Server.Spells
{ {
public class RecallSpellTarget : Target public class RecallSpellTarget : Target
{ {
private readonly IRecallSpell m_Spell; private readonly IRecallSpell _spell;
private readonly bool m_ToBoat; private readonly bool m_ToBoat;
public RecallSpellTarget(IRecallSpell spell, bool toBoat = true) : base(Core.ML ? 10 : 12, false, TargetFlags.None) public RecallSpellTarget(IRecallSpell spell, bool toBoat = true) : base(Core.ML ? 10 : 12, false, TargetFlags.None)
{ {
m_Spell = spell; _spell = spell;
m_ToBoat = toBoat; m_ToBoat = toBoat;
m_Spell.Caster.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501029); // Select Marked item. _spell.Caster.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501029); // Select Marked item.
} }
protected override void OnTarget(Mobile from, object o) protected override void OnTarget(Mobile from, object o)
@ -23,7 +23,7 @@ namespace Server.Spells
{ {
if (rune.Marked) if (rune.Marked)
{ {
m_Spell.Effect(rune.Target, rune.TargetMap, true); _spell.Effect(rune.Target, rune.TargetMap, true);
} }
else else
{ {
@ -36,7 +36,7 @@ namespace Server.Spells
if (e != null) if (e != null)
{ {
m_Spell.Effect(e.Location, e.Map, true); _spell.Effect(e.Location, e.Map, true);
} }
else else
{ {
@ -47,7 +47,7 @@ namespace Server.Spells
{ {
if (!boat.Deleted && boat.CheckKey(key.KeyValue)) if (!boat.Deleted && boat.CheckKey(key.KeyValue))
{ {
m_Spell.Effect(boat.GetMarkedLocation(), boat.Map, false); _spell.Effect(boat.GetMarkedLocation(), boat.Map, false);
} }
else else
{ {
@ -64,7 +64,7 @@ namespace Server.Spells
} }
else if (o is HouseRaffleDeed deed && deed.ValidLocation()) else if (o is HouseRaffleDeed deed && deed.ValidLocation())
{ {
m_Spell.Effect(deed.PlotLocation, deed.PlotFacet, true); _spell.Effect(deed.PlotLocation, deed.PlotFacet, true);
} }
else else
{ {
@ -86,7 +86,7 @@ namespace Server.Spells
protected override void OnTargetFinish(Mobile from) protected override void OnTargetFinish(Mobile from)
{ {
m_Spell?.FinishSequence(); _spell?.FinishSequence();
} }
} }
} }

View file

@ -9,24 +9,24 @@ namespace Server.Spells
public class SpellTargetItem : Target, ISpellTarget public class SpellTargetItem : Target, ISpellTarget
{ {
private readonly ISpellTargetingItem m_Spell; private readonly ISpellTargetingItem _spell;
public SpellTargetItem(ISpellTargetingItem spell, TargetFlags flags, int range = 12) : base(range, false, flags) => public SpellTargetItem(ISpellTargetingItem spell, TargetFlags flags = TargetFlags.None, int range = 12)
m_Spell = spell; : base(range, false, flags) => _spell = spell;
public ISpell Spell => m_Spell; public ISpell Spell => _spell;
protected override void OnTarget(Mobile from, object o) protected override void OnTarget(Mobile from, object o)
{ {
if (o is Item item) if (o is Item item)
{ {
m_Spell.Target(item); _spell.Target(item);
} }
} }
protected override void OnTargetFinish(Mobile from) protected override void OnTargetFinish(Mobile from)
{ {
m_Spell?.FinishSequence(); _spell?.FinishSequence();
} }
} }
} }

View file

@ -9,21 +9,21 @@ namespace Server.Spells
public class SpellTargetMobile : Target, ISpellTarget public class SpellTargetMobile : Target, ISpellTarget
{ {
private readonly ISpellTargetingMobile m_Spell; private readonly ISpellTargetingMobile _spell;
public SpellTargetMobile(ISpellTargetingMobile spell, TargetFlags flags, int range = 12) : public SpellTargetMobile(ISpellTargetingMobile spell, TargetFlags flags, int range = 12) :
base(range, false, flags) => m_Spell = spell; base(range, false, flags) => _spell = spell;
public ISpell Spell => m_Spell; public ISpell Spell => _spell;
protected override void OnTarget(Mobile from, object o) protected override void OnTarget(Mobile from, object o)
{ {
m_Spell.Target(o as Mobile); _spell.Target(o as Mobile);
} }
protected override void OnTargetFinish(Mobile from) protected override void OnTargetFinish(Mobile from)
{ {
m_Spell?.FinishSequence(); _spell?.FinishSequence();
} }
} }
} }

View file

@ -9,43 +9,43 @@ namespace Server.Spells
public class SpellTargetPoint3D : Target, ISpellTarget public class SpellTargetPoint3D : Target, ISpellTarget
{ {
private readonly bool m_CheckLOS; private readonly bool _retryOnLos;
private ISpellTargetingPoint3D m_Spell; private ISpellTargetingPoint3D _spell;
public SpellTargetPoint3D( public SpellTargetPoint3D(
ISpellTargetingPoint3D spell, TargetFlags flags = TargetFlags.None, int range = 12, bool checkLOS = true ISpellTargetingPoint3D spell, TargetFlags flags = TargetFlags.None, int range = 12, bool retryOnLOS = false
) : base(range, true, flags) ) : base(range, true, flags)
{ {
m_Spell = spell; _spell = spell;
m_CheckLOS = checkLOS; _retryOnLos = retryOnLOS;
} }
public ISpell Spell => m_Spell; public ISpell Spell => _spell;
protected override void OnTarget(Mobile from, object o) protected override void OnTarget(Mobile from, object o)
{ {
if (o is IPoint3D p) if (o is IPoint3D p)
{ {
m_Spell.Target(p); _spell.Target(p);
} }
} }
protected override void OnTargetOutOfLOS(Mobile from, object o) protected override void OnTargetOutOfLOS(Mobile from, object o)
{ {
if (!m_CheckLOS) if (!_retryOnLos)
{ {
return; return;
} }
from.SendLocalizedMessage(501943); // Target cannot be seen. Try again. from.SendLocalizedMessage(501943); // Target cannot be seen. Try again.
from.Target = new SpellTargetPoint3D(m_Spell); from.Target = new SpellTargetPoint3D(_spell);
from.Target.BeginTimeout(from, TimeoutTime - Core.TickCount); from.Target.BeginTimeout(from, TimeoutTime - Core.TickCount);
m_Spell = null; // Needed? _spell = null; // Needed?
} }
protected override void OnTargetFinish(Mobile from) protected override void OnTargetFinish(Mobile from)
{ {
m_Spell?.FinishSequence(); _spell?.FinishSequence();
} }
} }
} }

View file

@ -69,7 +69,7 @@ namespace Server.Spells.Third
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -75,7 +75,7 @@ namespace Server.Spells.Third
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetItem(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetItem(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -131,7 +131,7 @@ namespace Server.Spells.Third
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -96,7 +96,7 @@ namespace Server.Spells.Third
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
} }
} }

View file

@ -60,7 +60,7 @@ namespace Server.Spells.Third
public override void OnCast() public override void OnCast()
{ {
Caster.Target = new SpellTargetPoint3D(this, TargetFlags.None, Core.ML ? 10 : 12); Caster.Target = new SpellTargetPoint3D(this, range: Core.ML ? 10 : 12);
} }
[DispellableField] [DispellableField]