Editing Module:Infobox Item

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 3: Line 3:
 
local data_module_names = {
 
local data_module_names = {
 
item = 'Module:Items/data',
 
item = 'Module:Items/data',
enchantment = 'Module:Enchantment/data',
+
enchantment = 'Module:Enchantment/data'
location = 'Module:Location/data'
 
 
}
 
}
 
 
local loaded_data_modules = {}
 
local loaded_data_modules = {}
  
local headerCount = 1
+
function p.loadData (data_type)  
local labelCount = 1
 
local dataCount = 1
 
 
 
local function h()
 
local s = "header" .. headerCount
 
headerCount = headerCount + 1
 
labelCount = headerCount
 
dataCount = headerCount
 
return s
 
end
 
 
 
local function sbreak()
 
local s = "sbreak" .. headerCount
 
headerCount = headerCount + 1
 
labelCount = headerCount
 
dataCount = headerCount
 
return s
 
end
 
 
 
local function l()
 
local s = "label" .. labelCount
 
dataCount = labelCount
 
labelCount = labelCount + 1
 
headerCount = labelCount
 
return s
 
end
 
 
 
local function d()
 
local s = "data" .. dataCount
 
dataCount = dataCount + 1
 
headerCount = dataCount
 
labelCount = dataCount
 
return s
 
end
 
 
 
local function sl()
 
local s = "s" .. l{}
 
return s
 
end
 
 
 
local function sd()
 
local s = "s" .. d{}
 
return s
 
end
 
 
 
function p.loadData(data_type)  
 
 
local module_name = data_module_names[data_type]
 
local module_name = data_module_names[data_type]
 
if loaded_data_modules[module_name] == nil then
 
if loaded_data_modules[module_name] == nil then
Line 64: Line 16:
 
end
 
end
  
local function findItem(name)
+
function p.findItem (name)
local lname = name:lower()
 
 
--Remove leading and trailing spaces.
 
lname = lname:gsub('^%s*(.-)%s*$', '%1')
 
 
for key, item in pairs(p.loadData("item")) do
 
for key, item in pairs(p.loadData("item")) do
if lname == item['name']:lower() then
+
if name == item['name'] then
 
return item
 
return item
 
end
 
end
Line 77: Line 25:
 
end
 
end
  
local function getItem(id)
+
function p.getEnchantmentName (id)
return p.loadData("item")[tostring(id)]
+
return p.loadData("enchantment")[tostring(id)]['name']
 
end
 
end
  
local function getEnchantmentName(id)
+
function p.getItemName (id)
return p.loadData("enchantment")[tostring(id)]['name']
+
return p.loadData("item")[tostring(id)]['name']
 
end
 
end
  
local function getItemName(id)
+
function p.addSeparator(num)
return p.loadData("item")[tostring(id)]['name']
+
return tostring(tonumber(num)):reverse():gsub("(%d%d%d)","%1,"):gsub(",(%-?)$","%1"):reverse()
 
end
 
end
  
local function fullUrl(url)
+
function p.fullUrl(url)
local newUrl = url
+
local newUrl = ""
if url:sub(1,5) == "https" then
+
if url:sub(1,5) ~= "https" then
return newUrl
+
return url
 
end
 
end
 
 
 
if url:sub(1,1) ~= "/" then
 
if url:sub(1,1) ~= "/" then
newUrl = "/" .. newUrl
+
newUrl = "/" .. url
 
end
 
end
 
 
Line 103: Line 51:
 
end
 
end
  
local function icon(name, url, word)
+
function p.item(frame)
local s = fullUrl(url)
+
local args = frame:getParent().args
s = "[[" .. name .. "|<img src=\"" .. s
+
return p._item(args)
s = s .. "\" alt=\""  .. name .. "\" width=\"20\">"
 
if word then
 
s = s .. name
 
end
 
s = s .. "]]"
 
return s
 
 
end
 
end
  
local function itemImage(id, word)
+
function p._item(args)
local item = p.loadData("item")[tostring(id)]
+
local name = args[1]
local url = ""
+
local item = 0
if item['itemIcon'] then
+
local infobox = ""
url = item['itemIcon']
 
else
 
url = item['itemImage']
 
end
 
return icon(item['name'], url, word)
 
end
 
 
 
local function locationImage(id, word)
 
local loc = p.loadData("location")[tostring(id)]
 
local url = ""
 
if loc['locationImage'] then
 
url = loc['locationImage']
 
else
 
return "[[" .. loc['name'] .. "]]"
 
end
 
return icon(loc['name'], url, word)
 
