#W# Initial Commit: Avatars Conquest

This commit is contained in:
WarrentyExpired 2026-07-03 20:19:48 -04:00
commit 8eae46895e
7512 changed files with 416187 additions and 0 deletions

View file

@ -0,0 +1,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xF49, 0xF4a )]
public class Axe : BaseAxe
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 37; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public Axe() : base( 0xF49 )
{
Weight = 4.0;
}
public Axe( 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,163 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.Items;
using Server.Engines.Harvest;
using Server.ContextMenus;
namespace Server.Items
{
public interface IAxe
{
bool Axe( Mobile from, BaseAxe axe );
}
public abstract class BaseAxe : BaseMeleeWeapon
{
public override int DefHitSound{ get{ return 0x232; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override SkillName DefSkill{ get{ return SkillName.Swords; } }
public override WeaponType DefType{ get{ return WeaponType.Axe; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash2H; } }
public virtual HarvestSystem HarvestSystem{ get{ return Lumberjacking.System; } }
private int m_UsesRemaining;
private bool m_ShowUsesRemaining;
[CommandProperty( AccessLevel.GameMaster )]
public int UsesRemaining
{
get { return m_UsesRemaining; }
set { m_UsesRemaining = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool ShowUsesRemaining
{
get { return m_ShowUsesRemaining; }
set { m_ShowUsesRemaining = value; InvalidateProperties(); }
}
public virtual int GetUsesScalar()
{
if ( Quality == WeaponQuality.Exceptional )
return 200;
return 100;
}
public override void UnscaleDurability()
{
base.UnscaleDurability();
int scale = GetUsesScalar();
m_UsesRemaining = ((m_UsesRemaining * 100) + (scale - 1)) / scale;
InvalidateProperties();
}
public override void ScaleDurability()
{
base.ScaleDurability();
int scale = GetUsesScalar();
m_UsesRemaining = ((m_UsesRemaining * scale) + 99) / 100;
InvalidateProperties();
}
public BaseAxe( int itemID ) : base( itemID )
{
m_UsesRemaining = 150;
}
public BaseAxe( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( HarvestSystem == null || Deleted )
return;
Point3D loc = this.GetWorldLocation();
if ( !from.InLOS( loc ) || !from.InRange( loc, 2 ) )
{
from.LocalOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1019045 ); // I can't reach that
return;
}
else if ( !this.IsAccessibleTo( from ) )
{
this.PublicOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1061637 ); // You are not allowed to access this.
return;
}
if ( !(this.HarvestSystem is Mining) )
from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on?
HarvestSystem.BeginHarvesting( from, this );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 2 ); // version
writer.Write( (bool) m_ShowUsesRemaining );
writer.Write( (int) m_UsesRemaining );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 2:
{
m_ShowUsesRemaining = reader.ReadBool();
goto case 1;
}
case 1:
{
m_UsesRemaining = reader.ReadInt();
goto case 0;
}
case 0:
{
if ( m_UsesRemaining < 1 )
m_UsesRemaining = 150;
break;
}
}
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() )
{
StatMod mod = defender.GetStatMod( "Concussion" );
if ( mod == null )
{
defender.SendMessage( "You receive a concussion blow!" );
defender.AddStatMod( new StatMod( StatType.Int, "Concussion", -(defender.RawInt / 2), TimeSpan.FromSeconds( 30.0 ) ) );
attacker.SendMessage( "You deliver a concussion blow!" );
attacker.PlaySound( 0x308 );
}
}
}
}
}

View file

