Módulo:Item
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Item/doc
local Item = {}
local ItemDB = require("Módulo:ItemDB")
local DEFAULT_LANG = "en"
local FALLBACK_LANG = "pt"
local DEFAULT_FRAME_SIZE = 32
local CATEGORY_LABELS = {
general_item = { en = "General Item", pt = "Item Geral" },
head = { en = "Head", pt = "Cabeça" },
body = { en = "Body", pt = "Corpo" },
legs = { en = "Legs", pt = "Perna" },
weapon = { en = "Weapon", pt = "Arma" },
accessory = { en = "Accessory", pt = "Acessório" },
emblem = { en = "Emblem", pt = "Emblema" },
ship_style = { en = "Ship Style", pt = "Estilo de Navio" },
costume = { en = "Costume", pt = "Traje" },
navigation = { en = "Navigation", pt = "Navegação" },
consumable = { en = "Consumable", pt = "Consumível" },
profile_icon = { en = "Profile Icon", pt = "Ícone de Perfil" },
gem = { en = "Gem", pt = "Gema" },
den_den_mushi = { en = "Den Den Mushi", pt = "Den Den Mushi" },
crystal = { en = "Crystal", pt = "Cristal" },
awakening_stone = { en = "Awakening Stone", pt = "Pedra do Despertar" },
headstone = { en = "Headstone", pt = "Lápide" },
coin = { en = "Coin", pt = "Moeda" },
}
local function formatDots(n)
local s = tostring(n)
local pos = #s % 3
if pos == 0 then pos = 3 end
local parts = { s:sub(1, pos) }
for i = pos + 1, #s, 3 do
parts[#parts + 1] = s:sub(i, i + 2)
end
return table.concat(parts, ".")
end
function Item.resolve(query)
if not query or query == "" then return nil end
return ItemDB.get(query)
end
function Item.getName(item, lang)
if not item or not item.names then return "" end
lang = lang or DEFAULT_LANG
return item.names[lang]
or item.names[DEFAULT_LANG]
or item.names[FALLBACK_LANG]
or item.image or ""
end
function Item.getDesc(item, lang)
if not item or not item.desc then return nil end
lang = lang or DEFAULT_LANG
return item.desc[lang]
or item.desc[DEFAULT_LANG]
or item.desc[FALLBACK_LANG]
end
function Item.getValue(item)
if not item then return nil end
return item.value
end
function Item.getLevel(item)
if not item then return nil end
return item.level
end
function Item.getImage(item)
if not item then return nil end
return item.image
end
function Item.getSpriteSize(item)
if item and item.sprite then
return item.sprite.frameWidth or DEFAULT_FRAME_SIZE,
item.sprite.frameHeight or DEFAULT_FRAME_SIZE
end
return DEFAULT_FRAME_SIZE, DEFAULT_FRAME_SIZE
end
function Item.getCategoryLabel(item, lang)
if not item or not item.category then return nil end
local entry = CATEGORY_LABELS[item.category]
if not entry then return nil end
lang = lang or DEFAULT_LANG
return entry[lang] or entry[DEFAULT_LANG] or entry[FALLBACK_LANG] or nil
end
function Item.renderOne(item, qty, lang, options)
options = options or {}
lang = lang or DEFAULT_LANG
if not item then return "" end
local nome = Item.getName(item, lang)
local desc = Item.getDesc(item, lang)
local image = Item.getImage(item)
local catLabel = Item.getCategoryLabel(item, lang)
local value = Item.getValue(item)
local level = Item.getLevel(item)
if not image then return "" end
local w, h = Item.getSpriteSize(item)
local wrapper = mw.html.create("span")
:addClass("item-wrapper")
:css("width", w .. "px")
:css("height", h .. "px")
wrapper:tag("span")
:wikitext(string.format("[[Arquivo:%s|%dx%dpx|link=]]", image, w, h))
if qty and options.showCount ~= false then
local countSpan = wrapper:tag("span"):addClass("item-count")
local isBerries = item.category == "coin" and image:lower():find("berries")
if not isBerries then
countSpan:tag("span"):addClass("item-count-x"):wikitext("x")
end
countSpan:wikitext(tostring(qty))
end
if options.showTooltip ~= false then
local tip = wrapper:tag("span"):addClass("item-tooltip")
local body = tip:tag("span"):addClass("item-tooltip-body")
body:tag("span"):addClass("item-tooltip-name"):wikitext(nome)
if catLabel then
body:tag("span"):addClass("item-tooltip-cat"):wikitext(catLabel)
end
local hasExtra = desc or value or level
if hasExtra then
body:tag("span"):addClass("item-tooltip-sep")
end
if desc then
body:tag("span"):addClass("item-tooltip-desc"):wikitext(desc)
end
if value or level then
local footer = body:tag("span"):addClass("item-tooltip-footer")
if value then
local valLabel = (lang == "pt") and "Valor: " or "Value: "
footer:tag("span"):addClass("item-tooltip-val")
:wikitext(valLabel .. formatDots(value))
end
if level then
local lvlLabel = (lang == "pt") and "Nv. " or "Lv. "
footer:tag("span"):addClass("item-tooltip-lvl")
:wikitext(lvlLabel .. tostring(level))
end
end
tip:tag("span"):addClass("item-tooltip-arrow")
end
return tostring(wrapper)
end
function Item.renderLine(itemList, lang, options)
options = options or {}
lang = lang or DEFAULT_LANG
if not itemList or #itemList == 0 then return "" end
local container = mw.html.create("div")
:addClass("reward-items")
for _, entry in ipairs(itemList) do
container:wikitext(Item.renderOne(entry.item, entry.qty, lang, options))
end
return tostring(container)
end
return Item