end
 
 
 
local function img(id)
 
local url = ""
 
if item['itemIcon'] then
 
url = item['itemIcon']
 
else
 
url = item['itemImage']
 
end
 
return fullUrl(url)
 
end
 
 
 
local function addSeparator(num)
 
return tostring(tonumber(num)):reverse():gsub("(%d%d%d)","%1,"):gsub(",(%-?)$","%1"):reverse()
 
end
 
 
 
local function gatheringSource(id)
 
local s = ""
 
for key, loc in pairs(p.loadData('location')) do
 
if loc['loot'] then
 
for key2, loot in pairs(loc['loot']) do
 
if id == loot['id'] then
 
s = s .. locationImage(loc['locID'], true)
 
s = s .. "<br>"
 
end
 
end
 
end
 
end
 
return s
 
end
 
 
 
local function farmingSource(id)
 
local s = ""
 
 
 
for key, item in pairs(p.loadData('item')) do
+
item = p.findItem (name)
if item['farmingStats'] then
+
infobox = p.createInfobox(item)
for key2, yield in pairs(item['farmingStats']['yield']) do
+
return infobox
if id == yield['id'] then
 
s = s .. itemImage(item['id'], true)
 
s = s .. "<br>"
 
end
 
end
 
end
 
end
 
return s
 
end
 
 
 
local function smithingSource(id)
 
local s = ""
 
local item = getItem(id)
 
if item['skill'] == "smithing" and item['name'] ~= 'Ichor' then
 
s = '[[Smithing]]<br>'
 
end
 
return s
 
end
 
 
 
local function cookingSource(id)
 
local s = ""
 
local item = getItem(id)
 
if (item['class'] == "cooking-ingredient" and not item['ingredientTags']) or item['class'] == 'cookedFish' or item['name']=='Ashes' then
 
s = '[[Cooking]]<br>'
 
end
 
return s
 
end
 
 
 
local function runecraftingSource(id)
 
local s = ""
 
local item = getItem(id)
 
if item['class'] == "cloth" or (item['class'] == 'rune' and item['requiredResources']) then
 
s = '[[Runecrafting]]<br>'
 
end
 
return s
 
end
 
 
 
local function scrollcraftingSource(id)
 
local s = ""
 
local item = getItem(id)
 
if item['class'] == "enchanted-scroll" and item['level'] < 100 then
 
s = '[[Scrollcrafting]]<br>'
 
end
 
return s
 
end
 
 
 
 
 
local function craftingSource(id)
 
local s = ""
 
local item = getItem(id)
 
if item['craftable'] then
 
s = '[[Crafting]]<br>'
 
end
 
return s
 
end
 
 
 
local function findSource(id)
 
local s = ""
 
s = s .. gatheringSource(id)
 
s = s .. farmingSource(id)
 
s = s .. scrollcraftingSource(id)
 
s = s .. runecraftingSource(id)
 
s = s .. smithingSource(id)
 
s = s .. craftingSource(id)
 
s = s .. cookingSource(id)
 
if s:len() > 4 then
 
s = s:sub(1,s:len()-4)
 
end
 
return s
 
 
end
 
end
  
local function createInfobox(item)
+
function p.createInfobox(item)
local args = {}
+
local s = "{{Infobox Item\n"
 
local url = ""
 
local url = ""
local s = ""
+
s = s .. "|title=" .. item['name'] .. "\n"
args['autoheaders'] = "y"
 
args['subbox'] = "no"
 
args['bodystyle'] = " "
 
args['title'] = item['name']
 
 
 
 
if item['itemIcon'] then
 
if item['itemIcon'] then
Line 256: Line 76:
 
url = item['itemImage']
 
url = item['itemImage']
 
end
 
end
args['image'] = "<img src=\"" .. fullUrl(url) .. "\" width=\"150\">"
+
s = s .. "|image=" .. p.fullUrl(url) .. "\n"
 
 
 
if item['value'] then
 
if item['value'] then
args[l()] = icon('Gold', "/images/gold_coin.png")
+
s = s .. "|gold=" .. p.addSeparator(item['value']) .. "\n"
args[d()] = addSeparator(item['value'])
 
 
end
 
end
 
 
if item['tradeable'] then
+
if item['craftable'] then
args[l()] = icon('Market', "/images/ui/marketplace_icon.png")
+
s = s .. "|source=[[Crafting]]\n"
local market = require("Module:Market")["_price"]({item['name'], 1, 1})
 
if market then
 
args[d()] = addSeparator(market)
 
else
 
