forked from Mineclonia/Mineclonia
Prevent downwards teleportation
This commit is contained in:
parent
d70c05e92c
commit
195f2c651e
|
@ -175,7 +175,7 @@ function mobs.detach(player, offset)
|
||||||
minetest.after(0.1, function(name, pos)
|
minetest.after(0.1, function(name, pos)
|
||||||
local player = minetest.get_player_by_name(name)
|
local player = minetest.get_player_by_name(name)
|
||||||
if player then
|
if player then
|
||||||
player:set_pos(pos)
|
mcl_anticheat.set_pos(player, pos)
|
||||||
end
|
end
|
||||||
end, player:get_player_name(), pos)
|
end, player:get_player_name(), pos)
|
||||||
end
|
end
|
||||||
|
|
|
@ -66,7 +66,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
-- If damage is disabled, we can't kill players.
|
-- If damage is disabled, we can't kill players.
|
||||||
-- So we just teleport the player back to spawn.
|
-- So we just teleport the player back to spawn.
|
||||||
local spawn = mcl_spawn.get_player_spawn_pos(player)
|
local spawn = mcl_spawn.get_player_spawn_pos(player)
|
||||||
player:set_pos(spawn)
|
mcl_anticheat.set_pos(player, spawn)
|
||||||
mcl_worlds.dimension_change(player, mcl_worlds.pos_to_dimension(spawn))
|
mcl_worlds.dimension_change(player, mcl_worlds.pos_to_dimension(spawn))
|
||||||
minetest.chat_send_player(player:get_player_name(), S("The void is off-limits to you!"))
|
minetest.chat_send_player(player:get_player_name(), S("The void is off-limits to you!"))
|
||||||
elseif enable_damage and not is_immortal then
|
elseif enable_damage and not is_immortal then
|
||||||
|
|
|
@ -349,7 +349,7 @@ function mesecon.mvps_move_objects(pos, dir, nodestack)
|
||||||
local nn = minetest.get_node(np)
|
local nn = minetest.get_node(np)
|
||||||
if not ((not minetest.registered_nodes[nn.name])
|
if not ((not minetest.registered_nodes[nn.name])
|
||||||
or minetest.registered_nodes[nn.name].walkable) then
|
or minetest.registered_nodes[nn.name].walkable) then
|
||||||
obj:set_pos(np)
|
mcl_anticheat.set_pos(obj, np)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -128,7 +128,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
|
||||||
mcl_beds.pos[name] = nil
|
mcl_beds.pos[name] = nil
|
||||||
mcl_beds.bed_pos[name] = nil
|
mcl_beds.bed_pos[name] = nil
|
||||||
if p then
|
if p then
|
||||||
player:set_pos(p)
|
mcl_anticheat.set_pos(player, p)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- skip here to prevent sending player specific changes (used for leaving players)
|
-- skip here to prevent sending player specific changes (used for leaving players)
|
||||||
|
@ -183,7 +183,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
|
||||||
player:get_meta():set_string("mcl_beds:sleeping", "true")
|
player:get_meta():set_string("mcl_beds:sleeping", "true")
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_beds:sleeping", 0)
|
playerphysics.add_physics_factor(player, "speed", "mcl_beds:sleeping", 0)
|
||||||
playerphysics.add_physics_factor(player, "jump", "mcl_beds:sleeping", 0)
|
playerphysics.add_physics_factor(player, "jump", "mcl_beds:sleeping", 0)
|
||||||
player:set_pos(bed_center)
|
mcl_anticheat.set_pos(player, bed_center)
|
||||||
mcl_player.player_attached[name] = true
|
mcl_player.player_attached[name] = true
|
||||||
hud_flags.wielditem = false
|
hud_flags.wielditem = false
|
||||||
mcl_player.player_set_animation(player, "lay" , 0)
|
mcl_player.player_set_animation(player, "lay" , 0)
|
||||||
|
|
|
@ -515,7 +515,7 @@ local random_teleport = function(player)
|
||||||
if streak >= 2 then
|
if streak >= 2 then
|
||||||
-- JACKPOT! Now we can teleport.
|
-- JACKPOT! Now we can teleport.
|
||||||
local goal = {x=tpos.x, y=tpos.y-1.5, z=tpos.z}
|
local goal = {x=tpos.x, y=tpos.y-1.5, z=tpos.z}
|
||||||
player:set_pos(goal)
|
mcl_anticheat.set_pos(player, goal)
|
||||||
minetest.sound_play({name="mcl_end_teleport", gain=0.8}, {pos=goal, max_hear_distance=16}, true)
|
minetest.sound_play({name="mcl_end_teleport", gain=0.8}, {pos=goal, max_hear_distance=16}, true)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
|
@ -211,7 +211,7 @@ function mcl_portals.end_teleport(obj, pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Teleport
|
-- Teleport
|
||||||
obj:set_pos(target)
|
mcl_anticheat.set_pos(obj, target)
|
||||||
|
|
||||||
if obj:is_player() then
|
if obj:is_player() then
|
||||||
-- Look towards the main End island
|
-- Look towards the main End island
|
||||||
|
|
|
@ -699,7 +699,7 @@ local function teleport_no_delay(obj, pos)
|
||||||
mcl_portals.nether_portal_cooloff[obj] = true
|
mcl_portals.nether_portal_cooloff[obj] = true
|
||||||
|
|
||||||
-- Teleport
|
-- Teleport
|
||||||
obj:set_pos(target)
|
mcl_anticheat.set_pos(obj, target)
|
||||||
|
|
||||||
if is_player then
|
if is_player then
|
||||||
mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target))
|
mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target))
|
||||||
|
|
|
@ -364,7 +364,7 @@ local pearl_on_step = function(self, dtime)
|
||||||
|
|
||||||
local oldpos = player:get_pos()
|
local oldpos = player:get_pos()
|
||||||
-- Teleport and hurt player
|
-- Teleport and hurt player
|
||||||
player:set_pos(telepos)
|
mcl_anticheat.set_pos(player, telepos)
|
||||||
player:set_hp(player:get_hp() - 5, { type = "fall", from = "mod" })
|
player:set_hp(player:get_hp() - 5, { type = "fall", from = "mod" })
|
||||||
|
|
||||||
-- 5% chance to spawn endermite at the player's origin
|
-- 5% chance to spawn endermite at the player's origin
|
||||||
|
|
|
@ -259,7 +259,7 @@ do
|
||||||
if param == "default" then
|
if param == "default" then
|
||||||
local biome_pos = find_default_biome()
|
local biome_pos = find_default_biome()
|
||||||
if biome_pos then
|
if biome_pos then
|
||||||
player:set_pos(biome_pos)
|
mcl_anticheat.set_pos(player, biome_pos)
|
||||||
return true, S("Biome found at @1.", minetest.pos_to_string(biome_pos))
|
return true, S("Biome found at @1.", minetest.pos_to_string(biome_pos))
|
||||||
else
|
else
|
||||||
return false, S("No biome found!")
|
return false, S("No biome found!")
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
local MAX_TP_DOWN = 100
|
||||||
|
|
||||||
|
mcl_anticheat = {
|
||||||
|
positions = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function mcl_anticheat.set_pos(player, pos)
|
||||||
|
player:set_pos(pos)
|
||||||
|
|
||||||
|
if player:is_player() then
|
||||||
|
mcl_anticheat.positions[player] = pos
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
mcl_anticheat.positions[player] = player:get_pos()
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
mcl_anticheat.positions[player] = nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_globalstep(function()
|
||||||
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
|
local pos = player:get_pos()
|
||||||
|
local old_pos = mcl_anticheat.positions[player]
|
||||||
|
|
||||||
|
if old_pos.y - pos.y > MAX_TP_DOWN and not player:get_attach() then
|
||||||
|
player:set_pos(old_pos)
|
||||||
|
else
|
||||||
|
mcl_anticheat.positions[player] = pos
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end)
|
|
@ -0,0 +1,2 @@
|
||||||
|
name = mcl_anticheat
|
||||||
|
author = Fleckenstein
|
|
@ -490,7 +490,7 @@ end
|
||||||
|
|
||||||
mcl_spawn.spawn = function(player)
|
mcl_spawn.spawn = function(player)
|
||||||
local pos, in_bed = mcl_spawn.get_player_spawn_pos(player)
|
local pos, in_bed = mcl_spawn.get_player_spawn_pos(player)
|
||||||
player:set_pos(pos)
|
mcl_anticheat.set_pos(player, pos)
|
||||||
return in_bed or success
|
return in_bed or success
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue