Skills from TRP profile
This commit is contained in:
parent
ce1c6768e1
commit
9e629aec31
4 changed files with 161 additions and 24 deletions
92
Data.lua
92
Data.lua
|
|
@ -1,5 +1,5 @@
|
|||
-- AltSystem Data Definitions
|
||||
-- Contains dummy skill data, item options, defense options, and modifier constants.
|
||||
-- Contains skill data (fetched from TRP3 profile), item options, defense options, and modifier constants.
|
||||
|
||||
AltSystem = AltSystem or {}
|
||||
AltSystem.Data = {}
|
||||
|
|
@ -12,18 +12,88 @@ AltSystem.Data.SkillLevels = {
|
|||
["Master"] = 4,
|
||||
}
|
||||
|
||||
-- Dummy skill data: each skill has a name, icon, and level
|
||||
AltSystem.Data.Skills = {
|
||||
{ name = "Swordsmanship", icon = "Interface\\Icons\\INV_Sword_04", level = "Expert" },
|
||||
{ name = "Archery", icon = "Interface\\Icons\\INV_Weapon_Bow_05", level = "Adept" },
|
||||
{ name = "Fire Magic", icon = "Interface\\Icons\\Spell_Fire_FlameBolt", level = "Master" },
|
||||
{ name = "Healing", icon = "Interface\\Icons\\Spell_Holy_FlashHeal", level = "Novice" },
|
||||
{ name = "Stealth", icon = "Interface\\Icons\\Ability_Stealth", level = "Adept" },
|
||||
-- The "Unskilled" entry is always the first (default) skill
|
||||
local UNSKILLED_ENTRY = { name = "Unskilled", level = "Unskilled", modifier = -4 }
|
||||
|
||||
-- Default/fallback skill list used when no TRP3 profile skills are found
|
||||
local DEFAULT_SKILLS = {
|
||||
{ name = "Unskilled", level = "Unskilled", modifier = -4 },
|
||||
{ name = "Novice Skill", level = "Novice", modifier = -2 },
|
||||
{ name = "Adept Skill", level = "Adept", modifier = 0 },
|
||||
{ name = "Expert Skill", level = "Expert", modifier = 2 },
|
||||
{ name = "Master Skill", level = "Master", modifier = 4 },
|
||||
}
|
||||
|
||||
-- Pre-compute modifier for each skill based on its level
|
||||
for _, skill in ipairs(AltSystem.Data.Skills) do
|
||||
skill.modifier = AltSystem.Data.SkillLevels[skill.level] or 0
|
||||
-- Parse the skill level from the right-side text of a TRP3 personality trait.
|
||||
-- The level keyword must appear at the start of the string; anything after it is ignored.
|
||||
-- Returns the level string and modifier, or nil if not recognized.
|
||||
local function ParseSkillLevel(rightText)
|
||||
if not rightText or rightText == "" then return nil, nil end
|
||||
|
||||
-- Trim leading/trailing whitespace
|
||||
local trimmed = rightText:match("^%s*(.-)%s*$")
|
||||
if not trimmed or trimmed == "" then return nil, nil end
|
||||
|
||||
-- Check if the text starts with a recognized level keyword
|
||||
for _, levelName in ipairs({"Master", "Expert", "Adept", "Novice"}) do
|
||||
if trimmed == levelName or trimmed:match("^" .. levelName .. "[%s%p]") then
|
||||
return levelName, AltSystem.Data.SkillLevels[levelName]
|
||||
end
|
||||
end
|
||||
|
||||
return nil, nil
|
||||
end
|
||||
|
||||
-- Fetch skills from the current TRP3 profile's personality traits.
|
||||
-- Returns an array of skill entries, always starting with "Unskilled".
|
||||
-- Falls back to the default list if no profile or no valid skills are found.
|
||||
function AltSystem.Data:RefreshSkills()
|
||||
local skills = {}
|
||||
|
||||
-- Always add Unskilled as the first entry
|
||||
table.insert(skills, { name = UNSKILLED_ENTRY.name, level = UNSKILLED_ENTRY.level, modifier = UNSKILLED_ENTRY.modifier })
|
||||
|
||||
local foundAny = false
|
||||
|
||||
-- Try to read personality traits from the active TRP3 profile
|
||||
if TRP3_API and TRP3_API.profile and TRP3_API.profile.getData then
|
||||
local ok, characteristics = pcall(TRP3_API.profile.getData, "player/characteristics")
|
||||
if ok and characteristics and characteristics.PS then
|
||||
for _, trait in ipairs(characteristics.PS) do
|
||||
local skillName = trait.LT
|
||||
local rightText = trait.RT
|
||||
|
||||
if skillName and skillName ~= "" then
|
||||
local level, modifier = ParseSkillLevel(rightText)
|
||||
if level and modifier then
|
||||
foundAny = true
|
||||
table.insert(skills, {
|
||||
name = skillName,
|
||||
level = level,
|
||||
modifier = modifier,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- If no valid skills were found, use the default fallback list (skip first "Unskilled" since we already added it)
|
||||
if not foundAny then
|
||||
skills = {}
|
||||
for _, skill in ipairs(DEFAULT_SKILLS) do
|
||||
table.insert(skills, { name = skill.name, level = skill.level, modifier = skill.modifier })
|
||||
end
|
||||
end
|
||||
|
||||
AltSystem.Data.Skills = skills
|
||||
return skills
|
||||
end
|
||||
|
||||
-- Initialize with the default skill list
|
||||
AltSystem.Data.Skills = {}
|
||||
for _, skill in ipairs(DEFAULT_SKILLS) do
|
||||
table.insert(AltSystem.Data.Skills, { name = skill.name, level = skill.level, modifier = skill.modifier })
|
||||
end
|
||||
|
||||
-- Item options: name and modifier (first entry = no item)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue