From 914d072c8666e119af298cd6831bc2bec9e82721 Mon Sep 17 00:00:00 2001 From: Segrain Date: Sun, 28 Jul 2013 00:58:18 +0300 Subject: [PATCH] Camera networks. --- code/game/machinery/camera/camera_assembly.dm | 10 +++- .../game/machinery/computer/buildandrepair.dm | 48 +++++++++++++++++-- code/game/machinery/computer/camera.dm | 40 ++++++++++++---- code/modules/mob/living/silicon/ai/ai.dm | 7 ++- .../silicon/ai/freelook/update_triggers.dm | 10 ++-- code/modules/research/designs.dm | 9 ---- code/setup.dm | 7 ++- maps/tgstation.2.1.0.0.1.dmm | 2 +- 8 files changed, 100 insertions(+), 33 deletions(-) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index c67a5a77b19..d5408d33308 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -87,6 +87,9 @@ usr << "No network found please hang up and try your call again." return + var/temptag = "[get_area(src)] ([rand(1, 999)])" + input = strip_html(input(usr, "How would you like to name the camera?", "Set Camera Name", temptag)) + state = 4 var/obj/machinery/camera/C = new(src.loc) src.loc = C @@ -94,9 +97,12 @@ C.auto_turn() - C.network = tempnetwork + C.network = uniquelist(tempnetwork) + tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS) + if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility. + cameranet.removeCamera(C) - C.c_tag = "[get_area_name(src)] ([rand(1, 999)]" + C.c_tag = input for(var/i = 5; i >= 0; i -= 1) var/direct = input(user, "Direction?", "Assembling Camera", null) in list("LEAVE IT", "NORTH", "EAST", "SOUTH", "WEST" ) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 9925a79311f..7dca0ae01fb 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -37,6 +37,10 @@ /obj/item/weapon/circuitboard/security name = "Circuit board (Security)" build_path = "/obj/machinery/computer/security" + var/network = list("SS13") + req_access = list(access_security) + var/locked = 1 + var/emagged = 0 /obj/item/weapon/circuitboard/aicore name = "Circuit board (AI core)" origin_tech = "programming=4;biotech=2" @@ -169,10 +173,6 @@ name = "Circuit board (Operating Computer)" build_path = "/obj/machinery/computer/operating" origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/mining - name = "Circuit board (Outpost Status Display)" - build_path = "/obj/machinery/computer/security/mining" - origin_tech = "programming=2" /obj/item/weapon/circuitboard/comm_monitor name = "Circuit board (Telecommunications Monitor)" build_path = "/obj/machinery/computer/telecomms/monitor" @@ -241,6 +241,40 @@ user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri" return +/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/weapon/card/emag)) + if(emagged) + user << "Circuit lock is already removed." + return + user << "\blue You override the circuit lock and open controls." + emagged = 1 + locked = 0 + else if(istype(I,/obj/item/weapon/card/id)) + if(emagged) + user << "\red Circuit lock does not respond." + return + if(check_access(I)) + locked = !locked + user << "\blue You [locked ? "" : "un"]lock the circuit controls." + else + user << "\red Access denied." + else if(istype(I,/obj/item/device/multitool)) + if(locked) + user << "\red Circuit controls are locked." + return + var/existing_networks = dd_list2text(network,",") + var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks)) + if(!input) + usr << "No input found please hang up and try your call again." + return + var/list/tempnetwork = text2list(input, ",") + tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1) + if(tempnetwork.len < 1) + usr << "No network found please hang up and try your call again." + return + network = tempnetwork + return + /obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) if(istype(I,/obj/item/weapon/screwdriver)) if(src.build_path == "/obj/machinery/computer/rdconsole/core") @@ -356,4 +390,8 @@ var/obj/machinery/computer/supplycomp/SC = B var/obj/item/weapon/circuitboard/supplycomp/C = circuit SC.can_order_contraband = C.contraband_enabled - del(src) + if(istype(circuit,/obj/item/weapon/circuitboard/security)) + var/obj/machinery/computer/security/C = B + var/obj/item/weapon/circuitboard/security/CB = circuit + C.network = CB.network + del(src) \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 0e4caf97c3f..6be673ab194 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -5,7 +5,6 @@ name = "Security Cameras" desc = "Used to access the various cameras on the station." icon_state = "cameras" - circuit = "/obj/item/weapon/circuitboard/security" var/obj/machinery/camera/current = null var/last_pic = 1.0 var/list/network = list("SS13") @@ -78,7 +77,38 @@ attack_hand(user) return - + attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/structure/computerframe/CF = new /obj/structure/computerframe(loc) + new /obj/item/weapon/shard(loc) + var/obj/item/weapon/circuitboard/security/CB = new /obj/item/weapon/circuitboard/security(CF) + CB.network = network + for (var/obj/C in src) + C.loc = loc + CF.circuit = CB + CF.state = 3 + CF.icon_state = "3" + CF.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/structure/computerframe/CF = new /obj/structure/computerframe( loc ) + var/obj/item/weapon/circuitboard/security/CB = new /obj/item/weapon/circuitboard/security(CF) + CB.network = network + for (var/obj/C in src) + C.loc = loc + CF.circuit = CB + CF.state = 4 + CF.icon_state = "4" + CF.anchored = 1 + del(src) + else + attack_hand(user) + return /obj/machinery/computer/security/telescreen name = "Telescreen" @@ -87,7 +117,6 @@ icon_state = "telescreen" network = list("thunder") density = 0 - circuit = null /obj/machinery/computer/security/telescreen/update_icon() icon_state = initial(icon_state) @@ -100,10 +129,6 @@ desc = "Damn, they better have /tg/thechannel on these things." icon = 'icons/obj/status_display.dmi' icon_state = "entertainment" - network = list("thunder") - density = 0 - circuit = null - /obj/machinery/computer/security/wooden_tv name = "Security Cameras" @@ -116,4 +141,3 @@ desc = "Used to access the various cameras on the outpost." icon_state = "miningcameras" network = list("MINE") - circuit = "/obj/item/weapon/circuitboard/mining" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 34edb28df43..cfc538f0617 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -340,7 +340,7 @@ var/list/ai_list = list() if(href_list["say_word"]) src.announcement(href_list["say_word"]) return - + if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite var/L = text2num(href_list["lawi"]) switch(ioncheck[L]) @@ -561,10 +561,9 @@ var/list/ai_list = list() if(!C.can_use()) continue - var/list/tempnetwork = C.network - tempnetwork.Remove("CREED", "thunder", "RD", "toxins", "Prison") + var/list/tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS,1) if(tempnetwork.len) - for(var/i in C.network) + for(var/i in tempnetwork) cameralist[i] = i var/old_network = network network = input(U, "Which network would you like to view?") as null|anything in cameralist diff --git a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm index bef11e8e0b2..c1f63313727 100644 --- a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm +++ b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm @@ -89,12 +89,16 @@ /obj/machinery/camera/New() ..() - cameranet.cameras += src - cameranet.addCamera(src) + cameranet.cameras += src //Camera must be added to global list of all cameras no matter what... + var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) //...but if all of camera's networks are restricted, it only works for specific camera consoles. + if(open_networks.len) //If there is at least one open network, chunk is available for AI usage. + cameranet.addCamera(src) /obj/machinery/camera/Del() cameranet.cameras -= src - cameranet.removeCamera(src) + var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) + if(open_networks.len) + cameranet.removeCamera(src) ..() #undef BORG_CAMERA_BUFFER \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index b231729fa13..e407dfb7489 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -331,15 +331,6 @@ datum/design/supplycomp materials = list("$glass" = 2000, "sacid" = 20) build_path = "/obj/item/weapon/circuitboard/supplycomp" -datum/design/mining - name = "Circuit Design (Outpost Status Display)" - desc = "Allows for the construction of circuit boards used to build an outpost status display console." - id = "mining" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) - build_path = "/obj/item/weapon/circuitboard/mining" - datum/design/comm_monitor name = "Circuit Design (Telecommunications Monitoring Console)" desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." diff --git a/code/setup.dm b/code/setup.dm index 8afcbe689a5..14b29eaae05 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -693,4 +693,9 @@ var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_d //proc/get_pulse methods #define GETPULSE_HAND 0 //less accurate (hand) -#define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc) +#define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc) + +var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them. + "thunder", + "CREED" + ) \ No newline at end of file diff --git a/maps/tgstation.2.1.0.0.1.dmm b/maps/tgstation.2.1.0.0.1.dmm index 3eb1c356ab6..2a1f8fada69 100644 --- a/maps/tgstation.2.1.0.0.1.dmm +++ b/maps/tgstation.2.1.0.0.1.dmm @@ -4569,7 +4569,7 @@ "bJS" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) "bJT" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech) "bJU" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/tech) -"bJV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bJV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/security{name = "Circuit board (Mining Monitor)"; network = list("MINE")},/turf/simulated/floor/plating,/area/storage/tech) "bJW" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/turf/simulated/floor/plating,/area/storage/tech) "bJX" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/plating,/area/storage/tech) "bJY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)