From 5ce360c2286d1e93e9499e6f4b70a66732920e90 Mon Sep 17 00:00:00 2001 From: Testmerge Worker Date: Sun, 8 Dec 2024 20:56:19 +0000 Subject: [PATCH] add: request console cart in pda[bounty] (#5990) [testmerge][e30bdc5] --- _maps/map_files/Delta/delta.dmm | 23 +- _maps/map_files/celestation/celestation.dmm | 81 +++- _maps/map_files/cerestation/cerestation.dmm | 58 ++- _maps/map_files/cyberiad/cyberiad.dmm | 39 +- _maps/map_files/event/Station/delta_old.dmm | 191 +++++---- .../map_files/event/Station/towerstation.dmm | 371 ++++++++++-------- _maps/map_files/nova/nova.dmm | 2 +- code/__DEFINES/machines.dm | 1 + code/__DEFINES/request_consoles.dm | 91 +++++ code/datums/outfits/outfit_security_clown.dm | 1 + code/game/machinery/requests_console.dm | 111 +++--- code/modules/mining/machine_redemption.dm | 28 +- code/modules/pda/PDA.dm | 40 +- code/modules/pda/app.dm | 8 + code/modules/pda/cart.dm | 18 + code/modules/pda/pda_tgui.dm | 21 + code/modules/pda/pdas.dm | 30 ++ code/modules/pda/request_consoles_app.dm | 298 ++++++++++++++ code/modules/pda/request_consoles_cart.dm | 130 ++++++ code/modules/research/message_server.dm | 7 +- icons/obj/pda.dmi | Bin 20766 -> 20964 bytes paradise.dme | 3 + tgui/packages/tgui/interfaces/PDA.js | 20 +- .../tgui/interfaces/RequestConsole.js | 58 +-- .../interfaces/pda/pda_request_console.js | 49 +++ tgui/public/tgui.bundle.js | 128 +++--- 26 files changed, 1361 insertions(+), 446 deletions(-) create mode 100644 code/__DEFINES/request_consoles.dm create mode 100644 code/modules/pda/request_consoles_app.dm create mode 100644 code/modules/pda/request_consoles_cart.dm create mode 100644 tgui/packages/tgui/interfaces/pda/pda_request_console.js diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index e1b88a5d516..f3842e5616d 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -20742,6 +20742,14 @@ /area/atmos) "crr" = ( /obj/machinery/suit_storage_unit/blueshield, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Blueshield"; + departmentType = 5; + name = "Blueshield Requests Console"; + pixel_x = -30; + pixel_y = 4 + }, /turf/simulated/floor/wood/fancy/light, /area/blueshield) "crv" = ( @@ -28149,6 +28157,12 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -28 }, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteyellow" @@ -62111,7 +62125,7 @@ pixel_y = 3 }, /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; name = "Research Request Console"; pixel_x = 30 @@ -112894,6 +112908,13 @@ /obj/structure/table/glass, /obj/item/reagent_containers/applicator/burn, /obj/item/reagent_containers/glass/bottle/charcoal, +/obj/machinery/requests_console{ + department = "Genetics"; + departmentType = 1; + name = "Genetics Requests Console"; + pixel_x = -2; + pixel_y = 25 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" diff --git a/_maps/map_files/celestation/celestation.dmm b/_maps/map_files/celestation/celestation.dmm index 1372e974525..e94672ed5a5 100644 --- a/_maps/map_files/celestation/celestation.dmm +++ b/_maps/map_files/celestation/celestation.dmm @@ -17789,6 +17789,12 @@ /obj/effect/turf_decal/loading_area{ dir = 4 }, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "red" @@ -23641,8 +23647,8 @@ /area/toxins/test_area) "dfl" = ( /obj/machinery/requests_console{ - department = "Tool Storage"; - name = "Tool Storage Requests Console"; + department = "Primary Tool Storage"; + name = "Primary Tool Storage Requests Console"; pixel_y = 30 }, /obj/structure/table, @@ -28278,6 +28284,17 @@ icon_state = "whitegreen" }, /area/medical/virology/lab) +"dWR" = ( +/obj/structure/closet/l3closet/janitor, +/obj/item/reagent_containers/spray/cleaner/janitor, +/obj/machinery/requests_console{ + department = "Janitorial"; + departmentType = 1; + name = "Janitor Requests Console"; + pixel_x = -30 + }, +/turf/simulated/floor/plasteel, +/area/janitor) "dWS" = ( /obj/structure/railing{ dir = 8 @@ -44319,6 +44336,12 @@ pixel_x = 7; req_access = list(2) }, +/obj/machinery/requests_console{ + department = "Warden"; + departmentType = 7; + name = "Warden's Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -51895,6 +51918,11 @@ /turf/simulated/floor/plasteel/dark, /area/toxins/server) "iAb" = ( +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Locker Room Requests Console"; + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -52293,9 +52321,9 @@ /area/security/prisonlockers) "iEd" = ( /obj/structure/sign/beautyplaque{ - pixel_y = 32; + desc = "Важное Уточнение! Рабочие пожелали оставаться анонимными, поэтому, обойдёмся их прозвищами. За выдающиеся успехи в области инженерного менеджмента, а также успешное проектирование Селестии по всем стандартам НаноТрейзен. Благодарим вас за труд, Saad_f603. Слава НаноТрейзен!"; name = "Благодарственное Письмо Для Бригадира Команды Архитекторов Селестии"; - desc = "Важное Уточнение! Рабочие пожелали оставаться анонимными, поэтому, обойдёмся их прозвищами. За выдающиеся успехи в области инженерного менеджмента, а также успешное проектирование Селестии по всем стандартам НаноТрейзен. Благодарим вас за труд, Saad_f603. Слава НаноТрейзен!" + pixel_y = 32 }, /turf/simulated/floor/carpet/black, /area/bridge) @@ -53224,9 +53252,9 @@ /area/crew_quarters/bar) "iNt" = ( /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; - name = "Science Requests Console"; + name = "Research Requests Console"; pixel_x = -30 }, /obj/machinery/photocopier, @@ -62896,6 +62924,12 @@ }, /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/mint, +/obj/machinery/requests_console{ + department = "Kitchen"; + departmentType = 2; + name = "Kitchen Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -65530,6 +65564,12 @@ /obj/machinery/light_switch{ pixel_x = 26 }, +/obj/machinery/requests_console{ + department = "Science"; + departmentType = 2; + name = "Science Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel, /area/toxins/launch) "lgJ" = ( @@ -69709,7 +69749,7 @@ /obj/item/reagent_containers/applicator/burn, /obj/item/reagent_containers/glass/bottle/charcoal, /obj/machinery/requests_console{ - department = "Medbay"; + department = "Genetics"; departmentType = 1; name = "Genetics Requests Console"; pixel_y = 30 @@ -70705,6 +70745,12 @@ /obj/machinery/atmospherics/pipe/multiz{ dir = 4 }, +/obj/machinery/requests_console{ + department = "Chapel"; + departmentType = 2; + name = "Chapel Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/carpet/black, /area/chapel/office) "miQ" = ( @@ -71260,6 +71306,12 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, +/obj/machinery/requests_console{ + department = "Engineering"; + departmentType = 3; + name = "Engineering Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkyellow" @@ -82678,6 +82730,12 @@ /area/space) "oDP" = ( /obj/structure/closet/secure_closet/security, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -118780,6 +118838,7 @@ /area/hallway/primary/fore) "vyB" = ( /obj/machinery/requests_console{ + department = "Detective"; name = "Detective Requests Console"; pixel_y = -30 }, @@ -129310,6 +129369,12 @@ dir = 8 }, /obj/effect/landmark/start/atmospheric, +/obj/machinery/requests_console{ + department = "Atmospherics"; + departmentType = 3; + name = "Atmospherics Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -275635,7 +275700,7 @@ oqZ aeM aeM wMM -kLd +dWR tTe jHd duy diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index 9e55a1207db..dd37d32655f 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -20248,6 +20248,12 @@ /obj/machinery/computer/guestpass{ pixel_y = -28 }, +/obj/machinery/requests_console{ + department = "Warden"; + departmentType = 7; + name = "Warden's Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkred" @@ -25453,6 +25459,12 @@ dir = 1; network = list("Medical","SS13") }, +/obj/machinery/requests_console{ + department = "Virology"; + departmentType = 3; + name = "Virology Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, @@ -30446,8 +30458,8 @@ /area/maintenance/port) "eLR" = ( /obj/machinery/requests_console{ - department = "Tool Storage"; - name = "Tool Storage Requests Console"; + department = "Primary Tool Storage"; + name = "Primary Tool Storage Requests Console"; pixel_y = 30 }, /obj/structure/disposalpipe/segment{ @@ -62776,6 +62788,12 @@ /area/security/detectives_office) "obz" = ( /obj/machinery/cooker/deepfryer, +/obj/machinery/requests_console{ + department = "Kitchen"; + departmentType = 2; + name = "Kitchen Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -62825,6 +62843,12 @@ dir = 5 }, /obj/item/twohanded/required/kirbyplants, +/obj/machinery/requests_console{ + department = "Chapel"; + departmentType = 2; + name = "Chapel Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/carpet/black, /area/chapel/office) "ocC" = ( @@ -64585,6 +64609,12 @@ /area/maintenance/atmospherics) "oDP" = ( /obj/structure/closet/secure_closet/security, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -64833,7 +64863,7 @@ /area/crew_quarters/bar) "oHw" = ( /obj/machinery/requests_console{ - department = "Medbay"; + department = "Genetics"; departmentType = 1; name = "Genetics Requests Console"; pixel_y = 30 @@ -78330,9 +78360,9 @@ /area/medical/cmo) "sxu" = ( /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; - name = "Science Requests Console"; + name = "Research Requests Console"; pixel_x = -30 }, /obj/machinery/r_n_d/destructive_analyzer, @@ -82324,6 +82354,12 @@ /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, +/obj/machinery/requests_console{ + department = "Engineering"; + departmentType = 3; + name = "Engineering Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84394,6 +84430,11 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "umA" = ( +/obj/machinery/requests_console{ + department = "Locker Room"; + name = "Locker Room Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "neutral" }, @@ -88231,6 +88272,7 @@ /area/hallway/primary/port/north) "vyB" = ( /obj/machinery/requests_console{ + department = "Detective"; name = "Detective Requests Console"; pixel_y = -30 }, @@ -96782,6 +96824,12 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/machinery/requests_console{ + department = "Science"; + departmentType = 2; + name = "Science Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel, /area/toxins/launch) "xTW" = ( diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 85289102a09..a491f53623d 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -14430,8 +14430,8 @@ c_tag = "Primary Tool Storage" }, /obj/machinery/requests_console{ - department = "Tool Storage"; - name = "Tool Storage Requests Console"; + department = "Primary Tool Storage"; + name = "Primary Tool Storage Requests Console"; pixel_y = 30 }, /obj/item/assembly/igniter{ @@ -24303,6 +24303,7 @@ pictures_left = 30 }, /obj/machinery/requests_console{ + department = "Detective"; name = "Detective Requests Console"; pixel_y = -30 }, @@ -32656,6 +32657,12 @@ dir = 4 }, /obj/effect/landmark/start/geneticist, +/obj/machinery/requests_console{ + department = "Genetics"; + departmentType = 1; + name = "Genetics Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whitepurple" @@ -44031,6 +44038,12 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/requests_console{ + department = "Chapel"; + departmentType = 2; + name = "Chapel Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/carpet/black, /area/chapel/office) "cIb" = ( @@ -45587,12 +45600,6 @@ /turf/simulated/floor/engine, /area/toxins/xenobiology) "cMl" = ( -/obj/machinery/requests_console{ - department = "Science"; - departmentType = 2; - name = "Science Requests Console"; - pixel_y = 30 - }, /obj/machinery/camera{ c_tag = "Xenobiology Module North"; network = list("Research","SS13") @@ -45600,6 +45607,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/requests_console{ + department = "Xenobiology"; + departmentType = 2; + name = "Xenobiology Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -65781,6 +65794,12 @@ "jRJ" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry Requests Console"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteyellow" @@ -70692,9 +70711,9 @@ /area/assembly/robotics) "nfM" = ( /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; - name = "Science Requests Console"; + name = "Research Requests Console"; pixel_x = -30 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files/event/Station/delta_old.dmm b/_maps/map_files/event/Station/delta_old.dmm index 1135d1e919e..3774c5368a8 100644 --- a/_maps/map_files/event/Station/delta_old.dmm +++ b/_maps/map_files/event/Station/delta_old.dmm @@ -3399,8 +3399,8 @@ name = "3maintenance loot spawner" }, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 1 + dir = 1; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/delivery) @@ -4063,8 +4063,8 @@ /area/maintenance/casino) "aKF" = ( /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 1 + dir = 1; + id = "QMLoad2" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -5256,8 +5256,8 @@ }, /obj/structure/window/reinforced, /obj/machinery/conveyor{ - id = "garbage"; - dir = 9 + dir = 9; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -6813,8 +6813,8 @@ }, /obj/structure/disposalpipe/trunk, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -9083,8 +9083,8 @@ name = "2maintenance loot spawner" }, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -9374,8 +9374,8 @@ /area/quartermaster/storage) "bta" = ( /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 9 + dir = 9; + id = "QMLoad2" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -11555,8 +11555,8 @@ dir = 4 }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 8 + dir = 8; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -13191,8 +13191,8 @@ dir = 8 }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 5 + dir = 5; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -13205,8 +13205,8 @@ "bKK" = ( /obj/machinery/recycler, /obj/machinery/conveyor{ - id = "garbage"; - dir = 4 + dir = 4; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -14016,6 +14016,13 @@ /obj/machinery/computer/guestpass{ pixel_x = 30 }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "brown" @@ -17363,8 +17370,8 @@ /obj/effect/decal/warning_stripes/east, /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -17373,8 +17380,8 @@ dir = 4 }, /obj/machinery/conveyor/inverted{ - id = "QMLoad2"; - dir = 6 + dir = 6; + id = "QMLoad2" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -18907,8 +18914,8 @@ "clQ" = ( /obj/structure/plasticflaps/mining, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -19979,8 +19986,8 @@ "cqZ" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -19995,8 +20002,8 @@ /area/storage/secure) "crg" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -20005,8 +20012,8 @@ c_tag = "Cargo Backroom" }, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -20187,8 +20194,8 @@ dir = 1 }, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -20259,8 +20266,8 @@ }, /obj/structure/disposalpipe/trunk, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 8 + dir = 8; + id = "cargodisposals" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -23754,8 +23761,8 @@ /area/crew_quarters/serviceyard) "cGl" = ( /obj/machinery/conveyor{ - id = "QMLoad"; - dir = 4 + dir = 4; + id = "QMLoad" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -25180,6 +25187,12 @@ desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner" }, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry Requests Console"; + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteyellow" @@ -26326,9 +26339,9 @@ amount = 10 }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "researchdesk1"; - name = "Research Desk Shutters"; - dir = 1 + name = "Research Desk Shutters" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -27346,7 +27359,7 @@ network = list("Research","SS13") }, /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; name = "Research Request Console"; pixel_x = 30 @@ -28954,8 +28967,8 @@ name = "3maintenance loot spawner" }, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 1 + dir = 1; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) @@ -30964,8 +30977,8 @@ /area/medical/research) "dko" = ( /obj/machinery/conveyor{ - id = "QMLoad"; - dir = 5 + dir = 5; + id = "QMLoad" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -37678,8 +37691,8 @@ "dMs" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 8 + dir = 8; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/delivery) @@ -41779,8 +41792,8 @@ "egs" = ( /obj/machinery/light, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 8 + dir = 8; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) @@ -42456,8 +42469,8 @@ name = "supply dock loading door" }, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -48713,8 +48726,8 @@ "fZe" = ( /obj/structure/disposalpipe/segment, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -51902,9 +51915,9 @@ /obj/effect/decal/warning_stripes/yellow, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "researchdesk1"; - name = "Research Desk Shutters"; - dir = 1 + name = "Research Desk Shutters" }, /turf/simulated/floor/plasteel, /area/toxins/lab) @@ -57725,8 +57738,8 @@ dir = 1 }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 8 + dir = 8; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -59501,9 +59514,9 @@ icon_state = "0-2" }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "researchdesk1"; - name = "Research Desk Shutters"; - dir = 1 + name = "Research Desk Shutters" }, /turf/simulated/floor/plating, /area/toxins/lab) @@ -61669,8 +61682,8 @@ dir = 8 }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -63253,8 +63266,8 @@ /obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) @@ -65037,8 +65050,8 @@ /obj/structure/disposalpipe/segment, /obj/structure/window/reinforced, /obj/machinery/conveyor{ - id = "garbage"; - dir = 8 + dir = 8; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -65786,8 +65799,8 @@ dir = 1 }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 8 + dir = 8; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -72528,8 +72541,8 @@ "mEg" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/conveyor{ - id = "QMLoad"; - dir = 4 + dir = 4; + id = "QMLoad" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -73143,8 +73156,8 @@ "mME" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 4 + dir = 4; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/delivery) @@ -76837,8 +76850,8 @@ /area/security/permahallway) "nNc" = ( /obj/machinery/conveyor{ - id = "QMLoad"; - dir = 1 + dir = 1; + id = "QMLoad" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -78253,8 +78266,8 @@ /area/maintenance/library) "oht" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 4 + dir = 4; + id = "garbage" }, /turf/simulated/floor/plating, /area/maintenance/disposal) @@ -79492,8 +79505,8 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -88638,8 +88651,8 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/warning_stripes/east, /obj/machinery/conveyor{ - id = "QMLoad"; - dir = 4 + dir = 4; + id = "QMLoad" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -102015,8 +102028,8 @@ /area/turret_protected/aisat) "uAf" = ( /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -104525,6 +104538,13 @@ /obj/structure/table/glass, /obj/item/reagent_containers/applicator/burn, /obj/item/reagent_containers/glass/bottle/charcoal, +/obj/machinery/requests_console{ + department = "Genetics"; + departmentType = 1; + name = "Genetics Requests Console"; + pixel_x = -2; + pixel_y = 25 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -106941,8 +106961,8 @@ dir = 4 }, /obj/machinery/conveyor/inverted{ - id = "QMLoad"; - dir = 10 + dir = 10; + id = "QMLoad" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -107497,6 +107517,7 @@ dir = 8 }, /obj/machinery/requests_console{ + department = "Detective"; name = "Detective Requests Console"; pixel_x = -32 }, @@ -107795,8 +107816,8 @@ name = "3maintenance loot spawner" }, /obj/machinery/conveyor{ - id = "cargodelivery"; - dir = 8 + dir = 8; + id = "cargodelivery" }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) @@ -108613,8 +108634,8 @@ "wjh" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/conveyor{ - id = "QMLoad2"; - dir = 8 + dir = 8; + id = "QMLoad2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" diff --git a/_maps/map_files/event/Station/towerstation.dmm b/_maps/map_files/event/Station/towerstation.dmm index 80238a9e039..438b47dba6a 100644 --- a/_maps/map_files/event/Station/towerstation.dmm +++ b/_maps/map_files/event/Station/towerstation.dmm @@ -704,8 +704,8 @@ req_access = list(39) }, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 6 + dir = 6; + icon_state = "whitegreen" }, /area/medical/virology) "atz" = ( @@ -858,8 +858,8 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 10 + dir = 10; + icon_state = "whitegreen" }, /area/medical/virology) "axJ" = ( @@ -916,8 +916,8 @@ /area/hallway/secondary/exit) "azA" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /obj/structure/sign/deathsposal{ pixel_y = -32 @@ -972,9 +972,9 @@ "aBP" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "chemshuts"; - name = "Chemistry Shutters"; - dir = 2 + name = "Chemistry Shutters" }, /turf/simulated/floor/plating, /area/medical/chemistry) @@ -1319,8 +1319,8 @@ "aPe" = ( /obj/machinery/door/window{ dir = 1; - req_access = list(61); - name = "Telecommunications Access" + name = "Telecommunications Access"; + req_access = list(61) }, /turf/simulated/floor/plasteel/dark/telecomms, /area/tcommsat/server) @@ -2213,8 +2213,8 @@ dir = 6 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 8 + dir = 8; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "bvB" = ( @@ -2766,8 +2766,8 @@ /obj/machinery/door_control{ id = "researchshuts"; name = "Research Shutters Control"; - req_access = list(33); - pixel_y = 26 + pixel_y = 26; + req_access = list(33) }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -3239,8 +3239,8 @@ /obj/machinery/door_control{ id = "brigshuts"; name = "Brig Shutters Control"; - req_access = list(1,4); - pixel_y = 36 + pixel_y = 36; + req_access = list(1,4) }, /turf/simulated/floor/plasteel{ icon_state = "redfull" @@ -3309,8 +3309,8 @@ /area/space) "cdz" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 9 + dir = 9; + icon_state = "whitegreen" }, /area/medical/virology) "cdB" = ( @@ -3416,9 +3416,9 @@ pixel_x = -8 }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "kitchen"; - name = "Kitchen Shutters"; - dir = 2 + name = "Kitchen Shutters" }, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) @@ -3815,9 +3815,9 @@ "cyG" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "brigshuts"; - name = "Brig Shutters"; - dir = 1 + name = "Brig Shutters" }, /turf/simulated/floor/plating, /area/security/main) @@ -3908,8 +3908,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - dir = 8 + dir = 8; + icon_state = "whiteblue" }, /area/medical/sleeper) "cAL" = ( @@ -4244,8 +4244,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - dir = 8 + dir = 8; + icon_state = "whiteblue" }, /area/medical/sleeper) "cRi" = ( @@ -5063,8 +5063,8 @@ pixel_x = 24 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 4 + dir = 4; + icon_state = "whitepurple" }, /area/toxins/mixing) "dsw" = ( @@ -5721,9 +5721,9 @@ /obj/item/storage/fancy/donut_box, /obj/item/reagent_containers/food/snacks/soup/misosoup, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "kitchen"; - name = "Kitchen Shutters"; - dir = 2 + name = "Kitchen Shutters" }, /turf/simulated/floor/plasteel/white, /area/crew_quarters/kitchen) @@ -5779,8 +5779,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 1 + dir = 1; + icon_state = "whitepurple" }, /area/toxins/mixing) "dTl" = ( @@ -6956,9 +6956,9 @@ "eIB" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; id_tag = "brigshuts"; - name = "Brig Shutters"; - dir = 8 + name = "Brig Shutters" }, /turf/simulated/floor/plating, /area/security/main) @@ -7608,8 +7608,8 @@ }, /obj/effect/landmark/start/virologist, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 8 + dir = 8; + icon_state = "whitegreen" }, /area/medical/virology) "feZ" = ( @@ -8404,6 +8404,12 @@ "fBs" = ( /obj/effect/turf_decal/delivery, /obj/machinery/computer/scan_consolenew, +/obj/machinery/requests_console{ + department = "Genetics"; + departmentType = 1; + name = "Genetics Requests Console"; + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -8749,8 +8755,8 @@ /obj/effect/decal/warning_stripes/yellow, /obj/machinery/plantgenes, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 1 + dir = 1; + icon_state = "blue" }, /area/hydroponics) "fIT" = ( @@ -9119,8 +9125,8 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 1 + dir = 1; + icon_state = "whitepurple" }, /area/toxins/mixing) "fXq" = ( @@ -9604,8 +9610,8 @@ "gpQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -10735,8 +10741,8 @@ }, /obj/machinery/computer/card/minor/hos, /obj/item/radio/intercom{ - pixel_y = -28; - pixel_x = 28 + pixel_x = 28; + pixel_y = -28 }, /obj/machinery/keycard_auth{ pixel_x = 28; @@ -10904,8 +10910,8 @@ }, /obj/structure/plasticflaps, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -11157,10 +11163,10 @@ /area/toxins/lab) "hjb" = ( /obj/machinery/atmospherics/trinary/filter{ + dir = 4; filter_type = "n2"; name = "nitrogen filter"; - on = 1; - dir = 4 + on = 1 }, /turf/simulated/floor/plasteel, /area/atmos) @@ -11352,8 +11358,8 @@ /obj/machinery/door_control{ id = "briglock"; name = "Brig Lockdown"; - req_access = list(3); - pixel_x = -26 + pixel_x = -26; + req_access = list(3) }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -12655,8 +12661,8 @@ dir = 4 }, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -13288,9 +13294,9 @@ name = "Access Queue" }, /obj/machinery/door/window/brigdoor/northleft{ + dir = 8; name = "Access Desk"; - req_access = list(57); - dir = 8 + req_access = list(57) }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; @@ -13372,8 +13378,8 @@ /obj/machinery/light, /obj/machinery/chem_master, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 6 + dir = 6; + icon_state = "blue" }, /area/hydroponics) "iGn" = ( @@ -13474,9 +13480,9 @@ pixel_x = 30 }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "kitchen"; - name = "Kitchen Shutters"; - dir = 2 + name = "Kitchen Shutters" }, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) @@ -14164,8 +14170,8 @@ }, /obj/machinery/door/window/brigdoor/security{ dir = 2; - req_access = list(63); - name = "Brig Medical Bay" + name = "Brig Medical Bay"; + req_access = list(63) }, /turf/simulated/floor/plasteel{ dir = 4; @@ -14833,8 +14839,8 @@ }, /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/plasteel{ - icon_state = "green"; - dir = 10 + dir = 10; + icon_state = "green" }, /area/hydroponics) "jAi" = ( @@ -15393,9 +15399,9 @@ "jUc" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "kitchen"; - name = "Kitchen Shutters"; - dir = 2 + name = "Kitchen Shutters" }, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) @@ -16500,8 +16506,8 @@ /obj/machinery/door_control{ id = "briglock"; name = "Brig Lockdown"; - req_access = list(3); - pixel_x = -26 + pixel_x = -26; + req_access = list(3) }, /turf/simulated/wall/r_wall, /area/security/warden) @@ -17305,18 +17311,18 @@ /obj/machinery/door_control{ id = "engsm"; name = "Supermatter Blast Doors"; + pixel_x = -24; pixel_y = -8; - req_access = list(10); - pixel_x = -24 + req_access = list(10) }, /obj/machinery/door_control{ id = "smbolts"; name = "Supermatter Bolt Control"; normaldoorcontrol = 1; + pixel_x = -24; pixel_y = 8; req_access = list(56); - specialfunctions = 4; - pixel_x = -24 + specialfunctions = 4 }, /turf/simulated/floor/engine, /area/engineering/engine) @@ -17884,9 +17890,9 @@ "lCt" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "kitchen"; - name = "Kitchen Shutters"; - dir = 2 + name = "Kitchen Shutters" }, /turf/simulated/floor/plasteel/white, /area/crew_quarters/kitchen) @@ -18580,8 +18586,8 @@ dir = 8 }, /turf/simulated/floor/glass/reinforced{ - oxygen = 0; nitrogen = 0; + oxygen = 0; temperature = 2.7 }, /area/space) @@ -19057,8 +19063,8 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - dir = 8 + dir = 8; + icon_state = "whiteblue" }, /area/medical/sleeper) "mmJ" = ( @@ -19131,8 +19137,8 @@ }, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 4 + dir = 4; + icon_state = "whitepurple" }, /area/toxins/mixing) "mqd" = ( @@ -19681,8 +19687,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 8 + dir = 8; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "mIi" = ( @@ -20714,8 +20720,8 @@ /area/turret_protected/ai_upload) "nrB" = ( /obj/machinery/atmospherics/trinary/filter{ - dir = 8; desc = "Отфильтровывает углекислый газ из трубы и отправляет его в камеру хранения"; + dir = 8; filter_type = 3; name = "Фильтр Углекислого Газа (СO2)"; on = 1; @@ -21522,8 +21528,8 @@ /area/gateway) "nSq" = ( /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 1 + dir = 1; + icon_state = "blue" }, /area/hydroponics) "nTs" = ( @@ -22233,9 +22239,9 @@ req_access = list(35) }, /obj/machinery/door/window/eastleft{ + dir = 8; name = "Kitchen Desk"; - req_access = list(28); - dir = 8 + req_access = list(28) }, /turf/simulated/floor/plating, /area/crew_quarters/kitchen) @@ -22256,8 +22262,8 @@ /area/crew_quarters/dorms) "oqA" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 9 + dir = 9; + icon_state = "whitepurple" }, /area/toxins/mixing) "orb" = ( @@ -22312,8 +22318,8 @@ /area/medical/medbay) "otM" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 1 + dir = 1; + icon_state = "whitepurple" }, /area/toxins/mixing) "ouf" = ( @@ -22842,8 +22848,8 @@ /area/hallway/primary/aft) "oLj" = ( /turf/simulated/floor/glass/reinforced{ - oxygen = 0; nitrogen = 0; + oxygen = 0; temperature = 2.7 }, /area/space) @@ -23023,8 +23029,8 @@ /area/hallway/primary/starboard) "oSt" = ( /obj/machinery/atmospherics/trinary/filter{ - dir = 8; desc = "Отфильтровывает оксид азота из трубы и отправляет его в камеру хранения."; + dir = 8; filter_type = 4; name = "Фильтр Оксида Азота (N2O)"; on = 1; @@ -23247,6 +23253,18 @@ }, /turf/simulated/floor/plasteel/dark, /area/medical/medbay) +"oZQ" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Blueshield"; + departmentType = 5; + name = "Blueshield Requests Console"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "bcarpet05" + }, +/area/bridge) "oZR" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/emcloset/anchored, @@ -23428,8 +23446,8 @@ pixel_y = -32 }, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -23860,8 +23878,8 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 4 + dir = 4; + icon_state = "whitegreen" }, /area/medical/virology) "pxE" = ( @@ -24150,9 +24168,9 @@ "pFi" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "chemshuts"; - name = "Chemistry Shutters"; - dir = 1 + name = "Chemistry Shutters" }, /turf/simulated/floor/plating, /area/medical/chemistry) @@ -24207,9 +24225,9 @@ dir = 4 }, /obj/machinery/door/window/southleft{ + dir = 8; name = "Research Lab Desk"; - req_access = list(47); - dir = 8 + req_access = list(47) }, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "researchshuts"; @@ -24294,8 +24312,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 1 + dir = 1; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "pHL" = ( @@ -24630,8 +24648,8 @@ dir = 1 }, /obj/item/radio/intercom{ - pixel_y = -28; - pixel_x = -28 + pixel_x = -28; + pixel_y = -28 }, /turf/simulated/floor/plasteel{ icon_state = "bcarpet05" @@ -24716,8 +24734,8 @@ pixel_x = 28 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 4 + dir = 4; + icon_state = "whitepurple" }, /area/toxins/mixing) "pVk" = ( @@ -24770,8 +24788,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 1 + dir = 1; + icon_state = "whitepurple" }, /area/toxins/mixing) "pWM" = ( @@ -24917,8 +24935,8 @@ /area/security/permabrig) "qcu" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) @@ -25181,8 +25199,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 5 + dir = 5; + icon_state = "whitepurple" }, /area/toxins/mixing) "qkI" = ( @@ -25295,8 +25313,8 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 4 + dir = 4; + icon_state = "whitepurple" }, /area/toxins/mixing) "qph" = ( @@ -25509,12 +25527,12 @@ pixel_x = 32 }, /obj/item/radio/intercom/custom{ - pixel_y = 14; - pixel_x = 32 + pixel_x = 32; + pixel_y = 14 }, /obj/item/radio/intercom{ - pixel_y = -15; - pixel_x = 32 + pixel_x = 32; + pixel_y = -15 }, /turf/simulated/floor/greengrid, /area/turret_protected/aisat) @@ -25532,8 +25550,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 1 + dir = 1; + icon_state = "whitepurple" }, /area/toxins/mixing) "qxq" = ( @@ -26493,8 +26511,8 @@ "rdP" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 6 + dir = 6; + icon_state = "blue" }, /area/atmos) "ree" = ( @@ -27228,8 +27246,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 8 + dir = 8; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "rBV" = ( @@ -27690,6 +27708,12 @@ pixel_x = 26; req_access = list(33) }, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry Requests Console"; + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteyellow" @@ -28627,7 +28651,7 @@ pixel_y = 3 }, /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; name = "Research Request Console"; pixel_x = 30 @@ -29656,8 +29680,8 @@ req_access = list(39) }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - dir = 8 + dir = 8; + icon_state = "whiteblue" }, /area/medical/sleeper) "tiH" = ( @@ -30111,8 +30135,8 @@ /area/hallway/secondary/entry) "tzj" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 8 + dir = 8; + icon_state = "whitepurple" }, /area/toxins/mixing) "tzx" = ( @@ -30151,8 +30175,8 @@ created_name = "Officer Podsky"; desc = "Ты не узнаешь ценность чего-либо, пока не потеряешь это..."; name = "Обломки офицера Подски"; - pixel_y = 14; - pixel_x = -5 + pixel_x = -5; + pixel_y = 14 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -30221,6 +30245,17 @@ icon_state = "neutralcorner" }, /area/toxins/mixing) +"tCV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Quartermaster's Desk"; + departmentType = 5; + name = "Quartermaster Requests Console"; + pixel_x = -30 + }, +/turf/simulated/floor/carpet/black, +/area/quartermaster/storage) "tCZ" = ( /obj/structure/table/reinforced, /obj/item/phone{ @@ -30491,8 +30526,8 @@ tag_interior_door = "viro_lab_airlock_interior" }, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 4 + dir = 4; + icon_state = "whitegreen" }, /area/medical/virology) "tKy" = ( @@ -30606,8 +30641,8 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 1 + dir = 1; + icon_state = "blue" }, /area/hydroponics) "tQb" = ( @@ -31511,8 +31546,8 @@ dir = 8 }, /obj/machinery/door/window/brigdoor/security{ - req_access = list(2); - name = "Rrocessing" + name = "Rrocessing"; + req_access = list(2) }, /turf/simulated/floor/plasteel{ dir = 1; @@ -31806,8 +31841,8 @@ /obj/machinery/door_control{ id = "execblast"; name = "Vacuum Execution"; - req_access = list(2); - pixel_x = -26 + pixel_x = -26; + req_access = list(2) }, /turf/simulated/floor/plasteel{ dir = 9; @@ -32309,8 +32344,8 @@ dir = 5 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 1 + dir = 1; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "uQL" = ( @@ -32433,8 +32468,8 @@ /obj/machinery/chem_dispenser/botanical, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 9 + dir = 9; + icon_state = "blue" }, /area/hydroponics) "uUg" = ( @@ -32548,8 +32583,8 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 5 + dir = 5; + icon_state = "whitegreen" }, /area/medical/virology) "vbn" = ( @@ -33519,9 +33554,9 @@ "vDD" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; id_tag = "brigshuts"; - name = "Brig Shutters"; - dir = 1 + name = "Brig Shutters" }, /obj/machinery/door/poddoor{ density = 0; @@ -33676,10 +33711,10 @@ "vIe" = ( /obj/structure/showcase{ dir = 4; - pixel_x = -9; icon = 'icons/mob/robots.dmi'; icon_state = "Robot-STD"; name = "Cyborg Statue"; + pixel_x = -9; pixel_y = 2 }, /turf/simulated/floor/bluegrid, @@ -33898,9 +33933,9 @@ "vNU" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; id_tag = "chemshuts"; - name = "Chemistry Shutters"; - dir = 8 + name = "Chemistry Shutters" }, /turf/simulated/floor/plating, /area/medical/chemistry) @@ -34145,9 +34180,9 @@ "vXi" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; id_tag = "brigshuts"; - name = "Brig Shutters"; - dir = 2 + name = "Brig Shutters" }, /obj/machinery/door/poddoor{ density = 0; @@ -34789,9 +34824,9 @@ "wqQ" = ( /obj/machinery/biogenerator, /obj/machinery/door/window/eastleft{ + dir = 1; name = "Hydroponics Desk"; - req_access = list(35); - dir = 1 + req_access = list(35) }, /turf/simulated/floor/plating, /area/hydroponics) @@ -36166,8 +36201,8 @@ "xef" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen"; - dir = 8 + dir = 8; + icon_state = "whitegreen" }, /area/medical/virology) "xeu" = ( @@ -36209,8 +36244,8 @@ }, /obj/item/toy/figure/roboticist, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - dir = 5 + dir = 5; + icon_state = "whitepurple" }, /area/assembly/robotics) "xeR" = ( @@ -37108,8 +37143,8 @@ dir = 4 }, /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 4 + dir = 4; + id = "cargodisposals" }, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -37553,8 +37588,8 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/plasteel{ - icon_state = "blue"; - dir = 8 + dir = 8; + icon_state = "blue" }, /area/hydroponics) "xYz" = ( @@ -37865,15 +37900,15 @@ pixel_y = 2 }, /obj/item/clothing/gloves/combat{ - pixel_y = -3; - pixel_x = -3 + pixel_x = -3; + pixel_y = -3 }, /obj/item/clothing/gloves/combat{ pixel_y = -3 }, /obj/item/clothing/gloves/combat{ - pixel_y = -3; - pixel_x = 3 + pixel_x = 3; + pixel_y = -3 }, /obj/item/shield/riot{ pixel_x = 3; @@ -37913,8 +37948,8 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - dir = 8 + dir = 8; + icon_state = "whitebluecorner" }, /area/medical/sleeper) "yjR" = ( @@ -337765,7 +337800,7 @@ vvq uJy cxo uYB -cYO +tCV cYO wwa jxt @@ -590154,7 +590189,7 @@ nOE vtz tMi kFM -qiF +oZQ ckr eBD rgz diff --git a/_maps/map_files/nova/nova.dmm b/_maps/map_files/nova/nova.dmm index a660768c920..26674ae6a6c 100644 --- a/_maps/map_files/nova/nova.dmm +++ b/_maps/map_files/nova/nova.dmm @@ -119106,7 +119106,7 @@ /obj/machinery/computer/rdconsole/core, /obj/effect/decal/warning_stripes/northwest, /obj/machinery/requests_console{ - department = "Science"; + department = "Research"; departmentType = 2; name = "Research Request Console"; pixel_x = -30 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 381b6b2e6f8..4ffa1a41511 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -103,3 +103,4 @@ /// Machines with this flag will not start processing when it's spawned. Use this if you want to manually control when a machine starts processing. #define START_PROCESSING_MANUALLY (1<<1) +#define ORE_REDEMPTION "Плавильная печь" diff --git a/code/__DEFINES/request_consoles.dm b/code/__DEFINES/request_consoles.dm new file mode 100644 index 00000000000..806eabf4e55 --- /dev/null +++ b/code/__DEFINES/request_consoles.dm @@ -0,0 +1,91 @@ +// Request Console Department Types +#define RC_ASSIST 1 // Request Assistance +#define RC_SUPPLY 2 // Request Supplies +#define RC_INFO 4 // Relay Info + +// Request Console Screens +#define RCS_MAINMENU 0 // Main menu +#define RCS_RQSUPPLY 1 // Request supplies +#define RCS_RQASSIST 2 // Request assistance +#define RCS_SENDINFO 3 // Relay information +#define RCS_SENTPASS 4 // Message sent successfully +#define RCS_SENTFAIL 5 // Message sent unsuccessfully +#define RCS_VIEWMSGS 6 // View messages +#define RCS_MESSAUTH 7 // Authentication before sending +#define RCS_ANNOUNCE 8 // Send announcement +#define RCS_SHIPPING 9 // Print Shipping Labels/Packages +#define RCS_SHIP_LOG 10 // View Shipping Label Log + +// Radio list +#define ENGI_ROLES list(RC_ATMOSPHERICS, RC_MECHANIC, RC_ENGINEERING, RC_CHIEF_ENGINEER_DESK, RC_TECH_STORAGE, RC_TELECOMS_ADMIN) +#define SEC_ROLES list(RC_WARDEN, RC_SECURITY, RC_DETECTIVE, RC_LABOR_CAMP, RC_BRIG_MEDBAY, RC_HEAD_OF_SECURITY_DESK) +#define MISC_ROLES list(RC_BAR, RC_CHAPEL, RC_KITCHEN, RC_HYDROPONICS, RC_JANITORIAL) +#define MED_ROLES list(RC_VIROLOGY, RC_MEDBAY, RC_MORGUE, RC_CHEMISTRY, RC_CHIEF_MEDICAL_OFFICER_DESK) +#define COM_ROLES list(RC_BLUESHIELD, RC_NT_REPRESENTATIVE, RC_HEAD_OF_PERSONNEL_DESK, RC_CAPTAIN_DESK, RC_BRIDGE) +#define SCI_ROLES list(RC_ROBOTICS, RC_SCIENCE, RC_RESEARCH, RC_GENETICS, RC_XENOBIOLOGY, RC_RESEARCH_DIRECTOR_DESK) + +// Request Console Departments + +//Civilian +#define RC_PRIMARY_TOOL_STORAGE "Primary Tool Storage" +#define RC_LOCKER_ROOM "Locker Room" +#define RC_ARRIVAL_SHUTTLE "Arrival Shuttle" +#define RC_CREW_QUARTERS "Crew Quarters" + +// Medical +#define RC_MEDBAY "Medbay" +#define RC_VIROLOGY "Virology" +#define RC_MORGUE "Morgue" +#define RC_CHEMISTRY "Chemistry" + +// RND +#define RC_ROBOTICS "Robotics" +#define RC_SCIENCE "Science" +#define RC_RESEARCH "Research" +#define RC_XENOBIOLOGY "Xenobiology" +#define RC_GENETICS "Genetics" + +// Engineering +#define RC_ENGINEERING "Engineering" +#define RC_TECH_STORAGE "Tech storage" +#define RC_MECHANIC "Mechanic" +#define RC_ATMOSPHERICS "Atmospherics" + +// Security +#define RC_SECURITY "Security" +#define RC_DETECTIVE "Detective" +#define RC_WARDEN "Warden" +#define RC_LABOR_CAMP "Labor Camp" + +// Cargo +#define RC_CARGO_BAY "Cargo Bay" + +// Service +#define RC_BAR "Bar" +#define RC_HYDROPONICS "Hydroponics" +#define RC_JANITORIAL "Janitorial" +#define RC_KITCHEN "Kitchen" +#define RC_CHAPEL "Chapel" + +// Comand +#define RC_RESEARCH_DIRECTOR_DESK "Research Director's Desk" +#define RC_HEAD_OF_PERSONNEL_DESK "Head of Personnel's Desk" +#define RC_CHIEF_ENGINEER_DESK "Chief Engineer's Desk" +#define RC_CHIEF_MEDICAL_OFFICER_DESK "Chief Medical Officer's Desk" +#define RC_QUARTERMASTER_DESK "Quartermaster's Desk" +#define RC_HEAD_OF_SECURITY_DESK "Head of Security's Desk" +#define RC_CAPTAIN_DESK "Captain's Desk" +#define RC_AI "AI" +#define RC_BRIDGE "Bridge" +#define RC_EVA "EVA" + +// Central Command Dependent +#define RC_BLUESHIELD "Blueshield" +#define RC_INTERNAL_AFFAIRS_OFFICE "Internal Affairs Office" +#define RC_NT_REPRESENTATIVE "NT Representative" +#define RC_CENTRAL_COMMAND "Central Command" + +// NOT USED IN MAPS +#define RC_BRIG_MEDBAY "Brig Medbay" +#define RC_TELECOMS_ADMIN "Telecoms Admin" + diff --git a/code/datums/outfits/outfit_security_clown.dm b/code/datums/outfits/outfit_security_clown.dm index 9f628a62c9c..23acd23ca3c 100644 --- a/code/datums/outfits/outfit_security_clown.dm +++ b/code/datums/outfits/outfit_security_clown.dm @@ -134,6 +134,7 @@ //=========== security clown equipment =========== /obj/item/pda/clown/security default_cartridge = /obj/item/cartridge/clown + default_request_console_cartridge = /obj/item/cartridge/request_console/clown_security icon_state = "pda-security-clown" desc = "Переносной микрокомпьютер от Синктроник Системс, LTD. Этот КПК разработан по заказу тайного покупателя, пожелавшего хонкнуться нераскрытым. Поверхность покрыта политетрафторэтиленом и банановым налётом." ttone = "honk" diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index a5523d86e21..e851c95cd96 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -1,32 +1,6 @@ /******************** Requests Console ********************/ /** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ -//Request Console Department Types -#define RC_ASSIST 1 //Request Assistance -#define RC_SUPPLY 2 //Request Supplies -#define RC_INFO 4 //Relay Info - -//Request Console Screens -#define RCS_MAINMENU 0 // Main menu -#define RCS_RQSUPPLY 1 // Request supplies -#define RCS_RQASSIST 2 // Request assistance -#define RCS_SENDINFO 3 // Relay information -#define RCS_SENTPASS 4 // Message sent successfully -#define RCS_SENTFAIL 5 // Message sent unsuccessfully -#define RCS_VIEWMSGS 6 // View messages -#define RCS_MESSAUTH 7 // Authentication before sending -#define RCS_ANNOUNCE 8 // Send announcement -#define RCS_SHIPPING 9 // Print Shipping Labels/Packages -#define RCS_SHIP_LOG 10 // View Shipping Label Log - -//Radio list -#define ENGI_ROLES list("Atmospherics","Mechanic","Engineering","Chief Engineer's Desk","Telecoms Admin") -#define SEC_ROLES list("Warden","Security","Brig Medbay","Head of Security's Desk") -#define MISC_ROLES list("Bar","Chapel","Kitchen","Hydroponics","Janitorial") -#define MED_ROLES list("Virology","Chief Medical Officer's Desk","Medbay") -#define COM_ROLES list("Blueshield","NT Representative","Head of Personnel's Desk","Captain's Desk","Bridge") -#define SCI_ROLES list("Robotics","Science","Research Director's Desk") - #define RQ_NONEW_MESSAGES 0 #define RQ_NORMALPRIORITY 1 #define RQ_HIGHPRIORITY 2 @@ -69,6 +43,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) var/print_cooldown = 0 //cooldown on shipping label printer, stores the in-game time of when the printer will next be ready var/obj/item/radio/Radio var/radiochannel = "" + var/list/connected_apps = list() /obj/machinery/requests_console/Initialize(mapload) @@ -90,7 +65,6 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) GLOB.req_console_supplies |= department if(departmentType & RC_INFO) GLOB.req_console_information |= department - update_icon(UPDATE_OVERLAYS) @@ -109,6 +83,9 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) if(departmentType & RC_INFO) GLOB.req_console_information -= department QDEL_NULL(Radio) + for(var/datum/data/pda/app/request_console/app as anything in connected_apps) + if(istype(app)) + app.on_rc_destroyed(src) return ..() /obj/machinery/requests_console/attack_ghost(user as mob) @@ -120,7 +97,6 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) /obj/machinery/requests_console/attack_hand(user as mob) if(..(user)) return - ui_interact(user) @@ -193,9 +169,9 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) message = new_message screen = RCS_MESSAUTH switch(params["priority"]) - if("1") + if(1) priority = RQ_NORMALPRIORITY - if("2") + if(2) priority = RQ_HIGHPRIORITY else priority = RQ_NONEW_MESSAGES @@ -238,9 +214,9 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) radiochannel = "Command" else if(recipient in SCI_ROLES) radiochannel = "Science" - else if(recipient == "AI") + else if(recipient == RC_AI) radiochannel = "AI Private" - else if(recipient == "Cargo Bay") + else if(recipient == RC_CARGO_BAY) radiochannel = "Supply" write_to_message_log("Message sent to [recipient] at [station_time_timestamp()] - [message]") Radio.autosay("Alert; a new requests console message received for [recipient] from [department]", null, "[radiochannel]") @@ -292,38 +268,46 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) return ..() if(istype(I, /obj/item/card/id)) - var/obj/item/card/id/id = I add_fingerprint(user) - switch(screen) - if(RCS_MESSAUTH) - msgVerified = "Verified by [id.registered_name] ([id.assignment])" - SStgui.update_uis(src) - return ATTACK_CHAIN_PROCEED_SUCCESS - if(RCS_ANNOUNCE) - if(ACCESS_RC_ANNOUNCE in id.GetAccess()) - announceAuth = TRUE - announcement.announcer = id.assignment ? "[id.assignment] [id.registered_name]" : id.registered_name - SStgui.update_uis(src) - return ATTACK_CHAIN_PROCEED_SUCCESS - reset_message() - to_chat(user, span_warning("You are not authorized to send announcements.")) - SStgui.update_uis(src) - return ATTACK_CHAIN_PROCEED_SUCCESS - if(RCS_SHIPPING) - msgVerified = "Sender verified as [id.registered_name] ([id.assignment])" - SStgui.update_uis(src) - return ATTACK_CHAIN_PROCEED_SUCCESS + return login_console(screen, I, src) if(istype(I, /obj/item/stamp)) - if(screen == RCS_MESSAUTH) - add_fingerprint(user) - msgStamped = "Stamped with the [I.name]" - SStgui.update_uis(src) - return ATTACK_CHAIN_PROCEED_SUCCESS + return stamp_messauth(screen, I, src, user) return ..() +/obj/machinery/requests_console/proc/stamp_messauth(screen, obj/item/stamp/stamp, obj/ui_object, mob/user, is_distant=FALSE) + if(screen == RCS_MESSAUTH) + if(!is_distant) + add_fingerprint(user) + msgStamped = "Stamped with the [stamp.name]" + SStgui.update_uis(ui_object) + return ATTACK_CHAIN_PROCEED_SUCCESS + return ATTACK_CHAIN_PROCEED + +/obj/machinery/requests_console/proc/login_console(screen, obj/item/card/id/id, obj/ui_object, mob/user) + switch(screen) + if(RCS_MESSAUTH) + msgVerified = "Verified by [id.registered_name] ([id.assignment])" + SStgui.update_uis(ui_object) + return ATTACK_CHAIN_PROCEED_SUCCESS + if(RCS_ANNOUNCE) + if(ACCESS_RC_ANNOUNCE in id.GetAccess()) + announceAuth = TRUE + announcement.announcer = id.assignment ? "[id.assignment] [id.registered_name]" : id.registered_name + SStgui.update_uis(ui_object) + return ATTACK_CHAIN_PROCEED_SUCCESS + reset_message() + to_chat(user, span_warning("You are not authorized to send announcements.")) + SStgui.update_uis(ui_object) + return ATTACK_CHAIN_PROCEED_SUCCESS + if(RCS_SHIPPING) + msgVerified = "Sender verified as [id.registered_name] ([id.assignment])" + SStgui.update_uis(ui_object) + return ATTACK_CHAIN_PROCEED_SUCCESS + return ATTACK_CHAIN_PROCEED + /obj/machinery/requests_console/proc/reset_message(mainmenu = FALSE) message = "" recipient = "" @@ -353,14 +337,21 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) atom_say(title) + var/rendered_message switch(priority) if(RQ_HIGHPRIORITY) // High - write_to_message_log("Высокий приоритет - От: [linkedSender] - [message]") + rendered_message = "Высокий приоритет - От: [linkedSender] - [message]" else // Normal - write_to_message_log("От: [linkedSender] - [message]") + rendered_message = "От: [linkedSender] - [message]" + + if(!isnull(rendered_message)) + write_to_message_log(rendered_message, source == ORE_REDEMPTION) -/obj/machinery/requests_console/proc/write_to_message_log(message) +/obj/machinery/requests_console/proc/write_to_message_log(message, ore_message = FALSE) + for(var/datum/data/pda/app/request_console/app as anything in connected_apps) + if(istype(app)) + app.on_rc_message_recieved(src, message, ore_message) message_log = list(message) + message_log /obj/machinery/requests_console/proc/print_label(tag_name, tag_index) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 842f46e041d..01de99e993c 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -2,6 +2,7 @@ #define BASE_SHEET_MULT 0.5 #define POINT_MULT_ADD_PER_RATING 0.35 #define SHEET_MULT_ADD_PER_RATING 0.2 +#define MESSAGES_WAIT_TIME 1 MINUTES /** * # Ore Redemption Machine @@ -28,15 +29,16 @@ /// List of supply console department names that can receive a notification about ore dumps. /// A list may be provided as entry value to only notify when specific ore is dumped. var/list/supply_consoles = list( - "Science", - "Robotics", - "Research Director's Desk", - "Mechanic", - "Engineering" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), - "Chief Engineer's Desk" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), - "Atmospherics" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), - "Bar" = list(MAT_URANIUM, MAT_PLASMA), - "Virology" = list(MAT_PLASMA, MAT_URANIUM, MAT_GOLD) + RC_SCIENCE, + RC_RESEARCH, + RC_ROBOTICS, + RC_RESEARCH_DIRECTOR_DESK, + RC_MECHANIC, + RC_ENGINEERING = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), + RC_CHIEF_ENGINEER_DESK = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), + RC_ATMOSPHERICS = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), + RC_BAR = list(MAT_URANIUM, MAT_PLASMA), + RC_VIROLOGY = list(MAT_PLASMA, MAT_URANIUM, MAT_GOLD) ) // Variables /// The currently inserted ID. @@ -55,6 +57,7 @@ var/datum/research/files /// The currently inserted design disk. var/obj/item/disk/design_disk/inserted_disk + COOLDOWN_DECLARE(messages_cooldown) /obj/machinery/mineral/ore_redemption/New() ..() @@ -186,8 +189,11 @@ // Process it if(length(ore_buffer)) message_sent = FALSE + if(!COOLDOWN_STARTED(src, messages_cooldown)) + COOLDOWN_START(src, messages_cooldown, MESSAGES_WAIT_TIME) process_ores(ore_buffer) - else if(!message_sent) + + if(COOLDOWN_FINISHED(src, messages_cooldown) && !message_sent) SStgui.update_uis(src) send_console_message() message_sent = TRUE @@ -484,7 +490,7 @@ if(!(C.department in supply_consoles)) continue if(!supply_consoles[C.department] || length(supply_consoles[C.department] - mats_in_stock)) - C.createMessage("Плавильная печь", "Новые ресурсы доступны!", msg, 1) // RQ_NORMALPRIORITY + C.createMessage(ORE_REDEMPTION, "Новые ресурсы доступны!", msg, 1) // RQ_NORMALPRIORITY /** * Tries to insert the ID card held by the given user into the machine. diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index 90c01171c98..5cf60cd6afc 100755 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -27,8 +27,12 @@ GLOBAL_LIST_EMPTY(PDAs) //Main variables var/owner = null var/default_cartridge = null // Access level defined by cartridge + /// Default request console cartridge + var/default_request_console_cartridge = null var/special_pen = null //special variable for nonstandart pens in new PDAs var/obj/item/cartridge/cartridge = null //current cartridge + /// Current request console cartridge + var/obj/item/cartridge/request_console/request_cartridge = null var/datum/data/pda/app/current_app = null var/datum/data/pda/app/lastapp = null @@ -107,6 +111,9 @@ GLOBAL_LIST_EMPTY(PDAs) if(default_cartridge) cartridge = new default_cartridge(src) cartridge.update_programs(src) + if(default_request_console_cartridge) + request_cartridge = new default_request_console_cartridge(src) + request_cartridge.update_programs(src) if(special_pen) new special_pen(src) else @@ -125,6 +132,7 @@ GLOBAL_LIST_EMPTY(PDAs) scanmode = null QDEL_LIST(programs) QDEL_NULL(cartridge) + QDEL_NULL(request_cartridge) QDEL_NULL(current_case) current_painting?.Cut() return ..() @@ -168,7 +176,7 @@ GLOBAL_LIST_EMPTY(PDAs) ui_interact(user) /obj/item/pda/proc/start_program(datum/data/pda/P) - if(P && ((P in programs) || (cartridge && (P in cartridge.programs)))) + if(P && ((P in programs) || (cartridge && (P in cartridge.programs)) || (request_cartridge && (P in request_cartridge.programs)))) return P.start() return 0 @@ -240,6 +248,8 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(user, "You remove the ID from the [name].") SStgui.update_uis(src) id = null + cartridge?.on_id_updated() + request_cartridge?.on_id_updated() update_icon(UPDATE_OVERLAYS) @@ -294,6 +304,8 @@ GLOBAL_LIST_EMPTY(PDAs) var/obj/item/I = user.get_active_hand() if(istype(I, /obj/item/card/id) && user.drop_transfer_item_to_loc(I, src)) id = I + cartridge?.on_id_updated() + request_cartridge?.on_id_updated() update_icon(UPDATE_OVERLAYS) return TRUE return FALSE @@ -303,6 +315,8 @@ GLOBAL_LIST_EMPTY(PDAs) id.forceMove_turf() user.put_in_hands(id) id = I + cartridge?.on_id_updated() + request_cartridge?.on_id_updated() update_icon(UPDATE_OVERLAYS) return TRUE return FALSE @@ -399,8 +413,25 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(user, span_notice("You have put [I] onto the PDA.")) return ATTACK_CHAIN_BLOCKED_ALL + if(istype(I, /obj/item/cartridge/request_console)) + add_fingerprint(user) + if(request_cartridge) + to_chat(user, span_warning("The PDA is already holding another request cartridge.")) + return ATTACK_CHAIN_PROCEED + if(!user.drop_transfer_item_to_loc(I, src)) + return ..() + request_cartridge = I + request_cartridge.update_programs(src) + update_shortcuts() + to_chat(user, span_notice("You have inserted [I] into the PDA.")) + SStgui.update_uis(src) + if(request_cartridge.radio) + request_cartridge.radio.hostpda = src + return ATTACK_CHAIN_BLOCKED_ALL + if(istype(I, /obj/item/cartridge)) add_fingerprint(user) + if(cartridge) to_chat(user, span_warning("The PDA is already holding another cartridge.")) return ATTACK_CHAIN_PROCEED @@ -460,6 +491,13 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(user, span_notice("You have slided [I] into the PDA.
You can remove it with Ctrl-click.")) return ATTACK_CHAIN_BLOCKED_ALL + if(istype(I, /obj/item/stamp)) + var/result = cartridge?.stamp_act(I) + result |= request_cartridge?.stamp_act(I) + if(result) + return ATTACK_CHAIN_BLOCKED_ALL + return ATTACK_CHAIN_PROCEED + return ..() diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm index 98e9d5fe1bd..17508353787 100644 --- a/code/modules/pda/app.dm +++ b/code/modules/pda/app.dm @@ -20,6 +20,14 @@ /datum/data/pda/proc/program_process() return +/datum/data/pda/proc/on_id_updated() + return + +/datum/data/pda/proc/stamp_act(obj/item/stamp/stamp) + if(!istype(stamp)) + return FALSE + return TRUE + /datum/data/pda/proc/program_hit_check() return diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index a4e2c4efaa8..85b14210e59 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -28,6 +28,24 @@ var/datum/data/pda/messenger_plugin/P = A P.pda = pda +/obj/item/cartridge/proc/stamp_act(stamp) + var/result = FALSE + for(var/A in programs) + var/datum/data/pda/P = A + result = result || P.stamp_act(stamp) + for(var/A in messenger_plugins) + var/datum/data/pda/messenger_plugin/P = A + result = result || P.stamp_act(stamp) + return result + +/obj/item/cartridge/proc/on_id_updated() + for(var/A in programs) + var/datum/data/pda/P = A + P.on_id_updated() + for(var/A in messenger_plugins) + var/datum/data/pda/messenger_plugin/P = A + P.on_id_updated() + /obj/item/cartridge/engineering name = "Power-ON Cartridge" icon_state = "cart-e" diff --git a/code/modules/pda/pda_tgui.dm b/code/modules/pda/pda_tgui.dm index 6587438c319..cd3ec775e4b 100644 --- a/code/modules/pda/pda_tgui.dm +++ b/code/modules/pda/pda_tgui.dm @@ -23,6 +23,8 @@ var/list/prog_list = programs.Copy() if(cartridge) prog_list |= cartridge.programs + if(request_cartridge) + prog_list |= request_cartridge.programs for(var/A in prog_list) var/datum/data/pda/P = A @@ -47,6 +49,7 @@ data["idLink"] = (id ? "[id.registered_name], [id.assignment]" : "--------") data["cartridge_name"] = cartridge ? cartridge.name : "" + data["request_cartridge_name"] = request_cartridge ? request_cartridge.name : "" data["stationTime"] = station_time_timestamp() data["app"] = list() @@ -96,6 +99,24 @@ P.unnotify() cartridge = null update_shortcuts() + if("Eject_Request")//Ejects the cart, only done from hub. + if(!isnull(request_cartridge)) + var/turf/T = loc + if(ismob(T)) + T = T.loc + var/obj/item/cartridge/C = request_cartridge + C.forceMove(T) + if(scanmode in C.programs) + scanmode = null + if(current_app in C.programs) + start_program(find_program(/datum/data/pda/app/main_menu)) + if(C.radio) + C.radio.hostpda = null + for(var/datum/data/pda/P in notifying_programs) + if(P in C.programs) + P.unnotify() + request_cartridge = null + update_shortcuts() if("Authenticate")//Checks for ID id_check(usr, in_pda_usage = TRUE) if("Ringtone") diff --git a/code/modules/pda/pdas.dm b/code/modules/pda/pdas.dm index d7e2a4f29ce..3ee62d5aeb8 100644 --- a/code/modules/pda/pdas.dm +++ b/code/modules/pda/pdas.dm @@ -1,36 +1,44 @@ /obj/item/pda/medical default_cartridge = /obj/item/cartridge/medical + default_request_console_cartridge = /obj/item/cartridge/request_console/medical icon_state = "pda-medical" /obj/item/pda/viro default_cartridge = /obj/item/cartridge/medical + default_request_console_cartridge = /obj/item/cartridge/request_console/viro icon_state = "pda-virology" item_state = "pda-medical" /obj/item/pda/engineering default_cartridge = /obj/item/cartridge/engineering + default_request_console_cartridge = /obj/item/cartridge/request_console/engineering icon_state = "pda-engineer" /obj/item/pda/security default_cartridge = /obj/item/cartridge/security + default_request_console_cartridge = /obj/item/cartridge/request_console/security icon_state = "pda-security" /obj/item/pda/detective default_cartridge = /obj/item/cartridge/detective + default_request_console_cartridge = /obj/item/cartridge/request_console/detective icon_state = "pda-detective" /obj/item/pda/warden default_cartridge = /obj/item/cartridge/security + default_request_console_cartridge = /obj/item/cartridge/request_console/warden icon_state = "pda-warden" /obj/item/pda/janitor default_cartridge = /obj/item/cartridge/janitor + default_request_console_cartridge = /obj/item/cartridge/request_console/janitor icon_state = "pda-janitor" ttone = "slip" /obj/item/pda/toxins default_cartridge = /obj/item/cartridge/signal/toxins icon_state = "pda-science" + default_request_console_cartridge = /obj/item/cartridge/request_console/toxins ttone = "boom" /obj/item/pda/clown @@ -59,40 +67,49 @@ /obj/item/pda/heads/hop default_cartridge = /obj/item/cartridge/hop + default_request_console_cartridge = /obj/item/cartridge/request_console/hop icon_state = "pda-hop" /obj/item/pda/heads/hos default_cartridge = /obj/item/cartridge/hos + default_request_console_cartridge = /obj/item/cartridge/request_console/hos icon_state = "pda-hos" /obj/item/pda/heads/ce default_cartridge = /obj/item/cartridge/ce + default_request_console_cartridge = /obj/item/cartridge/request_console/ce icon_state = "pda-ce" /obj/item/pda/heads/cmo default_cartridge = /obj/item/cartridge/cmo + default_request_console_cartridge = /obj/item/cartridge/request_console/cmo icon_state = "pda-cmo" /obj/item/pda/heads/rd default_cartridge = /obj/item/cartridge/rd + default_request_console_cartridge = /obj/item/cartridge/request_console/rd icon_state = "pda-rd" /obj/item/pda/captain default_cartridge = /obj/item/cartridge/captain icon_state = "pda-captain" + default_request_console_cartridge = /obj/item/cartridge/request_console/captain detonate = 0 //toff = 1 /obj/item/pda/heads/ntrep default_cartridge = /obj/item/cartridge/supervisor + default_request_console_cartridge = /obj/item/cartridge/request_console/ntrep icon_state = "pda-h" /obj/item/pda/heads/magistrate default_cartridge = /obj/item/cartridge/supervisor + default_request_console_cartridge = /obj/item/cartridge/request_console/magistrate icon_state = "pda-h" /obj/item/pda/heads/blueshield default_cartridge = /obj/item/cartridge/hos + default_request_console_cartridge = /obj/item/cartridge/request_console/blueshield icon_state = "pda-h" /obj/item/pda/heads/ert @@ -109,14 +126,17 @@ /obj/item/pda/cargo default_cartridge = /obj/item/cartridge/quartermaster + default_request_console_cartridge = /obj/item/cartridge/request_console/cargo icon_state = "pda-cargo" /obj/item/pda/quartermaster default_cartridge = /obj/item/cartridge/quartermaster + default_request_console_cartridge = /obj/item/cartridge/request_console/quartermaster icon_state = "pda-qm" /obj/item/pda/shaftminer icon_state = "pda-miner" + default_request_console_cartridge = /obj/item/cartridge/request_console/shaftminer special_pen = /obj/item/pen/survival /obj/item/pda/syndicate @@ -144,19 +164,23 @@ /obj/item/pda/chaplain icon_state = "pda-chaplain" + default_request_console_cartridge = /obj/item/cartridge/request_console/chaplain ttone = "holy" /obj/item/pda/lawyer default_cartridge = /obj/item/cartridge/lawyer + default_request_console_cartridge = /obj/item/cartridge/request_console/lawyer icon_state = "pda-lawyer" ttone = "..." /obj/item/pda/botanist //default_cartridge = /obj/item/cartridge/botanist + default_request_console_cartridge = /obj/item/cartridge/request_console/botanist icon_state = "pda-hydro" /obj/item/pda/roboticist icon_state = "pda-roboticist" + default_request_console_cartridge = /obj/item/cartridge/request_console/roboticist /obj/item/pda/librarian icon_state = "pda-library" @@ -175,25 +199,31 @@ model_name = "Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition" /obj/item/pda/chef + default_request_console_cartridge = /obj/item/cartridge/request_console/chef icon_state = "pda-chef" /obj/item/pda/bar icon_state = "pda-bartender" + default_request_console_cartridge = /obj/item/cartridge/request_console/bar /obj/item/pda/atmos default_cartridge = /obj/item/cartridge/atmos + default_request_console_cartridge = /obj/item/cartridge/request_console/atmos icon_state = "pda-atmos" /obj/item/pda/chemist default_cartridge = /obj/item/cartridge/chemistry icon_state = "pda-chemistry" + default_request_console_cartridge = /obj/item/cartridge/request_console/chemist /obj/item/pda/geneticist default_cartridge = /obj/item/cartridge/medical icon_state = "pda-genetics" + default_request_console_cartridge = /obj/item/cartridge/request_console/geneticist /obj/item/pda/centcom default_cartridge = /obj/item/cartridge/centcom + default_request_console_cartridge = /obj/item/cartridge/request_console/centcom icon_state = "pda-h" /obj/item/pda/centcom/New() diff --git a/code/modules/pda/request_consoles_app.dm b/code/modules/pda/request_consoles_app.dm new file mode 100644 index 00000000000..159e7a0b513 --- /dev/null +++ b/code/modules/pda/request_consoles_app.dm @@ -0,0 +1,298 @@ +/datum/data/pda/app/request_console + name = "Request Consoles" + title = "Request Consoles" + icon = "archive" + template = "pda_request_console" + category = "Request Console" + update = PDA_APP_UPDATE + var/list/department_list + var/list/possible_consoles = list() + var/ore_message_reciver_dep + var/obj/machinery/requests_console/selected_console + +/datum/data/pda/app/request_console/New() + . = ..() + for(var/C in (GLOB.allRequestConsoles)) + var/obj/machinery/requests_console/console = C + if(QDELETED(console) || !istype(console)) + continue + if(console.department in department_list) + possible_consoles |= console + department_list -= console.department + console.connected_apps |= src + + +/datum/data/pda/app/request_console/Destroy() + selected_console = null + LAZYNULL(possible_consoles) + . = ..() + +/datum/data/pda/app/request_console/proc/on_rc_destroyed(datum/source) + possible_consoles -= source + SStgui.update_uis(pda) + +/datum/data/pda/app/request_console/proc/on_rc_message_recieved(obj/machinery/requests_console/source, message, isoremessage) + SIGNAL_HANDLER + if(isoremessage && source.department != ore_message_reciver_dep) + return + var/rendered_message = "Recieved on [source.name] : [message]" + if(!QDELETED(pda)) + notify(rendered_message) + + +/datum/data/pda/app/request_console/update_ui(mob/user, list/data) + if(selected_console) + data += selected_console.ui_data(user) + data["selected_console"] = selected_console.name + else + data["selected_console"] = null + var/list/possible_consoles_data= list() + for(var/obj/machinery/requests_console/console as anything in possible_consoles) + possible_consoles_data += list(list("name" = console.name, "priority" = console.newmessagepriority)) + data["consoles_data"] = possible_consoles_data + +/datum/data/pda/app/request_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + switch(action) + if("select") + var/name = params["name"] + for(var/atom/console as anything in possible_consoles) + if(console.name == name) + selected_console = console + title = console.name + break + unnotify() + if("back") + selected_console = null + title = initial(title) + else + selected_console?.ui_act(action, params, ui, state) + login() + SStgui.update_uis(pda) + + +/datum/data/pda/app/request_console/on_id_updated() + login() + + +/datum/data/pda/app/request_console/proc/login() + if(pda.id && selected_console) + selected_console.login_console(selected_console.screen, pda.id, pda, usr) + + +/datum/data/pda/app/request_console/stamp_act(obj/item/stamp/stamp) + if(!..() || !selected_console) + return FALSE + var/result = selected_console.stamp_messauth(selected_console.screen, stamp, pda, usr) + if(ATTACK_CHAIN_SUCCESS_CHECK(result)) + return TRUE + return FALSE + +/datum/data/pda/app/request_console/cargo + department_list = list(RC_CARGO_BAY) + +/datum/data/pda/app/request_console/shaftminer + department_list = list(RC_CARGO_BAY) + +/datum/data/pda/app/request_console/botanist + department_list = list(RC_HYDROPONICS) + +/datum/data/pda/app/request_console/chef + department_list = list(RC_KITCHEN) + +/datum/data/pda/app/request_console/bar + department_list = list(RC_BAR) + +/datum/data/pda/app/request_console/janitor + department_list = list(RC_JANITORIAL) + +/datum/data/pda/app/request_console/chaplain + department_list = list(RC_CHAPEL) + +/datum/data/pda/app/request_console/security + department_list = list(RC_SECURITY) + +/datum/data/pda/app/request_console/clown_security + department_list = list(RC_SECURITY) + +/datum/data/pda/app/request_console/lawyer + department_list = list(RC_INTERNAL_AFFAIRS_OFFICE) + +/datum/data/pda/app/request_console/medical + department_list = list( + RC_MEDBAY, + RC_MORGUE + ) + +/datum/data/pda/app/request_console/viro + department_list = list( + RC_MEDBAY, + RC_VIROLOGY, + RC_MORGUE + ) + +/datum/data/pda/app/request_console/engineering + department_list = list( + RC_TECH_STORAGE, + RC_ENGINEERING, + RC_ATMOSPHERICS, + RC_MECHANIC + ) + ore_message_reciver_dep = RC_MECHANIC + + +/datum/data/pda/app/request_console/detective + department_list = list( + RC_SECURITY, + RC_DETECTIVE + ) + +/datum/data/pda/app/request_console/warden + department_list = list( + RC_SECURITY, + RC_WARDEN, + RC_LABOR_CAMP + ) + +/datum/data/pda/app/request_console/toxins + department_list = list( + RC_SCIENCE, + RC_ROBOTICS, + RC_RESEARCH, + RC_XENOBIOLOGY + ) + ore_message_reciver_dep = RC_RESEARCH + +/datum/data/pda/app/request_console/hop + department_list = list( + RC_BAR, + RC_KITCHEN, + RC_HEAD_OF_PERSONNEL_DESK, + RC_BRIDGE, + RC_HYDROPONICS, + RC_JANITORIAL, + RC_CHAPEL + ) + +/datum/data/pda/app/request_console/hos + department_list = list(RC_SECURITY, + RC_WARDEN, + RC_LABOR_CAMP, + RC_HEAD_OF_SECURITY_DESK, + RC_BRIDGE, + RC_DETECTIVE) + +/datum/data/pda/app/request_console/ce + department_list = list( + RC_TECH_STORAGE, + RC_ENGINEERING, + RC_ATMOSPHERICS, + RC_MECHANIC, + RC_BRIDGE, + RC_AI, + RC_CHIEF_ENGINEER_DESK + ) + ore_message_reciver_dep = RC_MECHANIC + +/datum/data/pda/app/request_console/cmo + department_list = list( + RC_MEDBAY, + RC_VIROLOGY, + RC_MORGUE, + RC_GENETICS, + RC_BRIDGE, + RC_CHEMISTRY, + RC_CHIEF_MEDICAL_OFFICER_DESK + ) + +/datum/data/pda/app/request_console/rd + department_list = list( + RC_SCIENCE, + RC_ROBOTICS, + RC_RESEARCH, + RC_XENOBIOLOGY, + RC_GENETICS, + RC_BRIDGE, + RC_AI, + RC_RESEARCH_DIRECTOR_DESK + ) + ore_message_reciver_dep = RC_RESEARCH + +/datum/data/pda/app/request_console/captain + department_list = list( + RC_CHIEF_ENGINEER_DESK, + RC_CHIEF_MEDICAL_OFFICER_DESK, + RC_HEAD_OF_PERSONNEL_DESK, + RC_HEAD_OF_SECURITY_DESK, + RC_BRIDGE, + RC_QUARTERMASTER_DESK, + RC_AI, + RC_CAPTAIN_DESK, + RC_RESEARCH_DIRECTOR_DESK + ) + ore_message_reciver_dep = RC_RESEARCH_DIRECTOR_DESK + +/datum/data/pda/app/request_console/ntrep + department_list = list( + RC_NT_REPRESENTATIVE, + RC_BLUESHIELD, + RC_INTERNAL_AFFAIRS_OFFICE, + RC_BRIDGE + ) + +/datum/data/pda/app/request_console/magistrate + department_list = list( + RC_INTERNAL_AFFAIRS_OFFICE, + RC_BRIDGE + ) + +/datum/data/pda/app/request_console/blueshield + department_list = list( + RC_BLUESHIELD, + RC_BRIDGE + ) + +/datum/data/pda/app/request_console/quartermaster + department_list = list( + RC_CARGO_BAY, + RC_QUARTERMASTER_DESK, + RC_BRIDGE + ) + +/datum/data/pda/app/request_console/roboticist + department_list = list( + RC_RESEARCH, + RC_SCIENCE, + RC_ROBOTICS + ) + ore_message_reciver_dep = RC_ROBOTICS + +/datum/data/pda/app/request_console/atmos + department_list = list( + RC_TECH_STORAGE, + RC_ATMOSPHERICS, + RC_ENGINEERING + ) + ore_message_reciver_dep = RC_ATMOSPHERICS + +/datum/data/pda/app/request_console/chemist + department_list = list( + RC_CHEMISTRY, + RC_MEDBAY + ) + +/datum/data/pda/app/request_console/geneticist + department_list = list( + RC_GENETICS, + RC_MEDBAY + ) + +/datum/data/pda/app/request_console/centcom + department_list = list( + RC_BRIDGE, + RC_AI, + RC_BLUESHIELD, + RC_INTERNAL_AFFAIRS_OFFICE, + RC_NT_REPRESENTATIVE, + RC_CENTRAL_COMMAND, + RC_CAPTAIN_DESK + ) diff --git a/code/modules/pda/request_consoles_cart.dm b/code/modules/pda/request_consoles_cart.dm new file mode 100644 index 00000000000..f0d86786259 --- /dev/null +++ b/code/modules/pda/request_consoles_cart.dm @@ -0,0 +1,130 @@ +/obj/item/cartridge/request_console + name = "Request Console" + icon_state = "cart-req" + programs = list(new /datum/data/pda/app/request_console) + +/obj/item/cartridge/request_console/medical + name = "Medical Request" + programs = list(new /datum/data/pda/app/request_console/medical) + +/obj/item/cartridge/request_console/viro + name = "Virology Request" + programs = list(new /datum/data/pda/app/request_console/viro) + +/obj/item/cartridge/request_console/engineering + name = "Engineering Request" + programs = list(new /datum/data/pda/app/request_console/engineering) + +/obj/item/cartridge/request_console/security + name = "Security Request" + programs = list(new /datum/data/pda/app/request_console/security) + +/obj/item/cartridge/request_console/detective + name = "Detective Request" + programs = list(new /datum/data/pda/app/request_console/detective) + +/obj/item/cartridge/request_console/warden + name = "Warden Request" + programs = list(new /datum/data/pda/app/request_console/warden) + +/obj/item/cartridge/request_console/janitor + name = "Janitor Request" + programs = list(new /datum/data/pda/app/request_console/janitor) + +/obj/item/cartridge/request_console/toxins + name = "Sciense Request" + programs = list(new /datum/data/pda/app/request_console/toxins) + +/obj/item/cartridge/request_console/hop + name = "HOP Request" + programs = list(new /datum/data/pda/app/request_console/hop) + +/obj/item/cartridge/request_console/hos + name = "HOS Request" + programs = list(new /datum/data/pda/app/request_console/hos) + +/obj/item/cartridge/request_console/ce + name = "CE Request" + programs = list(new /datum/data/pda/app/request_console/ce) + +/obj/item/cartridge/request_console/cmo + name = "CMO Request" + programs = list(new /datum/data/pda/app/request_console/cmo) + +/obj/item/cartridge/request_console/rd + name = "RD Request" + programs = list(new /datum/data/pda/app/request_console/rd) + +/obj/item/cartridge/request_console/captain + name = "Captain Request" + programs = list(new /datum/data/pda/app/request_console/captain) + + +/obj/item/cartridge/request_console/ntrep + name = "NTR Request" + programs = list(new /datum/data/pda/app/request_console/ntrep) + +/obj/item/cartridge/request_console/magistrate + name = "Magistrate Request" + programs = list(new /datum/data/pda/app/request_console/magistrate) + +/obj/item/cartridge/request_console/blueshield + name = "Blueshield Request" + programs = list(new /datum/data/pda/app/request_console/blueshield) + +/obj/item/cartridge/request_console/cargo + name = "Cargo Request" + programs = list(new /datum/data/pda/app/request_console/cargo) + +/obj/item/cartridge/request_console/quartermaster + name = "QM Request" + programs = list(new /datum/data/pda/app/request_console/quartermaster) + +/obj/item/cartridge/request_console/shaftminer + name = "Shaftminer Request" + programs = list(new /datum/data/pda/app/request_console/shaftminer) + +/obj/item/cartridge/request_console/chaplain + name = "Chaplain Request" + programs = list(new /datum/data/pda/app/request_console/chaplain) + +/obj/item/cartridge/request_console/lawyer + name = "Internal Affairs Request" + programs = list(new /datum/data/pda/app/request_console/lawyer) + +/obj/item/cartridge/request_console/botanist + name = "Botanist Request" + programs = list(new /datum/data/pda/app/request_console/botanist) + +/obj/item/cartridge/request_console/roboticist + name = "Roboticist Request" + programs = list(new /datum/data/pda/app/request_console/roboticist) + +/obj/item/cartridge/request_console/chef + name = "Chef Request" + programs = list(new /datum/data/pda/app/request_console/chef) + +/obj/item/cartridge/request_console/bar + name = "Bartender Request" + programs = list(new /datum/data/pda/app/request_console/bar) + +/obj/item/cartridge/request_console/atmos + name = "Atmospherics Request" + programs = list(new /datum/data/pda/app/request_console/atmos) + +/obj/item/cartridge/request_console/chemist + name = "Chemist Request" + programs = list(new /datum/data/pda/app/request_console/chemist) + +/obj/item/cartridge/request_console/geneticist + name = "Geneticist Request" + programs = list(new /datum/data/pda/app/request_console/geneticist) + +/obj/item/cartridge/request_console/clown_security + name = "Clown Security Request" + programs = list(new /datum/data/pda/app/request_console/clown_security) + +/obj/item/cartridge/request_console/centcom + name = "Centcom Request" + programs = list(new /datum/data/pda/app/request_console/centcom) + diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index fcf50821b76..f09614ec5d3 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -100,17 +100,20 @@ GLOBAL_LIST_EMPTY(message_servers) if(RC.newmessagepriority < priority) RC.newmessagepriority = priority RC.update_icon(UPDATE_OVERLAYS) + var/rendered_message = null switch(priority) if(2) if(!RC.silent) playsound(RC.loc, 'sound/machines/twobeep.ogg', 50, 1) RC.atom_say("PRIORITY Alert in [sender]") - RC.message_log += "High Priority message from [sender]: [authmsg]" + rendered_message = "High Priority message from [sender]: [authmsg]" else if(!RC.silent) playsound(RC.loc, 'sound/machines/twobeep.ogg', 50, 1) RC.atom_say("Message from [sender]") - RC.message_log += "Message [sender]: [authmsg]" + rendered_message = "Message [sender]: [authmsg]" + if(!isnull(rendered_message)) + RC.write_to_message_log(rendered_message) /obj/machinery/message_server/attack_hand(user) // to_chat(user, "There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentComm delays.") diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index 3d44421a2cd5685e5a458497a834d33601bdde04..477e975459ffb7a308286daa60e64d344fe359af 100644 GIT binary patch literal 20964 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 literal 20766 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

k&ez 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 diff --git a/paradise.dme b/paradise.dme index 239cc358337..6a396796219 100644 --- a/paradise.dme +++ b/paradise.dme @@ -114,6 +114,7 @@ #include "code\__DEFINES\RCD.dm" #include "code\__DEFINES\reagents.dm" #include "code\__DEFINES\request.dm" +#include "code\__DEFINES\request_consoles.dm" #include "code\__DEFINES\rituals.dm" #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\rolebans.dm" @@ -2785,6 +2786,8 @@ #include "code\modules\pda\pda_tgui.dm" #include "code\modules\pda\pdas.dm" #include "code\modules\pda\radio.dm" +#include "code\modules\pda\request_consoles_app.dm" +#include "code\modules\pda\request_consoles_cart.dm" #include "code\modules\pda\utilities.dm" #include "code\modules\persistence\persistence.dm" #include "code\modules\point\point.dm" diff --git a/tgui/packages/tgui/interfaces/PDA.js b/tgui/packages/tgui/interfaces/PDA.js index 979e1bc44a0..1cc6b2e4343 100644 --- a/tgui/packages/tgui/interfaces/PDA.js +++ b/tgui/packages/tgui/interfaces/PDA.js @@ -75,7 +75,13 @@ export const PDA = (props, context) => { const PDAHeader = (props, context) => { const { act, data } = useBackend(context); - const { idInserted, idLink, stationTime, cartridge_name } = data; + const { + idInserted, + idLink, + stationTime, + cartridge_name, + request_cartridge_name, + } = data; return ( @@ -99,6 +105,18 @@ const PDAHeader = (props, context) => { } /> + +