init
This commit is contained in:
commit
18e9c71cad
28 changed files with 7335 additions and 0 deletions
113
storage.lua
Normal file
113
storage.lua
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
|
||||
local storage = minetest.get_mod_storage()
|
||||
|
||||
function tpad._get_all_pads()
|
||||
local storage_table = storage:to_table()
|
||||
local allpads = {}
|
||||
for key, value in pairs(storage_table.fields) do
|
||||
local parts = key:split(":")
|
||||
if parts[1] == "pads" then
|
||||
local pads = minetest.deserialize(value)
|
||||
if type(pads) == "table" then
|
||||
allpads[parts[2]] = pads
|
||||
end
|
||||
end
|
||||
end
|
||||
return allpads
|
||||
end
|
||||
|
||||
function tpad._get_stored_pads(ownername)
|
||||
local serial_pads = storage:get_string("pads:" .. ownername)
|
||||
if serial_pads == nil or serial_pads == "" then return {} end
|
||||
return minetest.deserialize(serial_pads)
|
||||
end
|
||||
|
||||
function tpad._set_stored_pads(ownername, pads)
|
||||
if ownername == nil or ownername == "" then
|
||||
return
|
||||
end
|
||||
storage:set_string("pads:" .. ownername, minetest.serialize(pads))
|
||||
end
|
||||
|
||||
function tpad.set_max_total_pads(max)
|
||||
if not max then max = 0 end
|
||||
storage:set_string("max_total_pads_per_player", max)
|
||||
end
|
||||
|
||||
function tpad.get_max_total_pads()
|
||||
local max = tonumber(storage:get_string("max_total_pads_per_player"))
|
||||
if not max then
|
||||
tpad.set_max_total_pads(100)
|
||||
return 100
|
||||
end
|
||||
return max
|
||||
end
|
||||
|
||||
function tpad.set_max_global_pads(max)
|
||||
if not max then max = 0 end
|
||||
storage:set_string("max_global_pads_per_player", max)
|
||||
end
|
||||
|
||||
function tpad.get_max_global_pads()
|
||||
local max = tonumber(storage:get_string("max_global_pads_per_player"))
|
||||
if not max then
|
||||
tpad.set_max_global_pads(4)
|
||||
return 4
|
||||
end
|
||||
return max
|
||||
end
|
||||
|
||||
local function _convert_legacy_settings()
|
||||
local legacy_settings_file = minetest.get_worldpath() .. "/mod_storage/" .. tpad.mod_name .. ".custom.conf"
|
||||
local file = io.open(legacy_settings_file, "r")
|
||||
if file then
|
||||
file:close()
|
||||
local settings = Settings(legacy_settings_file)
|
||||
local max_global = tonumber(settings:get("max_global_pads_per_player"))
|
||||
if max_global then
|
||||
tpad.set_max_global_pads(max_global)
|
||||
end
|
||||
local max_total = tonumber(settings:get("max_total_pads_per_player"))
|
||||
if max_total then
|
||||
tpad.set_max_total_pads(max_total)
|
||||
end
|
||||
os.remove(legacy_settings_file)
|
||||
end
|
||||
end
|
||||
|
||||
_convert_legacy_settings()
|
||||
tpad.get_max_total_pads()
|
||||
tpad.get_max_global_pads()
|
||||
|
||||
local function _convert_storage_1_1()
|
||||
local storage_table = storage:to_table()
|
||||
for field, value in pairs(storage_table.fields) do
|
||||
local parts = field:split(":")
|
||||
if parts[1] == "pads" then
|
||||
local pads = minetest.deserialize(value)
|
||||
for key, name in pairs(pads) do
|
||||
pads[key] = { name = name }
|
||||
end
|
||||
storage_table.fields[field] = minetest.serialize(pads)
|
||||
end
|
||||
end
|
||||
storage:from_table(storage_table)
|
||||
end
|
||||
|
||||
local function _storage_version_check()
|
||||
local storage_version = storage:get_string("_version")
|
||||
local storage_path = minetest.get_worldpath() .. "/mod_storage/"
|
||||
if storage_version == "1.1" then
|
||||
local file = io.open(storage_path .. tpad.mod_name, "r")
|
||||
if file then
|
||||
file:close()
|
||||
tpad._copy_file(storage_path .. tpad.mod_name, storage_path .. tpad.mod_name .. ".1.1.backup")
|
||||
end
|
||||
_convert_storage_1_1()
|
||||
elseif storage_version ~= "" and storage_version ~= tpad.version then
|
||||
error("Mod storage version not supported, aborting to prevent data corruption")
|
||||
end
|
||||
storage:set_string("_version", tpad.version)
|
||||
end
|
||||
|
||||
_storage_version_check()
|
||||
Loading…
Add table
Add a link
Reference in a new issue