mirror of
https://github.com/minetest/minetest.git
synced 2024-11-23 08:03:45 +01:00
Support static_spawnpoint setting
This commit is contained in:
parent
8ed74a3429
commit
93cdc9b9dc
@ -19,4 +19,5 @@ dofile(minetest.get_modpath("__builtin").."/misc.lua")
|
|||||||
dofile(minetest.get_modpath("__builtin").."/privileges.lua")
|
dofile(minetest.get_modpath("__builtin").."/privileges.lua")
|
||||||
dofile(minetest.get_modpath("__builtin").."/auth.lua")
|
dofile(minetest.get_modpath("__builtin").."/auth.lua")
|
||||||
dofile(minetest.get_modpath("__builtin").."/chatcommands.lua")
|
dofile(minetest.get_modpath("__builtin").."/chatcommands.lua")
|
||||||
|
dofile(minetest.get_modpath("__builtin").."/static_spawn.lua")
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ minetest.register_chatcommand("set", {
|
|||||||
privs = {server=true},
|
privs = {server=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)")
|
local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)")
|
||||||
if arg and arg == "n" and setname and setvalue then
|
if arg and arg == "-n" and setname and setvalue then
|
||||||
minetest.setting_set(setname, setvalue)
|
minetest.setting_set(setname, setvalue)
|
||||||
minetest.chat_send_player(name, setname.." = "..setvalue)
|
minetest.chat_send_player(name, setname.." = "..setvalue)
|
||||||
return
|
return
|
||||||
|
@ -67,3 +67,35 @@ function minetest.get_node_group(name, group)
|
|||||||
return minetest.get_item_group(name, group)
|
return minetest.get_item_group(name, group)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function minetest.string_to_pos(value)
|
||||||
|
local p = {}
|
||||||
|
p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
|
||||||
|
if p.x and p.y and p.z then
|
||||||
|
p.x = tonumber(p.x)
|
||||||
|
p.y = tonumber(p.y)
|
||||||
|
p.z = tonumber(p.z)
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
local p = {}
|
||||||
|
p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
|
||||||
|
if p.x and p.y and p.z then
|
||||||
|
p.x = tonumber(p.x)
|
||||||
|
p.y = tonumber(p.y)
|
||||||
|
p.z = tonumber(p.z)
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
assert(minetest.string_to_pos("10.0, 5, -2").x == 10)
|
||||||
|
assert(minetest.string_to_pos("( 10.0, 5, -2)").z == -2)
|
||||||
|
assert(minetest.string_to_pos("asd, 5, -2)") == nil)
|
||||||
|
|
||||||
|
function minetest.setting_get_pos(name)
|
||||||
|
local value = minetest.setting_get(name)
|
||||||
|
if not value then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return minetest.string_to_pos(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
33
builtin/static_spawn.lua
Normal file
33
builtin/static_spawn.lua
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
-- Minetest: builtin/static_spawn.lua
|
||||||
|
|
||||||
|
local function warn_invalid_static_spawnpoint()
|
||||||
|
if minetest.setting_get("static_spawnpoint") and
|
||||||
|
not minetest.setting_get_pos("static_spawnpoint") then
|
||||||
|
minetest.log('error', "The static_spawnpoint setting is invalid: \""..
|
||||||
|
minetest.setting_get("static_spawnpoint").."\"")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
warn_invalid_static_spawnpoint()
|
||||||
|
|
||||||
|
local function put_player_in_spawn(obj)
|
||||||
|
warn_invalid_static_spawnpoint()
|
||||||
|
local static_spawnpoint = minetest.setting_get_pos("static_spawnpoint")
|
||||||
|
if not static_spawnpoint then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
minetest.log('action', "Moving "..obj:get_player_name()..
|
||||||
|
" to static spawnpoint at "..
|
||||||
|
minetest.pos_to_string(static_spawnpoint))
|
||||||
|
obj:setpos(static_spawnpoint)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_newplayer(function(obj)
|
||||||
|
put_player_in_spawn(obj)
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_respawnplayer(function(obj)
|
||||||
|
return put_player_in_spawn(obj)
|
||||||
|
end)
|
||||||
|
|
@ -514,6 +514,7 @@ string:trim()
|
|||||||
^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
|
^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
|
||||||
minetest.pos_to_string({x=X,y=Y,z=Z}) -> "(X,Y,Z)"
|
minetest.pos_to_string({x=X,y=Y,z=Z}) -> "(X,Y,Z)"
|
||||||
^ Convert position to a printable string
|
^ Convert position to a printable string
|
||||||
|
minetest.string_to_pos(string) -> position
|
||||||
|
|
||||||
minetest namespace reference
|
minetest namespace reference
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -576,6 +577,7 @@ Setting-related:
|
|||||||
minetest.setting_set(name, value)
|
minetest.setting_set(name, value)
|
||||||
minetest.setting_get(name) -> string or nil
|
minetest.setting_get(name) -> string or nil
|
||||||
minetest.setting_getbool(name) -> boolean value or nil
|
minetest.setting_getbool(name) -> boolean value or nil
|
||||||
|
minetest.setting_get_pos(name) -> position or nil
|
||||||
minetest.add_to_creative_inventory(itemstring)
|
minetest.add_to_creative_inventory(itemstring)
|
||||||
|
|
||||||
Authentication:
|
Authentication:
|
||||||
|
Loading…
Reference in New Issue
Block a user