bedwars/team.lua

79 lines
2.6 KiB
Lua

bedwars.teams = {red = {}, green = {}, blue = {}, yellow = {}}
bedwars.get_biggest_team = function()
local teamnames = {"red", "green", "blue", "yellow"}
local lengths = {#bedwars.teams.red, #bedwars.teams.green, #bedwars.teams.blue, #bedwars.teams.yellow}
local greatest = 1
for k, v in ipairs(lengths) do
if v > greatest then greatest = v end
end
for k, v in ipairs(lengths) do
if v == greatest then return teamnames[k] end
end
end
bedwars.get_smallest_team = function()
local teamnames = {"red", "green", "blue", "yellow"}
local lengths = {#bedwars.teams.red, #bedwars.teams.green, #bedwars.teams.blue, #bedwars.teams.yellow}
local smallest = 4
for k, v in ipairs(lengths) do
if v < smallest then smallest = v end
end
for k, v in ipairs(lengths) do
if v == smallest then return teamnames[k] end
end
end
bedwars.assign_team = function(name)
local team = bedwars.get_smallest_team()
table.insert(bedwars.teams[team], name)
local player = minetest.get_player_by_name(name)
if player then
player:set_pos(minetest.string_to_pos(bedwars.get_map_by_name(bedwars.current_map)[bedwars.get_player_team(player:get_player_name())]))
end
end
bedwars.get_player_team = function(name)
for k, team in pairs(bedwars.teams) do
for _, pname in ipairs(team) do
if name == pname then return k end
end
end
end
minetest.register_on_joinplayer(function(player)
bedwars.assign_team(player:get_player_name())
bedwars.ui_update()
end)
minetest.register_on_leaveplayer(function(player)
local team = bedwars.teams[bedwars.get_player_team(player:get_player_name())]
for k, pname in ipairs(team) do
if player:get_player_name() == pname then team[k] = nil end
end
bedwars.ui_update()
end)
bedwars.get_team_by_pos = function(pos)
local pos_str = minetest.pos_to_string(pos)
local map = bedwars.get_map_by_name(bedwars.current_map)
local team_pos_table = {red = minetest.string_to_pos(map.red), green = minetest.string_to_pos(map.green), blue = minetest.string_to_pos(map.blue), yellow = minetest.string_to_pos(map.yellow)}
local diffs = {}
for team, teampos in pairs(team_pos_table) do
local diff = {x = math.abs(math.abs(pos.x) - math.abs(teampos.x)), y = math.abs(math.abs(pos.y) - math.abs(teampos.y)), z = math.abs(math.abs(pos.z) - math.abs(teampos.z))}
diffs[team] = diff
end
local smallest = {x = 300, z = 300}
for team, diff in pairs(diffs) do
if diff.x + diff.z < smallest.x + smallest.z then
smallest.x = diff.x
smallest.z = diff.z
end
end
for team, diff in pairs(diffs) do
if smallest.x == diff.x and smallest.z == diff.z then
return team
end
end
end