From 444204dde960c2c5b028c4b62b91d3f596eb322d Mon Sep 17 00:00:00 2001 From: ShadowLarkens Date: Tue, 8 Sep 2020 14:28:02 -0700 Subject: [PATCH] Remove broken, unused commcard system from communicators This is being done to help facilitate the transfer to TGUI. These commcards are part of a project that never really got finished, and the majority of them do not even function in their current implementation, with only barebone templates and half-made integration. While it would be neat to have these function one day, I believe it would be for the best to remove their current implementation wholesale as this commit does, and allow them to be reintegrated at a later time when communicators have been converted to TGUI and NanoUI has been eliminated. --- .../objects/items/devices/communicator/UI.dm | 15 - .../items/devices/communicator/cartridge.dm | 952 ------------------ .../devices/communicator/communicator.dm | 51 - .../items/devices/communicator/helper.dm | 445 -------- nano/templates/comm_power_monitor.tmpl | 76 -- nano/templates/emp_records.tmpl | 23 - nano/templates/gps_access.tmpl | 66 -- nano/templates/janitorialLocator.tmpl | 11 - nano/templates/med_records.tmpl | 23 - nano/templates/merc_blast_door_control.tmpl | 23 - nano/templates/sec_bot_access.tmpl | 36 - nano/templates/sec_records.tmpl | 23 - nano/templates/signaler_access.tmpl | 24 - nano/templates/stat_display_access.tmpl | 57 -- polaris.dme | 1 - 15 files changed, 1826 deletions(-) delete mode 100644 code/game/objects/items/devices/communicator/cartridge.dm delete mode 100644 nano/templates/comm_power_monitor.tmpl delete mode 100644 nano/templates/emp_records.tmpl delete mode 100644 nano/templates/gps_access.tmpl delete mode 100644 nano/templates/janitorialLocator.tmpl delete mode 100644 nano/templates/med_records.tmpl delete mode 100644 nano/templates/merc_blast_door_control.tmpl delete mode 100644 nano/templates/sec_bot_access.tmpl delete mode 100644 nano/templates/sec_records.tmpl delete mode 100644 nano/templates/signaler_access.tmpl delete mode 100644 nano/templates/stat_display_access.tmpl diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index a4686e39de..867d7956ef 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -124,14 +124,6 @@ data["latest_news"] = get_recent_news() if(newsfeed_channel) data["target_feed"] = data["feeds"][newsfeed_channel] - if(cartridge) // If there's a cartridge, we need to grab the information from it - data["cart_devices"] = cartridge.get_device_status() - data["cart_templates"] = cartridge.ui_templates - for(var/list/L in cartridge.get_data()) - data[L["field"]] = L["value"] - // cartridge.get_data() returns a list of tuples: - // The field element is the tag used to access the information by the template - // The value element is the actual data, and can take any form necessary for the template // update the ui if it exists, returns null if no ui is passed/found ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -278,15 +270,8 @@ fon = !fon set_light(fon * flum) - if(href_list["toggle_device"]) - var/obj/O = cartridge.internal_devices[text2num(href_list["toggle_device"])] - cartridge.active_devices ^= list(O) // Exclusive or, will toggle its presence - if(href_list["newsfeed"]) newsfeed_channel = text2num(href_list["newsfeed"]) - if(href_list["cartridge_topic"] && cartridge) // Has to have a cartridge to perform these functions - cartridge.Topic(href, href_list) - SSnanoui.update_uis(src) add_fingerprint(usr) diff --git a/code/game/objects/items/devices/communicator/cartridge.dm b/code/game/objects/items/devices/communicator/cartridge.dm deleted file mode 100644 index 120df593e9..0000000000 --- a/code/game/objects/items/devices/communicator/cartridge.dm +++ /dev/null @@ -1,952 +0,0 @@ -// Communicator peripheral devices -// Internal devices that attack() can be relayed to -// Additional UI menus for added functionality -/obj/item/weapon/commcard - name = "generic commcard" - desc = "A peripheral plug-in for personal communicators." - icon = 'icons/obj/pda.dmi' - icon_state = "cart" - item_state = "electronic" - w_class = ITEMSIZE_TINY - - var/list/internal_devices = list() // Devices that can be toggled on to trigger on attack() - var/list/active_devices = list() // Devices that will be triggered on attack() - var/list/ui_templates = list() // List of ui templates the commcard can access - var/list/internal_data = list() // Data that shouldn't be updated every time nanoUI updates, or needs to persist between updates - - -/obj/item/weapon/commcard/proc/get_device_status() - var/list/L = list() - var/i = 1 - for(var/obj/I in internal_devices) - if(I in active_devices) - L[++L.len] = list("name" = "\proper[I.name]", "active" = 1, "index" = i++) - else - L[++L.len] = list("name" = I.name, "active" = 0, "index" = i++) - return L - - -// cartridge.get_data() returns a list of tuples: -// The field element is the tag used to access the information by the template -// The value element is the actual data, and can take any form necessary for the template -/obj/item/weapon/commcard/proc/get_data() - return list() - -// Handles cartridge-specific functions -// The helper.link() MUST HAVE 'cartridge_topic' passed into the href in order for cartridge functions to be processed. -// Doesn't matter what the value of it is for now, it's just a flag to say, "Hey, there's cartridge data to change!" -/obj/item/weapon/commcard/Topic(href, href_list) - - // Signalers - if(href_list["signaler_target"]) - - var/obj/item/device/assembly/signaler/S = locate(href_list["signaler_target"]) // Should locate the correct signaler - - if(!istype(S)) // Ref is no longer valid - return - - if(S.loc != src) // No longer within the cartridge - return - - switch(href_list["signaler_action"]) - if("Pulse") - S.activate() - - if("Edit") - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Ref no longer valid - return - - var/newVal = input(user, "Input a new [href_list["signaler_value"]].", href_list["signaler_value"], (href_list["signaler_value"] == "Code" ? S.code : S.frequency)) as num|null - if(newVal) - switch(href_list["signaler_value"]) - if("Code") - S.code = newVal - - if("Frequency") - S.frequency = newVal - - // Refresh list of powernet sensors - if(href_list["powernet_refresh"]) - internal_data["grid_sensors"] = find_powernet_sensors() - - // Load apc's on targeted powernet - if(href_list["powernet_target"]) - internal_data["powernet_target"] = href_list["powernet_target"] - - // GPS units - if(href_list["gps_target"]) - var/obj/item/device/gps/G = locate(href_list["gps_target"]) - - if(!istype(G)) // Ref is no longer valid - return - - if(G.loc != src) // No longer within the cartridge - return - - switch(href_list["gps_action"]) - if("Power") - G.tracking = text2num(href_list["value"]) - - if("Long_Range") - G.local_mode = text2num(href_list["value"]) - - if("Hide_Signal") - G.hide_signal = text2num(href_list["value"]) - - if("Tag") - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Ref no longer valid - return - - var/newTag = input(user, "Please enter desired tag.", G.tag) as text|null - - if(newTag) - G.tag = newTag - - if(href_list["active_category"]) - internal_data["supply_category"] = href_list["active_category"] - - // Supply topic - // Copied from /obj/machinery/computer/supplycomp/Topic() - // code\game\machinery\computer\supply.dm, line 188 - // Unfortunately, in order to support complete functionality, the whole thing is necessary - if(href_list["pack_ref"]) - var/datum/supply_pack/S = locate(href_list["pack_ref"]) - - // Invalid ref - if(!istype(S)) - return - - // Expand the supply pack's contents - if(href_list["expand"]) - internal_data["supply_pack_expanded"] ^= S - - // Make a request for the pack - if(href_list["request"]) - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Invalid ref - return - - if(world.time < internal_data["supply_reqtime"]) - visible_message("[src] flashes, \"[internal_data["supply_reqtime"] - world.time] seconds remaining until another requisition form may be printed.\"") - return - - var/timeout = world.time + 600 - var/reason = sanitize(input(user, "Reason:","Why do you require this item?","") as null|text) - if(world.time > timeout) - to_chat(user, "Error. Request timed out.") - return - if(!reason) - return - - SSsupply.create_order(S, user, reason) - internal_data["supply_reqtime"] = (world.time + 5) % 1e5 - - if(href_list["order_ref"]) - var/datum/supply_order/O = locate(href_list["order_ref"]) - - // Invalid ref - if(!istype(O)) - return - - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Invalid ref - return - - if(href_list["edit"]) - var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) - if(!new_val) - return - - switch(href_list["edit"]) - if("Supply Pack") - O.name = new_val - - if("Cost") - var/num = text2num(new_val) - if(num) - O.cost = num - - if("Index") - var/num = text2num(new_val) - if(num) - O.index = num - - if("Reason") - O.comment = new_val - - if("Ordered by") - O.ordered_by = new_val - - if("Ordered at") - O.ordered_at = new_val - - if("Approved by") - O.approved_by = new_val - - if("Approved at") - O.approved_at = new_val - - if(href_list["approve"]) - SSsupply.approve_order(O, user) - - if(href_list["deny"]) - SSsupply.deny_order(O, user) - - if(href_list["delete"]) - SSsupply.delete_order(O, user) - - if(href_list["clear_all_requests"]) - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Invalid ref - return - - SSsupply.deny_all_pending(user) - - if(href_list["export_ref"]) - var/datum/exported_crate/E = locate(href_list["export_ref"]) - - // Invalid ref - if(!istype(E)) - return - - var/mob/user = locate(href_list["user"]) - if(!istype(user)) // Invalid ref - return - - if(href_list["index"]) - var/list/L = E.contents[href_list["index"]] - - if(href_list["edit"]) - var/field = alert(user, "Select which field to edit", , "Name", "Quantity", "Value") - - var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) - if(!new_val) - return - - switch(field) - if("Name") - L["object"] = new_val - - if("Quantity") - var/num = text2num(new_val) - if(num) - L["quantity"] = num - - if("Value") - var/num = text2num(new_val) - if(num) - L["value"] = num - - if(href_list["delete"]) - E.contents.Cut(href_list["index"], href_list["index"] + 1) - - // Else clause means they're editing/deleting the whole export report, rather than a specific item in it - else if(href_list["edit"]) - var/new_val = sanitize(input(user, href_list["edit"], "Enter the new value for this field:", href_list["default"]) as null|text) - if(!new_val) - return - - switch(href_list["edit"]) - if("Name") - E.name = new_val - - if("Value") - var/num = text2num(new_val) - if(num) - E.value = num - - else if(href_list["delete"]) - SSsupply.delete_export(E, user) - - else if(href_list["add_item"]) - SSsupply.add_export_item(E, user) - - if(SSsupply && SSsupply.shuttle) - switch(href_list["send_shuttle"]) - if("send_away") - if(SSsupply.shuttle.forbidden_atoms_check()) - to_chat(usr, "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") - else - SSsupply.shuttle.launch(src) - to_chat(usr, "Initiating launch sequence.") - - if("send_to_station") - SSsupply.shuttle.launch(src) - to_chat(usr, "The supply shuttle has been called and will arrive in approximately [round(SSsupply.movetime/600,1)] minutes.") - - if("cancel_shuttle") - SSsupply.shuttle.cancel_launch(src) - - if("force_shuttle") - SSsupply.shuttle.force_launch(src) - - // Status display - switch(href_list["stat_display"]) - if("message") - post_status("message", internal_data["stat_display_line1"], internal_data["stat_display_line2"]) - internal_data["stat_display_special"] = "message" - if("alert") - post_status("alert", href_list["alert"]) - internal_data["stat_display_special"] = href_list["alert"] - if("setmsg") - internal_data["stat_display_line[href_list["line"]]"] = reject_bad_text(sanitize(input("Line 1", "Enter Message Text", internal_data["stat_display_line[href_list["line"]]"]) as text|null, 40), 40) - else - post_status(href_list["stat_display"]) - internal_data["stat_display_special"] = href_list["stat_display"] - - // Merc shuttle blast door controls - switch(href_list["all_blast_doors"]) - if("open") - for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) - B.open() - if("close") - for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) - B.close() - - if(href_list["scan_blast_doors"]) - internal_data["shuttle_doors"] = find_blast_doors() - - if(href_list["toggle_blast_door"]) - var/obj/machinery/door/blast/B = locate(href_list["toggle_blast_door"]) - if(!B) - return - spawn(0) - if(B.density) - B.open() - else - B.close() - - -// Updates status displays with a new message -// Copied from /obj/item/weapon/cartridge/proc/post_status(), -// code/game/objects/items/devices/PDA/cart.dm, line 251 -/obj/item/weapon/commcard/proc/post_status(var/command, var/data1, var/data2) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - if(!frequency) - return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = TRANSMISSION_RADIO - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - internal_data["stat_display_active1"] = data1 // Update the internally stored message, we won't get receive_signal if we're the sender - internal_data["stat_display_active2"] = data2 - if(loc) - var/obj/item/PDA = loc - var/mob/user = PDA.fingerprintslast - log_admin("STATUS: [user] set status screen with [src]. Message: [data1] [data2]") - message_admins("STATUS: [user] set status screen with [src]. Message: [data1] [data2]") - - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - -// Receives updates by external devices to the status displays -/obj/item/weapon/commcard/receive_signal(var/datum/signal/signal, var/receive_method, var/receive_param) - internal_data["stat_display_special"] = signal.data["command"] - switch(signal.data["command"]) - if("message") - internal_data["stat_display_active1"] = signal.data["msg1"] - internal_data["stat_display_active2"] = signal.data["msg2"] - if("alert") - internal_data["stat_display_special"] = signal.data["picture_state"] - - -/////////////////////////// -// SUBTYPES -/////////////////////////// - - -// Engineering Cartridge: -// Devices -// *- Halogen Counter -// Templates -// *- Power Monitor -/obj/item/weapon/commcard/engineering - name = "\improper Power-ON cartridge" - icon_state = "cart-e" - ui_templates = list(list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl")) - -/obj/item/weapon/commcard/engineering/New() - ..() - internal_devices |= new /obj/item/device/halogen_counter(src) - -/obj/item/weapon/commcard/engineering/Initialize() - internal_data["grid_sensors"] = find_powernet_sensors() - internal_data["powernet_target"] = "" - -/obj/item/weapon/commcard/engineering/get_data() - return list( - list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()), - list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) - ) - -// Atmospherics Cartridge: -// Devices -// *- Gas scanner -/obj/item/weapon/commcard/atmos - name = "\improper BreatheDeep cartridge" - icon_state = "cart-a" - -/obj/item/weapon/commcard/atmos/New() - ..() - internal_devices |= new /obj/item/device/analyzer(src) - - -// Medical Cartridge: -// Devices -// *- Halogen Counter -// *- Health Analyzer -// Templates -// *- Medical Records -/obj/item/weapon/commcard/medical - name = "\improper Med-U cartridge" - icon_state = "cart-m" - ui_templates = list(list("name" = "Medical Records", "template" = "med_records.tmpl")) - -/obj/item/weapon/commcard/medical/New() - ..() - internal_devices |= new /obj/item/device/healthanalyzer(src) - internal_devices |= new /obj/item/device/halogen_counter(src) - -/obj/item/weapon/commcard/medical/get_data() - return list(list("field" = "med_records", "value" = get_med_records())) - - -// Chemistry Cartridge: -// Devices -// *- Halogen Counter -// *- Health Analyzer -// *- Reagent Scanner -// Templates -// *- Medical Records -/obj/item/weapon/commcard/medical/chemistry - name = "\improper ChemWhiz cartridge" - icon_state = "cart-chem" - -/obj/item/weapon/commcard/medical/chemistry/New() - ..() - internal_devices |= new /obj/item/device/reagent_scanner(src) - - -// Detective Cartridge: -// Devices -// *- Halogen Counter -// *- Health Analyzer -// Templates -// *- Medical Records -// *- Security Records -/obj/item/weapon/commcard/medical/detective - name = "\improper D.E.T.E.C.T. cartridge" - icon_state = "cart-s" - ui_templates = list( - list("name" = "Medical Records", "template" = "med_records.tmpl"), - list("name" = "Security Records", "template" = "sec_records.tmpl") - ) - -/obj/item/weapon/commcard/medical/detective/get_data() - var/list/data = ..() - data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) - return data - - -// Internal Affairs Cartridge: -// Templates -// *- Security Records -// *- Employment Records -/obj/item/weapon/commcard/int_aff - name = "\improper P.R.O.V.E. cartridge" - icon_state = "cart-s" - ui_templates = list( - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Security Records", "template" = "sec_records.tmpl") - ) - -/obj/item/weapon/commcard/int_aff/get_data() - return list( - list("field" = "emp_records", "value" = get_emp_records()), - list("field" = "sec_records", "value" = get_sec_records()) - ) - - -// Security Cartridge: -// Templates -// *- Security Records -// *- Security Bot Access -/obj/item/weapon/commcard/security - name = "\improper R.O.B.U.S.T. cartridge" - icon_state = "cart-s" - ui_templates = list( - list("name" = "Security Records", "template" = "sec_records.tmpl"), - list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl") - ) - -/obj/item/weapon/commcard/security/get_data() - return list( - list("field" = "sec_records", "value" = get_sec_records()), - list("field" = "sec_bot_access", "value" = get_sec_bot_access()) - ) - - -// Janitor Cartridge: -// Templates -// *- Janitorial Locator Magicbox -/obj/item/weapon/commcard/janitor - name = "\improper CustodiPRO cartridge" - desc = "The ultimate in clean-room design." - ui_templates = list( - list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl") - ) - -/obj/item/weapon/commcard/janitor/get_data() - return list( - list("field" = "janidata", "value" = get_janitorial_locations()) - ) - - -// Signal Cartridge: -// Devices -// *- Signaler -// Templates -// *- Signaler Access -/obj/item/weapon/commcard/signal - name = "generic signaler cartridge" - desc = "A data cartridge with an integrated radio signaler module." - ui_templates = list( - list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") - ) - -/obj/item/weapon/commcard/signal/New() - ..() - internal_devices |= new /obj/item/device/assembly/signaler(src) - -/obj/item/weapon/commcard/signal/get_data() - return list( - list("field" = "signaler_access", "value" = get_int_signalers()) - ) - - -// Science Cartridge: -// Devices -// *- Signaler -// *- Reagent Scanner -// *- Gas Scanner -// Templates -// *- Signaler Access -/obj/item/weapon/commcard/signal/science - name = "\improper Signal Ace 2 cartridge" - desc = "Complete with integrated radio signaler!" - icon_state = "cart-tox" - // UI templates inherited - -/obj/item/weapon/commcard/signal/science/New() - ..() - internal_devices |= new /obj/item/device/reagent_scanner(src) - internal_devices |= new /obj/item/device/analyzer(src) - - -// Supply Cartridge: -// Templates -// *- Supply Records -/obj/item/weapon/commcard/supply - name = "\improper Space Parts & Space Vendors cartridge" - desc = "Perfect for the Quartermaster on the go!" - icon_state = "cart-q" - ui_templates = list( - list("name" = "Supply Records", "template" = "supply_records.tmpl") - ) - -/obj/item/weapon/commcard/supply/New() - ..() - internal_data["supply_category"] = null - internal_data["supply_controls"] = FALSE // Cannot control the supply shuttle, cannot accept orders - internal_data["supply_pack_expanded"] = list() - internal_data["supply_reqtime"] = -1 - -/obj/item/weapon/commcard/supply/get_data() - // Supply records data - var/list/shuttle_status = get_supply_shuttle_status() - var/list/orders = get_supply_orders() - var/list/receipts = get_supply_receipts() - var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge - var/list/pack_list = list() // List of supply packs within the currently selected category - - if(internal_data["supply_category"]) - pack_list = get_supply_pack_list() - - return list( - list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]), - list("field" = "order_auth", "value" = misc_supply_data["order_auth"]), - list("field" = "supply_points", "value" = misc_supply_data["supply_points"]), - list("field" = "categories", "value" = misc_supply_data["supply_categories"]), - list("field" = "contraband", "value" = misc_supply_data["contraband"]), - list("field" = "active_category", "value" = internal_data["supply_category"]), - list("field" = "shuttle", "value" = shuttle_status), - list("field" = "orders", "value" = orders), - list("field" = "receipts", "value" = receipts), - list("field" = "supply_packs", "value" = pack_list) - ) - - -// Command Cartridge: -// Templates -// *- Status Display Access -// *- Employment Records -/obj/item/weapon/commcard/head - name = "\improper Easy-Record DELUXE" - icon_state = "cart-h" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl") - ) - -/obj/item/weapon/commcard/head/New() - ..() - internal_data["stat_display_line1"] = null - internal_data["stat_display_line2"] = null - internal_data["stat_display_active1"] = null - internal_data["stat_display_active2"] = null - internal_data["stat_display_special"] = null - -/obj/item/weapon/commcard/head/Initialize() - // Have to register the commcard with the Radio controller to receive updates to the status displays - radio_controller.add_object(src, 1435) - ..() - -/obj/item/weapon/commcard/head/Destroy() - // Have to unregister the commcard for proper bookkeeping - radio_controller.remove_object(src, 1435) - ..() - -/obj/item/weapon/commcard/head/get_data() - return list( - list("field" = "emp_records", "value" = get_emp_records()), - list("field" = "stat_display", "value" = get_status_display()) - ) - -// Head of Personnel Cartridge: -// Templates -// *- Status Display Access -// *- Employment Records -// *- Security Records -// *- Supply Records -// ?- Supply Bot Access -// *- Janitorial Locator Magicbox -/obj/item/weapon/commcard/head/hop - name = "\improper HumanResources9001 cartridge" - icon_state = "cart-h" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Security Records", "template" = "sec_records.tmpl"), - list("name" = "Supply Records", "template" = "supply_records.tmpl"), - list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl") - ) - - -/obj/item/weapon/commcard/head/hop/get_data() - var/list/data = ..() - - // Sec records - data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) - - // Supply records data - var/list/shuttle_status = get_supply_shuttle_status() - var/list/orders = get_supply_orders() - var/list/receipts = get_supply_receipts() - var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge - var/list/pack_list = list() // List of supply packs within the currently selected category - - if(internal_data["supply_category"]) - pack_list = get_supply_pack_list() - - data[++data.len] = list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]) - data[++data.len] = list("field" = "order_auth", "value" = misc_supply_data["order_auth"]) - data[++data.len] = list("field" = "supply_points", "value" = misc_supply_data["supply_points"]) - data[++data.len] = list("field" = "categories", "value" = misc_supply_data["supply_categories"]) - data[++data.len] = list("field" = "contraband", "value" = misc_supply_data["contraband"]) - data[++data.len] = list("field" = "active_category", "value" = internal_data["supply_category"]) - data[++data.len] = list("field" = "shuttle", "value" = shuttle_status) - data[++data.len] = list("field" = "orders", "value" = orders) - data[++data.len] = list("field" = "receipts", "value" = receipts) - data[++data.len] = list("field" = "supply_packs", "value" = pack_list) - - // Janitorial locator magicbox - data[++data.len] = list("field" = "janidata", "value" = get_janitorial_locations()) - - return data - - -// Head of Security Cartridge: -// Templates -// *- Status Display Access -// *- Employment Records -// *- Security Records -// *- Security Bot Access -/obj/item/weapon/commcard/head/hos - name = "\improper R.O.B.U.S.T. DELUXE" - icon_state = "cart-hos" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Security Records", "template" = "sec_records.tmpl"), - list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl") - ) - -/obj/item/weapon/commcard/head/hos/get_data() - var/list/data = ..() - // Sec records - data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) - // Sec bot access - data[++data.len] = list("field" = "sec_bot_access", "value" = get_sec_bot_access()) - return data - - -// Research Director Cartridge: -// Devices -// *- Signaler -// *- Gas Scanner -// *- Reagent Scanner -// Templates -// *- Status Display Access -// *- Employment Records -// *- Signaler Access -/obj/item/weapon/commcard/head/rd - name = "\improper Signal Ace DELUXE" - icon_state = "cart-rd" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") - ) - -/obj/item/weapon/commcard/head/rd/New() - ..() - internal_devices |= new /obj/item/device/analyzer(src) - internal_devices |= new /obj/item/device/reagent_scanner(src) - internal_devices |= new /obj/item/device/assembly/signaler(src) - -/obj/item/weapon/commcard/head/rd/get_data() - var/list/data = ..() - // Signaler access - data[++data.len] = list("field" = "signaler_access", "value" = get_int_signalers()) - return data - - -// Chief Medical Officer Cartridge: -// Devices -// *- Health Analyzer -// *- Reagent Scanner -// *- Halogen Counter -// Templates -// *- Status Display Access -// *- Employment Records -// *- Medical Records -/obj/item/weapon/commcard/head/cmo - name = "\improper Med-U DELUXE" - icon_state = "cart-cmo" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Medical Records", "template" = "med_records.tmpl") - ) - -/obj/item/weapon/commcard/head/cmo/New() - ..() - internal_devices |= new /obj/item/device/healthanalyzer(src) - internal_devices |= new /obj/item/device/reagent_scanner(src) - internal_devices |= new /obj/item/device/halogen_counter(src) - -/obj/item/weapon/commcard/head/cmo/get_data() - var/list/data = ..() - // Med records - data[++data.len] = list("field" = "med_records", "value" = get_med_records()) - return data - -// Chief Engineer Cartridge: -// Devices -// *- Gas Scanner -// *- Halogen Counter -// Templates -// *- Status Display Access -// *- Employment Records -// *- Power Monitoring -/obj/item/weapon/commcard/head/ce - name = "\improper Power-On DELUXE" - icon_state = "cart-ce" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl") - ) - -/obj/item/weapon/commcard/head/ce/New() - ..() - internal_devices |= new /obj.item/device/analyzer(src) - internal_devices |= new /obj/item/device/halogen_counter(src) - -/obj/item/weapon/commcard/head/ce/Initialize() - internal_data["grid_sensors"] = find_powernet_sensors() - internal_data["powernet_target"] = "" - -/obj/item/weapon/commcard/head/ce/get_data() - var/list/data = ..() - // Add power monitoring data - data[++data.len] = list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()) - data[++data.len] = list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) - return data - - -// Captain Cartridge: -// Devices -// *- Health analyzer -// *- Gas Scanner -// *- Reagent Scanner -// *- Halogen Counter -// X- GPS - Balance -// *- Signaler -// Templates -// *- Status Display Access -// *- Employment Records -// *- Medical Records -// *- Security Records -// *- Power Monitoring -// *- Supply Records -// X- Supply Bot Access - Mulebots usually break when used -// *- Security Bot Access -// *- Janitorial Locator Magicbox -// X- GPS Access - Balance -// *- Signaler Access -/obj/item/weapon/commcard/head/captain - name = "\improper Value-PAK cartridge" - desc = "Now with 200% more value!" - icon_state = "cart-c" - ui_templates = list( - list("name" = "Status Display Access", "template" = "stat_display_access.tmpl"), - list("name" = "Employment Records", "template" = "emp_records.tmpl"), - list("name" = "Medical Records", "template" = "med_records.tmpl"), - list("name" = "Security Records", "template" = "sec_records.tmpl"), - list("name" = "Security Bot Control", "template" = "sec_bot_access.tmpl"), - list("name" = "Power Monitor", "template" = "comm_power_monitor.tmpl"), - list("name" = "Supply Records", "template" = "supply_records.tmpl"), - list("name" = "Janitorial Supply Locator", "template" = "janitorialLocator.tmpl"), - list("name" = "Integrated Signaler Control", "template" = "signaler_access.tmpl") - ) - -/obj/item/weapon/commcard/head/captain/New() - ..() - internal_devices |= new /obj.item/device/analyzer(src) - internal_devices |= new /obj/item/device/healthanalyzer(src) - internal_devices |= new /obj/item/device/reagent_scanner(src) - internal_devices |= new /obj/item/device/halogen_counter(src) - internal_devices |= new /obj/item/device/assembly/signaler(src) - -/obj/item/weapon/commcard/head/captain/get_data() - var/list/data = ..() - //Med records - data[++data.len] = list("field" = "med_records", "value" = get_med_records()) - - // Sec records - data[++data.len] = list("field" = "sec_records", "value" = get_sec_records()) - - // Sec bot access - data[++data.len] = list("field" = "sec_bot_access", "value" = get_sec_bot_access()) - - // Power Monitoring - data[++data.len] = list("field" = "powernet_monitoring", "value" = get_powernet_monitoring_list()) - data[++data.len] = list("field" = "powernet_target", "value" = get_powernet_target(internal_data["powernet_target"])) - - // Supply records data - var/list/shuttle_status = get_supply_shuttle_status() - var/list/orders = get_supply_orders() - var/list/receipts = get_supply_receipts() - var/list/misc_supply_data = get_misc_supply_data() // Packaging this stuff externally so it's less hardcoded into the specific cartridge - var/list/pack_list = list() // List of supply packs within the currently selected category - - if(internal_data["supply_category"]) - pack_list = get_supply_pack_list() - - data[++data.len] = list("field" = "shuttle_auth", "value" = misc_supply_data["shuttle_auth"]) - data[++data.len] = list("field" = "order_auth", "value" = misc_supply_data["order_auth"]) - data[++data.len] = list("field" = "supply_points", "value" = misc_supply_data["supply_points"]) - data[++data.len] = list("field" = "categories", "value" = misc_supply_data["supply_categories"]) - data[++data.len] = list("field" = "contraband", "value" = misc_supply_data["contraband"]) - data[++data.len] = list("field" = "active_category", "value" = internal_data["supply_category"]) - data[++data.len] = list("field" = "shuttle", "value" = shuttle_status) - data[++data.len] = list("field" = "orders", "value" = orders) - data[++data.len] = list("field" = "receipts", "value" = receipts) - data[++data.len] = list("field" = "supply_packs", "value" = pack_list) - - // Janitorial locator magicbox - data[++data.len] = list("field" = "janidata", "value" = get_janitorial_locations()) - - // Signaler access - data[++data.len] = list("field" = "signaler_access", "value" = get_int_signalers()) - - return data - - -// Mercenary Cartridge -// Templates -// *- Merc Shuttle Door Controller -/obj/item/weapon/commcard/mercenary - name = "\improper Detomatix cartridge" - icon_state = "cart" - ui_templates = list( - list("name" = "Shuttle Blast Door Control", "template" = "merc_blast_door_control.tmpl") - ) - -/obj/item/weapon/commcard/mercenary/Initialize() - internal_data["shuttle_door_code"] = "smindicate" // Copied from PDA code - internal_data["shuttle_doors"] = find_blast_doors() - -/obj/item/weapon/commcard/mercenary/get_data() - var/door_status[0] - for(var/obj/machinery/door/blast/B in internal_data["shuttle_doors"]) - door_status[++door_status.len] += list( - "open" = B.density, - "name" = B.name, - "ref" = "\ref[B]" - ) - - return list( - list("field" = "blast_door", "value" = door_status) - ) - - -// Explorer Cartridge -// Devices -// *- GPS -// Templates -// *- GPS Access - -// IMPORTANT: NOT MAPPED IN DUE TO BALANCE CONCERNS RE: FINDING THE VICTIMS OF ANTAGS. -// See suit sensors, specifically ease of turning them off, and variable level of settings which may or may not give location -// A GPS in your phone that is either broadcasting position or totally off, and can be hidden in pockets, coats, bags, boxes, etc, is much harder to disable -/obj/item/weapon/commcard/explorer - name = "\improper Explorator cartridge" - icon_state = "cart-tox" - ui_templates = list( - list("name" = "Integrated GPS", "template" = "gps_access.tmpl") - ) - -/obj/item/weapon/commcard/explorer/New() - ..() - internal_devices |= new /obj/item/device/gps/explorer(src) - -/obj/item/weapon/commcard/explorer/get_data() - var/list/GPS = get_GPS_lists() - - return list( - list("field" = "gps_access", "value" = GPS[1]), - list("field" = "gps_signal", "value" = GPS[2]), - list("field" = "gps_status", "value" = GPS[3]) - ) \ No newline at end of file diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 392af1b870..c3c8e87d3b 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -43,7 +43,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/note = "Thank you for choosing the T-14.2 Communicator, this is your notepad!" //Current note in the notepad function var/notehtml = "" - var/obj/item/weapon/commcard/cartridge = null //current cartridge var/fon = 0 // Internal light var/flum = 2 // Brightness @@ -203,17 +202,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!get_connection_to_tcomms()) close_connection(reason = "Connection timed out") -// Proc: attack() -// Parameters: 2 (M - what is being attacked. user - the mob that has the communicator) -// Description: When the communicator has an attached commcard with internal devices, relay the attack() through to those devices. -// Contents of the for loop are copied from gripper code, because that does approximately what we want to do. -/obj/item/device/communicator/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(cartridge && cartridge.active_devices) - for(var/obj/item/wrapped in cartridge.active_devices) - if(wrapped) //The force of the wrapped obj gets set to zero during the attack() and afterattack(). - wrapped.attack(M,user) - return 0 - // Proc: attackby() // Parameters: 2 (C - what is used on the communicator. user - the mob that has the communicator) // Description: When an ID is swiped on the communicator, the communicator reads the job and checks it against the Owner name, if success, the occupation is added. @@ -229,13 +217,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list() occupation = idcard.assignment to_chat(user, "Occupation updated.") - if(istype(C, /obj/item/weapon/commcard) && !cartridge) - cartridge = C - user.drop_item() - cartridge.forceMove(src) - to_chat(usr, "You slot \the [cartridge] into \the [src].") - modules[++modules.len] = list("module" = "External Device", "icon" = "external64", "number" = EXTRTAB) - SSnanoui.update_uis(src) // update all UIs attached to src return // Proc: attack_self() @@ -358,38 +339,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list() client_huds |= global_hud.whitense client_huds |= global_hud.darkMask -/obj/item/device/communicator/verb/verb_remove_cartridge() - set category = "Object" - set name = "Remove commcard" - set src in usr - - // Can't remove what isn't there - if(!cartridge) - to_chat(usr, "There isn't a commcard to remove!") - return - - // Can't remove if you're physically unable to - if(usr.stat || usr.restrained() || usr.paralysis || usr.stunned || usr.weakened) - to_chat(usr, "You cannot do this while restrained.") - return - - var/turf/T = get_turf(src) - cartridge.loc = T - // If it's in someone, put the cartridge in their hands - if (ismob(loc)) - var/mob/M = loc - M.put_in_hands(cartridge) - // Else just set it on the ground - else - cartridge.loc = get_turf(src) - cartridge = null - // We have to iterate through the modules to find EXTRTAB, because list procs don't play nice with a list of lists - for(var/i = 1, i <= modules.len, i++) - if(modules[i]["number"] == EXTRTAB) - modules.Cut(i, i+1) - break - to_chat(usr, "You remove \the [cartridge] from the [name].") - //It's the 26th century. We should have smart watches by now. /obj/item/device/communicator/watch name = "communicator watch" diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm index ec67686668..eed52620c6 100644 --- a/code/game/objects/items/devices/communicator/helper.dm +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -96,448 +96,3 @@ news.Swap(1, 3) // List is sorted in ascending order of timestamp, we want descending return news - - - -// Putting the commcard data harvesting helpers here -// Not ideal to put all the procs on the base type -// but it may open options for adminbus, -// And it saves duplicated code - - -// Medical records -/obj/item/weapon/commcard/proc/get_med_records() - var/med_records[0] - for(var/datum/data/record/M in sortRecord(data_core.medical)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = M.fields["name"]) - record[++record.len] = list("tab" = "ID", "val" = M.fields["id"]) - record[++record.len] = list("tab" = "Blood Type", "val" = M.fields["b_type"]) - record[++record.len] = list("tab" = "DNA #", "val" = M.fields["b_dna"]) - record[++record.len] = list("tab" = "Gender", "val" = M.fields["id_gender"]) - record[++record.len] = list("tab" = "Entity Classification", "val" = M.fields["brain_type"]) - record[++record.len] = list("tab" = "Minor Disorders", "val" = M.fields["mi_dis"]) - record[++record.len] = list("tab" = "Major Disorders", "val" = M.fields["ma_dis"]) - record[++record.len] = list("tab" = "Allergies", "val" = M.fields["alg"]) - record[++record.len] = list("tab" = "Condition", "val" = M.fields["cdi"]) - record[++record.len] = list("tab" = "Notes", "val" = M.fields["notes"]) - - med_records[++med_records.len] = list("name" = M.fields["name"], "record" = record) - return med_records - - -// Employment records -/obj/item/weapon/commcard/proc/get_emp_records() - var/emp_records[0] - for(var/datum/data/record/G in sortRecord(data_core.general)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = G.fields["name"]) - record[++record.len] = list("tab" = "ID", "val" = G.fields["id"]) - record[++record.len] = list("tab" = "Rank", "val" = G.fields["rank"]) - record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields["fingerprint"]) - record[++record.len] = list("tab" = "Entity Classification", "val" = G.fields["brain_type"]) - record[++record.len] = list("tab" = "Sex", "val" = G.fields["sex"]) - record[++record.len] = list("tab" = "Species", "val" = G.fields["species"]) - record[++record.len] = list("tab" = "Age", "val" = G.fields["age"]) - record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) - - emp_records[++emp_records.len] = list("name" = G.fields["name"], "record" = record) - return emp_records - - -// Security records -/obj/item/weapon/commcard/proc/get_sec_records() - var/sec_records[0] - for(var/datum/data/record/G in sortRecord(data_core.general)) - var/record[0] - record[++record.len] = list("tab" = "Name", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Sex", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Species", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Age", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Rank", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Fingerprint", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Physical Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Mental Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Criminal Status", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Major Crimes", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Minor Crimes", "val" = G.fields[""]) - record[++record.len] = list("tab" = "Notes", "val" = G.fields["notes"]) - - sec_records[++sec_records.len] = list("name" = G.fields["name"], "record" = record) - return sec_records - - -// Status of all secbots -// Weaker than what PDAs appear to do, but as of 7/1/2018 PDA secbot access is nonfunctional -/obj/item/weapon/commcard/proc/get_sec_bot_access() - var/sec_bots[0] - for(var/mob/living/bot/secbot/S in mob_list) - // Get new bot - var/status[0] - status[++status.len] = list("tab" = "Name", "val" = sanitize(S.name)) - - // If it's turned off, then it shouldn't be broadcasting any further info - if(!S.on) - status[++status.len] = list("tab" = "Power", "val" = "Off") // Encoding the span classes here so I don't have to do complicated switches in the ui template - continue - status[++status.len] = list("tab" = "Power", "val" = "On") - - // -- What it's doing - // If it's engaged, then say who it thinks it's engaging - if(S.target) - status[++status.len] = list("tab" = "Status", "val" = "Apprehending Target") - status[++status.len] = list("tab" = "Target", "val" = S.target_name(S.target)) - // Else if it's patrolling - else if(S.will_patrol) - status[++status.len] = list("tab" = "Status", "val" = "Patrolling") - // Otherwise we don't know what it's doing - else - status[++status.len] = list("tab" = "Status", "val" = "Idle") - - // Where it is - status[++status.len] = list("tab" = "Location", "val" = sanitize("[get_area(S.loc)]")) - - // Append bot to the list - sec_bots[++sec_bots.len] = list("bot" = S.name, "status" = status) - return sec_bots - - -// Code and frequency of stored signalers -// Supports multiple signalers within the device -/obj/item/weapon/commcard/proc/get_int_signalers() - var/signalers[0] - for(var/obj/item/device/assembly/signaler/S in internal_devices) - var/unit[0] - unit[++unit.len] = list("tab" = "Code", "val" = S.code) - unit[++unit.len] = list("tab" = "Frequency", "val" = S.frequency) - - signalers[++signalers.len] = list("ref" = "\ref[S]", "status" = unit) - - return signalers - -// Returns list of all powernet sensors currently visible to the commcard -/obj/item/weapon/commcard/proc/find_powernet_sensors() - var/grid_sensors[0] - - // Find all the powernet sensors we need to pull data from - // Copied from /datum/nano_module/power_monitor/proc/refresh_sensors(), - // located in '/code/modules/nano/modules/power_monitor.dm' - // Minor tweaks for efficiency and cleanliness - var/turf/T = get_turf(src) - if(T) - var/list/levels = using_map.get_map_levels(T.z, FALSE) - for(var/obj/machinery/power/sensor/S in machines) - if((S.long_range) || (S.loc.z in levels) || (S.loc.z == T.z)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. - if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! - warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") - else - grid_sensors += S - return grid_sensors - -// List of powernets -/obj/item/weapon/commcard/proc/get_powernet_monitoring_list() - // Fetch power monitor data - var/sensors[0] - - for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) - var/list/focus = S.return_reading_data() - - sensors[++sensors.len] = list( - "name" = S.name_tag, - "alarm" = focus["alarm"] - ) - - return sensors - -// Information about the targeted powernet -/obj/item/weapon/commcard/proc/get_powernet_target(var/target_sensor) - if(!target_sensor) - return - - var/powernet_target[0] - - for(var/obj/machinery/power/sensor/S in internal_data["grid_sensors"]) - var/list/focus = S.return_reading_data() - - // Packages the span class here so it doesn't need to be interpreted w/in the for loop in the ui template - var/load_stat = "Optimal" - if(focus["load_percentage"] >= 95) - load_stat = "DANGER: Overload" - else if(focus["load_percentage"] >= 85) - load_stat = "WARNING: High Load" - - var/alarm_stat = focus["alarm"] ? "WARNING: Abnormal activity detected!" : "Secure" - - if(target_sensor == S.name_tag) - powernet_target = list( - "name" = S.name_tag, - "alarm" = focus["alarm"], - "error" = focus["error"], - "apc_data" = focus["apc_data"], - "status" = list( - list("field" = "Network Load Status", "statval" = load_stat), - list("field" = "Network Security Status", "statval" = alarm_stat), - list("field" = "Load Percentage", "statval" = focus["load_percentage"]), - list("field" = "Available Power", "statval" = focus["total_avail"]), - list("field" = "APC Power Usage", "statval" = focus["total_used_apc"]), - list("field" = "Other Power Usage", "statval" = focus["total_used_other"]), - list("field" = "Total Usage", "statval" = focus["total_used_all"]) - ) - ) - - return powernet_target - -// Compiles the locations of all janitorial paraphernalia, as used by janitorialLocator.tmpl -/obj/item/weapon/commcard/proc/get_janitorial_locations() - // Fetch janitorial locator - var/janidata[0] - var/list/cleaningList = list() - cleaningList += all_mops + all_mopbuckets + all_janitorial_carts - - // User's location - var/turf/userloc = get_turf(src) - if(isturf(userloc)) - janidata[++janidata.len] = list("field" = "Current Location", "val" = "[userloc.x], [userloc.y], [using_map.get_zlevel_name(userloc.z)]") - else - janidata[++janidata.len] = list("field" = "Current Location", "val" = "Unknown") - return janidata // If the user isn't on a valid turf, then it shouldn't be able to find anything anyways - - // Mops, mop buckets, janitorial carts. - for(var/obj/C in cleaningList) - var/turf/T = get_turf(C) - if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) - if(T.z == userloc.z) - janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") - else - janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]") - - // Cleanbots - for(var/mob/living/bot/cleanbot/B in living_mob_list) - var/turf/T = get_turf(B) - if(isturf(T) )//&& T.z in using_map.get_map_levels(userloc, FALSE)) - var/textout = "" - if(B.on) - textout += "Status: Online
" - if(T.z == userloc.z) - textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" - else - textout += "[T.x], [T.y], [using_map.get_zlevel_name(T.z)]" - else - textout += "Status: Offline" - - janidata[++janidata.len] = list("field" = "[B.name]", "val" = textout) - - return janidata - -// Compiles the three lists used by GPS_access.tmpl -// The contents of the three lists are inherently related, so separating them into different procs would be largely redundant -/obj/item/weapon/commcard/proc/get_GPS_lists() - // GPS Access - var/intgps[0] // Gps devices within the commcard -- Allow tag edits, turning on/off, etc - var/extgps[0] // Gps devices not inside the commcard -- Print locations if a gps is on - var/stagps[0] // Gps net status, location, whether it's on, if it's got long range - var/obj/item/device/gps/cumulative = new(src) - cumulative.tracking = FALSE - cumulative.local_mode = TRUE // Won't detect long-range signals automatically - cumulative.long_range = FALSE - var/list/toggled_gps = list() // List of GPS units that are turned off before display_list() is called - - for(var/obj/item/device/gps/G in internal_devices) - var/gpsdata[0] - if(G.tracking && !G.emped) - cumulative.tracking = TRUE // Turn it on - if(G.long_range) - cumulative.long_range = TRUE // It can detect long-range - if(!G.local_mode) - cumulative.local_mode = FALSE // It is detecting long-range - - gpsdata["ref"] = "\ref[G]" - gpsdata["tag"] = G.gps_tag - gpsdata["power"] = G.tracking - gpsdata["local_mode"] = G.local_mode - gpsdata["long_range"] = G.long_range - gpsdata["hide_signal"] = G.hide_signal - gpsdata["can_hide"] = G.can_hide_signal - - intgps[++intgps.len] = gpsdata // Add it to the list - - if(G.tracking) - G.tracking = FALSE // Disable the internal gps units so they don't show up in the report - toggled_gps += G - - var/list/remote_gps = cumulative.display_list() // Fetch information for all units except the ones inside of this device - - for(var/obj/item/device/gps/G in toggled_gps) // Reenable any internal GPS units - G.tracking = TRUE - - stagps["enabled"] = cumulative.tracking - stagps["long_range_en"] = (cumulative.long_range && !cumulative.local_mode) - - stagps["my_area_name"] = remote_gps["my_area_name"] - stagps["curr_x"] = remote_gps["curr_x"] - stagps["curr_y"] = remote_gps["curr_y"] - stagps["curr_z"] = remote_gps["curr_z"] - stagps["curr_z_name"] = remote_gps["curr_z_name"] - - extgps = remote_gps["gps_list"] // Compiled by the GPS - - qdel(cumulative) // Don't want spare GPS units building up in the contents - - return list( - intgps, - extgps, - stagps - ) - -// Collects the current status of the supply shuttle -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 55 -/obj/item/weapon/commcard/proc/get_supply_shuttle_status() - var/shuttle_status[0] - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if(shuttle) - if(shuttle.has_arrive_time()) - shuttle_status["location"] = "In transit" - shuttle_status["mode"] = SUP_SHUTTLE_TRANSIT - shuttle_status["time"] = shuttle.eta_minutes() - - else - shuttle_status["time"] = 0 - if(shuttle.at_station()) - if(shuttle.shuttle_docking_controller) - switch(shuttle.shuttle_docking_controller.get_docking_status()) - if("docked") - shuttle_status["location"] = "Docked" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKED - if("undocked") - shuttle_status["location"] = "Undocked" - shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKED - if("docking") - shuttle_status["location"] = "Docking" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKING - shuttle_status["force"] = shuttle.can_force() - if("undocking") - shuttle_status["location"] = "Undocking" - shuttle_status["mode"] = SUP_SHUTTLE_UNDOCKING - shuttle_status["force"] = shuttle.can_force() - - else - shuttle_status["location"] = "Station" - shuttle_status["mode"] = SUP_SHUTTLE_DOCKED - - else - shuttle_status["location"] = "Away" - shuttle_status["mode"] = SUP_SHUTTLE_AWAY - - if(shuttle.can_launch()) - shuttle_status["launch"] = 1 - else if(shuttle.can_cancel()) - shuttle_status["launch"] = 2 - else - shuttle_status["launch"] = 0 - - switch(shuttle.moving_status) - if(SHUTTLE_IDLE) - shuttle_status["engine"] = "Idle" - if(SHUTTLE_WARMUP) - shuttle_status["engine"] = "Warming up" - if(SHUTTLE_INTRANSIT) - shuttle_status["engine"] = "Engaged" - - else - shuttle["mode"] = SUP_SHUTTLE_ERROR - - return shuttle_status - -// Compiles the list of supply orders -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 130 -/obj/item/weapon/commcard/proc/get_supply_orders() - var/orders[0] - for(var/datum/supply_order/S in SSsupply.order_history) - orders[++orders.len] = list( - "ref" = "\ref[S]", - "status" = S.status, - "entries" = list( - list("field" = "Supply Pack", "entry" = S.name), - list("field" = "Cost", "entry" = S.cost), - list("field" = "Index", "entry" = S.index), - list("field" = "Reason", "entry" = S.comment), - list("field" = "Ordered by", "entry" = S.ordered_by), - list("field" = "Ordered at", "entry" = S.ordered_at), - list("field" = "Approved by", "entry" = S.approved_by), - list("field" = "Approved at", "entry" = S.approved_at) - ) - ) - - return orders - -// Compiles the list of supply export receipts -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 147 -/obj/item/weapon/commcard/proc/get_supply_receipts() - var/receipts[0] - for(var/datum/exported_crate/E in SSsupply.exported_crates) - receipts[++receipts.len] = list( - "ref" = "\ref[E]", - "contents" = E.contents, - "error" = E.contents["error"], - "title" = list( - list("field" = "Name", "entry" = E.name), - list("field" = "Value", "entry" = E.value) - ) - ) - return receipts - - -// Compiles the list of supply packs for the category currently stored in internal_data["supply_category"] -// Copied from /obj/machinery/computer/supplycomp/ui_interact(), -// code\game\machinery\computer\supply.dm, starting at line 147 -/obj/item/weapon/commcard/proc/get_supply_pack_list() - var/supply_packs[0] - for(var/pack_name in SSsupply.supply_pack) - var/datum/supply_pack/P = SSsupply.supply_pack[pack_name] - if(P.group == internal_data["supply_category"]) - var/list/pack = list( - "name" = P.name, - "cost" = P.cost, - "contraband" = P.contraband, - "manifest" = uniquelist(P.manifest), - "random" = P.num_contained, - "expand" = 0, - "ref" = "\ref[P]" - ) - - if(P in internal_data["supply_pack_expanded"]) - pack["expand"] = 1 - - supply_packs[++supply_packs.len] = pack - - return supply_packs - - -// Compiles miscellaneous data and permissions used by the supply template -/obj/item/weapon/commcard/proc/get_misc_supply_data() - return list( - "shuttle_auth" = (internal_data["supply_controls"] & SUP_SEND_SHUTTLE), - "order_auth" = (internal_data["supply_controls"] & SUP_ACCEPT_ORDERS), - "supply_points" = SSsupply.points, - "supply_categories" = all_supply_groups - ) - -/obj/item/weapon/commcard/proc/get_status_display() - return list( - "line1" = internal_data["stat_display_line1"], - "line2" = internal_data["stat_display_line2"], - "active_line1" = internal_data["stat_display_active1"], - "active_line2" = internal_data["stat_display_active2"], - "active" = internal_data["stat_display_special"] - ) - -/obj/item/weapon/commcard/proc/find_blast_doors() - var/target_doors[0] - for(var/obj/machinery/door/blast/B in machines) - if(B.id == internal_data["shuttle_door_code"]) - target_doors += B - - return target_doors \ No newline at end of file diff --git a/nano/templates/comm_power_monitor.tmpl b/nano/templates/comm_power_monitor.tmpl deleted file mode 100644 index ffcd70ff2a..0000000000 --- a/nano/templates/comm_power_monitor.tmpl +++ /dev/null @@ -1,76 +0,0 @@ -