@ -0,0 +1,43 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xF47, 0xF48 )]
public class BattleAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 38; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public BattleAxe() : base( 0xF47 )
{
Weight = 4.0;
Layer = Layer.TwoHanded;
}
public BattleAxe( 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,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xf4b, 0xf4c )]
public class DoubleAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 45; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 35; } }
public override int UOSpeed{ get{ return 37; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public DoubleAxe() : base( 0xF4B )
{
Weight = 8.0;
}
public DoubleAxe( 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,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xf45, 0xf46 )]
public class GreatAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 37; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public GreatAxe() : base( 0xF45 )
{
Weight = 8.0;
}
public GreatAxe( 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,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xF43, 0xF44 )]
public class Hatchet : BaseAxe
{
public override int UOStrengthReq{ get{ return 15; } }
public override int UOMinDamage{ get{ return 2; } }
public override int UOMaxDamage{ get{ return 17; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 80; } }
[Constructable]
public Hatchet() : base( 0xF43 )
{
Weight = 4.0;
}
public Hatchet( 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,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0x13FB, 0x13FA )]
public class LargeBattleAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 38; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public LargeBattleAxe() : base( 0x13FB )
{
Weight = 6.0;
}
public LargeBattleAxe( 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,50 @@
using System;
using Server.Items;
using Server.Network;
using Server.Engines.Harvest;
namespace Server.Items
{
[FlipableAttribute( 0xE86, 0xE85 )]
public class Pickaxe : BaseAxe, IUsesRemaining
{
public override HarvestSystem HarvestSystem{ get{ return Mining.System; } }
public override int UOStrengthReq{ get{ return 25; } }
public override int UOMinDamage{ get{ return 1; } }
public override int UOMaxDamage{ get{ return 15; } }
public override int UOSpeed{ get{ return 35; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 60; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } }
[Constructable]
public Pickaxe() : base( 0xE86 )
{
Weight = 11.0;
UsesRemaining = 50;
ShowUsesRemaining = true;
}
public Pickaxe( 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();
ShowUsesRemaining = true;
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0x1443, 0x1442 )]
public class TwoHandedAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 39; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 90; } }
[Constructable]
public TwoHandedAxe() : base( 0x1443 )
{
Weight = 8.0;
}
public TwoHandedAxe( 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,52 @@
using System;
using Server.Items;
using Server.Network;
using Server.Engines.Harvest;
namespace Server.Items
{
[FlipableAttribute( 0x13B0, 0x13AF )]
public class WarAxe : BaseAxe
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 9; } }
public override int UOMaxDamage{ get{ return 27; } }
public override int UOSpeed{ get{ return 40; } }
public override int DefHitSound{ get{ return 0x233; } }
public override int DefMissSound{ get{ return 0x239; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 80; } }
public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } }
public override WeaponType DefType{ get{ return WeaponType.Bashing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash1H; } }
public override HarvestSystem HarvestSystem{ get{ return null; } }
[Constructable]
public WarAxe() : base( 0x13B0 )
{
Weight = 8.0;
}
public WarAxe( 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,60 @@
using System;
using Server;
namespace Server.Items
{
public abstract class BaseMeleeWeapon : BaseWeapon
{
public BaseMeleeWeapon( int itemID ) : base( itemID )
{
}
public BaseMeleeWeapon( Serial serial ) : base( serial )
{
}
public override int AbsorbDamage( Mobile attacker, Mobile defender, int damage )
{
damage = base.AbsorbDamage( attacker, defender, damage );
int absorb = defender.MeleeDamageAbsorb;
if ( absorb > 0 )
{
if ( absorb > damage )
{
int react = damage / 5;
if ( react <= 0 )
react = 1;
defender.MeleeDamageAbsorb -= damage;
damage = 0;
attacker.Damage( react, defender );
attacker.PlaySound( 0x1F1 );
attacker.FixedEffect( 0x374A, 10, 16 );
}
else
{
defender.MeleeDamageAbsorb = 0;
defender.SendLocalizedMessage( 1005556 ); // Your reactive armor spell has been nullified.
DefensiveSpell.Nullify( defender );
}
}
return damage;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,281 @@
using System;
using Server.Items;
using Server.Network;
namespace Server.Items
{
public class Fists : BaseMeleeWeapon
{
public static void Initialize()
{
Mobile.DefaultWeapon = new Fists();
EventSink.DisarmRequest += new DisarmRequestEventHandler( EventSink_DisarmRequest );
EventSink.StunRequest += new StunRequestEventHandler( EventSink_StunRequest );
}
public override int UOStrengthReq{ get{ return 0; } }
public override int UOMinDamage{ get{ return 1; } }
public override int UOMaxDamage{ get{ return 8; } }
public override int UOSpeed{ get{ return 30; } }
public override int DefHitSound{ get{ return -1; } }
public override int DefMissSound{ get{ return -1; } }
public override SkillName DefSkill{ get{ return SkillName.HandToHand; } }
public override WeaponType DefType{ get{ return WeaponType.Fists; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Wrestle; } }
public Fists() : base( 0 )
{
Visible = false;
Movable = false;
Quality = WeaponQuality.Regular;
}
public Fists( Serial serial ) : base( serial )
{
}
public override double GetDefendSkillValue( Mobile attacker, Mobile defender )
{
double wresValue = defender.Skills[SkillName.HandToHand].Value;
double anatValue = defender.Skills[SkillName.Tactics].Value;
double evalValue = defender.Skills[SkillName.Concentration].Value;
double incrValue = (anatValue + evalValue + 20.0) * 0.5;
if ( incrValue > 120.0 )
incrValue = 120.0;
if ( wresValue > incrValue )
return wresValue;
else
return incrValue;
}
public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
{
if ( attacker.StunReady )
{
if ( attacker.CanBeginAction( typeof( Fists ) ) )
{
if ( attacker.Skills[SkillName.Tactics].Value >= 80.0 && attacker.Skills[SkillName.HandToHand].Value >= 80.0 )
{
if ( attacker.Stam >= 15 )
{
attacker.Stam -= 15;
if ( CheckMove( attacker, SkillName.Tactics ) )
{
StartMoveDelay( attacker );
attacker.StunReady = false;
attacker.SendLocalizedMessage( 1004013 ); // You successfully stun your opponent!
defender.SendLocalizedMessage( 1004014 ); // You have been stunned!
defender.Freeze( TimeSpan.FromSeconds( 4.0 ) );
}
else
{
attacker.SendLocalizedMessage( 1004010 ); // You failed in your attempt to stun.
defender.SendLocalizedMessage( 1004011 ); // Your opponent tried to stun you and failed.
}
}
else
{
attacker.SendLocalizedMessage( 1004009 ); // You are too fatigued to attempt anything.
}
}
else
{
attacker.SendLocalizedMessage( 1004008 ); // You are not skilled enough to stun your opponent.
attacker.StunReady = false;
}
}
}
else if ( attacker.DisarmReady )
{
if ( attacker.CanBeginAction( typeof( Fists ) ) )
{
if ( defender.Player || defender.Body.IsHuman )
{
if ( attacker.Skills[SkillName.Tactics].Value >= 80.0 && attacker.Skills[SkillName.HandToHand].Value >= 80.0 )
{
if ( attacker.Stam >= 15 )
{
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 ( CheckMove( attacker, SkillName.Tactics ) )
{
StartMoveDelay( attacker );
attacker.Stam -= 15;
attacker.DisarmReady = false;
attacker.SendLocalizedMessage( 1004006 ); // You successfully disarm your opponent!
defender.SendLocalizedMessage( 1004007 ); // You have been disarmed!
pack.DropItem( toDisarm );
}
else
{
attacker.Stam -= 15;
attacker.SendLocalizedMessage( 1004004 ); // You failed in your attempt to disarm.
defender.SendLocalizedMessage( 1004005 ); // Your opponent tried to disarm you but failed.
}
}
else
{
attacker.SendLocalizedMessage( 1004003 ); // You are too fatigued to attempt anything.
}
}
else
{
attacker.SendLocalizedMessage( 1004002 ); // You are not skilled enough to disarm your opponent.
attacker.DisarmReady = false;
}
}
else
{
attacker.SendLocalizedMessage( 1004001 ); // You cannot disarm your opponent.
}
}
}
return base.OnSwing( attacker, defender );
}
/*public override void OnMiss( Mobile attacker, Mobile defender )
{
base.PlaySwingAnimation( attacker );
}*/
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();
Delete();
}
/* Wrestling moves */
private static bool CheckMove( Mobile m, SkillName other )
{
double wresValue = m.Skills[SkillName.HandToHand].Value;
double scndValue = m.Skills[other].Value;
/* 40% chance at 80, 80
* 50% chance at 100, 100
* 60% chance at 120, 120
*/
double chance = (wresValue + scndValue) / 400.0;
return ( chance >= Utility.RandomDouble() );
}
private static bool HasFreeHands( Mobile m )
{
Item item = m.FindItemOnLayer( Layer.OneHanded );
if ( item != null && !(item is Spellbook) )
return false;
return m.FindItemOnLayer( Layer.TwoHanded ) == null;
}
private static void EventSink_DisarmRequest( DisarmRequestEventArgs e )
{
Mobile m = e.Mobile;
double armsValue = m.Skills[SkillName.Tactics].Value;
double wresValue = m.Skills[SkillName.HandToHand].Value;
if ( !HasFreeHands( m ) )
{
m.SendLocalizedMessage( 1004029 ); // You must have your hands free to attempt to disarm your opponent.
m.DisarmReady = false;
}
else if ( armsValue >= 80.0 && wresValue >= 80.0 )
{
m.DisruptiveAction();
m.DisarmReady = !m.DisarmReady;
m.SendLocalizedMessage( m.DisarmReady ? 1019013 : 1019014 );
}
else
{
m.SendLocalizedMessage( 1004002 ); // You are not skilled enough to disarm your opponent.
m.DisarmReady = false;
}
}
private static void EventSink_StunRequest( StunRequestEventArgs e )
{
Mobile m = e.Mobile;
double anatValue = m.Skills[SkillName.Tactics].Value;
double wresValue = m.Skills[SkillName.HandToHand].Value;
if ( !HasFreeHands( m ) )
{
m.SendLocalizedMessage( 1004031 ); // You must have your hands free to attempt to stun your opponent.
m.StunReady = false;
}
else if ( anatValue >= 80.0 && wresValue >= 80.0 )
{
m.DisruptiveAction();
m.StunReady = !m.StunReady;
m.SendLocalizedMessage( m.StunReady ? 1019011 : 1019012 );
}
else
{
m.SendLocalizedMessage( 1004008 ); // You are not skilled enough to stun your opponent.
m.StunReady = false;
}
}
private class MoveDelayTimer : Timer
{
private Mobile m_Mobile;
public MoveDelayTimer( Mobile m ) : base( TimeSpan.FromSeconds( 10.0 ) )
{
m_Mobile = m;
Priority = TimerPriority.TwoFiftyMS;
m_Mobile.BeginAction( typeof( Fists ) );
}
protected override void OnTick()
{
m_Mobile.EndAction( typeof( Fists ) );
}
}
private static void StartMoveDelay( Mobile m )
{
new MoveDelayTimer( m ).Start();
}
}
}

View file

@ -0,0 +1,59 @@
using System;
using Server;
using Server.Items;
using Server.Targets;
namespace Server.Items
{
public abstract class BaseKnife : BaseMeleeWeapon
{
public override int DefHitSound{ get{ return 0x23B; } }
public override int DefMissSound{ get{ return 0x238; } }
public override SkillName DefSkill{ get{ return SkillName.Swords; } }
public override WeaponType DefType{ get{ return WeaponType.Slashing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } }
public BaseKnife( int itemID ) : base( itemID )
{
}
public BaseKnife( 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();
}
public override void OnDoubleClick( Mobile from )
{
from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on?
from.Target = new BladedItemTarget( this );
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
if ( Poison != null && PoisonCharges > 0 )
{
--PoisonCharges;
if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison
defender.ApplyPoison( attacker, Poison );
}
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13F6, 0x13F7 )]
public class ButcherKnife : BaseKnife
{
public override int UOStrengthReq{ get{ return 5; } }
public override int UOMinDamage{ get{ return 2; } }
public override int UOMaxDamage{ get{ return 14; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 40; } }
[Constructable]
public ButcherKnife() : base( 0x13F6 )
{
Weight = 1.0;
}
public ButcherKnife( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xEC3, 0xEC2 )]
public class Cleaver : BaseKnife
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 2; } }
public override int UOMaxDamage{ get{ return 13; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 50; } }
[Constructable]
public Cleaver() : base( 0xEC3 )
{
Weight = 2.0;
}
public Cleaver( 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 == 1.0 )
Weight = 2.0;
}
}
}

