Merge remote-tracking branch 'origin/stuff'

This commit is contained in:
Azumgi 2018-02-12 13:46:22 +03:00
commit 9e8bb97493
3 changed files with 181 additions and 1 deletions

View file

@ -17,6 +17,8 @@ material = [
] ]
lua = [ lua = [
"scripts/mods/vmf/functions/*"
"scripts/mods/vmf/vmf_loader" "scripts/mods/vmf/vmf_loader"
"scripts/mods/vmf/modules/dev_console" "scripts/mods/vmf/modules/dev_console"
"scripts/mods/vmf/modules/mods" "scripts/mods/vmf/modules/mods"
@ -26,5 +28,5 @@ lua = [
"scripts/mods/vmf/modules/keybindings" "scripts/mods/vmf/modules/keybindings"
"scripts/mods/vmf/modules/gui" "scripts/mods/vmf/modules/gui"
"scripts/mods/vmf/modules/vmf_options_view" "scripts/mods/vmf/modules/vmf_options_view"
"scripts/mods/vmf/modules/testing_stuff_here" "scripts/mods/vmf/modules/testing_stuff_here"
] ]

View file

@ -0,0 +1,176 @@
table.pack = function(...)
return { n = select("#", ...); ... }
end
table.combine = function(a, b)
local r = {unpack(a)}
for i = 1, #b do
r[#a + i] = b[i]
end
return r;
end
-- Check item exist in table
table.has_item = function(tbl, item)
for _, value in ipairs(tbl) do
if value == item then
return true
end
end
return false
end
table.has_item2 = function(tbl, item)
for _, value in pairs(tbl) do
if value == item then
return true
end
end
return false
end
table.index_of = function(t, o)
if type(t) ~= "table" then
return nil
end
for i,v in ipairs(t) do
if o == v then
return i
end
end
return nil
end
table.adress = function(tbl)
local str = tostring(tbl)
return string.sub(str, 8, str:len())
end
-- Serialization and deserialization
local serialization = function(key, value)
local str = ""
if type(value) == "string" then
str = str .. tostring(key) .. "=\"" .. value .. "\","
elseif type(value) == "number" then
str = str .. tostring(key) .. "=" .. tostring(value) .. ","
elseif type(value) == "boolean" then
str = str .. tostring(key) .. "="
if value then
str = str .. "true"
else
str = str .. "false"
end
str = str .. ","
elseif type(value) == "table" then
str = str .. tostring(key) .. "=" .. table.serialization(value) .. ","
end
return str
end
local deserialization = function(str)
for i = 1, string.len(str) do
local value = string.sub(str, i, i)
if value == "=" then
local key = string.sub(str, 1, i - 1)
local value = string.sub(str, i + 1, string.len(str))
-- Check key
if string.sub(key, 1, 1) == "[" then
key = string.sub(key, 3, string.len(key) - 2)
else
key = tonumber(key)
end
-- Check value
if value == "true" then
value = true
elseif value == "false" then
value = false
elseif string.sub(value, 1, 1) == "\"" then
value = string.sub(value, 2, string.len(value) - 1)
elseif string.sub(value, 1, 1) == "{" then
value = table.deserialization(value)
else
value = tonumber(value)
end
return key, value
end
end
return nil, nil
end
table.serialization = function(tbl)
local str = "{"
for key, value in ipairs(tbl) do
str = str .. serialization(key, value)
end
for key, value in pairs(tbl) do
if type(key) ~= "number" then
str = str .. serialization("[\"" .. key .. "\"]", value)
end
end
str = str .. "}"
return str
end
table.deserialization = function(str)
local tbl = {}
-- Collected data
local data = ""
-- Checks
local c_list = 0
local c_str = false
for i = 2, string.len(str) do
local before_value = string.sub(str, i - 1, i - 1)
local value = string.sub(str, i, i)
-- If not inside a list or string
if value == "," and c_list == 0 then
-- Save propety
local key, val = deserialization(data)
if key then
tbl[key] = val
end
-- Search for new propety
data = ""
else
-- Detect string type
if value == "\"" and not before_value ~= "\\" then
c_str = not c_str
end
-- Detect list type
if not c_str then
if value == "{" then
c_list = c_list + 1
elseif value == "}" then
c_list = c_list - 1
end
end
-- save value
data = data .. value
end
end
return tbl
end

View file

@ -1,6 +1,8 @@
return { return {
init = function(object) init = function(object)
dofile("scripts/mods/vmf/functions/table")
dofile("scripts/mods/vmf/modules/dev_console") dofile("scripts/mods/vmf/modules/dev_console")
dofile("scripts/mods/vmf/modules/mods") dofile("scripts/mods/vmf/modules/mods")
dofile("scripts/mods/vmf/modules/hooks") dofile("scripts/mods/vmf/modules/hooks")