feat: Adds instahit option (#901)

Enable instahit by adding the setting `"melee.enableInstaHit": "True"` to modernuo.json
This commit is contained in:
Kamron Batman 2021-12-28 02:42:36 -08:00 • committed by GitHub
parent 79dc9fa0f7
commit d0aa6320f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -25,6 +25,13 @@ namespace Server.Items
public abstract class BaseWeapon : Item, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability public abstract class BaseWeapon : Item, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability
{ {
private static bool _enableInstaHit;
public static void Configure()
{
_enableInstaHit = ServerConfiguration.GetSetting("melee.enableInstaHit", !Core.UOR);
}
private WeaponAccuracyLevel m_AccuracyLevel; private WeaponAccuracyLevel m_AccuracyLevel;
private WeaponAnimation m_Animation; private WeaponAnimation m_Animation;
private Mobile m_Crafter; private Mobile m_Crafter;
@ -950,7 +957,10 @@ namespace Server.Items
} }
} }
from.NextCombatTime = Core.TickCount + (int)GetDelay(from).TotalMilliseconds; if (!_enableInstaHit)
{
from.NextCombatTime = Core.TickCount + (int)GetDelay(from).TotalMilliseconds;
}
if (UseSkillMod && m_AccuracyLevel != WeaponAccuracyLevel.Regular) if (UseSkillMod && m_AccuracyLevel != WeaponAccuracyLevel.Regular)
{ {
@ -989,45 +999,45 @@ namespace Server.Items
public override void OnRemoved(IEntity parent) public override void OnRemoved(IEntity parent)
{ {
if (parent is Mobile m) if (parent is not Mobile m)
{ {
var weapon = m.Weapon as BaseWeapon; return;
var modName = Serial.ToString();
m.RemoveStatMod($"{modName}Str");
m.RemoveStatMod($"{modName}Dex");
m.RemoveStatMod($"{modName}Int");
if (weapon != null)
{
m.NextCombatTime = Core.TickCount + (int)weapon.GetDelay(m).TotalMilliseconds;
}
if (UseSkillMod && m_SkillMod != null)
{
m_SkillMod.Remove();
m_SkillMod = null;
}
if (m_MageMod != null)
{
m_MageMod.Remove();
m_MageMod = null;
}
if (Core.AOS)
{
SkillBonuses.Remove();
}
ImmolatingWeaponSpell.StopImmolating(this);
ForceOfNature.Remove(m);
m.CheckStatTimers();
m.Delta(MobileDelta.WeaponDamage);
} }
var modName = Serial.ToString();
m.RemoveStatMod($"{modName}Str");
m.RemoveStatMod($"{modName}Dex");
m.RemoveStatMod($"{modName}Int");
if (!_enableInstaHit && m.Weapon is BaseWeapon weapon)
{
m.NextCombatTime = Core.TickCount + (long)weapon.GetDelay(m).TotalMilliseconds;
}
if (UseSkillMod && m_SkillMod != null)
{
m_SkillMod.Remove();
m_SkillMod = null;
}
if (m_MageMod != null)
{
m_MageMod.Remove();
m_MageMod = null;
}
if (Core.AOS)
{
SkillBonuses.Remove();
}
ImmolatingWeaponSpell.StopImmolating(this);
ForceOfNature.Remove(m);
m.CheckStatTimers();
m.Delta(MobileDelta.WeaponDamage);
} }
public virtual SkillName GetUsedSkill(Mobile m, bool checkSkillAttrs) public virtual SkillName GetUsedSkill(Mobile m, bool checkSkillAttrs)