From 085f5f7fe16fcb0d0478834e2fcc72b0501e9cbb Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 20 Oct 2012 22:31:13 +0400 Subject: [PATCH] Added ability to rig fueltanks To make your very own ghetto explosive: 1.Wrench faucet open on tank. 2.Add assembly of your choice (only timers and radios work as triggers here) To unmake it simply remove assembly with hands and wrench faucet back. Rigging tank with igniter logs for admins. Also explosion size depends on amount of fuel left in tank. --- code/modules/assembly/igniter.dm | 9 +++- code/modules/reagents/reagent_dispenser.dm | 57 +++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 8e9efad5036..181d8d6c6f7 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -13,7 +13,14 @@ activate() if(!..()) return 0//Cooldown check var/turf/location = get_turf(loc) - if(location) location.hotspot_expose(1000,1000) + if(location) + location.hotspot_expose(1000,1000) + if (istype(src.loc,/obj/item/device/assembly_holder)) + if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc + if (tank && tank.modded) + tank.explode() + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index bd527917746..6887a35b08d 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -89,10 +89,60 @@ icon = 'icons/obj/objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 + var/modded = 0 + var/obj/item/device/assembly_holder/rig = null New() ..() reagents.add_reagent("fuel",1000) + examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + if (modded) + usr << "\red Fuel faucet is wrenched open, leaking the fuel!" + if(rig) + usr << "There is some kind of device rigged to the tank." + + attack_hand() + if (rig) + usr.visible_message("[usr] begins to detach [rig] from \the [src].", "You begin to detach [rig] from \the [src]") + if(do_after(usr, 20)) + usr.visible_message("\blue [usr] detaches [rig] from \the [src].", "\blue You detach [rig] from \the [src]") + rig.loc = get_turf(usr) + rig = null + overlays = new/list() + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W,/obj/item/weapon/wrench)) + user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \ + "You wrench [src]'s faucet [modded ? "closed" : "open"]") + modded = modded ? 0 : 1 + if (istype(W,/obj/item/device/assembly_holder)) + if (rig) + user << "\red There is another device in the way." + return ..() + user.visible_message("[user] begins rigging [W] to \the [src].", "You begin rigging [W] to \the [src]") + if(do_after(user, 20)) + user.visible_message("\blue [user] rigs [W] to \the [src].", "\blue You rig [W] to \the [src]") + + var/obj/item/device/assembly_holder/H = W + if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + message_admins("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") + log_game("[key_name(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") + + rig = W + user.drop_item() + W.loc = src + + var/icon/test = getFlatIcon(W) + test.Shift(NORTH,1) + test.Shift(EAST,6) + overlays += test + + return ..() + + bullet_act(var/obj/item/projectile/Proj) if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) explode() @@ -104,7 +154,12 @@ explode() proc/explode() - explosion(src.loc,1,2,4) + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else + explosion(src.loc,-1,1,2) if(src) del(src)