From 700d7dc912c8f17bdd4aa9de0b78aea320be36a5 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Wed, 7 Jul 2021 07:01:26 -0400 Subject: [PATCH 01/14] Added connection history storage --- code/modules/admin/verbs/disconnectpanel.dm | 25 +++++++++++++++++++++ code/modules/client/client_procs.dm | 11 +++++++++ yogstation.dme | 1 + 3 files changed, 37 insertions(+) create mode 100644 code/modules/admin/verbs/disconnectpanel.dm diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm new file mode 100644 index 000000000000..4b7cb864f004 --- /dev/null +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -0,0 +1,25 @@ +GLOBAL_LIST_EMPTY(connection_logs) + +/datum/connection_log + var/datum/connection_entry/last_data_point + var/first_login + var/list/datum/connection_log/data_points = list() + +/datum/connection_log/New() + first_login = world.time + +/datum/connection_log/proc/logout(mob/C) + var/datum/connection_entry/CE = new() + CE.disconnected = world.time + CE.disconnect_type = C.type + last_data_point = CE + data_points |= CE + +/datum/connection_log/proc/login() + if(last_data_point) + last_data_point.connected = world.time + +/datum/connection_entry + var/disconnected + var/connected + var/disconnect_type diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 581c5ff5568e..b455268c534b 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -560,6 +560,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(params["discordlink"]) do_discord_link(params["discordlink"]) + var/datum/connection_log/CL = GLOB.connection_logs[ckey] + if(CL) + CL.login() + else + GLOB.connection_logs[ckey] = new/datum/connection_log() ////////////// //DISCONNECT// @@ -594,6 +599,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.ahelp_tickets.ClientLogout(src) GLOB.directory -= ckey GLOB.clients -= src + + var/datum/connection_log/CL = GLOB.connection_logs[ckey] + if(CL) + CL.logout(mob) + QDEL_LIST_ASSOC_VAL(char_render_holders) if(movingmob != null) movingmob.client_mobs_in_contents -= mob @@ -601,6 +611,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( seen_messages = null Master.UpdateTickRate() world.sync_logout_with_db(connection_number) // yogs - logout logging + return ..() /client/proc/set_client_age_from_db(connectiontopic) diff --git a/yogstation.dme b/yogstation.dme index 4a40273aea56..b20b915525b8 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1272,6 +1272,7 @@ #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" #include "code\modules\admin\verbs\diagnostics.dm" +#include "code\modules\admin\verbs\disconnectpanel.dm" #include "code\modules\admin\verbs\fps.dm" #include "code\modules\admin\verbs\getlogs.dm" #include "code\modules\admin\verbs\individual_logging.dm" From 1b13cf56151ff293bdddb08aed65f68a4c427b3a Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Fri, 9 Jul 2021 06:00:59 -0400 Subject: [PATCH 02/14] Adds the actual tgui window, starts dev on it --- code/modules/admin/admin_verbs.dm | 3 +- code/modules/admin/verbs/disconnectpanel.dm | 51 +++++++++++++++++++ .../tgui/interfaces/DisconnectPanel.js | 34 +++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 tgui/packages/tgui/interfaces/DisconnectPanel.js diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index fb6caa1c6126..c58c1d3ddcdd 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -96,7 +96,8 @@ GLOBAL_PROTECT(admin_verbs_admin) /datum/admins/proc/cmd_create_centcom, /datum/admins/proc/cmd_admin_fuckrads, /client/proc/admincryo, - /client/proc/cmd_admin_dress + /client/proc/cmd_admin_dress, + /client/proc/disconnect_panel ) GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel)) GLOBAL_PROTECT(admin_verbs_ban) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index 4b7cb864f004..ab63b389ccd7 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_EMPTY(connection_logs) var/datum/connection_entry/CE = new() CE.disconnected = world.time CE.disconnect_type = C.type + CE.living = isliving(C.type) last_data_point = CE data_points |= CE @@ -23,3 +24,53 @@ GLOBAL_LIST_EMPTY(connection_logs) var/disconnected var/connected var/disconnect_type + var/living = FALSE + +/client/proc/disconnect_panel() + set name = "Disconnection Panel" + set desc = "Panel showing information about the currently disconneted players" + set category = "Admin" + if(!check_rights(R_ADMIN)) + return + new /datum/disconnect_panel(usr) + +/datum/disconnect_panel + var/client/holder + +/datum/disconnect_panel/New(user) + if(user) + setup(user) + +/datum/disconnect_panel/proc/setup(user) + if(istype(user,/client)) + holder = user + else + var/mob/user_mob = user + holder = user_mob.client + + ui_interact(holder.mob) + +/datum/disconnect_panel/ui_state(mob/user) + return GLOB.admin_state + +/datum/disconnect_panel/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DisconnectPanel") + ui.open() + +/datum/disconnect_panel/ui_data(mob/user) + . = list() + .["world_time"] = world.time + .["users"] = list() + for(var/ckey in GLOB.connection_logs) + var/datum/connection_log/CL = GLOB.connection_logs[ckey] + + var/ckey_data = list() + ckey_data["ckey"] = ckey + ckey_data["connected"] = !!CL.last_data_point.connected + ckey_data["disconnect"] = CL.last_data_point.disconnected + ckey_data["connect"] = CL.last_data_point.connected + ckey_data["type"] = CL.last_data_point.disconnect_type + ckey_data["living"] = CL.last_data_point.living + .["users"] += list(ckey_data) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js new file mode 100644 index 000000000000..06ee02911004 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -0,0 +1,34 @@ +import { useBackend } from '../backend'; +import { Section, Collapsible, Button } from '../components'; +import { Window } from '../layouts'; + +function sec2time(seconds) { + var h = Math.floor(seconds / 3600); + var m = Math.floor(seconds % 3600 / 60).toString().padStart(2, "0"); + var s = Math.floor(seconds % 3600 % 60).toString().padStart(2, "0"); + return h + ":" + m + ":" + s; +} + +export const DisconnectPanel = (props, context) => { + const { act, data } = useBackend(context); + data.users[0].connected = 0; + return ( + +
+ {data.users.map(user => ( + + + + Hi + + + ))} +
+
+
+ ); +}; From afaee1f2824429148d15ead0a7d532f0e90ce214 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Tue, 13 Jul 2021 11:00:56 -0400 Subject: [PATCH 03/14] Adds more to the UI --- code/modules/admin/verbs/disconnectpanel.dm | 27 ++++++++++---- .../tgui/interfaces/DisconnectPanel.js | 37 ++++++++++++++++--- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index ab63b389ccd7..fa599f322571 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(connection_logs) /datum/connection_log var/datum/connection_entry/last_data_point var/first_login - var/list/datum/connection_log/data_points = list() + var/list/datum/connection_entry/data_points = list() /datum/connection_log/New() first_login = world.time @@ -12,7 +12,8 @@ GLOBAL_LIST_EMPTY(connection_logs) var/datum/connection_entry/CE = new() CE.disconnected = world.time CE.disconnect_type = C.type - CE.living = isliving(C.type) + CE.living = isliving(C) + CE.job = C.mind?.assigned_role || "Ghost" last_data_point = CE data_points |= CE @@ -25,6 +26,7 @@ GLOBAL_LIST_EMPTY(connection_logs) var/connected var/disconnect_type var/living = FALSE + var/job /client/proc/disconnect_panel() set name = "Disconnection Panel" @@ -65,12 +67,23 @@ GLOBAL_LIST_EMPTY(connection_logs) .["users"] = list() for(var/ckey in GLOB.connection_logs) var/datum/connection_log/CL = GLOB.connection_logs[ckey] - + if(!CL.last_data_point) + continue + var/ckey_data = list() ckey_data["ckey"] = ckey ckey_data["connected"] = !!CL.last_data_point.connected - ckey_data["disconnect"] = CL.last_data_point.disconnected - ckey_data["connect"] = CL.last_data_point.connected - ckey_data["type"] = CL.last_data_point.disconnect_type - ckey_data["living"] = CL.last_data_point.living + ckey_data["last"] = entry2ui(CL.last_data_point) + + for(var/datum/connection_entry/entry in CL.data_points) + ckey_data["history"] += list(entry2ui(entry)) + .["users"] += list(ckey_data) + +/datum/disconnect_panel/proc/entry2ui(datum/connection_entry/entry) + . = list() + .["disconnect"] = entry.disconnected + .["connect"] = entry.connected + .["type"] = entry.disconnect_type + .["living"] = entry.living + .["job"] = entry.job diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 06ee02911004..d643434173ce 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -11,7 +11,16 @@ function sec2time(seconds) { export const DisconnectPanel = (props, context) => { const { act, data } = useBackend(context); - data.users[0].connected = 0; + //data.users[0].connected = 0 + + data.users.sort((a, b) => { + if(a.connected != b.connected) + return a.connected - b.connected + if(a.connected) + return a.last.connect - b.last.connect + return a.last.disconnect - b.last.disconnect + }) + return ( {
{data.users.map(user => ( - - - - Hi - + +
+ + + + + + {user.history.reverse().map(datapoint => ( +
+ {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} ({sec2time(datapoint.connect - datapoint.disconnect)}) + As {datapoint.job} ({datapoint.type}) +
+ ))} +
+
))}
From c44120586275fd1390117d6aaefc64bb7aeae726 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Sun, 15 Aug 2021 15:22:25 -0500 Subject: [PATCH 04/14] Makes the button work --- code/modules/admin/admin.dm | 17 ++++++ code/modules/admin/topic.dm | 18 +------ code/modules/admin/verbs/disconnectpanel.dm | 53 ++++++++++++++++++- .../tgui/interfaces/DisconnectPanel.js | 9 ++-- 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d98a04b4003b..4fcc170889e6 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -903,6 +903,23 @@ set name = "Create or modify area" create_area(usr) +/datum/admins/proc/observe_follow(atom/movable/AM) + if(!isobserver(owner.mob) && !check_rights(R_ADMIN)) + return + var/can_ghost = TRUE + if(!isobserver(owner.mob)) + can_ghost = owner.admin_ghost() + + if(!can_ghost) + return + var/mob/dead/observer/A = owner.mob + var/mob/living/silicon/ai/I = AM //yogs start - adminfollow now follows AI eyes instead of the core + if(istype(I) && I.eyeobj) + A.ManualFollow(I.eyeobj) + else + A.ManualFollow(AM) //yogs stop - adminfollow now follows AI eyes instead of the core + + // // //ALL DONE diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9aaf3bd46e56..37d6f60f3768 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1242,24 +1242,8 @@ show_player_panel(M) else if(href_list["adminplayerobservefollow"]) - if(!isobserver(usr) && !check_rights(R_ADMIN)) - return - var/atom/movable/AM = locate(href_list["adminplayerobservefollow"]) - - var/client/C = usr.client - var/can_ghost = TRUE - if(!isobserver(usr)) - can_ghost = C.admin_ghost() - - if(!can_ghost) - return - var/mob/dead/observer/A = C.mob - var/mob/living/silicon/ai/I = AM //yogs start - adminfollow now follows AI eyes instead of the core - if(istype(I) && I.eyeobj) - A.ManualFollow(I.eyeobj) - else - A.ManualFollow(AM) //yogs stop - adminfollow now follows AI eyes instead of the core + observe_follow(AM) else if(href_list["admingetmovable"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index fa599f322571..83bd28950f46 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(connection_logs) var/job /client/proc/disconnect_panel() - set name = "Disconnection Panel" + set name = "Disconnect Panel" set desc = "Panel showing information about the currently disconneted players" set category = "Admin" if(!check_rights(R_ADMIN)) @@ -74,12 +74,63 @@ GLOBAL_LIST_EMPTY(connection_logs) ckey_data["ckey"] = ckey ckey_data["connected"] = !!CL.last_data_point.connected ckey_data["last"] = entry2ui(CL.last_data_point) + ckey_data["history"] = list() for(var/datum/connection_entry/entry in CL.data_points) ckey_data["history"] += list(entry2ui(entry)) .["users"] += list(ckey_data) +/datum/disconnect_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/ckey = params["ckey"] + switch(action) + if("follow") + var/client/C = GLOB.directory[ckey] + var/atom/movable/AM + if(C) + AM = C.mob + else + for(var/mob/M in GLOB.mob_list) + if(M.ckey == ckey) + AM = M + return + if(!AM) + return + usr.client.holder.observe_follow(AM) + if("player-panel") + var/client/C = GLOB.directory[ckey] + var/mob/M + if(C) + M = C.mob + else + for(var/mob/MI in GLOB.mob_list) + if(MI.ckey == ckey) + M = MI + return + if(!M) + return + usr.client.holder.show_player_panel(M) + if("pm") + usr.client.cmd_admin_pm(ckey) + if("notes") + if(!check_rights(R_ADMIN)) + return + browse_messages(target_ckey = ckey, agegate = TRUE) + if("cryo") + var/client/C = GLOB.directory[ckey] + var/mob/M + if(C) + M = C.mob + else + for(var/mob/MI in GLOB.mob_list) + if(MI.ckey == ckey) + M = MI + return + if(!M) + return + usr.client.admincryo(M) + /datum/disconnect_panel/proc/entry2ui(datum/connection_entry/entry) . = list() .["disconnect"] = entry.disconnected diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index d643434173ce..e9a117a227b3 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -36,10 +36,11 @@ export const DisconnectPanel = (props, context) => { user.last.job + " - " + sec2time((data.world_time - (user.connected ? user.last.connect : user.last.disconnect))/10)}>
- - - - + + + + + {user.history.reverse().map(datapoint => (
Date: Sun, 15 Aug 2021 15:34:10 -0500 Subject: [PATCH 05/14] Fixed some linter errors --- .../tgui/interfaces/DisconnectPanel.js | 89 ++++++++++--------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index e9a117a227b3..b7e064f0abe6 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -2,59 +2,60 @@ import { useBackend } from '../backend'; import { Section, Collapsible, Button } from '../components'; import { Window } from '../layouts'; -function sec2time(seconds) { - var h = Math.floor(seconds / 3600); - var m = Math.floor(seconds % 3600 / 60).toString().padStart(2, "0"); - var s = Math.floor(seconds % 3600 % 60).toString().padStart(2, "0"); +const sec2time = function(seconds) { + let h = Math.floor(seconds / 3600); + let m = Math.floor(seconds % 3600 / 60).toString().padStart(2, "0"); + let s = Math.floor(seconds % 3600 % 60).toString().padStart(2, "0"); return h + ":" + m + ":" + s; } export const DisconnectPanel = (props, context) => { const { act, data } = useBackend(context); - //data.users[0].connected = 0 data.users.sort((a, b) => { - if(a.connected != b.connected) - return a.connected - b.connected - if(a.connected) - return a.last.connect - b.last.connect - return a.last.disconnect - b.last.disconnect + if (a.connected != b.connected) { + return a.connected - b.connected; + } + if (a.connected) { + return a.last.connect - b.last.connect; + } + return a.last.disconnect - b.last.disconnect; }) return ( - -
- {data.users.map(user => ( - -
- - - - - - - {user.history.reverse().map(datapoint => ( -
- {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} ({sec2time(datapoint.connect - datapoint.disconnect)}) - As {datapoint.job} ({datapoint.type}) -
- ))} -
-
-
- ))} -
-
-
+ title="Disconnect Panel" + width={700} + height={700} + resizable> + +
+ {data.users.map(user => ( + +
+ + + + + + + {user.history.reverse().map(datapoint => ( +
+ {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} ({sec2time(datapoint.connect - datapoint.disconnect)}) + As {datapoint.job} ({datapoint.type}) +
+ ))} +
+
+
+ ))} +
+
+ ); }; From 2fcf0b2a77004925190d89322369dfc31321e893 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Sun, 15 Aug 2021 15:46:41 -0500 Subject: [PATCH 06/14] Fixes more linter errors --- .../tgui/interfaces/DisconnectPanel.js | 74 ++++++++++--------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index b7e064f0abe6..dc6b53cc82f9 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -2,60 +2,66 @@ import { useBackend } from '../backend'; import { Section, Collapsible, Button } from '../components'; import { Window } from '../layouts'; -const sec2time = function(seconds) { +const sec2time = function (seconds) { let h = Math.floor(seconds / 3600); let m = Math.floor(seconds % 3600 / 60).toString().padStart(2, "0"); let s = Math.floor(seconds % 3600 % 60).toString().padStart(2, "0"); return h + ":" + m + ":" + s; -} +}; export const DisconnectPanel = (props, context) => { const { act, data } = useBackend(context); data.users.sort((a, b) => { - if (a.connected != b.connected) { + if (a.connected !== b.connected) { return a.connected - b.connected; } if (a.connected) { return a.last.connect - b.last.connect; } return a.last.disconnect - b.last.disconnect; - }) + }); return ( - -
- {data.users.map(user => ( - -
- - - - - - - {user.history.reverse().map(datapoint => ( -
- {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} ({sec2time(datapoint.connect - datapoint.disconnect)}) - As {datapoint.job} ({datapoint.type}) -
- ))} -
-
-
- ))} -
-
-
+ +
+ {data.users.map(user => ( + +
+ + + + + + + {user.history.reverse().map(datapoint => ( +
+ {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} + ({sec2time(datapoint.connect - datapoint.disconnect)}) + As {datapoint.job} ({datapoint.type}) +
+ ))} +
+
+
+ ))} +
+
+ ); }; From 010ff5585a65e81a6fcecd29a5875601afb986f8 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Sun, 15 Aug 2021 16:00:47 -0500 Subject: [PATCH 07/14] Trying again --- tgui/packages/tgui/interfaces/DisconnectPanel.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index dc6b53cc82f9..7cf42c702d3f 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -39,13 +39,15 @@ export const DisconnectPanel = (props, context) => { + sec2time((data.world_time - (user.connected ? user.last.connect : user.last.disconnect))/10)}>
- - - - + + + + + onClick={ () => act('acryo', {ckey: user.ckey}) } + disabled={ user.connected }> + Admin Cryo + {user.history.reverse().map(datapoint => (
Date: Sun, 15 Aug 2021 16:11:44 -0500 Subject: [PATCH 08/14] Eventually --- tgui/packages/tgui/interfaces/DisconnectPanel.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 7cf42c702d3f..3c118db4eec3 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -39,13 +39,13 @@ export const DisconnectPanel = (props, context) => { + sec2time((data.world_time - (user.connected ? user.last.connect : user.last.disconnect))/10)}>
- - - - + + + + From 8614cd63745ed2f5a061300aae26e0147e780d7a Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Sun, 15 Aug 2021 16:45:19 -0500 Subject: [PATCH 09/14] This linter will be the death of me --- tgui/packages/tgui/interfaces/DisconnectPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 3c118db4eec3..54d5c4de3f3e 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -46,7 +46,7 @@ export const DisconnectPanel = (props, context) => { {user.history.reverse().map(datapoint => ( From e7db24b4fc35306e86751f1cc54bcf216360e373 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Sun, 15 Aug 2021 16:57:16 -0500 Subject: [PATCH 10/14] Hopefully linter happy --- .../tgui/interfaces/DisconnectPanel.js | 87 ++++++++++--------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 54d5c4de3f3e..69fc0e6cd5d6 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -22,48 +22,49 @@ export const DisconnectPanel = (props, context) => { return a.last.disconnect - b.last.disconnect; }); - return ( - -
- {data.users.map(user => ( - -
- - - - - - - {user.history.reverse().map(datapoint => ( -
- {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} - ({sec2time(datapoint.connect - datapoint.disconnect)}) - As {datapoint.job} ({datapoint.type}) -
- ))} -
-
-
- ))} -
-
-
+ return ( + + +
+ {data.users.map(user => ( + +
+ + + + + + + {user.history.reverse().map(datapoint => ( +
+ {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} + ({sec2time(datapoint.connect - datapoint.disconnect)}) + As {datapoint.job} ({datapoint.type}) +
+ ))} +
+
+
+ ))} +
+
+
); }; From 0d522a587eddab41df0ff4f0d6314c22fb514a33 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Mon, 16 Aug 2021 18:56:41 -0500 Subject: [PATCH 11/14] Fixed some small bugs on the panel itself, added debug for buttons --- code/modules/admin/verbs/disconnectpanel.dm | 48 ++++++++----------- .../tgui/interfaces/DisconnectPanel.js | 4 +- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index 83bd28950f46..aa30b9892710 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -86,28 +86,12 @@ GLOBAL_LIST_EMPTY(connection_logs) var/ckey = params["ckey"] switch(action) if("follow") - var/client/C = GLOB.directory[ckey] - var/atom/movable/AM - if(C) - AM = C.mob - else - for(var/mob/M in GLOB.mob_list) - if(M.ckey == ckey) - AM = M - return - if(!AM) + var/mob/M = ckey2mob(ckey) + if(!M) return - usr.client.holder.observe_follow(AM) + usr.client.holder.observe_follow(M) if("player-panel") - var/client/C = GLOB.directory[ckey] - var/mob/M - if(C) - M = C.mob - else - for(var/mob/MI in GLOB.mob_list) - if(MI.ckey == ckey) - M = MI - return + var/mob/M = ckey2mob(ckey) if(!M) return usr.client.holder.show_player_panel(M) @@ -118,19 +102,25 @@ GLOBAL_LIST_EMPTY(connection_logs) return browse_messages(target_ckey = ckey, agegate = TRUE) if("cryo") - var/client/C = GLOB.directory[ckey] - var/mob/M - if(C) - M = C.mob - else - for(var/mob/MI in GLOB.mob_list) - if(MI.ckey == ckey) - M = MI - return + var/mob/M = ckey2mob(ckey) if(!M) return usr.client.admincryo(M) +/datum/disconnect_panel/proc/ckey2mob(ckey) + message_admins("Getting mob from ckey [ckey]") + var/client/C = GLOB.directory[ckey] + message_admins("Client is [C]") + if(C) + message_admins("Found mob [C.mob] from client") + return C.mob + message_admins("Searching mob_list") + for(var/mob/M in GLOB.mob_list) + if(M.ckey == ckey) + message_admins("Mob [M] found") + return M + message_admins("Mob not found") + /datum/disconnect_panel/proc/entry2ui(datum/connection_entry/entry) . = list() .["disconnect"] = entry.disconnected diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 69fc0e6cd5d6..9c5c1f8c9af9 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -54,8 +54,8 @@ export const DisconnectPanel = (props, context) => {
- {sec2time(datapoint.disconnect)}-{sec2time(datapoint.connect)} - ({sec2time(datapoint.connect - datapoint.disconnect)}) + {sec2time(datapoint.disconnect/10)}-{sec2time(datapoint.connect/10)} + ({sec2time(((datapoint.connect || data.world_time) - datapoint.disconnect)/10)}) As {datapoint.job} ({datapoint.type})
))} From 165acddc2f28407b877081e972775076683ffc89 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Mon, 16 Aug 2021 19:07:12 -0500 Subject: [PATCH 12/14] I fucking hate the linter --- tgui/packages/tgui/interfaces/DisconnectPanel.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/DisconnectPanel.js b/tgui/packages/tgui/interfaces/DisconnectPanel.js index 9c5c1f8c9af9..ddd4a059f695 100644 --- a/tgui/packages/tgui/interfaces/DisconnectPanel.js +++ b/tgui/packages/tgui/interfaces/DisconnectPanel.js @@ -55,7 +55,8 @@ export const DisconnectPanel = (props, context) => { key={user.ckey} color={datapoint.living ? 'yellow' : 'green'}> {sec2time(datapoint.disconnect/10)}-{sec2time(datapoint.connect/10)} - ({sec2time(((datapoint.connect || data.world_time) - datapoint.disconnect)/10)}) + ({sec2time(((datapoint.connect || data.world_time) + - datapoint.disconnect)/10)}) As {datapoint.job} ({datapoint.type})
))} From b8e1af7c3ab8598a1bf954f7a5374ec9af1076cb Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Mon, 16 Aug 2021 20:34:54 -0500 Subject: [PATCH 13/14] remove debug prints --- code/modules/admin/verbs/disconnectpanel.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index aa30b9892710..c55a0e2cea5d 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -108,18 +108,12 @@ GLOBAL_LIST_EMPTY(connection_logs) usr.client.admincryo(M) /datum/disconnect_panel/proc/ckey2mob(ckey) - message_admins("Getting mob from ckey [ckey]") var/client/C = GLOB.directory[ckey] - message_admins("Client is [C]") if(C) - message_admins("Found mob [C.mob] from client") return C.mob - message_admins("Searching mob_list") for(var/mob/M in GLOB.mob_list) if(M.ckey == ckey) - message_admins("Mob [M] found") return M - message_admins("Mob not found") /datum/disconnect_panel/proc/entry2ui(datum/connection_entry/entry) . = list() From 60a03d9c536746000bf63bef668b021da3d551c2 Mon Sep 17 00:00:00 2001 From: adamsong Date: Tue, 17 Aug 2021 17:57:39 -0500 Subject: [PATCH 14/14] Update code/modules/admin/verbs/disconnectpanel.dm Co-authored-by: Hopekz --- code/modules/admin/verbs/disconnectpanel.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/disconnectpanel.dm b/code/modules/admin/verbs/disconnectpanel.dm index c55a0e2cea5d..70dcf91eb873 100644 --- a/code/modules/admin/verbs/disconnectpanel.dm +++ b/code/modules/admin/verbs/disconnectpanel.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(connection_logs) /client/proc/disconnect_panel() set name = "Disconnect Panel" - set desc = "Panel showing information about the currently disconneted players" + set desc = "Panel showing information about the currently disconnected players" set category = "Admin" if(!check_rights(R_ADMIN)) return