mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-25 20:11:06 +01:00
Finish initial implementation of setting tuning with get/set commands
This commit is contained in:
parent
80ca5fa0c0
commit
f1f4ebff3f
3 changed files with 88 additions and 14 deletions
|
@ -1,27 +1,76 @@
|
|||
local modname = minetest.get_current_modname()
|
||||
local S = minetest.get_translator(modname)
|
||||
|
||||
local storage = minetest.get_mod_storage()
|
||||
local mod = {}
|
||||
vl_tuning = mod
|
||||
|
||||
--
|
||||
local tunables = {}
|
||||
|
||||
function mod.register_tunable(name, default, setting, setting_type)
|
||||
local tunable = {
|
||||
[1] = default,
|
||||
setting = setting,
|
||||
setting_type = setting_type,
|
||||
}
|
||||
if setting then
|
||||
if setting_type == "bool" then
|
||||
tunable[1] = minetest.settings:get_bool(.setting)
|
||||
else
|
||||
tunable[1] = minetest.settings:get(setting)
|
||||
-- Supported variable types
|
||||
local tunable_types = {
|
||||
bool = {
|
||||
to_string = tostring,
|
||||
from_string = function(value)
|
||||
return (value == "true")
|
||||
end
|
||||
},
|
||||
number = {
|
||||
to_string = tostring,
|
||||
from_string = tonumber,
|
||||
},
|
||||
string = {
|
||||
to_string = function(v) return v end,
|
||||
from_string = function(v) return v end,
|
||||
},
|
||||
}
|
||||
|
||||
-- Tunable metatable functions
|
||||
local tunable_class = {}
|
||||
function tunable_class:set(value)
|
||||
local self_type = self.type
|
||||
if type(value) == "string" then
|
||||
self[1] = self_type.from_string(value)
|
||||
else
|
||||
self[1] = value
|
||||
end
|
||||
|
||||
local setting = self.setting
|
||||
if setting then
|
||||
storage:set_string(setting,self_type.to_string(self[1]))
|
||||
end
|
||||
end
|
||||
function tunable_class:get_string()
|
||||
print(dump(self))
|
||||
return self.type.to_string(self[1])
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("tune", {
|
||||
function mod.get_server_setting(name, description, default, setting, setting_type, options )
|
||||
local tunable = tunables[name]
|
||||
if tunable then return tunable end
|
||||
|
||||
tunable = {
|
||||
name = name,
|
||||
setting = setting,
|
||||
description = description,
|
||||
type = tunable_types[setting_type],
|
||||
options = options,
|
||||
}
|
||||
tunable[1] = default
|
||||
print(dump(tunable))
|
||||
setmetatable(tunable, {__index=tunable_class})
|
||||
if setting then
|
||||
local setting_value = storage:get_string(setting)
|
||||
if setting_value and setting_value ~= "" then
|
||||
tunable:set(setting_value)
|
||||
end
|
||||
end
|
||||
print(dump(tunable))
|
||||
tunables[name] = tunable
|
||||
return tunable
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("set_setting", {
|
||||
description = S("Admin tool to tune settings and game rules"),
|
||||
params = S("<setting> <value>"),
|
||||
privs = { debug = true },
|
||||
|
@ -35,6 +84,28 @@ minetest.register_chatcommand("tune", {
|
|||
if #params ~= 2 then
|
||||
return false, S("Usage: /tune <setting> <value>")
|
||||
end
|
||||
|
||||
local tunable = tunables[params[1]]
|
||||
if tunable then
|
||||
minetest.log("action", "[vl_tuning] "..name.." set ".. params[1] .." to "..params[2])
|
||||
tunable:set(params[2])
|
||||
return true
|
||||
else
|
||||
return false, S("Setting @1 doesn't exist", params[1])
|
||||
end
|
||||
end
|
||||
})
|
||||
minetest.register_chatcommand("get_setting", {
|
||||
description = S("Admin tool to view settings and game rules"),
|
||||
params = S("<setting>"),
|
||||
privs = { debug = true },
|
||||
func = function(name, param)
|
||||
local tunable = tunables[param]
|
||||
if tunable then
|
||||
return true, tunable:get_string()
|
||||
else
|
||||
return false, S("Setting @1 doesn't exist", param)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@ local modname = minetest.get_current_modname()
|
|||
local modpath = minetest.get_modpath(modname)
|
||||
local S = minetest.get_translator(modname)
|
||||
|
||||
-- Tunable parameters
|
||||
local notif_delay = vl_tuning.get_server_setting("award_display_time", S("Amount of time award notification are displayed"), 3, "awards_notif_delay", "number", { min = 2, max = 10 })
|
||||
|
||||
-- The global award namespace
|
||||
awards = {
|
||||
show_mode = "hud",
|
||||
|
|
|
@ -6,4 +6,4 @@ license = LGPL 2.1 or later
|
|||
forum = https://forum.minetest.net/viewtopic.php?t=4870
|
||||
version = 2.3.0
|
||||
optional_depends = sfinv, unified_inventory
|
||||
depends = mcl_colors
|
||||
depends = mcl_colors, vl_tuning
|
||||
|
|
Loading…
Reference in a new issue