mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-08 00:39:30 +02:00
94 lines
3.0 KiB
Lua
94 lines
3.0 KiB
Lua
--luacheck: ignore
|
|
local game_status = {}
|
|
local Server = require 'utils.server'
|
|
|
|
local function create_victory_gui(winning_lane)
|
|
for _, player in pairs(game.connected_players) do
|
|
player.play_sound {path = 'utility/game_won', volume_modifier = 0.75}
|
|
local frame = player.gui.left.add {type = 'frame', name = 'victory_gui', direction = 'vertical', caption = 'Lane ' .. winning_lane .. ' has won the game!! ^_^'}
|
|
frame.style.font = 'heading-1'
|
|
frame.style.font_color = {r = 220, g = 220, b = 0}
|
|
end
|
|
end
|
|
|
|
game_status.restart_server = function()
|
|
if not global.server_restart_timer then
|
|
return
|
|
end
|
|
global.server_restart_timer = global.server_restart_timer - 5
|
|
if global.server_restart_timer == 120 then
|
|
return
|
|
end
|
|
if global.server_restart_timer == 0 then
|
|
game.print('Map is restarting!', {r = 0.22, g = 0.88, b = 0.22})
|
|
local message = 'Map is restarting! '
|
|
Server.to_discord_bold(table.concat {'*** ', message, ' ***'})
|
|
Server.start_scenario('wave_of_death')
|
|
global.server_restart_timer = nil
|
|
return
|
|
end
|
|
if global.server_restart_timer % 30 == 0 then
|
|
game.print('Map will restart in ' .. global.server_restart_timer .. ' seconds!', {r = 0.22, g = 0.88, b = 0.22})
|
|
end
|
|
end
|
|
|
|
game_status.has_lane_lost = function(event)
|
|
if event.entity.name ~= 'loader' then
|
|
return
|
|
end
|
|
local lane_number = tonumber(event.entity.force.name)
|
|
global.wod_lane[lane_number].game_lost = true
|
|
local surface = event.entity.surface
|
|
game.forces[lane_number].set_spawn_position({x = 32, y = 0}, surface)
|
|
|
|
surface.create_entity(
|
|
{
|
|
name = 'atomic-rocket',
|
|
position = event.entity.position,
|
|
force = 'enemy',
|
|
source = event.entity.position,
|
|
target = event.entity.position,
|
|
max_range = 1,
|
|
speed = 1
|
|
}
|
|
)
|
|
|
|
for _, player in pairs(game.forces[lane_number].connected_players) do
|
|
if player.character then
|
|
player.character.die()
|
|
end
|
|
end
|
|
game.print('>> Lane ' .. lane_number .. ' has been defeated!', {r = 120, g = 60, b = 0})
|
|
|
|
--determine winner and restart the server
|
|
local lanes_alive = 0
|
|
for i = 1, 4, 1 do
|
|
if global.wod_lane[i].game_lost == false then
|
|
lanes_alive = lanes_alive + 1
|
|
end
|
|
end
|
|
if lanes_alive ~= 1 then
|
|
for _, player in pairs(game.connected_players) do
|
|
create_lane_buttons(player)
|
|
player.play_sound {path = 'utility/game_lost', volume_modifier = 0.5}
|
|
end
|
|
return
|
|
end
|
|
|
|
for i = 1, 4, 1 do
|
|
if global.wod_lane[i].game_lost == false then
|
|
game.print('>> Lane ' .. i .. ' has won the game!!', {r = 220, g = 220, b = 0})
|
|
create_victory_gui(i)
|
|
global.server_restart_timer = 120
|
|
end
|
|
end
|
|
|
|
for _, unit in pairs(surface.find_entities_filtered({type = 'unit'})) do
|
|
if unit.valid then
|
|
unit.die()
|
|
end
|
|
end
|
|
end
|
|
|
|
return game_status
|