Refactor and improve encounter data handling and formatting
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
This commit is contained in:
parent
a32b698ebf
commit
f37808207e
8 changed files with 226 additions and 83 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue