Fix spawning in solid blocks closes #34
parent
3dd0d84716
commit
63c4d22865
|
@ -44,6 +44,75 @@ function adventuretest.teleport(player,pos)
|
||||||
player:moveto(pos)
|
player:moveto(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function adventuretest.check_spawn(player)
|
||||||
|
local count = 0
|
||||||
|
local newpos = player:getpos()
|
||||||
|
local badpos = false
|
||||||
|
while adventuretest.obj_stuck(player) == true and count < 5 do
|
||||||
|
print("moving player")
|
||||||
|
local pos = player:getpos()
|
||||||
|
newpos.x = pos.x + math.rand(-10,10)
|
||||||
|
newpos.z = pos.z + math.rand(-10,10)
|
||||||
|
adventuretest.teleport(player,newpos)
|
||||||
|
count = count + 1
|
||||||
|
badpos = true
|
||||||
|
end
|
||||||
|
if badpos == true then
|
||||||
|
-- check the elevation so they don't fall to their death
|
||||||
|
local ab = adventuretest.above_ground(newpos)
|
||||||
|
if ab ~= false and ab > 3 then
|
||||||
|
newpos.y = ( newpos.y - ( ab - 3 ) )
|
||||||
|
adventuretest.teleport(player,newpos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local n = player:get_player_name()
|
||||||
|
pd.set(n,"homepos",newpos)
|
||||||
|
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
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- mostly used for getting the nodes the player or entity is in
|
||||||
|
function adventuretest.get_obj_nodes(obj)
|
||||||
|
local pos = obj:getpos()
|
||||||
|
local retval = {}
|
||||||
|
|
||||||
|
pos.y = pos.y - 1
|
||||||
|
retval.standing_on = minetest.get_node(pos)
|
||||||
|
pos.y = pos.y + 1
|
||||||
|
retval.feet = minetest.get_node(pos)
|
||||||
|
pos.y = pos.y + 1
|
||||||
|
retval.head = minetest.get_node(pos)
|
||||||
|
|
||||||
|
return retval
|
||||||
|
end
|
||||||
|
|
||||||
|
function adventuretest.above_ground(pos)
|
||||||
|
local step = 0
|
||||||
|
local dest = 0
|
||||||
|
if pos.y > 0 then
|
||||||
|
step = -1
|
||||||
|
dest = -35
|
||||||
|
else
|
||||||
|
step = 1
|
||||||
|
dest = 125
|
||||||
|
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
|
||||||
|
return math.abs(pos.y - y)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
function hunger_join_player(player)
|
function hunger_join_player(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local lvl = pd.get_number(name,"hunger_lvl")
|
local lvl = pd.get_number(name,"hunger_lvl")
|
||||||
|
|
|
@ -165,7 +165,8 @@ 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)
|
||||||
mg_villages.on_newplayer(player)
|
minetest.after(5,adventuretest.check_spawn,player)
|
||||||
|
--mg_villages.spawnplayer(player)
|
||||||
end
|
end
|
||||||
minetest.register_on_newplayer(on_new)
|
minetest.register_on_newplayer(on_new)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ minetest.register_node("default:desert_stone", {
|
||||||
description = "Desert Stone",
|
description = "Desert Stone",
|
||||||
tiles = {"default_desert_stone.png"},
|
tiles = {"default_desert_stone.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {cracky=3, stone=1},
|
groups = {cracky=3, stone=1, hot=1},
|
||||||
drop = 'default:desert_stone',
|
drop = 'default:desert_stone',
|
||||||
legacy_mineral = true,
|
legacy_mineral = true,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
@ -130,7 +130,7 @@ minetest.register_node("default:dirt_with_snow", {
|
||||||
description = "Dirt with Snow",
|
description = "Dirt with Snow",
|
||||||
tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
|
tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {crumbly=3,puts_out_fire=1},
|
groups = {crumbly=3,puts_out_fire=1,cold=1},
|
||||||
drop = 'default:dirt',
|
drop = 'default:dirt',
|
||||||
sounds = default.node_sound_dirt_defaults({
|
sounds = default.node_sound_dirt_defaults({
|
||||||
footstep = {name="default_snow_footstep", gain=0.25},
|
footstep = {name="default_snow_footstep", gain=0.25},
|
||||||
|
@ -216,7 +216,7 @@ minetest.register_node("default:desert_sand", {
|
||||||
description = "Desert Sand",
|
description = "Desert Sand",
|
||||||
tiles = {"default_desert_sand.png"},
|
tiles = {"default_desert_sand.png"},
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
groups = {crumbly=3, falling_node=1, sand=1},
|
groups = {crumbly=3, falling_node=1, sand=1, hot=1},
|
||||||
sounds = default.node_sound_sand_defaults(),
|
sounds = default.node_sound_sand_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1496,6 +1496,7 @@ minetest.register_node("default:dry_shrub", {
|
||||||
walkable = false,
|
walkable = false,
|
||||||
is_ground_content = true,
|
is_ground_content = true,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
|
floodable = true,
|
||||||
groups = {snappy=3,flammable=3,attached_node=1},
|
groups = {snappy=3,flammable=3,attached_node=1},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
selection_box = {
|
selection_box = {
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
function mg_villages.spawnplayer(player)
|
function mg_villages.spawnplayer(player)
|
||||||
if( minetest.setting_get("static_spawnpoint")) then
|
|
||||||
return;
|
|
||||||
end
|
|
||||||
|
|
||||||
-- make sure the village types are initialized
|
-- make sure the village types are initialized
|
||||||
if( not( mg_villages.village_types )) then
|
if( not( mg_villages.village_types )) then
|
||||||
mg_villages.init_weights();
|
mg_villages.init_weights();
|
||||||
|
@ -33,7 +30,7 @@ function mg_villages.spawnplayer(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
player:setpos(min_pos)
|
adventuretest.teleport(player,min_pos)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
pd.set(name,"homepos",min_pos)
|
pd.set(name,"homepos",min_pos)
|
||||||
end
|
end
|
||||||
|
|
|
@ -75,13 +75,13 @@ minetest.register_lbm({
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if active_objects_wider > 0 then
|
if active_objects_wider > 0 then
|
||||||
if active_object_count_wider > active_objects_wider then
|
if #active_object_count_wider > active_objects_wider then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if active_objects > 0 then
|
if active_objects > 0 then
|
||||||
if active_object_count > active_objects then
|
if #active_object_count > active_objects then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue