mtimer/system/chat_command.lua

138 lines
5.4 KiB
Lua

local m = mtimer
local S = m.translator
local d = m.dialog
local cs = minetest.chat_send_player
local ds = minetest.deserialize
-- Colorize a command sequence
--
-- This function returns a colorized chat command sequence with the given
-- parameter and the needed spacing
--
-- @param command The chat command paramter
-- @return table The colorized string
local command = function (command)
return minetest.colorize('cyan', '/mtimer '..command..' ')
end
local custom_timer_handling = function (name, action)
local player = minetest.get_player_by_name(name)
local player_meta = player:get_meta()
local current_timestamp = os.time(os.date('!*t'))
local ctv_key = m.meta.custom_timer_settings.key
local ctv = ds(player_meta:get_string(ctv_key))
if action == 'start' then
if ctv.running ~= true then
ctv.running = true
ctv.start_timestamp = current_timestamp
cs(name, S('The custom timer was started'))
else
cs(name, S('The custom timer is already running'))
end
end
if action == 'stop' then
if ctv.running ~= false then
ctv.running = false
ctv.start_timestamp = 0
cs(name, S('The custom timer was stopped'))
else
cs(name, S('The custom timer is not running'))
end
end
if action == 'restart' then
if ctv.running == true then
ctv.start_timestamp = current_timestamp
cs(name, S('The custom timer was restarted'))
else
cs(name, S('The custom timer is not running'))
end
end
player_meta:set_string(ctv_key, minetest.serialize(ctv))
end
-- Chat command
--
-- The `/mtimer` chat command opens the main menu and allows to directly open
-- the formspecs for the specific configuration. It can be run by all users.
--
-- The following parameters are supported.
--
-- Parameter Mnemonic Action
-- -------------------------------------------------------------------
-- vi visibility d.set_visibility(name)
-- po position d.set_position(name)
-- co color d.sec_color(name)
-- tz timezone d.timezone_offset(name)
-- in ingame d.ingame_time_format(name)
-- re real d.real_world_time_format(name)
-- ht host time d.host_time_format(name)
-- st start time d.session_start_time_format(name)
-- sd session duration d.session_duration_format(name)
-- hs HUD size d.hud_element_size(name)
-- os OffSet d.hud_element_offset(name)
-- tf timer format d.timer_format(name)
-- ct custom timer d.custom_timer(name)
-- -------------------------------------------------------------------
-- help Prints the help output showing the parameters
--
-- Providing unknown parameters has no effect.
minetest.register_chatcommand('mtimer', {
description = S('Configure timer display'),
params = '<vi/po/co/tz/in/re/ht/st/sd/hs/os/tf/ct/help>',
func = function(name, parameters)
local action = parameters:match('%a+')
if not minetest.get_player_by_name(name) then return end
if not action then d.main_menu(name) end
if action == 'vi' then d.set_visibility(name) end
if action == 'po' then d.set_position(name) end
if action == 'co' then d.set_color(name) end
if action == 'tz' then d.timezone_offset(name) end
if action == 'in' then d.ingame_time_format(name) end
if action == 're' then d.real_world_time_format(name) end
if action == 'ht' then d.host_time_format(name) end
if action == 'st' then d.session_start_time_format(name) end
if action == 'sd' then d.session_duration_format(name) end
if action == 'hs' then d.hud_element_size(name) end
if action == 'os' then d.hud_element_offset(name) end
if action == 'tf' then d.timer_format(name) end
if action == 'ct' then d.custom_timer(name) end
if action == 'ctstart' then custom_timer_handling(name,'start') end
if action == 'ctstop' then custom_timer_handling(name,'stop') end
if action == 'ctrestart' then custom_timer_handling(name,'restart') end
if action == 'help' then
local message = {
command(' ')..S('Open Main Menu'),
command('vi')..S('Visibility'),
command('po')..S('Position'),
command('co')..S('Color'),
command('tz')..S('Timezone Offset'),
command('in')..S('Ingame Time Format'),
command('re')..S('Real-World Time Format'),
command('ht')..S('Host Time Format'),
command('st')..S('Session Start Time Format'),
command('sd')..S('Session Duration Format'),
command('hs')..S('HUD Element Size'),
command('os')..S('HUD Element Offset'),
command('tf')..S('Timer Format'),
'',
command('ct ')..S('Configure the custom timer'),
command('ctstart ')..S('Start the custom timer'),
command('ctstop ')..S('Stop stop custom timer'),
command('ctrestart')..S('Restart the custom timer')
}
cs(name, table.concat(message, '\n'))
end
end
})