4,951
edits
Falterfire (talk | contribs) (Created initial pass at this) |
Falterfire (talk | contribs) (Added a 'getUpgradeTable' function that generates a table of all things that include a given modifier) |
||
Line 10: | Line 10: | ||
local Agility = require('Module:Skills/Agility') | local Agility = require('Module:Skills/Agility') | ||
local Shop = require('Module:Shop') | local Shop = require('Module:Shop') | ||
local Icons = require('Module:Icons') | |||
--First up, functions to get all the things in a category that have a given modifier: | --First up, functions to get all the things in a category that have a given modifier: | ||
Line 35: | Line 36: | ||
end | end | ||
local increaseVal, decreaseVal = 0, 0 | local increaseVal, decreaseVal = 0, 0 | ||
if modifiers[increaseMod] ~= nil and modifiers[increaseMod] ~= nil then | if modifiers[increaseMod] ~= nil and modifiers[increaseMod] ~= nil then | ||
Line 97: | Line 94: | ||
end) | end) | ||
return upgradeList | return upgradeList | ||
end | |||
function p._getModifierTable(modifier, skill, columnName, getOpposites) | |||
local modifierNames = {} | |||
if getOpposites then | |||
table.insert(modifierNames, 'increased'..modifier) | |||
table.insert(modifierNames, 'decreased'..modifier) | |||
else | |||
table.insert(modifierNames, modifier) | |||
end | |||
local hasOtherModifiers = false | |||
if skill == '' then | |||
skill = nil | |||
elseif type(skill) == 'string' then | |||
skill = Constants.getSkillID(skill) | |||
end | |||
local getModText = | |||
function(modifiers) | |||
local modTextArray = {} | |||
local mainModText = {} | |||
for modName, modValue in Shared.skpairs(modifiers) do | |||
if Shared.contains(modifierNames, modName) then | |||
if type(modValue) == table then | |||
for j, subVal in Shared.skpairs(modValue) do | |||
if subVal[1] == skill then | |||
table.insert(mainModText, Constants._getModifierText(modName, subVal[2])) | |||
else | |||
table.insert(modTextArray, Constants._getModifierText(modName, subVal[2])) | |||
end | |||
end | |||
else | |||
table.insert(mainModText, Constants._getModifierText(modName, modValue)) | |||
end | |||
else | |||
table.insert(modTextArray, Constants._getModifierText(modName, modValue)) | |||
end | |||
end | |||
return table.concat(mainModText, '<br/>'), table.concat(modTextArray, '<br/>') | |||
end | |||
local tableArray = {} | |||
--Going through each type of thing to add to the array | |||
local itemList = p.getItemsWithModifier(modifier, skill, getOpposites) | |||
for i, item in Shared.skpairs(itemList) do | |||
local row = {} | |||
row.name = item.name | |||
row.icon = Icons.Icon({item.name, type='item'}) | |||
row.type = 'Item' | |||
row.val = p.getModifierValue(item.modifiers, modifier, skill, getOpposites) | |||
row.modifierText, row.otherModifiers = getModText(item.modifiers) | |||
if string.len(row.otherModifiers) > 0 then | |||
hasOtherModifiers = true | |||
end | |||
table.insert(tableArray, row) | |||
end | |||
local petList = p.getPetsWithModifier(modifier, skill, getOpposites) | |||
for i, pet in Shared.skpairs(petList) do | |||
local row = {} | |||
row.name = pet.name | |||
row.icon = Icons.Icon({pet.name, type='pet'}) | |||
row.type = '[[Pets|Pet]]' | |||
row.val = p.getModifierValue(pet.modifiers, modifier, skill, getOpposites) | |||
row.modifierText, row.otherModifiers = getModText(pet.modifiers) | |||
if string.len(row.otherModifiers) > 0 then | |||
hasOtherModifiers = true | |||
end | |||
table.insert(tableArray, row) | |||
end | |||
local obstList = p.getObstaclesWithModifier(modifier, skill, getOpposites) | |||
for i, obst in Shared.skpairs(obstList) do | |||
local row = {} | |||
row.name = obst.name | |||
row.icon = Icons.Icon({'Agility', obst.name, type='skill'}) | |||
row.type = '[[Agility#Obstacles|Agility Obstacle]]' | |||
row.val = p.getModifierValue(obst.modifiers, modifier, skill, getOpposites) | |||
row.modifierText, row.otherModifiers = getModText(obst.modifiers) | |||
if string.len(row.otherModifiers) > 0 then | |||
hasOtherModifiers = true | |||
end | |||
table.insert(tableArray, row) | |||
end | |||
local upgradeList = p.getUpgradesWithModifier(modifier, skill, getOpposites) | |||
for i, upgrade in Shared.skpairs(upgradeList) do | |||
local row = {} | |||
row.name = upgrade.name | |||
row.icon = Icons.Icon({upgrade.name, type='upgrade'}) | |||
row.type = '[[Shop|Upgrade]]' | |||
row.val = p.getModifierValue(upgrade.contains.modifiers, modifier, skill, getOpposites) | |||
row.modifierText, row.otherModifiers = getModText(upgrade.contains.modifiers) | |||
if string.len(row.otherModifiers) > 0 then | |||
hasOtherModifiers = true | |||
end | |||
table.insert(tableArray, row) | |||
end | |||
local result = '{| class="mwtable sortable stickyHeader"' | |||
result = result..'\r\n|- class="headerRow-0"' | |||
result = result..'\r\n!Source!!Type!!'..columnName | |||
if hasOtherModifiers then result = result..'!!Other Modifiers' end | |||
table.sort(tableArray, function(a, b) | |||
if a.val ~= b.val then | |||
return a.val > b.val | |||
elseif a.name ~= b.name then | |||
return a.name < b.name | |||
else | |||
return a.type < b.type | |||
end | |||
end) | |||
for i, row in Shared.skpairs(tableArray) do | |||
result = result..'\r\n|-' | |||
result = result..'\r\n|data-sort-value="'..row.name..'"|'..row.icon | |||
result = result..'||'..row.type..'||data-sort-value="'..row.val..'"|'..row.modifierText | |||
if hasOtherModifiers then | |||
result = result..'||'..row.otherModifiers | |||
end | |||
end | |||
result = result..'\r\n|}' | |||
return result | |||
end | |||
function p.getModifierTable(frame) | |||
local modifier = frame.args ~= nil and frame.args[1] or frame[1] | |||
local skill = frame.args ~= nil and frame.args[2] or frame[2] | |||
local columnName = frame.args ~= nil and frame.args[3] or frame[3] | |||
local getOpposites = frame.args ~= nil and frame.args[4] or frame[4] | |||
getOpposites = getOpposites ~= nil and string.upper(getOpposites) == 'TRUE' or true | |||
return p._getModifierTable(modifier, skill, columnName, getOpposites) | |||
end | end | ||
return p | return p |