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-15 15:00:48 -07:00
2021-03-20 10:23:37 -07:00
local lobby_pos = { x = 0 , y = 100 , z = 0 } --set world spawn to this too
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-20 10:19:18 -07:00
minetest.chat_send_all ( dump ( sumo_duels.teams ) )
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-20 14:42:07 -07:00
if current = " arena_1 " or current = " arena_2 " or current = " arena_3 " or current = " waiting_arena_1 " or current = " waiting_arena_2 " or current = " waiting_arena_3 " then return false , " You are already in a game or in the queue for a game, if you want to exit the queue, do /lobby " 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-20 10:19:18 -07:00
minetest.chat_send_all ( dump ( sumo_duels.teams ) )
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-20 10:19:18 -07:00
minetest.chat_send_all ( dump ( sumo_duels.teams ) )
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-19 10:12:31 -07:00
minetest.chat_send_all ( dump ( sumo_duels.teams ) )
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 ) )
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 number = number or " 1 "
local player = minetest.get_player_by_name ( name )
if not player then return end
if not player : is_player ( ) then return end
sumo_duels.set_waiting ( name , number )
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 )
if current = " arena_1 " or current = " arena_2 " or current = " arena_3 " then return false , " You are in a game, dont try escape " end
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
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 )