From ab8388e27c6bc5038fc5fcb13ec923f97f5c4d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Correia?= Date: Mon, 11 May 2026 12:20:26 +0100 Subject: [PATCH 1/4] Fixing roll detection by character name --- AltSystem.toc | 2 +- Roll.lua | 6 ++++-- docs/Changelog.md | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 docs/Changelog.md diff --git a/AltSystem.toc b/AltSystem.toc index 0b03820..e541ac4 100644 --- a/AltSystem.toc +++ b/AltSystem.toc @@ -2,7 +2,7 @@ ## Title: AltSystem ## Notes: Enhances RP gameplay with a custom rolling system ## Author: Rukira -## Version: 1.0 +## Version: 1.1 ## Dependencies: totalRP3, totalRP3_Extended ## SavedVariables: AltSystemDB diff --git a/Roll.lua b/Roll.lua index 1e98b0c..a37ca8b 100644 --- a/Roll.lua +++ b/Roll.lua @@ -78,8 +78,9 @@ rollListener:RegisterEvent("CHAT_MSG_SYSTEM") rollListener:SetScript("OnEvent", function(self, event, message) -- Phase 2: waiting for pet/summon roll result (1-5) if pendingPetRoll then - local petRoll = message:match("rolls (%d+) %(1%-5%)") + local petRoller, petRoll = message:match("(.+) rolls (%d+) %(1%-5%)") if not petRoll then return end + if petRoller ~= UnitName("player") then return end local petValue = tonumber(petRoll) local info = pendingPetRoll @@ -93,8 +94,9 @@ rollListener:SetScript("OnEvent", function(self, event, message) if not pendingRollType then return end -- Match the roll result pattern: "PlayerName rolls X (1-20)" - local roll = message:match("rolls (%d+) %(1%-20%)") + local roller, roll = message:match("(.+) rolls (%d+) %(1%-20%)") if not roll then return end + if roller ~= UnitName("player") then return end local rollValue = tonumber(roll) local rollType = pendingRollType diff --git a/docs/Changelog.md b/docs/Changelog.md new file mode 100644 index 0000000..dad8bdc --- /dev/null +++ b/docs/Changelog.md @@ -0,0 +1 @@ +- Fixed an issue where the wrong rolls were displayed when in a large enough group \ No newline at end of file From 5b36bfdb1b1d5cdce217f6a7be633c5ad637e40b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Correia?= Date: Mon, 11 May 2026 12:24:48 +0100 Subject: [PATCH 2/4] Adding unskilled default option --- Data.lua | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Data.lua b/Data.lua index 19d5ca9..e46d887 100644 --- a/Data.lua +++ b/Data.lua @@ -14,15 +14,18 @@ AltSystem.Data.SkillLevels = { } -- The "Base roll" entry is always the first (default) skill -local BASE_ROLL_ENTRY = { name = "Base roll", level = "Base", modifier = 0 } +local BASE_ROLL_ENTRY = { name = "Base roll", level = "Base", modifier = 0 } +-- The "Unskilled" entry is always the last 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 = "Base roll", level = "Base", modifier = 0 }, - { name = "Novice Skill", level = "Novice", modifier = -2 }, - { name = "Adept Skill", level = "Adept", modifier = 0 }, + { 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 }, + { name = "Unskilled", level = "Unskilled", modifier = -4 }, } -- Valid skill level keywords that must appear in the trait's right field (RT) @@ -124,6 +127,9 @@ function AltSystem.Data:RefreshSkills() end end + -- Always add Unskilled as the last entry + table.insert(skills, { name = UNSKILLED_ENTRY.name, level = UNSKILLED_ENTRY.level, modifier = UNSKILLED_ENTRY.modifier }) + AltSystem.Data.Skills = skills return skills end From c27a6cd033c665dfe5891c67a3487e735c3c4796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Correia?= Date: Mon, 11 May 2026 13:59:44 +0100 Subject: [PATCH 3/4] Remember user selections across frame instances --- Core.lua | 20 ++++++++++++++++++++ UI.lua | 24 ++++++++++++++++++------ docs/Changelog.md | 1 + 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/Core.lua b/Core.lua index 68c41ac..a3d1ab9 100644 --- a/Core.lua +++ b/Core.lua @@ -4,6 +4,7 @@ AltSystem = AltSystem or {} AltSystem.State = { selectedSkillIndex = 1, + selectedSkillName = nil, -- skill name used to restore selection across sessions selectedItemIndex = 1, -- 1 = No item selectedDefenseIndex = 1, -- 1 = Base armor shieldEnabled = false, @@ -43,6 +44,18 @@ function AltSystem:Init() if AltSystemDB.petSummonEnabled ~= nil then AltSystem.State.petSummonEnabled = AltSystemDB.petSummonEnabled end + if AltSystemDB.shieldEnabled ~= nil then + AltSystem.State.shieldEnabled = AltSystemDB.shieldEnabled + end + if AltSystemDB.selectedItemIndex then + AltSystem.State.selectedItemIndex = AltSystemDB.selectedItemIndex + end + if AltSystemDB.selectedDefenseIndex then + AltSystem.State.selectedDefenseIndex = AltSystemDB.selectedDefenseIndex + end + if AltSystemDB.selectedSkillName then + AltSystem.State.selectedSkillName = AltSystemDB.selectedSkillName + end -- Register slash command /altsystem SLASH_ALTSYSTEM1 = "/altsystem" @@ -58,8 +71,15 @@ function AltSystem:Init() AltSystemDB.announceEnabled = AltSystem.State.announceEnabled AltSystemDB.announceChannelIndex = AltSystem.State.announceChannelIndex AltSystemDB.petSummonEnabled = AltSystem.State.petSummonEnabled + AltSystemDB.shieldEnabled = AltSystem.State.shieldEnabled + AltSystemDB.selectedItemIndex = AltSystem.State.selectedItemIndex + AltSystemDB.selectedDefenseIndex = AltSystem.State.selectedDefenseIndex + AltSystemDB.selectedSkillName = AltSystem.State.selectedSkillName end) + -- Build the main frame now that saved variables are loaded + AltSystem:CreateMainFrame() + print("|cff00ccffAltSystem|r loaded. Type /altsystem to open.") end diff --git a/UI.lua b/UI.lua index c425d9d..5162da2 100644 --- a/UI.lua +++ b/UI.lua @@ -90,6 +90,7 @@ function AltSystem:CreateMainFrame() AltSystem.State.selectedSkillIndex, function(index) AltSystem.State.selectedSkillIndex = index + AltSystem.State.selectedSkillName = AltSystem.Data.Skills[index] and AltSystem.Data.Skills[index].name or nil UpdateSkillWarning(index) end) @@ -314,13 +315,24 @@ end function AltSystem:RefreshSkillDropdown() AltSystem.Data:RefreshSkills() - -- Reset selection to 1 (Base roll) since the skill list may have changed - AltSystem.State.selectedSkillIndex = 1 + -- Try to restore the previously selected skill by name; fall back to 1 (Base roll) + local newIndex = 1 + local savedName = AltSystem.State.selectedSkillName + if savedName then + for i, skill in ipairs(AltSystem.Data.Skills) do + if skill.name == savedName then + newIndex = i + break + end + end + end + AltSystem.State.selectedSkillIndex = newIndex + AltSystem.State.selectedSkillName = AltSystem.Data.Skills[newIndex] and AltSystem.Data.Skills[newIndex].name or nil if AltSystem.SetSkillIndex then - AltSystem.SetSkillIndex(1) + AltSystem.SetSkillIndex(newIndex) end if AltSystem.UpdateSkillWarning then - AltSystem.UpdateSkillWarning(1) + AltSystem.UpdateSkillWarning(newIndex) end -- Rebuild the dropdown menu with the new skill list @@ -333,6 +345,7 @@ function AltSystem:RefreshSkillDropdown() function(data) return data == AltSystem.State.selectedSkillIndex end, function(data) AltSystem.State.selectedSkillIndex = data + AltSystem.State.selectedSkillName = AltSystem.Data.Skills[data] and AltSystem.Data.Skills[data].name or nil if AltSystem.SetSkillIndex then AltSystem.SetSkillIndex(data) end @@ -347,5 +360,4 @@ function AltSystem:RefreshSkillDropdown() end end --- Create the frame on file load so it's ready when Init runs -AltSystem:CreateMainFrame() +-- Frame is created by AltSystem:Init() in Core.lua, after saved variables are loaded diff --git a/docs/Changelog.md b/docs/Changelog.md index dad8bdc..405d8f0 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -1 +1,2 @@ +- The roll window now remembers all user selections (skill, item, armor type, shield, pet, announce and channel) across sessions - Fixed an issue where the wrong rolls were displayed when in a large enough group \ No newline at end of file From 6a444584431d81fe64c422682657001ab0cc9e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Correia?= Date: Mon, 11 May 2026 14:00:10 +0100 Subject: [PATCH 4/4] Unskilled --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 405d8f0..dd05c6a 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -1,2 +1,3 @@ +- Adding default 'Unskilled (-4)' option - The roll window now remembers all user selections (skill, item, armor type, shield, pet, announce and channel) across sessions - Fixed an issue where the wrong rolls were displayed when in a large enough group \ No newline at end of file