ctf.register_on_init(function() ctf.log("flash", "Initialising...") ctf._set("gui.team.teleport_to_spawn", false) ctf._set("flash", false) ctf._set("flash.teams", "red, red, 15, 7, 39; blue, blue, -9, 9, -43") ctf._set("flash.remove_leaveplayer", true) end) local function safe_place(pos, node) ctf.log("flash", "attempting to place...") minetest.get_voxel_manip(pos, { x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}) minetest.set_node(pos, node) if minetest.get_node(pos).name ~= node.name then ctf.error("flash", "failed to place node, retrying...") minetest.after(0.5, function() safe_place(pos, node) end) end end local claimed = ctf_flag.collect_claimed() for i, flag in pairs(claimed) do flag.claimed = nil end minetest.register_on_joinplayer(function(player) if ctf.team(ctf.player(player:get_player_name()).team) then return end local alloc_mode = tonumber(ctf.setting("allocate_mode")) if alloc_mode == 0 then return end local name = player:get_player_name() local team = ctf.autoalloc(name, alloc_mode) if team then ctf.log("autoalloc", name .. " was allocated to " .. team) ctf.join(name, team) local spawn = ctf.get_spawn(team) if spawn then player:moveto(spawn, false) end end end) minetest.register_on_leaveplayer(function(player) if ctf.setting("flash.remove_leaveplayer") then ctf.remove_player(player:get_player_name()) end end) ctf.register_on_new_game(function() ctf.log("flash", "Setting up new game!") local teams = ctf.setting("flash.teams"):split(";") local pos = {} for i, v in pairs(teams) do local team = v:split(",") if #team == 5 then local name = team[1]:trim() local color = team[2]:trim() local x = tonumber(team[3]:trim()) local y = tonumber(team[4]:trim()) local z = tonumber(team[5]:trim()) pos[name] = { x = x, y = y, z = z } ctf.team({ name=name, color=color, add_team=true }) ctf_flag.add(name, pos[name]) else ctf.warning("flash", "Invalid team setup: " .. dump(v)) end end minetest.after(0, function() for name, p in pairs(pos) do safe_place(p, {name="ctf_flag:flag"}) ctf_flag.update(p) end end) for i, player in pairs(minetest.get_connected_players()) do local name = player:get_player_name() local inv = player:get_inventory() inv:set_list("main", {}) inv:set_list("craft", {}) local alloc_mode = tonumber(ctf.setting("allocate_mode")) if alloc_mode == 0 then return end local team = ctf.autoalloc(name, alloc_mode) if team then ctf.log("autoalloc", name .. " was allocated to " .. team) ctf.join(name, team) end team = ctf.player(name).team if ctf.team(team) then local spawn = ctf.get_spawn(team) if spawn then player:moveto(spawn, false) end end minetest.log("action", "Giving initial stuff to player "..player:get_player_name()) player:get_inventory():add_item('main', 'default:pick_steel') player:get_inventory():add_item('main', 'default:sword_steel') player:get_inventory():add_item('main', 'default:cobble 99') player:set_hp(20) end minetest.chat_send_all("Next round!") end)