2017-11-08 00:52:09 +00:00
|
|
|
local storage = minetest.get_mod_storage()
|
|
|
|
local data = minetest.parse_json(storage:get_string("locktoteam")) or {}
|
|
|
|
|
|
|
|
local ctf_autoalloc = ctf.autoalloc
|
|
|
|
function ctf.autoalloc(name, alloc_mode)
|
|
|
|
if data[name] then
|
|
|
|
return data[name]
|
|
|
|
end
|
|
|
|
|
|
|
|
return ctf_autoalloc(name, alloc_mode)
|
|
|
|
end
|
|
|
|
|
|
|
|
ChatCmdBuilder.new("ctf_lockpt", function(cmd)
|
|
|
|
cmd:sub(":name :team", function(name, pname, team)
|
|
|
|
if team == "!" then
|
|
|
|
data[pname] = nil
|
|
|
|
storage:set_string("locktoteam", minetest.write_json(data))
|
|
|
|
return true, "Unlocked " .. pname
|
|
|
|
else
|
|
|
|
data[pname] = team
|
|
|
|
storage:set_string("locktoteam", minetest.write_json(data))
|
|
|
|
return true, "Locked " .. pname .. " to " .. team
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
end, {
|
|
|
|
description = "Lock a player to a team",
|
|
|
|
privs = {
|
|
|
|
ctf_admin = true,
|
|
|
|
}
|
|
|
|
})
|
2018-04-06 12:34:58 +00:00
|
|
|
|
2018-04-06 15:18:32 +00:00
|
|
|
function table.map_inplace(t, f) -- luacheck: ignore
|
2018-04-06 12:34:58 +00:00
|
|
|
for key, value in pairs(t) do
|
|
|
|
t[key] = f(value)
|
|
|
|
end
|
|
|
|
return t
|
|
|
|
end
|
|
|
|
|
|
|
|
ctf_alloc = {}
|
|
|
|
function ctf_alloc.set_all()
|
|
|
|
local players = minetest.get_connected_players()
|
|
|
|
table.map_inplace(players, function(a)
|
|
|
|
local stats, _ = ctf_stats.player(a:get_player_name())
|
|
|
|
return {
|
|
|
|
player = a,
|
|
|
|
score = stats.score,
|
|
|
|
}
|
|
|
|
end)
|
|
|
|
table.sort(players, function(a, b)
|
|
|
|
return a.score > b.score
|
|
|
|
end)
|
|
|
|
|
2018-04-06 15:10:05 +00:00
|
|
|
local to_red = math.random(2) == 2
|
2018-04-06 12:34:58 +00:00
|
|
|
for _, spair in pairs(players) do
|
|
|
|
local player = spair.player
|
|
|
|
local name = player:get_player_name()
|
|
|
|
local alloc_mode = tonumber(ctf.setting("allocate_mode"))
|
|
|
|
local team
|
|
|
|
if to_red then
|
|
|
|
team = "red"
|
|
|
|
else
|
|
|
|
team = "blue"
|
|
|
|
end
|
|
|
|
to_red = not to_red
|
|
|
|
|
|
|
|
if alloc_mode ~= 0 and team then
|
|
|
|
ctf.log("autoalloc", name .. " was allocated to " .. team)
|
|
|
|
ctf.join(name, team)
|
|
|
|
end
|
|
|
|
|
|
|
|
ctf.move_to_spawn(name)
|
|
|
|
|
|
|
|
if ctf.setting("match.clear_inv") then
|
|
|
|
local inv = player:get_inventory()
|
|
|
|
inv:set_list("main", {})
|
|
|
|
inv:set_list("craft", {})
|
|
|
|
give_initial_stuff(player)
|
|
|
|
end
|
|
|
|
|
|
|
|
player:set_hp(20)
|
|
|
|
end
|
|
|
|
end
|