From 516cd5d5573ad73788dbbea738a9c4479abf2de6 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 11 Jun 2021 22:11:32 +0100 Subject: [PATCH] Improves new player GCR --- code/controllers/subsystem/chat_pings.dm | 16 ++++++++++++++++ code/game/jobs/job/job.dm | 2 +- code/modules/client/client_procs.dm | 1 + goon/code/datums/browserOutput.dm | 20 +++++++++++++------- paradise.dme | 1 + 5 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 code/controllers/subsystem/chat_pings.dm diff --git a/code/controllers/subsystem/chat_pings.dm b/code/controllers/subsystem/chat_pings.dm new file mode 100644 index 00000000000..ad013cab3d6 --- /dev/null +++ b/code/controllers/subsystem/chat_pings.dm @@ -0,0 +1,16 @@ +SUBSYSTEM_DEF(chat_pings) + name = "Chat Pings" + flags = SS_NO_INIT + runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME // ALL OF THEM + wait = 30 SECONDS // Chat pings every 30 seconds + /// List of all held chat datums + var/list/datum/chatOutput/chat_datums = list() // Do NOT put this in Initialize(). You will cause issues. + +/datum/controller/subsystem/chat_pings/fire(resumed) + for(var/datum/chatOutput/CO as anything in chat_datums) + CO.updatePing() + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/chat_pings/stat_entry() + ..("P: [length(chat_datums)]") diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index fd3e1a0442b..8f313c185dc 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -225,7 +225,7 @@ to_chat(H, "Failed to locate a storage object on your mob, either you spawned with no hands free and no backpack or this is a bug.") qdel(G) - qdel(gear_leftovers) + gear_leftovers.Cut() return 1 diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index fe1799b5048..a818e2251aa 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -421,6 +421,7 @@ GLOB.admins -= src GLOB.directory -= ckey GLOB.clients -= src + QDEL_NULL(chatOutput) if(movingmob) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index 431aa3d90bd..84e604a479f 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -38,6 +38,7 @@ var/list/chatResources = list( . = ..() owner = C + SSchat_pings.chat_datums += src /datum/chatOutput/proc/start() if(!owner) @@ -124,14 +125,14 @@ var/list/chatResources = list( if(owner.tos_consent) sendClientData() - pingLoop() + updatePing() -/datum/chatOutput/proc/pingLoop() - set waitfor = FALSE - - while (owner) - ehjax_send(data = owner.is_afk(29 SECONDS) ? "softPang" : "pang") // SoftPang isn't handled anywhere but it'll always reset the opts.lastPang. - sleep(30 SECONDS) +// PARADISE EDIT: This just updates the ping and is called from SSchat_pings +/datum/chatOutput/proc/updatePing() + if(!owner) + qdel(src) + return + ehjax_send(data = owner.is_afk(29 SECONDS) ? "softPang" : "pang") // SoftPang isn't handled anywhere but it'll always reset the opts.lastPang. /datum/chatOutput/proc/ehjax_send(client/C = owner, window = "browseroutput", data) if(islist(data)) @@ -223,6 +224,11 @@ var/list/chatResources = list( /datum/chatOutput/proc/clear_syndicate_codes() owner << output(null, "browseroutput:codewordsClear") +/datum/chatOutput/Destroy(force) + SSchat_pings.chat_datums -= src + return ..() + + /client/verb/debug_chat() set hidden = 1 chatOutput.ehjax_send(data = list("firebug" = 1)) diff --git a/paradise.dme b/paradise.dme index bd12100904c..b3c287e496d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -194,6 +194,7 @@ #include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\blackbox.dm" #include "code\controllers\subsystem\changelog.dm" +#include "code\controllers\subsystem\chat_pings.dm" #include "code\controllers\subsystem\cleanup.dm" #include "code\controllers\subsystem\dbcore.dm" #include "code\controllers\subsystem\discord.dm"