Module:SkillUnlocks: Difference between revisions

From Melvor Idle
No edit summary
(Lazy patch of Magic & attempt to remove entities with abyssal level requirements. Stopgap solution until alternative developed)
Line 14: Line 14:
local CombatAreas = require('Module:CombatAreas')
local CombatAreas = require('Module:CombatAreas')
local Shop = require('Module:Shop')
local Shop = require('Module:Shop')
local Magic = require('Module:Magic')
local Township = require('Module:Township')
local Township = require('Module:Township')
local GameData = require('Module:GameData')
local GameData = require('Module:GameData')
Line 922: Line 923:
local subTypeParam = args.subTypeParam
local subTypeParam = args.subTypeParam
local otherReqsFunc = args.otherReqsFunc
local otherReqsFunc = args.otherReqsFunc
local imgType = args.imgType
for i, entity in ipairs(data) do
for i, entity in ipairs(data) do
Line 930: Line 932:
processed.skillLevel = entity.level
processed.skillLevel = entity.level
processed.otherReqs = otherReqsFunc ~= nil and otherReqsFunc(entity) or {}
processed.otherReqs = otherReqsFunc ~= nil and otherReqsFunc(entity) or {}
processed.imgType = imgType
table.insert(entityList, processed)
table.insert(entityList, processed)
end
end
Line 942: Line 945:
if item.golbinRaidExclusive ~= nil and item.golbinRaidExclusive then
if item.golbinRaidExclusive ~= nil and item.golbinRaidExclusive then
return false
return false
end
if item.equipRequirements ~= nil then
for i, req in ipairs(item.equipRequirements) do
if req.type == 'AbyssalLevel' then
return false
end
end
end
end
Line 1,054: Line 1,065:


function p._addAgilityObstaclesWithSkillRequirements(entityList, skillName)
function p._addAgilityObstaclesWithSkillRequirements(entityList, skillName)
for i, obstacle in ipairs(SkillData.Agility.obstacles) do
local obstacles = GameData.getEntities(SkillData.Agility.obstacles,
function(obst)
return obst.abyssalLevel == nil
end
)
for i, obstacle in ipairs(obstacles) do
for j, req in ipairs(obstacle.skillRequirements) do
for j, req in ipairs(obstacle.skillRequirements) do
-- Does this obstacle require the current skill?
-- Does this obstacle require the current skill?
Line 1,083: Line 1,099:


function p._addSpells(entityList, skillName)
function p._addSpells(entityList, skillName)
-- Alt. Magic is in a separate function
local SPELL_TYPES = {'standardSpells', 'auroraSpells', 'curseSpells', 'ancientSpells', 'archaicSpells'}
-- Iterate through each spell type and each spell within that type
-- Iterate through each spell type and each spell within that type
for i, spellType in ipairs(SPELL_TYPES) do
for i, spellBookDef in ipairs(Magic.spellBooks) do
entityList = p._addEntities({entityList, GameData.rawData[spellType], type='spell', subTypeParam='spellBook', otherReqsFunc=p._getSpellReqs})
local bookID = spellBookDef.id
-- Alt. Magic is in a separate function
if bookID ~= 'altMagic' then
local entList = GameData.getEntities(Magic.getSpellsBySpellBook(bookID),
function(spell)
return spell.abyssalLevel == nil
end
)
entityList = p._addEntities({entityList, entList, type='spell', subTypeParam='spellBook', imgType = spellBookDef.imgType, otherReqsFunc=p._getSpellReqs})
end
end
end
Line 1,095: Line 1,117:


function p._addAltMagic(entityList, skillName)
function p._addAltMagic(entityList, skillName)
entityList = p._addEntities({entityList, GameData.getSkillData('melvorD:Magic')['altSpells'], type='spell', subType='altMagic', otherReqsFunc=p._getSpellReqs})
local entList = GameData.getEntities(Magic.getSpellsBySpellBook('altMagic'),
function(spell)
return spell.abyssalLevel == nil
end
)
entityList = p._addEntities({entityList, entList, type='spell', subType='altMagic', imgType = 'spell', otherReqsFunc=p._getSpellReqs})
return entityList
return entityList
end
end


function p._addPrayers(entityList, skillName)
function p._addPrayers(entityList, skillName)
entityList = p._addEntities({entityList, GameData.rawData.prayers, type='prayer', subType='prayer'})
local entList = GameData.getEntities('prayers',
function(prayer)
return prayer.abyssalLevel == nil
end
)
entityList = p._addEntities({entityList, entList, type='prayer', subType='prayer'})
return entityList
return entityList
end
end


function p._addFiremakingActions(entityList, skillName)
function p._addFiremakingActions(entityList, skillName)
for i, fireLog in ipairs(SkillData.Firemaking.logs) do
local fireLogs = GameData.getEntities(SkillData.Firemaking.logs,
function(log)
return log.abyssalLevel == nil
end
)
for i, fireLog in ipairs(fireLogs) do
local processed = {}
local processed = {}
local logItem = Items.getItemByID(fireLog.logID)
local logItem = Items.getItemByID(fireLog.logID)
Line 1,120: Line 1,157:


function p._addThievingTargets(entityList, skillName)
function p._addThievingTargets(entityList, skillName)
entityList = p._addEntities({entityList, SkillData.Thieving.npcs, type='thieving', subType='npc'})
local entList = GameData.getEntities(SkillData.Thieving.npcs,
function(npc)
return npc.abyssalLevel == nil
end
)
entityList = p._addEntities({entityList, entList, type='thieving', subType='npc'})
return entityList
return entityList
end
end


function p._addConstellations(entityList, skillName)
function p._addConstellations(entityList, skillName)
entityList = p._addEntities({entityList, SkillData.Astrology.recipes, type='constellation', subType='constellation'})
local entList = GameData.getEntities(SkillData.Astrology.recipes,
function(const)
return const.abyssalLevel == nil
end
)
entityList = p._addEntities({entityList, entList, type='constellation', subType='constellation'})
return entityList
return entityList
end
end
Line 1,224: Line 1,271:
sourceData = SkillData.Farming.recipes
sourceData = SkillData.Farming.recipes
end
end
sourceData = GameData.getEntities(sourceData,
function(obj)
return obj.abyssalLevel == nil
end
)
for i, node in ipairs(sourceData) do
for i, node in ipairs(sourceData) do
Line 1,256: Line 1,309:
function p._addRecipes(entityList, skillName)
function p._addRecipes(entityList, skillName)
-- Figure out what to look up based on the skill
-- Figure out what to look up based on the skill
local sourceData = SkillData[skillName].recipes
local sourceData = GameData.getEntities(SkillData[skillName].recipes,
function(rec)
return rec.abyssalLevel == nil
end
)
local sameRecipeAndProduct = false
local sameRecipeAndProduct = false
if skillName == 'Herblore' then
if skillName == 'Herblore' then
Line 1,378: Line 1,435:
-- Icon overrides
-- Icon overrides
local iconType = entity.entityType
local iconType = entity.imgType or entity.entityType
local iconLink = entity.entityName
local iconLink = entity.entityName
local iconText = entity.entityName
local iconText = entity.entityName
Line 1,385: Line 1,442:
if entity.entityType == 'slayerArea' then
if entity.entityType == 'slayerArea' then
iconType = 'combatArea'
iconType = 'combatArea'
end
if entity.entityType == 'spell' and (entity.subType == 'aurora' or entity.subType == 'curse') then
iconType = entity.subType
end
end
if entity.entityType == 'gathering' then
if entity.entityType == 'gathering' then
Line 1,503: Line 1,557:
    -- Then by subtype
    -- Then by subtype
elseif aSubTypeSort ~= bSubTypeSort then
elseif aSubTypeSort ~= bSubTypeSort then
     return aSubTypeSort < bSubTypeSort
     return (aSubTypeSort or '') < (bSubTypeSort or '')
-- And finally by name
-- And finally by name
else
else