diff --git a/mods/adventuretest/functions.lua b/mods/adventuretest/functions.lua index 2726a4f..33aaf3e 100644 --- a/mods/adventuretest/functions.lua +++ b/mods/adventuretest/functions.lua @@ -45,21 +45,37 @@ function adventuretest.teleport(player,pos) end function adventuretest.check_spawn(player) + print("checking spawn") local count = 0 local newpos = player:getpos() local badpos = false - while adventuretest.obj_stuck(player) == true and count < 5 do - print("moving player") + if adventuretest.obj_stuck(player) == true then + print("moving player "..tostring(count)) local pos = player:getpos() - newpos.x = pos.x + math.rand(-10,10) - newpos.z = pos.z + math.rand(-10,10) + math.randomseed(os.time()) + 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) - count = count + 1 - badpos = true + --count = count + 1 + --badpos = true + minetest.after(3,adventuretest.check_spawn,player) + return end if badpos == true then + print("checking elevation") -- check the elevation so they don't fall to their death local ab = adventuretest.above_ground(newpos) + print("above ground: "..tostring(ab)) if ab ~= false and ab > 3 then newpos.y = ( newpos.y - ( ab - 3 ) ) adventuretest.teleport(player,newpos) @@ -67,13 +83,18 @@ function adventuretest.check_spawn(player) end local n = player:get_player_name() pd.set(n,"homepos",newpos) + player:hud_remove(pd.get(n,"spawning_hud")) + pd.set(n,"spawning_hud",nil) end -- sees if a player or entity is in a block function adventuretest.obj_stuck(obj) local pos = obj:getpos() 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 end return false @@ -84,7 +105,7 @@ function adventuretest.get_obj_nodes(obj) local pos = obj:getpos() local retval = {} - pos.y = pos.y - 1 + pos.y = pos.y retval.standing_on = minetest.get_node(pos) pos.y = pos.y + 1 retval.feet = minetest.get_node(pos) @@ -106,7 +127,7 @@ function adventuretest.above_ground(pos) end for y = pos.y,dest,step do 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) end end diff --git a/mods/adventuretest/init.lua b/mods/adventuretest/init.lua index a209cdc..30f7f8d 100644 --- a/mods/adventuretest/init.lua +++ b/mods/adventuretest/init.lua @@ -5,7 +5,7 @@ game_origin = nil if minetest.setting_get("game_origin") ~= nil then game_origin = minetest.string_to_pos(minetest.setting_get("game_origin")) else - game_origin = {x=0,y=0,z=0} + game_origin = {x=0,y=3,z=0} end dofile(minetest.get_modpath("adventuretest").."/functions.lua"); diff --git a/mods/adventuretest/register_functions.lua b/mods/adventuretest/register_functions.lua index d751c9c..525e5aa 100644 --- a/mods/adventuretest/register_functions.lua +++ b/mods/adventuretest/register_functions.lua @@ -148,6 +148,15 @@ end minetest.register_on_leaveplayer(on_leave) 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() pd.load_player(name) -- set some defaults @@ -164,8 +173,9 @@ local function on_new(player) player:set_hp(6) skills.set_default_skills(name) pd.save_player(name) - minetest.after(5,adventuretest.check_spawn,player) - --mg_villages.spawnplayer(player) + pd.set(name,"spawning_hud",hud_id) + adventuretest.teleport(player,game_origin) + minetest.after(3,adventuretest.check_spawn,player) end minetest.register_on_newplayer(on_new) diff --git a/mods/adventuretest/textures/adventuretest_spawning_hud.png b/mods/adventuretest/textures/adventuretest_spawning_hud.png new file mode 100644 index 0000000..681009c Binary files /dev/null and b/mods/adventuretest/textures/adventuretest_spawning_hud.png differ