diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 406c3ad4a3b..d51cb74f984 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -214,7 +214,10 @@ /obj/machinery/door/airlock/proc/update_other_id() for(var/obj/machinery/door/airlock/Airlock in GLOB.airlocks) if(Airlock.closeOtherId == closeOtherId && Airlock != src) - close_others += Airlock + if(!(Airlock in close_others)) + close_others += Airlock + if(!(src in Airlock.close_others)) + Airlock.close_others += src /obj/machinery/door/airlock/proc/cyclelinkairlock() if (cyclelinkedairlock) @@ -595,6 +598,10 @@ /obj/machinery/door/airlock/examine(mob/user) . = ..() + if(closeOtherId) + . += span_warning("This airlock cycles on ID: [sanitize(closeOtherId)].") + else if(!closeOtherId) + . += span_warning("This airlock does not cycle.") if(obj_flags & EMAGGED) . += span_warning("Its access panel is smoking slightly.") if(note) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 6650dee3373..e5f32d32a92 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -7,6 +7,10 @@ var/one_access = 0 /// Unrestricted sides, or sides of the airlock that will open regardless of access var/unres_sides = 0 + ///what name are we passing to the finished airlock + var/passed_name + ///what string are we passing to the finished airlock as the cycle ID + var/passed_cycle_id /// A holder of the electronics, in case of them working as an integrated part var/holder @@ -39,6 +43,8 @@ data["accesses"] = accesses data["oneAccess"] = one_access data["unres_direction"] = unres_sides + data["passedName"] = passed_name + data["passedCycleId"] = passed_cycle_id return data /obj/item/electronics/airlock/ui_act(action, params) @@ -80,6 +86,14 @@ return accesses -= SSid_access.get_region_access_list(list(region)) . = TRUE + if("passedName") + var/new_name = trim("[params["passedName"]]", 30) + passed_name = new_name + . = TRUE + if("passedCycleId") + var/new_cycle_id = trim(params["passedCycleId"], 30) + passed_cycle_id = new_cycle_id + . = TRUE /obj/item/electronics/airlock/ui_host() if(holder) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index c0ebc28bdb0..800a9f7f4de 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -259,8 +259,13 @@ door.req_access = electronics.accesses if(created_name) door.name = created_name + else if(electronics.passed_name) + door.name = sanitize(electronics.passed_name) else door.name = base_name + if(electronics.passed_cycle_id) + door.closeOtherId = electronics.passed_cycle_id + door.update_other_id() door.previous_airlock = previous_assembly electronics.forceMove(door) door.update_appearance() diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index d9efc7bb5af..dd61a6b94b9 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -298,12 +298,19 @@ new_airlock.electronics.accesses = the_rcd.airlock_electronics.accesses.Copy() new_airlock.electronics.one_access = the_rcd.airlock_electronics.one_access new_airlock.electronics.unres_sides = the_rcd.airlock_electronics.unres_sides + new_airlock.electronics.passed_name = the_rcd.airlock_electronics.passed_name + new_airlock.electronics.passed_cycle_id = the_rcd.airlock_electronics.passed_cycle_id if(new_airlock.electronics.one_access) new_airlock.req_one_access = new_airlock.electronics.accesses else new_airlock.req_access = new_airlock.electronics.accesses if(new_airlock.electronics.unres_sides) new_airlock.unres_sides = new_airlock.electronics.unres_sides + if(new_airlock.electronics.passed_name) + new_airlock.name = sanitize(new_airlock.electronics.passed_name) + if(new_airlock.electronics.passed_cycle_id) + new_airlock.closeOtherId = new_airlock.electronics.passed_cycle_id + new_airlock.update_other_id() new_airlock.autoclose = TRUE new_airlock.update_appearance() return TRUE diff --git a/tgui/packages/tgui/interfaces/AirlockElectronics.js b/tgui/packages/tgui/interfaces/AirlockElectronics.js index c37d8513196..24d2cefa757 100644 --- a/tgui/packages/tgui/interfaces/AirlockElectronics.js +++ b/tgui/packages/tgui/interfaces/AirlockElectronics.js @@ -1,5 +1,5 @@ import { useBackend, useLocalState } from '../backend'; -import { Button, Flex, Grid, LabeledList, Section, Tabs } from '../components'; +import { Button, Flex, Grid, Input, LabeledList, Section, Tabs } from '../components'; import { Window } from '../layouts'; import { sortBy } from 'common/collections'; @@ -8,6 +8,8 @@ export const AirlockElectronics = (props, context) => { const { oneAccess, unres_direction, + passedName, + passedCycleId, } = data; const regions = data.regions || []; const accesses = data.accesses || []; @@ -56,6 +58,24 @@ export const AirlockElectronics = (props, context) => { unres_direction: '8', })} /> + + act('passedName', { + passedName: value, + })} /> + + + act('passedCycleId', { + passedCycleId: value, + })} /> +