From d6d3d60e0dce3e17c86a26990a3c8635069f93af Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Tue, 1 May 2012 20:13:51 +0100 Subject: [PATCH] TG: Disposal and welding helmet exploit fixes: - You can no longer toggle the welding helmet when stunned or restrained. - You can no longer give yourself all-access via-disposals. Living mobs and living mobs inside of a container cancel their holder's destination. This still allows people wrapped in lockers to be sent to their proper destination, however it would require someone on the other end to open it. So it's their fault for not dragging it out before opening it. Revision: r3400 Author: johnsonmt88 --- code/game/objects/items/clothing.dm | 31 +++++++++++++++-------------- code/game/turf.dm | 1 - code/modules/recycling/disposal.dm | 19 ++++++++++++++++-- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm index 770badebf2d..9b8f13db341 100644 --- a/code/game/objects/items/clothing.dm +++ b/code/game/objects/items/clothing.dm @@ -254,21 +254,22 @@ THERMAL GLASSES /obj/item/clothing/head/helmet/welding/verb/toggle() set category = "Object" set name = "Adjust welding mask" - if(src.up) - src.up = !src.up - src.see_face = !src.see_face - src.flags |= HEADCOVERSEYES - flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES - icon_state = "welding" - usr << "You flip the mask down to protect your eyes." - else - src.up = !src.up - src.see_face = !src.see_face - src.flags &= ~HEADCOVERSEYES - flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES) - icon_state = "weldingup" - usr << "You push the mask up out of your face." - usr.update_clothing() + if(usr.canmove && usr.stat != 2 && !usr.restrained()) + if(src.up) + src.up = !src.up + src.see_face = !src.see_face + src.flags |= HEADCOVERSEYES + flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES + icon_state = "welding" + usr << "You flip the mask down to protect your eyes." + else + src.up = !src.up + src.see_face = !src.see_face + src.flags &= ~HEADCOVERSEYES + flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES) + icon_state = "weldingup" + usr << "You push the mask up out of your face." + usr.update_clothing() /obj/item/clothing/head/cargosoft/dropped() src.icon_state = "cargosoft" diff --git a/code/game/turf.dm b/code/game/turf.dm index 19307955699..22fa7297a8b 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -307,7 +307,6 @@ if(!devastated) playsound(src.loc, 'Welder.ogg', 100, 1) new /obj/effect/decal/cleanable/blood(src) - new /obj/structure/cultgirder(src) else new /obj/effect/decal/cleanable/blood(src) new /obj/effect/decal/remains/human(src) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 15135220b22..c5d5e718090 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -595,6 +595,7 @@ var/count = 1000 //*** can travel 1000 steps before going to the mail room (in case of loops) var/destinationTag = null // changes if contains a delivery container var/tomail = 0 //changes if contains wrapped package + var/hasmob = 0 //If it contains a mob // initialize a holder from the contents of a disposal unit @@ -602,6 +603,20 @@ if(!istype(D, /obj/machinery/disposal/toilet))//So it does not drain gas from a toilet which does not function on it. gas = D.air_contents// transfer gas resv. into holder object + //Check for any living mobs trigger hasmob. + //hasmob effects whether the package goes to cargo or its tagged destination. + for(var/mob/living/M in D) + if(M && M.stat != 2) + hasmob = 1 + + //Checks 1 contents level deep. This means that players can be sent through disposals... + //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) + for(var/obj/O in D) + if(O.contents) + for(var/mob/living/M in O.contents) + if(M && M.stat != 2) + hasmob = 1 + // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs for(var/atom/movable/AM in D) @@ -611,10 +626,10 @@ if(H.mutations & FAT) // is a human and fat? has_fat_guy = 1 // set flag on holder */ - if(istype(AM, /obj/structure/bigDelivery)) + if(istype(AM, /obj/structure/bigDelivery) && !hasmob) var/obj/structure/bigDelivery/T = AM src.destinationTag = T.sortTag - else if(istype(AM, /obj/item/smallDelivery)) + if(istype(AM, /obj/item/smallDelivery) && !hasmob) var/obj/item/smallDelivery/T = AM src.destinationTag = T.sortTag else if (!src.destinationTag)