fix: Players casting is sometimes not disturbed (#1138)

This commit is contained in:
mark1145 2022-08-17 15:17:39 +10:00 committed by GitHub
parent 2ae762904f
commit 23ae7a3c26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 44 deletions

View file

@ -386,15 +386,8 @@ namespace Server.Mobiles
Disturb(DisturbType.Hurt, false);
}
public override bool CheckDisturb(DisturbType type, bool checkFirst, bool resistable)
{
if (type is DisturbType.EquipRequest or DisturbType.UseRequest /* || type == DisturbType.Hurt*/)
{
return false;
}
return true;
}
public override bool CheckDisturb(DisturbType type, bool checkFirst, bool resistable) =>
type != DisturbType.EquipRequest && type != DisturbType.UseRequest;
public override void DoHurtFizzle()
{

View file

@ -113,15 +113,8 @@ namespace Server.SkillHandlers
base.OnDisturb(type, message);
}
public override bool CheckDisturb(DisturbType type, bool checkFirst, bool resistable)
{
if (type is DisturbType.EquipRequest or DisturbType.UseRequest)
{
return false;
}
return true;
}
public override bool CheckDisturb(DisturbType type, bool checkFirst, bool resistable) =>
type != DisturbType.EquipRequest && type != DisturbType.UseRequest;
public override void SayMantra()
{

View file

@ -395,38 +395,31 @@ namespace Server.Spells
return;
}
if (!firstCircle && !Core.AOS && (this as MagerySpell)?.Circle == SpellCircle.First)
if (State == SpellState.None || !firstCircle && !Core.AOS && (this as MagerySpell)?.Circle == SpellCircle.First)
{
return;
}
var wasCasting = IsCasting; // Copy SpellState before resetting it to none
State = SpellState.None;
Caster.Spell = null;
if (State == SpellState.Casting)
{
OnDisturb(type, true);
OnDisturb(type, wasCasting);
if (wasCasting)
{
_castTimer?.Stop();
_animTimer?.Stop();
if (Core.AOS && Caster.Player && type == DisturbType.Hurt)
{
DoHurtFizzle();
}
Caster.NextSpellTime = Core.TickCount + (int)GetDisturbRecovery().TotalMilliseconds;
}
else if (State == SpellState.Sequencing)
else
{
OnDisturb(type, false);
Target.Cancel(Caster);
}
if (Core.AOS && Caster.Player && type == DisturbType.Hurt)
{
DoHurtFizzle();
}
if (Core.AOS && Caster.Player && type == DisturbType.Hurt)
{
DoHurtFizzle();
}
}

View file

@ -1,13 +1,12 @@
namespace Server.Spells
namespace Server.Spells;
public enum SpellState
{
public enum SpellState
{
None = 0,
None = 0,
Casting =
1, // We are in the process of casting (that is, waiting GetCastTime() and doing animations). Spell casting may be interupted in this state.
// We are in the process of casting (that is, waiting GetCastTime() and doing animations). Spell casting may be interupted in this state.
Casting = 1,
Sequencing =
2 // Casting completed, but the full spell sequence isn't. Usually waiting for a target response. Some actions are restricted in this state (using skills for example).
}
// Casting completed, but the full spell sequence isn't. Usually waiting for a target response. Some actions are restricted in this state (using skills for example).
Sequencing = 2
}