Skip to content

Commit

Permalink
fix: Fixes AR/Durability/Tool Uses for Pre-UOR and LBR (#2113)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bohicatv authored Feb 6, 2025
1 parent d407847 commit 51367df
Show file tree
Hide file tree
Showing 6 changed files with 172 additions and 81 deletions.
178 changes: 110 additions & 68 deletions Projects/UOContent/Items/Armor/BaseArmor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -313,26 +313,35 @@ public virtual double ArmorRating

if (_protectionLevel != ArmorProtectionLevel.Regular)
{
ar += 10 + 5 * (int)_protectionLevel;
if (Core.UOR)
{
ar += 10;
}

ar += 5 * (int)_protectionLevel;
}

ar += _resource switch
// Colored armor does not give a bonus until UOR+
if (Core.UOR)
{
CraftResource.DullCopper => 2,
CraftResource.ShadowIron => 4,
CraftResource.Copper => 6,
CraftResource.Bronze => 8,
CraftResource.Gold => 10,
CraftResource.Agapite => 12,
CraftResource.Verite => 14,
CraftResource.Valorite => 16,
CraftResource.SpinedLeather => 10,
CraftResource.HornedLeather => 13,
CraftResource.BarbedLeather => 16,
_ => 0
};
ar += _resource switch
{
CraftResource.DullCopper => 2,
CraftResource.ShadowIron => 4,
CraftResource.Copper => 6,
CraftResource.Bronze => 8,
CraftResource.Gold => 10,
CraftResource.Agapite => 12,
CraftResource.Verite => 14,
CraftResource.Valorite => 16,
CraftResource.SpinedLeather => 10,
CraftResource.HornedLeather => 13,
CraftResource.BarbedLeather => 16,
_ => 0
};
}

ar += -8 + 8 * (int)_quality;
ar += 8 * (int)(_quality - 1);
return ScaleArmorByDurability(ar);
}
}
Expand Down Expand Up @@ -546,7 +555,7 @@ public override int Hue
}
}

public int OnCraft(
public virtual int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
)
Expand Down Expand Up @@ -578,8 +587,9 @@ public int OnCraft(
{
DistributeBonuses(
tool is BaseRunicTool ? 6 :
// Not sure since when, but right now 15 points are added, not 14.
Core.SE ? 15 : 14
); // Not sure since when, but right now 15 points are added, not 14.
);
}

if (Core.ML && this is not BaseShield)
Expand All @@ -591,20 +601,30 @@ public int OnCraft(
switch (Utility.Random(5))
{
case 0:
PhysicalBonus++;
break;
{
PhysicalBonus++;
break;
}
case 1:
FireBonus++;
break;
{
FireBonus++;
break;
}
case 2:
ColdBonus++;
break;
{
ColdBonus++;
break;
}
case 3:
EnergyBonus++;
break;
{
EnergyBonus++;
break;
}
case 4:
PoisonBonus++;
break;
{
PoisonBonus++;
break;
}
}
}

Expand Down Expand Up @@ -832,20 +852,30 @@ public void DistributeBonuses(int amount)
switch (Utility.Random(5))
{
case 0:
++PhysicalBonus;
break;
{
++PhysicalBonus;
break;
}
case 1:
++FireBonus;
break;
{
++FireBonus;
break;
}
case 2:
++ColdBonus;
break;
{
++ColdBonus;
break;
}
case 3:
++PoisonBonus;
break;
{
++PoisonBonus;
break;
}
case 4:
++EnergyBonus;
break;
{
++EnergyBonus;
break;
}
}
}

Expand All @@ -857,49 +887,61 @@ public CraftAttributeInfo GetResourceAttrs() =>

public int GetProtOffset()
{
return _protectionLevel switch
if (Core.T2A)
{
ArmorProtectionLevel.Guarding => 1,
ArmorProtectionLevel.Hardening => 2,
ArmorProtectionLevel.Fortification => 3,
ArmorProtectionLevel.Invulnerability => 4,
_ => 0
};
return _protectionLevel switch
{
ArmorProtectionLevel.Defense => 5,
ArmorProtectionLevel.Guarding => 10,
ArmorProtectionLevel.Hardening => 15,
ArmorProtectionLevel.Fortification => 20,
ArmorProtectionLevel.Invulnerability => 25,
_ => 0 // regular
};
}
else
{
return _protectionLevel switch
{
ArmorProtectionLevel.Defense => 2,
ArmorProtectionLevel.Guarding => 4,
ArmorProtectionLevel.Hardening => 6,
ArmorProtectionLevel.Fortification => 8,
ArmorProtectionLevel.Invulnerability => 10,
_ => 0 // regular
};
}
}

