Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Fixes AR/Durability/Tool Uses for Pre-UOR and LBR #2113

Merged
merged 4 commits into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should not have changed this. Damn.

{
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
Loading