View file

@ -0,0 +1,47 @@
using System;
using Server.Network;
using Server.Targeting;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF52, 0xF51 )]
public class Dagger : BaseKnife
{
public override int UOStrengthReq{ get{ return 1; } }
public override int UOMinDamage{ get{ return 3; } }
public override int UOMaxDamage{ get{ return 15; } }
public override int UOSpeed{ get{ return 55; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 40; } }
public override SkillName DefSkill{ get{ return SkillName.Fencing; } }
public override WeaponType DefType{ get{ return WeaponType.Piercing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } }
[Constructable]
public Dagger() : base( 0xF52 )
{
Weight = 1.0;
}
public Dagger( 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,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xEC4, 0xEC5 )]
public class SkinningKnife : BaseKnife
{
public override int UOStrengthReq{ get{ return 5; } }
public override int UOMinDamage{ get{ return 1; } }
public override int UOMaxDamage{ get{ return 10; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 40; } }
[Constructable]
public SkinningKnife() : base( 0xEC4 )
{
Weight = 1.0;
}
public SkinningKnife( 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,125 @@
using System;
using Server.Targeting;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute( 0xF52, 0xF51 )]
public class ThrowingDagger : Item
{
public override string DefaultName
{
get { return "a throwing dagger"; }
}
[Constructable]
public ThrowingDagger() : base( 0xF52 )
{
Weight = 1.0;
Layer = Layer.OneHanded;
}
public ThrowingDagger( 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();
}
public override void OnDoubleClick( Mobile from )
{
if ( from.Items.Contains( this ) )
{
InternalTarget t = new InternalTarget( this );
from.Target = t;
}
else
{
from.SendMessage( "You must be holding that weapon to use it." );
}
}
private class InternalTarget : Target
{
private ThrowingDagger m_Dagger;
public InternalTarget( ThrowingDagger dagger ) : base( 10, false, TargetFlags.Harmful )
{
m_Dagger = dagger;
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( m_Dagger.Deleted )
{
return;
}
else if ( !from.Items.Contains( m_Dagger ) )
{
from.SendMessage( "You must be holding that weapon to use it." );
}
else if ( targeted is Mobile )
{
Mobile m = (Mobile)targeted;
if ( m != from && from.HarmfulCheck( m ) )
{
Direction to = from.GetDirectionTo( m );
from.Direction = to;
from.Animate( from.Mounted ? 26 : 9, 7, 1, true, false, 0 );
if ( Utility.RandomDouble() >= (Math.Sqrt( m.Dex / 100.0 ) * 0.8) )
{
from.MovingEffect( m, 0x1BFE, 7, 1, false, false, 0x481, 0 );
Ultima.Damage( m, from, Utility.Random( 5, from.Str / 10 ) );
m_Dagger.MoveToWorld( m.Location, m.Map );
}
else
{
int x = 0, y = 0;
switch ( to & Direction.Mask )
{
case Direction.North: --y; break;
case Direction.South: ++y; break;
case Direction.West: --x; break;
case Direction.East: ++x; break;
case Direction.Up: --x; --y; break;
case Direction.Down: ++x; ++y; break;
case Direction.Left: --x; ++y; break;
case Direction.Right: ++x; --y; break;
}
x += Utility.Random( -1, 3 );
y += Utility.Random( -1, 3 );
x += m.X;
y += m.Y;
m_Dagger.MoveToWorld( new Point3D( x, y, m.Z ), m.Map );
from.MovingEffect( m_Dagger, 0x1BFE, 7, 1, false, false, 0x481, 0 );
from.SendMessage( "You miss." );
}
}
}
}
}
}
}

View file

@ -0,0 +1,60 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public abstract class BaseBashing : BaseMeleeWeapon
{
public override int DefHitSound{ get{ return 0x233; } }
public override int DefMissSound{ get{ return 0x239; } }
public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } }
public override WeaponType DefType{ get{ return WeaponType.Bashing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash1H; } }
public BaseBashing( int itemID ) : base( itemID )
{
}
public BaseBashing( 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();
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
defender.Stam -= Utility.Random( 3, 3 ); // 3-5 points of stamina loss
}
public override double GetBaseDamage( Mobile attacker )
{
double damage = base.GetBaseDamage( attacker );
if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() )
{
damage *= 1.5;
attacker.SendMessage( "You deliver a crushing blow!" ); // Is this not localized?
attacker.PlaySound( 0x11C );
}
return damage;
}
}
}

View file

