feat: initialise fichiers et commandes
This commit is contained in:
parent
03f4145270
commit
4f5e789dc3
7 changed files with 278 additions and 2 deletions
14
classes/beastfile.lua
Normal file
14
classes/beastfile.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local BeastFile = Object:extend()
|
||||
local DataList = require "classes.datalist"
|
||||
|
||||
function BeastFile:new(folder, name)
|
||||
self.filepath = folder .. "/" .. name
|
||||
print("Loading " .. self.filepath)
|
||||
self.datas = DataList()
|
||||
end
|
||||
|
||||
function BeastFile:prepareJson()
|
||||
return self.datas:prepareJson()
|
||||
end
|
||||
|
||||
return BeastFile
|
51
classes/datalist.lua
Normal file
51
classes/datalist.lua
Normal file
|
@ -0,0 +1,51 @@
|
|||
local Data = Object:extend()
|
||||
local DataList = Object:extend()
|
||||
|
||||
function Data.fromLine(line)
|
||||
line = utils.removeComment(line)
|
||||
if (#line == 0) then
|
||||
return nil
|
||||
end
|
||||
local command = utils.split(line, "|")
|
||||
local datas = utils.split(utils.trim(command[1]), ";")
|
||||
local args = {}
|
||||
name = utils.trim(datas[1])
|
||||
for i, v in ipairs(datas) do
|
||||
if (i > 1) then
|
||||
table.insert(utils.trim(v))
|
||||
end
|
||||
end
|
||||
local level = 0
|
||||
if (command[2] ~= nil) then
|
||||
levelString = utils.trim(command[2]);
|
||||
level = tonumber(levelString) or 0
|
||||
end
|
||||
return Data(name, args, level)
|
||||
end
|
||||
|
||||
function Data:new(name, arguments, level)
|
||||
self.name = name
|
||||
self.arguments = arguments
|
||||
self.level = level
|
||||
end
|
||||
|
||||
function DataList:new()
|
||||
self.list = {}
|
||||
for key, value in pairs(commands.getDefaults()) do
|
||||
table.insert(self.list, Data(key, value, 0))
|
||||
end
|
||||
end
|
||||
|
||||
function DataList:addLine(line)
|
||||
table.insert(self.list, Data.line(line))
|
||||
end
|
||||
|
||||
function DataList:reduce()
|
||||
--TODO
|
||||
end
|
||||
|
||||
function DataList:prepareJson()
|
||||
return self.list
|
||||
end
|
||||
|
||||
return DataList
|
|
@ -1,4 +1,5 @@
|
|||
local FolderLoader = Object:extend()
|
||||
local BeastFile = require "classes.beastfile"
|
||||
|
||||
function FolderLoader.getAllDatas(value)
|
||||
local folderLoader = FolderLoader(value)
|
||||
|
@ -12,13 +13,27 @@ function FolderLoader:new(value)
|
|||
self.data.nom = value.nom
|
||||
self.data.list = {}
|
||||
|
||||
self.files = {}
|
||||
|
||||
for _, filename in ipairs(utils.scandir(self.folder)) do
|
||||
print(filename)
|
||||
local file = utils.split(filename, ".", true)
|
||||
if (file[2] == "beast") then
|
||||
table.insert(self.files, BeastFile(self.folder, filename))
|
||||
else
|
||||
print("[WARNING] Unknown extension " .. file[2] .. " for " .. filename)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function FolderLoader:prepareJson()
|
||||
for _, file in ipairs(self.files) do
|
||||
table.insert(self.data.list, file:prepareJson())
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function FolderLoader:getDatas()
|
||||
self:prepareJson()
|
||||
return self.data
|
||||
end
|
||||
|
||||
|
|
45
libs/commands.lua
Normal file
45
libs/commands.lua
Normal file
|
@ -0,0 +1,45 @@
|
|||
local struct = require "struct"
|
||||
local commands = {}
|
||||
local defaults = {}
|
||||
|
||||
local functions = {}
|
||||
|
||||
print("Compilation des commandes")
|
||||
|
||||
local function addCommands(command, parent, default)
|
||||
commands[command] = parent
|
||||
if (default ~= nil) then
|
||||
defaults[command] = default
|
||||
end
|
||||
end
|
||||
|
||||
local function addStatCommands(name, value)
|
||||
addCommands(name .. ".base", name, value.default)
|
||||
addCommands(name .. ".lvl", name, 0)
|
||||
addCommands(name .. ".add", name, 0)
|
||||
addCommands(name .. ".bonus", name, 0)
|
||||
end
|
||||
|
||||
local function addListCommands(name, value)
|
||||
addCommands(name, name)
|
||||
addCommands(name .. ".replace", name)
|
||||
addCommands(name .. ".reset", name)
|
||||
end
|
||||
|
||||
for key, value in pairs(struct) do
|
||||
if (value.dataType == "stat") then
|
||||
addStatCommands(key, value)
|
||||
elseif (value.dataType == "list") then
|
||||
addListCommands(key, value)
|
||||
elseif (value.dataType == "comp") then
|
||||
addListCommands(key, value)
|
||||
else
|
||||
addCommands(key, key)
|
||||
end
|
||||
end
|
||||
|
||||
function functions.getDefaults()
|
||||
return defaults
|
||||
end
|
||||
|
||||
return functions
|
|
@ -1,2 +1,3 @@
|
|||
utils = require "libs.utils"
|
||||
Object = require "libs.classic"
|
||||
commands = require "libs.commands"
|
127
libs/split.lua
Normal file
127
libs/split.lua
Normal file
|
@ -0,0 +1,127 @@
|
|||
------------------------------------------------------------------
|
||||
--
|
||||
-- Author: Alexey Melnichuk <alexeymelnichuck@gmail.com>
|
||||
--
|
||||
-- Copyright (C) 2016 Alexey Melnichuk <alexeymelnichuck@gmail.com>
|
||||
--
|
||||
-- Licensed according to the included 'LICENSE' document
|
||||
--
|
||||
-- This file is part of lua-split library.
|
||||
--
|
||||
------------------------------------------------------------------
|
||||
|
||||
---
|
||||
-- @usage
|
||||
-- split = require "split"
|
||||
-- lines = split(str, '\r?\n')
|
||||
-- key, val = split.first(str, '=', true)
|
||||
-- a,b,c,d = split.unpack(str, ':', true)
|
||||
|
||||
local unpack = unpack or table.unpack
|
||||
|
||||
local function is_match_empty(pat, plain)
|
||||
return not not string.find('', pat, nil, plain)
|
||||
end
|
||||
|
||||
local function split(str, sep, plain)
|
||||
local b, res = 0, {}
|
||||
sep = sep or '%s+'
|
||||
|
||||
assert(type(sep) == 'string')
|
||||
assert(type(str) == 'string')
|
||||
|
||||
if #sep == 0 then
|
||||
for i = 1, #str do
|
||||
res[#res + 1] = string.sub(str, i, i)
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
assert(not is_match_empty(sep, plain), 'delimiter can not match empty string')
|
||||
|
||||
while b <= #str do
|
||||
local e, e2 = string.find(str, sep, b, plain)
|
||||
if e then
|
||||
res[#res + 1] = string.sub(str, b, e-1)
|
||||
b = e2 + 1
|
||||
if b > #str then res[#res + 1] = "" end
|
||||
else
|
||||
res[#res + 1] = string.sub(str, b)
|
||||
break
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
local function split_iter(str, sep, plain)
|
||||
sep = sep or '%s+'
|
||||
|
||||
assert(type(sep) == 'string')
|
||||
assert(type(str) == 'string')
|
||||
|
||||
if #sep == 0 then
|
||||
local i = 0
|
||||
return function()
|
||||
i = i + 1
|
||||
if i > #str then return end
|
||||
return (string.sub(str, i, i))
|
||||
end
|
||||
end
|
||||
|
||||
assert(not is_match_empty(sep, plain), 'delimiter can not match empty string')
|
||||
|
||||
local b, eol = 0
|
||||
return function()
|
||||
if b > #str then
|
||||
if eol then
|
||||
eol = nil
|
||||
return ""
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local e, e2 = string.find(str, sep, b, plain)
|
||||
if e then
|
||||
local s = string.sub(str, b, e-1)
|
||||
b = e2 + 1
|
||||
if b > #str then eol = true end
|
||||
return s
|
||||
end
|
||||
|
||||
local s = string.sub(str, b)
|
||||
b = #str + 1
|
||||
return s
|
||||
end
|
||||
end
|
||||
|
||||
local function usplit(...) return unpack(split(...)) end
|
||||
|
||||
local function split_first(str, sep, plain)
|
||||
sep = sep or '%s+'
|
||||
|
||||
assert(type(sep) == 'string')
|
||||
assert(type(str) == 'string')
|
||||
|
||||
if #sep == 0 then
|
||||
return string.sub(str, 1, 1), string.sub(str, 2)
|
||||
end
|
||||
|
||||
assert(not is_match_empty(sep, plain), 'delimiter can not match empty string')
|
||||
|
||||
local e, e2 = string.find(str, sep, nil, plain)
|
||||
if e then
|
||||
return string.sub(str, 1, e - 1), string.sub(str, e2 + 1)
|
||||
end
|
||||
return str
|
||||
end
|
||||
|
||||
return setmetatable({
|
||||
split = split;
|
||||
unpack = usplit;
|
||||
first = split_first;
|
||||
each = split_iter;
|
||||
},{
|
||||
__call = function(_, ...)
|
||||
return split(...)
|
||||
end
|
||||
})
|
23
struct.lua
Normal file
23
struct.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
return {
|
||||
name={contentType = "string"},
|
||||
level={contentType = "number"},
|
||||
atk= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
con= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
hab= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
int= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
sag= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
vol= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
cha= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
dis= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
rel= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
per= {dataType= "stat", modulo= 5, default= 50, max=255, min=10},
|
||||
pv= {dataType= "stat", modulo= 1, default= 12, max=9999999, min=1},
|
||||
pe= {dataType= "stat", modulo= 1, default= 12, max=9999999, min=1},
|
||||
eclat= {dataType= "stat", modulo= 1, default= 10, max=200, min=1},
|
||||
armurephy= {dataType= "stat", modulo= 1, default= 0, max=9999999, min=0},
|
||||
armurepsy= {dataType= "stat", modulo= 1, default= 0, max=9999999, min=0},
|
||||
armurespe= {dataType= "stat", modulo= 1, default= 0, max=9999999, min=0},
|
||||
armes= {datatype= "list", args=2},
|
||||
competences= {datatype= "comp"}, -- on va le gérer différemment comme du code lol sinon c'est trop relou
|
||||
armes= {datatype= "list", args=1},
|
||||
}
|
Loading…
Reference in a new issue