mtimer/system/load_configuration.lua
2021-04-02 10:54:49 +02:00

129 lines
4.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local S = mtimer.translator
local worldpath = minetest.get_worldpath()..DIR_DELIM
local worldconfig = Settings(worldpath..DIR_DELIM..'_mtimer.conf')
-- Set an option in mtimer.meta configuration table.
--
-- The function takes an unprefixed key name and tries to get this keys
-- configuration option and sets the table entry with that option and the
-- meta key name for that key. Because the meta settings system only allows
-- to write strings all values are converted to strings.
--
-- set('my_cool_key', 1337)
--
-- This setting creates the following table entry:
--
-- mtimer.meta.my_cool_key = {
-- key = 'mtimer:my_cool_key',
-- default = '1337'
-- }
--
-- The default value is searched in the following order When the setting is
-- not found in any of the locations an empty string is used
--
-- 1. Standard `minetest.conf` file that is used for the server
-- 2. `_mtimer.conf` in the loaded worlds directory
-- 3. Provided default value when calling the function
--
-- If the value `return_only` is set then the function does only return the
-- determined value instead of writing the meta table entry.
--
-- If `replace` is a key-value table then occurrences of the key in a special
-- variable in the configuration value are replaced.
--
-- replace = {
-- foobar = 'My Foobar Value'
-- }
--
-- This example searches for all variables `{_foobar}` and replaces them with
-- `'My Foobar Value'`. Note the underscore. The underscore prevents confusion
-- with timer-related variables.
--
-- @param key_name The unprefixed name of the key to get
-- @param default_value What to return when the configuration option is missing
-- @param return_only Only return the configuration value and do nothing
-- @param replace A replacement table as described
-- @return string Either the configuration options value or an empty string
local set = function (key_name, default_value, return_only, replace)
local meta_key = 'mtimer:'..key_name
local config_option = 'mtimer_'..key_name
local value = default_value
-- Get the setting from one of the possible locations
local global_setting = minetest.settings:get(config_option)
local world_setting = worldconfig:get(config_option)
-- Define value
value = world_setting or global_setting or default_value or ''
if type(replace) == 'table' then value=value:gsub('{_([^}]*)}',replace) end
-- Return or store value
if return_only == true then return tostring(value) end
mtimer.meta[key_name] = { key = meta_key, default = tostring(value) }
end
-- Set HUD element offset table using the custom values
set('hud_element_offset', minetest.serialize({
x = set('hud_element_offset_x', 0, true),
y = set('hud_element_offset_y', 0, true)
}))
-- Display settings
set('color', '#ffffff')
set('hud_element_size', 1)
set('position', 'bl')
set('timezone_offset', 0)
set('visible', true)
-- Formatting settings
set('host_time_format', '{24h}:{min} ({isodate})')
set('ingame_time_format', '{24h}:{min}')
set('real_time_format', '{24h}:{min} ({isodate})')
set('session_duration_format', '{hours}:{minutes}')
set('session_start_time_format', '{isodate}T{isotime}')
-- Custom timer settings
--
-- `timer_mode` can be one of the following:
--
-- 'countdown': Counting backwards from the calculated starting point to the
-- `start_timestamp` value. The starting point is calculated
-- using the input values and `start_timestamp`.
--
-- 'timer': Counting up from the `start_timestamp` value to the calculated
-- target. The target is calculated by the `start_timestamp` and the
-- given `input_values`.
--
-- 'continuous': The timer shows the difference between the current timestamp
-- and the stored `start_timestamp`. Here the `target_message`
-- is ignored and will never be shown.
set('custom_timer_settings', minetest.serialize({
values = {
days = tonumber(set('custom_timer_value_days', 0, true)),
hours = tonumber(set('custom_timer_value_hours', 0, true)),
minutes = tonumber(set('custom_timer_value_minutes', 0, true)),
seconds = tonumber(set('custom_timer_value_seconds', 0, true))
},
start_timestamp = 0,
format = {
running = set('custom_timer_running_format', 'd: {days}, h: {hours}, m: {minutes}, s: {seconds}', true),
stopped = set('custom_timer_stopped_format', S('The timer is stopped'), true),
finished = set('custom_timer_finished_format', S('The timer has finished'), true)
},
timer_mode = set('custom_timer_mode', 'countdown', true),
running = false
}))
-- Timer display format (the HUD elements content)
set('timer_format', table.concat({
S('Current Date: @1', '{rd}'),
S('Ingame Time: @1', '{it}'),
S('Session Start: @1', '{st}'),
S('Session Duration: @1', '{sd}')
}, '{_n}'), false, { n = '\n' })