Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
197
Scripts/Items/Equipment/Weapons/BaseThrown.cs
Normal file
197
Scripts/Items/Equipment/Weapons/BaseThrown.cs
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user