From 2da5d58156bcdd4d82983f1d1cea755c3d2c9f23 Mon Sep 17 00:00:00 2001 From: Pieter Vlasblom Date: Sun, 4 Dec 2016 18:30:34 +0100 Subject: [PATCH] Prevent people from abusing certain aspects of the game by keeping alert prompts open (#21914) --- .../gamemodes/changeling/powers/fakedeath.dm | 2 +- code/modules/client/verbs/ooc.dm | 17 +++++++++-------- .../friendly/drone/drones_as_items.dm | 2 +- .../simple_animal/hostile/megafauna/colossus.dm | 8 ++++---- code/modules/research/rdconsole.dm | 2 +- code/modules/research/server.dm | 4 ++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index 916daf74879..97ed43eddc5 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -18,7 +18,7 @@ user.update_stat() user.update_canmove() - addtimer(src, "ready_to_regenerate", LING_FAKEDEATH_TIME, TIMER_NORMAL, user) + addtimer(src, "ready_to_regenerate", LING_FAKEDEATH_TIME, TIMER_UNIQUE, user) feedback_add_details("changeling_powers","FD") return 1 diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index e37951e777e..89e1314176a 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -8,14 +8,23 @@ if(!mob) return + if(IsGuestKey(key)) src << "Guests may not use OOC." return msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) + var/raw_msg = msg + if(!msg) return + msg = emoji_parse(msg) + + if((copytext(msg, 1, 2) in list(".",";",":","#")) || (findtext(lowertext(copytext(msg, 1, 5)), "say"))) + if(alert("Your message \"[raw_msg]\" looks like it was meant for in game communication, say it in OOC?", "Meant for OOC?", "No", "Yes") != "Yes") + return + if(!(prefs.chat_toggles & CHAT_OOC)) src << "You have OOC muted." return @@ -42,14 +51,6 @@ message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return - var/raw_msg = msg - - msg = emoji_parse(msg) - - if((copytext(msg, 1, 2) in list(".",";",":","#")) || (findtext(lowertext(copytext(msg, 1, 5)), "say"))) - if(alert("Your message \"[raw_msg]\" looks like it was meant for in game communication, say it in OOC?", "Meant for OOC?", "No", "Yes") != "Yes") - return - log_ooc("[mob.name]/[key] : [raw_msg]") var/keyname = key diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index b58d8ff259e..61e29c0c76a 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -35,7 +35,7 @@ user << "Can't become a drone before the game has started." return var/be_drone = alert("Become a drone? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_drone == "No" || qdeleted(src)) + if(be_drone == "No" || qdeleted(src) || !isobserver(user)) return var/mob/living/simple_animal/drone/D = new drone_type(get_turf(loc)) D.admin_spawned = admin_spawned diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index d47ca2ff075..6f1a8323afb 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -579,10 +579,10 @@ Difficulty: Very Hard ..() if(ready_to_deploy) var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_helper == "No") - return - var/mob/living/simple_animal/hostile/lightgeist/W = new /mob/living/simple_animal/hostile/lightgeist(get_turf(loc)) - W.key = user.key + if(be_helper == "Yes" && !qdeleted(src) && isobserver(user)) + var/mob/living/simple_animal/hostile/lightgeist/W = new /mob/living/simple_animal/hostile/lightgeist(get_turf(loc)) + W.key = user.key + /obj/machinery/anomalous_crystal/helpers/Topic(href, href_list) if(href_list["ghostjoin"]) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 3d922fa3ae7..955356994a7 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -571,7 +571,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, else if(href_list["reset"]) //Reset the R&D console's database. griefProtection() var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue") + if(choice == "Continue" && usr.canUseTopic(src)) message_admins("[key_name_admin(usr)] reset \the [src.name]'s database") log_game("[key_name_admin(usr)] reset \the [src.name]'s database") screen = 0.0 diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index cfc64d6ab01..8b789b42315 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -226,7 +226,7 @@ else if(href_list["reset_tech"]) var/choice = alert("Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue") + if(choice == "Continue" && usr.canUseTopic(src)) var/datum/tech/T = temp_server.files.known_tech[href_list["reset_tech"]] if(T) T.level = 1 @@ -234,7 +234,7 @@ else if(href_list["reset_design"]) var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue") + if(choice == "Continue" && usr.canUseTopic(src)) var/datum/design/D = temp_server.files.known_designs[href_list["reset_design"]] if(D) temp_server.files.known_designs -= D.id