init.lua 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. local homes_file = minetest.get_worldpath() .. "/homes"
  2. local homepos = {}
  3. local function loadhomes()
  4. local input = io.open(homes_file, "r")
  5. if input then
  6. repeat
  7. local x = input:read("*n")
  8. if x == nil then
  9. break
  10. end
  11. local y = input:read("*n")
  12. local z = input:read("*n")
  13. local name = input:read("*l")
  14. homepos[name:sub(2)] = {x = x, y = y, z = z}
  15. until input:read(0) == nil
  16. io.close(input)
  17. else
  18. homepos = {}
  19. end
  20. end
  21. loadhomes()
  22. minetest.register_privilege("home", "Can use /sethome and /home")
  23. local changed = false
  24. minetest.register_chatcommand("home", {
  25. description = "Teleport you to your home point",
  26. privs = {home=true},
  27. func = function(name)
  28. local player = minetest.env:get_player_by_name(name)
  29. if player == nil then
  30. -- just a check to prevent the server crashing
  31. return false
  32. end
  33. if homepos[player:get_player_name()] then
  34. player:setpos(homepos[player:get_player_name()])
  35. minetest.chat_send_player(name, "Teleported to home!")
  36. else
  37. minetest.chat_send_player(name, "Set a home using /sethome")
  38. end
  39. end,
  40. })
  41. minetest.register_chatcommand("sethome", {
  42. description = "Set your home point",
  43. privs = {home=true},
  44. func = function(name)
  45. local player = minetest.env:get_player_by_name(name)
  46. local pos = player:getpos()
  47. homepos[player:get_player_name()] = pos
  48. minetest.chat_send_player(name, "Home set!")
  49. changed = true
  50. if changed then
  51. local output = io.open(homes_file, "w")
  52. for i, v in pairs(homepos) do
  53. output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n")
  54. end
  55. io.close(output)
  56. changed = false
  57. end
  58. end,
  59. })