From b8a7957a2294d565a9e1b00804e98e1840cc1a3e Mon Sep 17 00:00:00 2001 From: Perakp Date: Sat, 7 Dec 2013 08:55:07 +0200 Subject: [PATCH 1/4] Adds deconstruction for DNA scanner and cloning pod. Adding wires to a machine frame uses one unit of wire. Wires returned from deconstructing return 1 unit of wire. Fixes issue #1001 --- code/game/dna.dm | 51 ++++++++++++++---- code/game/machinery/autolathe.dm | 10 +--- code/game/machinery/camera/camera.dm | 1 - code/game/machinery/cloning.dm | 30 ++++++++++- code/game/machinery/constructable_frame.dm | 10 ++-- code/game/machinery/machinery.dm | 21 ++++++++ .../telecomms/machine_interactions.dm | 18 ++++--- code/game/machinery/vending.dm | 1 - code/game/mecha/mech_fabricator.dm | 23 ++------ code/modules/power/port_gen.dm | 20 +++---- code/modules/research/circuitprinter.dm | 17 ++---- code/modules/research/destructive_analyzer.dm | 25 +++------ code/modules/research/protolathe.dm | 29 +++------- code/modules/research/rdconsole.dm | 2 +- code/modules/research/rdmachines.dm | 3 +- code/modules/research/server.dm | 25 ++------- icons/obj/Cryogenic2.dmi | Bin 43374 -> 45632 bytes icons/obj/cloning.dmi | Bin 8298 -> 9878 bytes 18 files changed, 143 insertions(+), 143 deletions(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index 2e980b50ad0..ada6aab647f 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -339,16 +339,15 @@ /obj/machinery/dna_scannernew/New() ..() - component_parts = newlist( - /obj/item/weapon/circuitboard/clonescanner, - /obj/item/weapon/stock_parts/scanning_module, - /obj/item/weapon/stock_parts/manipulator, - /obj/item/weapon/stock_parts/micro_laser, - /obj/item/weapon/stock_parts/console_screen, - /obj/item/weapon/cable_coil, - /obj/item/weapon/cable_coil - ) - RefreshParts() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/clonescanner(null) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/cable_coil(null, 1) + component_parts += new /obj/item/weapon/cable_coil(null, 1) + /obj/machinery/dna_scannernew/proc/toggle_open() if(open) return close() @@ -378,6 +377,9 @@ /obj/machinery/dna_scannernew/proc/close() if(open) + if(panel_open) + usr << "Close the maintenance panel first." + return 0 open = 0 density = 1 for(var/mob/living/carbon/C in loc) @@ -409,6 +411,9 @@ /obj/machinery/dna_scannernew/proc/open() if(!open) + if(panel_open) + usr << "Close the maintenance panel first." + return if(locked) usr << "The bolts are locked down, securing the door shut." return @@ -432,6 +437,31 @@ return /obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G, mob/user) + + if(istype(G, /obj/item/weapon/screwdriver)) + if(occupant) + user << "The maintenance panel is locked." + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + if(panel_open) + icon_state = "[icon_state]_maintenance" + user << "You open the maintenance panel of [src]." + else + if(open) + icon_state = "[initial(icon_state)]_open" + else + icon_state = "[initial(icon_state)]" + user << "You close the maintenance panel of [src]." + return + + if(istype(G, /obj/item/weapon/crowbar)) + if(panel_open) + for(var/obj/I in contents) // in case there is something in the scanner + I.loc = src.loc + default_deconstruction_crowbar() + return + if(!istype(G, /obj/item/weapon/grab) || !ismob(G.affecting)) return if(!open) @@ -482,6 +512,7 @@ del(src) +//DNA COMPUTER /obj/machinery/computer/scan_consolenew name = "\improper DNA scanner access console" desc = "Scan DNA." diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 16cd92e782f..6a31eb60051 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -176,21 +176,13 @@ var/global/list/autolathe_recipes_hidden = list( \ return 1 if (opened) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(m_amount >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(m_amount / 3750) if(g_amount >= 3750) var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) G.amount = round(g_amount / 3750) - del(src) + default_deconstruction_crowbar() return 1 else user.set_machine(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 6f6db8ad4ec..7577a2ddbe7 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -14,7 +14,6 @@ var/c_tag_order = 999 var/status = 1.0 anchored = 1.0 - var/panel_open = 0 // 0 = Closed / 1 = Open var/invuln = null var/obj/item/device/camera_bug/bug = null var/obj/item/weapon/camera_assembly/assembly = null diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 958bd693066..3e6de01e367 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -19,6 +19,19 @@ var/attempting = 0 //One clone attempt at a time thanks var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk +/obj/machinery/clonepod/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/clonepod(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + + //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. /obj/item/weapon/disk/data @@ -98,6 +111,8 @@ //Start growing a human clone in the pod! /obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/mrace) + if(panel_open) + return 0 if(mess || attempting) return 0 var/datum/mind/clonemind = locate(mindref) @@ -217,7 +232,7 @@ src.occupant = null if (src.locked) src.locked = 0 - if (!src.mess) + if (!src.mess && !panel_open) icon_state = "pod_0" use_power(200) return @@ -226,6 +241,19 @@ //Let's unlock this early I guess. Might be too early, needs tweaking. /obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/screwdriver)) + if(occupant || mess || locked) + user << "The maintenance panel is locked." + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]") + return + + if(istype(W, /obj/item/weapon/crowbar)) + if(panel_open) + default_deconstruction_crowbar() + return + if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (!src.check_access(W)) user << "\red Access Denied." diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index a41d002efe0..029063c0d51 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -125,9 +125,9 @@ del(O) new_machine.component_parts = list() for(var/obj/O in src) - O.loc = new_machine + O.loc = null new_machine.component_parts += O - circuit.loc = new_machine + circuit.loc = null new_machine.RefreshParts() del(src) @@ -137,8 +137,10 @@ if(istype(P, /obj/item/weapon/cable_coil)) var/obj/item/weapon/cable_coil/CP = P if(CP.amount > 1) - var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src) - CC.amount = 1 + var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src, 1) + CP.amount-- + if(!CP.amount) del(CP) + else CP.update_icon() components += CC req_components[I]-- update_req_desc() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2ea74cf174e..fd3c869d85b 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -108,6 +108,7 @@ Class Procs: var/uid var/manual = 0 var/global/gl_uid = 1 + var/panel_open = 0 /obj/machinery/New() ..() @@ -238,3 +239,23 @@ Class Procs: uid = gl_uid gl_uid++ +/obj/machinery/proc/default_deconstruction_crowbar() + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + M.state = 2 + M.icon_state = "box_1" + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + del(src) + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/icon_state_open, var/icon_state_closed) + if (!panel_open) + panel_open = 1 + icon_state = icon_state_open + user << "You open the maintenance hatch of [src]." + else + panel_open = 0 + icon_state = icon_state_closed + user << "You close the maintenance hatch of [src]." diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index a3c1ee3f340..a22750aa3dd 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -68,9 +68,12 @@ user << "You finish prying out the components." // Drop all the component stuff - if(contents.len > 0) - for(var/obj/x in src) - x.loc = user.loc + if(component_parts) + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + else // If the machine wasn't made during runtime, probably doesn't have components: @@ -81,13 +84,14 @@ for(var/i = 1, i <= C.req_components[I], i++) newpath = text2path(I) var/obj/item/s = new newpath - s.loc = user.loc - if(istype(P, /obj/item/weapon/cable_coil)) - var/obj/item/weapon/cable_coil/A = P + s.loc = src.loc + if(istype(s, /obj/item/weapon/cable_coil)) + var/obj/item/weapon/cable_coil/A = s A.amount = 1 + A.update_icon() // Drop a circuit board too - C.loc = user.loc + C.loc = src.loc // Create a machine frame and delete the current machine var/obj/machinery/constructable_frame/machine_frame/F = new diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 661c885b4d7..d7b3aa81b6a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -40,7 +40,6 @@ var/shoot_inventory = 0 //Fire items at customers! We're broken! var/shut_up = 0 //Stop spouting those godawful pitches! var/extended_inventory = 0 //can we access the hidden inventory? - var/panel_open = 0 //Hacking that vending machine. Gonna get a free candy bar. var/scan_id = 1 var/obj/item/weapon/coin/coin var/datum/wires/vending/wires = null diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 9bf3da5d6ff..864ff0f51d2 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -34,7 +34,6 @@ var/list/queue = list() var/processing_queue = 0 var/screen = "main" - var/opened = 0 var/temp var/list/part_sets = list( //set names must be unique "Cyborg"=list( @@ -701,25 +700,11 @@ /obj/machinery/mecha_part_fabricator/attackby(obj/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - icon_state = "fab-o" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "fab-idle" - user << "You close the maintenance hatch of [src]." + default_deconstruction_screwdriver(user, "fab-o", "fab-idle") + return - if (opened) + if (panel_open) if(istype(W, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(src.resources["metal"] >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(src.resources["metal"] / G.perunit) @@ -744,7 +729,7 @@ if(src.resources["bananium"] >= 2000) var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc) G.amount = round(src.resources["bananium"] / G.perunit) - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 628956fa68a..0568744f67f 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -53,7 +53,6 @@ display round(lastgen) and plasmatank amount var/active = 0 var/power_gen = 5000 - var/open = 0 var/recent_fault = 0 var/power_output = 1 @@ -115,8 +114,8 @@ display round(lastgen) and plasmatank amount component_parts = list() component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new board_path(src) var/obj/sheet = new sheet_path(null) @@ -231,21 +230,14 @@ display round(lastgen) and plasmatank amount playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) else if(istype(O, /obj/item/weapon/screwdriver)) - open = !open + panel_open = !panel_open playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(open) + if(panel_open) user << "\blue You open the access panel." else user << "\blue You close the access panel." - else if(istype(O, /obj/item/weapon/crowbar) && !open) - var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) - for(var/obj/item/I in component_parts) - if(I.reliability < 100) - I.crit_fail = 1 - I.loc = src.loc - new_frame.state = 2 - new_frame.icon_state = "box_1" - del(src) + else if(istype(O, /obj/item/weapon/crowbar) && !panel_open) + default_deconstruction_crowbar() /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) ..() diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 5da8dbf3688..5ac1762d266 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -52,19 +52,12 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_imprinter = null - linked_console = null - icon_state = "circuit_imprinter_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "circuit_imprinter" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_imprinter = null + linked_console = null + default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index a6501553fad..bee0c198916 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -44,27 +44,14 @@ Note: Must be placed within 3 tiles of the R&D Console if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - icon_state = "d_analyzer_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "d_analyzer" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_destroy = null + linked_console = null + default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - I.loc = src.loc - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index de1a92ec018..ec908f22d73 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -57,30 +57,13 @@ Note: Must be placed west/left of and R&D console to function. if (O.is_open_container()) return 1 if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_lathe = null - linked_console = null - icon_state = "protolathe_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "protolathe" - user << "You close the maintenance hatch of [src]." + if(linked_console) + linked_console.linked_lathe = null + linked_console = null + default_deconstruction_screwdriver(user, "protolathe_t", "protolathe") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) - reagents.trans_to(I, reagents.total_volume) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc if(m_amount >= 3750) var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) G.amount = round(m_amount / G.perunit) @@ -108,7 +91,7 @@ Note: Must be placed west/left of and R&D console to function. if(adamantine_amount >= 2000) var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc) G.amount = round(adamantine_amount / G.perunit) - del(src) + default_deconstruction_crowbar() return 1 else user << "\red You can't load the [src.name] while it's opened." diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index cb1bd68ca44..b77802f59b8 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -99,7 +99,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). for(var/obj/machinery/r_n_d/D in oview(3,src)) - if(D.linked_console != null || D.disabled || D.opened) + if(D.linked_console != null || D.disabled || D.panel_open) continue if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) if(linked_destroy == null) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 68def8bd39c..ee922a055a6 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -17,7 +17,6 @@ var/hack_wire var/disable_wire var/shock_wire - var/opened = 0 var/obj/machinery/computer/rdconsole/linked_console /obj/machinery/r_n_d/New() @@ -53,7 +52,7 @@ /obj/machinery/r_n_d/attack_hand(mob/user as mob) if (shocked) shock(user,50) - if(opened) + if(panel_open) var/dat as text dat += "[src.name] Wires:
" for(var/wire in src.wires) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 06aa463f2b0..b90917b53e1 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -19,8 +19,8 @@ component_parts = list() component_parts += new /obj/item/weapon/circuitboard/rdserver(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) + component_parts += new /obj/item/weapon/cable_coil(src, 1) + component_parts += new /obj/item/weapon/cable_coil(src, 1) RefreshParts() src.initialize(); //Agouri @@ -131,27 +131,12 @@ if (shocked) shock(user,50) if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - icon_state = "server_o" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "server" - user << "You close the maintenance hatch of [src]." + default_deconstruction_screwdriver(user, "server_o", "server") return - if (opened) + if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) griefProtection() - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc - del(src) + default_deconstruction_crowbar() return 1 /obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi index 7314ac709af8ca33c79e0da77e071b78347cd95c..91e301beded81f4f8134bc6c54076060ad248b42 100644 GIT binary patch delta 12220 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 delta 9940 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 diff --git a/icons/obj/cloning.dmi b/icons/obj/cloning.dmi index af0bb42e60207c87625f376ee0d15285e07a04d1..ada68297367a8373b90abe6ef42754f82085d751 100644 GIT binary patch literal 9878 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 Date: Sat, 7 Dec 2013 09:27:56 +0200 Subject: [PATCH 2/4] Applied logic to portable generator deconstruction. --- code/modules/power/port_gen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 0568744f67f..f8569d10924 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -236,7 +236,7 @@ display round(lastgen) and plasmatank amount user << "\blue You open the access panel." else user << "\blue You close the access panel." - else if(istype(O, /obj/item/weapon/crowbar) && !panel_open) + else if(istype(O, /obj/item/weapon/crowbar) && panel_open) default_deconstruction_crowbar() /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) From 834ae673f1a8984c614c1a0d4d5e993666d662cb Mon Sep 17 00:00:00 2001 From: Perakp Date: Sat, 14 Dec 2013 17:28:24 +0200 Subject: [PATCH 3/4] usr null checks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - added some null checks in places where they might be needed, made use of existing null checks where possible - changed text formatting to where easily done - changed a few pixels so cloning pod doesn’t bother me anymore --- code/game/dna.dm | 58 +++++++++++++++++---------------- code/game/machinery/cloning.dm | 6 ++-- icons/obj/cloning.dmi | Bin 9878 -> 9868 bytes 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index ada6aab647f..17ca55751fb 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -240,54 +240,54 @@ if(blocks[NEARSIGHTEDBLOCK]) M.disabilities |= NEARSIGHTED - M << "\red Your eyes feel strange." + M << "Your eyes feel strange." if(blocks[EPILEPSYBLOCK]) M.disabilities |= EPILEPSY - M << "\red You get a headache." + M << "You get a headache." if(blocks[STRANGEBLOCK]) - M << "\red You feel strange." + M << "You feel strange." if(prob(95)) if(prob(50)) randmutb(M) else randmuti(M) else randmutg(M) if(blocks[COUGHBLOCK]) M.disabilities |= COUGHING - M << "\red You start coughing." + M << "You start coughing." if(blocks[CLUMSYBLOCK]) - M << "\red You feel lightheaded." + M << "You feel lightheaded." M.mutations |= CLUMSY if(blocks[TOURETTESBLOCK]) M.disabilities |= TOURETTES - M << "\red You twitch." + M << "You twitch." if(blocks[NERVOUSBLOCK]) M.disabilities |= NERVOUS - M << "\red You feel nervous." + M << "You feel nervous." if(blocks[DEAFBLOCK]) M.sdisabilities |= DEAF M.ear_deaf = 1 - M << "\red You can't seem to hear anything..." + M << "You can't seem to hear anything." if(blocks[BLINDBLOCK]) M.sdisabilities |= BLIND - M << "\red You can't seem to see anything." + M << "You can't seem to see anything." if(blocks[HULKBLOCK]) if(inj || prob(10)) M.mutations |= HULK - M << "\blue Your muscles hurt." + M << "Your muscles hurt." if(blocks[XRAYBLOCK]) if(inj || prob(30)) M.mutations |= XRAY - M << "\blue The walls suddenly disappear." + M << "The walls suddenly disappear." M.sight |= SEE_MOBS|SEE_OBJS|SEE_TURFS M.see_in_dark = 8 M.see_invisible = SEE_INVISIBLE_LEVEL_TWO if(blocks[FIREBLOCK]) if(inj || prob(30)) M.mutations |= COLD_RESISTANCE - M << "\blue Your body feels warm." + M << "Your body feels warm." if(blocks[TELEBLOCK]) if(inj || prob(25)) M.mutations |= TK - M << "\blue You feel smarter." + M << "You feel smarter." /* If you want the new mutations to work, UNCOMMENT THIS. @@ -349,9 +349,11 @@ component_parts += new /obj/item/weapon/cable_coil(null, 1) -/obj/machinery/dna_scannernew/proc/toggle_open() - if(open) return close() - else return open() +/obj/machinery/dna_scannernew/proc/toggle_open(mob/user=usr) + if(!user) + return + if(open) return close(user) + else return open(user) /obj/machinery/dna_scannernew/container_resist() var/mob/living/user = usr @@ -362,8 +364,7 @@ user.next_move = world.time + 100 user.last_special = world.time + 100 user << "You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)" - for(var/mob/O in viewers(src)) - O << "You hear a metallic creaking from [src]!" + user.visible_message("You hear a metallic creaking from [src]!") if(do_after(user,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds if(!user || user.stat != CONSCIOUS || user.loc != src || open || !locked) @@ -373,12 +374,12 @@ visible_message("[user] successfully broke out of [src]!") user << "You successfully break out of [src]!" - open() + open(user) -/obj/machinery/dna_scannernew/proc/close() +/obj/machinery/dna_scannernew/proc/close(mob/user) if(open) if(panel_open) - usr << "Close the maintenance panel first." + user << "Close the maintenance panel first." return 0 open = 0 density = 1 @@ -409,13 +410,13 @@ return 1 -/obj/machinery/dna_scannernew/proc/open() +/obj/machinery/dna_scannernew/proc/open(mob/user) if(!open) if(panel_open) - usr << "Close the maintenance panel first." + user << "Close the maintenance panel first." return if(locked) - usr << "The bolts are locked down, securing the door shut." + user << "The bolts are locked down, securing the door shut." return var/turf/T = get_turf(src) if(T) @@ -433,7 +434,7 @@ /obj/machinery/dna_scannernew/relaymove(mob/user as mob) if(user.stat) return - open() + open(user) return /obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G, mob/user) @@ -473,8 +474,9 @@ del(G) /obj/machinery/dna_scannernew/attack_hand(mob/user) - if(..()) return - toggle_open() + if(..()) + return + toggle_open(user) add_fingerprint(user) @@ -780,7 +782,7 @@ if("togglelock") if(connected) connected.locked = !connected.locked if("toggleopen") - if(connected) connected.toggle_open() + if(connected) connected.toggle_open(usr) if("setduration") if(!num) num = round(input(usr, "Choose pulse duration:", "Input an Integer", null) as num|null) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 3e6de01e367..2498538e4f2 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -256,12 +256,12 @@ if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (!src.check_access(W)) - user << "\red Access Denied." + user << "Access Denied." return if ((!src.locked) || (isnull(src.occupant))) return if ((src.occupant.health < -20) && (src.occupant.stat != 2)) - user << "\red Access Refused." + user << "Access Refused." return else src.locked = 0 @@ -292,6 +292,8 @@ set category = "Object" set src in oview(1) + if(!usr) + return if (usr.stat != 0) return src.go_out() diff --git a/icons/obj/cloning.dmi b/icons/obj/cloning.dmi index ada68297367a8373b90abe6ef42754f82085d751..a65c2a43f786ea808c670db8c7afbb4b3a15a07a 100644 GIT binary patch delta 9482 zcmZvh1yCGa)9-PTV8IERAi*WLFYXcuwgiGh2*Ewb5CV$?3GNmw0fL1GTVQc_LV(~b z4vQ@T78dsMykC9ye)ra$s;Q~!)6-{8SI?zcV)2bmx4tcReT=RorT~KkieR180<-G^G0FWoo>Fazl|qJd+&nCq*=}8 zNB5~8sT+vtS+#z7MKb}Ev+kC+R~9h+xLK$#&qMsUA%8`Y&q`}`H=R*0Z(i18Dwa2s zA+UK~O7#6f`ec1giY|lS^!! z@E8Mvo`WZbN3zuyPSn`gRW!T~p)3_;Men3zN;E{JA*nP5TcQ;e6#CDf5XZBYO`Gvc z$zWl>HD~N|t{eu?Eb+a&2)%l{cF2H}x`(293@cAw@Sz>URcF?xz^wzw;F>}vzl#Ib z@G=W-rstja1PEUUj>zCh;$QsD)O7pPtF!#~dlf?}EGlC*di}FA$dC7bI*7Q_lwOG$ zfm!qPMCjvFs9tGQ_z{oE)|z#Vujysu$Yfot?&@$x14`A=AR0qt*B)_f{#ULIkZ$|ue#nn@mfF=cx*?t3{J z#vB_PSU13jH$~0gvX55U(Wgnq5$dXX(qj_|f9XH(6pTf`%jOjod>jA;x74FT;*~q|kT3TZfdPHt7W~pzd&h9p!7(_=m z$_s<~3$hjAF$EPrxzQioBrC31SOCco>SU#fH35gEiw8weAS^&Op@<<2;y52kPHVD&AxZ+Qq(^ymX)kna) z!W&Z1>z>P7=Ws)>)I*NNuBrSO@8UR~RT3{bMxN?>5@Z;C!ubc(ML6HEMNLmDMYcio z3)snmc`n-FX)jCWQt-w zJ3=P9|N0~VU(d|E`|Pq{pmR`qvjKbX8xSj36Ku?s)vM3J_iLQoF%D?H#Shd(0whIdjUrSkbSc0 z74hWtf{T3pt-RHjP4>yR`to~A@Or?6^jn4Wx<^FaTSirbNnhNqJ;|4yLeSUB5<8#d04rCzBjrxTD$jC|NL0?3yDgUBPDvzxC+FeAJ?ds8NBo_u?vm>~}v1h(yI} zFSNQcePQ@_uCMIHgTjBV=nKmdFpuG+H3yEOwPt)~eBz?Z3dY`&M88ucbGKEvII{l| zXfFq!r4%U55$EbL#1m=n9%v;+CkoPT`cU|U)l>*4k!M+dm-%^nzl=_n$M>Vpo}WM2 z!M(!8A(Ok(SV7%L<7Z!r8jZsF6H+ z8lhY(;vP!kmKgtbzH0T|&o3H-=e{GO&L`f(_4-8>^fWF!g6J4F#?fkjB?ll4hXr;5 z?=9|+J0&v#mxg_P8@R)3e)#Re3Wl1P*|<;4S%81VJNk-hwvkvVA_6`W2Aa>*IX!M_ zs(f^*|73vg1U5G2k!q*zuw0UHjAm3a>2h?M2g~ZdL;59s! zr~DkALGK$5A2~h8#+v;I*a9PsV!8fDPS}nSK&`odU)IdpfN{xAWPt|b?o@&!pjfLn zatD?wv~Jqqz7Q#IB!Dg_u#dpU2_Qvw-t%=}1bjru(MPAun--hX$iP6=*!RgB;89eM znrp}lPCkB{1@6+pn6Pl9Hj|*c&fSwF<4P}_s?OEvE zmX(0b?KX(5^zV~(;0{@!=#j16BGVLSILEbiDt*@NKW~YLc8FTQtisL(Qw~8+`Tph? z6YrjxoA@pXaQ1P8#xk0ikgQmT&d9VZq0$fP{*?K~A2hJfYt_l%S1+CsUadW2nBWw- z^KPy0=(qh7yu_FVkol0wO@#N!S2ea-kbR(oiCqL;mE$hDylZc6|J`;*_74Vf3yXY| zuyCi|&Ulbq=|0SN7<}eUE7DXJp0nCah4lme1+4dQK3rU&b~SAF$QrIa;Uq5Cc9w2e zKiGw)mdM!f6j+;fI<_7+rQchb!p^{z=_h(m_$G=)JTIXfm><>;^;=UI6vHSV-#l>X zxWYj*d$UyI9KEoD0o~uP&=+7h$ZzWJIWdM!5KXy*VHg3tHT4jn(#lZ8bR|~6S)F<_ zG6ROAK;%*=gc5ug+TlC~5*|0*;mqhx=)Xa6VzsW$U>`pbtPMf` z^+Ik{8v{yZr@ku+Z?0VQ0@uUVvD59OaXpUREv0sFgD<0sgOM-^ogvt^OwD#YCQC3I z1_&TP4nT|3gj~lYum#mJSIb{t^g;^fPq=u4xNGuEAL}y@Ml1j3kQ6kY}pN z*NCX6vZ)Jx`{i$5)z_UIb6Ue1u3Xqu^T~+kQEHBpBk8neIcfnaGp?W?OKX)!80UDUsw!}V*&7=e z1NLU45(h8SGRwFDSbbkv#;s-a&>@GyZxX&Q#~}LtX=2jG|$$K ze46X%r`i+{o~hXxMIf*?yoH0>M=gp>Rc~6?3Yx?u(>T4ls;(91wJLb@j3)7Pi?^DU zInlu4&~CQ)a^tTO7>xf3cNwcH^t-^!Zo&nVk9C4JvGLb(cb3vSVfx#xs6^A1XXyLf zUpBtSlz>mVh!U|b?Bj^WVRT{3V+`aenoG=N$;8=SYvIb8K)S~xy^T}4@R=As%~59| z!a`SsjDcK-=H&N;PPS8j#8O0N+{Q(!eHkh?wRipeF#|)F*I25W z>~4OVL$I4qD1KP*to6_++u!ZE zxIE=}pD;{9lk4tcH#ggVn5Jfm*{gETexXI zX?((1KxiutaB+n)G$EBt`s$*uE~rg^fHmI$%>w~dZ$!Q?-DL0$x51A6VPje3kI)NS zJFmbygiH714r183cZNQyYMT9fuWu+my_T?^9dI{4OWXKSwQX#wJdT`Uih&)}feO!? z;6JLKi_zP1@rcwoKdV8}OgwQ*wj;N{0e3A+pZH|oV*;sZne#4GjYI|5*Pm-mm6I~^Dx)cUcHui z)%UGBJZEo>%1A2S%~ydnHd|wD+V{L+Flywh*{hb31Ya&d$?H8IJXkR?W!bg;!IAj* zS@X$O(Jkpjt|o%8(^5xRT**2iu+>FW6zJz}G^yat@fx1UsQ2o;)dxY0J=Q_%>{y0L zLR0Nyy)x#t`-JuQX1@5`G{vrSZ?e;2ASaoHvnVULOJ)=XZ_^e7 zRPFw__l!fu);aHb>TzHEXJmf{+(2n@<>|uW$BCV?iV9-QrnPg(69#(r70=B>0Dquj znQSQrT1Jj}$XUee1p&4C3ule3c6P( zu@r)DSe{tIsG&~_hlPhqG^C%D*H<&U7<>oIt7|=M6q9{>ZC&)p z!n$7K=-1XJ3`D&&fla@3BFpZH z6m5Kx%r-AazbE(12>hHPhMY+RYO89(b;|i59nZTpMUOv5fFVxQUG?x7=-j5-3#`jp z=}@H5oH^nAZ7d=!8*#|hogBN9S~J4U#Zv~rU7B%2gT>t1I8A>di!x3>;IXT6(8p|0 zRY~IW(!6K_KP<6lC zlFDqAkK3&{I2nZeVcmS2>0xCxewCeB*sJl<_=qDv^<_MlmP_WV2|)4%B})D(QUrCL zC?6$Mlj<=bl${AZG(#DgkWa$-ZEKrYG@Fw6$foC{bT0Gtcv7(}U2!ED3B=0Bw;D#q zzrxd&iJPJ%+47*pLc1b0GE{8jvT0&ers=Fvj91;#*sxEwi77UpHQ?o|+7%Aby&4f3 zQ&WO6*$Hau#R2^EK=McwPr0+zoKn(2&y7F;*&?%5)W|{UQ7#AGj_G64fVy5{s!Cob z^e_dslyIm*5Kix9Y^rJct3Y!x%OL1f8r7Dr@4aX3V-JF$2T=(iEQ_Go$gIfY{?i8c zsET65G1gMx#AB@IDA(xstkad4(|Gx2gY+ijbM<#`&Ep&tUuf}U z#qfO$OFW|WryvgaZoZ=75sE*ok?hieszsHm9R0BhxuzK24qBLL%kbdR0ahP`xVpZ- zUj8Zi3t#d87)I*stV)cEtp;ZrncKYQk^rC8culPHTry%+W5)fP(Ptx`Zs38f3@dr( zo33$bCWo!CkE*kH2VzyWRQ{d%x-EhJsjq4c!AIMp+T%~f?eErLtvA#b@`B-uK@B|R z9O|wQ$LTp$O+KaCGQZtZ!6~=qUJlGY1 zV=Q0ogXZ&B{?o0VAXBSg0#yORBiq$q)G++i*&3>qsgL`DoHo2TosLa#Z|-K)TA7yRk=cfXdrLs8?=7*E!H;Ef45VibBI8J3%T zHJBl-_oNSj-)OM@_^lxgHl7@n%64ECi5Vp$b;>ezw+M zr$Ii9V*edtc^#Hd^MsjRmFtCjSUT0G1hJr&O&srdApyF!yGa68+?Jr1vBq)9bf4iC zCXlNA^UL^2F>6x%!|<>U&R*&QIVRXdV$;gVV5KV+tyI}Jv7j_5{_{JB;ub*x3Ab{f zGkloB;*H2K?DWbczXN5U1Pxk%Ri`cg2>DhwI8~9GPQ~5zM@itcB_LhlZMwl86rknQ6&*MW+vp5E3Q%*Q#a zxY;f7fluEh4PSQdb1B8EooWet@o54T4iB0N4PKl3SjhO*szKDuf}*k>jaf05wEoft zm(tq2;V$k`p2x>_SNd8L2$Fm4<;}a>Ri7y6c`gejw2IHUhVbBYVJWxEsjwN)@8kUX zZ88Zh%WJP}5}}BhTAa$638}>oK78FyVFw?;wUv>zLy7xHQXPe_(H`l!Gp6*L4>%X%A{ zF+Qw{njv3`5ORk%i;f#H0J}M9#>eEO2UB%)d6wG?1Y$`~^EHHbdPe9T#Yi&wrH5Sm ze6_QS~RS+|k>F4ETBW*g=~S-kjSd<5i5cRrSQ~fh3Iz{K~g%CHC=ufKp_%MASn(+}xAX zlo#xgjg8n9dKD!Be0`6Sy^iWW ze2?g9dM}X2v@ErCy!21vTCs}Fb7%Pv!#|T4K25V8Hu8Y134bO7F?CS zorTsfLpFk^yFMg;?Z!_BWr36S`-vK|1e*-Q%gcz%gQBHPkNTf}-q$`&Bb;K?yYGgi zhKnc3+QwhQ2b)>C{k)|d$tA)zf9l-0>fIlls;>McmL(l_`r}&_5_hF# zK7s$`h!a1srtHL=TyS&)2TYYlf;u9SDWr}+;#w*QoXyC2eR$|q3qfwcY{pGj*+I+Z zW~N9@Tg@0=6M)6+!2~|A#h8_yqURVGFl&Hv(VF0F@y-N}WrYaFjc=IJeEG;~q$_R< zcu{mR%&!L~+C~y`0E96uy=lvij?|PSJmGVT`k{PT-!3=X+FVUD1Xv1UKpaR1E{GAZ z$SZ}mqU_IR^1Su6x8c(6VJp3-V+5R6HFB`e8J6C_dJi16_dL6mNyKz{tJD1I98Sn; zC4h2WlmXB3=nrAguRII6cF>;|0nr<)I%#b9cm~m(oUO#?8c-sQdwAc&V{)sMhsQ6} z7rB`{7907OME&JiK6uKoT%82xyDyXaGZ|SUu3W?>vv1Ho>YG-98b$vc3*QkhV9fMu zbkzaya%L!amXSuKaq1B4Wfm$MR`d+n3+r*4unO(C@8$0sViOcL%Thb-gK(dK(6*D^ z&UG7kG8F2*Pha18eXqX5><-ET?mjBI2CwRc+DOcVaaY9NA67+Hu{f|nSco48m42!> zPbCPhe08b*X~SN&45!&+lTP0TSdVl<0qOErYc#JJN~zPn)sLQ>aIM#|S9&9UYvFSmg9{Ba|R{`;mu1hc1_jI3YQVF^N6_-kD zw1Uq(qA+a6hEr5D{3V4#sw>)aD(kWI7Zx{Z6gJt`ss$D$dy!tV#YeA?qYvqK*r2TiCa>96g*}v{itU+&@BG>=s{rY8$#HHDe z12WvPVHEG<%BazMj|~u=w*r(va9H(6s-c}6?jPSa7l;1XZBLXWWU`!;)hrL@%R%Xw zn6^YPe&qLHE05Py39m3$24|Z!^_8SYBimzQkK&Ces+ayxL2sJvK;HW_dKI7?v=1Q? zyF)IiK){2(U^ir4sAJZ^{%#izQmaPI*`L8@&*Tyx)D5AV*^vXPEJFagKs!{F-%EG9 z!Iavc@2BFNea8TNoA6gQhCMMJ#30RwqbJ%?St*jjB9KObIxDq$mJ|*DOM{G8KknQ4 zRIzVP(2wk~6x#&ZhDwIr1C>;Kp89cp32K0P%}y92ZZi~j3V1|ZfZ7k)MEXI=x3Ijb zv4=pJ?=N&%V=o=X5IrP_RqH#_YB#Ju*Xl2mJqP-3(TLi6gwEQUfYgtZ1-uPyMj^Ln zW@j~(dn_&xs~JON{u}io^J2LF@w%_UNOTzfT~);wmfAwF@iS1$6cb0v8q;GydY^hq zB#Gtd$0+7db|ue55L5sEu)7U;nnP6GWi<1RI%m?=fy==*^-1t~$4O^<>x# z0;;=RW2x+%coQkmTnL_hA!RLq>}h90@dDnu9}CzVd`*}7-DPnSLo--zuLjhY{Q8+_ zciu;>#G)ftn74;k4kLqDCF_S_bCDzC=OG^Xd&4B?9!LyoE8B*3Fi1MORvqKg*dAwQDt4w-R$P zfq+MxRfXe@R-f5moTaS0upLd0Rc@RRVU!^uuiCR1cP z8YwSXm{U%e2=22<12oP44Z|O+Hd(q=F!ApQxvaDry`~up$E8V4ySIgTt|FQ!VmN9S zs?JFgr&%5qSJ1m_H6l73Lqw62Ah{rZ>Qz6st8r80)!16C=A(_o(P z&_B@Yg{js8{-8e#E3GUqIM%tnPPYU@xDVcfJvze^Du9POi_`UqXJKSQ1^N=O>e%ZF zVWlLlWn5*^CjZm@?K~f{i2I2;d=X+`DVri90WMxJzsWFK-bhz@)`vnf>8%ejH$RT` zJpRTI`==s<*j&=8^g{{`DpqU7SNq?^7?P-v&w^ts$m2N!1A9!wT~{MhwTiyeSMVk2 zl|PB^2Q*{3*^Ngkj+F5D-fG1-XMKE`IoEVt#JcMQ=z|2S7FA@qaZHTt`AodWlXPMu z>@-DnCn}Ea^CMc?n~DmU-%fA$36k@kdx~l9E^S;ENpwY3IieU)+T~Je29DP z-agxW)Orv%A^_#%yeav=(OKY{%>vy$t=T1j*c2W}J4-=xwuyeOHGLev$hY(H@xk)w z4w~VU8(SOo{!Fe)Za@{IRvi5`Q=+5#dx?EoD!W}1c#7mp>8bh*17J-@BdV%8=S$26 z9U6#87{ab;yTBxDxk$}GmF^I`~w1kZ8FAUB*t?|4t==*J}ylq3D*ArPs8`M7(VR$wvkj}gvZRl zsl${CAG)l^M}w;~fZNYRvB~FDFq356q*PZRWvqDUCzH&VD8oPpNw9oe`yXyZVErs> zTp2Idwf!~QNiSV(aq*|tR%u33LJkfNtQ6LKzLBhq`6l= zsb{#Ni$P~Xik)rYzc9~^;mk0Z*&v6| zf2j@SXU?l@hK#S(AC7Sgu6J4me~a@G7CKD$byT>mZ$yGNa7IYX5TquUty3K)vYNIn zUD~~JpH7)jCcvp{>F3*HBe2k1Xzv{7&bHu}jzyHUT4&AO?_iLSkes^gn~-}T(|k}A z^e>YcB}?yd6bDXgB;2?4SKr}VH*BYjhU}6B{|e&Bk-kepx#cybuJrC290+a_1{3c8 ze(f&i2D|kWXgg724nFC!lUEHGnw5C6lkX+2oi6$eSn+srw8*@9!nSGm+IiEqucJjV9#35eD#o z7zU{<)6jaYi2pjPtQ(nM6K&6ZRVdol+6}i7k(y1~v~J{pgxH5HHh2X8U$79<(^0I! z?GZHTOQI~X>$X73n5ij~hXcD=xFkJDxPSYl8s)gx|5x<4`yZ-*rb|-S{)Z3d{tm-N z)W$fEHT|Yvu11$F2>)e~75I12DL((ka9yM!ARu_0LVmwL2(WW^0dKrGl2iNld`=Gr zj(XtSUmF_Y?m7gp{tc8{T~i*JGReUJfY7u2S(pD2%q0p`t_OQ6AOA-&*INiLV_#^P zvOszdQTUA&7Q4&*w`k7!^gp7xJVA-5MwAtYr5S{K_gnU^xI22EME2%zCKtHlG;6=+ zPUiy;=gW=pf$LNApnhwYHwzsov2+2MwC%i{nD~i^a&rjxzn>3w?j|o!mU4cmzZXEs eb8q-rfgx+y>3n54Z^n&ve`%`fsZ=XjhyO1x=jJ8= delta 9511 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 From 5d1f63f92446e4877ba6f03ea21c1956a5c4ceb6 Mon Sep 17 00:00:00 2001 From: Perakp Date: Sun, 15 Dec 2013 12:07:55 +0200 Subject: [PATCH 4/4] and cable use() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added more span tags - using cable now uses use() - fixed use() to correctly return 1 when it succeeds - checked that there were no checks that would’ve been previously borked. For testing purposes I renamed use to use_cable (‘use’ is kinda bad for a proc name, but use_cable is hardly better), but left that out of the commit because it would’ve inflated the pr. --- code/game/dna.dm | 6 ++-- code/game/machinery/constructable_frame.dm | 33 +++++++++---------- code/game/machinery/machinery.dm | 8 ++--- .../telecomms/machine_interactions.dm | 24 ++++++-------- code/modules/power/cable.dm | 4 +-- 5 files changed, 35 insertions(+), 40 deletions(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index 17ca55751fb..b8b346cc6fd 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -447,13 +447,13 @@ panel_open = !panel_open if(panel_open) icon_state = "[icon_state]_maintenance" - user << "You open the maintenance panel of [src]." + user << "You open the maintenance panel of [src]." else if(open) icon_state = "[initial(icon_state)]_open" else icon_state = "[initial(icon_state)]" - user << "You close the maintenance panel of [src]." + user << "You close the maintenance panel of [src]." return if(istype(G, /obj/item/weapon/crowbar)) @@ -542,7 +542,7 @@ user.drop_item() I.loc = src src.diskette = I - user << "You insert [I]." + user << "You insert [I]." src.updateUsrDialog() return else diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 029063c0d51..ebe0566804d 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -49,7 +49,7 @@ /obj/machinery/constructable_frame/machine_frame/attackby(obj/item/P as obj, mob/user as mob) if(P.crit_fail) - user << "\red This part is faulty, you cannot add this to the machine!" + user << "This part is faulty, you cannot add this to the machine!" return switch(state) if(1) @@ -57,17 +57,17 @@ var/obj/item/weapon/cable_coil/C = P if(C.amount >= 5) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "\blue You start to add cables to the frame." + user << "You start to add cables to the frame." if(do_after(user, 20)) if(C) C.amount -= 5 if(!C.amount) del(C) - user << "\blue You add cables to the frame." + user << "You add cables to the frame." state = 2 icon_state = "box_1" if(istype(P, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user << "\blue You dismantle the frame" + user << "You dismantle the frame." new /obj/item/stack/sheet/metal(src.loc, 5) del(src) if(2) @@ -75,7 +75,7 @@ var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "\blue You add the circuit board to the frame." + user << "You add the circuit board to the frame." circuit = P user.drop_item() P.loc = src @@ -86,10 +86,10 @@ update_namelist() update_req_desc() else - user << "\red This frame does not accept circuit boards of this type!" + user << "This frame does not accept circuit boards of this type!" if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - user << "\blue You remove the cables." + user << "You remove the cables." state = 1 icon_state = "box_0" var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc ) @@ -102,9 +102,9 @@ circuit.loc = src.loc circuit = null if(components.len == 0) - user << "\blue You remove the circuit board." + user << "You remove the circuit board." else - user << "\blue You remove the circuit board and other components." + user << "You remove the circuit board and other components." for(var/obj/item/weapon/W in components) W.loc = src.loc desc = initial(desc) @@ -132,27 +132,26 @@ del(src) if(istype(P, /obj/item/weapon)) + var/success for(var/I in req_components) if(istype(P, text2path(I)) && (req_components[I] > 0)) + success=1 if(istype(P, /obj/item/weapon/cable_coil)) var/obj/item/weapon/cable_coil/CP = P - if(CP.amount > 1) - var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src, 1) - CP.amount-- - if(!CP.amount) del(CP) - else CP.update_icon() + var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src, 1, CP.item_color) + if(CP.use(1)) components += CC req_components[I]-- update_req_desc() - break + break user.drop_item() P.loc = src components += P req_components[I]-- update_req_desc() break - if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil)) - user << "\red You cannot add that component to the machine!" + if(!success) + user << "You cannot add that to the machine!" //Machine Frame Circuit Boards diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index fd3c869d85b..f04a742c876 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -212,7 +212,7 @@ Class Procs: if ( ! (istype(usr, /mob/living/carbon/human) || \ istype(usr, /mob/living/silicon) || \ istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) - usr << "\red You don't have the dexterity to do this!" + usr << "You don't have the dexterity to do this!" return 1 /* //distance checks are made by atom/proc/DblClick @@ -225,7 +225,7 @@ Class Procs: visible_message("\red [H] stares cluelessly at [src] and drools.") return 1 else if(prob(H.getBrainLoss())) - user << "\red You momentarily forget how to use [src]." + user << "You momentarily forget how to use [src]." return 1 src.add_fingerprint(user) @@ -254,8 +254,8 @@ Class Procs: if (!panel_open) panel_open = 1 icon_state = icon_state_open - user << "You open the maintenance hatch of [src]." + user << "You open the maintenance hatch of [src]." else panel_open = 0 icon_state = icon_state_closed - user << "You close the maintenance hatch of [src]." + user << "You close the maintenance hatch of [src]." diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index a22750aa3dd..b4c9e607982 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -24,26 +24,26 @@ switch(construct_op) if(0) if(istype(P, /obj/item/weapon/screwdriver)) - user << "You unfasten the bolts." + user << "You unfasten the bolts." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) construct_op ++ if(1) if(istype(P, /obj/item/weapon/screwdriver)) - user << "You fasten the bolts." + user << "You fasten the bolts." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) construct_op -- if(istype(P, /obj/item/weapon/wrench)) - user << "You dislodge the external plating." + user << "You dislodge the external plating." playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) construct_op ++ if(2) if(istype(P, /obj/item/weapon/wrench)) - user << "You secure the external plating." + user << "You secure the external plating." playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) construct_op -- if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - user << "You remove the cables." + user << "You remove the cables." construct_op ++ var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( user.loc ) A.amount = 5 @@ -51,21 +51,17 @@ if(3) if(istype(P, /obj/item/weapon/cable_coil)) var/obj/item/weapon/cable_coil/A = P - if(A.amount >= 5) - user << "You insert the cables." - A.amount -= 5 - if(A.amount <= 0) - user.drop_item() - del(A) + if(A.use(5)) + user << "You insert the cables." construct_op -- stat &= ~BROKEN // the machine's not borked anymore! else - user << "You need more cable" + user << "You need more cable to do that." if(istype(P, /obj/item/weapon/crowbar)) - user << "You begin prying out the circuit board and components..." + user << "You begin prying out the circuit board and components..." playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) if(do_after(user,60)) - user << "You finish prying out the components." + user << "You finish prying out the components." // Drop all the component stuff if(component_parts) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 00777fcc9eb..0c4bd97519a 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -302,8 +302,8 @@ if(src.amount < used) return 0 else if (src.amount == used) - //handle mob icon update - if(ismob(loc)) + .=1 //Because del(src) stops the proc, set the default return value to 1 + if(ismob(loc)) //handle mob icon update var/mob/M = loc M.u_equip(src) del(src)