Editing Module:ItemTablesGive feedback
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 1: | Line 1: | ||
local p = {}; | local p = {}; | ||
local data = mw.loadJsonData("Data:ItemData.json") | |||
local get_cost = require("Module:ItemData")._get_cost | local get_cost = require("Module:ItemData")._get_cost | ||
local get_type = require("Module:ItemData")._get_type | local get_type = require("Module:ItemData")._get_type | ||
local commas = require("Module:Addcommas") | local commas = require("Module:Addcommas") | ||
-- Returns an array of item tables that have the same properties | |||
-- @function get_similar_items_array | |||
-- @param {array} | |||
-- @return {array of tables} | |||
local function get_similar_items_array(property) | |||
local similarItems = {} | |||
for _, v in pairs(data) do | |||
for _, value in ipairs(property) do | |||
if (v[value] ~= nil and v["Disabled"] == false and v["Name"] ~= nil and v[value] ~= "0" ) then | |||
table.insert(similarItems, v) | |||
end | |||
end | |||
end | |||
return similarItems | |||
end | |||
--- Copies original table with its children as deep as possible. Does not handle metatables. (Copy is needed because Lua passes by reference, not value) | --- Copies original table with its children as deep as possible. Does not handle metatables. (Copy is needed because Lua passes by reference, not value) | ||
| Line 83: | Line 39: | ||
end | end | ||
-- | -- local link_patterns = {} | ||
local | -- link_patterns["BonusClipSizePercent"] = { "[Aa]mmo" } | ||
-- link_patterns["CloseRangeBonusWeaponPower"] = { "[Cc]lose [Ww]eapon [Dd]amage" } | |||
-- link_patterns["BaseAttackDamagePercent"] = { "[Ww]eapon [Dd]amage" } | |||
-- link_patterns["BulletLifestealPercent"] = { "[Bb]ullet [Ll]ifesteal" } | |||
-- link_patterns["BonusHealthRegen"] = { "[Hh]ealth [Rr]egen" } | |||
-- link_patterns["BonusHealth"] = { "[Hh]ealth" } | |||
-- link_patterns["BonusFireRate"] = { "[Ff]ire [Rr]ate" } | |||
-- | |||
-- function FriendlyNames(desc) | |||
-- for link, patterns in pairs(link_patterns) do | |||
-- for i, v in ipairs(patterns) do | |||
-- local a = string.find(desc, v) | |||
-- if a then desc = link break | |||
-- end | |||
-- end | |||
-- end | |||
-- return desc | |||
-- end | |||
local friendly_to_internal = {} | |||
friendly_to_internal["ammo"] = { "BonusClipSizePercent", "BonusClipSize", "ActiveReloadPercent" } | |||
friendly_to_internal["weapon damage"] = { "BaseAttackDamagePercent", "CloseRangeBonusWeaponPower", "LongRangeBonusWeaponPower", "AttackDamageWhenShielded" } | |||
friendly_to_internal["bullet shield health"] = { "BulletShieldMaxHealth", "BulletShieldOnCast", "SaviorBulletShieldHealth", "FlyingBulletShield", "VexBarrierBulletMaxHealth" } | |||
friendly_to_internal["spirit shield health"] = { "TechShieldMaxHealth", "TechShieldOnCast", "SaviorMagicShieldHealth", "FlyingTechShield", "VexBarrierTechMaxHealth" } | |||
friendly_to_internal["bullet resist"] = { "BulletResist", "LocalBulletArmorReduction", "ReturnFireBulletResist", "BulletResistPerStack" } | |||
friendly_to_internal["bullet resist reduction"] = { "BulletArmorReduction", "BulletResistReduction" } | |||
friendly_to_internal["spirit resist"] = { "TechResist" } | |||
friendly_to_internal["spirit resist reduction"] = { "TechArmorDamageReduction", "MagicResistReduction" } | |||
friendly_to_internal["bonus health"] = { "BonusHealth" } | |||
friendly_to_internal["health regen"] = { "BonusHealthRegen" } | |||
friendly_to_internal["max health regen"] = { "HealLifePercentOutOfCombat" } | |||
friendly_to_internal["fire rate"] = { "BonusFireRate", "FireRateWhenShielded", "FireRateBonus", "FervorFireRate", "AmbushBonusFireRate", "ActiveBonusFireRate" } | |||
friendly_to_internal["fire rate slow"] = { "FireRateSlow" } | |||
friendly_to_internal["bullet velocity"] = { "BonusBulletSpeedPercent" } | |||
friendly_to_internal["spirit power"] = { "TechPower", "BonusSpirit", "SpiritPower", "BonusSpiritWithMagicShield", "ImbuedTechPower", "AmbushBonusTechPower" } | |||
friendly_to_internal["bullet lifesteal"] = { "BulletLifestealPercent", "ActiveBonusLifesteal" } | |||
friendly_to_internal["move speed"] = { "BonusMoveSpeed", "ActiveBonusMoveSpeed" } | |||
friendly_to_internal["sprint speed"] = { "BonusSprintSpeed" } | |||
friendly_to_internal["reload time"] = { "ReloadSpeedMultipler" } | |||
friendly_to_internal["stamina"] = { "Stamina" } | |||
friendly_to_internal["stamina recovery"] = { "StaminaCooldownReduction" } | |||
-- Returns a table of internal properties | -- Returns a table of internal properties | ||
| Line 108: | Line 99: | ||
"BaseAttackDamagePercent", "CloseRangeBonusWeaponPower", "LongRangeBonusWeaponPower", "AttackDamageWhenShielded", | "BaseAttackDamagePercent", "CloseRangeBonusWeaponPower", "LongRangeBonusWeaponPower", "AttackDamageWhenShielded", | ||
"TechResist", "BulletResist", | "TechResist", "BulletResist", | ||
"BonusFireRate", "FireRateWhenShielded", "FervorFireRate", "FireRateBonus", "AmbushBonusFireRate", "ActiveBonusFireRate | "BonusFireRate", "FireRateWhenShielded", "FervorFireRate", "FireRateBonus", "AmbushBonusFireRate", "ActiveBonusFireRate", "FireRateSlow", | ||
"LocalBulletArmorReduction", "ReturnFireBulletResist", "BulletArmorReduction", "BulletResistReduction", "BulletResistPerStack", | "LocalBulletArmorReduction", "ReturnFireBulletResist", "BulletArmorReduction", "BulletResistReduction", "BulletResistPerStack", | ||
"TechArmorDamageReduction", "MagicResistReduction", | "TechArmorDamageReduction", "MagicResistReduction", | ||
"BonusBulletSpeedPercent", | "BonusBulletSpeedPercent", | ||
"BulletLifestealPercent", "ActiveBonusLifesteal | "BulletLifestealPercent", "ActiveBonusLifesteal", | ||
"HealLifePercentOutOfCombat", | "HealLifePercentOutOfCombat", | ||
"ReloadSpeedMultipler", | "ReloadSpeedMultipler", | ||
"StaminaCooldownReduction" }, | |||
["m/s"] = { "BonusMoveSpeed", "ActiveBonusMoveSpeed", "BonusSprintSpeed" } | |||
"StaminaCooldownReduction" | |||
["m/s"] = { "BonusMoveSpeed", "ActiveBonusMoveSpeed", "BonusSprintSpeed | |||
} | } | ||
| Line 162: | Line 134: | ||
end | end | ||
-- Formats | -- Formats the value of the stat with a + or - | ||
-- @function signPrefix | -- @function signPrefix | ||
-- @param { | -- @param {string} | ||
-- @return {string} | -- @return {string} | ||
local function signPrefix(value) | local function signPrefix(value) | ||
local signString = "" | |||
value = value:gsub( "m", "" ) | |||
value = value:gsub("m", "") | |||
value = tonumber(value) | value = tonumber(value) | ||
if (value >= 0) then | if (value >= 0) then | ||
return "+<b>" .. value .. "</b>" | return "+<b>" .. value .. "</b>" | ||
| Line 192: | Line 157: | ||
local requirements = {} | local requirements = {} | ||
local listofKeysTable = {} | local listofKeysTable = {} | ||
local listofItems = "" | |||
local property = frame:getParent().args[1] or mw.title.getCurrentTitle().text | local property = frame:getParent().args[1] or mw.title.getCurrentTitle().text | ||
local copyVar = property | local copyVar = property | ||
listofKeysTable = friendlyNames(property) | listofKeysTable = friendlyNames(property) | ||
local filteredData = {} | |||
filteredData = get_similar_items_array(listofKeysTable) | |||
table.sort(filteredData, defaultSort()) | table.sort(filteredData, defaultSort()) | ||
local createTable = mw.html.create('table') | local createTable = mw.html.create('table') | ||
:addClass('wikitable sortable') | |||
:tag('caption'):wikitext("List of items"):done() | |||
local soulIcon = frame:expandTemplate{ title = 'Souls' } | local soulIcon = frame:expandTemplate{ title = 'Souls' } | ||
local createTableHeader = mw.html.create('tr') | local createTableHeader = mw.html.create('tr') | ||
createTableHeader | createTableHeader | ||
| Line 213: | Line 177: | ||
:tag('th'):wikitext('Category'):done() | :tag('th'):wikitext('Category'):done() | ||
:tag('th'):wikitext('Stat change'):done() | :tag('th'):wikitext('Stat change'):done() | ||
createTable:node(createTableHeader) | createTable:node(createTableHeader) | ||
-- query all the filtered items. itemName is the item table. | |||
for internalName, itemName in ipairs(filteredData) do | |||
local display = frame:expandTemplate{ | local display = frame:expandTemplate{ | ||
title = 'ItemIcon', | |||
args = { | |||
itemName["Name"] | |||
} | |||
} | } | ||
for k, t in pairs(listofKeysTable) do | |||
for | -- filter out items that: don't have the property and the value isn't zero | ||
if(itemName[t] ~= nil and itemName[t] ~= "0" ) then | |||
if( | listofItems = listofItems .. itemName["Name"] .. "<br/>" | ||
copyVar = copyVar:gsub("^%l", string.upper) | copyVar = copyVar:gsub("^%l", string.upper) | ||
local tableData = mw.html.create('tr') | local tableData = mw.html.create('tr') | ||
tableData | |||
:tag('td'):wikitext(display):done() | |||
:tag('td'):wikitext(commas._add(get_cost(itemName["Name"]))):done() | |||
:tag('td'):wikitext(get_type(itemName["Name"])):done() | |||
if (t == "LocalBulletArmorReduction") then | |||
tableData | |||
:tag('td'):wikitext("<span style=\"color:red;\">" .. signPrefix(itemName[t]) .. appendSuffix(t) .. "</span> " .. copyVar):done() | |||
else | |||
tableData | tableData | ||
:tag('td' | :tag('td'):wikitext(signPrefix(itemName[t]) .. appendSuffix(t) .. "</span> " .. copyVar):done() | ||
end | |||
table.insert(requirements, tableData) | table.insert(requirements, tableData) | ||
end | end | ||
end | end | ||
end | |||
for _, row in ipairs(requirements) do | |||
createTableHeader:node(row) | |||
end | end | ||
return tostring(createTable) --, listofItems -- this is just a string list, same thing as createTable. delete this when line when finished | |||
end | end | ||
return p | return p | ||