From 6eb14f1d54cb50a3e1b73e70e25535870ff5e615 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 1 Nov 2023 02:16:06 +0100 Subject: [PATCH] [MIRROR] Nullchecks Client on `tgui_alert()` and siblings [MDB IGNORE] (#24703) * Nullchecks Client on `tgui_alert()` and siblings (#79322) ## About The Pull Request Fixes #79321 ```dm /datum/tgui/proc/open() if(!user.client) return FALSE ``` The TGUI window won't even `open()` and do any work if we don't have a client, so let's just explicitly get the hell out of dodge if we don't have a client associated with a mob in these procs. Adding a `?` to handle the runtime in the linked issue only obfuscates the deeper issue because of the aforementioned code snippet. ## Why It's Good For The Game Clientless monkeys will still somehow be able to interact with stuff through their random behavior, and this is still plausible enough to show up on live servers every so often, so let's just patch it out early. These alerts are meant for player user input, so if we don't have a player, let's bounce. ## Changelog A player would never ever notice this. * Nullchecks Client on `tgui_alert()` and siblings --------- Co-authored-by: san7890 --- code/modules/tgui_input/alert.dm | 6 +++++- code/modules/tgui_input/checkboxes.dm | 8 ++++++-- code/modules/tgui_input/list.dm | 8 ++++++-- code/modules/tgui_input/number.dm | 6 +++++- code/modules/tgui_input/text.dm | 6 +++++- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 4dc197a3c8c..0ea9c45d310 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -18,7 +18,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // A gentle nudge - you should not be using TGUI alert for anything other than a simple message. if(length(buttons) > 3) log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert") diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm index ec43bd8914d..9204e67ba36 100644 --- a/code/modules/tgui_input/checkboxes.dm +++ b/code/modules/tgui_input/checkboxes.dm @@ -14,13 +14,17 @@ if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) return input(user, message, title) as null|anything in items var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state) diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 95daaadb326..a58b96b06e3 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -14,13 +14,17 @@ if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + /// Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) return input(user, message, title, default) as null|anything in items diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index bcdf495fd82..e0a3f1951e5 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -23,7 +23,11 @@ var/client/client = user user = client.mob else - return + return null + + if (isnull(user.client)) + return null + // Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) var/input_number = input(user, message, title, default) as null|num diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 811673a4c03..f78ededab5d 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -23,7 +23,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) if(encode)