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,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;
}
}