Mudanças entre as edições de "Módulo:TesteBossYawnv2"

De Wiki Gla
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)
local normalizedName = bossName:gsub("^%l", string.upper)
    -- 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 normalizedName .. " nao encontrado"
         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: Boss não especificado." end
     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 {"Item A", "Item B"} em "Item A;Item B"
             -- 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 para esta dificuldade específica
             -- 2. Monta o Wikitexto da predefinição Reward
             local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
             local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
              
              
             -- 3. Processa e guarda o HTML final (com imagens e tooltips da Wiki)
             -- 3. PROCESSAMENTO CRUCIAL:
             -- Usamos frame:getParent() caso o preprocess precise do contexto da página
            -- 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
      
      
     -- Agora o bossData contém o HTML pronto em cada dificuldade
     -- 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)
      
      
     -- Carrega o widget
     -- Processa o Widget separadamente
     local widget = frame:preprocess("{{#widget:TesteBossYawnv3}}")
     local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}")
      
      
     return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widget .. '</div>'
    -- 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