mtimer/init.lua
Dirk Sohler 43c633732e implement base functionality for chat commands
Chat commands alwys start with `/mtimer` and then the player defines
what action to perform and adds a payload.

    /mtimer help
    /mtimer show
    /mtimer set setting value

Issue: https://github.com/dsohler/mtimer/issues/1
2017-07-29 21:19:05 +02:00

68 lines
2.8 KiB
Lua

-- Load default configuration
local modpath = minetest.get_modpath(minetest.get_current_modname())..DIR_DELIM
local config = dofile(modpath..'system'..DIR_DELIM..'get_options.lua')
-- Load functions
dofile(modpath..'system'..DIR_DELIM..'timer_function.lua')
dofile(modpath..'system'..DIR_DELIM..'chat_commands.lua')
-- Set custom player attribute if not set
--
-- Sets a custom player attribute if the attribute is not set already.
--
-- @param player The player opbject of the player to set the attribute for
-- @param attribute The attribute to set if not present
-- @param value The value to be set if the attribute does not exist
local set_if_unset = function(player, attribute, value)
local current_value = player:get_attribute(attribute)
if current_value == nil then player:set_attribute(attribute, value) end
end
-- Get a position table from a comma-separated position string
--
-- @param position_string The desired position in `x,y` format
--
-- @return table The position table
mtimer_position = function (position_string)
local given_x = position_string:gsub(',[^,]+$', '')
local given_y = position_string:gsub('^[^,]+,', '')
return {x=given_x, y=given_y}
end
minetest.register_on_joinplayer(function(player)
-- Set default values if not present
set_if_unset(player, 'mtimer:runtime', config['mtimer_runtime'])
set_if_unset(player, 'mtimer:offset', config['mtimer_offset'])
set_if_unset(player, 'mtimer:ingame_time', config['mtimer_ingame_time'])
set_if_unset(player, 'mtimer:current_time', config['mtimer_current_time'])
set_if_unset(player, 'mtimer:font_color', config['mtimer_font_color'])
set_if_unset(player, 'mtimer:start', config['mtimer_start'])
set_if_unset(player, 'mtimer:show', config['mtimer_show'])
set_if_unset(player, 'mtimer:locale', config['mtimer_locale'])
set_if_unset(player, 'mtimer:position', config['mtimer_position'])
set_if_unset(player, 'mtimer:format', config['mtimer_format'])
set_if_unset(player, 'mtimer:alignment', config['mtimer_alignment'])
-- Set join timestamp for later calculations
player:set_attribute('mtimer:joined_timestamp', os.time())
-- Set the hud element ID for later usage and set text to the placeholder
player:set_attribute('mtimer:hud_id', player:hud_add({
hud_elem_type = 'text',
position = mtimer_position(player:get_attribute('mtimer:position')),
alignment = mtimer_position(player:get_attribute('mtimer:alignment')),
offset = mtimer_position(player:get_attribute('mtimer:offset')),
text = config['mtimer_placeholder'],
number = '0x'..player:get_attribute('mtimer:font_color')
}))
-- Run inital update for the player
minetest.after(1, mtimer_update, player)
end)
-- Start iteration after 5 seconds
minetest.after(5, mtimer_iterate, tonumber(config['mtimer_update_interval']))