args[d()] = "Yes"
 
end
 
 
end
 
end
 
 
 
if item['requiredLevel'] then
 
if item['requiredLevel'] then
s = ""
+
s = s .. "|level-req ="
 
for skill, level in pairs(item['requiredLevel']) do
 
for skill, level in pairs(item['requiredLevel']) do
 
s = s .. level .. " " .. skill .. "<br>"
 
s = s .. level .. " " .. skill .. "<br>"
 
end
 
end
s = s:sub(1,s:len()-4)
+
s = s:sub(1,s:len()-4) .. "\n"
args[l()] = "Level Required"
 
args[d()] = s
 
 
end
 
end
 
args[l()] = "Source"
 
args[d()] = findSource(item['id'])
 
 
 
 
if item['heat'] then
 
if item['heat'] then
args[l()] = itemImage(2)
+
s = s .. "|heat=" .. p.addSeparator(item['heat']) .. "\n"
args[d()] = addSeparator(item['heat'])
 
 
end
 
end
 
 
local stats = item['equipmentStats']
 
if stats then
 
args[l()] = "Slot"
 
args[d()] = stats['slot']
 
 
if item['enchantmentTier'] then
 
args[l()] = "Enchantment Slots"
 
args[d()] = item['enchantmentTier']
 
end
 
 
if item['forcedEnchant'] then
 
args[l()] = "Enchantments"
 
args[d()] = "[[" .. getEnchantmentName(item['forcedEnchant']) .. "]]"
 
end
 
 
if stats['toolBoost'] then
 
s = ""
 
for key, stat in pairs(stats['toolBoost']) do
 
s = s .. stat.boost .. " "
 
s = s .. stat.skill .. "<br>"
 
end
 
s = s:sub(1,s:len()-4)
 
args[l()] = "Stats"
 
args[d()] = s
 
end
 
 
if stats['oneHanded'] == false then
 
args[l()] = "Two-handed"
 
args[d()] = "Yes"
 
end
 
 
if stats['attackSpeed'] then
 
args[l()] = "Attack Speed"
 
args[d()] = stats['attackSpeed']
 
end
 
 
 
args[h()] = "Offensive Stats"
 
 
local stat = stats['offensiveCritical']
 
if stat then
 
args[l()] = "Crit Chance"
 
args[d()] = stat['chance']
 
args[l()] = "Crit Multiplier"
 
args[d()] = stat['damageMultiplier']
 
end
 
 
stat = stats['weaponBonus']
 
if stat then
 
args[sl()] = "Str"
 
args[sd()] = stat['strength']
 
args[sl()] = "Int"
 
args[sd()] = stat['intellect']
 
args[sl()] = "Dex"
 
args[sd()] = stat['dexterity']
 
end
 
 
args[h()] = "Offensive Affinity"
 
stat = stats['offensiveDamageAffinity']
 
if stat then
 
args[sl()] = "Melee"
 
args[sd()] = stat['Melee'] and stat['Melee'] * 100 .. "%"
 
args[sl()] = "Magic"
 
args[sd()] = stat['Magic'] and stat['Magic'] * 100 .. "%"
 
args[sl()] = "Range"
 
args[sd()] = stat['Range'] and stat['Range'] * 100 .. "%"
 
args[sbreak()] = "yes"
 
 
args[sl()] = "Piercing"
 
args[sd()] = stat['Piercing'] and stat['Piercing'] * 100 .. "%"
 
args[sl()] = "Blunt"
 
args[sd()] = stat['Blunt'] and stat['Blunt'] * 100 .. "%"
 
args[sl()] = "Slashing"
 
args[sd()] = stat['Slashing'] and stat['Slashing'] * 100 .. "%"
 
args[sl()] = "Fire"
 
args[sd()] = stat['Fire'] and stat['Fire'] * 100 .. "%"
 
args[sl()] = "Ice"
 
args[sd()] = stat['Ice'] and stat['Ice'] * 100 .. "%"
 
args[sl()] = "Nature"
 
args[sd()] = stat['Nature'] and stat['Nature'] * 100 .. "%"
 
args[sl()] = "Chaos"
 
args[sd()] = stat['Chaos'] and stat['Chaos'] * 100 .. "%"
 
args[sbreak()] = "yes"
 
end
 
 
args[h()] = "Accuracy"
 
stat = stats['offensiveAccuracyAffinityRating']
 
if stat then
 
args[sl()] = "Melee"
 
args[sd()] = stat['Melee']
 
args[sl()] = "Magic"
 
args[sd()] = stat['Magic']
 
