#W# Initial Commit: Avatars Conquest

This commit is contained in:
WarrentyExpired 2026-07-04 10:35:30 -04:00
commit 5df497787a
7510 changed files with 416048 additions and 0 deletions

View file

@ -0,0 +1,111 @@
using System;
using Server.Items;
using Server.Network;
using Server.Spells;
using Server.Mobiles;
namespace Server.Items
{
public abstract class BaseRanged : BaseMeleeWeapon
{
public abstract int EffectID{ get; }
public abstract Type AmmoType{ get; }
public abstract Item Ammo{ get; }
public override int DefHitSound{ get{ return 0x234; } }
public override int DefMissSound{ get{ return 0x238; } }
public override SkillName DefSkill{ get{ return SkillName.Archery; } }
public override WeaponType DefType{ get{ return WeaponType.Ranged; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.ShootXBow; } }
public override SkillName AccuracySkill{ get{ return SkillName.Archery; } }
private Timer m_RecoveryTimer; // so we don't start too many timers
public BaseRanged( int itemID ) : base( itemID )
{
}
public BaseRanged( Serial serial ) : base( serial )
{
}
public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
{
// Make sure we've been standing still for .25/.5/1 second depending on Era
if ( DateTime.Now > (attacker.LastMoveTime + TimeSpan.FromSeconds( 1.0 )) )
{
bool canSwing = true;
if ( canSwing && attacker.HarmfulCheck( defender ) )
{
attacker.DisruptiveAction();
attacker.Send( new Swing( 0, attacker, defender ) );
if ( OnFired( attacker, defender ) )
{
if ( CheckHit( attacker, defender ) )
OnHit( attacker, defender );
else
OnMiss( attacker, defender );
}
}
attacker.RevealingAction();
return GetDelay( attacker );
}
else
{
attacker.RevealingAction();
return TimeSpan.FromSeconds( 0.25 );
}
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
if ( attacker.Player && !defender.Player && (defender.Body.IsAnimal || defender.Body.IsMonster) && 0.4 >= Utility.RandomDouble() )
defender.AddToBackpack( Ammo );
base.OnHit( attacker, defender, damageBonus );
}
public override void OnMiss( Mobile attacker, Mobile defender )
{
if ( attacker.Player && 0.4 >= Utility.RandomDouble() )
{
Ammo.MoveToWorld( new Point3D( defender.X + Utility.RandomMinMax( -1, 1 ), defender.Y + Utility.RandomMinMax( -1, 1 ), defender.Z ), defender.Map );
}
base.OnMiss( attacker, defender );
}
public virtual bool OnFired( Mobile attacker, Mobile defender )
{
Container pack = attacker.Backpack;
if ( pack == null || !pack.ConsumeTotal( AmmoType, 1 ) )
return false;
attacker.MovingEffect( defender, EffectID, 18, 1, false, false );
return true;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,54 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13B2, 0x13B1 )]
public class Bow : BaseRanged
{
public override int EffectID{ get{ return 0xF42; } }
public override Type AmmoType{ get{ return typeof( Arrow ); } }
public override Item Ammo{ get{ return new Arrow(); } }
public override int UOStrengthReq{ get{ return 20; } }
public override int UOMinDamage{ get{ return 9; } }
public override int UOMaxDamage{ get{ return 41; } }
public override int UOSpeed{ get{ return 20; } }
public override int DefMaxRange{ get{ return 10; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 60; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.ShootBow; } }
[Constructable]
public Bow() : base( 0x13B2 )
{
Weight = 6.0;
Layer = Layer.TwoHanded;
}
public Bow( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
if ( Weight == 7.0 )
Weight = 6.0;
}
}
}

View file

@ -0,0 +1,49 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF50, 0xF4F )]
public class Crossbow : BaseRanged
{
public override int EffectID{ get{ return 0x1BFE; } }
public override Type AmmoType{ get{ return typeof( Bolt ); } }
public override Item Ammo{ get{ return new Bolt(); } }
public override int UOStrengthReq{ get{ return 30; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 43; } }
public override int UOSpeed{ get{ return 18; } }
public override int DefMaxRange{ get{ return 8; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 80; } }
[Constructable]
public Crossbow() : base( 0xF50 )
{
Weight = 7.0;
Layer = Layer.TwoHanded;
}
public Crossbow( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,49 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13FD, 0x13FC )]
public class HeavyCrossbow : BaseRanged
{
public override int EffectID{ get{ return 0x1BFE; } }
public override Type AmmoType{ get{ return typeof( Bolt ); } }
public override Item Ammo{ get{ return new Bolt(); } }
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 11; } }
public override int UOMaxDamage{ get{ return 56; } }
public override int UOSpeed{ get{ return 10; } }
public override int DefMaxRange{ get{ return 8; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 100; } }
[Constructable]
public HeavyCrossbow() : base( 0x13FD )
{
Weight = 9.0;
Layer = Layer.TwoHanded;
}
public HeavyCrossbow( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}