mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
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.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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("<span class='warning'>[src] flashes, \"[internal_data["supply_reqtime"] - world.time] seconds remaining until another requisition form may be printed.\"</span>")
|
||||
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, "<span class='warning'>Error. Request timed out.</span>")
|
||||
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, "<span class='warning'>For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.</span>")
|
||||
else
|
||||
SSsupply.shuttle.launch(src)
|
||||
to_chat(usr, "<span class='notice'>Initiating launch sequence.</span>")
|
||||
|
||||
if("send_to_station")
|
||||
SSsupply.shuttle.launch(src)
|
||||
to_chat(usr, "<span class='notice'>The supply shuttle has been called and will arrive in approximately [round(SSsupply.movetime/600,1)] minutes.</span>")
|
||||
|
||||
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])
|
||||
)
|
||||
@@ -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, "<span class='notice'>Occupation updated.</span>")
|
||||
|
||||
if(istype(C, /obj/item/weapon/commcard) && !cartridge)
|
||||
cartridge = C
|
||||
user.drop_item()
|
||||
cartridge.forceMove(src)
|
||||
to_chat(usr, "<span class='notice'>You slot \the [cartridge] into \the [src].</span>")
|
||||
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, "<span class='notice'>There isn't a commcard to remove!</span>")
|
||||
return
|
||||
|
||||
// Can't remove if you're physically unable to
|
||||
if(usr.stat || usr.restrained() || usr.paralysis || usr.stunned || usr.weakened)
|
||||
to_chat(usr, "<span class='notice'>You cannot do this while restrained.</span>")
|
||||
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, "<span class='notice'>You remove \the [cartridge] from the [name].</span>")
|
||||
|
||||
//It's the 26th century. We should have smart watches by now.
|
||||
/obj/item/device/communicator/watch
|
||||
name = "communicator watch"
|
||||
|
||||
@@ -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" = "<span class='bad'>Off</span>") // 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" = "<span class='good'>On</span>")
|
||||
|
||||
// -- 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" = "<span class='bad'>Apprehending Target</span>")
|
||||
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" = "<span class='good'>Patrolling</span>")
|
||||
// Otherwise we don't know what it's doing
|
||||
else
|
||||
status[++status.len] = list("tab" = "Status", "val" = "<span class='average'>Idle</span>")
|
||||
|
||||
// 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 = "<span class='good'>Optimal</span>"
|
||||
if(focus["load_percentage"] >= 95)
|
||||
load_stat = "<span class='bad'>DANGER: Overload</span>"
|
||||
else if(focus["load_percentage"] >= 85)
|
||||
load_stat = "<span class='average'>WARNING: High Load</span>"
|
||||
|
||||
var/alarm_stat = focus["alarm"] ? "<span class='bad'>WARNING: Abnormal activity detected!</span>" : "<span class='good'>Secure</span>"
|
||||
|
||||
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" = "<span class='good'>[userloc.x], [userloc.y], [using_map.get_zlevel_name(userloc.z)]</span>")
|
||||
else
|
||||
janidata[++janidata.len] = list("field" = "Current Location", "val" = "<span class='bad'>Unknown</span>")
|
||||
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" = "<span class='good'>[T.x], [T.y], [using_map.get_zlevel_name(T.z)]</span>")
|
||||
else
|
||||
janidata[++janidata.len] = list("field" = apply_text_macros("\proper [C.name]"), "val" = "<span class='average'>[T.x], [T.y], [using_map.get_zlevel_name(T.z)]</span>")
|
||||
|
||||
// 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: <span class='good'>Online</span><br>"
|
||||
if(T.z == userloc.z)
|
||||
textout += "<span class='good'>[T.x], [T.y], [using_map.get_zlevel_name(T.z)]</span>"
|
||||
else
|
||||
textout += "<span class='average'>[T.x], [T.y], [using_map.get_zlevel_name(T.z)]</span>"
|
||||
else
|
||||
textout += "Status: <span class='bad'>Offline</span>"
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user