args[sl()] = "Range"
 
args[sd()] = stat['Range']
 
args[sbreak()] = "yes"
 
 
args[sl()] = "Piercing"
 
args[sd()] = stat['Piercing']
 
args[sl()] = "Blunt"
 
args[sd()] = stat['Blunt']
 
args[sl()] = "Slashing"
 
args[sd()] = stat['Slashing']
 
args[sl()] = "Fire"
 
args[sd()] = stat['Fire']
 
args[sl()] = "Ice"
 
args[sd()] = stat['Ice']
 
args[sl()] = "Nature"
 
args[sd()] = stat['Nature']
 
args[sl()] = "Chaos"
 
args[sd()] = stat['Chaos']
 
args[sbreak()] = "yes"
 
end
 
 
args[h()] = "Defensive Stats"
 
 
local stat = stats['defensiveCritical']
 
if stat then
 
args[l()] = "Crit Avoidance"
 
args[d()] = stat['chance']
 
args[l()] = "Crit Reduction"
 
args[d()] = stat['damageMultiplier']
 
end
 
 
stat = stats['armorBonus']
 
if stat then
 
args[sl()] = "Protection"
 
args[sd()] = stat['protection']
 
args[sl()] = "Resistance"
 
args[sd()] = stat['resistance']
 
args[sl()] = "Agility"
 
args[sd()] = stat['agility']
 
args[sl()] = "Stamina"
 
args[sd()] = stat['stamina']
 
end
 
 
args[h()] = "Defensive Affinity"
 
stat = stats['defensiveDamageAffinity']
 
if stat then
 
args[sl()] = "Melee"
 
args[sd()] = stat['Melee'] and stat['Melee'] * 100 .. "%"
 
args[sl()] = "Magic"
 
args[sd()] = stat['Magic'] and stat['Magic'] * 100 .. "%"
 
args[sl()] = "Range"
 
args[sd()] = stat['Range'] and stat['Range'] * 100 .. "%"
 
args[sbreak()] = "yes"
 
 
args[sl()] = "Piercing"
 
args[sd()] = stat['Piercing'] and stat['Piercing'] * 100 .. "%"
 
args[sl()] = "Blunt"
 
args[sd()] = stat['Blunt'] and stat['Blunt'] * 100 .. "%"
 
args[sl()] = "Slashing"
 
args[sd()] = stat['Slashing'] and stat['Slashing'] * 100 .. "%"
 
args[sl()] = "Fire"
 
args[sd()] = stat['Fire'] and stat['Fire'] * 100 .. "%"
 
args[sl()] = "Ice"
 
args[sd()] = stat['Ice'] and stat['Ice'] * 100 .. "%"
 
args[sl()] = "Nature"
 
args[sd()] = stat['Nature'] and stat['Nature'] * 100 .. "%"
 
args[sl()] = "Chaos"
 
args[sd()] = stat['Chaos'] and stat['Chaos'] * 100 .. "%"
 
args[sbreak()] = "yes"
 
end
 
end
 
 
args[h()] = "Augment"
 
 
 
if item['augmentationCost'] then
 
if item['augmentationCost'] then
s = ""
+
s = s .. "|aug-bonus="
 
for key, bonus in pairs(item['equipmentStats']['augmentationBonus']) do
 
for key, bonus in pairs(item['equipmentStats']['augmentationBonus']) do
 
s = s .. "+" .. bonus.value .. " "
 
s = s .. "+" .. bonus.value .. " "
 
s = s .. bonus.stat:sub(bonus.stat:find('%.')+1,bonus.stat:len()) .. "<br>"
 
s = s .. bonus.stat:sub(bonus.stat:find('%.')+1,bonus.stat:len()) .. "<br>"
 
end
 
end
s = s:sub(1,s:len()-4)
 
args[sl()] = "Aug Bonus"
 
args[sd()] = s
 
 
 
s = ""
+
s = s .. "|aug-cost="
 
for key, cost in pairs(item['augmentationCost']) do
 
for key, cost in pairs(item['augmentationCost']) do
 
s = s .. cost .. " "
 
s = s .. cost .. " "
s = s .. itemImage(key, true) .. "<br>"
+
s = s .. "{{img|" .. p.getItemName(key) .."}}" .. "<br>"
 
end
 
end
s = s:sub(1,s:len()-4)
+
s = s:sub(1,s:len()-4) .. "\n"
args[sl()] = "Aug Cost"
 
args[sd()] = s
 
 
end
 
end
 
args[h()] = "Cooking"
 
 
 
 
if item['size'] then
 
