sumo_duels/teams.lua

161 lines
5.9 KiB
Lua
Raw Permalink Normal View History

2021-03-20 14:10:09 -07:00
sumo_duels.teams = {lobby = {}, waiting_arena_1 = {}, arena_1 = {}, waiting_arena_2 = {}, arena_2 = {}, waiting_arena_3 = {}, arena_3 = {}}
2021-03-22 14:51:12 -07:00
sumo_duels.team_names = {"lobby", "waiting_arena_1", "arena_1", "waiting_arena_2", "arena_2", "waiting_arena_3", "arena_3"}
2021-03-15 15:00:48 -07:00
2021-03-23 09:18:48 -07:00
local lobby_pos = {x = 0, y = 100, z = 0}
2021-03-20 14:20:42 -07:00
local arena_1_pos = {x = 0, y = 81, z = 7}
local arena_2_pos = {x = 8, y = 81, z = -7}
local arena_3_pos = {x = -8, y = 81, z = -7}
2021-03-20 10:19:18 -07:00
sumo_duels.tablefind = function(tab,el)
for index, value in pairs(tab) do
if value == el then
return index
end
end
end
2021-03-17 09:49:09 -07:00
2021-03-19 09:42:50 -07:00
sumo_duels.get_player_team = function(name)
for k, team in pairs(sumo_duels.teams) do
2021-03-17 09:38:54 -07:00
for _, pname in ipairs(team) do
if name == pname then return k end
end
end
end
2021-03-19 09:42:50 -07:00
sumo_duels.get_other_team_player = function(name)
local current = sumo_duels.get_player_team(name)
2021-03-20 10:19:18 -07:00
for k, playername in pairs(sumo_duels.teams[current]) do
if not name == playername then return k end
2021-03-17 09:45:36 -07:00
end
end
2021-03-16 10:32:17 -07:00
sumo_duels.set_playing = function(pname, arena_number)
2021-03-19 09:42:50 -07:00
local current = sumo_duels.get_player_team(pname)
2021-03-20 10:19:18 -07:00
local tablenumber = sumo_duels.tablefind(sumo_duels.teams[current], pname)
table.remove(sumo_duels.teams[current], tonumber(tablenumber))
2021-03-20 10:23:37 -07:00
local player = minetest.get_player_by_name(pname)
2021-03-20 14:22:47 -07:00
if arena_number == "1" then
player:set_pos(arena_1_pos)
elseif arena_number == "2" then
player:set_pos(arena_2_pos)
elseif arena_number == "3" then
player:set_pos(arena_3_pos)
end
2021-03-19 09:29:59 -07:00
table.insert(sumo_duels.teams["arena_" .. arena_number], pname)
2021-03-22 15:05:50 -07:00
sumo_duels.hud_update()
2021-03-16 10:32:17 -07:00
end
sumo_duels.set_waiting = function(pname, arena_number)
2021-03-19 09:42:50 -07:00
local current = sumo_duels.get_player_team(pname)
2021-03-21 14:35:39 -07:00
if current:match("^arena_%d+") then return false, "You are in a game, dont try escape" end
2021-03-20 10:19:18 -07:00
local tablenumber = sumo_duels.tablefind(sumo_duels.teams[current], pname)
table.remove(sumo_duels.teams[current], tonumber(tablenumber))
2021-03-18 09:37:50 -07:00
local player = minetest.get_player_by_name(pname)
player:set_pos(lobby_pos)
2021-03-19 09:29:59 -07:00
table.insert(sumo_duels.teams["waiting_arena_" .. arena_number], pname)
2021-03-22 15:05:50 -07:00
sumo_duels.hud_update()
2021-03-16 10:32:17 -07:00
end
2021-03-15 15:07:21 -07:00
2021-03-17 09:38:54 -07:00
sumo_duels.set_lobby = function(pname)
2021-03-19 09:42:50 -07:00
local current = sumo_duels.get_player_team(pname)
2021-03-20 10:19:18 -07:00
local tablenumber = sumo_duels.tablefind(sumo_duels.teams[current], pname)
table.remove(sumo_duels.teams[current], tonumber(tablenumber))
2021-03-17 09:51:58 -07:00
local player = minetest.get_player_by_name(pname)
player:set_pos(lobby_pos)
2021-03-19 09:50:10 -07:00
table.insert(sumo_duels.teams.lobby, pname)
2021-03-22 15:05:50 -07:00
sumo_duels.hud_update()
2021-03-15 15:06:36 -07:00
end
2021-03-15 15:05:02 -07:00
minetest.register_on_joinplayer(function(player)
2021-03-16 10:32:17 -07:00
local pname = player:get_player_name()
2021-03-19 09:50:10 -07:00
table.insert(sumo_duels.teams.lobby, pname)
2021-03-15 15:05:02 -07:00
end)
2021-03-16 10:19:55 -07:00
2021-03-20 14:43:57 -07:00
minetest.register_on_leaveplayer(function(player)
local pname = player:get_player_name()
local current = sumo_duels.get_player_team(pname)
local tablenumber = sumo_duels.tablefind(sumo_duels.teams[current], pname)
table.remove(sumo_duels.teams[current], tonumber(tablenumber))
2021-03-22 15:05:50 -07:00
sumo_duels.hud_update()
2021-03-20 14:43:57 -07:00
end)
2021-03-16 10:32:17 -07:00
minetest.register_chatcommand("join", {
params = "number",
description = "Join the waiting list for an arena",
privs = {play = true},
func = function(name, number)
2021-03-18 14:38:45 -07:00
if not name then return end
2021-03-16 10:32:17 -07:00
local player = minetest.get_player_by_name(name)
if not player then return end
if not player:is_player() then return end
2021-03-23 09:18:33 -07:00
if number == "1" or number == "2" or number == "3" then
sumo_duels.set_waiting(name, number)
else return false, "You must put a number from 1 to 3 to join a waiting list for an arena" end
2021-03-16 10:32:17 -07:00
end,
})
2021-03-16 10:19:55 -07:00
2021-03-20 14:42:07 -07:00
minetest.register_chatcommand("lobby", {
description = "Join lobby (only use this to exit the queue for an arena)",
privs = {play = true},
func = function(name, _)
if not name then return end
local player = minetest.get_player_by_name(name)
if not player then return end
if not player:is_player() then return end
local current = sumo_duels.get_player_team(name)
2021-03-21 14:16:55 -07:00
if current:match("^arena_%d+") then return false, "You are in a game, dont try escape" end
2021-03-20 14:42:07 -07:00
sumo_duels.set_lobby(name)
end,
})
2021-03-20 14:25:07 -07:00
minetest.register_globalstep(function(dtime)--for arena_1 and its waiting list
if #sumo_duels.teams.arena_1 == 0 then --noone in arena_1
2021-03-19 09:50:10 -07:00
if #sumo_duels.teams.waiting_arena_1 >= 2 then
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_1[1], "1")
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_1[1], "1")
2021-03-16 11:14:07 -07:00
end
2021-03-19 09:50:10 -07:00
elseif #sumo_duels.teams.arena_1 == 1 then
for _, name in ipairs(sumo_duels.teams.arena_1) do
2021-03-18 13:41:22 -07:00
minetest.chat_send_player(name, "Your opponent left. GG in a way. lol")
2021-03-20 14:25:59 -07:00
sumo_duels.set_lobby(name)
2021-03-16 11:17:28 -07:00
end
2021-03-16 10:19:55 -07:00
end
end)
2021-03-20 14:25:07 -07:00
minetest.register_globalstep(function(dtime)--for arena_2 and its waiting list
if #sumo_duels.teams.arena_2 == 0 then --noone in arena_2
if #sumo_duels.teams.waiting_arena_2 >= 2 then
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_2[1], "1")
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_2[1], "1")
end
elseif #sumo_duels.teams.arena_2 == 1 then
for _, name in ipairs(sumo_duels.teams.arena_2) do
minetest.chat_send_player(name, "Your opponent left. GG in a way. lol")
2021-03-20 14:25:59 -07:00
sumo_duels.set_lobby(name)
2021-03-20 14:25:07 -07:00
end
end
end)
minetest.register_globalstep(function(dtime)--for arena_3 and its waiting list
if #sumo_duels.teams.arena_3 == 0 then --noone in arena_3
if #sumo_duels.teams.waiting_arena_3 >= 2 then
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_3[1], "1")
sumo_duels.set_playing(sumo_duels.teams.waiting_arena_3[1], "1")
end
elseif #sumo_duels.teams.arena_3 == 1 then
for _, name in ipairs(sumo_duels.teams.arena_3) do
2021-03-20 14:45:50 -07:00
minetest.chat_send_player(name, "Your opponent left. GG... in a way. lol")
2021-03-20 14:25:59 -07:00
sumo_duels.set_lobby(name)
2021-03-20 14:25:07 -07:00
end
end
end)
2021-03-17 09:45:36 -07:00
minetest.register_on_dieplayer(function(player)
2021-03-19 10:12:31 -07:00
local team = sumo_duels.get_player_team(player:get_player_name())
2021-03-20 14:11:52 -07:00
if not team == "arena_1" or not team == "arena_2" or not team == "arena_3" then return end
2021-03-20 10:19:18 -07:00
if sumo_duels.get_other_team_player(player:get_player_name()) then
minetest.chat_send_player(sumo_duels.get_other_team_player(player:get_player_name()), "Your opponent died! GG, you win")
2021-03-19 10:12:31 -07:00
end
for _, teamplayer in ipairs(sumo_duels.teams[team]) do
sumo_duels.set_lobby(teamplayer)
2021-03-17 09:49:18 -07:00
end
2021-03-17 09:45:36 -07:00
end)