Documentation for this module may be created at Module:Char Stat/doc
---@type Util
local util = require("Module:Util")
---@class Stat
local Stat = {}
function Stat:new(action_token, trion, attack, defense, mobility, skill, range, mechanical_operation, data_analysis,
parallel_processing, tactics, command, special_tactics, position)
---@class Stat
local res = {}
setmetatable(res, self)
self.__index = self
res.action_token = tonumber(action_token) or 0
res.trion = tonumber(trion) or 0
res.attack = tonumber(attack) or 0
res.defense = tonumber(defense) or 0
res.mobility = tonumber(mobility) or 0
res.skill = tonumber(skill) or 0
res.range = tonumber(range) or 0
res.mechanical_operation = tonumber(mechanical_operation) or 0
res.data_analysis = tonumber(data_analysis) or 0
res.parallel_processing = tonumber(parallel_processing) or 0
res.tactics = tonumber(tactics) or 0
res.command = tonumber(command) or 0
res.special_tactics = tonumber(special_tactics) or 0
res.position = position
return res
end
function Stat.from_table(table)
return Stat.new(unpack(table, 1, 13))
end
function Stat.from_data()
---@type CS_Stat
local data = require("Module:Char Stat/data")
local ret = {}
for k, t in pairs(data) do
ret[k] = Stat:new(t.action_token, t.trion, t.attack, t.defense, t.mobility, t.skill, t.range, t.mechanical_operation, t.data_analysis, t.parallel_processing, t.tactics, t.command, t.special_tactics, t.position)
---for ik, v in pairs(t) do
---ret[k][ik] = v
---end
end
return ret
end
function Stat.total(self)
local total = 0
for k, v in pairs(self) do
if type(v) == "number" then
if self.position == "Operator" and k ~= "trion" then
total = total + v
elseif self.position ~= "Operator" then
total = total + v
end
end
end
return total
end
local data = Stat.from_data()
---@param frame frame
function Stat.GetStat(frame)
local args, pargs = util.get_args_and_pargs(frame)
local name = args[1] or pargs[1] or ""
local key = args[2] or pargs[2] or "total"
local entry = data[name]
local res = {}
for k, v in pairs(entry) do
if type(v) == "number" or type(v) == "string" then
res[k] = v
end
end
res.total = entry:total()
return res[key]
end
return Stat