16,254
edits
(_getAreaRequirements: Crude attempt to prevent the same requirement appearing twice) |
(Use tabs instead of spaces for indentation; getMonsterAreas: Remove check for ID 1/Hill Giants - Game data no longer flags ITM afflicted monsters in this way) |
||
Line 13: | Line 13: | ||
function processArea(area, index, type) | function processArea(area, index, type) | ||
local result = Shared.clone(area) | |||
result.id = index - 1 | |||
if result.name == nil then | |||
result.name = result.areaName | |||
end | |||
result.type = type | |||
return result | |||
end | end | ||
function p.getArea(name) | function p.getArea(name) | ||
local result = nil | |||
--There are three types of areas but the lists are pretty short so looping all of them isn't a real issue | |||
for i, area in pairs(AreaData.combatAreas) do | |||
if area.name == name then | |||
return processArea(area, i, 'combat') | |||
end | |||
end | |||
for i, area in pairs(AreaData.slayerAreas) do | |||
if area.name == name then | |||
return processArea(area, i, 'slayer') | |||
end | |||
end | |||
for i, area in pairs(AreaData.dungeons) do | |||
if area.name == name then | |||
return processArea(area, i, 'dungeon') | |||
end | |||
end | |||
return nil | |||
end | end | ||
function p.getAreaByID(type, id) | function p.getAreaByID(type, id) | ||
if type == 'dungeon' then type = 'dungeons' | |||
elseif type == 'combat' then type = 'combatAreas' | |||
elseif type == 'slayer' then type = 'slayerAreas' end | |||
return processArea(AreaData[type][id + 1], id + 1) | |||
end | end | ||
function p.getAreaFilterType(type, name) | function p.getAreaFilterType(type, name) | ||
local areaName = nil | |||
if type == 'dungeon' then areas = AreaData.dungeons | |||
elseif type == 'combat' then areas = AreaData.combatAreas | |||
elseif type == 'slayer' then areas = AreaData.slayerAreas | |||
else return nil end | |||
for i, area in pairs(areas) do | |||
if type == 'dungeon' then areaName = area.name | |||
else areaName = area.areaName end | |||
if areaName == name then | |||
return processArea(area, i, type) | |||
end | |||
end | |||
return nil | |||
end | end | ||
function p.getAreas(checkFunc) | function p.getAreas(checkFunc) | ||
local resultArray = {} | |||
for i, area in Shared.skpairs(AreaData.combatAreas) do | |||
local temp = processArea(area, i, 'combat') | |||
if checkFunc(temp) then | |||
table.insert(resultArray, temp) | |||
end | |||
end | |||
for i, area in Shared.skpairs(AreaData.slayerAreas) do | |||
local temp = processArea(area, i, 'slayer') | |||
if checkFunc(temp) then | |||
table.insert(resultArray, temp) | |||
end | |||
end | |||
for i, area in Shared.skpairs(AreaData.dungeons) do | |||
local temp = processArea(area, i, 'dungeon') | |||
if checkFunc(temp) then | |||
table.insert(resultArray, temp) | |||
end | |||
end | |||
return resultArray | |||
end | end | ||
Line 157: | Line 157: | ||
function p._getAreaStat(area, statName) | function p._getAreaStat(area, statName) | ||
if statName == 'requirements' then | |||
return p._getAreaRequirements(area) | |||
elseif statName == 'areaEffectDesc' then | |||
if area.areaEffect ~= nil and area.areaEffect then | |||
local descText, subIdx = string.gsub(area.areaEffectDescription, '${effectValue}', area.areaEffectValue or 0) | |||
return descText | |||
else | |||
return 'None' | |||
end | |||
elseif statName == 'difficulty' then | |||
local result = Constants.getDifficultyString(area.difficulty[1]) | |||
if area.difficulty[2] ~= nil then | |||
result = result..' - '..Constants.getDifficultyString(area.difficulty[2]) | |||
end | |||
return result | |||
end | |||
return area[statName] | |||
end | end | ||
function p.getAreaStat(frame) | function p.getAreaStat(frame) | ||
local areaName = frame.args ~= nil and frame.args[1] or frame[1] | |||
local statName = frame.args ~= nil and frame.args[2] or frame[2] | |||
local area = p.getArea(areaName) | |||
if area == nil then | |||
return "ERROR: Could not find an area named "..areaName | |||
end | |||
return p._getAreaStat(area, statName) | |||
end | end | ||
function p.getMonsterAreas(monsterID) | function p.getMonsterAreas(monsterID) | ||
local areaArray = {} | |||
--There are three types of areas but the lists are pretty short so looping all of them isn't a real issue | |||
for i, area in pairs(AreaData.combatAreas) do | |||
if Shared.contains(area.monsters, monsterID) then | |||
table.insert(areaArray, processArea(area, i, 'combat')) | |||
end | |||
end | |||
for i, area in pairs(AreaData.slayerAreas) do | |||
if Shared.contains(area.monsters, monsterID) then | |||
table.insert(areaArray, processArea(area, i, 'slayer')) | |||
end | |||
end | |||
for i, area in pairs(AreaData.dungeons) do | |||
if Shared.contains(area.monsters, monsterID) then | |||
table.insert(areaArray, processArea(area, i, 'dungeon')) | |||
end | |||
end | |||
return areaArray | |||
end | end | ||
function p.getDungeonRequirements(frame) | function p.getDungeonRequirements(frame) | ||
local areaName = frame.args ~= nil and frame.args[1] or frame | |||
local area = p.getArea(areaName) | |||
if area == nil then | |||
return "ERROR: Could not find an area named "..areaName | |||
end | |||
local result = p._getAreaStat(area, 'requirements') | |||
if result ~= '' then | |||
result = "\r\n|-\r\n|'''Requirements:'''<br/>"..result | |||
end | |||
return result | |||
end | end | ||
return p | return p |