SUBSYSTEM_DEF(inactivity) name = "Inactivity" wait = 1 MINUTE flags = SS_NO_INIT | SS_BACKGROUND var/tmp/list/client_list var/number_kicked = 0 /datum/controller/subsystem/inactivity/fire(resumed = FALSE) if (!CONFIG_GET(number/kick_inactive)) can_fire = FALSE return if (!resumed) client_list = GLOB.clients.Copy() while(client_list.len) var/client/C = client_list[client_list.len] client_list.len-- if(C.is_afk(CONFIG_GET(number/kick_inactive) MINUTES) && can_kick(C)) to_chat_immediate(C, span_warning("You have been inactive for more than [CONFIG_GET(number/kick_inactive)] minute\s and have been disconnected.")) var/information if(C.mob) if(ishuman(C.mob)) var/job var/mob/living/carbon/human/H = C.mob var/datum/data/record/R = find_general_record("name", H.real_name) if(R) 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(isobserver(C.mob)) information = " while a ghost." else if(issilicon(C.mob)) information = " while a silicon." if(isAI(C.mob)) var/mob/living/silicon/ai/A = C.mob GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(A.loc) GLOB.global_announcer.autosay("[A] has been moved to intelligence storage.", "Artificial Intelligence Oversight") A.clear_client() information = " while an AI." var/adminlinks adminlinks = " (JMP|CRYO)" 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(msg) msg = "Kicked: [number_kicked]" return ..() /datum/controller/subsystem/inactivity/proc/can_kick(var/client/C) if(check_rights_for(C, R_HOLDER|R_MENTOR)) return FALSE //VOREStation Add - Don't kick admins. return TRUE