Powernet Monitoring

- -{{if data.currentTab == 0}} - - - -
- {{:helper.link('Scan For Sensors', 'refresh', {'cartridge_topic' : 1, 'powernet_refresh' : 1})}} No active sensor. Printing sensor list. -
-
- - {{for data.powernet_monitoring}} - - {{empty}} - WARNING: No Sensors Detected! - {{/for}} -
- {{if value.alarm}} - {{:helper.link(value.name, 'alert', {'switch_tab' : value.name, 'powernet_target' : value.name})}} - {{else}} - {{:helper.link(value.name, '' , {'switch_tab' : value.name, 'cartridge_topic' : 1, 'powernet_target' : value.name})}} - {{/if}} -
-{{else}} - - - -
- {{:helper.link('Show List', 'cancel', { 'switch_tab' : 0})}} Sensor selected: {{:data.currentTab}} -
- {{if data.powernet_target.error}} - {{:data.powernet_target.error}} - {{else}} - -

Network Information

- {{for data.powernet_target.status :nodeValue:nodeIndex}} -
-
{{:nodeValue.field}}
-
{{:nodeValue.statval}}
-
- {{/for}} - - -

Sensor Readings

- - - - - - - - - - {{for data.powernet_target.apc_data :apcValue:apcIndex}} - - - - - - - - - {{empty}} - - {{/for}} -
APC NameEquipmentLightingEnvironmentCell StatusAPC Load
{{:apcValue.name}}{{:apcValue.s_equipment}}{{:apcValue.s_lighting}}{{:apcValue.s_environment}} - {{if apcValue.cell_status == "N"}} - {{:helper.link(apcValue.cell_charge + '%', 'batt_disc', null,'disabled', 'width75btn')}} - {{else apcValue.cell_status == "C"}} - {{:helper.link(apcValue.cell_charge + '%', 'batt_chrg', null,'disabled', 'width75btn')}} - {{else}} - {{:helper.link(apcValue.cell_charge + '%', 'batt_full', null,'disabled', 'width75btn')}} - {{/if}} - {{:apcValue.total_load}}
No APCs detected in connected powernet.
- {{/if}} -{{/if}} diff --git a/nano/templates/emp_records.tmpl b/nano/templates/emp_records.tmpl deleted file mode 100644 index 16b5159039..0000000000 --- a/nano/templates/emp_records.tmpl +++ /dev/null @@ -1,23 +0,0 @@ -

