Random spawning around origin
parent
c2d83855f9
commit
93777a886c
|
@ -45,21 +45,37 @@ function adventuretest.teleport(player,pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
function adventuretest.check_spawn(player)
|
function adventuretest.check_spawn(player)
|
||||||
|
print("checking spawn")
|
||||||
local count = 0
|
local count = 0
|
||||||
local newpos = player:getpos()
|
local newpos = player:getpos()
|
||||||
local badpos = false
|
local badpos = false
|
||||||
while adventuretest.obj_stuck(player) == true and count < 5 do
|
if adventuretest.obj_stuck(player) == true then
|
||||||
print("moving player")
|
print("moving player "..tostring(count))
|
||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
newpos.x = pos.x + math.rand(-10,10)
|
math.randomseed(os.time())
|
||||||
newpos.z = pos.z + math.rand(-10,10)
|
newpos.x = pos.x + math.random(-50,50)
|
||||||
|
newpos.z = pos.z + math.random(-50,50)
|
||||||
|
|
||||||
|
local ab = adventuretest.above_ground(newpos)
|
||||||
|
print("above ground: "..tostring(ab))
|
||||||
|
if ab ~= false and ab > 4 then
|
||||||
|
newpos.y = ( newpos.y - ( ab - 3 ) )
|
||||||
|
else
|
||||||
|
newpos.y = pos.y + math.random(0,10)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
adventuretest.teleport(player,newpos)
|
adventuretest.teleport(player,newpos)
|
||||||
count = count + 1
|
--count = count + 1
|
||||||
badpos = true
|
--badpos = true
|
||||||
|
minetest.after(3,adventuretest.check_spawn,player)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
if badpos == true then
|
if badpos == true then
|
||||||
|
print("checking elevation")
|
||||||
-- check the elevation so they don't fall to their death
|
-- check the elevation so they don't fall to their death
|
||||||
local ab = adventuretest.above_ground(newpos)
|
local ab = adventuretest.above_ground(newpos)
|
||||||
|
print("above ground: "..tostring(ab))
|
||||||
if ab ~= false and ab > 3 then
|
if ab ~= false and ab > 3 then
|
||||||
newpos.y = ( newpos.y - ( ab - 3 ) )
|
newpos.y = ( newpos.y - ( ab - 3 ) )
|
||||||
adventuretest.teleport(player,newpos)
|
adventuretest.teleport(player,newpos)
|
||||||
|
@ -67,13 +83,18 @@ function adventuretest.check_spawn(player)
|
||||||
end
|
end
|
||||||
local n = player:get_player_name()
|
local n = player:get_player_name()
|
||||||
pd.set(n,"homepos",newpos)
|
pd.set(n,"homepos",newpos)
|
||||||
|
player:hud_remove(pd.get(n,"spawning_hud"))
|
||||||
|
pd.set(n,"spawning_hud",nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- sees if a player or entity is in a block
|
-- sees if a player or entity is in a block
|
||||||
function adventuretest.obj_stuck(obj)
|
function adventuretest.obj_stuck(obj)
|
||||||
local pos = obj:getpos()
|
local pos = obj:getpos()
|
||||||
local pn = adventuretest.get_obj_nodes(obj)
|
local pn = adventuretest.get_obj_nodes(obj)
|
||||||
if pn.feet.walkable == false or pn.head.walkable == false then
|
print("Feet walkable "..tostring(minetest.registered_nodes[pn.feet.name].walkable))
|
||||||
|
print("Head walkable "..tostring(minetest.registered_nodes[pn.head.name].walkable))
|
||||||
|
print("Feet node "..pn.feet.name)
|
||||||
|
if minetest.registered_nodes[pn.feet.name].walkable == true or minetest.registered_nodes[pn.head.name].walkable == true or pn.feet.name == "ignore" or pn.head.name == "ignore" then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
|
@ -84,7 +105,7 @@ function adventuretest.get_obj_nodes(obj)
|
||||||
local pos = obj:getpos()
|
local pos = obj:getpos()
|
||||||
local retval = {}
|
local retval = {}
|
||||||
|
|
||||||
pos.y = pos.y - 1
|
pos.y = pos.y
|
||||||
retval.standing_on = minetest.get_node(pos)
|
retval.standing_on = minetest.get_node(pos)
|
||||||
pos.y = pos.y + 1
|
pos.y = pos.y + 1
|
||||||
retval.feet = minetest.get_node(pos)
|
retval.feet = minetest.get_node(pos)
|
||||||
|
@ -106,7 +127,7 @@ function adventuretest.above_ground(pos)
|
||||||
end
|
end
|
||||||
for y = pos.y,dest,step do
|
for y = pos.y,dest,step do
|
||||||
local n = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
local n = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
||||||
if n.walkable == false then
|
if minetest.registered_nodes[n.name].walkable == true then
|
||||||
return math.abs(pos.y - y)
|
return math.abs(pos.y - y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ game_origin = nil
|
||||||
if minetest.setting_get("game_origin") ~= nil then
|
if minetest.setting_get("game_origin") ~= nil then
|
||||||
game_origin = minetest.string_to_pos(minetest.setting_get("game_origin"))
|
game_origin = minetest.string_to_pos(minetest.setting_get("game_origin"))
|
||||||
else
|
else
|
||||||
game_origin = {x=0,y=0,z=0}
|
game_origin = {x=0,y=3,z=0}
|
||||||
end
|
end
|
||||||
|
|
||||||
dofile(minetest.get_modpath("adventuretest").."/functions.lua");
|
dofile(minetest.get_modpath("adventuretest").."/functions.lua");
|
||||||
|
|
|
@ -148,6 +148,15 @@ end
|
||||||
minetest.register_on_leaveplayer(on_leave)
|
minetest.register_on_leaveplayer(on_leave)
|
||||||
|
|
||||||
local function on_new(player)
|
local function on_new(player)
|
||||||
|
local hud_id = player:hud_add({
|
||||||
|
hud_elem_type = "image",
|
||||||
|
position = {x = 0.5, y = 0.5},
|
||||||
|
scale = {
|
||||||
|
x = -100,
|
||||||
|
y = -100
|
||||||
|
},
|
||||||
|
text = "adventuretest_spawning_hud.png"
|
||||||
|
})
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
pd.load_player(name)
|
pd.load_player(name)
|
||||||
-- set some defaults
|
-- set some defaults
|
||||||
|
@ -164,8 +173,9 @@ local function on_new(player)
|
||||||
player:set_hp(6)
|
player:set_hp(6)
|
||||||
skills.set_default_skills(name)
|
skills.set_default_skills(name)
|
||||||
pd.save_player(name)
|
pd.save_player(name)
|
||||||
minetest.after(5,adventuretest.check_spawn,player)
|
pd.set(name,"spawning_hud",hud_id)
|
||||||
--mg_villages.spawnplayer(player)
|
adventuretest.teleport(player,game_origin)
|
||||||
|
minetest.after(3,adventuretest.check_spawn,player)
|
||||||
end
|
end
|
||||||
minetest.register_on_newplayer(on_new)
|
minetest.register_on_newplayer(on_new)
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 82 KiB |
Loading…
Reference in New Issue