Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
121
Scripts/Abilities/Disarm.cs
Normal file
121
Scripts/Abilities/Disarm.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
/// <summary>
|
||||
/// This attack allows you to disarm your foe.
|
||||
/// Now in Age of Shadows, a successful Disarm leaves the victim unable to re-arm another weapon for several seconds.
|
||||
/// </summary>
|
||||
public class Disarm : WeaponAbility
|
||||
{
|
||||
public static readonly TimeSpan BlockEquipDuration = TimeSpan.FromSeconds(5.0);
|
||||
public Disarm()
|
||||
{
|
||||
}
|
||||
|
||||
public override int BaseMana
|
||||
{
|
||||
get
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool RequiresSecondarySkill(Mobile from)
|
||||
{
|
||||
BaseWeapon weapon = from.Weapon as BaseWeapon;
|
||||
|
||||
if (weapon == null)
|
||||
return false;
|
||||
|
||||
return weapon.Skill != SkillName.Wrestling;
|
||||
}
|
||||
|
||||
public override void OnHit(Mobile attacker, Mobile defender, int damage)
|
||||
{
|
||||
if (!this.Validate(attacker))
|
||||
return;
|
||||
|
||||
ClearCurrentAbility(attacker);
|
||||
|
||||
if (IsImmune(defender))
|
||||
{
|
||||
attacker.SendLocalizedMessage(1111827); // Your opponent is gripping their weapon too tightly to be disarmed.
|
||||
defender.SendLocalizedMessage(1111828); // You will not be caught off guard by another disarm attack for some time.
|
||||
return;
|
||||
}
|
||||
|
||||
Item toDisarm = defender.FindItemOnLayer(Layer.OneHanded);
|
||||
|
||||
if (toDisarm == null || !toDisarm.Movable)
|
||||
toDisarm = defender.FindItemOnLayer(Layer.TwoHanded);
|
||||
|
||||
Container pack = defender.Backpack;
|
||||
|
||||
if (pack == null || (toDisarm != null && !toDisarm.Movable))
|
||||
{
|
||||
attacker.SendLocalizedMessage(1004001); // You cannot disarm your opponent.
|
||||
}
|
||||
else if (toDisarm == null || toDisarm is BaseShield || toDisarm is Spellbook && !Core.ML)
|
||||
{
|
||||
attacker.SendLocalizedMessage(1060849); // Your target is already unarmed!
|
||||
}
|
||||
else if (this.CheckMana(attacker, true))
|
||||
{
|
||||
attacker.SendLocalizedMessage(1060092); // You disarm their weapon!
|
||||
defender.SendLocalizedMessage(1060093); // Your weapon has been disarmed!
|
||||
|
||||
defender.PlaySound(0x3B9);
|
||||
defender.FixedParticles(0x37BE, 232, 25, 9948, EffectLayer.LeftHand);
|
||||
|
||||
pack.DropItem(toDisarm);
|
||||
|
||||
BuffInfo.AddBuff(defender, new BuffInfo( BuffIcon.NoRearm, 1075637, BlockEquipDuration, defender));
|
||||
|
||||
BaseWeapon.BlockEquip(defender, BlockEquipDuration);
|
||||
|
||||
if (defender is BaseCreature && _AutoRearms.Any(t => t == defender.GetType()))
|
||||
{
|
||||
Timer.DelayCall(BlockEquipDuration + TimeSpan.FromSeconds(Utility.RandomMinMax(3, 10)), () =>
|
||||
{
|
||||
if (toDisarm != null && !toDisarm.Deleted && toDisarm.IsChildOf(defender.Backpack))
|
||||
defender.EquipItem(toDisarm);
|
||||
});
|
||||
}
|
||||
|
||||
if(Core.SA)
|
||||
AddImmunity(defender, Core.TOL && attacker.Weapon is Fists ? TimeSpan.FromSeconds(10) : TimeSpan.FromSeconds(15));
|
||||
}
|
||||
}
|
||||
|
||||
private Type[] _AutoRearms =
|
||||
{
|
||||
typeof(BritannianInfantry)
|
||||
};
|
||||
|
||||
public static List<Mobile> _Immunity;
|
||||
|
||||
public static bool IsImmune(Mobile m)
|
||||
{
|
||||
return _Immunity != null && _Immunity.Contains(m);
|
||||
}
|
||||
|
||||
public static void AddImmunity(Mobile m, TimeSpan duration)
|
||||
{
|
||||
if (_Immunity == null)
|
||||
_Immunity = new List<Mobile>();
|
||||
|
||||
_Immunity.Add(m);
|
||||
|
||||
Timer.DelayCall<Mobile>(duration, mob =>
|
||||
{
|
||||
if (_Immunity != null && _Immunity.Contains(mob))
|
||||
_Immunity.Remove(mob);
|
||||
}, m);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user