minetest-game-subnasa/mods/formspecs/samples.lua

97 lines
3.3 KiB
Lua

-------------------------------------------------------------------------------------------
-- How to try this example:
-- 1) Move this file into a new "afs_test" directory under mods and rename it "init.lua".
-- 2) Create a "depends.txt" file in the new directory with the following lines of text:
-- nyancat
-- formspecs
-- 3) Launch your Minetest server and enable the "afs_test" mod. Then, login as usual!
-------------------------------------------------------------------------------------------
minetest.register_privilege( "uptime", "View the uptime of the server interactively" )
local get_nyancat_formspec = function( meta )
local uptime = minetest.get_server_uptime( )
local formspec = "size[4,3]"
.. default.gui_bg_img
.. string.format( "label[0.5,0.5;%s %0.1f %s]",
minetest.colorize( "#FFFF00", "Server Uptime:" ),
meta.is_minutes == true and uptime / 60 or uptime,
meta.is_minutes == true and "mins" or "secs"
)
.. "checkbox[0.5,1;is_minutes;Show Minutes;" .. tostring( meta.is_minutes ) .. "]"
.. "button[0.5,2;2.5,1;update;Refresh]"
.. "hidden[view_count;1;number]"
.. "hidden[view_limit;10;number]" -- limit the number of refreshes!
return formspec
end
minetest.override_item( "nyancat:nyancat", {
description = "System Monitor",
on_open = function( meta, player )
local player_name = player:get_player_name( )
if meta.is_minutes == nil then meta.is_minutes = true end
if minetest.check_player_privs( player, "uptime" ) then
return get_nyancat_formspec( meta )
else
minetest.chat_send_player( player_name, "Your privileges are insufficient." )
end
end,
on_close = function( meta, player, fields )
local player_name = player:get_player_name( )
if not minetest.check_player_privs( player, "uptime" ) then return end
if fields.update then
if meta.view_count == meta.view_limit then
minetest.destroy_form( player_name )
minetest.chat_send_player( player_name, "You've exceeded the refresh limit." )
else
meta.view_count = meta.view_count + 1
minetest.update_form( player_name, get_nyancat_formspec( meta ) )
end
elseif fields.is_minutes then
meta.is_minutes = fields.is_minutes == "true"
minetest.update_form( player_name, get_nyancat_formspec( meta ) )
end
end
} )
minetest.register_chatcommand( "uptime", {
description = "View the uptime of the server interactively",
func = function( player_name, param )
local is_refresh = true
local get_formspec = function( )
local uptime = minetest.get_server_uptime( )
local formspec = "size[4,2]"
.. default.gui_bg_img
.. string.format( "label[0.5,0.5;%s %d secs]",
minetest.colorize( "#FFFF00", "Server Uptime:" ), uptime
)
.. "checkbox[0.5,1;is_refresh;Auto Refresh;" .. tostring( is_refresh ) .. "]"
return formspec
end
local on_close = function( meta, player, fields )
if fields.quit == minetest.FORMSPEC_SIGTIME then
minetest.update_form( player_name, get_formspec( ) )
elseif fields.is_refresh then
is_refresh = fields.is_refresh == "true"
if is_refresh == true then
minetest.get_form_timer( player_name ).start( 1 )
else
minetest.get_form_timer( player_name ).stop( )
end
end
end
minetest.create_form( nil, player_name, get_formspec( ), on_close )
minetest.get_form_timer( player_name ).start( 1 )
end
} )