Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,197 @@
using System;
using Server.Mobiles;
namespace Server.Items
{
public abstract class BaseThrown : BaseRanged
{
private Mobile m_Thrower;
private Mobile m_Target;
private Point3D m_KillSave;
public BaseThrown(int itemID)
: base(itemID)
{
}
public BaseThrown(Serial serial)
: base(serial)
{
}
public abstract int MinThrowRange { get; }
public virtual int MaxThrowRange
{
get
{
return MinThrowRange + 3;
}
}
public override int DefMaxRange
{
get
{
int baseRange = MaxThrowRange;
var attacker = Parent as Mobile;
if (attacker != null)
{
/*
* Each weapon has a base and max range available to it, where the base
* range is modified by the player<65>s strength to determine the actual range.
*
* Determining the maximum range of each weapon while in use:
* - Range = BaseRange + ((PlayerStrength - MinWeaponStrReq) / ((150 - MinWeaponStrReq) / 3))
* - The absolute maximum range is capped at 11 tiles.
*
* As per OSI tests: with 140 Strength you achieve max range for all throwing weapons.
*/
return (baseRange - 3) + ((attacker.Str - AosStrengthReq) / ((140 - AosStrengthReq) / 3));
}
else
{
return baseRange;
}
}
}
public override int EffectID
{
get
{
return ItemID;
}
}
public override Type AmmoType
{
get
{
return null;
}
}
public override Item Ammo
{
get
{
return null;
}
}
public override int DefHitSound
{
get
{
return 0x5D3;
}
}
public override int DefMissSound
{
get
{
return 0x5D4;
}
}
public override SkillName DefSkill
{
get
{
return SkillName.Throwing;
}
}
public override WeaponAnimation DefAnimation
{
get
{
return WeaponAnimation.Throwing;
}
}
public override SkillName AccuracySkill
{
get
{
return SkillName.Throwing;
}
}
/*public override TimeSpan OnSwing(Mobile attacker, IDamageable damageable)
{
TimeSpan ts = base.OnSwing(attacker, damageable);
// time it takes to throw it around including mystic arc
if (ts < TimeSpan.FromMilliseconds(1000))
ts = TimeSpan.FromMilliseconds(1000);
return ts;
}*/
public override bool OnFired(Mobile attacker, IDamageable damageable)
{
m_Thrower = attacker;
if (!attacker.InRange(damageable, 1))
{
attacker.MovingEffect(damageable, EffectID, 18, 1, false, false, Hue, 0);
}
return true;
}
public override void OnHit(Mobile attacker, IDamageable damageable, double damageBonus)
{
m_KillSave = damageable.Location;
if (!(WeaponAbility.GetCurrentAbility(attacker) is MysticArc))
Timer.DelayCall(TimeSpan.FromMilliseconds(333.0), new TimerCallback(ThrowBack));
base.OnHit(attacker, damageable, damageBonus);
}
public override void OnMiss(Mobile attacker, IDamageable damageable)
{
m_Target = damageable as Mobile;
if (!(WeaponAbility.GetCurrentAbility(attacker) is MysticArc))
Timer.DelayCall(TimeSpan.FromMilliseconds(333.0), new TimerCallback(ThrowBack));
base.OnMiss(attacker, damageable);
}
public virtual void ThrowBack()
{
if (m_Target != null)
m_Target.MovingEffect(m_Thrower, EffectID, 18, 1, false, false, Hue, 0);
else if (m_Thrower != null)
Effects.SendMovingParticles(new Entity(Serial.Zero, m_KillSave, m_Thrower.Map), m_Thrower, ItemID, 18, 0, false, false, Hue, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version == 0)
InheritsItem = true;
}
#region Old Item Serialization Vars
/* DO NOT USE! Only used in serialization of abyss reaver that originally derived from Item */
public bool InheritsItem { get; protected set; }
#endregion
}
}