From aaa3e28efd579042b90498fea88d9a82b2ecea5e Mon Sep 17 00:00:00 2001 From: xProlithium Date: Tue, 28 Jul 2020 16:47:21 -0400 Subject: [PATCH] Click prevention for admin frozen players --- code/__HELPERS/unsorted.dm | 13 +++++++++++++ code/_onclick/click.dm | 4 +++- .../mob/living/carbon/human/species/_species.dm | 3 --- code/modules/mob/mob.dm | 3 +++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7e57a394988..b9cc4aa931c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -2017,5 +2017,18 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) set waitfor = FALSE return call(source, proctype)(arglist(arguments)) +/proc/IsFrozen(var/atom/A) + if(istype(A, /mob/living)) + var/mob/living/L = A + if(L.frozen) + return TRUE + + if(istype(A, /obj/mecha)) + var/obj/mecha/M = A + if(M.frozen) + return TRUE + + return FALSE + /// Waits at a line of code until X is true #define UNTIL(X) while(!(X)) stoplag() diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index d840f64bb4a..2e062992a3a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -73,7 +73,9 @@ var/dragged = modifiers["drag"] if(dragged && !modifiers[dragged]) return - + if(IsFrozen(A) && !is_admin(usr)) + to_chat(usr, "Interacting with admin-frozen players is not permitted.") + return if(modifiers["middle"] && modifiers["shift"] && modifiers["ctrl"]) MiddleShiftControlClickOn(A) return diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 0914852b131..dfc3c07903c 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -519,9 +519,6 @@ /datum/species/proc/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) //Handles any species-specific attackhand events. if(!istype(M)) return - if(H.frozen) - to_chat(M, "Do not touch Admin-Frozen people.") - return if(istype(M)) var/obj/item/organ/external/temp = M.bodyparts_by_name["r_hand"] diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3b86faeb7e6..be21871f8f2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -880,6 +880,9 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ return if(!Adjacent(usr)) return + if(IsFrozen(src)) + to_chat(usr, "Interacting with admin-frozen players is not permitted.") + return if(isLivingSSD(src) && M.client && M.client.send_ssd_warning(src)) return show_inv(usr)