4,951
edits
Falterfire (talk | contribs) (Added agility override to item use array) |
Falterfire (talk | contribs) ((Hopefully) fixed issue with items not including Agility Obstacles as a use if no other uses existed) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
local ItemData = mw.loadData('Module:Items/data') | local ItemData = mw.loadData('Module:Items/data') | ||
local SkillData = mw.loadData('Module:Skills/data') | local SkillData = mw.loadData('Module:Skills/data') | ||
local Constants = require('Module:Constants') | |||
local Shared = require('Module:Shared') | local Shared = require('Module:Shared') | ||
local Magic = require('Module:Magic') | local Magic = require('Module:Magic') | ||
Line 11: | Line 11: | ||
local Items = require('Module:Items') | local Items = require('Module:Items') | ||
local Icons = require('Module:Icons') | local Icons = require('Module:Icons') | ||
local Agility = require('Module:Skills/Agility') | |||
local Shop = require('Module:Shop') | |||
Line 29: | Line 31: | ||
Slayer = {}, | Slayer = {}, | ||
Smithing = {'Smithing Gloves', 'Crown of Rhaelyx'}, | Smithing = {'Smithing Gloves', 'Crown of Rhaelyx'}, | ||
Thieving = {'Chapeau Noir', 'Thieving Gloves'}, | Thieving = {'Chapeau Noir', 'Thieving Gloves', 'Gloves of Silence'}, | ||
Woodcutting = {}, | Woodcutting = {}, | ||
} | } | ||
Line 60: | Line 62: | ||
} | } | ||
function p._getItemUses(item, addCategories) | function p._getItemUses(item, asList, addCategories) | ||
local useArray = {} | local useArray = {} | ||
local categoryArray = {} | local categoryArray = {} | ||
local chr = asList and '* ' or '' | |||
--Another fun one. This time getting all the different possible ways an item can be used | --Another fun one. This time getting all the different possible ways an item can be used | ||
Line 75: | Line 78: | ||
--table.insert(categoryArray, '[[Category:'..Items.getEquipmentSlotName(item.equipmentSlot)..' Slot Items]]') | --table.insert(categoryArray, '[[Category:'..Items.getEquipmentSlotName(item.equipmentSlot)..' Slot Items]]') | ||
end | end | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Combat'})) | ||
end | end | ||
if item.healsFor ~= nil then | if item.healsFor ~= nil then | ||
table.insert(categoryArray, '[[Category:Food Items]]') | table.insert(categoryArray, '[[Category:Food Items]]') | ||
table.insert(useArray, ' | table.insert(useArray, chr..'[[Food]]') | ||
end | end | ||
if item.dropTable ~= nil then | if item.dropTable ~= nil then | ||
table.insert(categoryArray, '[[Category:Openable Items]]') | table.insert(categoryArray, '[[Category:Openable Items]]') | ||
table.insert(useArray, ' | table.insert(useArray, chr..'[[Chest Drop Tables|Can Be Opened]]') | ||
end | end | ||
Line 92: | Line 95: | ||
local canRunecraft = false | local canRunecraft = false | ||
local canHerblore = false | local canHerblore = false | ||
local canAgile = false | |||
if item.trimmedItemID ~= nil then | if item.trimmedItemID ~= nil then | ||
canUpgrade = true | canUpgrade = true | ||
Line 142: | Line 146: | ||
end | end | ||
end | end | ||
--Check if Agility applies here | |||
canAgile = Shared.tableCount(Agility.getObstaclesForItem(item.id)) > 0 | |||
if canUpgrade then | if canUpgrade then | ||
if item.canUpgrade or (item.type == 'Armour' and item.canUpgrade == nil) then | if item.canUpgrade or (item.type == 'Armour' and item.canUpgrade == nil) then | ||
table.insert(categoryArray, '[[Category:Upgradeable Items]]') | table.insert(categoryArray, '[[Category:Upgradeable Items]]') | ||
end | end | ||
table.insert(useArray, ' | table.insert(useArray, chr..'[[Upgrading Items]]') | ||
end | end | ||
--Agility | --Agility | ||
if Shared.contains(itemUseArray.Agility, item.name) then | if canAgile or Shared.contains(itemUseArray.Agility, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Agility', type='skill'})) | ||
end | end | ||
--Cooking | --Cooking | ||
if item.cookedItemID ~= nil or Shared.contains(itemUseArray.Cooking, item.name) then | if item.cookedItemID ~= nil or Shared.contains(itemUseArray.Cooking, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Cooking', type='skill'})) | ||
end | end | ||
--Crafting | --Crafting | ||
if canCraft or Shared.contains(itemUseArray.Crafting, item.name) then | if canCraft or Shared.contains(itemUseArray.Crafting, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Crafting', type='skill'})) | ||
end | end | ||
--Farming | --Farming | ||
if item.grownItemID ~= nil or Shared.contains(itemUseArray.Farming, item.name) then | if item.grownItemID ~= nil or Shared.contains(itemUseArray.Farming, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Farming', type='skill'})) | ||
end | end | ||
--Firemaking | --Firemaking | ||
if item. | if SkillData.Firemaking[item.id + 1] ~= nil or Shared.contains(itemUseArray.Firemaking, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Firemaking', type='skill'})) | ||
end | end | ||
--Fishing | --Fishing | ||
if Shared.contains(itemUseArray.Fishing, item.name) then | if Shared.contains(itemUseArray.Fishing, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Fishing', type='skill'})) | ||
end | end | ||
--Fletching | --Fletching | ||
if canFletch or Shared.contains(itemUseArray.Fletching, item.name) then | if canFletch or Shared.contains(itemUseArray.Fletching, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Fletching', type='skill'})) | ||
end | end | ||
--Herblore | --Herblore | ||
if canHerblore or Shared.contains(itemUseArray.Herblore, item.name) then | if canHerblore or Shared.contains(itemUseArray.Herblore, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Herblore', type='skill'})) | ||
end | end | ||
--Mining | --Mining | ||
if Shared.contains(itemUseArray.Mining, item.name) then | if Shared.contains(itemUseArray.Mining, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Mining', type='skill'})) | ||
end | end | ||
--Prayer | --Prayer | ||
if item.prayerPoints ~= nil or Shared.contains(itemUseArray.Prayer, item.name) then | if item.prayerPoints ~= nil or Shared.contains(itemUseArray.Prayer, item.name) then | ||
if item.prayerPoints ~= nil then table.insert(categoryArray, '[[Category:Buriable Items]]') end | if item.prayerPoints ~= nil then table.insert(categoryArray, '[[Category:Buriable Items]]') end | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Prayer', type='skill'})) | ||
end | end | ||
--Runecrafting | --Runecrafting | ||
if canRunecraft or Shared.contains(itemUseArray.Runecrafting, item.name) then | if canRunecraft or Shared.contains(itemUseArray.Runecrafting, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Runecrafting', type='skill'})) | ||
end | end | ||
--Slayer | --Slayer | ||
if item.slayerCost ~= nil or Shared.contains(itemUseArray.Slayer, item.name) then | if item.slayerCost ~= nil or Shared.contains(itemUseArray.Slayer, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Slayer', type='skill'})) | ||
end | end | ||
--Smithing | --Smithing | ||
if item.type == 'Bar' or item.type == 'Ore' or Shared.contains(itemUseArray.Smithing, item.name) then | if item.type == 'Bar' or item.type == 'Ore' or Shared.contains(itemUseArray.Smithing, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Smithing', type='skill'})) | ||
end | end | ||
--Thieving | --Thieving | ||
if Shared.contains(itemUseArray.Thieving, item.name) then | if Shared.contains(itemUseArray.Thieving, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Thieving', type='skill'})) | ||
end | end | ||
--Woodcutting | --Woodcutting | ||
if Shared.contains(itemUseArray.Woodcutting, item.name) then | if Shared.contains(itemUseArray.Woodcutting, item.name) then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Woodcutting', type='skill'})) | ||
end | end | ||
--Other odds and ends: | --Other odds and ends: | ||
--Mastery Tokens are tied to 'Mastery' | --Mastery Tokens are tied to 'Mastery' | ||
if item.type == 'Token' then | if item.type == 'Token' then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Mastery'})) | ||
end | end | ||
Line 223: | Line 231: | ||
local ignoreCapes = {'Ranged Skillcape', 'Attack Skillcape', 'Strength Skillcape', 'Hitpoints Skillcape', 'Defence Skillcape'} | local ignoreCapes = {'Ranged Skillcape', 'Attack Skillcape', 'Strength Skillcape', 'Hitpoints Skillcape', 'Defence Skillcape'} | ||
if item.name == 'Max Skillcape' or item.name == 'Aorpheat's Signet Ring' or item.name == 'Cape of Completion' then | if item.name == 'Max Skillcape' or item.name == 'Aorpheat's Signet Ring' or item.name == 'Cape of Completion' then | ||
table.insert(useArray, ' | table.insert(useArray, chr..'All skills') | ||
elseif item.name == 'Magic Skillcape' then | elseif item.name == 'Magic Skillcape' then | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Magic', type='skill'})) | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({'Alt. Magic', type='skill'})) | ||
elseif Shared.contains(item.name, 'Skillcape') and not Shared.contains(ignoreCapes, item.name) then | elseif Shared.contains(item.name, 'Skillcape') and not Shared.contains(ignoreCapes, item.name) then | ||
local skillName = Shared.splitString(item.name, ' ')[1] | local skillName = Shared.splitString(item.name, ' ')[1] | ||
table.insert(useArray, | table.insert(useArray, chr..Icons.Icon({skillName, type='skill'})) | ||
end | end | ||
Line 236: | Line 244: | ||
--Special note for Charge Stone of Rhaelyx | --Special note for Charge Stone of Rhaelyx | ||
if item.name == 'Charge Stone of Rhaelyx' then | if item.name == 'Charge Stone of Rhaelyx' then | ||
table.insert(useArray, ' | table.insert(useArray, chr..'Powering '..Icons.Icon({'Crown of Rhaelyx', type='item'})) | ||
end | |||
--Some items are needed to make shop purchases | |||
local shopArray = Shop.getItemCostArray(item.id) | |||
if Shared.tableCount(shopArray) > 0 then | |||
table.insert(useArray, chr..Icons.Icon({'Shop'})) | |||
end | end | ||
local result = table.concat(useArray,'\r\n') | local result = asList and table.concat(useArray,'\r\n') or table.concat(useArray, '<br/>') | ||
if addCategories then result = result..table.concat(categoryArray, '') end | if addCategories then result = result..table.concat(categoryArray, '') end | ||
return result | return result | ||
Line 248: | Line 262: | ||
local item = Items.getItem(itemName) | local item = Items.getItem(itemName) | ||
local addCategories = false | local addCategories = false | ||
local asList = true | |||
if frame.args ~= nil then | if frame.args ~= nil then | ||
addCategories = frame.args.addCategories ~= nil and frame.args.addCategories ~= '' and frame.args.addCategories ~= 'false' | addCategories = frame.args.addCategories ~= nil and frame.args.addCategories ~= '' and frame.args.addCategories ~= 'false' | ||
asList = frame.args.addCategories == nil or frame.args.addCategories == '' or frame.args.addCategories == 'true' | |||
end | end | ||
if item == nil then | if item == nil then | ||
Line 255: | Line 271: | ||
end | end | ||
return p._getItemUses(item, addCategories) | return p._getItemUses(item, asList, addCategories) | ||
end | end | ||
Line 275: | Line 291: | ||
end | end | ||
table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Upgrade', req = rowReq, xp = xp, gp = item2.trimmedGPCost}) | table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Upgrade', req = rowReq, xp = xp, gp = item2.trimmedGPCost}) | ||
break | break | ||
end | end | ||
Line 390: | Line 390: | ||
local qty = 1 | local qty = 1 | ||
table.insert(useArray, {item = item2, qty = qty, mats = mat, skill = 'Cooking', req = rowReq, xp = xp}) | table.insert(useArray, {item = item2, qty = qty, mats = mat, skill = 'Cooking', req = rowReq, xp = xp}) | ||
end | |||
--Handle shop purchases using Module:Shop | |||
local shopUses = Shop.getItemCostArray(item.id) | |||
for i, purchase in Shared.skpairs(shopUses) do | |||
local rowReq = Shop.getRequirementString(purchase.unlockRequirements) | |||
local iconType = (purchase.contains.items ~= nil and Shared.tableCount(purchase.contains.items) > 0) and 'item' or 'upgrade' | |||
table.insert(useArray, {item = {name = purchase.name}, qty = 1, mats = purchase.cost.items, skill = 'Shop', req = rowReq, xp = 'N/A', gp = purchase.cost.gp, type = iconType}) | |||
end | end | ||
Line 405: | Line 413: | ||
return a.item.name < b.item.name | return a.item.name < b.item.name | ||
end end) | end end) | ||
local obstacles = Agility.getObstaclesForItem(item.id) | |||
local spellUseTable = p._getSpellUseTable(item) | local spellUseTable = p._getSpellUseTable(item) | ||
local result = '' | local result = '' | ||
if Shared.tableCount(useArray) == 0 then | if Shared.tableCount(useArray) == 0 and Shared.tableCount(obstacles) == 0 then | ||
if string.len(spellUseTable) > 0 then | if string.len(spellUseTable) > 0 then | ||
return '==Uses==\r\n==='..Icons.Icon({'Magic', type='skill', size='30'})..'===\r\n'..spellUseTable | return '==Uses==\r\n==='..Icons.Icon({'Magic', type='skill', size='30'})..'===\r\n'..spellUseTable | ||
Line 419: | Line 429: | ||
for i, row in pairs(useArray) do | for i, row in pairs(useArray) do | ||
local qty = row.qty ~= nil and row.qty or 1 | local qty = row.qty ~= nil and row.qty or 1 | ||
local iconType = row.type ~= nil and row.type or 'item' | |||
result = result..'\r\n|-\r\n|data-sort-value="'..row.item.name..'"|' | result = result..'\r\n|-\r\n|data-sort-value="'..row.item.name..'"|' | ||
result = result..Icons.Icon({row.item.name, type= | result = result..Icons.Icon({row.item.name, type=iconType, notext=true, size=50})..'||' | ||
if qty > 1 then result = result.."'''"..qty.."x''' " end | if qty > 1 then result = result.."'''"..qty.."x''' " end | ||
result = result..'[['..row.item.name..']]' | result = result..'[['..row.item.name..']]' | ||
Line 426: | Line 437: | ||
result = result..'||data-sort-value="Upgrade"|[[Upgrading Items|Upgrade]]' | result = result..'||data-sort-value="Upgrade"|[[Upgrading Items|Upgrade]]' | ||
elseif row.skill == 'Shop' then | elseif row.skill == 'Shop' then | ||
result = result..'||data-sort-value="Shop"| | result = result..'||data-sort-value="Shop"|'..Icons.Icon({'Shop'}) | ||
else | else | ||
result = result..'||data-sort-value="'..row.skill..'"|'..Icons.Icon({row.skill, type='skill'}) | result = result..'||data-sort-value="'..row.skill..'"|'..Icons.Icon({row.skill, type='skill'}) | ||
Line 451: | Line 462: | ||
end | end | ||
if row.gp ~= nil then result = result..'<br/>'..Icons.GP(row.gp) end | if row.gp ~= nil then result = result..'<br/>'..Icons.GP(row.gp) end | ||
end | |||
--Agility obstacles are weird and get their own section | |||
for i, obst in Shared.skpairs(obstacles) do | |||
result = result..'\r\n|-\r\n|' | |||
result = result..Icons.Icon({"Agility", type="skill", size="50", notext=true}) | |||
result = result..'||[[Agility#Obstacles|'..obst.name..']]' | |||
result = result..'||'..Icons.Icon({"Agility", type="skill"}) | |||
--Adding the requirements for the Agility Obstacle | |||
local reqArray = {} | |||
if obst.category == nil then --nil category means this is a passive pillar | |||
table.insert(reqArray, Icons._SkillReq('Agility', 99)) | |||
elseif obst.category > 0 then --Otherwise it's category * 10 | |||
table.insert(reqArray, Icons._SkillReq('Agility', obst.category * 10)) | |||
end | |||
--Then the other skill levels if any are added | |||
if obst.requirements ~= nil and obst.requirements.skillLevel ~= nil then | |||
for j, req in Shared.skpairs(obst.requirements.skillLevel) do | |||
table.insert(reqArray, Icons._SkillReq(Constants.getSkillName(req[1]), req[2])) | |||
end | |||
end | |||
result = result..'||'..table.concat(reqArray, '<br/>') | |||
--Just including 'N/A' for XP since it doesn't really apply for Agility Obstacles | |||
result = result..'||N/A' | |||
--Finally the cost | |||
local cost = obst.cost | |||
local costArray = {} | |||
if cost.gp ~= nil and cost.gp > 0 then | |||
table.insert(costArray, Icons.GP(cost.gp)) | |||
end | |||
if cost.slayerCoins ~= nil and cost.slayerCoins > 0 then | |||
table.insert(costArray, Icons.SC(cost.slayerCoins)) | |||
end | |||
for j, mat in Shared.skpairs(cost.items) do | |||
local item = Items.getItemByID(mat[1]) | |||
table.insert(costArray, Icons.Icon({item.name, type="item", qty=mat[2]})) | |||
end | |||
result = result..'||'..table.concat(costArray, '<br/>') | |||
end | end | ||