mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-10-31 15:45:21 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local homes_file = minetest.get_worldpath() .. "/homes"
 | |
| local homepos = {}
 | |
| 
 | |
| local function loadhomes()
 | |
|     local input = io.open(homes_file, "r")
 | |
|     if input then
 | |
| 		repeat
 | |
|             local x = input:read("*n")
 | |
|             if x == nil then
 | |
|             	break
 | |
|             end
 | |
|             local y = input:read("*n")
 | |
|             local z = input:read("*n")
 | |
|             local name = input:read("*l")
 | |
|             homepos[name:sub(2)] = {x = x, y = y, z = z}
 | |
|         until input:read(0) == nil
 | |
|         io.close(input)
 | |
|     else
 | |
|         homepos = {}
 | |
|     end
 | |
| end
 | |
| 
 | |
| loadhomes()
 | |
| 
 | |
| minetest.register_privilege("home", "Can use /sethome and /home")
 | |
| 
 | |
| local changed = false
 | |
| 
 | |
| minetest.register_chatcommand("home", {
 | |
|     description = "Teleport you to your home point",
 | |
|     privs = {home=true},
 | |
|     func = function(name)
 | |
|         local player = minetest.get_player_by_name(name)
 | |
|         if player == nil then
 | |
|             -- just a check to prevent the server crashing
 | |
|             return false
 | |
|         end
 | |
|         if homepos[player:get_player_name()] then
 | |
|             player:setpos(homepos[player:get_player_name()])
 | |
|             minetest.chat_send_player(name, "Teleported to home!")
 | |
|         else
 | |
|             minetest.chat_send_player(name, "Set a home using /sethome")
 | |
|         end
 | |
|     end,
 | |
| })
 | |
| 
 | |
| minetest.register_chatcommand("sethome", {
 | |
|     description = "Set your home point",
 | |
|     privs = {home=true},
 | |
|     func = function(name)
 | |
|         local player = minetest.get_player_by_name(name)
 | |
|         local pos = player:getpos()
 | |
|         homepos[player:get_player_name()] = pos
 | |
|         minetest.chat_send_player(name, "Home set!")
 | |
|         changed = true
 | |
|         if changed then
 | |
|         	local output = io.open(homes_file, "w")
 | |
|             for i, v in pairs(homepos) do
 | |
|                 output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n")
 | |
|             end
 | |
|             io.close(output)
 | |
|             changed = false
 | |
|         end
 | |
|     end,
 | |
| })
 |