Compare commits
3 commits
158c1742fe
...
865404ffb7
| Author | SHA1 | Date | |
|---|---|---|---|
| 865404ffb7 | |||
| 5a0d0f2ca4 | |||
| f8182ca30a |
3 changed files with 39 additions and 16 deletions
13
Data.lua
13
Data.lua
|
|
@ -12,11 +12,15 @@ AltSystem.Data.SkillLevels = {
|
||||||
["Master"] = 4,
|
["Master"] = 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- The "Inept" entry is always the first (default) skill
|
-- The "Base roll" entry is always the first (default) skill
|
||||||
|
local BASE_ROLL_ENTRY = { name = "Base roll", level = "Base", modifier = 0 }
|
||||||
|
|
||||||
|
-- The "Inept" entry is always the second skill
|
||||||
local UNSKILLED_ENTRY = { name = "Inept", level = "Inept", modifier = -4 }
|
local UNSKILLED_ENTRY = { name = "Inept", level = "Inept", modifier = -4 }
|
||||||
|
|
||||||
-- Default/fallback skill list used when no TRP3 profile skills are found
|
-- Default/fallback skill list used when no TRP3 profile skills are found
|
||||||
local DEFAULT_SKILLS = {
|
local DEFAULT_SKILLS = {
|
||||||
|
{ name = "Base roll", level = "Base", modifier = 0 },
|
||||||
{ name = "Inept", level = "Inept", modifier = -4 },
|
{ name = "Inept", level = "Inept", modifier = -4 },
|
||||||
{ name = "Novice Skill", level = "Novice", modifier = -2 },
|
{ name = "Novice Skill", level = "Novice", modifier = -2 },
|
||||||
{ name = "Adept Skill", level = "Adept", modifier = 0 },
|
{ name = "Adept Skill", level = "Adept", modifier = 0 },
|
||||||
|
|
@ -56,12 +60,13 @@ local function ParseSkillLevel(numericValue)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fetch skills from the current TRP3 profile's personality traits.
|
-- Fetch skills from the current TRP3 profile's personality traits.
|
||||||
-- Returns an array of skill entries, always starting with "Inept".
|
-- Returns an array of skill entries, always starting with "Base roll" and "Inept".
|
||||||
-- Falls back to the default list if no profile or no valid skills are found.
|
-- Falls back to the default list if no profile or no valid skills are found.
|
||||||
function AltSystem.Data:RefreshSkills()
|
function AltSystem.Data:RefreshSkills()
|
||||||
local skills = {}
|
local skills = {}
|
||||||
|
|
||||||
-- Always add Inept as the first entry
|
-- Always add Base roll as the first entry, then Inept
|
||||||
|
table.insert(skills, { name = BASE_ROLL_ENTRY.name, level = BASE_ROLL_ENTRY.level, modifier = BASE_ROLL_ENTRY.modifier })
|
||||||
table.insert(skills, { name = UNSKILLED_ENTRY.name, level = UNSKILLED_ENTRY.level, modifier = UNSKILLED_ENTRY.modifier })
|
table.insert(skills, { name = UNSKILLED_ENTRY.name, level = UNSKILLED_ENTRY.level, modifier = UNSKILLED_ENTRY.modifier })
|
||||||
|
|
||||||
local foundAny = false
|
local foundAny = false
|
||||||
|
|
@ -89,7 +94,7 @@ function AltSystem.Data:RefreshSkills()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If no valid skills were found, use the default fallback list (skip first "Inept" since we already added it)
|
-- If no valid skills were found, use the default fallback list
|
||||||
if not foundAny then
|
if not foundAny then
|
||||||
skills = {}
|
skills = {}
|
||||||
for _, skill in ipairs(DEFAULT_SKILLS) do
|
for _, skill in ipairs(DEFAULT_SKILLS) do
|
||||||
|
|
|
||||||
40
Roll.lua
40
Roll.lua
|
|
@ -20,14 +20,26 @@ end
|
||||||
local function BuildModifierString(modifiers)
|
local function BuildModifierString(modifiers)
|
||||||
local parts = {}
|
local parts = {}
|
||||||
for _, mod in ipairs(modifiers) do
|
for _, mod in ipairs(modifiers) do
|
||||||
if mod.value ~= 0 then
|
local sign = mod.value >= 0 and "+" or ""
|
||||||
local sign = mod.value >= 0 and "+" or ""
|
table.insert(parts, sign .. mod.value .. " (" .. mod.name .. ")")
|
||||||
table.insert(parts, sign .. mod.value .. " (" .. mod.name .. ")")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
return table.concat(parts, " ")
|
return table.concat(parts, " ")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Send a message to the given channel, handling EMOTE specially
|
||||||
|
-- to avoid the message being redirected to raid chat when in a raid group.
|
||||||
|
local function SendToChannel(msg, channel)
|
||||||
|
if channel == "EMOTE" then
|
||||||
|
local editBox = ChatFrame1 and ChatFrame1.editBox or ChatFrame1EditBox
|
||||||
|
if editBox then
|
||||||
|
ChatFrame_OpenChat("/e " .. msg, ChatFrame1)
|
||||||
|
ChatEdit_SendText(editBox)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
SendChatMessage(msg, channel)
|
||||||
|
end
|
||||||
|
|
||||||
-- Announce the roll result to the selected chat channel
|
-- Announce the roll result to the selected chat channel
|
||||||
local function AnnounceRoll(rollValue, modifiers, total)
|
local function AnnounceRoll(rollValue, modifiers, total)
|
||||||
if not AltSystem.State.announceEnabled then return end
|
if not AltSystem.State.announceEnabled then return end
|
||||||
|
|
@ -45,7 +57,7 @@ local function AnnounceRoll(rollValue, modifiers, total)
|
||||||
msg = name .. " rolled " .. rollValue .. " = " .. total
|
msg = name .. " rolled " .. rollValue .. " = " .. total
|
||||||
end
|
end
|
||||||
|
|
||||||
SendChatMessage(msg, channelDef.channel)
|
SendToChannel(msg, channelDef.channel)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Perform a roll: triggers the WoW native /roll 20 command
|
-- Perform a roll: triggers the WoW native /roll 20 command
|
||||||
|
|
@ -82,7 +94,7 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
||||||
if AltSystem.State.announceEnabled then
|
if AltSystem.State.announceEnabled then
|
||||||
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
||||||
if channelDef then
|
if channelDef then
|
||||||
SendChatMessage(GetCharacterName() .. " rolled a Critical Failure!", channelDef.channel)
|
SendToChannel(GetCharacterName() .. " rolled a Critical Failure!", channelDef.channel)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
|
|
@ -93,7 +105,7 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
||||||
if AltSystem.State.announceEnabled then
|
if AltSystem.State.announceEnabled then
|
||||||
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
||||||
if channelDef then
|
if channelDef then
|
||||||
SendChatMessage(GetCharacterName() .. " rolled a Critical Success!", channelDef.channel)
|
SendToChannel(GetCharacterName() .. " rolled a Critical Success!", channelDef.channel)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
|
|
@ -111,12 +123,16 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
||||||
|
|
||||||
local modifiers = {}
|
local modifiers = {}
|
||||||
|
|
||||||
|
local isBaseRoll = skill and skill.name == "Base roll"
|
||||||
|
|
||||||
if rollType == "attack" then
|
if rollType == "attack" then
|
||||||
-- Attack Roll = roll + skill modifier + item modifier
|
-- Attack Roll = roll + skill modifier + item modifier
|
||||||
total = rollValue + skillMod + itemMod
|
total = rollValue + skillMod + itemMod
|
||||||
|
|
||||||
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
if not isBaseRoll then
|
||||||
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
||||||
|
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
||||||
|
end
|
||||||
if itemMod ~= 0 then
|
if itemMod ~= 0 then
|
||||||
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
||||||
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
||||||
|
|
@ -131,8 +147,10 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
||||||
|
|
||||||
total = rollValue + skillMod + itemMod + defenseMod + shieldMod
|
total = rollValue + skillMod + itemMod + defenseMod + shieldMod
|
||||||
|
|
||||||
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
if not isBaseRoll then
|
||||||
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
||||||
|
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
||||||
|
end
|
||||||
if itemMod ~= 0 then
|
if itemMod ~= 0 then
|
||||||
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
||||||
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
||||||
|
|
|
||||||
2
UI.lua
2
UI.lua
|
|
@ -16,7 +16,7 @@ local function BuildSkillOptions()
|
||||||
for _, skill in ipairs(AltSystem.Data.Skills) do
|
for _, skill in ipairs(AltSystem.Data.Skills) do
|
||||||
local sign = skill.modifier >= 0 and "+" or ""
|
local sign = skill.modifier >= 0 and "+" or ""
|
||||||
local text
|
local text
|
||||||
if skill.level == "Inept" then
|
if skill.level == "Base" or skill.level == "Inept" then
|
||||||
text = skill.name .. " (" .. sign .. skill.modifier .. ")"
|
text = skill.name .. " (" .. sign .. skill.modifier .. ")"
|
||||||
else
|
else
|
||||||
text = skill.name .. " (" .. skill.level .. " " .. sign .. skill.modifier .. ")"
|
text = skill.name .. " (" .. skill.level .. " " .. sign .. skill.modifier .. ")"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue