17,101
edits
(Use printError function) |
(_getAreaRequirements: Support requirement types ItemFound, CartographyPOIDiscovery) |
||
Line 10: | Line 10: | ||
local areaMap = { | local areaMap = { | ||
["combat"] = 'combatAreas', | |||
["dungeon"] = 'dungeons', | |||
["slayer"] = 'slayerAreas' | |||
} | } | ||
function p.getArea(name) | function p.getArea(name) | ||
--There are three types of areas but the lists are pretty short so looping all of them isn't a real issue | --There are three types of areas but the lists are pretty short so looping all of them isn't a real issue | ||
for k, areaType in pairs(areaMap) do | |||
local area = GameData.getEntityByName(areaType, name) | |||
if area ~= nil then | |||
return area | |||
end | |||
end | |||
end | end | ||
function p.getAreaByID(id, type) | function p.getAreaByID(id, type) | ||
local areaType = areaMap[type] | |||
if areaType ~= nil then | |||
return GameData.getEntityByID(areaType, id) | |||
end | |||
end | end | ||
function p.getAreaFilterType(name, type) | function p.getAreaFilterType(name, type) | ||
local areaType = areaMap[type] | |||
if areaType ~= nil then | |||
return GameData.getEntityByName(areaType, name) | |||
end | |||
end | end | ||
Line 42: | Line 42: | ||
local resultArray = nil | local resultArray = nil | ||
for i, areaType in pairs(areaMap) do | |||
local areas = GameData.getEntities(areaType, checkFunc) | |||
if resultArray == nil then | |||
resultArray = areas | |||
else | |||
for k, area in ipairs(areas) do | |||
table.insert(resultArray, area) | |||
end | |||
end | |||
end | |||
if resultArray == nil then | |||
resultArray = {} | |||
end | |||
return resultArray | |||
end | end | ||
Line 75: | Line 75: | ||
for i, reqDetails in ipairs(requirements) do | for i, reqDetails in ipairs(requirements) do | ||
if reqDetails.type == 'SkillLevel' then | if reqDetails.type == 'SkillLevel' then | ||
local skillName = Constants.getSkillName(reqDetails.skillID) | |||
if skillName ~= nil then | |||
table.insert(reqArray, Icons._SkillReq(skillName, reqDetails.level)) | |||
end | |||
elseif reqDetails.type == 'SlayerItem' then | elseif reqDetails.type == 'SlayerItem' then | ||
local item = Items.getItemByID(reqDetails.itemID) | local item = Items.getItemByID(reqDetails.itemID) | ||
table.insert(reqArray, Icons.Icon({item.name, type='item'}) .. ' Equipped') | table.insert(reqArray, Icons.Icon({item.name, type='item'}) .. ' Equipped') | ||
elseif reqDetails.type == 'DungeonCompletion' then | elseif reqDetails.type == 'DungeonCompletion' then | ||
local dung = p.getAreaByID(reqDetails.dungeonID, 'dungeon') | |||
if dung ~= nil then | |||
if reqDetails.count > 1 then | |||
table.insert(reqArray, Shared.formatnum(reqDetails.count) .. 'x ' .. Icons.Icon({dung.name, type='dungeon'}) .. ' Completions') | |||
else | |||
table.insert(reqArray, Icons.Icon({dung.name, type='dungeon'}) .. ' Completed') | |||
end | |||
end | |||
elseif reqDetails.type == 'ShopPurchase' then | elseif reqDetails.type == 'ShopPurchase' then | ||
local shopPurchase = GameData.getEntityByID('shopPurchases', reqDetails.purchaseID) | |||
if shopPurchase ~= nil then | if shopPurchase ~= nil then | ||
table.insert(reqArray, Shop._getPurchaseIcon({ shopPurchase }) .. ' Purchased') | table.insert(reqArray, Shop._getPurchaseIcon({ shopPurchase }) .. ' Purchased') | ||
end | |||
elseif reqDetails.type == 'ItemFound' then | |||
local item = Items.getItemByID(reqDetails.itemID) | |||
table.insert(reqArray, 'Find ' .. Icons.Icon({item.name, type='item'})) | |||
elseif reqDetails.type == 'CartographyPOIDiscovery' then | |||
-- TODO Amend when Cartography module with helper functions exists | |||
local map = GameData.getEntityByID(GameData.skillData.Cartography.worldMaps, reqDetails.worldMapID) | |||
if map ~= nil then | |||
local poiPart = {} | |||
for j, poiID in ipairs(reqDetails.poiIDs) do | |||
local poi = GameData.getEntityByID(map.pointsOfInterest, poiID) | |||
if poi ~= nil then | |||
table.insert(poiPart, Icons.Icon({poi.name, type='poi'})) | |||
else | |||
table.insert(poiPart, Shared.printError('Could not find POI with ID ' .. poiID)) | |||
end | |||
end | |||
table.insert(reqArray, 'Discover ' .. table.concat(poiPart, ', ')) | |||
end | end | ||
else | else | ||
Line 109: | Line 127: | ||
-- Avoid repeating the same requirements twice, can happen for some dungeons e.g. Impending Darkness | -- Avoid repeating the same requirements twice, can happen for some dungeons e.g. Impending Darkness | ||
if area.entryRequirements == nil or mw.dumpObject(area.unlockRequirement) ~= mw.dumpObject(area.entryRequirements) then | if area.entryRequirements == nil or mw.dumpObject(area.unlockRequirement) ~= mw.dumpObject(area.entryRequirements) then | ||
addReqsToArray(resultArray, area.unlockRequirement) | |||
end | |||
end | end | ||