if item['size'] then
args[l()] = "Size"
+
s = s .. "|food-size=" .. item['size'] .. "\n"
args[d()] = item['size']
 
end
 
 
if item['difficulty'] then
 
args[l()] = "Difficulty"
 
args[d()] = item['difficulty']
 
 
end
 
end
 
 
 
if item['ingredientTags'] then
 
if item['ingredientTags'] then
s = ""
+
s = s .. "|food-cat="
 
for key, tag in pairs(item['ingredientTags']) do
 
for key, tag in pairs(item['ingredientTags']) do
 
s = s .. tag .. "<br>"
 
s = s .. tag .. "<br>"
 
end
 
end
s = s:sub(1,s:len()-4)
+
s = s:sub(1,s:len()-4) .. "\n"
args[l()] = "Category"
 
args[d()] = s
 
 
end
 
end
 
 
 
if item['cookingEnchantment'] then
 
if item['cookingEnchantment'] then
args[l()] = "Buff"
+
s = s .. "|food-buff =" .. p.getEnchantmentName(item['cookingEnchantment']) .. "\n"
args[d()] = getEnchantmentName(item['cookingEnchantment'])
 
 
end
 
end
 
args[h()] = "Seeds"
 
 
 
 
local farming = item['farmingStats']
 
local farming = item['farmingStats']
 
if farming then
 
if farming then
s = ""
+
s = s .. "|plot-size=" .. farming['height'] .. "x" .. farming['width'] .. "\n"
 +
s = s .. "|seed-exp=" .. farming['experience'] .. "\n"
 +
s = s .. "|harvest-time=" .. farming['time'] .. " minutes\n"
 +
s = s .. "|yield="
 
for key, yield in pairs(farming['yield']) do
 
for key, yield in pairs(farming['yield']) do
 
s = s .. yield['min'] .. "-" .. yield['max'] .. " "
 
s = s .. yield['min'] .. "-" .. yield['max'] .. " "
s = s .. itemImage(yield['id'], true)
+
s = s .. p.getItemName(yield['id'])
 
if yield['chance'] ~= 1 then
 
if yield['chance'] ~= 1 then
 
s = s .. " " .. tonumber(string.format('%.2f', yield['chance'] * 100)) .. "%"
 
s = s .. " " .. tonumber(string.format('%.2f', yield['chance'] * 100)) .. "%"
Line 517: Line 143:
 
s = s .. "<br>"
 
s = s .. "<br>"
 
end
 
end
s = s:sub(1,s:len()-4)
+
s = s:sub(1,s:len()-4) .. "\n"
args[l()] = "Level Required"
 
args[d()] = farming['requiredLevel']
 
args[l()] = "Experience"
 
args[d()] = addSeparator(farming['experience'])
 
args[l()] = "Plot Size"
 
args[d()] = farming['height'] .. "x" .. farming['width']
 
args[l()] = "Harvest Time"
 
args[d()] = farming['time'] .. " minutes"
 
args[l()] = "Yield"
 
args[d()] = s
 
end
 
 
local args2 = {}
 
 
args2['subbox'] = "yes"
 
args2['bodystyle'] = "padding: 0.5em; margin:auto; font-style:italic; font-size:110%; text-align: center"
 
args2['data1'] = item['extraTooltipInfo']
 
args[h()] = "Tooltip"
 
args[d()] = require('Module:Infobox')['infobox'](args2)
 
 
for key, data in pairs(args) do
 
if string.find(key, "data") then
 
args[key] = tostring(data)
 
end
 
 
end
 
end
 
 
return require('Module:Infobox')['infobox'](args)
+
if item['extraTooltipInfo'] then
end
+
s = s .. "|tooltip=" .. item['extraTooltipInfo'] .. "\n"
 
 
function p.item(frame)
 
local args = frame:getParent().args
 
return p._item(args)
 
end
 
 
 
function p._item(args)
 
local name = ""
 
local item = 0
 
local infobox = ""
 
 
if args[1] then
 
name = args[1]
 
else
 
name = mw.title.getCurrentTitle().text
 
 
end
 
end
 
 
item = findItem(name)
+
s = s .. "}}"
+
return s
if item == 0 then
 
return "<div style=\"color:red\"> No item named '" .. name .. "'</div>. The Module:Items/data maybe outdated."
 
end
 
 
infobox = createInfobox(item)
 
return infobox
 
 
end
 
end
  
 
return p
 
return p

Please note that all contributions to Idlescape Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see IdleScape Wiki:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)

Template used on this page: