Module:Skills/Agility
From Melvor Idle
< Module:Skills
Revision as of 20:14, 8 March 2021 by Falterfire (talk | contribs) (Added p.getObstaclesForItem (which will be needed for Items/UseTables)
Documentation for this module may be created at Module:Skills/Agility/doc
local p = {} local ItemData = mw.loadData('Module:Items/data') local SkillData = mw.loadData('Module:Skills/data') local Constants = require('Module:Constants') local Shared = require('Module:Shared') local Items = require('Module:Items') local ItemSourceTables = require('Module:Items/SourceTables') local Icons = require('Module:Icons') function p.getObstacleByID(obstID) local result = Shared.clone(SkillData.Agility.Obstacles[obstID + 1]) return result end function p.getObstacle(name) for i, obst in Shared.skpairs(SkillData.Agility.Obstacles) do if obst.name == name then local result = Shared.clone(obst) result.id = i - 1 return result end end return nil end function p.getObstacleCourseTable(frame) local result = '' result = '{| class="wikitable sortable stickyHeader"' result = result..'\r\n|- class="headerRow-0"' result = result..'\r\n!Slot!!Name!!XP!!GP!!Time'--!!XP/s!!GP/s result = result..'!!Bonuses!!Requirements!!Cost' local catLog = {} for i, obst in Shared.skpairs(SkillData.Agility.Obstacles) do result = result..'\r\n|-' result = result..'\r\n|' if catLog[obst.category] == nil then local rowspan = obst.category > 1 and 5 or 3 result = result..'rowspan="'..rowspan..'" style="border:1px solid black"|'..(obst.category + 1)..'||' catLog[obst.category] = true end result = result..obst.name --After the name & category, doing XP, GP, Time, and rates local XP = obst.completionBonuses.xp local GP = obst.completionBonuses.gp local Time = obst.interval / 1000 result = result..'||'..XP..'||data-sort-value="'..GP..'"|'..Icons.GP(GP) result = result..'||data-sort-value="'..Time..'"|'..Shared.timeString(Time, true) --result = result..'||'..Shared.round(XP / Time, 2, 2) --result = result..'||data-sort-value="'..GP/Time..'"|'..Icons.GP(Shared.round(GP/Time, 2, 2)) local bonuses = {} --After that, adding the bonuses for bonusName, bonusValue in pairs(obst.modifiers) do if type(bonusValue) == 'table' then for j, trueBonus in pairs(bonusValue) do table.insert(bonuses, Constants.getModifierText(bonusName, trueBonus)) end else table.insert(bonuses, Constants.getModifierText(bonusName, bonusValue)) end end if Shared.tableCount(bonuses) == 0 then table.insert(bonuses, '<span style="color:red">None :(</span>') end result = result..'||'..table.concat(bonuses, '<br/>') --Grabbing requirements to create result = result..'||' if obst.category > 0 then result = result..Icons._SkillReq('Agility', obst.category * 10) end if obst.requirements ~= nil and obst.requirements.skillLevel ~= nil then for j, skillReq in Shared.skpairs(obst.requirements.skillLevel) do result = result..'<br/>'..Icons._SkillReq(Constants.getSkillName(skillReq[1]), skillReq[2]) end end --Finally, the cost local costs = {} if obst.cost.gp > 0 then table.insert(costs, Icons.GP(obst.cost.gp)) end if obst.cost.slayerCoins > 0 then table.insert(costs, Icons.SC(obst.cost.slayerCoins)) end for j, itemCost in Shared.skpairs(obst.cost.items) do local item = Items.getItemByID(itemCost[1]) table.insert(costs, Icons.Icon({item.name, type='item', qty = itemCost[2], notext=true})) end result = result..'|| data-sort-value="'..obst.cost.gp..'"|'..table.concat(costs, '<br/>') end result = result..'\r\n|}' return result end function p.getPassivePillarTable(frame) local result = '' result = '{| class="wikitable sortable stickyHeader"' result = result..'\r\n|- class="headerRow-0"' result = result..'\r\n!Name!!Bonuses!!Cost' for i, pill in Shared.skpairs(SkillData.Agility.Pillars) do result = result..'\r\n|-' result = result..'\r\n|'..pill.name --After that, adding the bonuses local bonuses = {} for bonusName, bonusValue in pairs(pill.modifiers) do if type(bonusValue) == 'table' then for j, trueBonus in pairs(bonusValue) do table.insert(bonuses, Constants.getModifierText(bonusName, trueBonus)) end else table.insert(bonuses, Constants.getModifierText(bonusName, bonusValue)) end end if Shared.tableCount(bonuses) == 0 then table.insert(bonuses, '<span style="color:red">None :(</span>') end result = result..'||'..table.concat(bonuses, '<br/>') --Finally, the cost local costs = {} if pill.cost.gp > 0 then table.insert(costs, Icons.GP(pill.cost.gp)) end if pill.cost.slayerCoins > 0 then table.insert(costs, Icons.SC(pill.cost.slayerCoins)) end for j, itemCost in Shared.skpairs(pill.cost.items) do local item = Items.getItemByID(itemCost[1]) table.insert(costs, Icons.Icon({item.name, type='item', qty = itemCost[2], notext=true})) end result = result..'|| data-sort-value="'..pill.cost.gp..'"|'..table.concat(costs, '<br/>') end result = result..'\r\n|}' return result end function p.getObstaclesForItem(itemID) local result = {} for i, obst in Shared.skpairs(SkillData.Agility.Obstacles) do for j, costLine in Shared.skpairs(obst.cost.items) do if costLine[1] == itemID then table.insert(result, obst) end end end for i, obst in Shared.skpairs(SkillData.Agility.Pillars) do for j, costLine in Shared.skpairs(obst.cost.items) do if costLine[1] == itemID then table.insert(result, obst) end end end return result end return p