Module:Decoration

From Fap CEO

Documentation for this module may be created at Module:Decoration/doc

local p = {}
local deco =mw.loadData('Module:Decoration/data')

function range(a, b, step)
  if not b then
    b = a
    a = 1
  end
  step = step or 1
  local f =
    step > 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue <= b then return nextvalue end
      end or
    step < 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue >= b then return nextvalue end
      end or
      function(_, lastvalue) return lastvalue end
  return f, nil, a - step
end

function bonus(data,step)
    local bonus = data.bonus
    local op = data.operation
    local bonusi = 0
    local c = 0
    if  (type(data.bonusi) == "string" and string.match(data.bonusi, "every")~="every") then return data.bonusi
    elseif (type(data.bonusi) == "string" and string.match(data.bonusi, "every")) then 
        bonusi= data.bonusi:gsub("every","")
        bonusi = tonumber(bonusi)
        if step%bonusi==0 then 
            for i in range(0,step+1) do
                if i%bonusi==0 then c=c+1 end end
            return c..op 
        else return "/" end
    elseif (type(data.bonusi) ~= "number" and type(data.bonusi) ~= "boolean" and type(data.bonusi) ~= "nil")then
        for i, j in pairs(data.bonusi) do
            -- It increases the Bonus by starting Bonus every matching level from the table.
            if step == 0 then
              return bonus..op
            end
            if j == (step + 1) then
              return (bonus + ((i - 1) * bonus))..op
            end
            --if  (type(j) == "string" and step == 0) then return j end
            --if j==step then return (bonus+(j*step))..op
        end
        return "/" 
    else
        bonusi=data.bonusi
        return (bonus+(bonusi*step))..op
    end
    
end

function check(num)
    if num == nil then return "Please insert data to [[Module:Decoration/data]]"
    end
    return num
end

function p.infobox(frame)
    local name = mw.title.getCurrentTitle().text
    local char_data=deco[name]
    if char_data == nil then return "<br>Please insert data to [[Module:Decoration/data]]." end
    local data = {}
    local infobox = {
        image = frame:expandTemplate {title = 'Decoration images'}, 
        benefit = char_data.benefit,
        max_level = char_data.maxlvl
    }
    table.insert(data, frame:expandTemplate { title = 'Decoration info', args = infobox })
    table.insert(data, frame:expandTemplate { title = 'Clear'})
    return table.concat(data, '\n')
end

function p.stats(frame)
    local name =mw.title.getCurrentTitle().text
    local deco_data = deco[name]
    if deco_data == nil then return "Please insert data to [[Module:Decoration/data]]" end
    local data = {
        '{| class="wikitable" style="float: left; text-align: center; width:100%;"',
        '|-',
        '! LvL',
        '! Bonus',
        '! Prestige',
        '! Cost',
        '|-'
    }
    for i in range(0,deco_data.maxlvl-1) do
        if (i+1)==deco_data.maxlvl then num = (i+1).." MAX LVL" else num = i+1 end
        table.insert(data, '| '..num)
        table.insert(data, '| '..bonus(deco_data,i))
        table.insert(data, '| '..deco_data.prestige+(deco_data.prestigei*i))
        table.insert(data, '| '..check(deco_data.cost[i+1]))
        table.insert(data, '|-')
    end
    table.insert(data, '|}')
    for i, j in pairs(data) do mw.log(j) end
    return table.concat(data, '\n')
end

function p.list(frame)
    return ""
end

function p.sum (frame)
    local s = 0
    local name =mw.title.getCurrentTitle().text
    local deco_data = deco[name]
    for k, v in pairs (deco_data.cost) do
        if type(v) == 'number' then   
            s = s +v
        end
    end
    return s
end

return p