diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index d0a5d72c86f..0f927bb4946 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -57,7 +57,10 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_SKYBOX 30 #define INIT_ORDER_MAPPING 25 #define INIT_ORDER_DECALS 20 +<<<<<<< HEAD #define INIT_ORDER_PLANTS 18 // Must initialize before atoms. +======= +>>>>>>> ebc5263... Merge pull request #7920 from Atermonera/ping_verb_fix #define INIT_ORDER_JOB 17 #define INIT_ORDER_ALARM 16 // Must initialize before atoms. #define INIT_ORDER_ATOMS 15 diff --git a/code/game/verbs/advanced_who.dm b/code/game/verbs/advanced_who.dm index 4498136b2b3..221939cd50c 100644 --- a/code/game/verbs/advanced_who.dm +++ b/code/game/verbs/advanced_who.dm @@ -85,6 +85,10 @@ entry += " - In Lobby
" else entry += " - Playing
" +<<<<<<< HEAD:code/game/verbs/advanced_who.dm +======= + +>>>>>>> ebc5263... Merge pull request #7920 from Atermonera/ping_verb_fix:code/modules/client/verbs/advanced_who.dm Lines += entry msg += "" diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 3cb25b702e4..5c6f1e15452 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD:code/game/verbs/who.dm /client/verb/who() set name = "Who" @@ -206,3 +207,193 @@ msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond." return msg +======= + +/client/verb/who() + set name = "Who" + set category = "OOC" + + var/msg = "Current Players:\n" + + var/list/Lines = list() + + if(holder && (R_ADMIN & holder.rights || R_MOD & holder.rights)) + for(var/client/C in GLOB.clients) + var/entry = "\t[C.key]" + if(C.holder && C.holder.fakekey) + entry += " (as [C.holder.fakekey])" + entry += " - Playing as [C.mob.real_name]" + switch(C.mob.stat) + if(UNCONSCIOUS) + entry += " - Unconscious" + if(DEAD) + if(isobserver(C.mob)) + var/mob/observer/dead/O = C.mob + if(O.started_as_observer) + entry += " - Observing" + else + entry += " - DEAD" + else + entry += " - DEAD" + + var/age + if(isnum(C.player_age)) + age = C.player_age + else + age = 0 + + if(age <= 1) + age = "[age]" + else if(age < 10) + age = "[age]" + + entry += " - [age]" + + if(is_special_character(C.mob)) + entry += " - Antagonist" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + entry += " (AFK - " + entry += "[round(seconds / 60)] minutes, " + entry += "[seconds % 60] seconds)" + + entry += " (?)" + Lines += entry + else + for(var/client/C in GLOB.clients) + var/entry + if(C.holder && C.holder.fakekey) + entry = C.holder.fakekey + else + entry = C.key + Lines += entry + + for(var/line in sortList(Lines)) + msg += "[line]\n" + + msg += "Total Players: [length(Lines)]" + to_chat(src,msg) + +/client/verb/staffwho() + set category = "Admin" + set name = "Staffwho" + + var/msg = "" + var/modmsg = "" + var/devmsg = "" + var/eventMmsg = "" + var/num_mods_online = 0 + var/num_admins_online = 0 + var/num_devs_online = 0 + var/num_event_managers_online = 0 + if(holder) + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights)) //Used to determine who shows up in admin rows + + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Event Managerss can't see stealthmins + continue + + msg += "\t[C] is a [C.holder.rank]" + + if(C.holder.fakekey) + msg += " (as [C.holder.fakekey])" + + if(isobserver(C.mob)) + msg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + msg += " - Lobby" + else + msg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + msg += " (AFK - " + msg += "[round(seconds / 60)] minutes, " + msg += "[seconds % 60] seconds)" + msg += "\n" + + num_admins_online++ + else if(R_MOD & C.holder.rights) //Who shows up in mod rows. + modmsg += "\t[C] is a [C.holder.rank]" + + if(isobserver(C.mob)) + modmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + modmsg += " - Lobby" + else + modmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + modmsg += " (AFK - " + modmsg += "[round(seconds / 60)] minutes, " + modmsg += "[seconds % 60] seconds)" + modmsg += "\n" + num_mods_online++ + + else if(R_SERVER & C.holder.rights) + devmsg += "\t[C] is a [C.holder.rank]" + if(isobserver(C.mob)) + devmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + devmsg += " - Lobby" + else + devmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + devmsg += "(AFK - " + devmsg += "[round(seconds / 60)] minutes, " + devmsg += "[seconds % 60] seconds)" + devmsg += "\n" + num_devs_online++ + + else if(R_EVENT & C.holder.rights) + eventMmsg += "\t[C] is a [C.holder.rank]" + if(isobserver(C.mob)) + eventMmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + eventMmsg += " - Lobby" + else + eventMmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + eventMmsg += " (AFK - " + eventMmsg += "[round(seconds / 60)] minutes, " + eventMmsg += "[seconds % 60] seconds)" + eventMmsg += "\n" + num_event_managers_online++ + + else + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights)) + if(!C.holder.fakekey) + msg += "\t[C] is a [C.holder.rank]\n" + num_admins_online++ + else if (R_MOD & C.holder.rights) + modmsg += "\t[C] is a [C.holder.rank]\n" + num_mods_online++ + else if (R_SERVER & C.holder.rights) + devmsg += "\t[C] is a [C.holder.rank]\n" + num_devs_online++ + else if (R_EVENT & C.holder.rights) + eventMmsg += "\t[C] is a [C.holder.rank]\n" + num_event_managers_online++ + + if(config.admin_irc) + to_chat(src, "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.") + msg = "Current Admins ([num_admins_online]):\n" + msg + + if(config.show_mods) + msg += "\n Current Moderators ([num_mods_online]):\n" + modmsg + + if(config.show_devs) + msg += "\n Current Developers ([num_devs_online]):\n" + devmsg + + if(config.show_event_managers) + msg += "\n Current Event Managers ([num_event_managers_online]):\n" + eventMmsg + + to_chat(src,msg) +>>>>>>> ebc5263... Merge pull request #7920 from Atermonera/ping_verb_fix:code/modules/client/verbs/who.dm diff --git a/code/modules/client/verbs/ping.dm b/code/modules/client/verbs/ping.dm new file mode 100644 index 00000000000..8213daa7505 --- /dev/null +++ b/code/modules/client/verbs/ping.dm @@ -0,0 +1,12 @@ +/client/proc/pingfromtime(time) + return ((world.time+world.tick_lag*world.tick_usage/100)-time)*100 + +/client/verb/display_ping(time as num) + set instant = TRUE + set name = ".display_ping" + to_chat(src, "Round trip ping took [round(pingfromtime(time),1)]ms") + +/client/verb/ping() + set name = "Ping" + set category = "OOC" + winset(src, null, "command=.display_ping+[world.time+world.tick_lag*world.tick_usage/100]") \ No newline at end of file