@ -0,0 +1,43 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13b4, 0x13b3 )]
public class Club : BaseBashing
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 24; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 40; } }
[Constructable]
public Club() : base( 0x13B4 )
{
Weight = 9.0;
Resource = CraftResource.Wooden;
}
public Club( 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,43 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x143D, 0x143C )]
public class HammerPick : BaseBashing
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public HammerPick() : base( 0x143D )
{
Weight = 9.0;
Layer = Layer.OneHanded;
}
public HammerPick( 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,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF5C, 0xF5D )]
public class Mace : BaseBashing
{
public override int UOStrengthReq{ get{ return 20; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 32; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public Mace() : base( 0xF5C )
{
Weight = 14.0;
}
public Mace( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x143B, 0x143A )]
public class Maul : BaseBashing
{
public override int UOStrengthReq{ get{ return 20; } }
public override int UOMinDamage{ get{ return 10; } }
public override int UOMaxDamage{ get{ return 30; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public Maul() : base( 0x143B )
{
Weight = 10.0;
}
public Maul( 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 == 14.0 )
Weight = 10.0;
}
}
}

View file

@ -0,0 +1,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1439, 0x1438 )]
public class WarHammer : BaseBashing
{
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 36; } }
public override int UOSpeed{ get{ return 31; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash2H; } }
[Constructable]
public WarHammer() : base( 0x1439 )
{
Weight = 10.0;
Layer = Layer.TwoHanded;
}
public WarHammer( 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,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1407, 0x1406 )]
public class WarMace : BaseBashing
{
public override int UOStrengthReq{ get{ return 30; } }
public override int UOMinDamage{ get{ return 10; } }
public override int UOMaxDamage{ get{ return 30; } }
public override int UOSpeed{ get{ return 32; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public WarMace() : base( 0x1407 )
{
Weight = 17.0;
}
public WarMace( 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,46 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x26BB, 0x26C5 )]
public class Whip : BaseBashing
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 24; } }
public override int UOSpeed{ get{ return 40; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 40; } }
public override int DefHitSound{ get{ return 0x5D0; } }
public override int DefMissSound{ get{ return 0x5D1; } }
[Constructable]
public Whip() : base( 0x26BB )
{
Weight = 6.0;
Name = "whip";
Resource = CraftResource.Leathered;
Hue = 0x4A8;
}
public Whip( 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,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF4D, 0xF4E )]
public class Bardiche : BasePoleArm
{
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 43; } }
public override int UOSpeed{ get{ return 26; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 100; } }
[Constructable]
public Bardiche() : base( 0xF4D )
{
Weight = 7.0;
}
public Bardiche( 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,117 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.Items;
using Server.Engines.Harvest;
using Server.ContextMenus;
namespace Server.Items
{
public abstract class BasePoleArm : BaseMeleeWeapon, IUsesRemaining
{
public override int DefHitSound{ get{ return 0x237; } }
public override int DefMissSound{ get{ return 0x238; } }
public override SkillName DefSkill{ get{ return SkillName.Swords; } }
public override WeaponType DefType{ get{ return WeaponType.Polearm; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash2H; } }
public virtual HarvestSystem HarvestSystem{ get{ return Lumberjacking.System; } }
private int m_UsesRemaining;
private bool m_ShowUsesRemaining;
[CommandProperty( AccessLevel.GameMaster )]
public int UsesRemaining
{
get { return m_UsesRemaining; }
set { m_UsesRemaining = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool ShowUsesRemaining
{
get { return m_ShowUsesRemaining; }
set { m_ShowUsesRemaining = value; InvalidateProperties(); }
}
public BasePoleArm( int itemID ) : base( itemID )
{
m_UsesRemaining = 150;
}
public BasePoleArm( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( HarvestSystem == null )
return;
if ( IsChildOf( from.Backpack ) || Parent == from )
HarvestSystem.BeginHarvesting( from, this );
else
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 2 ); // version
writer.Write( (bool) m_ShowUsesRemaining );
writer.Write( (int) m_UsesRemaining );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 2:
{
m_ShowUsesRemaining = reader.ReadBool();
goto case 1;
}
case 1:
{
m_UsesRemaining = reader.ReadInt();
goto case 0;
}
case 0:
{
if ( m_UsesRemaining < 1 )
m_UsesRemaining = 150;
break;
}
}
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() )
{
StatMod mod = defender.GetStatMod( "Concussion" );
if ( mod == null )
{
defender.SendMessage( "You receive a concussion blow!" );
defender.AddStatMod( new StatMod( StatType.Int, "Concussion", -(defender.RawInt / 2), TimeSpan.FromSeconds( 30.0 ) ) );
attacker.SendMessage( "You deliver a concussion blow!" );
attacker.PlaySound( 0x11C );
}
}
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x143E, 0x143F )]
public class Halberd : BasePoleArm
{
public override int UOStrengthReq{ get{ return 45; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 49; } }
public override int UOSpeed{ get{ return 25; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 80; } }
[Constructable]
public Halberd() : base( 0x143E )
{
Weight = 16.0;
}
public Halberd( 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,48 @@
using System;
using Server.Network;
using Server.Items;
using Server.Engines.Harvest;
namespace Server.Items
{
[FlipableAttribute( 0x26BA, 0x26C4 )]
public class Scythe : BasePoleArm
{
public override int UOStrengthReq{ get{ return 45; } }
public override int UOMinDamage{ get{ return 15; } }
public override int UOMaxDamage{ get{ return 18; } }
public override int UOSpeed{ get{ return 32; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 100; } }
public override HarvestSystem HarvestSystem{ get{ return null; } }
[Constructable]
public Scythe() : base( 0x26BA )
{
Weight = 5.0;
}
public Scythe( 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 == 15.0 )
Weight = 5.0;
}
}
}

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();
}
}
}

View file

@ -0,0 +1,81 @@
using System;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public class SlayerEntry
{
private SlayerGroup m_Group;
private SlayerName m_Name;
private Type[] m_Types;
public SlayerGroup Group{ get{ return m_Group; } set{ m_Group = value; } }
public SlayerName Name{ get{ return m_Name; } }
public Type[] Types{ get{ return m_Types; } }
private static int[] m_OldTitles = new int[]
{
1017384, // Undead Doom
1017379, // Giant's Fall
1017385, // Orc Slaying
1017386, // Troll Slaughter
1017387, // Ogre Thrashing
1017388, // Executioner
1017389, // Dragon Slaying
1017390, // Insectoid Extermination
1017391, // Serpent Bane
1017392, // Lizardman Slaughter
1017393, // Reptilian Death
1017394, // Daemon Dismissal
1017395, // Gargoyle's Foe
1017396, // Devilish Damnation
1017397, // Exorcism
1017398, // Serpentoid Massacre
1017399, // Spider's Death
1017400, // Scorpion's Bane
1017401, // Bug Butcher
1017402, // Flame Dousing
1017403, // Water Evaporation
1017404, // Air Abolish
1017405, // Elemental Health
1017406, // Stone Shatter
1017407, // Blood Drinking
1017408, // Summer Breeze
1017409, // Elemental Ban
1070855, // Nature's Fury
1017378, // Sea Slaughter
1017377, // Goblinoid Hunter
1017376 // Weed Wrecker
};
public int Title
{
get
{
int[] titles = ( m_OldTitles );
return titles[(int)m_Name - 1];
}
}
public SlayerEntry( SlayerName name, params Type[] types )
{
m_Name = name;
m_Types = types;
}
public bool Slays( Mobile m )
{
Type t = m.GetType();
for ( int i = 0; i < m_Types.Length; ++i )
{
if ( m_Types[i] == t )
return true;
}
return false;
}
}
}

View file

