|
|
Line 2: |
Line 2: |
|
| |
|
| local MagicData = mw.loadData('Module:Magic/data') | | local MagicData = mw.loadData('Module:Magic/data') |
| local SkillData = mw.loadData('Module:Sandbox/Skills/data')
| |
|
| |
|
| local Areas = require('Module:CombatAreas') | | local Areas = require('Module:CombatAreas') |
| local Shared = require('Module:Shared') | | local Shared = require('Module:Shared') |
| local Icons = require('Module:Icons') | | local Icons = require('Module:Icons') |
| local Items = require('Module:Sandbox/Items') | | local Items = require('Module:Items') |
| local Constants = require('Module:Constants') | | local Constants = require('Module:Constants') |
|
| |
|
Line 220: |
Line 219: |
| end | | end |
|
| |
|
| -- If includeConsumes = true, then checks for Alt Magic spell resource consumptions as well as
| | function p.getSpellsForRune(runeID) |
| -- the rune cost of spells
| |
| function p.getSpellsForItem(itemID, includeConsumes) | |
| if type(includeConsumes) ~= 'boolean' then
| |
| includeConsumes = false
| |
| end
| |
| -- The superheat table is built later as & when needed
| |
| local superheatCosts, coalID = nil, nil
| |
| local spellList = {} | | local spellList = {} |
| for secName, secArray in pairs(MagicData) do | | for secName, secArray in Shared.skpairs(MagicData) do |
| for i, spell in ipairs(secArray) do | | for i, spell in pairs(secArray) do |
| local foundSpell = false | | local foundSpell = false |
| for j, req in pairs(spell.runesRequired) do | | for j, req in pairs(spell.runesRequired) do |
| if req.id == itemID then | | if req.id == runeID then |
| | table.insert(spellList, processSpell(secName, i)) |
| foundSpell = true | | foundSpell = true |
| break | | break |
| end | | end |
| end | | end |
| if not foundSpell and spell.runesRequiredAlt ~= nil then | | if spell.runesRequiredAlt ~= nil and not foundSpell then |
| for j, req in pairs(spell.runesRequiredAlt) do | | for j, req in pairs(spell.runesRequiredAlt) do |
| if req.id == itemID then | | if req.id == runeID then |
| foundSpell = true | | table.insert(spellList, processSpell(secName, i)) |
| break | | break |
| end | | end |
| end | | end |
| end
| |
| if includeConsumes and not foundSpell and spell.consumes ~= nil and spell.consumes > 0 then
| |
| -- The consumes property of Alt Magic spells is as follows:
| |
| -- 0 = Any item
| |
| -- 1 = Junk item
| |
| -- 2 = Superheat/ores with Coal
| |
| -- 3 = Superheat/ores without Coal
| |
| -- 4 = Nothing
| |
| -- 5 = Coal ore
| |
| -- We ignore 4 (no resource consumption) and 0 (as this would flag every item unhelpfully)
| |
|
| |
| -- Determine the coal ID for the first time if we need it
| |
| if coalID == nil and Shared.contains({2, 3, 5}, spell.consumes) then
| |
| local coalItem = Items.getItem('Coal Ore')
| |
| if coalItem ~= nil then
| |
| coalID = coalItem.id
| |
| end
| |
| end
| |
| if spell.consumes == 1 and Shared.contains(SkillData.Fishing.JunkItems, itemID) then
| |
| foundSpell = true
| |
| elseif spell.consumes == 2 or spell.consumes == 3 then
| |
| if superheatCosts == nil then
| |
| -- Initialize the superheatItems table
| |
| superheatCosts = {}
| |
| for j, recipe in ipairs(SkillData.Smithing.Recipes) do
| |
| if recipe.category == 0 then
| |
| -- Bar recipe
| |
| for k, itemCost in ipairs(recipe.itemCosts) do
| |
| if itemCost.id ~= coalID then
| |
| superheatCosts[itemCost.id] = true
| |
| end
| |
| end
| |
| end
| |
| end
| |
| end
| |
| local ignoreCoal = (spell.consumes == 3)
| |
| if superheatCosts[itemID] or (not ignoreCoal and itemID == coalID) then
| |
| foundSpell = true
| |
| end
| |
| elseif spell.consumes == 5 and itemID == coalID then
| |
| foundSpell = true
| |
| end
| |
| end
| |
| if foundSpell then
| |
| table.insert(spellList, processSpell(secName, i))
| |
| end | | end |
| end | | end |
Line 301: |
Line 249: |
| end) | | end) |
| return spellList | | return spellList |
| end
| |
|
| |
| -- The below function is included for backwards compatibility
| |
| function p.getSpellsForRune(runeID)
| |
| return p.getSpellsForItem(runeID, false)
| |
| end | | end |
|
| |
|