Mudanças entre as edições de "Módulo:TesteBossYawnv2"
Ir para navegação
Ir para pesquisar
(Criou página com 'local p = {} function p.loadBossData(bossName) local normalizedName = bossName:gsub("^%l", string.upper) local success, bossData = pcall(function() return requ...') |
|||
| Linha 2: | Linha 2: | ||
function p.loadBossData(bossName) | function p.loadBossData(bossName) | ||
-- Garante que a primeira letra seja maiúscula para o require | |||
local normalizedName = bossName:gsub("^%l", string.upper) | |||
local success, bossData = pcall(function() | local success, bossData = pcall(function() | ||
return require("Módulo:"..normalizedName.."/data") | return require("Módulo:" .. normalizedName .. "/data") | ||
end) | end) | ||
if not success then | if not success then | ||
return | return nil | ||
end | end | ||
| Linha 16: | Linha 18: | ||
function p.render(frame) | function p.render(frame) | ||
local bossName = frame.args.boss | local bossName = frame.args.boss | ||
if not bossName or bossName == "" then return "Erro: | if not bossName or bossName == "" then | ||
return "<b>Erro:</b> Parâmetro 'boss' não especificado." | |||
end | |||
local bossData = p.loadBossData(bossName) | local bossData = p.loadBossData(bossName) | ||
if not bossData then | |||
return "<b>Erro:</b> Módulo de dados para '" .. bossName .. "' não encontrado." | |||
end | |||
-- Lista das chaves de dificuldade para iterar | -- Lista das chaves de dificuldade para iterar | ||
| Linha 27: | Linha 34: | ||
if diffData and diffData.recompensasPossiveis then | if diffData and diffData.recompensasPossiveis then | ||
-- 1. Transforma | -- 1. Transforma a lista de itens em string separada por ponto e vírgula | ||
local itensStr = table.concat(diffData.recompensasPossiveis, ";") | local itensStr = table.concat(diffData.recompensasPossiveis, ";") | ||
-- 2. Monta o Wikitexto | -- 2. Monta o Wikitexto da predefinição Reward | ||
local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}" | local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}" | ||
-- 3. | -- 3. PROCESSAMENTO CRUCIAL: | ||
-- | -- Usamos o frame do módulo para expandir a predefinição em HTML real. | ||
-- Adicionamos uma string vazia para garantir que o parser trate como conteúdo de bloco se necessário. | |||
diffData.recompensasRenderizadas = frame:preprocess(wikiText) | diffData.recompensasRenderizadas = frame:preprocess(wikiText) | ||
end | end | ||
end | end | ||
-- | -- Transforma a tabela bossData (agora com o HTML das recompensas) em JSON | ||
local jsonData = mw.text.jsonEncode(bossData) | local jsonData = mw.text.jsonEncode(bossData) | ||
-- Escapa o JSON para que as aspas internas não fechem o atributo data-json=" | |||
local safeJson = mw.text.encode(jsonData) | local safeJson = mw.text.encode(jsonData) | ||
-- | -- Processa o Widget separadamente | ||
local | local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}") | ||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. | -- RETORNO FINAL: | ||
-- Montamos a string manualmente CONCATENANDO. | |||
-- IMPORTANTE: Não use frame:preprocess() aqui no retorno final, | |||
-- caso contrário o Parser da Wiki tentará ler o que está dentro do data-json e causará o erro da imagem. | |||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>' | |||
end | end | ||
return p | return p | ||
Edição das 23h33min de 9 de abril de 2026
A documentação para este módulo pode ser criada em Módulo:TesteBossYawnv2/doc
local p = {}
function p.loadBossData(bossName)
-- Garante que a primeira letra seja maiúscula para o require
local normalizedName = bossName:gsub("^%l", string.upper)
local success, bossData = pcall(function()
return require("Módulo:" .. normalizedName .. "/data")
end)
if not success then
return nil
end
return bossData
end
function p.render(frame)
local bossName = frame.args.boss
if not bossName or bossName == "" then
return "<b>Erro:</b> Parâmetro 'boss' não especificado."
end
local bossData = p.loadBossData(bossName)
if not bossData then
return "<b>Erro:</b> Módulo de dados para '" .. bossName .. "' não encontrado."
end
-- Lista das chaves de dificuldade para iterar
local diffs = {"normal", "elite", "hard"}
for _, diffKey in ipairs(diffs) do
local diffData = bossData[diffKey]
if diffData and diffData.recompensasPossiveis then
-- 1. Transforma a lista de itens em string separada por ponto e vírgula
local itensStr = table.concat(diffData.recompensasPossiveis, ";")
-- 2. Monta o Wikitexto da predefinição Reward
local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
-- 3. PROCESSAMENTO CRUCIAL:
-- Usamos o frame do módulo para expandir a predefinição em HTML real.
-- Adicionamos uma string vazia para garantir que o parser trate como conteúdo de bloco se necessário.
diffData.recompensasRenderizadas = frame:preprocess(wikiText)
end
end
-- Transforma a tabela bossData (agora com o HTML das recompensas) em JSON
local jsonData = mw.text.jsonEncode(bossData)
-- Escapa o JSON para que as aspas internas não fechem o atributo data-json="
local safeJson = mw.text.encode(jsonData)
-- Processa o Widget separadamente
local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}")
-- RETORNO FINAL:
-- Montamos a string manualmente CONCATENANDO.
-- IMPORTANTE: Não use frame:preprocess() aqui no retorno final,
-- caso contrário o Parser da Wiki tentará ler o que está dentro do data-json e causará o erro da imagem.
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>'
end
return p