@ -0,0 +1,667 @@
using System;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public class SlayerGroup
{
private static SlayerEntry[] m_TotalEntries;
private static SlayerGroup[] m_Groups;
public static SlayerEntry[] TotalEntries
{
get{ return m_TotalEntries; }
}
public static SlayerGroup[] Groups
{
get{ return m_Groups; }
}
public static SlayerEntry GetEntryByName( SlayerName name )
{
int v = (int)name;
if ( v >= 0 && v < m_TotalEntries.Length )
return m_TotalEntries[v];
return null;
}
public static SlayerName GetLootSlayerType()
{
SlayerName slayer = SlayerName.UndeadDoom;
if ( Utility.RandomMinMax(1,10) == 1 )
{
switch ( Utility.Random( 7 ))
{
case 0: slayer = SlayerName.UndeadDoom; break;
case 1: slayer = SlayerName.Executioner; break;
case 2: slayer = SlayerName.DragonSlaying; break;
case 3: slayer = SlayerName.ElementalBan; break;
case 4: slayer = SlayerName.Exorcism; break;
case 5: slayer = SlayerName.BugButcher; break;
case 6: slayer = SlayerName.ReptilianDeath; break;
}
}
else
{
switch ( Utility.Random( 24 ))
{
case 0: slayer = SlayerName.GiantsFall; break;
case 1: slayer = SlayerName.OrcSlaying; break;
case 2: slayer = SlayerName.TrollSlaughter; break;
case 3: slayer = SlayerName.OgreTrashing; break;
case 4: slayer = SlayerName.InsectoidExtermination; break;
case 5: slayer = SlayerName.SerpentBane; break;
case 6: slayer = SlayerName.LizardmanSlaughter; break;
case 7: slayer = SlayerName.DaemonDismissal; break;
case 8: slayer = SlayerName.GargoylesFoe; break;
case 9: slayer = SlayerName.DevilishDamnation; break;
case 10: slayer = SlayerName.SerpentoidMassacre; break;
case 11: slayer = SlayerName.SpidersDeath; break;
case 12: slayer = SlayerName.ScorpionsBane; break;
case 13: slayer = SlayerName.FlameDousing; break;
case 14: slayer = SlayerName.WaterEvaporation; break;
case 15: slayer = SlayerName.AirAbolish; break;
case 16: slayer = SlayerName.ElementalHealth; break;
case 17: slayer = SlayerName.StoneShatter; break;
case 18: slayer = SlayerName.BloodDrinking; break;
case 19: slayer = SlayerName.SummerBreeze; break;
case 20: slayer = SlayerName.NaturesFury; break;
case 21: slayer = SlayerName.SeaSlaughter; break;
case 22: slayer = SlayerName.GoblinoidHunter; break;
case 23: slayer = SlayerName.WeedWrecker; break;
}
}
return slayer;
}
static SlayerGroup()
{
SlayerGroup humanoid = new SlayerGroup();
SlayerGroup undead = new SlayerGroup();
SlayerGroup elemental = new SlayerGroup();
SlayerGroup abyss = new SlayerGroup();
SlayerGroup arachnid = new SlayerGroup();
SlayerGroup reptilian = new SlayerGroup();
SlayerGroup nature = new SlayerGroup();
SlayerGroup sea = new SlayerGroup();
SlayerGroup weed = new SlayerGroup();
// --------------------------------------------------------------------------------------------------------------------------------------
humanoid.Super = new SlayerEntry( SlayerName.Executioner,
typeof( Goblin ),
typeof( GoblinArcher ),
typeof( GoblinWarrior ),
typeof( Minotaur ),
typeof( MinotaurChief ),
typeof( MinotaurLord ),
typeof( Yeti ),
typeof( Bugbear ),
typeof( ArcticOgreLord ),
typeof( Pharaoh ),
typeof( Brigand ),
typeof( BlackKnight ),
typeof( Caveman ),
typeof( Cyclops ),
typeof( CyclopsChief ),
typeof( CyclopsLord ),
typeof( Dwarf ),
typeof( DwarfWarrior ),
typeof( DwarfKnight ),
typeof( Ettin ),
typeof( EvilMage ),
typeof( EvilMageLord ),
typeof( FrostTroll ),
typeof( Hobgoblin ),
typeof( HobgoblinChief ),
typeof( HobgoblinArcher ),
typeof( HobgoblinShaman ),
typeof( Ogre ),
typeof( OgreLord ),
typeof( OgreMagi ),
typeof( Orc ),
typeof( OrcCaptain ),
typeof( OrcishLord ),
typeof( OrcishMage ),
typeof( ForestGiant ),
typeof( HillGiant ),
typeof( MountainGiant ),
typeof( FrostGiant ),
typeof( SnowEttin ),
typeof( ShadowTitan ),
typeof( SandGiant ),
typeof( JungleGiant ),
typeof( Pirate ),
typeof( Ratman ),
typeof( RatmanArcher ),
typeof( RatmanMage ),
typeof( SavageShaman ),
typeof( Savage ),
typeof( SavageLeader ),
typeof( StormGiant ),
typeof( Titan ),
typeof( SeaGiant ),
typeof( Troll ) );
humanoid.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.GiantsFall,
typeof( ArcticOgreLord ),
typeof( Cyclops ),
typeof( CyclopsChief ),
typeof( CyclopsLord ),
typeof( Ettin ),
typeof( FrostTroll ),
typeof( ForestGiant ),
typeof( HillGiant ),
typeof( MountainGiant ),
typeof( FrostGiant ),
typeof( SnowEttin ),
typeof( ShadowTitan ),
typeof( SandGiant ),
typeof( JungleGiant ),
typeof( Ogre ),
typeof( OgreLord ),
typeof( StormGiant ),
typeof( Titan ),
typeof( SeaGiant ),
typeof( Troll ) ),
new SlayerEntry( SlayerName.OgreTrashing,
typeof( Ogre ),
typeof( OgreLord ),
typeof( OgreMagi ),
typeof( ArcticOgreLord ) ),
new SlayerEntry( SlayerName.OrcSlaying,
typeof( Orc ),
typeof( OrcCaptain ),
typeof( OrcishLord ),
typeof( OrcishMage ) ),
new SlayerEntry( SlayerName.GoblinoidHunter,
typeof( GoblinWarrior ),
typeof( Goblin ),
typeof( GoblinArcher ),
typeof( Hobgoblin ),
typeof( HobgoblinChief ),
typeof( HobgoblinArcher ),
typeof( HobgoblinShaman ) ),
new SlayerEntry( SlayerName.TrollSlaughter,
typeof( Troll ),
typeof( FrostTroll ) )
};
// --------------------------------------------------------------------------------------------------------------------------------------
undead.Super = new SlayerEntry( SlayerName.UndeadDoom,
typeof( ZombieGargoyle ),
typeof( GargoyleUndead ),
typeof( CorpseGolem ),
typeof( FleshGolem ),
typeof( FleshGoliath ),
typeof( AncientLich ),
typeof( BoneKnight ),
typeof( BoneMagi ),
typeof( Ghoul ),
typeof( Wight ),
typeof( Lich ),
typeof( LichLord ),
typeof( Nazghoul ),
typeof( Demilich ),
typeof( DemonicSpirit ),
typeof( Mummy ),
typeof( MummyLord ),
typeof( RottingCorpse ),
typeof( Shade ),
typeof( SkeletalDragon ),
typeof( VampiricDragon ),
typeof( ZombieDragon ),
typeof( BoneDrake ),
typeof( VampiricDrake ),
typeof( RottingDrake ),
typeof( SkeletalKnight ),
typeof( SkeletalMage ),
typeof( Skeleton ),
typeof( BoneClaw ),
typeof( SkeletonArcher ),
typeof( Spectre ),
typeof( Vampire ),
typeof( VampireLord ),
typeof( AncientVampire ),
typeof( Wraith ),
typeof( Zombie ) );
undead.Entries = new SlayerEntry[0];
// --------------------------------------------------------------------------------------------------------------------------------------
nature.Super = new SlayerEntry( SlayerName.NaturesFury,
typeof( Centaur ),
typeof( Pixie ),
typeof( Fairy ),
typeof( Satyr ),
typeof( Ent ),
typeof( Unicorn ),
typeof( DreadHorn ),
typeof( Wisp ) );
nature.Entries = new SlayerEntry[0];
// --------------------------------------------------------------------------------------------------------------------------------------
sea.Super = new SlayerEntry( SlayerName.SeaSlaughter,
typeof( WaterElemental ),
typeof( DeepSeaElemental ),
typeof( Typhoon ),
typeof( DeepSeaSerpent ),
typeof( SeaSerpent ),
typeof( GiantEel ),
typeof( SeaDevil ),
typeof( Kraken ),
typeof( Dagon ),
typeof( Krakoa ),
typeof( Turtle ),
typeof( Ktulu ),
typeof( Lurker ),
typeof( Dolphin ),
typeof( GreatWhite ),
typeof( SeaDrake ),
typeof( SeaDragon ),
typeof( GiantCrab ),
typeof( Lobstran ),
typeof( Lochasaur ),
typeof( Megalodon ),
typeof( Sahuagin ),
typeof( SahuaginMage ),
typeof( Shark ),
typeof( Seahorse ),
typeof( SeaGiant ),
typeof( WaterElementalElder ),
typeof( Leviathan ) );
sea.Entries = new SlayerEntry[0];
// --------------------------------------------------------------------------------------------------------------------------------------
weed.Super = new SlayerEntry( SlayerName.WeedWrecker,
typeof( WhippingVine ),
typeof( SwampTentacle ),
typeof( Reaper ),
typeof( SwampThing ),
typeof( Fungal ),
typeof( FungalMage ),
typeof( WoodElemental ),
typeof( Ent ),
typeof( Shambler ),
typeof( ShamblingMound ),
typeof( BloodLotus ),
typeof( Corpser ) );
weed.Entries = new SlayerEntry[0];
// --------------------------------------------------------------------------------------------------------------------------------------
elemental.Super = new SlayerEntry( SlayerName.ElementalBan,
typeof( BloodElementalElder ),
typeof( PoisonElementalElder ),
typeof( WaterElementalElder ),
typeof( MeteorElemental ),
typeof( DeepSeaElemental ),
typeof( AcidElemental ),
typeof( AirElemental ),
typeof( BloodElemental ),
typeof( EarthElemental ),
typeof( StoneGolem ),
typeof( StoneStatue ),
typeof( Goliath ),
typeof( MudElemental ),
typeof( MagmaElemental ),
typeof( WoodElemental ),
typeof( Efreet ),
typeof( FireElemental ),
typeof( IceElemental ),
typeof( LightningElemental ),
typeof( PoisonElemental ),
typeof( GasCloud ),
typeof( StormCloud ),
typeof( SandVortex ),
typeof( SnowElemental ),
typeof( Typhoon ),
typeof( WaterElemental ) );
elemental.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.BloodDrinking,
typeof( BloodElementalElder ),
typeof( BloodElemental ) ),
new SlayerEntry( SlayerName.StoneShatter,
typeof( StoneGolem ),
typeof( StoneStatue ),
typeof( MeteorElemental ),
typeof( Goliath ),
typeof( MudElemental ),
typeof( MagmaElemental ),
typeof( EarthElemental ) ),
new SlayerEntry( SlayerName.ElementalHealth,
typeof( PoisonElementalElder ),
typeof( GasCloud ),
typeof( PoisonElemental ) ),
new SlayerEntry( SlayerName.FlameDousing,
typeof( FireElemental ) ),
new SlayerEntry( SlayerName.SummerBreeze,
typeof( SnowElemental ),
typeof( IceElemental ) ),
new SlayerEntry( SlayerName.AirAbolish,
typeof( LightningElemental ),
typeof( AirElemental ) ),
new SlayerEntry( SlayerName.WaterEvaporation,
typeof( Typhoon ),
typeof( StormCloud ),
typeof( WaterElementalElder ),
typeof( DeepSeaElemental ),
typeof( WaterElemental ) )
};
// --------------------------------------------------------------------------------------------------------------------------------------
abyss.Super = new SlayerEntry( SlayerName.Exorcism,
typeof( Balron ),
typeof( SeaDevil ),
typeof( Daemon ),
typeof( ShadowDemon ),
typeof( Minion ),
typeof( MinionWizard ),
typeof( MinionWarrior ),
typeof( Ktulu ),
typeof( Deviless ),
typeof( HornedDevil ),
typeof( Gargoyle ),
typeof( GargoyleMage ),
typeof( GargoyleKnight ),
typeof( GargoyleIce ),
typeof( GargoyleStone ),
typeof( GargoyleWizard ),
typeof( GargoyleCrimson ),
typeof( FireGargoyle ),
typeof( DemonicSpirit ),
typeof( DemonClaw ),
typeof( Demoness ),
typeof( IceFiend ),
typeof( IceDevil ),
typeof( Imp ),
typeof( FireImp ),
typeof( IceImp ),
typeof( Succubus ),
typeof( SuccubusQueen ),
typeof( StoneGargoyle ) );
abyss.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.DaemonDismissal,
typeof( Daemon ),
typeof( ShadowDemon ),
typeof( Ktulu ),
typeof( Deviless ),
typeof( IceFiend ),
typeof( DemonClaw ),
typeof( Demoness ),
typeof( Imp ),
typeof( FireImp ),
typeof( DemonicSpirit ),
typeof( IceImp ),
typeof( Succubus ),
typeof( SuccubusQueen ) ),
new SlayerEntry( SlayerName.GargoylesFoe,
typeof( FireGargoyle ),
typeof( Gargoyle ),
typeof( GargoyleMage ),
typeof( GargoyleKnight ),
typeof( GargoyleIce ),
typeof( GargoyleStone ),
typeof( GargoyleWizard ),
typeof( GargoyleCrimson ),
typeof( StoneGargoyle ) ),
new SlayerEntry( SlayerName.DevilishDamnation,
typeof( IceDevil ),
typeof( SeaDevil ),
typeof( Minion ),
typeof( MinionWizard ),
typeof( MinionWarrior ),
typeof( HornedDevil ),
typeof( Balron ) )
};
// --------------------------------------------------------------------------------------------------------------------------------------
arachnid.Super = new SlayerEntry( SlayerName.BugButcher,
typeof( DreadSpider ),
typeof( FrostSpider ),
typeof( GiantBlackWidow ),
typeof( BloodSpider ),
typeof( Kith ),
typeof( WidowQueen ),
typeof( GiantSpider ),
typeof( FlameCrawler ),
typeof( Scorpion ),
typeof( Mantis ),
typeof( ArcaneScarab ),
typeof( Shaclaw ),
typeof( FireBeetle ),
typeof( GoraxHorned ),
typeof( GoraxSlicer ),
typeof( Swarm ),
typeof( AntLion ),
typeof( SandScorpion ),
typeof( Scarab ),
typeof( GiantScarab ),
typeof( DeadlyScorpion ),
typeof( Beetle ),
typeof( IronBeetle ),
typeof( CarcassWorm ),
typeof( AntaurWorker ),
typeof( AntaurSoldier ),
typeof( AntaurLord ),
typeof( AntaurQueen ),
typeof( TerathanAvenger ),
typeof( TerathanDrone ),
typeof( TerathanMatriarch ),
typeof( TerathanWarrior ) );
arachnid.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.ScorpionsBane,
typeof( FlameCrawler ),
typeof( SandScorpion ),
typeof( DeadlyScorpion ),
typeof( Scorpion ) ),
new SlayerEntry( SlayerName.SpidersDeath,
typeof( Kith ),
typeof( DreadSpider ),
typeof( FrostSpider ),
typeof( GiantBlackWidow ),
typeof( BloodSpider ),
typeof( WidowQueen ),
typeof( GiantSpider ) ),
new SlayerEntry( SlayerName.InsectoidExtermination,
typeof( AntaurWorker ),
typeof( AntaurSoldier ),
typeof( AntaurLord ),
typeof( AntaurQueen ),
typeof( TerathanAvenger ),
typeof( TerathanDrone ),
typeof( TerathanMatriarch ),
typeof( TerathanWarrior ) )
};
// --------------------------------------------------------------------------------------------------------------------------------------
reptilian.Super = new SlayerEntry( SlayerName.ReptilianDeath,
typeof( SeaDragon ),
typeof( AncientWyrm ),
typeof( DeepSeaSerpent ),
typeof( GiantEel ),
typeof( Dragon ),
typeof( Drakkhen ),
typeof( DragonTurtle ),
typeof( Turtle ),
typeof( Drake ),
typeof( LavaDrake ),
typeof( SeaDrake ),
typeof( SwampDragon ),
typeof( Serperus ),
typeof( IceSerpent ),
typeof( GiantSerpent ),
typeof( Torax ),
typeof( GiantLizard ),
typeof( GiantToad ),
typeof( IceToad ),
typeof( FireToad ),
typeof( BullFrog ),
typeof( Viper ),
typeof( LavaSerpent ),
typeof( Cobra ),
typeof( Lizardman ),
typeof( Drasolisk ),
typeof( Silisk ),
typeof( Sakkhra ),
typeof( SakkhraShaman ),
typeof( Naga ),
typeof( NagaWarrior ),
typeof( NagaQueen ),
typeof( FireNaga ),
typeof( OphidianArchmage ),
typeof( Teradactyl ),
typeof( Stegosaurus ),
typeof( Meglasaur ),
typeof( Gorceratops ),
typeof( Lochasaur ),
typeof( Tyranasaur ),
typeof( Kobra ),
typeof( OphidianKnight ),
typeof( OphidianMage ),
typeof( OphidianMatriarch ),
typeof( OphidianWarrior ),
typeof( Hydra ),
typeof( SeaHydra ),
typeof( Medusa ),
typeof( IceSalamander ),
typeof( FireSalamander ),
typeof( Raptor ),
typeof( SeaSerpent ),
typeof( ShadowWyrm ),
typeof( SilverSerpent ),
typeof( SkeletalDragon ),
typeof( VampiricDragon ),
typeof( ZombieDragon ),
typeof( BoneDrake ),
typeof( VampiricDrake ),
typeof( RottingDrake ),
typeof( Snake ),
typeof( WhiteWyrm ),
typeof( AncientWyvern ),
typeof( Wyvern ) );
reptilian.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.DragonSlaying,
typeof( AncientWyrm ),
typeof( Dragon ),
typeof( Drakkhen ),
typeof( Drake ),
typeof( LavaDrake ),
typeof( SeaDrake ),
typeof( SwampDragon ),
typeof( ShadowWyrm ),
typeof( DragonTurtle ),
typeof( SkeletalDragon ),
typeof( VampiricDragon ),
typeof( BoneDrake ),
typeof( ZombieDragon ),
typeof( RottingDrake ),
typeof( VampiricDrake ),
typeof( SeaDragon ),
typeof( WhiteWyrm ),
typeof( AncientWyvern ),
typeof( Wyvern ) ),
new SlayerEntry( SlayerName.LizardmanSlaughter,
typeof( Drasolisk ),
typeof( Silisk ),
typeof( Sakkhra ),
typeof( SakkhraShaman ),
typeof( Lizardman ) ),
new SlayerEntry( SlayerName.SerpentoidMassacre,
typeof( Naga ),
typeof( NagaWarrior ),
typeof( NagaQueen ),
typeof( FireNaga ),
typeof( IceSalamander ),
typeof( FireSalamander ),
typeof( Medusa ),
typeof( Hydra ),
typeof( SeaHydra ),
typeof( Kobra ),
typeof( OphidianArchmage ),
typeof( OphidianKnight ),
typeof( OphidianMage ),
typeof( OphidianMatriarch ),
typeof( OphidianWarrior ) ),
new SlayerEntry( SlayerName.SerpentBane,
typeof( GiantEel ),
typeof( DeepSeaSerpent ),
typeof( GiantSerpent ),
typeof( IceSerpent ),
typeof( Viper ),
typeof( LavaSerpent ),
typeof( Cobra ),
typeof( SeaSerpent ),
typeof( SilverSerpent ),
typeof( Snake ) )
};
// --------------------------------------------------------------------------------------------------------------------------------------
m_Groups = new SlayerGroup[]
{
humanoid,
undead,
elemental,
abyss,
arachnid,
reptilian,
nature,
sea,
weed
};
m_TotalEntries = CompileEntries( m_Groups );
}
private static SlayerEntry[] CompileEntries( SlayerGroup[] groups )
{
SlayerEntry[] entries = new SlayerEntry[32];
for ( int i = 0; i < groups.Length; ++i )
{
SlayerGroup g = groups[i];
g.Super.Group = g;
entries[(int)g.Super.Name] = g.Super;
for ( int j = 0; j < g.Entries.Length; ++j )
{
g.Entries[j].Group = g;
entries[(int)g.Entries[j].Name] = g.Entries[j];
}
}
return entries;
}
private SlayerEntry m_Super;
private SlayerEntry[] m_Entries;
public SlayerEntry Super{ get{ return m_Super; } set{ m_Super = value; } }
public SlayerEntry[] Entries{ get{ return m_Entries; } set{ m_Entries = value; } }
public SlayerGroup()
{
}
}
}

