4,951
edits
Falterfire (talk | contribs) (Added some more exceptions to getItemSources and also right-aligned the whole thing) |
Falterfire (talk | contribs) (Add getItemUses) |
||
Line 58: | Line 58: | ||
function p.getItem(name) | function p.getItem(name) | ||
local result = nil | local result = nil | ||
name = string.gsub(name, "'", "'") | |||
for i, item in pairs(ItemData.Items) do | for i, item in pairs(ItemData.Items) do | ||
if(item.name == name) then | if(item.name == name) then | ||
Line 557: | Line 558: | ||
return p._getItemSources(item) | return p._getItemSources(item) | ||
end | |||
--Brute forcing some item uses to make things easier | |||
local itemUseArray = { | |||
Combat = {}, | |||
Cooking = {'Cooking Gloves', 'Crown of Rhaelyx'}, | |||
Crafting = {'Crown of Rhaelyx'}, | |||
Farming = {'Compost', 'Weird Gloop', 'Bob's Rake'}, | |||
Firemaking = {'Crown of Rhaelyx'}, | |||
Fishing = {'Amulet of Fishing', 'Message in a Bottle'}, | |||
Fletching = {'Crown of Rhaelyx'}, | |||
Herblore = {'Crown of Rhaelyx'}, | |||
Mining = {'Mining Gloves', 'Gem Gloves'}, | |||
Prayer = {}, | |||
Runecrafting = {'Crown of Rhaelyx'}, | |||
Slayer = {}, | |||
Smithing = {'Smithing Gloves', 'Crown of Rhaelyx'}, | |||
Thieving = {'Chapeau Noir', 'Thieving Gloves'}, | |||
Woodcutting = {}, | |||
} | |||
local potionUseArray = { | |||
[0] = 'Combat', | |||
[1] = 'Combat', | |||
[2] = 'Combat', | |||
[3] = 'Combat', | |||
[4] = 'Combat', | |||
[5] = 'Combat', | |||
[6] = 'Combat', | |||
[7] = 'Woodcutting', | |||
[8] = 'Fishing', | |||
[9] = 'Firemaking', | |||
[10] = 'Cooking', | |||
[11] = 'Mining', | |||
[12] = 'Smithing', | |||
[13] = 'Thieving', | |||
[14] = 'Farming', | |||
[15] = 'Fletching', | |||
[16] = 'Crafting', | |||
[17] = 'Runecrafting', | |||
[18] = 'Herblore', | |||
[19] = 'Combat', | |||
[20] = 'Combat', | |||
[21] = 'Combat', | |||
[22] = 'Combat', | |||
[23] = 'Combat', | |||
} | |||
function p._getItemUses(item) | |||
local useArray = {} | |||
--Another fun one. This time getting all the different possible ways an item can be used | |||
--Before anything else, if this is a potion add it to the appropriate override section | |||
if item.herbloreMasteryID ~= nil then | |||
table.insert(itemUseArray[potionUseArray[item.herbloreMasteryID]], item.name) | |||
end | |||
--First things added to the list are non-skill things that are easy to check | |||
if item.equipmentSlot ~= nil or Shared.contains(itemUseArray.Combat, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Combat'})) | |||
end | |||
if item.healsFor ~= nil then | |||
table.insert(useArray, '* [[Food]]') | |||
end | |||
if item.dropTable ~= nil then | |||
table.insert(useArray, '* [[Chest Drop Tables|Can Be Opened]]') | |||
end | |||
--Next, upgrading, crafting, herblore, fletching, and runecrafting since we have to sift through other items for these | |||
local canUpgrade = false | |||
local canCraft = false | |||
local canFletch = false | |||
local canRunecraft = false | |||
local canHerblore = false | |||
if item.trimmedItemID ~= nil then | |||
canUpgrade = true | |||
else | |||
for i, item2 in pairs(ItemData.Items) do | |||
if item2.itemsRequired ~= nil then | |||
for j, req in pairs(item2.itemsRequired) do | |||
if req[1] == item.id then | |||
canUpgrade = true | |||
break | |||
end | |||
end | |||
end | |||
if item2.craftReq ~= nil then | |||
for j, req in pairs(item2.craftReq) do | |||
if req.id == item.id then | |||
canCraft = true | |||
break | |||
end | |||
end | |||
end | |||
if item2.fletchReq ~= nil then | |||
for j, req in pairs(item2.fletchReq) do | |||
if req.id == item.id then | |||
canFletch = true | |||
break | |||
end | |||
end | |||
end | |||
if item2.runecraftReq ~= nil then | |||
for j, req in pairs(item2.runecraftReq) do | |||
if req.id == item.id then | |||
canRunecraft = true | |||
break | |||
end | |||
end | |||
end | |||
if item2.herbloreReq ~= nil then | |||
for j, req in pairs(item2.herbloreReq) do | |||
if req.id == item.id then | |||
canHerblore = true | |||
break | |||
end | |||
end | |||
end | |||
end | |||
end | |||
if canUpgrade then | |||
table.insert(useArray, '* [[Upgrading Items]]') | |||
end | |||
--Cooking | |||
if item.cookedItemID ~= nil or Shared.contains(itemUseArray.Cooking, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Cooking', type='skill'})) | |||
end | |||
--Crafting | |||
if canCraft or Shared.contains(itemUseArray.Crafting, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Crafting', type='skill'})) | |||
end | |||
--Farming | |||
if item.grownItemID ~= nil or Shared.contains(itemUseArray.Farming, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Farming', type='skill'})) | |||
end | |||
--Firemaking | |||
if item.firemakingID ~= nil or Shared.contains(itemUseArray.Firemaking, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Firemaking', type='skill'})) | |||
end | |||
--Fishing | |||
if Shared.contains(itemUseArray.Fishing, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Fishing', type='skill'})) | |||
end | |||
--Fletching | |||
if canFletch or Shared.contains(itemUseArray.Fletching, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Fletching', type='skill'})) | |||
end | |||
--Herblore | |||
if canHerblore or Shared.contains(itemUseArray.Herblore, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Herblore', type='skill'})) | |||
end | |||
--Mining | |||
if Shared.contains(itemUseArray.Mining, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Mining', type='skill'})) | |||
end | |||
--Prayer | |||
if item.prayerPoints ~= nil or Shared.contains(itemUseArray.Prayer, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Prayer', type='skill'})) | |||
end | |||
--Runecrafting | |||
if canRunecraft or Shared.contains(itemUseArray.Runecrafting, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Runecrafting', type='skill'})) | |||
end | |||
--Slayer | |||
if item.slayerCost ~= nil or Shared.contains(itemUseArray.Slayer, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Slayer', type='skill'})) | |||
end | |||
--Smithing | |||
if item.type == 'Bar' or item.type == 'Ore' or Shared.contains(itemUseArray.Smithing, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Smithing', type='skill'})) | |||
end | |||
--Thieving | |||
if Shared.contains(itemUseArray.Thieving, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Thieving', type='skill'})) | |||
end | |||
--Woodcutting | |||
if Shared.contains(itemUseArray.Woodcutting, item.name) then | |||
table.insert(useArray, '* '..Icons.Icon({'Woodcutting', type='skill'})) | |||
end | |||
--Other odds and ends: | |||
--Mastery Tokens are tied to 'Mastery' | |||
if item.type == 'Token' then | |||
table.insert(useArray, '* '..Icons.Icon({'Mastery'})) | |||
end | |||
--Skillcapes are tied to the appropriate skill | |||
--Except Max Skillcape, which is tied to all skills. (And so is the Signet Ring) | |||
--And combat skillcapes, since combat skills don't get special treatment | |||
local ignoreCapes = {'Ranged Skillcape', 'Attack Skillcape', 'Strength Skillcape', 'Hitpoints Skillcape', 'Defence Skillcape'} | |||
if item.name == 'Max Skillcape' or item.name == 'Aorpheat's Signet Ring' then | |||
table.insert(useArray, '* All skills') | |||
elseif item.name == 'Magic Skillcape' then | |||
table.insert(useArray, '* '..Icons.Icon({'Magic', type='skill'})) | |||
table.insert(useArray, '* '..Icons.Icon({'Alt. Magic', type='skill'})) | |||
elseif Shared.contains(item.name, 'Skillcape') and not Shared.contains(ignoreCapes, item.name) then | |||
local skillName = Shared.splitString(item.name, ' ')[1] | |||
table.insert(useArray, '* '..Icons.Icon({skillName, type='skill'})) | |||
end | |||
--Special note for Charge Stone of Rhaelyx | |||
if item.name == 'Charge Stone of Rhaelyx' then | |||
table.insert(useArray, '* Powering '..Icons.Icon({'Crown of Rhaelyx', type='item'})) | |||
end | |||
return table.concat(useArray,'\r\n') | |||
end | |||
function p.getItemUses(frame) | |||
local itemName = frame.args ~= nil and frame.args[1] or frame | |||
local item = p.getItem(itemName) | |||
if item == nil then | |||
return "ERROR: No item named "..itemName.." exists in the data module" | |||
end | |||
return p._getItemUses(item) | |||
end | end | ||