fix: Updates professions & new player gargish equipment (#819)

* Now reads Prof.txt to get the professions
* The templated professions are based on profession `TrueName`
* Adds missing starting equipment
* Implements gargish starting equipment
* Consolidates some of the code
* Moves TC stuff to the TC file.
* Fixes some starting equipment that was wrong.

Note:
* Implementing the original T2A professions is possible on the client side, but requires moving the old clilocs to the current clilocs file. In the current file the entries are blank.
* Using the original LBR professions (they match AOS but without necromancy/chivalry) is kind of confusing because the profession indexes are ripped out of the UOTD/UOR ones and have non-sequential indexes. This will probably cause confusion and people will get no templated items when they select the wrong profession.
This commit is contained in:
Kamron Batman 2021-10-16 10:48:58 -07:00 • committed by GitHub
parent 7361c9158b
commit bfbe2a6512
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
80 changed files with 2654 additions and 1409 deletions

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.GargishClothArms", "Server.Items.GargishClothArmsArmor")]
public partial class GargishClothArmsType1 : BaseArmor
{
[Constructible]
public GargishClothArmsType1() : base(0x404) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.FemaleGargishClothArms", "Server.Items.FemaleGargishClothArmsArmor")]
public partial class GargishClothArmsType2 : BaseArmor
{
[Constructible]
public GargishClothArmsType2() : base(0x403) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.GargishClothChest", "Server.Items.GargishClothChestArmor")]
public partial class GargishClothChestType1 : BaseArmor
{
[Constructible]
public GargishClothChestType1() : base(0x406) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 25;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.FemaleGargishClothChest", "Server.Items.FemaleGargishClothChestArmor")]
public partial class GargishClothChestType2 : BaseArmor
{
[Constructible]
public GargishClothChestType2() : base(0x405) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 25;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.GargishClothKilt", "Server.Items.GargishClothKiltArmor")]
public partial class GargishClothKiltType1 : BaseArmor
{
[Constructible]
public GargishClothKiltType1() : base(0x408) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.GargishClothKilt", "Server.Items.GargishClothKiltArmor")]
public partial class GargishClothKiltType2 : BaseArmor
{
[Constructible]
public GargishClothKiltType2() : base(0x407) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.GargishClothLegs", "Server.Items.GargishClothLegsArmor")]
public partial class GargishClothLegsType1 : BaseArmor
{
[Constructible]
public GargishClothLegsType1() : base(0x40A) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Serializable(0)]
[TypeAlias("Server.Items.FemaleGargishClothLegs", "Server.Items.FemaleGargishClothLegsArmor")]
public partial class GargishClothLegsType2 : BaseArmor
{
[Constructible]
public GargishClothLegsType2() : base(0x409) => Weight = 2.0;
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 7;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 6;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Cloth;
public override CraftResource DefaultResource => CraftResource.None;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.GargishStoneArms")]
public partial class GargishStoneArmsType1 : BaseArmor
{
[Constructible]
public GargishStoneArmsType1() : base(0x284) => Weight = 10.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.FemaleGargishStoneArms")]
public partial class GargishStoneArmsType2 : BaseArmor
{
[Constructible]
public GargishStoneArmsType2() : base(0x283) => Weight = 10.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.GargishStoneChest")]
public partial class GargishStoneChestType1 : BaseArmor
{
[Constructible]
public GargishStoneChestType1() : base(0x286) => Weight = 15.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,27 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.FemaleGargishStoneChest")]
public partial class GargishStoneChestType2 : BaseArmor
{
[Constructible]
public GargishStoneChestType2() : base(0x285) => Weight = 15.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.GargishStoneKilt")]
public partial class GargishStoneKiltType1 : BaseArmor
{
[Constructible]
public GargishStoneKiltType1() : base(0x288) => Weight = 10.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,27 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.FemaleGargishStoneKilt")]
public partial class GargishStoneKiltType2 : BaseArmor
{
[Constructible]
public GargishStoneKiltType2() : base(0x287) => Weight = 10.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.GargishStoneLegs")]
public partial class GargishStoneLegsType1 : BaseArmor
{
[Constructible]
public GargishStoneLegsType1() : base(0x28A) => Weight = 15.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -0,0 +1,27 @@
namespace Server.Items
{
[Serializable(0, false)]
[TypeAlias("Server.Items.FemaleGargishStoneLegs")]
public partial class GargishStoneLegsType2 : BaseArmor
{
[Constructible]
public GargishStoneLegsType2() : base(0x289) => Weight = 15.0;
public override int RequiredRaces => Race.AllowGargoylesOnly;
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 4;
public override int BasePoisonResistance => 8;
public override int BaseEnergyResistance => 6;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 40;
public override int ArmorBase => 40;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Stone;
}
}

View file

@ -624,7 +624,7 @@ namespace Server.Items
public override void OnAfterDuped(Item newItem)
{
if (!(newItem is BaseClothing clothing))
if (newItem is not BaseClothing clothing)
{
return;
}

View file

@ -0,0 +1,21 @@
namespace Server.Items
{
[Flippable(0x4200, 0x4207)]
[Serializable(0)]
public partial class GargishWoodenShield : BaseShield
{
[Constructible]
public GargishWoodenShield() : base(0x4200) => Weight = 5.0;
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 20;
public override int InitMaxHits => 25;
public override int AosStrReq => 20;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -3,7 +3,8 @@ using Server.Engines.Craft;
namespace Server.Items
{
[Flippable(0x1EB8, 0x1EB9)]
public class TinkerTools : BaseTool
[Serializable(0, false)]
public partial class TinkerTools : BaseTool
{
[Constructible]
public TinkerTools() : base(0x1EB8) => Weight = 1.0;
@ -11,58 +12,18 @@ namespace Server.Items
[Constructible]
public TinkerTools(int uses) : base(uses, 0x1EB8) => Weight = 1.0;
public TinkerTools(Serial serial) : base(serial)
{
}
public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
public class TinkersTools : BaseTool
[Serializable(0, false)]
public partial class TinkersTools : BaseTool
{
[Constructible]
public TinkersTools()
: base(0x1EBC) =>
Weight = 1.0;
public TinkersTools() : base(0x1EBC) => Weight = 1.0;
[Constructible]
public TinkersTools(int uses)
: base(uses, 0x1EBC) =>
Weight = 1.0;
public TinkersTools(Serial serial)
: base(serial)
{
}
public TinkersTools(int uses) : base(uses, 0x1EBC) => Weight = 1.0;
public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,24 @@
namespace Server.Items
{
[Flippable(0x8FD, 0x4068)]
[Serializable(0)]
public partial class DualShortAxes : BaseAxe
{
[Constructible]
public DualShortAxes() : base(0x8FD)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
public override WeaponAbility SecondaryAbility => WeaponAbility.InfectiousStrike;
public override int AosStrengthReq => 35;
public override int AosMinDamage => 14;
public override int AosMaxDamage => 17;
public override float MlSpeed => 3.00f;
public override int InitMinHits => 31;
public override int InitMaxHits => 110;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,24 @@
namespace Server.Items
{
[Flippable(0x903, 0x406E)]
[Serializable(0)]
public partial class DiscMace : BaseBashing
{
[Constructible]
public DiscMace() : base(0x903)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.ArmorIgnore;
public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
public override int AosStrengthReq => 45;
public override int AosMinDamage => 11;
public override int AosMaxDamage => 15;
public override float MlSpeed => 2.75f;
public override int InitMinHits => 31;
public override int InitMaxHits => 110;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,24 @@
namespace Server.Items
{
[Flippable(0x904, 0x406D)]
[Serializable(0)]
public partial class DualPointedSpear : BaseSpear
{
[Constructible]
public DualPointedSpear() : base(0x904)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
public override int AosStrengthReq => 50;
public override int AosMinDamage => 11;
public override int AosMaxDamage => 14;
public override float MlSpeed => 2.25f;
public override int InitMinHits => 31;
public override int InitMaxHits => 80;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,23 @@
namespace Server.Items
{
[Flippable(0x905, 0x4070)]
[Serializable(0)]
public partial class GlassStaff : BaseStaff
{
[Constructible]
public GlassStaff() : base(0x905) =>
Weight = 4.0;
public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
public override WeaponAbility SecondaryAbility => WeaponAbility.MortalStrike;
public override int AosStrengthReq => 20;
public override int AosMinDamage => 11;
public override int AosMaxDamage => 14;
public override float MlSpeed => 2.25f;
public override int InitMinHits => 31;
public override int InitMaxHits => 70;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,25 @@
namespace Server.Items
{
[Flippable(0x906, 0x406F)]
[TypeAlias("Server.Items.SerpentStoneStaff")]
[Serializable(0)]
public partial class SerpentstoneStaff : BaseStaff
{
[Constructible]
public SerpentstoneStaff() : base(0x906)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.CrushingBlow;
public override WeaponAbility SecondaryAbility => WeaponAbility.Dismount;
public override int AosStrengthReq => 35;
public override int AosMinDamage => 16;
public override int AosMaxDamage => 19;
public override float MlSpeed => 3.50f;
public override int InitMinHits => 31;
public override int InitMaxHits => 50;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -53,33 +53,31 @@ namespace Server.Items
protected override void OnTarget(Mobile from, object targ)
{
if (targ is BaseCreature bc)
if (targ is not BaseCreature bc)
{
if (IsHerdable(bc))
{
if (bc.Controlled)
{
bc.PrivateOverheadMessage(
MessageType.Regular,
0x3B2,
502467,
from.NetState
); // That animal looks tame already.
}
else
{
from.SendLocalizedMessage(502475); // Click where you wish the animal to go.
from.Target = new InternalTarget(bc);
}
}
else
{
from.SendLocalizedMessage(502468); // That is not a herdable animal.
}
from.SendLocalizedMessage(502472); // You don't seem to be able to persuade that to move.
return;
}
if (!IsHerdable(bc))
{
from.SendLocalizedMessage(502468); // That is not a herdable animal.
return;
}
if (bc.Controlled)
{
bc.PrivateOverheadMessage(
MessageType.Regular,
0x3B2,
502467, // That animal looks tame already.
from.NetState
);
}
else
{
from.SendLocalizedMessage(502472); // You don't seem to be able to persuade that to move.
from.SendLocalizedMessage(502475); // Click where you wish the animal to go.
from.Target = new InternalTarget(bc);
}
}
@ -136,9 +134,9 @@ namespace Server.Items
m_Creature.PrivateOverheadMessage(
MessageType.Regular,
0x3B2,
502471,
502471, // That wasn't even challenging.
from.NetState
); // That wasn't even challenging.
);
}
if (from.CheckTargetSkill(SkillName.Herding, m_Creature, min, max))

View file

@ -0,0 +1,29 @@
namespace Server.Items
{
[Flippable(0x8FE, 0x4072)]
[Serializable(0)]
public partial class BloodBlade : BaseSword
{
[Constructible]
public BloodBlade() : base(0x8FE)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.BleedAttack;
public override WeaponAbility SecondaryAbility => WeaponAbility.ParalyzingBlow;
public override int AosStrengthReq => 10;
public override int AosMinDamage => 10;
public override int AosMaxDamage => 12;
public override float MlSpeed => 2.00f;
public override int DefHitSound => 0x23C;
public override int DefMissSound => 0x238;
public override int InitMinHits => 31;
public override int InitMaxHits => 90;
public override SkillName DefSkill => SkillName.Fencing;
public override WeaponType DefType => WeaponType.Piercing;
public override WeaponAnimation DefAnimation => WeaponAnimation.Pierce1H;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Flippable(0x90B, 0x4074)]
[Serializable(0)]
public partial class DreadSword : BaseSword
{
[Constructible]
public DreadSword() : base(0x90B)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.CrushingBlow;
public override WeaponAbility SecondaryAbility => WeaponAbility.ConcussionBlow;
public override int AosStrengthReq => 35;
public override int AosMinDamage => 14;
public override int AosMaxDamage => 18;
public override float MlSpeed => 3.50f;
public override int DefHitSound => 0x237;
public override int DefMissSound => 0x23A;
public override int InitMinHits => 31;
public override int InitMaxHits => 110;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,26 @@
namespace Server.Items
{
[Flippable(0x908, 0x4075)]
[Serializable(0)]
public partial class GargishTalwar : BaseSword
{
[Constructible]
public GargishTalwar() : base(0x908)
{
}
public override WeaponAbility PrimaryAbility => WeaponAbility.WhirlwindAttack;
public override WeaponAbility SecondaryAbility => WeaponAbility.Dismount;
public override int AosStrengthReq => 40;
public override int AosMinDamage => 16;
public override int AosMaxDamage => 19;
public override float MlSpeed => 3.50f;
public override int DefHitSound => 0x237;
public override int DefMissSound => 0x238;
public override int InitMinHits => 31;
public override int InitMaxHits => 80;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}

View file

@ -0,0 +1,24 @@
namespace Server.Items
{
[Flippable(0x90C, 0x4073)]
[Serializable(0)]
public partial class GlassSword : BaseSword
{
[Constructible]
public GlassSword() : base(0x90C) => Weight = 6.0;
public override WeaponAbility PrimaryAbility => WeaponAbility.BleedAttack;
public override WeaponAbility SecondaryAbility => WeaponAbility.MortalStrike;
public override int AosStrengthReq => 20;
public override int AosMinDamage => 11;
public override int AosMaxDamage => 15;
public override float MlSpeed => 2.75f;
public override int DefHitSound => 0x23B;
public override int DefMissSound => 0x23A;
public override int InitMinHits => 31;
public override int InitMaxHits => 90;
public override int RequiredRaces => Race.AllowGargoylesOnly;
}
}