Chat announce rolls
This commit is contained in:
parent
e17370a89f
commit
907e0464ed
5 changed files with 154 additions and 2 deletions
65
Roll.lua
65
Roll.lua
|
|
@ -5,6 +5,49 @@ AltSystem = AltSystem or {}
|
|||
|
||||
local pendingRollType = nil -- "attack" or "defense"
|
||||
|
||||
-- Get the TRP3 character first name, falling back to the WoW unit name
|
||||
local function GetCharacterName()
|
||||
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.FN and characteristics.FN ~= "" then
|
||||
return characteristics.FN
|
||||
end
|
||||
end
|
||||
return UnitName("player")
|
||||
end
|
||||
|
||||
-- Build the modifier description string for the announce message
|
||||
local function BuildModifierString(modifiers)
|
||||
local parts = {}
|
||||
for _, mod in ipairs(modifiers) do
|
||||
if mod.value ~= 0 then
|
||||
local sign = mod.value >= 0 and "+" or ""
|
||||
table.insert(parts, sign .. mod.value .. " (" .. mod.name .. ")")
|
||||
end
|
||||
end
|
||||
return table.concat(parts, " ")
|
||||
end
|
||||
|
||||
-- Announce the roll result to the selected chat channel
|
||||
local function AnnounceRoll(rollValue, modifiers, total)
|
||||
if not AltSystem.State.announceEnabled then return end
|
||||
|
||||
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
||||
if not channelDef then return end
|
||||
|
||||
local name = GetCharacterName()
|
||||
local modStr = BuildModifierString(modifiers)
|
||||
|
||||
local msg
|
||||
if modStr ~= "" then
|
||||
msg = name .. " rolled " .. rollValue .. " " .. modStr .. " = " .. total
|
||||
else
|
||||
msg = name .. " rolled " .. rollValue .. " = " .. total
|
||||
end
|
||||
|
||||
SendChatMessage(msg, channelDef.channel)
|
||||
end
|
||||
|
||||
-- Perform a roll: triggers the WoW native /roll 20 command
|
||||
function AltSystem:PerformRoll(rollType)
|
||||
pendingRollType = rollType
|
||||
|
|
@ -36,11 +79,23 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
|||
if AltSystem.ResultText then
|
||||
AltSystem.ResultText:SetText("|cffff0000Critical Failure|r")
|
||||
end
|
||||
if AltSystem.State.announceEnabled then
|
||||
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
||||
if channelDef then
|
||||
SendChatMessage(GetCharacterName() .. " rolled a Critical Failure!", channelDef.channel)
|
||||
end
|
||||
end
|
||||
return
|
||||
elseif rollValue == 20 then
|
||||
if AltSystem.ResultText then
|
||||
AltSystem.ResultText:SetText("|cff00ff00Critical Success|r")
|
||||
end
|
||||
if AltSystem.State.announceEnabled then
|
||||
local channelDef = AltSystem.AnnounceChannels[AltSystem.State.announceChannelIndex]
|
||||
if channelDef then
|
||||
SendChatMessage(GetCharacterName() .. " rolled a Critical Success!", channelDef.channel)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
|
@ -54,13 +109,17 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
|||
local total = rollValue
|
||||
local breakdown = "Roll: " .. rollValue
|
||||
|
||||
local modifiers = {}
|
||||
|
||||
if rollType == "attack" then
|
||||
-- Attack Roll = roll + skill modifier + item modifier
|
||||
total = rollValue + skillMod + itemMod
|
||||
|
||||
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
||||
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
||||
if itemMod ~= 0 then
|
||||
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
||||
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
||||
end
|
||||
breakdown = breakdown .. "\n|cffffd100Attack Total: " .. total .. "|r"
|
||||
|
||||
|
|
@ -73,12 +132,16 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
|||
total = rollValue + skillMod + itemMod + defenseMod + shieldMod
|
||||
|
||||
breakdown = breakdown .. "\nSkill: " .. FormatModifier(skillMod)
|
||||
table.insert(modifiers, { name = skill and skill.name or "Skill", value = skillMod })
|
||||
if itemMod ~= 0 then
|
||||
breakdown = breakdown .. " | Item: " .. FormatModifier(itemMod)
|
||||
table.insert(modifiers, { name = item and item.name or "Item", value = itemMod })
|
||||
end
|
||||
breakdown = breakdown .. "\nDefense: " .. FormatModifier(defenseMod)
|
||||
table.insert(modifiers, { name = defense and defense.name or "Defense", value = defenseMod })
|
||||
if shieldMod ~= 0 then
|
||||
breakdown = breakdown .. " | Shield: " .. FormatModifier(shieldMod)
|
||||
table.insert(modifiers, { name = "Shield", value = shieldMod })
|
||||
end
|
||||
breakdown = breakdown .. "\n|cff00ccffDefense Total: " .. total .. "|r"
|
||||
end
|
||||
|
|
@ -86,6 +149,8 @@ function AltSystem:CalculateAndDisplayResult(rollType, rollValue)
|
|||
if AltSystem.ResultText then
|
||||
AltSystem.ResultText:SetText(breakdown)
|
||||
end
|
||||
|
||||
AnnounceRoll(rollValue, modifiers, total)
|
||||
end
|
||||
|
||||
-- Format a modifier value with sign
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue