You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

init.lua 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- Reboot mod for Minetest
  2. -- Waits for the last player to leave then shuts the server down
  3. --
  4. -- Copyright © 2018 by luk3yx
  5. --
  6. -- Permission is hereby granted, free of charge, to any person obtaining a copy
  7. -- of this software and associated documentation files (the "Software"), to deal
  8. -- in the Software without restriction, including without limitation the rights
  9. -- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. -- copies of the Software, and to permit persons to whom the Software is
  11. -- furnished to do so, subject to the following conditions:
  12. --
  13. -- The above copyright notice and this permission notice shall be included in
  14. -- all copies or substantial portions of the Software.
  15. --
  16. -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. -- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. -- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. -- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  22. -- SOFTWARE.
  23. local reboot = false
  24. local checkReboot
  25. checkReboot = function()
  26. if reboot and next(minetest.get_connected_players()) == nil then
  27. -- Time to reboot
  28. if minetest.global_exists('irc') then
  29. irc.say("The server is empty! Rebooting...")
  30. end
  31. minetest.request_shutdown("Rebooting...", true, 1)
  32. end
  33. end
  34. minetest.register_on_leaveplayer(checkReboot)
  35. minetest.register_chatcommand("reboot", {
  36. privs = {server = true},
  37. params = "",
  38. description = "Reboots the server next time it is empty.",
  39. func = function()
  40. if reboot then
  41. return false, "There is already a reboot pending!"
  42. end
  43. reboot = true
  44. checkReboot()
  45. return true, "Reboot scheduled!"
  46. end
  47. })
  48. minetest.register_chatcommand("cancelreboot", {
  49. privs = {server = true},
  50. params = "",
  51. description = "Cancels a pending reboot.",
  52. func = function()
  53. if not reboot then
  54. return false, "There is no reboot to cancel!"
  55. end
  56. reboot = false
  57. return true, "Reboot aborted!"
  58. end
  59. })