View file

@ -0,0 +1,40 @@
using System;
namespace Server.Items
{
public enum SlayerName
{
None,
UndeadDoom,
GiantsFall,
OrcSlaying,
TrollSlaughter,
OgreTrashing,
Executioner,
DragonSlaying,
InsectoidExtermination,
SerpentBane,
LizardmanSlaughter,
ReptilianDeath,
DaemonDismissal,
GargoylesFoe,
DevilishDamnation,
Exorcism,
SerpentoidMassacre,
SpidersDeath,
ScorpionsBane,
BugButcher,
FlameDousing,
WaterEvaporation,
AirAbolish,
ElementalHealth,
StoneShatter,
BloodDrinking,
SummerBreeze,
ElementalBan,
NaturesFury,
SeaSlaughter,
GoblinoidHunter,
WeedWrecker
}
}

View file

@ -0,0 +1,60 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public abstract class BaseSpear : BaseMeleeWeapon
{
public override int DefHitSound{ get{ return 0x23C; } }
public override int DefMissSound{ get{ return 0x238; } }
public override SkillName DefSkill{ get{ return SkillName.Fencing; } }
public override WeaponType DefType{ get{ return WeaponType.Piercing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce2H; } }
public BaseSpear( int itemID ) : base( itemID )
{
}
public BaseSpear( 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();
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
if ( Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() )
{
defender.SendMessage( "You receive a paralyzing blow!" ); // Is this not localized?
defender.Freeze( TimeSpan.FromSeconds( 2.0 ) );
attacker.SendMessage( "You deliver a paralyzing blow!" ); // Is this not localized?
attacker.PlaySound( 0x11C );
}
if ( Poison != null && PoisonCharges > 0 )
{
--PoisonCharges;
if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison
defender.ApplyPoison( attacker, Poison );
}
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x26BE, 0x26C8 )]
public class Pike : BaseSpear
{
public override int UOStrengthReq{ get{ return 50; } }
public override int UOMinDamage{ get{ return 14; } }
public override int UOMaxDamage{ get{ return 16; } }
public override int UOSpeed{ get{ return 37; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public Pike() : base( 0x26BE )
{
Weight = 8.0;
}
public Pike( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xE87, 0xE88 )]
public class Pitchfork : BaseSpear
{
public override int UOStrengthReq{ get{ return 15; } }
public override int UOMinDamage{ get{ return 4; } }
public override int UOMaxDamage{ get{ return 16; } }
public override int UOSpeed{ get{ return 45; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 60; } }
[Constructable]
public Pitchfork() : base( 0xE87 )
{
Weight = 11.0;
}
public Pitchfork( 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 == 10.0 )
Weight = 11.0;
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF62, 0xF63 )]
public class Spear : BaseSpear
{
public override int UOStrengthReq{ get{ return 30; } }
public override int UOMinDamage{ get{ return 2; } }
public override int UOMaxDamage{ get{ return 36; } }
public override int UOSpeed{ get{ return 46; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 80; } }
[Constructable]
public Spear() : base( 0xF62 )
{
Weight = 7.0;
}
public Spear( 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,47 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1405, 0x1404 )]
public class WarFork : BaseSpear
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 4; } }
public override int UOMaxDamage{ get{ return 32; } }
public override int UOSpeed{ get{ return 45; } }
public override int DefHitSound{ get{ return 0x236; } }
public override int DefMissSound{ get{ return 0x238; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } }
[Constructable]
public WarFork() : base( 0x1405 )
{
Weight = 9.0;
}
public WarFork( 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,45 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public abstract class BaseStaff : BaseMeleeWeapon
{
public override int DefHitSound{ get{ return 0x233; } }
public override int DefMissSound{ get{ return 0x239; } }
public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } }
public override WeaponType DefType{ get{ return WeaponType.Staff; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash2H; } }
public BaseStaff( int itemID ) : base( itemID )
{
}
public BaseStaff( 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();
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
defender.Stam -= Utility.Random( 3, 3 ); // 3-5 points of stamina loss
}
}
}

