diff --git a/chat.lua b/chat.lua new file mode 100644 index 0000000..b02437d --- /dev/null +++ b/chat.lua @@ -0,0 +1,142 @@ +--minetest.register_chatcommand("armor", { +-- params = "", +-- description = "Display your armor values", +-- privs = {}, +-- func = function(player_name, param) +-- if not (player_name and type(player_name) == 'string' and player_name ~= '' and fun_caves.db.status) then +-- return +-- end +-- +-- local player = minetest.get_player_by_name(player_name) +-- if not player then +-- return +-- end +-- +-- local armor = player:get_armor_groups() +-- if armor then +-- minetest.chat_send_player(player_name, "Armor:") +-- for group, value in pairs(armor) do +-- minetest.chat_send_player(player_name, " "..group.." "..value) +-- end +-- +-- if fun_caves.db.status[player_name].armor_elixir then +-- local armor_time = fun_caves.db.status[player_name].armor_elixir.remove +-- local game_time = minetest.get_gametime() +-- if not (armor_time and type(armor_time) == 'number' and game_time and type(game_time) == 'number') then +-- return +-- end +-- +-- local min = math.floor(math.max(0, armor_time - game_time) / 60) +-- minetest.chat_send_player(player_name, "Your armor elixir will expire in "..min..' minutes.') +-- end +-- end +-- end, +--}) + + +--minetest.register_chatcommand("setspawn", { +-- params = "", +-- description = "change your spawn position", +-- privs = {}, +-- func = function(player_name, param) +-- if not (player_name and type(player_name) == 'string' and player_name ~= '') then +-- return +-- end +-- +-- local player = minetest.get_player_by_name(player_name) +-- if not player then +-- return +-- end +-- +-- local pos = player:getpos() +-- beds.spawn[player_name] = pos +-- minetest.chat_send_player(player_name, 'Your spawn position has been changed.') +-- end, +--}) + + +minetest.register_chatcommand("fixlight", { + params = "", + description = "attempt to fix light bugs", + privs = {}, + func = function(player_name, param) + if not (player_name and type(player_name) == 'string' and player_name ~= '') then + return + end + + local privs = minetest.check_player_privs(player_name, {server=true}) + if not privs then + return + end + + print('Loud Walking: '..player_name..' used the fixlight command') + local player = minetest.get_player_by_name(player_name) + if not player then + return + end + + local pos = player:getpos() + if not pos then + return + end + pos = vector.round(pos) + + local radius = tonumber(param) or 50 + radius = math.floor(radius) + local minp = vector.subtract(pos, radius) + local maxp = vector.add(pos, radius) + + local vm = minetest.get_voxel_manip(minp, maxp) + if not vm then + return + end + + --vm:set_lighting({day = 0, night = 0}, minp, maxp) + vm:calc_lighting(minp, maxp, false) + vm:update_liquids() + vm:write_to_map() + vm:update_map() + end, +}) + + +--minetest.register_chatcommand("sleep", { +-- params = "", +-- description = "Sleep on the ground", +-- privs = {}, +-- func = function(player_name, param) +-- local player = minetest.get_player_by_name(player_name) +-- if not (player and beds) then +-- return +-- end +-- +-- if (beds.player and beds.player[player_name]) then +-- minetest.chat_send_player(player_name, 'You can\'t sleep.') +-- return +-- end +-- +-- local pos = player:getpos() +-- if not pos then +-- return +-- end +-- pos = vector.round(pos) +-- +-- local status, err = pcall(beds.on_rightclick, pos, player) +-- +-- if status then +-- minetest.after(5, function() +-- local time = minetest.get_timeofday() +-- if not time or time < 0.23 or time > 0.3 then +-- return +-- end +-- +-- local hp = player:get_hp() +-- if hp and type(hp) == 'number' then +-- player:set_hp(hp - 1) +-- end +-- +-- minetest.chat_send_player(player_name, 'You\'d sleep better in a bed.') +-- end) +-- end +-- end, +--}) diff --git a/mapgen.lua b/mapgen.lua index 630236b..3355f7c 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -922,18 +922,38 @@ table.insert(minetest.registered_on_generateds, 1, pgenerate) function loud_walking.respawn(player) + local player_name = player:get_player_name() + if not player_name then + return + end + + if beds and beds.spawn and beds.spawn[player_name] then + return + end + while true do local px = math.random(-10, 10) * 2 - 1 local pz = math.random(-10, 10) * 2 - local x = pod_size.x * px - local z = pod_size.z * pz - local y = half_pod.y + 1 + local x = fcsize.x * px + math.random(half_pod.x) + math_floor(half_pod.x / 2) + local z = fcsize.z * pz + math.random(half_pod.z) + math_floor(half_pod.z / 2) + local y = half_pod.y + 5 + local biome = get_biome(x,y,z) + if biome then + local terrain_scale = biomes[biome].terrain_scale - local pos = {x=x,y=y,z=z} - local node = minetest.get_node(pos) - if node.name ~= "air" then - player:setpos(pos) - return true + local noise = minetest.get_perlin(terrain_noise) + if not noise then + return + end + + local height = noise:get2d({x=x, y=z}) * terrain_scale + local y = height + half_pod.y + 5 + local pos = {x=x,y=y,z=z} + local node = minetest.get_node_or_nil(pos) + if not node or node.name == 'air' then + player:setpos(pos) + return true + end end end end