Skill level mismatch warning
This commit is contained in:
parent
961d642018
commit
0d9ec1913d
2 changed files with 70 additions and 6 deletions
35
Data.lua
35
Data.lua
|
|
@ -28,16 +28,37 @@ local DEFAULT_SKILLS = {
|
|||
-- Valid skill level keywords that must appear in the trait's right field (RT)
|
||||
local VALID_SKILL_KEYWORDS = { "Inept", "Novice", "Adept", "Expert", "Master" }
|
||||
|
||||
-- Expected numeric value ranges for each skill keyword
|
||||
local SKILL_KEYWORD_RANGES = {
|
||||
["Novice"] = { min = 1, max = 5 },
|
||||
["Adept"] = { min = 6, max = 10 },
|
||||
["Expert"] = { min = 11, max = 19 },
|
||||
["Master"] = { min = 20, max = 20 },
|
||||
}
|
||||
|
||||
-- Check if the trait's right text field contains a valid skill keyword.
|
||||
-- Returns true if any keyword is found, false otherwise.
|
||||
local function HasSkillKeyword(rightText)
|
||||
if not rightText or rightText == "" then return false end
|
||||
-- Returns the matched keyword if found, nil otherwise.
|
||||
local function FindSkillKeyword(rightText)
|
||||
if not rightText or rightText == "" then return nil end
|
||||
for _, keyword in ipairs(VALID_SKILL_KEYWORDS) do
|
||||
if rightText:find(keyword) then
|
||||
return true
|
||||
return keyword
|
||||
end
|
||||
end
|
||||
return false
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Check whether the numeric value matches the expected range for the given keyword.
|
||||
-- Returns a warning string if mismatched, or nil if everything is fine.
|
||||
local function CheckSkillMismatch(keyword, numericValue)
|
||||
if not keyword or keyword == "Inept" then return nil end
|
||||
local range = SKILL_KEYWORD_RANGES[keyword]
|
||||
if not range then return nil end
|
||||
if not numericValue or numericValue <= 0 then return nil end
|
||||
if numericValue < range.min or numericValue > range.max then
|
||||
return "Skill is marked as " .. keyword .. " (" .. range.min .. "-" .. range.max .. "), but the profile has a value of " .. numericValue .. "."
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Determine the skill level from the trait's right text and numeric value (V2 field, 0-20 range).
|
||||
|
|
@ -78,7 +99,8 @@ function AltSystem.Data:RefreshSkills()
|
|||
local skillName = trait.LT
|
||||
local numericValue = trait.V2
|
||||
|
||||
if skillName and skillName ~= "" and HasSkillKeyword(trait.RT) then
|
||||
local keyword = FindSkillKeyword(trait.RT)
|
||||
if skillName and skillName ~= "" and keyword then
|
||||
local level, modifier = ParseSkillLevel(trait.RT, numericValue)
|
||||
if level and modifier then
|
||||
foundAny = true
|
||||
|
|
@ -86,6 +108,7 @@ function AltSystem.Data:RefreshSkills()
|
|||
name = skillName,
|
||||
level = level,
|
||||
modifier = modifier,
|
||||
warning = CheckSkillMismatch(keyword, numericValue),
|
||||
})
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue