Module:Skills/Agility

From Melvor Idle
< Module:Skills
Revision as of 17:42, 5 March 2021 by Falterfire (talk | contribs) (Initial pass at creating the agility obstacle table)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.getObstacleCourseTable(frame)
  local result = ''

  result = '{| class="wikitable sortable stickyHeader"'
  result = result..'\r\n|- class="headerRow-0"'
  result = result..'!Name!!Slot!!XP!!GP!!Time!!XP/s!!GP/s!!Bonuses!!Requirements!!Cost'

  for i, obst in Shared.skpairs(SkillData.Agility.Obstacles) do
    result = result..'\r\n|-'
    result = result..'\r\n|'..obst.name..'||'..(obst.category + 1)

    --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)
    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
      table.insert(bonuses, Constants.getModifierText(bonusName, bonusValue))
    end
    if Shared.tableCount(bonuses) == 0 then
      table.insert(bonuses, '<span 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]}))
    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 = ''
  return result
end

return p