2022-10-19 22:51:01 -04:00
|
|
|
local Scheduler = require 'utils.scheduler'
|
2022-10-17 22:11:38 -04:00
|
|
|
local ScenarioTable = require 'maps.scrap_towny_ffa.table'
|
2022-10-19 22:51:01 -04:00
|
|
|
local Event = require 'utils.event'
|
2022-10-17 22:11:38 -04:00
|
|
|
|
2022-10-17 22:23:26 -04:00
|
|
|
local yellow = { r = 200, g = 200, b = 0 }
|
2022-10-19 22:51:01 -04:00
|
|
|
|
|
|
|
-- Must be at least 1 minute
|
2022-10-17 22:23:26 -04:00
|
|
|
local minutes_to_die = 10
|
2022-10-19 22:51:59 -04:00
|
|
|
|
|
|
|
local one_minute = 60 * 60
|
2022-10-19 22:51:01 -04:00
|
|
|
|
|
|
|
local function on_player_died(event)
|
|
|
|
local this = ScenarioTable.get_table()
|
|
|
|
local player = game.players[event.player_index]
|
|
|
|
this.suicides[player.index] = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
Event.add(defines.events.on_player_died, on_player_died)
|
|
|
|
|
|
|
|
local suicide_handler = Scheduler.set(function(data)
|
|
|
|
for i = 1, #data do
|
|
|
|
local this = ScenarioTable.get_table()
|
|
|
|
local player_index = data[i].player_index
|
|
|
|
local player = game.get_player(player_index)
|
|
|
|
if not player or not player.valid or not player.character then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
if not this.suicides[player.index] then
|
|
|
|
-- the suicide was cancelled (the character died)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local minutes_remaining = this.suicides[player.index].minutes_remaining
|
|
|
|
|
|
|
|
if minutes_remaining <= 0 then
|
|
|
|
player.character.die(player.force, player.character)
|
|
|
|
this.suicides[player.index] = nil
|
|
|
|
else
|
|
|
|
if minutes_remaining == 1 then
|
|
|
|
player.print(minutes_remaining .. " minute remaining until death.", yellow)
|
|
|
|
else
|
|
|
|
player.print(minutes_remaining .. " minutes remaining until death.", yellow)
|
|
|
|
end
|
|
|
|
this.suicides[player.index].minutes_remaining = this.suicides[player.index].minutes_remaining - 1
|
|
|
|
Scheduler.timer(game.tick + one_minute, data[i].handler, { player_index = player.index, handler = data[i].handler})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end)
|
2022-10-17 22:11:38 -04:00
|
|
|
|
|
|
|
commands.add_command(
|
|
|
|
'suicide',
|
|
|
|
'Kills the player',
|
2022-10-21 19:04:45 +02:00
|
|
|
function()
|
2022-10-17 22:11:38 -04:00
|
|
|
local this = ScenarioTable.get_table()
|
|
|
|
local player = game.player
|
|
|
|
|
|
|
|
if not player or not player.valid then
|
|
|
|
return
|
|
|
|
end
|
2022-10-17 22:23:26 -04:00
|
|
|
|
2022-10-19 22:51:01 -04:00
|
|
|
if this.suicides[player.index] then
|
2022-10-17 22:23:26 -04:00
|
|
|
player.print("You are already dying!", yellow)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2022-10-19 22:51:01 -04:00
|
|
|
this.suicides[player.index] = {minutes_remaining = minutes_to_die - 1}
|
|
|
|
Scheduler.timer(game.tick + one_minute, suicide_handler, { player_index = player.index, handler = suicide_handler })
|
|
|
|
player.print("You ate a poison pill. You will die in " .. minutes_to_die .. " minutes.", yellow)
|
2022-10-17 22:11:38 -04:00
|
|
|
end
|
|
|
|
)
|