From c39d963a2529d1007c20627ddc1f6522f4402b49 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 May 2017 16:42:52 -0400 Subject: [PATCH 1/3] Fixes #7242, RCS Exploit You can no longer teleport crates/closets by dialog-stacking if you're not adjacent to them and if the RCS doesn't have enough charge. --- code/game/objects/structures/crates_lockers/closets.dm | 6 +++--- code/game/objects/structures/crates_lockers/crates.dm | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 7180e59b800..ed1b9be0e0d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -196,7 +196,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -218,7 +218,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50, E.toolspeed, target = src)) + if(!(do_after(user, 50, E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -327,7 +327,7 @@ /obj/structure/closet/attack_hand(mob/user) add_fingerprint(user) toggle(user) - + /obj/structure/closet/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) toggle(user) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 07a738a8c94..79fd929dedb 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -105,7 +105,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -123,7 +123,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 From 383474613639357998df111714a9b587b60f9d87 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 May 2017 16:43:34 -0400 Subject: [PATCH 2/3] Fixes #7243, RCS No Longer Teleports Crates/Closets to CC on Cargo Shuttle --- code/modules/shuttle/supply.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 24d76267b13..1d8123a5cab 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -246,6 +246,7 @@ /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/telepad, + /obj/machinery/telepad_cargo, /obj/machinery/clonepod, /obj/effect/hierophant, /obj/item/device/warp_cube, From fc93a1f4a69e2db1bbbebd2843343f84b0f8ad5e Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 May 2017 17:46:24 -0400 Subject: [PATCH 3/3] Amends RCS Sanity --- .../structures/crates_lockers/closets.dm | 18 ++++++++++++++---- .../structures/crates_lockers/crates.dm | 19 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ed1b9be0e0d..47877da718d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -193,10 +193,13 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -204,21 +207,26 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!(do_after(user, 50, E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50, E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -226,11 +234,13 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 79fd929dedb..010da69a834 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -102,36 +102,47 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return + else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else