Auto-allocation
This commit is contained in:
parent
8fab1cb55a
commit
c89ac55ff7
@ -55,15 +55,12 @@ minetest.register_chatcommand("team", {
|
||||
minetest.chat_send_player(name, "Teams:",false)
|
||||
for k,v in pairs(ctf.teams) do
|
||||
if v and v.players then
|
||||
local numItems = 0
|
||||
for k,v in pairs(v.players) do
|
||||
numItems = numItems + 1
|
||||
local numPlayers = ctf.count_players_in_team(k)
|
||||
local numFlags = 0
|
||||
for k, v in pairs(v.flags) do
|
||||
numFlags = numFlags + 1
|
||||
end
|
||||
local numItems2 = 0
|
||||
for k,v in pairs(v.flags) do
|
||||
numItems2 = numItems2 + 1
|
||||
end
|
||||
minetest.chat_send_player(name, ">> "..k.." ("..numItems2.." flags, "..numItems.." players)",false)
|
||||
minetest.chat_send_player(name, ">> "..k.." ("..numFlags.." flags, "..numPlayers.." players)")
|
||||
end
|
||||
end
|
||||
elseif ctf.team(param) then
|
||||
|
@ -24,14 +24,15 @@ function ctf.init()
|
||||
ctf._set("players_can_change_team",true)
|
||||
|
||||
-- Settings: Teams
|
||||
--ctf._set("allocate_mode",0) -- (COMING SOON):how are players allocated to teams?
|
||||
ctf._set("default_diplo_state","war") -- what is the default diplomatic state? (war/peace/alliance)
|
||||
ctf._set("allocate_mode", 2) -- how are players allocated to teams? 0: none, 1: random, 2: one of first two largest groups, 3 smallest group
|
||||
ctf._set("maximum_in_team", -1) -- Maximum number in team, obeyed by allocation and /join. Admins don't obey this
|
||||
ctf._set("default_diplo_state", "war") -- what is the default diplomatic state? (war/peace/alliance)
|
||||
--ctf._setb("delete_teams",false) -- (COMING SOON):should teams be deleted when they are defeated?
|
||||
|
||||
-- Settings: Misc
|
||||
--ctf._set("on_game_end",0) -- (COMING SOON):what happens when the game ends?
|
||||
ctf._set("flag_protect_distance",25) -- how far do flags protect?
|
||||
ctf._set("team_gui_initial","news") -- [news/flags/diplo/admin] - the starting tab
|
||||
ctf._set("flag_protect_distance", 25) -- how far do flags protect?
|
||||
ctf._set("team_gui_initial", "news") -- [news/flags/diplo/admin] - the starting tab
|
||||
|
||||
local file = io.open(minetest.get_worldpath().."/ctf.txt", "r")
|
||||
if file then
|
||||
@ -51,8 +52,9 @@ function ctf._set(setting,default)
|
||||
end
|
||||
|
||||
function ctf.setting(name)
|
||||
if minetest.setting_get("ctf_"..name) then
|
||||
return minetest.setting_get("ctf_"..name)
|
||||
local set = minetest.setting_get("ctf_"..name)
|
||||
if set ~= nil then
|
||||
return set
|
||||
elseif ctf._defsettings[name] ~= nil then
|
||||
return ctf._defsettings[name]
|
||||
else
|
||||
@ -100,6 +102,15 @@ function ctf.team(name) -- get or add a team
|
||||
end
|
||||
end
|
||||
|
||||
-- Count number of players in a team
|
||||
function ctf.count_players_in_team(team)
|
||||
local count = 0
|
||||
for name, player in pairs(ctf.team(team).players) do
|
||||
count = count + 1
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
-- get a player
|
||||
function ctf.player(name)
|
||||
return ctf.players[name]
|
||||
@ -207,3 +218,72 @@ function ctf.post(team,msg)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
minetest.register_on_newplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
local max_players = ctf.setting("maximum_in_team")
|
||||
local alloc_mode = tonumber(ctf.setting("allocate_mode"))
|
||||
|
||||
if alloc_mode == 1 then
|
||||
local index = {}
|
||||
|
||||
for key, team in pairs(ctf.teams) do
|
||||
if max_players == -1 or ctf.count_players_in_team(key) < max_players then
|
||||
table.insert(index, key)
|
||||
end
|
||||
end
|
||||
|
||||
if #index == 0 then
|
||||
minetest.log("error", "[CaptureTheFlag] No teams to join!")
|
||||
else
|
||||
local team = index[math.random(1, #index)]
|
||||
|
||||
print(name.." was allocated to "..team)
|
||||
|
||||
ctf.join(name, team)
|
||||
end
|
||||
elseif alloc_mode == 2 then
|
||||
local one = nil
|
||||
local one_count = -1
|
||||
local two = nil
|
||||
local two_count = -1
|
||||
for key, team in pairs(ctf.teams) do
|
||||
local count = ctf.count_players_in_team(key)
|
||||
if (max_players == -1 or count < max_players) then
|
||||
if count > one_count then
|
||||
two = one
|
||||
two_count = one_count
|
||||
one = key
|
||||
one_count = count
|
||||
end
|
||||
|
||||
if count > two_count then
|
||||
two = key
|
||||
two_count = count
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not one and not two then
|
||||
minetest.log("error", "[CaptureTheFlag] No teams to join!")
|
||||
elseif one and two then
|
||||
if math.random() > 0.5 then
|
||||
print(name.." was allocated to "..one)
|
||||
ctf.join(name, one)
|
||||
else
|
||||
print(name.." was allocated to "..two)
|
||||
ctf.join(name, two)
|
||||
end
|
||||
else
|
||||
if one then
|
||||
print(name.." was allocated to "..one)
|
||||
ctf.join(name, one)
|
||||
else
|
||||
print(name.." was allocated to "..two)
|
||||
ctf.join(name, two)
|
||||
end
|
||||
end
|
||||
else
|
||||
print("Unknown allocation mode: "..ctf.setting("allocate_mode"))
|
||||
end
|
||||
end)
|
||||
|
@ -13,7 +13,7 @@ minetest.register_node("traps:cage",{
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"default_grass_side.png", "default_grass_side.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
groups={immortal = 1},
|
||||
description = "Cage Trap",
|
||||
})
|
||||
|
||||
@ -22,7 +22,7 @@ minetest.register_node("traps:uncage",{
|
||||
inventory_image = minetest.inventorycube("traps_uncage.png",
|
||||
"traps_uncage.png", "traps_uncage.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
groups={immortal = 1},
|
||||
description = "Cage Trap Release",
|
||||
})
|
||||
|
||||
@ -33,7 +33,7 @@ minetest.register_node("traps:cage_glass", {
|
||||
inventory_image = minetest.inventorycube("default_glass.png"),
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
groups = {immortl},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
@ -48,14 +48,12 @@ minetest.register_abm(
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
--local objpos=obj:getpos()
|
||||
|
||||
local tmp
|
||||
|
||||
|
||||
minetest.env:add_node(pos,{name=block_to_place})
|
||||
|
||||
--Left
|
||||
print("Left")
|
||||
tmp={x=(pos.x+1),y=(pos.y+1),z=(pos.z)}
|
||||
local tmp = {x=(pos.x+1),y=(pos.y+1),z=(pos.z)}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
|
||||
--Right
|
||||
|
@ -6,174 +6,171 @@
|
||||
-- Cage Trap
|
||||
|
||||
|
||||
minetest.register_node("traps:lava",{
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.png"},
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"default_grass_side.png", "default_grass_side.png"),
|
||||
minetest.register_node("traps:lava", {
|
||||
tile_images = {"traps_grass.png", "default_dirt.png",
|
||||
"default_grass_side.png", "default_grass_side.png",
|
||||
"default_grass_side.png", "default_grass_side.png"},
|
||||
inventory_image = minetest.inventorycube("traps_grass.png",
|
||||
"default_grass_side.png", "default_grass_side.png"),
|
||||
dug_item = '', -- Get nothing
|
||||
groups={immortal},
|
||||
description = "Lava Drop Trap",
|
||||
groups = {immortal = 1},
|
||||
description = "Lava Drop Trap",
|
||||
})
|
||||
|
||||
local block_to_place="default:lava_source"
|
||||
local hi=5 --How high the lava is
|
||||
local block_to_place = "default:lava_source"
|
||||
local hi = 5 --How high the lava is
|
||||
|
||||
minetest.register_abm(
|
||||
{nodenames = {"traps:lava"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
{nodenames = {"traps:lava"},
|
||||
interval = 0.2,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
print("HIT!")
|
||||
--local objpos=obj:getpos()
|
||||
|
||||
local tmp
|
||||
|
||||
minetest.env:add_node(pos,{name="default:dirt"})
|
||||
|
||||
minetest.env:add_node(pos, {name = "default:dirt"})
|
||||
|
||||
--Left side pit
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
local tmp = {x = pos.x-2, y = pos.y, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-2, y = pos.y, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-2, y = pos.y, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-2, y = pos.y, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-2, y = pos.y, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
--Right side pit
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+2, y = pos.y, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+2, y = pos.y, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+2, y = pos.y, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+2, y = pos.y, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+2, y = pos.y, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
--front side pit
|
||||
tmp={x=pos.x-1,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-1, y = pos.y, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x, y = pos.y, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+1, y = pos.y, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
--back side pit
|
||||
tmp={x=pos.x-1,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x-1, y = pos.y, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x, y = pos.y, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name="air"})
|
||||
tmp = {x = pos.x+1, y = pos.y, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = "air"})
|
||||
|
||||
-- PLACE LAVA
|
||||
--
|
||||
--
|
||||
|
||||
--Left side lava
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-2, y = pos.y+hi, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-2, y = pos.y+hi, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-2, y = pos.y+hi, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-2, y = pos.y+hi, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x-2,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-2, y = pos.y+hi, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
--Right side lava
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+2, y = pos.y+hi, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+2, y = pos.y+hi, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+2, y = pos.y+hi, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+2, y = pos.y+hi, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+2,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+2, y = pos.y+hi, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
--front side pit
|
||||
tmp={x=pos.x-1,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-1, y = pos.y+hi, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x, y = pos.y+hi, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi,z=pos.z-2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+1, y = pos.y+hi, z = pos.z-2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
--back side lava
|
||||
tmp={x=pos.x-1,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x-1, y = pos.y+hi, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x, y = pos.y+hi, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi,z=pos.z+2}
|
||||
minetest.env:add_node(tmp,{name=block_to_place})
|
||||
tmp = {x = pos.x+1, y = pos.y+hi, z = pos.z+2}
|
||||
minetest.env:add_node(tmp, {name = block_to_place})
|
||||
|
||||
|
||||
--block barrier
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x, y = pos.y+hi-1, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
--1
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x+1, y = pos.y+hi-1, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x+1, y = pos.y+hi-1, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x+1,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x+1, y = pos.y+hi-1, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
--2
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x, y = pos.y+hi-1, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x-1, y = pos.y+hi-1, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z-1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x-1, y = pos.y+hi-1, z = pos.z-1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x,y=pos.y+hi-1,z=pos.z+1}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x, y = pos.y+hi-1, z = pos.z+1}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
tmp={x=pos.x-1,y=pos.y+hi-1,z=pos.z}
|
||||
minetest.env:add_node(tmp,{name="default:glass"})
|
||||
tmp = {x = pos.x-1, y = pos.y+hi-1, z = pos.z}
|
||||
minetest.env:add_node(tmp, {name = "default:glass"})
|
||||
|
||||
|
||||
end
|
||||
end,
|
||||
end,
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user