fix: Fixes random skills and groupings (#1846)

This commit is contained in:
Kamron Batman 2024-06-23 16:49:17 -07:00 committed by GitHub
parent 8ec203f387
commit 16de17e8a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 127 additions and 107 deletions

View file

@ -21,91 +21,6 @@ public static class Utility
{
private static Dictionary<IPAddress, IPAddress> _ipAddressTable;
private static SkillName[] _allSkills =
[
SkillName.Alchemy,
SkillName.Anatomy,
SkillName.AnimalLore,
SkillName.ItemID,
SkillName.ArmsLore,
SkillName.Parry,
SkillName.Begging,
SkillName.Blacksmith,
SkillName.Fletching,
SkillName.Peacemaking,
SkillName.Camping,
SkillName.Carpentry,
SkillName.Cartography,
SkillName.Cooking,
SkillName.DetectHidden,
SkillName.Discordance,
SkillName.EvalInt,
SkillName.Healing,
SkillName.Fishing,
SkillName.Forensics,
SkillName.Herding,
SkillName.Hiding,
SkillName.Provocation,
SkillName.Inscribe,
SkillName.Lockpicking,
SkillName.Magery,
SkillName.MagicResist,
SkillName.Tactics,
SkillName.Snooping,
SkillName.Musicianship,
SkillName.Poisoning,
SkillName.Archery,
SkillName.SpiritSpeak,
SkillName.Stealing,
SkillName.Tailoring,
SkillName.AnimalTaming,
SkillName.TasteID,
SkillName.Tinkering,
SkillName.Tracking,
SkillName.Veterinary,
SkillName.Swords,
SkillName.Macing,
SkillName.Fencing,
SkillName.Wrestling,
SkillName.Lumberjacking,
SkillName.Mining,
SkillName.Meditation,
SkillName.Stealth,
SkillName.RemoveTrap,
SkillName.Necromancy,
SkillName.Focus,
SkillName.Chivalry,
SkillName.Bushido,
SkillName.Ninjitsu,
SkillName.Spellweaving,
// TODO: Update RandomSkill once these are implemented!
// SkillName.Mysticism,
// SkillName.Imbuing,
SkillName.Throwing
];
private static readonly SkillName[] m_CombatSkills =
[
SkillName.Archery,
SkillName.Swords,
SkillName.Macing,
SkillName.Fencing,
SkillName.Wrestling
];
private static readonly SkillName[] m_CraftSkills =
[
SkillName.Alchemy,
SkillName.Blacksmith,
SkillName.Fletching,
SkillName.Carpentry,
SkillName.Cartography,
SkillName.Cooking,
SkillName.Inscribe,
SkillName.Tailoring,
SkillName.Tinkering
];
private static readonly Stack<ConsoleColor> m_ConsoleColors = new();
public static void Separate(StringBuilder sb, string value, string separator)
@ -365,25 +280,6 @@ public static class Utility
public static object GetArrayCap(Array array, int index, object emptyValue = null) =>
array.Length > 0 ? array.GetValue(Math.Clamp(index, 0, array.Length - 1)) : emptyValue;
public static SkillName RandomSkill()
{
// TODO: Add 2 to each entry for Mysticism and Imbuing, once they are uncommented on _allSkills.
var offset = Core.Expansion switch
{
>= Expansion.SA => 0,
Expansion.ML => 1,
Expansion.SE => 2,
Expansion.AOS => 4,
_ => 7
};
return _allSkills[Random(_allSkills.Length - offset)];
}
public static SkillName RandomCombatSkill() => m_CombatSkills.RandomElement();
public static SkillName RandomCraftSkill() => m_CraftSkills.RandomElement();
public static void FixPoints(ref Point3D top, ref Point3D bottom)
{
if (bottom.m_X < top.m_X)

View file

@ -37,7 +37,7 @@ public class SkillPacketsTests : IClassFixture<ServerFixture>
m.DefaultMobileInit();
var skills = m.Skills;
m.Skills[Utility.RandomSkill()].BaseFixedPoint = 1000;
m.Skills[SkillsInfo.RandomSkill()].BaseFixedPoint = 1000;
var expected = new SkillUpdate(skills).Compile();

View file

@ -5,12 +5,21 @@ namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class DreadPirateHat : TricorneHat
{
private static readonly SkillName[] _combatSkills =
[
SkillName.Tactics,
SkillName.Archery,
SkillName.Swords,
SkillName.Macing,
SkillName.Fencing
];
[Constructible]
public DreadPirateHat()
{
Hue = 0x497;
SkillBonuses.SetValues(0, Utility.RandomCombatSkill(), 10.0);
SkillBonuses.SetValues(0, _combatSkills.RandomElement(), 10.0);
Attributes.BonusDex = 8;
Attributes.AttackChance = 10;

View file

@ -28,7 +28,7 @@ public partial class ScrollofTranscendence : SpecialScroll
$"Scroll of Transcendence ({Math.Floor(Value * 10) / 10:0.#} Skill):".Color(0xFFFFFF);
public static ScrollofTranscendence CreateRandom(int min, int max) =>
new(Utility.RandomSkill(), Utility.RandomMinMax(min, max) / 10.0);
new(SkillsInfo.RandomSkill(), Utility.RandomMinMax(min, max) / 10.0);
public override void GetProperties(IPropertyList list)
{

View file

@ -5,6 +5,121 @@ namespace Server;
public static class SkillsInfo
{
public static SkillName RandomSkill()
{
var exclusiveMaxIndex = Core.Expansion switch
{
>= Expansion.SA => 59, // <= Throwing
>= Expansion.ML => 55, // <= Spellweaving
Expansion.SE => 54, // <= Ninjitsu
Expansion.AOS => 52, // <= Chivalry
_ => 49 // <= RemoveTrap
};
return (SkillName)Utility.Random(exclusiveMaxIndex);
}
private static readonly SkillName[] _combatSkills =
[
SkillName.Parry,
SkillName.Tactics,
SkillName.Archery,
SkillName.Swords,
SkillName.Macing,
SkillName.Fencing,
SkillName.Wrestling,
// AOS
SkillName.Focus,
// SE
SkillName.Bushido,
SkillName.Ninjitsu,
// SA
SkillName.Throwing
];
public static SkillName RandomCombatSkill()
{
var exclusiveMaxIndex = Core.Expansion switch
{
>= Expansion.SA => 11,
>= Expansion.SE => 10,
Expansion.AOS => 8,
_ => 7
};
return _combatSkills[Utility.Random(exclusiveMaxIndex)];
}
private static readonly SkillName[] _craftSkills =
[
SkillName.Alchemy,
SkillName.Blacksmith,
SkillName.Fletching,
SkillName.Carpentry,
SkillName.Cartography,
SkillName.Cooking,
SkillName.Inscribe,
SkillName.Tailoring,
SkillName.Tinkering,
// SA
SkillName.Imbuing
];
public static SkillName RandomCraftSkill()
{
var exclusiveMaxIndex = Core.Expansion switch
{
>= Expansion.SA => 10,
_ => 9
};
return _craftSkills[Utility.Random(exclusiveMaxIndex)];
}
private static readonly SkillName[] _randomMagicSkill =
[
SkillName.EvalInt,
SkillName.Magery,
SkillName.MagicResist,
SkillName.Meditation,
// AOS
SkillName.Necromancy,
SkillName.Chivalry,
// ML
SkillName.Spellweaving,
// SA
SkillName.Mysticism
];
public static SkillName RandomMagicSkill()
{
var exclusiveMaxIndex = Core.Expansion switch
{
>= Expansion.SA => 8,
>= Expansion.ML => 7,
Expansion.AOS => 6,
_ => 4
};
return _randomMagicSkill[Utility.Random(exclusiveMaxIndex)];
}
private static readonly SkillName[] _gatheringSkills =
{
SkillName.Fishing,
SkillName.Mining,
SkillName.Lumberjacking
};
public static SkillName RandomGatheringSkill() => _gatheringSkills.RandomElement();
public static void Configure()
{
SkillInfo.Table = JsonConfig.Deserialize<SkillInfo[]>(Path.Combine(Core.BaseDirectory, "Data/skills.json"));