Employment Records

-{{if data.currentTab == "0"}} -
- {{for data.emp_records}} -
- {{:helper.link(value.name, '', {"switch_tab" : value.name})}} -
- {{/for}} -
-{{/if}} -{{for data.emp_records}} - {{if value.name == data.currentTab}} -
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

-
- {{for value.record :itemValue:itemIndex}} -
-
{{:itemValue.tab}}
-
{{:itemValue.val}}
-
- {{/for}} -
- {{/if}} -{{/for}} \ No newline at end of file diff --git a/nano/templates/gps_access.tmpl b/nano/templates/gps_access.tmpl deleted file mode 100644 index 21b61b767a..0000000000 --- a/nano/templates/gps_access.tmpl +++ /dev/null @@ -1,66 +0,0 @@ -

Integrated GPS

- - -{{if data.gps_status.enabled}} -
- Area: {{:data.gps_status.my_area_name}}, {{:data.gps_status.curr_z_name}}
- GPS Coordinates: ({{:data.gps_status.curr_x}}, {{:data.gps_status.curr_y}}) -
-{{else}} -
- Error: Location data unavailable. No sensors online! -
-{{/if}} - - -
- {{for data.gps_access}} -
-
- {{:index}}: {{:value.tag}} -
-
- {{:helper.link('On', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Power", 'value' : "1"}, value.power ? 'selected' : null)}} - {{:helper.link('Off', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Power", 'value' : "0"}, value.power ? null : 'selected')}} - {{:helper.link('Edit Tag', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Tag", 'user' : data.user})}} - {{if value.power}} - {{if value.long_range}} -
- - {{:helper.string("Long range scanning is {0}.", value.local_mode ? "disabled" : "active")}} - {{:helper.link('Enable', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Long_Range", 'value' : "0"}, value.long_range_en ? 'selected' : null)}} - {{:helper.link('Disable', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Long_Range", 'value' : "1"}, value.long_range_en ? null : 'selected')}} - {{/if}} - {{if value.can_hide}} -
- {{:helper.string("{0}", value.hide_signal ? "Broadcasting location" : "Receiving only ")}} - {{:helper.link('Broadcast', 'power', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Hide_Signal", 'value' : "1"}, value.hide_signal ? 'selected' : null)}} - {{:helper.link('Receive', 'stop', {'cartridge_topic' : "1", 'gps_target' : value.ref, 'gps_action' : "Hide_Signal", 'value' : "0"}, value.hide_signal ? null : 'selected')}} - {{/if}} - {{/if}} -
-
- {{empty}} - {{/for}} -
- - -{{if data.gps_status.enabled}} -
- {{for data.gps_signal}} -
-
- {{:value.gps_tag}} -
-
- Coordinates: ({{:value.x}}, {{:value.y}}) -
- Area: {{:value.area_name}}, {{:value.z_name}} - {{if value.local}} - {{:helper.string("Distance: {0}m {1} - {2}m {3}, {4}m {5}", value.distance < 0 ? 0 : value.distance, value.direction, helper.abs(value.distY), ((value.distY > 0) ? "N" : "S"), helper.abs(value.distX), ((value.distX > 0) ? "E" : "W"))}} - {{/if}} -
-
- {{/for}} -
-{{/if}} \ No newline at end of file diff --git a/nano/templates/janitorialLocator.tmpl b/nano/templates/janitorialLocator.tmpl deleted file mode 100644 index d476b7def4..0000000000 --- a/nano/templates/janitorialLocator.tmpl +++ /dev/null @@ -1,11 +0,0 @@ -

Janitorial Supply Locator

-{{for data.janidata}} -
-
- {{:value.field}} -
-
- {{:value.val}} -
-
-{{/for}} \ No newline at end of file diff --git a/nano/templates/med_records.tmpl b/nano/templates/med_records.tmpl deleted file mode 100644 index f24339a779..0000000000 --- a/nano/templates/med_records.tmpl +++ /dev/null @@ -1,23 +0,0 @@ -

Medical Records

-{{if data.currentTab == "0"}} -
- {{for data.med_records}} -
- {{:helper.link(value.name, '', {"switch_tab" : value.name})}} -
- {{/for}} -
-{{/if}} -{{for data.med_records}} - {{if value.name == data.currentTab}} -
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

-
- {{for value.record :itemValue:itemIndex}} -
-
{{:itemValue.tab}}
-
{{:itemValue.val}}
-
- {{/for}} -
- {{/if}} -{{/for}} \ No newline at end of file diff --git a/nano/templates/merc_blast_door_control.tmpl b/nano/templates/merc_blast_door_control.tmpl deleted file mode 100644 index ec323ce081..0000000000 --- a/nano/templates/merc_blast_door_control.tmpl +++ /dev/null @@ -1,23 +0,0 @@ -

Shuttle Blast Door Control

- -
- {{:helper.link('Open all doors', 'radio-on', {'cartridge_topic' : 1, 'all_blast_doors' : "open"})}} - {{:helper.link('Close all doors', 'radio-off', {'cartridge_topic' : 1, 'all_blast_doors' : "close"})}} -
-
- {{:helper.link('Scan for doors', 'refresh', {'cartridge_topic' : 1, 'scan_blast_doors' : 1})}} -
- -{{for data.blast_door}} -
-
- {{:value.name}} #{{:index}} -
-
- {{:helper.link('On', 'radio-on', {'cartridge_topic' : 1, 'toggle_blast_door' : value.ref}, value.open ? 'selected' : null)}} - {{:helper.link('Off', 'radio-off', {'cartridge_topic' : 1, 'toggle_blast_door' : value.ref}, value.open ? null : 'selected')}} -
-
-{{empty}} -

No doors detected!

-{{/for}} \ No newline at end of file diff --git a/nano/templates/sec_bot_access.tmpl b/nano/templates/sec_bot_access.tmpl deleted file mode 100644 index 49214cb97f..0000000000 --- a/nano/templates/sec_bot_access.tmpl +++ /dev/null @@ -1,36 +0,0 @@ -

Security Bot Control

- -{{if data.currentTab == 0}} - - -
- Select A Bot. -
-
- {{for data.sec_bot_access}} -
- {{:helper.link(value.bot, 'gear', {'switch_tab' : value.bot})}} -
- {{empty}} -

No bots found.

- {{/for}} -
- -{{else}} - - - {{for data.sec_bot_access}} - {{if value.bot == data.currentTab}} - {{for value.status :statVal:statIndex}} -
-
- {{:statVal.tab}} -
-
- {{:statVal.val}} -
-
- {{/for}} - {{/if}} - {{/for}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/sec_records.tmpl b/nano/templates/sec_records.tmpl deleted file mode 100644 index f644289061..0000000000 --- a/nano/templates/sec_records.tmpl +++ /dev/null @@ -1,23 +0,0 @@ -

Security Records

-{{if data.currentTab == "0"}} -
- {{for data.sec_records}} -
- {{:helper.link(value.name, '', {"switch_tab" : value.name})}} -
- {{/for}} -
-{{/if}} -{{for data.sec_records}} - {{if value.name == data.currentTab}} -
{{:helper.link('Back', 'icon-triangle-1-w', {'switch_tab' : 0})}}

-
- {{for value.record :itemValue:itemIndex}} -
-
{{:itemValue.tab}}
-
{{:itemValue.val}}
-
- {{/for}} -
- {{/if}} -{{/for}} \ No newline at end of file diff --git a/nano/templates/signaler_access.tmpl b/nano/templates/signaler_access.tmpl deleted file mode 100644 index 86220f07cb..0000000000 --- a/nano/templates/signaler_access.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -

Signaler Control

- - -{{for data.signaler_access}} -
-
- {{:index}} -
-
- {{:helper.link('Pulse', 'arrowstop-1-n', {'cartridge_topic' : "1", 'signaler_target' : value.ref, 'signaler_action' : "Pulse"})}} -
-
- {{for value.status :statVal:statIndex}} -
-
- {{:statVal.tab}} -
-
-
{{:statVal.val}}
-
{{:helper.link('Edit', 'gear', {'cartridge_topic' : "1", 'signaler_target' : value.ref, 'signaler_action' : "Edit", 'signaler_value' : statVal.tab, 'user' : data.user})}}
-
-
- {{/for}} -{{/for}} \ No newline at end of file diff --git a/nano/templates/stat_display_access.tmpl b/nano/templates/stat_display_access.tmpl deleted file mode 100644 index 20655bb709..0000000000 --- a/nano/templates/stat_display_access.tmpl +++ /dev/null @@ -1,57 +0,0 @@ -

Station Status Display Interlink

- -
-
- Code -
-
- {{:helper.link('Clear Message', 'trash', {'cartridge_topic' : "1", 'stat_display' : "blank"}, (data.stat_display.active == "blank") ? 'selected' : null)}} - {{:helper.link('Clear Alert', 'alert', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "default"}, (data.stat_display.active == "default") ? 'selected' : null)}} -
-
-
-
- Message -
-
- {{:helper.link('Shuttle ETA', 'gear', {'cartridge_topic' : "1", 'stat_display' : "shuttle"}, (data.stat_display.active == "shuttle") ? 'selected' : null)}} - {{:helper.link('Set Message', 'gear', {'cartridge_topic' : "1", 'stat_display' : "message"}, (data.stat_display.active == "message") ? 'selected' : null)}} -
-
-
-
- Alert -
-
- {{:helper.link('Red Alert', 'alert', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "redalert"}, (data.stat_display.active == "redalert") ? 'selected' : null)}} - {{:helper.link('Lockdown', 'caution', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "lockdown"}, (data.stat_display.active == "lockdown") ? 'selected' : null)}} - {{:helper.link('Biohazard', 'radiation', {'cartridge_topic' : "1", 'choice' : "Status", 'stat_display' : "alert", 'alert' : "biohazard"}, (data.stat_display.active == "biohazard") ? 'selected' : null)}} -
-
-{{if data.stat_display.line1 != data.stat_display.active_line1 || data.stat_display.line2 != data.stat_display.active_line2}} -
-
- Active Message: -
-
- {{:data.stat_display.active_line1}}
- {{:data.stat_display.active_line2}} -
-
-{{/if}} -
-
- Stored line 1 -
-
- {{:helper.link(data.stat_display.line1 + ' (set)', 'pencil', {'cartridge_topic' : "1", 'stat_display' : "setmsg", 'line' : "1"}, null, null)}} -
-
-
-
- Stored line 2 -
-
- {{:helper.link(data.stat_display.line2 + ' (set)', 'pencil', {'cartridge_topic' : "1", 'stat_display' : "setmsg", 'line' : "2"}, null, null)}} -
-
diff --git a/polaris.dme b/polaris.dme index 99442d4de8..ca7c6e04b5 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1002,7 +1002,6 @@ #include "code\game\objects\items\devices\uplink_random_lists.dm" #include "code\game\objects\items\devices\violin.dm" #include "code\game\objects\items\devices\whistle.dm" -#include "code\game\objects\items\devices\communicator\cartridge.dm" #include "code\game\objects\items\devices\communicator\communicator.dm" #include "code\game\objects\items\devices\communicator\helper.dm" #include "code\game\objects\items\devices\communicator\integrated.dm"