Module:Equipment: Difference between revisions
Jump to navigation
Jump to search
No edit summary Tag: Manual revert |
No edit summary |
||
(28 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} | |||
local p = {} | |||
local hasc = require('Module:Paramtest').has_content | local hasc = require('Module:Paramtest').has_content | ||
Line 11: | Line 8: | ||
-- Parse item string and check if GIF icons are allowed | -- Parse item string and check if GIF icons are allowed | ||
local function parseItem(ret, itemString, equipSlot, stats, quantity) | local function parseItem(ret, itemString, equipSlot, stats, quantity, clickable) | ||
local itemString = itemString | local itemString = itemString | ||
local allowGif = false | local allowGif = false -- Set default to not allow GIF icons | ||
local itemName = "" | local itemName = "" | ||
Line 20: | Line 17: | ||
allowGif = itemString:sub(-2) == ";g" | allowGif = itemString:sub(-2) == ";g" | ||
if allowGif then | if allowGif then | ||
itemName = itemString:sub(0, -3) | |||
else | else | ||
itemName = itemString or "" | |||
end | end | ||
end | end | ||
return ret, itemName, allowGif, equipSlot, stats, quantity | return ret, itemName, allowGif, equipSlot, stats, quantity, clickable | ||
end | end | ||
-- Formats a <div> element for items | -- Formats a <div> element for items | ||
local function makeDiv(ret, itemName, allowGif, equipSlot, stats, quantity) | local function makeDiv(ret, itemName, allowGif, equipSlot, stats, quantity, clickable) | ||
local itemName = itemName | local itemName = itemName | ||
local allowGif = allowGif | local allowGif = allowGif | ||
local topDivClass = "equipment-" .. equipSlot | local topDivClass = "equipment-" .. equipSlot | ||
local names = mw.text.split(itemName, ";") | |||
if #names <= 1 or names[2] == 'g' then | |||
names[2] = itemstats.defaultVersion(names[1]) or names[1] | |||
end | |||
local imgType = allowGif == true and "gif" or "png" | local imgType = allowGif == true and "gif" or "png" | ||
-- | local equipSlotText = "" | ||
if itemName | |||
equipSlotText = "" | -- Check if the item name is not empty | ||
if itemName ~= '' then | |||
if clickable then | |||
-- Construct a clickable link | |||
equipSlotText = string.format("[[File:%s.%s|%s|link=]]", names[1], imgType, names[2]) | |||
else | |||
-- Construct a plain image without a link | |||
equipSlotText = string.format("[[File:%s.%s|link=%s]]", names[1], imgType, names[2]) | |||
end | |||
end | end | ||
Line 73: | Line 63: | ||
if quantity then | if quantity then | ||
local amt, quantclass = formatAmount(quantity) | |||
nestedDiv:tag('span') | |||
:addClass('inv-quantity-text') | |||
:addClass(quantclass) | |||
:wikitext(amt) | |||
end | |||
if stats and itemName ~= '' then | if stats and itemName ~= '' then | ||
-- Add stat-related code here if needed | |||
end | end | ||
Line 121: | Line 77: | ||
topDiv:addClass("equipment-blank") | topDiv:addClass("equipment-blank") | ||
end | end | ||
end | end | ||
Line 227: | Line 95: | ||
align = "equipment " .. align | align = "equipment " .. align | ||
local tbl = mw.html.create("table"):addClass(align):tag("tr") | |||
local ret = tbl:tag("td"):tag("div") | |||
if stats then | |||
stats = { | |||
astab = 0, | |||
aslash = 0, | |||
acrush = 0, | |||
amagic = 0, | |||
arange = 0, | |||
dstab = 0, | |||
dslash = 0, | |||
dcrush = 0, | |||
dmagic = 0, | |||
drange = 0, | |||
str = 0, | |||
rstr = 0, | |||
mdmg = 0, | |||
prayer = 0, | |||
weight = 0, | |||
ikods = {}, | |||
} | |||
end | |||
if buttons then | if buttons then | ||
Line 257: | Line 125: | ||
-- Fetch equipment and create divs | -- Fetch equipment and create divs | ||
makeDiv(parseItem(ret, args.head, "head", stats)) | makeDiv(parseItem(ret, args.head, "head", stats, nil, not yesno(args.headClickable, true))) | ||
makeDiv(parseItem(ret, args.cape, "cape", stats)) | makeDiv(parseItem(ret, args.cape, "cape", stats, nil, not yesno(args.capeClickable, true))) | ||
makeDiv(parseItem(ret, args.neck, "neck", stats)) | makeDiv(parseItem(ret, args.neck, "neck", stats, nil, not yesno(args.neckClickable, true))) | ||
makeDiv(parseItem(ret, args.ammo, "ammo", stats, args.ammoquantity)) | makeDiv(parseItem(ret, args.ammo, "ammo", stats, args.ammoquantity, not yesno(args.ammoClickable, true))) | ||
makeDiv(parseItem(ret, args.weapon, "weapon", stats, args.weaponquantity)) | makeDiv(parseItem(ret, args.weapon, "weapon", stats, args.weaponquantity, not yesno(args.weaponClickable, true))) | ||
makeDiv(parseItem(ret, args.torso, "torso", stats)) | makeDiv(parseItem(ret, args.torso, "torso", stats, nil, not yesno(args.torsoClickable, true))) | ||
makeDiv(parseItem(ret, args.shield, "shield", stats)) | makeDiv(parseItem(ret, args.shield, "shield", stats, nil, not yesno(args.shieldClickable, true))) | ||
makeDiv(parseItem(ret, args.legs, "legs", stats)) | makeDiv(parseItem(ret, args.legs, "legs", stats, nil, not yesno(args.legsClickable, true))) | ||
makeDiv(parseItem(ret, args.gloves, "gloves", stats)) | makeDiv(parseItem(ret, args.gloves, "gloves", stats, nil, not yesno(args.glovesClickable, true))) | ||
makeDiv(parseItem(ret, args.hands, "gloves", stats)) | makeDiv(parseItem(ret, args.hands, "gloves", stats, nil, not yesno(args.handsClickable, true))) | ||
makeDiv(parseItem(ret, args.boots, "boots", stats)) | makeDiv(parseItem(ret, args.boots, "boots", stats, nil, not yesno(args.bootsClickable, true))) | ||
makeDiv(parseItem(ret, args.ring, "ring", stats)) | makeDiv(parseItem(ret, args.ring, "ring", stats, nil, not yesno(args.ringClickable, true))) | ||
if stats then | |||
-- Add stat-related code here if needed | |||
end | |||
return tbl:done() | |||
end | end | ||
return p | return p |
Latest revision as of 11:29, 6 May 2024
Documentation for this module may be created at Module:Equipment/doc
local p = {}
local hasc = require('Module:Paramtest').has_content
local itemstats = require('Module:FetchItemStats')
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local GEPrice = require('Module:Exchange')._price
-- Parse item string and check if GIF icons are allowed
local function parseItem(ret, itemString, equipSlot, stats, quantity, clickable)
local itemString = itemString
local allowGif = false -- Set default to not allow GIF icons
local itemName = ""
-- Look for a ;g at the end of the string and separate them
if hasc(itemString) then
allowGif = itemString:sub(-2) == ";g"
if allowGif then
itemName = itemString:sub(0, -3)
else
itemName = itemString or ""
end
end
return ret, itemName, allowGif, equipSlot, stats, quantity, clickable
end
-- Formats a <div> element for items
local function makeDiv(ret, itemName, allowGif, equipSlot, stats, quantity, clickable)
local itemName = itemName
local allowGif = allowGif
local topDivClass = "equipment-" .. equipSlot
local names = mw.text.split(itemName, ";")
if #names <= 1 or names[2] == 'g' then
names[2] = itemstats.defaultVersion(names[1]) or names[1]
end
local imgType = allowGif == true and "gif" or "png"
local equipSlotText = ""
-- Check if the item name is not empty
if itemName ~= '' then
if clickable then
-- Construct a clickable link
equipSlotText = string.format("[[File:%s.%s|%s|link=]]", names[1], imgType, names[2])
else
-- Construct a plain image without a link
equipSlotText = string.format("[[File:%s.%s|link=%s]]", names[1], imgType, names[2])
end
end
-- Create the divs
local topDiv = ret
:tag("div")
:addClass(topDivClass)
local nestedDiv = topDiv
:tag("div")
:addClass("equipment-plinkp")
:wikitext(equipSlotText)
if quantity then
local amt, quantclass = formatAmount(quantity)
nestedDiv:tag('span')
:addClass('inv-quantity-text')
:addClass(quantclass)
:wikitext(amt)
end
if stats and itemName ~= '' then
-- Add stat-related code here if needed
end
if itemName ~= '' then
topDiv:addClass("equipment-blank")
end
end
function p.main(frame)
local args = frame:getParent().args
local buttons = yesno(args.buttons, false)
local stats = yesno(args.stats, false)
local align
if args.align == "right" then
align = "equipment-right"
elseif args.align == "center" then
align = "equipment-center"
else
align = "equipment-left"
end
-- general 'equipment' class for the whole thing
align = "equipment " .. align
local tbl = mw.html.create("table"):addClass(align):tag("tr")
local ret = tbl:tag("td"):tag("div")
if stats then
stats = {
astab = 0,
aslash = 0,
acrush = 0,
amagic = 0,
arange = 0,
dstab = 0,
dslash = 0,
dcrush = 0,
dmagic = 0,
drange = 0,
str = 0,
rstr = 0,
mdmg = 0,
prayer = 0,
weight = 0,
ikods = {},
}
end
if buttons then
ret:addClass("equipment-div-buttons")
else
ret:addClass("equipment-div")
end
-- Fetch equipment and create divs
makeDiv(parseItem(ret, args.head, "head", stats, nil, not yesno(args.headClickable, true)))
makeDiv(parseItem(ret, args.cape, "cape", stats, nil, not yesno(args.capeClickable, true)))
makeDiv(parseItem(ret, args.neck, "neck", stats, nil, not yesno(args.neckClickable, true)))
makeDiv(parseItem(ret, args.ammo, "ammo", stats, args.ammoquantity, not yesno(args.ammoClickable, true)))
makeDiv(parseItem(ret, args.weapon, "weapon", stats, args.weaponquantity, not yesno(args.weaponClickable, true)))
makeDiv(parseItem(ret, args.torso, "torso", stats, nil, not yesno(args.torsoClickable, true)))
makeDiv(parseItem(ret, args.shield, "shield", stats, nil, not yesno(args.shieldClickable, true)))
makeDiv(parseItem(ret, args.legs, "legs", stats, nil, not yesno(args.legsClickable, true)))
makeDiv(parseItem(ret, args.gloves, "gloves", stats, nil, not yesno(args.glovesClickable, true)))
makeDiv(parseItem(ret, args.hands, "gloves", stats, nil, not yesno(args.handsClickable, true)))
makeDiv(parseItem(ret, args.boots, "boots", stats, nil, not yesno(args.bootsClickable, true)))
makeDiv(parseItem(ret, args.ring, "ring", stats, nil, not yesno(args.ringClickable, true)))
if stats then
-- Add stat-related code here if needed
end
return tbl:done()
end
return p