1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-16 02:47:48 +02:00
ComfyFactorio/maps/wave_of_death/game_status.lua
Gerkiz 690c1b6e48 2.0 changes
Change global -> storage
Rework how rendering works
Game prototypes are now stored inside 'prototypes.#'
Renamed entity names
2024-09-24 19:37:11 +02:00

94 lines
3.1 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 storage.server_restart_timer then
return
end
storage.server_restart_timer = storage.server_restart_timer - 5
if storage.server_restart_timer == 120 then
return
end
if storage.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')
storage.server_restart_timer = nil
return
end
if storage.server_restart_timer % 30 == 0 then
game.print('Map will restart in ' .. storage.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)
storage.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 storage.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 storage.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)
storage.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