View file

@ -0,0 +1,42 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xDF1, 0xDF0 )]
public class BlackStaff : BaseStaff
{
public override int UOStrengthReq{ get{ return 35; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 35; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public BlackStaff() : base( 0xDF0 )
{
Weight = 6.0;
}
public BlackStaff( 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,35 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
public class GlacialStaff : BlackStaff
{
public override int LabelNumber{ get{ return 1017413; } } // Glacial Staff
[Constructable]
public GlacialStaff()
{
Hue = 0x480;
}
public GlacialStaff( 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,43 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13F8, 0x13F9 )]
public class GnarledStaff : BaseStaff
{
public override int UOStrengthReq{ get{ return 20; } }
public override int UOMinDamage{ get{ return 10; } }
public override int UOMaxDamage{ get{ return 30; } }
public override int UOSpeed{ get{ return 33; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 50; } }
[Constructable]
public GnarledStaff() : base( 0x13F8 )
{
Weight = 3.0;
Resource = CraftResource.Wooden;
}
public GnarledStaff( 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,43 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xE89, 0xE8a )]
public class QuarterStaff : BaseStaff
{
public override int UOStrengthReq{ get{ return 30; } }
public override int UOMinDamage{ get{ return 8; } }
public override int UOMaxDamage{ get{ return 28; } }
public override int UOSpeed{ get{ return 48; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 60; } }
[Constructable]
public QuarterStaff() : base( 0xE89 )
{
Weight = 4.0;
Resource = CraftResource.Wooden;
}
public QuarterStaff( 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,45 @@
using System;
using Server.Network;
using Server.Items;
using Server.Targeting;
using Server.Mobiles;
namespace Server.Items
{
[FlipableAttribute( 0xE81, 0xE82 )]
public class ShepherdsCrook : BaseStaff
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 3; } }
public override int UOMaxDamage{ get{ return 12; } }
public override int UOSpeed{ get{ return 30; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 50; } }
[Constructable]
public ShepherdsCrook() : base( 0xE81 )
{
Weight = 4.0;
Resource = CraftResource.Wooden;
}
public ShepherdsCrook( 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,56 @@
using System;
using Server;
using Server.Items;
using Server.Targets;
namespace Server.Items
{
public abstract class BaseSword : BaseMeleeWeapon
{
public override SkillName DefSkill{ get{ return SkillName.Swords; } }
public override WeaponType DefType{ get{ return WeaponType.Slashing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } }
public BaseSword( int itemID ) : base( itemID )
{
}
public BaseSword( 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();
}
public override void OnDoubleClick( Mobile from )
{
from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on?
from.Target = new BladedItemTarget( this );
}
public override void OnHit( Mobile attacker, Mobile defender, double damageBonus )
{
base.OnHit( attacker, defender, damageBonus );
if ( Poison != null && PoisonCharges > 0 )
{
--PoisonCharges;
if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison
defender.ApplyPoison( attacker, Poison );
}
}
}
}

View file

@ -0,0 +1,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF5E, 0xF5F )]
public class Broadsword : BaseSword
{
public override int UOStrengthReq{ get{ return 25; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 29; } }
public override int UOSpeed{ get{ return 45; } }
public override int DefHitSound{ get{ return 0x237; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 100; } }
[Constructable]
public Broadsword() : base( 0xF5E )
{
Weight = 6.0;
}
public Broadsword( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1441, 0x1440 )]
public class Cutlass : BaseSword
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 28; } }
public override int UOSpeed{ get{ return 45; } }
public override int DefHitSound{ get{ return 0x23B; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
[Constructable]
public Cutlass() : base( 0x1441 )
{
Weight = 8.0;
}
public Cutlass( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13FF, 0x13FE )]
public class Katana : BaseSword
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 26; } }
public override int UOSpeed{ get{ return 58; } }
public override int DefHitSound{ get{ return 0x23B; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 90; } }
[Constructable]
public Katana() : base( 0x13FF )
{
Weight = 6.0;
}
public Katana( 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,52 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1401, 0x1400 )]
public class Kryss : BaseSword
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 3; } }
public override int UOMaxDamage{ get{ return 28; } }
public override int UOSpeed{ get{ return 53; } }
public override int DefHitSound{ get{ return 0x23C; } }
public override int DefMissSound{ get{ return 0x238; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 90; } }
public override SkillName DefSkill{ get{ return SkillName.Fencing; } }
public override WeaponType DefType{ get{ return WeaponType.Piercing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } }
[Constructable]
public Kryss() : base( 0x1401 )
{
Weight = 2.0;
}
public Kryss( 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 == 1.0 )
Weight = 2.0;
}
}
}

