From f8a5e81ea29c6f69afa22e8116e7be2fe9f4068d Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Tue, 12 Mar 2019 20:11:20 +0100 Subject: [PATCH] Popups can now be limited to 1 --- code/__DEFINES/preferences.dm | 2 + code/__HELPERS/text.dm | 9 ++++ code/game/verbs/ooc.dm | 54 ++++++++++++------- code/modules/client/client defines.dm | 2 + .../client/preference/preferences_toggles.dm | 12 +++++ code/modules/mob/typing_indicator.dm | 5 +- 6 files changed, 62 insertions(+), 22 deletions(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index f8f9609aced..53d88826c47 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -29,6 +29,8 @@ #define UI_DARKMODE 131072 #define DISABLE_KARMA 262144 +#define TYPING_ONCE 1048576 + #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 9dd3c870d51..5b639cc80f8 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -109,6 +109,15 @@ else return trim(html_encode(name), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into <) +// Uses client.typing to check if the popup should appear or not +/proc/typing_input(mob/user, message = "", title = "", default = "") + if(user.client.checkTyping()) // Prevent double windows + return null + user.client.typing = TRUE + var/msg = input(user, message, title, default) as text|null + user.client.typing = FALSE + return msg + //Filters out undesirable characters from names /proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN) if(!t_in || length(t_in) > max_length) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index a35047bb9ad..7a2a7c14143 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -4,25 +4,21 @@ var/global/mentor_ooc_colour = "#0099cc" var/global/moderator_ooc_colour = "#184880" var/global/admin_ooc_colour = "#b82e00" -/client/verb/ooc(msg as text) +//Checks if the client already has a text input open +/client/proc/checkTyping() + return (prefs.toggles & TYPING_ONCE && typing) + +/client/verb/ooc(msg = "" as text) set name = "OOC" set category = "OOC" - + if(!mob) return if(IsGuestKey(key)) to_chat(src, "Guests may not use OOC.") return - msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) - if(!msg) - return - - if(!(prefs.toggles & CHAT_OOC)) - to_chat(src, "You have OOC muted.") - return - - if(!check_rights(R_ADMIN|R_MOD,0)) + if(!check_rights(R_ADMIN|R_MOD, 0)) if(!config.ooc_allowed) to_chat(src, "OOC is globally muted.") return @@ -32,6 +28,19 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return + + if(!msg) + msg = typing_input(src.mob, "", "ooc (text)") + + msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) + if(!msg) + return + + if(!(prefs.toggles & CHAT_OOC)) + to_chat(src, "You have OOC muted.") + return + + if(!check_rights(R_ADMIN|R_MOD,0)) if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) @@ -150,7 +159,7 @@ var/global/admin_ooc_colour = "#b82e00" feedback_add_details("admin_verb","ROC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/verb/looc(msg as text) +/client/verb/looc(msg = "" as text) set name = "LOOC" set desc = "Local OOC, seen only by those in view." set category = "OOC" @@ -161,14 +170,6 @@ var/global/admin_ooc_colour = "#b82e00" to_chat(src, "Guests may not use OOC.") return - msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) - if(!msg) - return - - if(!(prefs.toggles & CHAT_LOOC)) - to_chat(src, "You have LOOC muted.") - return - if(!check_rights(R_ADMIN|R_MOD,0)) if(!config.looc_allowed) to_chat(src, "LOOC is globally muted.") @@ -179,6 +180,19 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use LOOC (muted).") return + + if(!msg) + msg = typing_input(src.mob, "", "LOOC (text)") + + msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) + if(!msg) + return + + if(!(prefs.toggles & CHAT_LOOC)) + to_chat(src, "You have LOOC muted.") + return + + if(!check_rights(R_ADMIN|R_MOD,0)) if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index c88347a305b..66b71fb137d 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -19,6 +19,8 @@ var/area = null var/time_died_as_mouse = null //when the client last died as a mouse + var/typing = FALSE // Prevents typing window stacking + var/adminhelped = 0 var/gc_destroyed //Time when this object was destroyed. diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index 2899432501a..703de37468e 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -231,3 +231,15 @@ else to_chat(usr, "You have enabled karma gains.") return + +/client/verb/toggle_popup_limiter() + set name = "Toggle Text Popup Limiter" + set category = "Preferences" + set desc = "Will let you limit the text input popups to one at a time." + prefs.toggles ^= TYPING_ONCE + prefs.save_preferences(src) + if(prefs.toggles & TYPING_ONCE) + to_chat(usr, "You have enabled text popup limiting.") + else + to_chat(usr, "You have disabled text popup limiting.") + return diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 9c6c8f2fa73..9ad5449ee8b 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -39,7 +39,7 @@ var/global/image/typing_indicator set_typing_indicator(1) hud_typing = 1 - var/message = input("","say (text)") as null|text + var/message = typing_input(src, "", "say (text)") hud_typing = 0 set_typing_indicator(0) if(message) @@ -49,9 +49,10 @@ var/global/image/typing_indicator set name = ".Me" set hidden = 1 + set_typing_indicator(1) hud_typing = 1 - var/message = input("","me (text)") as null|text + var/message = typing_input(src, "", "me (text)") hud_typing = 0 set_typing_indicator(0) if(message)