Módulo:Info

De Wiki Gla
Revisão de 04h14min de 2 de setembro de 2025 por Gurren1 (discussão | contribs) (Criou página com '-- Módulo:Info -- Resolve metadados e skills de cada personagem local p = {} -- Paleta de cores pros marcadores local COLOR = { debuff = "#ff5252", -- vermelho atk =...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

A documentação para este módulo pode ser criada em Módulo:Info/doc

-- Módulo:Info
-- Resolve metadados e skills de cada personagem

local p = {}

-- Paleta de cores pros marcadores
local COLOR = {
  debuff = "#ff5252", -- vermelho
  atk    = "#ffcc00", -- laranja
  def    = "#64b5f6", -- azul (defesa)
  ms     = "#43a047", -- verde (move speed)
  hp     = "#42a5f5", -- azul claro (vida/shield/heal)
  sec    = "#ffcc00", -- tempo
}

-- Aplica as cores nos marcadores {{tag:valor}}
local function colorize(txt)
  if not txt or txt == "" then return "" end
  return (txt:gsub("{{(%a+):([^}]+)}}", function(tag, inner)
    local hex = COLOR[tag]
    if not hex then return "{{" .. tag .. ":" .. inner .. "}}" end
    return string.format('<span style="color:%s;">%s</span>', hex, inner)
  end))
end

-- Pega dados crus do módulo do personagem
local function loadCharacterModule(charName)
  local ok, data = pcall(function() return require("Módulo:" .. charName) end)
  if ok and type(data) == "table" then
    return data
  end
  return {}
end

-- ====== API pública ======

-- Tier
function p.getTier(frame)
  local char = frame.args[1] or frame.args.nome or (frame:getParent() and frame:getParent().args.nome) or ""
  local data = loadCharacterModule(char)
  return data.tier or ""
end

-- Tags / classes
function p.getTags(frame)
  local char = frame.args[1] or frame.args.nome or (frame:getParent() and frame:getParent().args.nome) or ""
  local data = loadCharacterModule(char)
  if not data.tags then return "" end
  return table.concat(data.tags, " / ")
end

-- Monta um JSON de skill (usado pela Predefinição:Skill)
function p.skill(frame)
  local a    = frame.args
  local m    = tonumber(a.M) or 0
  local char = a.char or (frame:getParent() and frame:getParent().args.nome) or ""
  local lang = (a.lang or (frame:getParent() and frame:getParent().args.lang) or "pt"):lower()

  local data = loadCharacterModule(char)
  local order = data.order or {}
  local key   = order[m] or ""
  local sk    = (data.skills or {})[key] or {}

  -- resolve nome e descrição
  local name = sk.name or key or ""
  local desc = ""
  if type(sk.desc) == "table" then
    desc = sk.desc[lang] or sk.desc["pt"] or ""
  else
    desc = sk.desc or ""
  end
  desc = colorize(desc)

  -- monta objeto final juntando com os números da predef
  local obj = {
    name     = name,
    icon     = a.icon or "Nada.png",
    level    = a.level or "NIVEL",
    desc     = desc,
    energy   = a.energy ~= "" and a.energy or nil,
    powerpve = a.powerpve ~= "" and a.powerpve or nil,
    powerpvp = a.powerpvp ~= "" and a.powerpvp or nil,
    cooldown = a.cooldown ~= "" and a.cooldown or nil,
    video    = a.video or "",
  }

  return mw.text.jsonEncode(obj)
end

return p