View file

@ -0,0 +1,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0xF61, 0xF60 )]
public class Longsword : BaseSword
{
public override int UOStrengthReq{ get{ return 25; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 35; } }
public override int DefHitSound{ get{ return 0x237; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public Longsword() : base( 0xF61 )
{
Weight = 7.0;
}
public Longsword( 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,47 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x1403, 0x1402 )]
public class Rapier : BaseSword
{
public override int UOStrengthReq{ get{ return 15; } }
public override int UOMinDamage{ get{ return 4; } }
public override int UOMaxDamage{ get{ return 32; } }
public override int UOSpeed{ get{ return 50; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 70; } }
public override SkillName DefSkill{ get{ return SkillName.Fencing; } }
public override WeaponType DefType{ get{ return WeaponType.Piercing; } }
public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } }
[Constructable]
public Rapier() : base( 0x1403 )
{
Weight = 4.0;
Name = "rapier";
}
public Rapier( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13B6, 0x13B5 )]
public class Scimitar : BaseSword
{
public override int UOStrengthReq{ get{ return 10; } }
public override int UOMinDamage{ get{ return 4; } }
public override int UOMaxDamage{ get{ return 30; } }
public override int UOSpeed{ get{ return 43; } }
public override int DefHitSound{ get{ return 0x23B; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 90; } }
[Constructable]
public Scimitar() : base( 0x13B6 )
{
Weight = 5.0;
}
public Scimitar( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13B8, 0x13B7 )]
public class ThinLongsword : BaseSword
{
public override int UOStrengthReq{ get{ return 25; } }
public override int UOMinDamage{ get{ return 5; } }
public override int UOMaxDamage{ get{ return 33; } }
public override int UOSpeed{ get{ return 35; } }
public override int DefHitSound{ get{ return 0x237; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 110; } }
[Constructable]
public ThinLongsword() : base( 0x13B8 )
{
Weight = 1.0;
}
public ThinLongsword( 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,45 @@
using System;
using Server.Network;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x13B9, 0x13Ba )]
public class VikingSword : BaseSword
{
public override int UOStrengthReq{ get{ return 40; } }
public override int UOMinDamage{ get{ return 6; } }
public override int UOMaxDamage{ get{ return 34; } }
public override int UOSpeed{ get{ return 30; } }
public override int DefHitSound{ get{ return 0x237; } }
public override int DefMissSound{ get{ return 0x23A; } }
public override int InitMinHits{ get{ return 31; } }
public override int InitMaxHits{ get{ return 100; } }
[Constructable]
public VikingSword() : base( 0x13B9 )
{
Weight = 6.0;
}
public VikingSword( 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,66 @@
using System;
namespace Server.Items
{
public enum WeaponQuality
{
Low,
Regular,
Exceptional
}
public enum WeaponType
{
Axe, // Axes, Hatches, etc. These can give concussion blows
Slashing, // Katana, Broadsword, Longsword, etc. Slashing weapons are poisonable
Staff, // Staves
Bashing, // War Hammers, Maces, Mauls, etc. Two-handed bashing delivers crushing blows
Piercing, // Spears, Warforks, Daggers, etc. Two-handed piercing delivers paralyzing blows
Polearm, // Halberd, Bardiche
Ranged, // Bow, Crossbows
Fists // Fists
}
public enum WeaponDamageLevel
{
Regular,
Ruin,
Might,
Force,
Power,
Vanq
}
public enum WeaponAccuracyLevel
{
Regular,
Accurate,
Surpassingly,
Eminently,
Exceedingly,
Supremely
}
public enum WeaponDurabilityLevel
{
Regular,
Durable,
Substantial,
Massive,
Fortified,
Indestructible
}
public enum WeaponAnimation
{
Slash1H = 9,
Pierce1H = 10,
Bash1H = 11,
Bash2H = 12,
Slash2H = 13,
Pierce2H = 14,
ShootBow = 18,
ShootXBow = 19,
Wrestle = 31
}
}