addon/Addon/Code/EncounterDataApi.lua

86 lines
No EOL
2.5 KiB
Lua
Executable file

local _, addon = ...
-- Parse ability information from data
local function ParseAbilities(input, delimiter)
local result = {}
local pattern = "([^" .. delimiter .. "]*)"
local normalizedAbility = string.gsub(input, "||", "|???|")
local lastPos = 1
for part in string.gmatch(normalizedAbility, pattern) do
table.insert(result, part)
lastPos = lastPos + #part + 1
end
if input:sub(-1) == delimiter then
table.insert(result, "")
end
return result
end
addon.API.ParseAbilities = ParseAbilities
-- Replace special marks with actual numbers from original description
local function FillNumberPositionPlaceholder(text, sourceText)
local numbers = {}
local source = addon.API.ClearStringFormatMarks(sourceText)
for num in source:gmatch("(%d[%d,%.]*)") do
table.insert(numbers, num)
end
local replacedText = text:gsub("<#(%d+)%?>", function(position)
position = tonumber(position)
local n = numbers[position]
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
-- 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")
print(formated)
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,
overview = addon.data.encounter[bossKey .. "_summary_instance"].m or nil,
tank = addon.data.encounter[bossKey .. "_summary_tank"].m or nil,
healer = addon.data.encounter[bossKey .. "_summary_healer"].m or nil,
dps = addon.data.encounter[bossKey .. "_summary_dps"].m or nil,
}
end
addon.API.GetEncounter = GetEncounter