local function add_privs() end local function remove_privs() end local function create_glass_cage()end minetest.register_on_joinplayer(function(player) remove_privs(player:get_player_name()) end) arena_lib.on_load("skywars", function(arena) skywars.load_map_mapblocks(arena) skywars.reset_map(arena) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) add_privs(pl_name) skywars.show_kit_selector(pl_name, arena) create_glass_cage(player) end end) arena_lib.on_start("skywars", function(arena) arena.players_original_amount = arena.players_amount skywars.reset_map(arena) skywars.place_chests(arena) skywars.fill_chests(arena) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) skywars.generate_HUD(arena, pl_name) player:set_physics_override({speed = skywars_settings.player_speed, gravity=1, jump=1}) skywars.activate_enderpearl(player, arena) end end) arena_lib.on_celebration("skywars", function(arena, winner_name) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) remove_privs(pl_name) skywars.remove_HUD(arena, pl_name) skywars.remove_armor(player) end end) arena_lib.on_end("skywars", function(arena, players) for pl_name in pairs(arena.players) do local player = minetest.get_player_by_name(pl_name) remove_privs(pl_name) skywars.remove_armor(player) skywars.block_enderpearl(player, arena) end end) arena_lib.on_death("skywars", function(arena, pl_name, reason) local player = minetest.get_player_by_name(pl_name) if reason.type == "punch" then if reason.object and reason.object:is_player() then local killer = reason.object:get_player_name() arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("@1 was killed by @2", pl_name, killer)) arena.HUDs[killer].players_killed.amount = arena.HUDs[killer].players_killed.amount + 1 reason.object:hud_change(arena.HUDs[killer].players_killed.id, "text", tostring(arena.HUDs[killer].players_killed.amount)) end end remove_privs(pl_name) skywars.remove_armor(player) arena_lib.remove_player_from_arena(pl_name, 1) skywars.update_players_counter(arena) end) arena_lib.on_quit("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) remove_privs(pl_name) skywars.update_players_counter(arena, false) skywars.remove_HUD(arena, pl_name) skywars.remove_armor(player) skywars.block_enderpearl(player, arena) end) arena_lib.on_disconnect("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) skywars.update_players_counter(arena, false) end) arena_lib.on_kick("skywars", function(arena, pl_name) local player = minetest.get_player_by_name(pl_name) remove_privs(pl_name) skywars.update_players_counter(arena, false) skywars.remove_HUD(arena, pl_name) skywars.remove_armor(player) skywars.block_enderpearl(player, arena) end) arena_lib.on_enable("skywars", function(arena, pl_name) if arena.treasures[1] == nil then skywars.print_error(pl_name, skywars.T("You didn't set the treasures!")) return false elseif arena.chests[1] == nil then skywars.print_error(pl_name, skywars.T("You didn't set the chests!")) return false elseif arena.pos1.x == nil or arena.pos2.x == nil then skywars.print_error(pl_name, skywars.T("You didn't set the map corners!")) return false end return true end) arena_lib.on_timer_tick("skywars", function(arena) if arena.current_time % 3 == 0 then skywars.kill_players_out_map(arena) end end) arena_lib.on_timeout("skywars", function(arena) arena_lib.load_celebration("skywars", arena, skywars.T("Nobody")) arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("Time is out, the match is over!")) end) function add_privs(pl_name) local privs = minetest.get_player_privs(pl_name) local player = minetest.get_player_by_name(pl_name) -- preventing players with noclip to fall when placing blocks if privs.noclip then player:get_meta():set_string("noclip", "true") privs.noclip = nil else player:get_meta():set_string("noclip", "false") end if skywars_settings.build_permission ~= "" then if privs[skywars_settings.build_permission] then player:get_meta():set_string("build", "true") else player:get_meta():set_string("build", "false") end privs[skywars_settings.build_permission] = true end minetest.set_player_privs(pl_name, privs) end function remove_privs(pl_name) local privs = minetest.get_player_privs(pl_name) local player = minetest.get_player_by_name(pl_name) if player:get_meta():get_string("noclip") == "true" then privs.noclip = true end if player:get_meta():get_string("build") == "false" then privs[skywars_settings.build_permission] = nil end minetest.set_player_privs(pl_name, privs) end function create_glass_cage(player) minetest.after(0.1, function() local pl_pos = player:get_pos() local glass_blocks = { {x = 0,y = -1,z = 0}, {x = 0,y = -2,z = 0}, {x = 1,y = 1,z = 0}, {x = -1,y = 1,z = 0}, {x = 0,y = 1,z = 1}, {x = 0,y = 1,z = -1}, {x = 0,y = 2,z = 0} } player:set_physics_override({gravity=0, jump=0}) player:add_player_velocity(vector.multiply(player:get_player_velocity(), -1)) for _, relative_pos in pairs(glass_blocks) do local node_pos = vector.round(vector.add(pl_pos, relative_pos)) if minetest.get_node(node_pos).name == "air" then minetest.add_node(node_pos, {name="default:glass"}) end end -- teleports the player back in the glass minetest.after(1, function() player:set_pos(pl_pos) end) end) end