1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-11 13:39:14 +02:00

add timer to suicide

This commit is contained in:
Nathan Fox 2022-10-17 22:11:38 -04:00
parent eaf754f18b
commit 3964ddec72
No known key found for this signature in database
GPG Key ID: 7802E8DA4841B24F
5 changed files with 58 additions and 17 deletions

View File

@ -231,7 +231,7 @@ require 'utils.freeplay'
--require 'maps.cube'
--require 'maps.mountain_race.main'
--require 'maps.native_war.main'
--require 'maps.scrap_towny_ffa.main'
require 'maps.scrap_towny_ffa.main'
---------------------------------------------------------------
---------------- MORE MODULES HERE ----------------

View File

@ -18,7 +18,6 @@ require 'maps.scrap_towny_ffa.fluids_are_explosive'
require 'maps.scrap_towny_ffa.trap'
require 'maps.scrap_towny_ffa.turrets_drop_ammo'
require 'maps.scrap_towny_ffa.vehicles'
require 'utils.commands.suicide'
local Event = require 'utils.event'
local Autostash = require 'modules.autostash'
@ -38,6 +37,7 @@ local Gui = require 'utils.gui'
local Color = require 'utils.color_presets'
local Where = require 'utils.commands.where'
local Inventory = require 'modules.show_inventory'
local Suicide = require 'maps.scrap_towny_ffa.suicide'
local function spairs(t, order)
local keys = {}
@ -183,6 +183,7 @@ local tick_actions = {
[60 * 5] = Team.update_town_chart_tags, -- each minute, at 05 seconds
[60 * 10] = Team.set_all_player_colors, -- each minute, at 10 seconds
[60 * 15] = Fish.reproduce, -- each minute, at 15 seconds
[60 * 20] = Suicide.check, -- each minute, at 20 seconds
[60 * 25] = Biters.unit_groups_start_moving, -- each minute, at 25 seconds
[60 * 30] = Radar.reset, -- each minute, at 30 seconds
[60 * 45] = Biters.validate_swarms, -- each minute, at 45 seconds

View File

@ -0,0 +1,54 @@
local ScenarioTable = require 'maps.scrap_towny_ffa.table'
local yellow = {r = 200, g = 200, b = 0}
local minutes_to_die = 3
local one_minute = 60 * 60
commands.add_command(
'suicide',
'Kills the player',
function(cmd)
local this = ScenarioTable.get_table()
local player = game.player
if not player or not player.valid then
return
end
-- Schedule death for 30 seconds less than the average. Death is checked every minute, so this keeps
-- the average correct.
this.suicides[player.name] = game.tick + (one_minute * minutes_to_die - (one_minute * 0.5))
player.print("You ate a poison pill. You will die in approximately ".. minutes_to_die .. " minutes.", yellow)
end
)
local Public = {}
function Public.check()
local this = ScenarioTable.get_table()
for name, death_time in pairs(this.suicides) do
local remaining_time = death_time - game.tick
local player = game.get_player(name)
if not player or not player.valid then
return
end
if not player.character then
return
end
if remaining_time <= 0 then
player.character.die(player.force, player.character)
this.suicides[player.name] = nil
else
local remaining_minutes = math.ceil(remaining_time / 3600)
if remaining_minutes ~= minutes_to_die then
if remaining_minutes == 1 then
player.print(remaining_minutes .. " minute remaining until death.", yellow)
else
player.print(remaining_minutes .. " minutes remaining until death.", yellow)
end
end
end
end
return Public

View File

@ -38,6 +38,7 @@ function Public.reset_table()
this.spaceships = {}
this.pvp_shields = {}
this.pvp_shield_warned = {}
this.suicides = {}
end
function Public.get_table()

View File

@ -1,15 +0,0 @@
commands.add_command(
'suicide',
'Kills the player',
function(cmd)
local player = game.player
if not player or not player.valid then
return
end
if not player.character then
return
end
player.character.die()
end
)