Refactor and improve encounter data handling and formatting
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good

This commit is contained in:
Roman Jaroš 2025-04-19 00:41:40 +02:00
parent a32b698ebf
commit f37808207e
8 changed files with 226 additions and 83 deletions

View file

@ -1,5 +1,6 @@
local _, addon = ...
-- Parse ability information from data
local function ParseAbilities(input, delimiter)
local result = {}
local pattern = "([^" .. delimiter .. "]*)"
@ -19,37 +20,58 @@ local function ParseAbilities(input, delimiter)
end
addon.API.ParseAbilities = ParseAbilities
local function SetAbilityDescription(text, original)
local withNumbers = addon.API.FillNumbers(text, original)
return addon.API.ColorSpellNames(withNumbers)
end
addon.API.SetAbilityDescription = SetAbilityDescription
-- Replace special marks with actual numbers from original description
local function FillNumberPositionPlaceholder(text, sourceText)
local numbers = {}
local source = addon.API.ClearStringFormatMarks(sourceText)
local function SetSummaryDescription(text, original)
local withNumbers = addon.API.FillNumbers(text, original)
local lines = {}
for part in string.gmatch(withNumbers, "([^\n]+)") do
table.insert(lines, part)
for num in source:gmatch("(%d[%d,%.]*)") do
table.insert(numbers, num)
end
local description = ""
for i, line in pairs(lines) do
description = description
.. "- "
.. addon.API.ColorSpellNames(line)
.. (i == #lines and "" or "\n\n")
end
local replacedText = text:gsub("<#(%d+)%?>", function(position)
position = tonumber(position)
local n = numbers[position]
return description
if n then
if source:match("%s+" .. n .. "%s+million") then
return n .. "<mil>"
elseif source:match("%s+" .. n .. "%s+millions") then
return n .. "<mil>"
else
return n
end
end
return "?"
end)
return replacedText
end
addon.API.SetSummaryDescription = SetSummaryDescription
-- Prepare description for Encounter ability
local function FormatEncounterDescription(text, original)
local formated = FillNumberPositionPlaceholder(text, original)
formated = addon.API.ParseParagraphs(original, formated)
formated = addon.API.ColorSpellNames(formated)
-- fix [mil]
formated = string.gsub(formated, "<mil>", "mil.")
-- fix 4 s
formated = string.gsub(formated, "(%d+) s([%s%.])", "%1s%2")
return formated
end
addon.API.FormatEncounterDescription = FormatEncounterDescription
-- Return specific Encounter Ability data
local function GetEncounterAbility(abilityKey)
return addon.data.encounter[abilityKey].m or nil
end
addon.API.GetEncounterAbility = GetEncounterAbility
-- Get Encounter object
local function GetEncounter(bossKey)
return {
abilities = addon.data.encounter[bossKey] or nil,