diff --git a/init.lua b/init.lua index fa03049..71a299d 100644 --- a/init.lua +++ b/init.lua @@ -119,15 +119,17 @@ function teleports.teleportate(parameters) if player and player:is_player() and playername~=teleports.lastplayername then local pos = player:getpos() if vector.distance(pos, {x=pos1.x,y=pos1.y+0.5,z=pos1.z}) < 0.52 then - minetest.sound_play({name="teleports_teleport", gain=1.0}, {max_hear_distance=16}, true) + local dest if math.random(1, 100) > 5 then teleports.lastplayername = playername - player:setpos({x=pos2.x,y=pos2.y+0.5,z=pos2.z}) + dest = {x=pos2.x,y=pos2.y+0.5,z=pos2.z} else -- Small chance to "miss" destiation by 1 node horizontally to prevent afk players -- from teleporting forever - player:setpos({x=pos2.x-2+math.random(1, 3),y=pos2.y+0.5,z=pos2.z-2+math.random(1, 3)}) + dest = {x=pos2.x-2+math.random(1, 3),y=pos2.y+0.5,z=pos2.z-2+math.random(1, 3)} end + player:setpos(dest) + minetest.sound_play({name="teleports_teleport", gain=1.0}, {pos=dest, max_hear_distance=16}, true) end end end @@ -135,12 +137,15 @@ function teleports.do_teleporting(pos1, pos2, playername, delay) if not delay then teleports.teleportate({pos1, pos2, playername}) else - minetest.sound_play({name="teleports_charge", gain=0.5}, {max_hear_distance=8}, true) + minetest.sound_play({name="teleports_charge", gain=0.5}, {pos=pos1, max_hear_distance=8}, true) teleports.animate(pos1, playername) minetest.after(delay, teleports.teleportate, {pos1, pos2, playername}) end end teleports.set_formspec = function(pos, shown_teleports) + if not shown_teleports then + shown_teleports = teleports:find_nearby(pos, TELEPORT_SHOW_MAX) + end local meta = minetest.get_meta(pos) local node = minetest.get_node(pos) @@ -267,8 +272,7 @@ minetest.register_node("teleports:teleport", { -- Update formspecs of affected teleports for n=1, #near_teleports do local pos2 = near_teleports[n].pos - local near_teleports2 = teleports:find_nearby(pos2, TELEPORT_SHOW_MAX) - teleports.set_formspec(pos2, near_teleports2) + teleports.set_formspec(pos2) end end, on_receive_fields = teleports.on_receive_fields, @@ -322,3 +326,4 @@ minetest.register_craft({ {"default:diamond","default:diamond","default:diamond"}, } }) + diff --git a/sounds/teleports_charge.ogg b/sounds/teleports_charge.ogg index 8320762..16118d7 100644 Binary files a/sounds/teleports_charge.ogg and b/sounds/teleports_charge.ogg differ diff --git a/sounds/teleports_teleport.ogg b/sounds/teleports_teleport.ogg index 741870d..c02d46b 100644 Binary files a/sounds/teleports_teleport.ogg and b/sounds/teleports_teleport.ogg differ