Port Bay's inactivity subsystem

This commit is contained in:
Arokha Sieyes
2020-03-09 00:53:31 -04:00
parent b849ff90a2
commit 32ccb0901a

View File

@@ -1,42 +1,58 @@
SUBSYSTEM_DEF(inactivity) SUBSYSTEM_DEF(inactivity)
name = "AFK Kick" name = "Inactivity"
wait = 600 wait = 1 MINUTE
flags = SS_BACKGROUND | SS_NO_TICK_CHECK flags = SS_NO_INIT | SS_BACKGROUND
var/tmp/list/client_list
var/number_kicked = 0
/datum/controller/subsystem/inactivity/fire() /datum/controller/subsystem/inactivity/fire(resumed = FALSE)
if(config.kick_inactive) if (!config.kick_inactive)
for(var/i in GLOB.clients) can_fire = FALSE
var/client/C = i return
if(C.is_afk(config.kick_inactive MINUTES) && !C.holder) // VOREStation Edit - Allow admins to idle if (!resumed)
to_chat(C,"<span class='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</span>") client_list = GLOB.clients.Copy()
var/information
if(C.mob) while(client_list.len)
if(ishuman(C.mob)) var/client/C = client_list[client_list.len]
var/job client_list.len--
var/mob/living/carbon/human/H = C.mob if(!C.holder && C.is_afk(config.kick_inactive MINUTES) && !isobserver(C.mob))
var/datum/data/record/R = find_general_record("name", H.real_name)
if(R) to_chat(C, "<span class='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</span>")
job = R.fields["real_rank"]
if(!job && H.mind)
job = H.mind.assigned_role
if(!job && H.job)
job = H.job
if(job)
information = " while [job]."
else if(issilicon(C.mob)) var/information
information = " while a silicon." if(C.mob)
if(isAI(C.mob)) if(ishuman(C.mob))
var/mob/living/silicon/ai/A = C.mob var/job
empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(A.loc) var/mob/living/carbon/human/H = C.mob
global_announcer.autosay("[A] has been moved to intelligence storage.", "Artificial Intelligence Oversight") var/datum/data/record/R = find_general_record("name", H.real_name)
A.clear_client() if(R)
information = " while an AI." job = R.fields["real_rank"]
if(!job && H.mind)
job = H.mind.assigned_role
if(!job && H.job)
job = H.job
if(job)
information = " while [job]."
var/adminlinks else if(issilicon(C.mob))
adminlinks = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.mob.x];Y=[C.mob.y];Z=[C.mob.z]'>JMP</a>|<A HREF='?_src_=holder;cryoplayer=\ref[C.mob]'>CRYO</a>)" information = " while a silicon."
if(isAI(C.mob))
var/mob/living/silicon/ai/A = C.mob
empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(A.loc)
global_announcer.autosay("[A] has been moved to intelligence storage.", "Artificial Intelligence Oversight")
A.clear_client()
information = " while an AI."
log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob) var/adminlinks
adminlinks = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.mob.x];Y=[C.mob.y];Z=[C.mob.z]'>JMP</a>|<A HREF='?_src_=holder;cryoplayer=\ref[C.mob]'>CRYO</a>)"
qdel(C) log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob)
qdel(C)
number_kicked++
if (MC_TICK_CHECK)
return
/datum/controller/subsystem/inactivity/stat_entry()
..("Kicked: [number_kicked]")