samples.lua 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. -------------------------------------------------------------------------------------------
  2. -- How to try this example:
  3. -- 1) Move this file into a new "afs_test" directory under mods and rename it "init.lua".
  4. -- 2) Create a "depends.txt" file in the new directory with the following lines of text:
  5. -- nyancat
  6. -- formspecs
  7. -- 3) Launch your Minetest server and enable the "afs_test" mod. Then, login as usual!
  8. -------------------------------------------------------------------------------------------
  9. minetest.register_privilege( "uptime", "View the uptime of the server interactively" )
  10. local get_nyancat_formspec = function( meta )
  11. local uptime = minetest.get_server_uptime( )
  12. local formspec = "size[4,3]"
  13. .. default.gui_bg_img
  14. .. string.format( "label[0.5,0.5;%s %0.1f %s]",
  15. minetest.colorize( "#FFFF00", "Server Uptime:" ),
  16. meta.is_minutes == true and uptime / 60 or uptime,
  17. meta.is_minutes == true and "mins" or "secs"
  18. )
  19. .. "checkbox[0.5,1;is_minutes;Show Minutes;" .. tostring( meta.is_minutes ) .. "]"
  20. .. "button[0.5,2;2.5,1;update;Refresh]"
  21. .. "hidden[view_count;1;number]"
  22. .. "hidden[view_limit;10;number]" -- limit the number of refreshes!
  23. return formspec
  24. end
  25. minetest.override_item( "nyancat:nyancat", {
  26. description = "System Monitor",
  27. on_open = function( meta, player )
  28. local player_name = player:get_player_name( )
  29. if meta.is_minutes == nil then meta.is_minutes = true end
  30. if minetest.check_player_privs( player, "uptime" ) then
  31. return get_nyancat_formspec( meta )
  32. else
  33. minetest.chat_send_player( player_name, "Your privileges are insufficient." )
  34. end
  35. end,
  36. on_close = function( meta, player, fields )
  37. local player_name = player:get_player_name( )
  38. if not minetest.check_player_privs( player, "uptime" ) then return end
  39. if fields.update then
  40. if meta.view_count == meta.view_limit then
  41. minetest.destroy_form( player_name )
  42. minetest.chat_send_player( player_name, "You've exceeded the refresh limit." )
  43. else
  44. meta.view_count = meta.view_count + 1
  45. minetest.update_form( player_name, get_nyancat_formspec( meta ) )
  46. end
  47. elseif fields.is_minutes then
  48. meta.is_minutes = fields.is_minutes == "true"
  49. minetest.update_form( player_name, get_nyancat_formspec( meta ) )
  50. end
  51. end
  52. } )
  53. minetest.register_chatcommand( "uptime", {
  54. description = "View the uptime of the server interactively",
  55. func = function( player_name, param )
  56. local is_refresh = true
  57. local get_formspec = function( )
  58. local uptime = minetest.get_server_uptime( )
  59. local formspec = "size[4,2]"
  60. .. default.gui_bg_img
  61. .. string.format( "label[0.5,0.5;%s %d secs]",
  62. minetest.colorize( "#FFFF00", "Server Uptime:" ), uptime
  63. )
  64. .. "checkbox[0.5,1;is_refresh;Auto Refresh;" .. tostring( is_refresh ) .. "]"
  65. return formspec
  66. end
  67. local on_close = function( meta, player, fields )
  68. if fields.quit == minetest.FORMSPEC_SIGTIME then
  69. minetest.update_form( player_name, get_formspec( ) )
  70. elseif fields.is_refresh then
  71. is_refresh = fields.is_refresh == "true"
  72. if is_refresh == true then
  73. minetest.get_form_timer( player_name ).start( 1 )
  74. else
  75. minetest.get_form_timer( player_name ).stop( )
  76. end
  77. end
  78. end
  79. minetest.create_form( nil, player_name, get_formspec( ), on_close )
  80. minetest.get_form_timer( player_name ).start( 1 )
  81. end
  82. } )