fix: Fixes random skills and groupings (#1846)
This commit is contained in:
parent
8ec203f387
commit
16de17e8a6
5 changed files with 127 additions and 107 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue