From 1cb85c302474515de7faf230ec00d55d2306cdca Mon Sep 17 00:00:00 2001 From: nullbear Date: Fri, 15 Apr 2016 21:36:34 -0700 Subject: [PATCH] Fixes monkey cube Dupe Glitch fixes https://github.com/tgstation/-tg-station/issues/14667 Adds some consistency, allowing monkeys to be drag dropped onto the monkey recycler, like they are with the disposals chutes. Prevents grabs from being placed in disposals, as they were being before. --- code/game/objects/structures/watercloset.dm | 13 ++++- code/modules/food&drinks/food/snacks_meat.dm | 19 ------- .../kitchen machinery/monkeyrecycler.dm | 49 ++++++++++++------- code/modules/recycling/disposal-unit.dm | 2 +- .../research/xenobiology/xenobio_camera.dm | 9 ++++ 5 files changed, 52 insertions(+), 40 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c6206294e7b..1a9586b7449 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -440,6 +440,18 @@ user << "You wet [O] in [src]." playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = O + if(M.wrapped) + user << "You need to unwrap [src] first!" + return + else + user << "You place [src] under a stream of water..." + user.drop_item() + M.loc = get_turf(src) + M.Expand() + return + var/obj/item/I = O if(!I || !istype(I)) return @@ -456,7 +468,6 @@ user.visible_message("[user] washes [I] using [src].", \ "You wash [I] using [src].") - /obj/structure/sink/kitchen name = "kitchen sink" icon_state = "sink_alt" diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food&drinks/food/snacks_meat.dm index 621bc15d0b6..5000e581448 100644 --- a/code/modules/food&drinks/food/snacks_meat.dm +++ b/code/modules/food&drinks/food/snacks_meat.dm @@ -133,25 +133,6 @@ list_reagents = list("nutriment" = 2) filling_color = "#CD853F" -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity) - if(!proximity) return - if(istype(O,/obj/structure/sink)) - if (wrapped) - user << "You need to unwrap [src] first!" - return - else - user << "You place [src] under a stream of water..." - user.drop_item() - loc = get_turf(O) - return Expand() - if(istype(O, /obj/machinery/computer/camera_advanced/xenobio)) - var/obj/machinery/computer/camera_advanced/xenobio/X = O - X.monkeys++ - user << "You feed [src] to the [X]. It now has [X.monkeys] monkey cubes stored." - qdel(src) - return - ..() - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) if(wrapped) Unwrap(user) diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index ebf6296f446..47a8d236b6f 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -58,29 +58,40 @@ var/grabbed = G.affecting if(ismonkey(grabbed)) var/mob/living/carbon/monkey/target = grabbed - if(target.stat == 0) - user << "The monkey is struggling far too much to put it in the recycler." - return - if(target.buckled || target.buckled_mobs.len) - user << "The monkey is attached to something." - return - if(!user.drop_item()) - return - qdel(target) - user << "You stuff the monkey into the machine." - playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - use_power(500) - grinded++ - sleep(50) - pixel_x = initial(pixel_x) //return to its spot after shaking - user << "The machine now has [grinded] monkey\s worth of material stored." - + stuff_monkey_in(target, user) + user.drop_item() + return else user << "The machine only accepts monkeys!" return +/obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user) + if(!istype(target)) + return + if(ismonkey(target)) + stuff_monkey_in(target, user) + +/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/monkey/target, mob/living/user) + if(!istype(target)) + return + if(target.stat == 0) + user << "The monkey is struggling far too much to put it in the recycler." + return + if(target.buckled || target.buckled_mobs.len) + user << "The monkey is attached to something." + return + qdel(target) + user << "You stuff the monkey into the machine." + playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + use_power(500) + grinded++ + sleep(50) + pixel_x = initial(pixel_x) //return to its spot after shaking + user << "The machine now has [grinded] monkey\s worth of material stored." + + /obj/machinery/monkey_recycler/attack_hand(mob/user) if (src.stat != 0) //NOPOWER etc return diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index fb75418c3c2..d71557e4518 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -306,7 +306,7 @@ update() return - if(!user.drop_item()) + if(!user.drop_item() || I.flags & ABSTRACT) // Dunno why this wasn't here before? return I.loc = src diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index dbc201fab83..4d85e3c9d5c 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -62,6 +62,15 @@ return return ..() +/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + monkeys++ + user << "You feed [O] to the [src]. It now has [monkeys] monkey cubes stored." + user.drop_item() + qdel(O) + return + + /datum/action/innate/camera_off/xenobio/Activate() if(!target || !ishuman(target)) return