globalStorages = {}
playerStorages = {}
function table.serialize(t, depth) -- credits Summ, I've just tweaked it some.
local depth = depth or 0
local ret, first = '\n' .. (' '):rep(depth) .. '{\n', true
for k, v in pairs(t) do
if not first then
ret = ret .. ',\n'
end
ret = ret .. (' '):rep(depth + 1)
if type(k) == 'number' then
ret = ret .. '[' .. k .. '] = '
elseif type(k) == 'string' and t[k] ~= nil then
ret = ret .. '["' .. tostring(k):gsub('"', '\\"') .. '"] = '
else
error('Unhandled key type')
end
if type(v) == 'number' then
ret = ret .. v
elseif type(v) == 'string' then
ret = ret .. '"'.. v ..'"'
elseif type(v) == 'table' then
ret = ret .. table.serialize(v, depth + 1)
elseif type(v) == 'boolean' or type(v) == 'nil' then
ret = ret .. (v == true and 'true' or v == false and 'false' or 'nil')
else
error('Unhandled value type')
end
first = false
end
ret = ret .. '\n' .. (' '):rep(depth) .. '}'
return ret
end
function saveGlobalStorages()
local file = io.open("data/storages/global.lua", "w")
file:write('globalStorages =' .. table.serialize(globalStorages))
file:close()
end
function loadGlobalStorages()
dofile("data/storages/global.lua")
end
function isGlobalStorageDataInUse(key)
return getGlobalStorageData(key) and true or false
end
function getGlobalStorageData(key)
if globalStorages[key] ~= nil then
local value = globalStorages[key]
if type(value) == "number" then
return tonumber(value)
elseif type(value) == "string" then
return tostring(value)
else
return value
end
else
return false
end
end
function setGlobalStorageData(key, value, asType)
if asType == "number" then
globalStorages[key] = tonumber(value)
elseif asType == "string" then
globalStorages[key] = tostring(value)
elseif type(value) == "table" or type(value) == "boolean" then
globalStorages[key] = value
else
print("cannot set a non table value without a definition")
end
end
function savePlayerStorages()
local file = io.open("data/storages/players.lua", "w")
file:write('playerStorages =' .. table.serialize(playerStorages))
file:close()
end
function loadPlayerStorages()
dofile("data/storages/players.lua")
end
function isPlayerStorageDataInUse(player, key)
if type(player) == "userdata" then
player = player:getName()
end
return getPlayerStorageData(player, key) and true or false
end
function getPlayerStorageData(player, key)
if type(player) == "userdata" then
player = player:getName()
end
if playerStorages[player][key] ~= nil then
local value = playerStorages[player][key]
if type(value) == "number" then
return tonumber(value)
elseif type(value) == "string" then
return tostring(value)
else
return value
end
else
return false
end
end
function setPlayerStorageData(player --[[this can be either userdata or playername]], key, value, asType)
if type(player) == "userdata" then
player = player:getName()
end
if playerStorages[player] == nil then
playerStorages[player] = {}
end
if asType == "number" then
playerStorages[player][key] = tonumber(value)
elseif asType == "string" then
playerStorages[player][key] = tostring(value)
elseif type(value) == "table" or type(value) == "boolean" then
playerStorages[player][key] = value
else
print("cannot set a non table value without a definition")
end
end