From 79273910425f4b0e623768613e0cd46b2c039bce Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Sat, 30 May 2020 11:07:40 +0100 Subject: [PATCH] Cleans up some awful code from the ticker --- code/controllers/subsystem/statistics.dm | 28 ++++++++++++++++ code/controllers/subsystem/ticker.dm | 27 +++++----------- code/defines/procs/statistics.dm | 41 ------------------------ paradise.dme | 1 + 4 files changed, 37 insertions(+), 60 deletions(-) create mode 100644 code/controllers/subsystem/statistics.dm diff --git a/code/controllers/subsystem/statistics.dm b/code/controllers/subsystem/statistics.dm new file mode 100644 index 00000000000..3a0bf7e51e2 --- /dev/null +++ b/code/controllers/subsystem/statistics.dm @@ -0,0 +1,28 @@ +SUBSYSTEM_DEF(statistics) + name = "Statistics" + wait = 6000 // 10 minute delay between fires + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME // Only count time actually ingame to avoid logging pre-round dips + offline_implications = "Player count and admin count statistics will no longer be logged to the database. No immediate action is needed." + + +/datum/controller/subsystem/statistics/Initialize(start_timeofday) + if(!config.sql_enabled) + flags |= SS_NO_FIRE // Disable firing if SQL is disabled + return ..() + +/datum/controller/subsystem/statistics/fire(resumed = 0) + sql_poll_players() + +/datum/controller/subsystem/statistics/proc/sql_poll_players() + if(!config.sql_enabled) + return + var/playercount = GLOB.clients.len + var/admincount = GLOB.admins.len + if(!GLOB.dbcon.IsConnected()) + log_game("SQL ERROR during player polling. Failed to connect.") + else + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/DBQuery/query = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time) VALUES ([playercount], [admincount], '[sqltime]')") + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during playercount polling. Error: \[[err]\]\n") diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c05d96bb441..228f1a7c528 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -29,7 +29,7 @@ SUBSYSTEM_DEF(ticker) var/pregame_timeleft // This is used for calculations var/delay_end = 0 //if set to nonzero, the round will not restart on it's own var/triai = 0//Global holder for Triumvirate - var/initialtpass = 0 //holder for inital autotransfer vote timer + var/next_autotransfer = 0 //holder for inital autotransfer vote timer var/obj/screen/cinematic = null //used for station explosion cinematic var/round_end_announced = 0 // Spam Prevention. Announce round end only once. var/ticker_going = TRUE // This used to be in the unused globals, but it turns out its actually used in a load of places. Its now a ticker var because its related to round stuff, -aa @@ -90,6 +90,11 @@ SUBSYSTEM_DEF(ticker) delay_end = 0 // reset this in case round start was delayed mode.process() mode.process_job_tasks() + + if(world.time > next_autotransfer) + SSvote.autotransfer() + next_autotransfer = world.time + config.vote_autotransfer_interval + var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked if(config.continuous_rounds) mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result @@ -111,19 +116,6 @@ SUBSYSTEM_DEF(ticker) else world.Reboot("Round ended.", "end_proper", "proper completion") - -/datum/controller/subsystem/ticker/proc/votetimer() - var/timerbuffer = 0 - if(initialtpass == 0) - timerbuffer = config.vote_autotransfer_initial - else - timerbuffer = config.vote_autotransfer_interval - spawn(timerbuffer) - SSvote.autotransfer() - initialtpass = 1 - votetimer() - - /datum/controller/subsystem/ticker/proc/setup() cultdat = setupcult() //Create and announce mode @@ -281,11 +273,8 @@ SUBSYSTEM_DEF(ticker) auto_toggle_ooc(0) // Turn it off round_start_time = world.time - if(config.sql_enabled) - spawn(3000) - statistic_cycle() // Polls population totals regularly and stores them in an SQL DB - - votetimer() + // Sets the auto shuttle vote to happen after the config duration + next_autotransfer = world.time + config.vote_autotransfer_initial for(var/mob/new_player/N in GLOB.mob_list) if(N.client) diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm index e6e111880fb..094e4f9ca2b 100644 --- a/code/defines/procs/statistics.dm +++ b/code/defines/procs/statistics.dm @@ -1,35 +1,3 @@ -/proc/sql_poll_players() - if(!config.sql_enabled) - return - var/playercount = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - playercount += 1 - establish_db_connection() - if(!GLOB.dbcon.IsConnected()) - log_game("SQL ERROR during player polling. Failed to connect.") - else - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/DBQuery/query = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (playercount, time) VALUES ([playercount], '[sqltime]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during player polling. Error : \[[err]\]\n") - - -/proc/sql_poll_admins() - if(!config.sql_enabled) - return - var/admincount = GLOB.admins.len - establish_db_connection() - if(!GLOB.dbcon.IsConnected()) - log_game("SQL ERROR during admin polling. Failed to connect.") - else - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/DBQuery/query = GLOB.dbcon.NewQuery("INSERT INTO [format_table_name("legacy_population")] (admincount, time) VALUES ([admincount], '[sqltime]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during admin polling. Error : \[[err]\]\n") - /proc/sql_report_round_start() // TODO if(!config.sql_enabled) @@ -110,15 +78,6 @@ var/err = query.ErrorMsg() log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") -/proc/statistic_cycle() - if(!config.sql_enabled) - return - while(1) - sql_poll_players() - sleep(600) - sql_poll_admins() - sleep(6000) //Poll every ten minutes - //This proc is used for feedback. It is executed at round end. /proc/sql_commit_feedback() if(!GLOB.blackbox) diff --git a/paradise.dme b/paradise.dme index 3e4d100880a..c3dcfbd3c2d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -242,6 +242,7 @@ #include "code\controllers\subsystem\radio.dm" #include "code\controllers\subsystem\shuttles.dm" #include "code\controllers\subsystem\spacedrift.dm" +#include "code\controllers\subsystem\statistics.dm" #include "code\controllers\subsystem\sun.dm" #include "code\controllers\subsystem\throwing.dm" #include "code\controllers\subsystem\ticker.dm"