#define AIRLOCK_CONTROL_RANGE 5 // This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access) /obj/machinery/door/airlock var/id_tag var/frequency var/datum/radio_frequency/radio_connection /obj/machinery/door/airlock/receive_signal(datum/signal/signal) if(!signal || signal.encryption) return if(id_tag != signal.data["tag"] || !signal.data["command"]) return switch(signal.data["command"]) if("open") open(1) if("close") close(1) if("unlock") locked = FALSE update_icon() if("lock") locked = TRUE update_icon() if("secure_open") locked = FALSE update_icon() sleep(2) open(1) locked = TRUE update_icon() if("secure_close") locked = FALSE close(1) locked = TRUE sleep(2) update_icon() send_status() /obj/machinery/door/airlock/proc/send_status() if(radio_connection) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = id_tag signal.data["timestamp"] = world.time signal.data["door_status"] = density?("closed"):("open") signal.data["lock_status"] = locked?("locked"):("unlocked") radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) /obj/machinery/door/airlock/open(surpress_send) . = ..() if(!surpress_send) send_status() /obj/machinery/door/airlock/close(surpress_send) . = ..() if(!surpress_send) send_status() /obj/machinery/door/airlock/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) if(new_frequency) frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) /obj/machinery/door/airlock/Destroy() if(frequency && SSradio) SSradio.remove_object(src,frequency) return ..() /obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_sensor_off" name = "airlock sensor" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF anchored = TRUE power_channel = ENVIRON var/id_tag var/master_tag var/frequency = 1449 var/datum/radio_frequency/radio_connection var/on = TRUE var/alert = FALSE /obj/machinery/airlock_sensor/update_icon() if(on) if(alert) icon_state = "airlock_sensor_alert" else icon_state = "airlock_sensor_standby" else icon_state = "airlock_sensor_off" /obj/machinery/airlock_sensor/attack_hand(mob/user) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = master_tag signal.data["command"] = "cycle" radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) /obj/machinery/airlock_sensor/process() if(on) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = id_tag signal.data["timestamp"] = world.time var/datum/gas_mixture/air_sample = return_air() var/pressure = round(air_sample.return_pressure(),0.1) alert = (pressure < ONE_ATMOSPHERE*0.8) signal.data["pressure"] = num2text(pressure) radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) update_icon() /obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) /obj/machinery/airlock_sensor/Initialize() . = ..() set_frequency(frequency) /obj/machinery/airlock_sensor/Destroy() SSradio.remove_object(src,frequency) return ..()