From 03a6edad45a7c272d74a2ac995964c5c759a29e2 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sat, 10 Aug 2024 12:49:39 -0700 Subject: [PATCH] fix: Disconnect if user tries to give themselves too much skill (#1922) --- Projects/UOContent/Misc/CharacterCreation.cs | 29 ++++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/Projects/UOContent/Misc/CharacterCreation.cs b/Projects/UOContent/Misc/CharacterCreation.cs index ea9046768..b171431e6 100644 --- a/Projects/UOContent/Misc/CharacterCreation.cs +++ b/Projects/UOContent/Misc/CharacterCreation.cs @@ -444,21 +444,32 @@ public static class CharacterCreation for (var i = 0; i < skills.Length; ++i) { var (name, value) = skills[i]; - var notValid = value is < 0 or > 50 || !_allowedStartingSkills.Contains(name) || - !Core.AOS && name is SkillName.Necromancy or SkillName.Chivalry or SkillName.Focus || - !Core.SE && name is SkillName.Ninjitsu or SkillName.Bushido || - Core.SA && (raceFlag == Race.AllowGargoylesOnly && name == SkillName.Archery || - raceFlag != Race.AllowGargoylesOnly && name == SkillName.Throwing) || - !Core.SA && name is SkillName.Throwing or SkillName.Imbuing; - if (notValid) + if (value is < 0 or > 50 || !_allowedStartingSkills.Contains(name)) { - skills[i] = default; - continue; + return false; + } + + /** + * Note: Change to Alchemy @ 0 skill if something invalid is chosen. + * To avoid this, modify the client to only show the skills allowed by your shard. + */ + switch (name) + { + case SkillName.Necromancy or SkillName.Chivalry or SkillName.Focus when !Core.AOS: + case SkillName.Ninjitsu or SkillName.Bushido when !Core.SE: + case SkillName.Throwing or SkillName.Imbuing when !Core.SA: + case SkillName.Archery when raceFlag == Race.AllowGargoylesOnly: + case SkillName.Throwing when raceFlag != Race.AllowGargoylesOnly: + { + skills[i] = default; + break; + } } total += value; + // Do not allow a skill to be listed twice for (var j = i + 1; j < skills.Length; ++j) { var (nameCheck, valueCheck) = skills[j];