public int GetDurabilityBonus()
{
var bonus = _quality == ArmorQuality.Exceptional ? 20 : 0;

bonus += _durability switch
{
ArmorDurabilityLevel.Durable => 20,
ArmorDurabilityLevel.Substantial => 50,
ArmorDurabilityLevel.Massive => 70,
ArmorDurabilityLevel.Fortified => 100,
ArmorDurabilityLevel.Indestructible => 120,
_ => 0
};

if (Core.AOS)
if (Core.UOR)
{
bonus += ArmorAttributes.DurabilityBonus;

var resInfo = CraftResources.GetInfo(_resource);
CraftAttributeInfo attrInfo = null;
var bonus = _durability switch
{
ArmorDurabilityLevel.Durable => 20,
ArmorDurabilityLevel.Substantial => 50,
ArmorDurabilityLevel.Massive => 70,
ArmorDurabilityLevel.Fortified => 100,
ArmorDurabilityLevel.Indestructible => 120,
_ => 0
};

if (resInfo != null)
if (Core.AOS)
{
attrInfo = resInfo.AttributeInfo;
var resInfo = CraftResources.GetInfo(_resource);
bonus += ArmorAttributes.DurabilityBonus + (resInfo?.AttributeInfo?.ArmorDurability ?? 0);
}

if (attrInfo != null)
if (_quality == ArmorQuality.Exceptional)
{
bonus += attrInfo.ArmorDurability;
return bonus + 20;
}

return bonus;
}

return bonus;
return (int)_durability * 5 + ((int)_quality - 1) * 10;
}

public static void ValidateMobile(Mobile m)
Expand Down Expand Up @@ -1596,7 +1638,7 @@ private string DurabilityText(out bool articleAn)
ArmorDurabilityLevel.Substantial => "substantial",
ArmorDurabilityLevel.Massive => "massive",
ArmorDurabilityLevel.Fortified => "fortified",
ArmorDurabilityLevel.Indestructible => "indestructable",
ArmorDurabilityLevel.Indestructible => "indestructible",
_ => null
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public BaseInstrument(int itemID, int wellSound, int badlySound) : base(itemID)
_usesRemaining = Utility.RandomMinMax(InitMinUses, InitMaxUses);
}

public virtual int InitMinUses => 350;
public virtual int InitMaxUses => 450;
public virtual int InitMinUses => Core.UOR ? 350 : 100;
public virtual int InitMaxUses => Core.UOR ? 450 : 150;

public virtual TimeSpan ChargeReplenishRate => TimeSpan.FromMinutes(5.0);

Expand Down Expand Up @@ -116,7 +116,7 @@ public int UsesRemaining
}
}

public int OnCraft(
public virtual int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
)
Expand All @@ -128,6 +128,19 @@ public int OnCraft(
Crafter = from?.RawName;
}

// Publish 16 change
if (Core.LBR)
{
if (Quality == InstrumentQuality.Exceptional)
{
UsesRemaining += 100;
}
}
else if (Quality != InstrumentQuality.Regular)
{
UsesRemaining += (int)(UsesRemaining * ((int)Quality - 1) * 0.1);
}

return quality;
}

Expand Down
14 changes: 13 additions & 1 deletion Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public ToolQuality Quality

private bool ShowUsesRemaining { get; set; } = true;

public int OnCraft(
public virtual int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
)
Expand All @@ -68,6 +68,18 @@ public int OnCraft(
Crafter = from?.RawName;
}

if (Core.UOR)
{
if (Quality == ToolQuality.Exceptional)
{
UsesRemaining = 100;
}
}
else if (Quality != ToolQuality.Regular)
{
UsesRemaining += (int)(UsesRemaining * ((int)Quality - 1) * 0.2);
}

return quality;
}

Expand Down
24 changes: 24 additions & 0 deletions Projects/UOContent/Items/Weapons/Axes/Pickaxe.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using ModernUO.Serialization;
using Server.Engines.Craft;
using Server.Engines.Harvest;

namespace Server.Items
Expand Down Expand Up @@ -35,5 +37,27 @@ public Pickaxe() : base(0xE86)
public override int InitMaxHits => 60;

public override WeaponAnimation DefAnimation => WeaponAnimation.Slash1H;

public override int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
)
{
var result = base.OnCraft(quality, makersMark, from, craftSystem, typeRes, tool, craftItem, resHue);

if (Core.UOR)
{
if (Quality == WeaponQuality.Exceptional)
{
UsesRemaining += 50;
}
}
else if (Quality != WeaponQuality.Regular)
{
UsesRemaining += (int)(UsesRemaining * ((int)Quality - 1) * 0.2);
}

return result;
}
}
}
2 changes: 1 addition & 1 deletion Projects/UOContent/Items/Weapons/BaseWeapon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ public CraftResource Resource
[SerializableFieldDefault(23)]
private CraftResource ResourceDefaultValue() => CraftResource.Iron;

public int OnCraft(
public virtual int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
)
Expand Down
Loading

0 comments on commit 51367df

Please sign in to comment.