subgames/mods/mesewars/start.lua

140 lines
5.4 KiB
Lua

local start = {}
function mesewars.may_start_game(lobby)
local playercount = #mesewars.get_lobby_players(lobby)
if playercount >=2 and not start[lobby] and lobby ~= 0 and mesewars.teams_correct(lobby) then
start[lobby] = true
mesewars.chat_send_all_lobby(lobby, "Game starts in 30 seconds!")
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
subgames.add_bothud(player, "Game starts in 30 seconds!", 0xFFAE19, 2)
end
minetest.after(20, function()
mesewars.chat_send_all_lobby(lobby, "Game starts in 10 seconds!")
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
subgames.add_bothud(player, "Game starts in 10 seconds!", 0xFFAE19, 2)
end
minetest.after(5, function()
mesewars.chat_send_all_lobby(lobby, "Game starts in 5 seconds!")
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
subgames.add_bothud(player, "Game starts in 5 seconds!", 0xFFAE19, 2)
end
minetest.after(5, function()
playercount = #mesewars.get_lobby_players(lobby)
if playercount >= 2 and mesewars.teams_correct(lobby) then
local msg = core.colorize("red", "Game Start now!")
mesewars.chat_send_all_lobby(lobby, msg)
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
subgames.add_mithud(player, "Game starts now!", 0xFF0000, 2)
end
mesewars.start_game(lobby)
else start[lobby] = false
mesewars.chat_send_all_lobby(lobby, "Game start stopped, because there are not enough players.")
end
end)
end)
end)
end
end
function mesewars.reset_map(lobby)
for pos, node in pairs(mesewars.lobbys[lobby].mapblocks) do
minetest.set_node(minetest.string_to_pos(pos), node)
end
worldedit.clear_objects(mesewars.lobbys[lobby].mappos1, mesewars.lobbys[lobby].mappos2)
mesewars.lobbys[lobby].mapblocks = {}
end
function mesewars.start_game(lobby)
minetest.log("warning", "mesewars: Starting Game of the lobby "..lobby)
if lobby == 0 then
return
end
mesewars.lobbys[lobby].ingame = true
for k, v in pairs(mesewars.lobbys[lobby].mesepos) do
mesewars.lobbys[lobby].meses[k] = true
minetest.set_node(v, {name="mesewars:mese"..k})
end
for _, player in pairs(mesewars.get_lobby_players(lobby)) do
local name = player:get_player_name()
local team = mesewars.lobbys[lobby].players[name]
if not team then
mesewars.give_random_team(player)
team = mesewars.lobbys[lobby].players[name]
end
subgames.clear_inv(player)
mesewars.color_tag(player)
mesewars.give_kit_items(name)
player:set_pos(mesewars.lobbys[lobby].pos[team])
sfinv.set_page(player, "3d_armor:armor")
mesewars.set_maxteam(lobby)
end
local starttime = os.time()
mesewars.lobbys[lobby].starttime = starttime
minetest.after(1200, function() -- Time when game times out 60*20
if starttime == mesewars.lobbys[lobby].starttime and mesewars.lobbys[lobby].ingame then
-- Game timed out (was longer then 20min)
local msg = minetest.colorize("red", "Restarting Game (Game timed out!)")
mesewars.chat_send_all_lobby(lobby, msg)
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
mesewars.leave_game(player)
mesewars.join_game(player, lobby)
end
mesewars.win(lobby)
end
end)
end
function mesewars.get_team_count(lobby)
local team = 0
local lastteam
local teams = {}
local restplayers = {}
if lobby ~= 0 then
for name, role in pairs(mesewars.lobbys[lobby].players) do
if role and not teams[role] then
teams[role] = true
lastteam = role
team=team+1
restplayers[name] = true
end
end
end
return team, lastteam, restplayers
end
function mesewars.win(lobby)
if lobby and lobby ~= 0 and mesewars.lobbys[lobby].ingame then
local count, winner, restplayers = mesewars.get_team_count(lobby)
if count <= 1 then
if count > 0 then
mesewars.chat_send_all_lobby(lobby, minetest.colorize(mesewars.get_color_from_team(winner), "Team "..mesewars.get_color_from_team(winner)).." has won!")
minetest.log("warning", "mesewars: "..minetest.colorize(mesewars.get_color_from_team(winner), mesewars.get_color_from_team(winner)).." won the Game of the lobby "..lobby)
for name,_ in pairs(restplayers) do
money.set_money(name, money.get_money(name)+25)
minetest.chat_send_player(winner, "[CoinSystem] You have receive 25 Coins!")
end
mesewars.chat_send_all_lobby(lobby, "Server Restarts in 5 sec.")
for _,player in ipairs(mesewars.get_lobby_players(lobby)) do
subgames.add_mithud(player, "Team "..mesewars.get_color_from_team(winner).." has won!", mesewars.get_hex_from_team(winner), 3)
end
end
minetest.after(5, function()
for _, player in pairs(mesewars.get_lobby_players(lobby)) do
local name = player:get_player_name()
player:set_pos(mesewars.lobbys[lobby].specpos)
subgames.clear_inv(player)
subgames.unspectate(player)
mesewars.lobbys[lobby].players[name] = false
mesewars.color_tag(player)
sfinv.set_page(player, "mesewars:team")
end
mesewars.reset_map(lobby)
mesewars.win(lobby)
end)
mesewars.lobbys[lobby].ingame = false
start[lobby] = false
end
else mesewars.may_start_game(lobby)
end
end