Air alarms improved. New functions are:

- mass control all air machines in area (5 modes)
 - adjustable alarm thresholds
 - air alarm in server room now is preset to treat temperature 80 K as okay.
EMP now affects bots internal cameras.
Fixed problem with AI clicking on mulebot.
Some fixes for welding with unlit welder, mostly cosmetic.
Airlock controller (as in EVA) now react to commands faster.
Access controller (was in engineering and virology in past) was speeded up too. One is installed into Incinerator to demonstrate that now it isn't fucking slow.
Airlock in toxin mixing room now have pump, so airlock can work properly.
Added some intercoms to medbay lobby.
Doors now won't lag due do mapmakers mistakes.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1187 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
rastaf.zero@gmail.com
2011-03-14 19:21:02 +00:00
parent b1a5289490
commit 2530b5b995
28 changed files with 7619 additions and 7320 deletions

View File

@@ -120,15 +120,17 @@
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data["tag"] = id signal.data = list(
signal.data["device"] = "ADVP" "tag" = id,
signal.data["power"] = on?("on"):("off") "device" = "ADVP",
signal.data["direction"] = pump_direction?("release"):("siphon") "power" = on,
signal.data["checks"] = pressure_checks "direction" = pump_direction?("release"):("siphon"),
signal.data["input"] = input_pressure_min "checks" = pressure_checks,
signal.data["output"] = output_pressure_max "input" = input_pressure_min,
signal.data["external"] = external_pressure_bound "output" = output_pressure_max,
"external" = external_pressure_bound,
"sigtype" = "status"
)
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
return 1 return 1
@@ -143,57 +145,55 @@
set_frequency(frequency) set_frequency(frequency)
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id)) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("power" in signal.data)
if("power_on") on = text2num(signal.data["power"])
on = 1
if("power_off") if("power_toggle" in signal.data)
on = 0 on = !on
if("power_toggle") if("set_direction" in signal.data)
on = !on pump_direction = text2num(signal.data["set_direction"])
if("set_direction") if("checks" in signal.data)
var/number = text2num(signal.data["parameter"]) pressure_checks = text2num(signal.data["checks"])
if(number > 0.5)
pump_direction = 1
else
pump_direction = 0
if("set_checks") if("purge" in signal.data)
var/number = round(text2num(signal.data["parameter"]),1) pressure_checks &= ~1
pressure_checks = number pump_direction = 0
if("purge") if("stabalize" in signal.data)
pressure_checks &= ~1 pressure_checks |= 1
pump_direction = 0 pump_direction = 1
if("stabalize") if("set_input_pressure" in signal.data)
pressure_checks |= 1 input_pressure_min = between(
pump_direction = 1 0,
text2num(signal.data["set_input_pressure"]),
ONE_ATMOSPHERE*50
)
if("set_input_pressure") if("set_output_pressure" in signal.data)
var/number = text2num(signal.data["parameter"]) output_pressure_max = between(
number = min(max(number, 0), ONE_ATMOSPHERE*50) 0,
text2num(signal.data["set_output_pressure"]),
ONE_ATMOSPHERE*50
)
input_pressure_min = number if("set_external_pressure" in signal.data)
external_pressure_bound = between(
if("set_output_pressure") 0,
var/number = text2num(signal.data["parameter"]) text2num(signal.data["set_external_pressure"]),
number = min(max(number, 0), ONE_ATMOSPHERE*50) ONE_ATMOSPHERE*50
)
output_pressure_max = number
if("set_external_pressure")
var/number = text2num(signal.data["parameter"])
number = min(max(number, 0), ONE_ATMOSPHERE*50)
external_pressure_bound = number
if("status" in signal.data)
spawn(2)
broadcast_status()
return //do not update_icon
//if(signal.data["tag"]) //if(signal.data["tag"])
spawn(5) spawn(2)
broadcast_status() broadcast_status()
update_icon() update_icon()

View File

@@ -22,6 +22,10 @@ obj/machinery/atmospherics/binary/pump
var/on = 0 var/on = 0
var/target_pressure = ONE_ATMOSPHERE var/target_pressure = ONE_ATMOSPHERE
var/frequency = 0
var/id = null
var/datum/radio_frequency/radio_connection
/* /*
attack_hand(mob/user) attack_hand(mob/user)
on = !on on = !on
@@ -87,14 +91,18 @@ obj/machinery/atmospherics/binary/pump
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data["tag"] = id signal.data = list(
signal.data["device"] = "AGP" "tag" = id,
signal.data["power"] = on "device" = "AGP",
signal.data["target_output"] = target_pressure "power" = on,
"target_output" = target_pressure,
"sigtype" = "status"
)
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
return 1 return 1
interact(mob/user as mob) interact(mob/user as mob)
var/dat = {"<b>Power: </b><a href='?src=\ref[src];power=1'>[on?"On":"Off"]</a><br> var/dat = {"<b>Power: </b><a href='?src=\ref[src];power=1'>[on?"On":"Off"]</a><br>
<b>Desirable output pressure: </b> <b>Desirable output pressure: </b>
@@ -104,35 +112,34 @@ obj/machinery/atmospherics/binary/pump
user << browse("<HEAD><TITLE>[src.name] control</TITLE></HEAD><TT>[dat]</TT>", "window=atmo_pump") user << browse("<HEAD><TITLE>[src.name] control</TITLE></HEAD><TT>[dat]</TT>", "window=atmo_pump")
onclose(user, "atmo_pump") onclose(user, "atmo_pump")
var/frequency = 0
var/id = null
var/datum/radio_frequency/radio_connection
initialize() initialize()
..() ..()
if(frequency) if(frequency)
set_frequency(frequency) set_frequency(frequency)
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id)) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("power" in signal.data)
if("power_on") on = text2num(signal.data["power"])
on = 1
if("power_off") if("power_toggle" in signal.data)
on = 0 on = !on
if("power_toggle") if("set_output_pressure" in signal.data)
on = !on target_pressure = between(
0,
text2num(signal.data["set_output_pressure"]),
ONE_ATMOSPHERE*50
)
if("set_output_pressure") if("status" in signal.data)
var/number = text2num(signal.data["parameter"]) spawn(2)
number = min(max(number, 0), ONE_ATMOSPHERE*50) broadcast_status()
return //do not update_icon
target_pressure = number spawn(2)
spawn(5)
broadcast_status() broadcast_status()
update_icon() update_icon()
return return

View File

@@ -74,11 +74,13 @@ obj/machinery/atmospherics/binary/volume_pump
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data["tag"] = id signal.data = list(
signal.data["device"] = "APV" "tag" = id,
signal.data["power"] = on "device" = "APV",
signal.data["transfer_rate"] = transfer_rate "power" = on,
"transfer_rate" = transfer_rate,
"sigtype" = "status"
)
radio_connection.post_signal(src, signal) radio_connection.post_signal(src, signal)
return 1 return 1
@@ -89,25 +91,27 @@ obj/machinery/atmospherics/binary/volume_pump
set_frequency(frequency) set_frequency(frequency)
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id)) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("power" in signal.data)
if("power_on") on = text2num(signal.data["power"])
on = 1
if("power_off") if("power_toggle" in signal.data)
on = 0 on = !on
if("power_toggle") if("set_transfer_rate" in signal.data)
on = !on transfer_rate = between(
0,
text2num(signal.data["set_transfer_rate"]),
air1.volume
)
if("set_transfer_rate") if("status" in signal.data)
var/number = text2num(signal.data["parameter"]) spawn(2)
number = min(max(number, 0), air1.volume) broadcast_status()
return //do not update_icon
transfer_rate = number spawn(2)
spawn(5)
broadcast_status() broadcast_status()
update_icon() update_icon()

View File

@@ -80,10 +80,14 @@
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data["tag"] = id signal.data = list(
signal.data["device"] = "AO" "tag" = id,
signal.data["power"] = on "device" = "AO",
signal.data["volume_rate"] = volume_rate "power" = on,
"volume_rate" = volume_rate,
//"timestamp" = world.time,
"sigtype" = "status"
)
radio_connection.post_signal(src, signal) radio_connection.post_signal(src, signal)
@@ -95,36 +99,31 @@
set_frequency(frequency) set_frequency(frequency)
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id) || !signal.data["command"]) if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("power" in signal.data)
if("power_on") on = text2num(signal.data["power"])
on = 1
if("power_off") if("power_toggle" in signal.data)
on = 0 on = !on
if("power_toggle") if("inject" in signal.data)
on = !on spawn inject()
return
if("inject") if("set_volume_rate" in signal.data)
spawn inject() var/number = text2num(signal.data["set_volume_rate"])
return volume_rate = between(0, number, air_contents.volume)
if("set_volume_rate") if("status" in signal.data)
var/number = text2num(signal.data["parameter"]) spawn(2)
number = min(max(number, 0), air_contents.volume) broadcast_status()
return //do not update_icon
volume_rate = number //log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
//return
if("status") spawn(2)
//broadcast_status
else
log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
return
spawn(5)
broadcast_status() broadcast_status()
update_icon() update_icon()

View File

@@ -64,7 +64,7 @@
return return
if (!node) if (!node)
on = 0 on = 0
//broadcast_status() //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
if(!on) if(!on)
return 0 return 0
@@ -136,12 +136,13 @@
"area" = src.area_uid, "area" = src.area_uid,
"tag" = src.id_tag, "tag" = src.id_tag,
"device" = "AVP", "device" = "AVP",
"power" = on?("on"):("off"), "power" = on,
"direction" = pump_direction?("release"):("siphon"), "direction" = pump_direction?("release"):("siphon"),
"checks" = pressure_checks, "checks" = pressure_checks,
"internal" = internal_pressure_bound, "internal" = internal_pressure_bound,
"external" = external_pressure_bound, "external" = external_pressure_bound,
"timestamp" = air_master.current_cycle, "timestamp" = world.time,
"sigtype" = "status"
) )
radio_connection.post_signal(src, signal, radio_filter_out) radio_connection.post_signal(src, signal, radio_filter_out)
@@ -153,74 +154,82 @@
..() ..()
//some vents work his own spesial way //some vents work his own spesial way
radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null
radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null
if(frequency) if(frequency)
set_frequency(frequency) set_frequency(frequency)
update_icon()
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(stat & (NOPOWER|BROKEN))
return
//log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])")
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || !signal.data["command"]) if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("purge" in signal.data)
if("power_on") pressure_checks &= ~1
on = 1 pump_direction = 0
if("power_off") if("stabalize" in signal.data)
on = 0 pressure_checks |= 1
pump_direction = 1
if("power_toggle") if("power" in signal.data)
on = !on on = text2num(signal.data["power"])
if("toggle_checks") if("power_toggle" in signal.data)
pressure_checks = (pressure_checks?0:3) on = !on
if("set_direction") if("checks" in signal.data)
var/number = text2num(signal.data["parameter"]) pressure_checks = text2num(signal.data["checks"])
if(number > 0.5)
pump_direction = 1
else
pump_direction = 0
if("purge") if("checks_toggle" in signal.data)
pressure_checks &= ~1 pressure_checks = (pressure_checks?0:3)
pump_direction = 0
if("stabalize") if("direction" in signal.data)
pressure_checks |= 1 pump_direction = text2num(signal.data["direction"])
pump_direction = 1
if("set_checks") if("set_internal_pressure" in signal.data)
var/number = round(text2num(signal.data["parameter"]),1) internal_pressure_bound = between(
pressure_checks = number 0,
text2num(signal.data["set_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if("set_internal_pressure") if("set_external_pressure" in signal.data)
var/number = text2num(signal.data["parameter"]) external_pressure_bound = between(
number = min(max(number, 0), ONE_ATMOSPHERE*50) 0,
text2num(signal.data["set_external_pressure"]),
ONE_ATMOSPHERE*50
)
internal_pressure_bound = number if("adjust_internal_pressure" in signal.data)
internal_pressure_bound = between(
0,
internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if("set_external_pressure") if("adjust_external_pressure" in signal.data)
var/number = text2num(signal.data["parameter"]) external_pressure_bound = between(
number = min(max(number, 0), ONE_ATMOSPHERE*50) 0,
external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),
ONE_ATMOSPHERE*50
)
external_pressure_bound = number if("init" in signal.data)
name = signal.data["init"]
return
if("init") if("status" in signal.data)
name = signal.data["parameter"] spawn(2)
return broadcast_status()
return //do not update_icon
if("status") //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
//broadcast_status
else
log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
return
spawn(2) spawn(2)
broadcast_status() broadcast_status()
update_icon() update_icon()
return return
hide(var/i) //to make the little pipe section invisible, the icon changes. hide(var/i) //to make the little pipe section invisible, the icon changes.
@@ -235,7 +244,7 @@
return return
attackby(obj/item/W, mob/user) attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/weldingtool)) if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if (W:remove_fuel(2,user)) if (W:remove_fuel(2,user))
user << "\blue Now welding the vent." user << "\blue Now welding the vent."
if(do_after(user, 20)) if(do_after(user, 20))

View File

@@ -63,13 +63,14 @@
"area" = area_uid, "area" = area_uid,
"tag" = id_tag, "tag" = id_tag,
"device" = "AScr", "device" = "AScr",
"timestamp" = air_master.current_cycle, "timestamp" = world.time,
"on" = on, "power" = on,
"scrubbing" = scrubbing, "scrubbing" = scrubbing,
"panic" = panic, "panic" = panic,
"filter_co2" = scrub_CO2, "filter_co2" = scrub_CO2,
"filter_toxins" = scrub_Toxins, "filter_toxins" = scrub_Toxins,
"filter_n2o" = scrub_N2O, "filter_n2o" = scrub_N2O,
"sigtype" = "status"
) )
radio_connection.post_signal(src, signal, radio_filter_out) radio_connection.post_signal(src, signal, radio_filter_out)
@@ -160,42 +161,68 @@
*/ */
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || !signal.data["command"]) if(stat & (NOPOWER|BROKEN))
return
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
return 0 return 0
switch(signal.data["command"]) if("power" in signal.data)
if("toggle_power") on = text2num(signal.data["power"])
on = !on if("power_toggle" in signal.data)
if("toggle_scrubbing") on = !on
scrubbing = !scrubbing
if("toggle_co2_scrub")
scrub_CO2 = !scrub_CO2
if("toggle_tox_scrub")
scrub_Toxins = !scrub_Toxins
if("toggle_n2o_scrub")
scrub_N2O = !scrub_N2O
if("toggle_panic_siphon")
panic = !panic
if(panic)
on = 1
scrubbing = 0
volume_rate = 2000
else
scrubbing = 1
volume_rate = initial(volume_rate)
if("init")
name = signal.data["parameter"]
return
if("status")
//broadcast_status
if("panic_siphon" in signal.data) //must be before if("scrubbing" thing
panic = text2num(signal.data["panic_siphon"])
if(panic)
on = 1
scrubbing = 0
volume_rate = 2000
else else
log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") scrubbing = 1
return volume_rate = initial(volume_rate)
if("toggle_panic_siphon" in signal.data)
panic = !panic
if(panic)
on = 1
scrubbing = 0
volume_rate = 2000
else
scrubbing = 1
volume_rate = initial(volume_rate)
if("scrubbing" in signal.data)
scrubbing = text2num(signal.data["scrubbing"])
if("toggle_scrubbing" in signal.data)
scrubbing = !scrubbing
if("co2_scrub" in signal.data)
scrub_CO2 = text2num(signal.data["co2_scrub"])
if("toggle_co2_scrub" in signal.data)
scrub_CO2 = !scrub_CO2
if("tox_scrub" in signal.data)
scrub_Toxins = text2num(signal.data["tox_scrub"])
if("toggle_tox_scrub" in signal.data)
scrub_Toxins = !scrub_Toxins
if("n2o_scrub" in signal.data)
scrub_N2O = text2num(signal.data["n2o_scrub"])
if("toggle_n2o_scrub" in signal.data)
scrub_N2O = !scrub_N2O
if("init" in signal.data)
name = signal.data["init"]
return
if("status" in signal.data)
spawn(2)
broadcast_status()
return //do not update_icon
// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2) spawn(2)
broadcast_status() broadcast_status()
update_icon() update_icon()
return return
power_change() power_change()

View File

@@ -63,7 +63,7 @@
icon_state = "alert:0" icon_state = "alert:0"
var/list/priority_alarms = list() var/list/priority_alarms = list()
var/list/minor_alarms = list() var/list/minor_alarms = list()
var/receive_frequency = "1437" var/receive_frequency = 1437
/obj/machinery/computer/atmosphere/siphonswitch /obj/machinery/computer/atmosphere/siphonswitch

View File

@@ -18,17 +18,6 @@
global global
gl_uid = 1 gl_uid = 1
/obj/machinery/alarm
name = "alarm"
icon = 'monitors.dmi'
icon_state = "alarm0"
anchored = 1.0
var/skipprocess = 0 //Experimenting
var/alarm_frequency = "1437"
use_power = 1
idle_power_usage = 5
active_power_usage = 0
/obj/machinery/autolathe /obj/machinery/autolathe
name = "Autolathe" name = "Autolathe"
icon_state = "autolathe" icon_state = "autolathe"

View File

@@ -32,7 +32,7 @@
heat_capacity = 700000 heat_capacity = 700000
/turf/space/New() /turf/space/New()
icon = 'space.dmi' // icon = 'space.dmi'
icon_state = "[pick(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)]" icon_state = "[pick(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)]"
/turf/simulated /turf/simulated

View File

@@ -83,33 +83,30 @@
a.triggerAlarm("Power", src, source) a.triggerAlarm("Power", src, source)
return return
/area/proc/atmosalert() /area/proc/atmosalert(danger_level)
if(src.name == "Space") //No atmos alarms in space // if(src.type==/area) //No atmos alarms in space
return // return 0 //redudant
if(!(src.atmosalm)) if(danger_level != src.atmosalm)
src.atmosalm = 1
//src.updateicon() //src.updateicon()
src.mouse_opacity = 0 //src.mouse_opacity = 0
var/list/cameras = list() if (danger_level==2)
for(var/obj/machinery/camera/C in src) var/list/cameras = list()
cameras += C for(var/area/RA in src.related)
for(var/mob/living/silicon/aiPlayer in world) //src.updateicon()
aiPlayer.triggerAlarm("Atmosphere", src, cameras, src) for(var/obj/machinery/camera/C in RA)
for(var/obj/machinery/computer/station_alert/a in world) cameras += C
a.triggerAlarm("Atmosphere", src, cameras, src) for(var/mob/living/silicon/aiPlayer in world)
return aiPlayer.triggerAlarm("Atmosphere", src, cameras, src)
for(var/obj/machinery/computer/station_alert/a in world)
/area/proc/atmosreset() a.triggerAlarm("Atmosphere", src, cameras, src)
if(src.atmosalm) else if (src.atmosalm == 2)
src.atmosalm = 0 for(var/mob/living/silicon/aiPlayer in world)
src.mouse_opacity = 0 aiPlayer.cancelAlarm("Atmosphere", src, src)
//src.updateicon() for(var/obj/machinery/computer/station_alert/a in world)
for(var/mob/living/silicon/aiPlayer in world) a.cancelAlarm("Atmosphere", src, src)
aiPlayer.cancelAlarm("Atmosphere", src, src) src.atmosalm = danger_level
for(var/obj/machinery/computer/station_alert/a in world) return 1
a.cancelAlarm("Atmosphere", src, src) return 0
return
/area/proc/firealert() /area/proc/firealert()
if(src.name == "Space") //no fire alarms in space if(src.name == "Space") //no fire alarms in space

View File

@@ -10,7 +10,7 @@ obj/machinery/door/airlock
receive_signal(datum/signal/signal) receive_signal(datum/signal/signal)
if(!signal || signal.encryption) return if(!signal || signal.encryption) return
if(id_tag != signal.data["tag"]) return if(id_tag != signal.data["tag"] || !signal.data["command"]) return
switch(signal.data["command"]) switch(signal.data["command"])
if("open") if("open")
@@ -32,7 +32,7 @@ obj/machinery/door/airlock
locked = 0 locked = 0
update_icon() update_icon()
sleep(5) sleep(2)
open(1) open(1)
locked = 1 locked = 1
@@ -44,7 +44,7 @@ obj/machinery/door/airlock
close(1) close(1)
locked = 1 locked = 1
sleep(5) sleep(2)
update_icon() update_icon()
send_status() send_status()
@@ -54,7 +54,7 @@ obj/machinery/door/airlock
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.data["tag"] = id_tag signal.data["tag"] = id_tag
signal.data["timestamp"] = air_master.current_cycle signal.data["timestamp"] = world.time
signal.data["door_status"] = density?("closed"):("open") signal.data["door_status"] = density?("closed"):("open")
signal.data["lock_status"] = locked?("locked"):("unlocked") signal.data["lock_status"] = locked?("locked"):("unlocked")
@@ -127,7 +127,7 @@ obj/machinery/airlock_sensor
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.data["tag"] = id_tag signal.data["tag"] = id_tag
signal.data["timestamp"] = air_master.current_cycle signal.data["timestamp"] = world.time
var/datum/gas_mixture/air_sample = return_air() var/datum/gas_mixture/air_sample = return_air()

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ obj/machinery/air_sensor
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.data["tag"] = id_tag signal.data["tag"] = id_tag
signal.data["timestamp"] = air_master.current_cycle signal.data["timestamp"] = world.time
var/datum/gas_mixture/air_sample = return_air() var/datum/gas_mixture/air_sample = return_air()
@@ -55,6 +55,7 @@ obj/machinery/air_sensor
signal.data["toxins"] = 0 signal.data["toxins"] = 0
signal.data["nitrogen"] = 0 signal.data["nitrogen"] = 0
signal.data["carbon_dioxide"] = 0 signal.data["carbon_dioxide"] = 0
signal.data["sigtype"]="status"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
@@ -215,7 +216,7 @@ Rate: [volume_rate] L/sec<BR>"}
output += "<BR>" output += "<BR>"
if(output_info) if(output_info)
var/power = (output_info["power"] == "on") var/power = (output_info["power"])
var/output_pressure = output_info["internal"] var/output_pressure = output_info["internal"]
output += {"<B>Output</B>: [power?("Open"):("On Hold")] <A href='?src=\ref[src];out_refresh_status=1'>Refresh</A><BR> output += {"<B>Output</B>: [power?("Open"):("On Hold")] <A href='?src=\ref[src];out_refresh_status=1'>Refresh</A><BR>
Max Output Pressure: [output_pressure] kPa<BR>"} Max Output Pressure: [output_pressure] kPa<BR>"}
@@ -244,83 +245,43 @@ Max Output Pressure: [output_pressure] kPa<BR>"}
if(..()) if(..())
return return
if(href_list["adj_pressure"])
var/change = text2num(href_list["adj_pressure"])
pressure_setting = between(0, pressure_setting + change, 50*ONE_ATMOSPHERE)
spawn(1)
src.updateDialog()
return
if(!radio_connection)
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
if(href_list["in_refresh_status"]) if(href_list["in_refresh_status"])
input_info = null input_info = null
if(!radio_connection) signal.data = list ("tag" = input_tag, "status")
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
signal.data["tag"] = input_tag
signal.data["command"] = "status"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["in_toggle_injector"]) if(href_list["in_toggle_injector"])
input_info = null input_info = null
if(!radio_connection) signal.data = list ("tag" = input_tag, "power_toggle")
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
signal.data["tag"] = input_tag
signal.data["command"] = "power_toggle"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["out_refresh_status"]) if(href_list["out_refresh_status"])
output_info = null output_info = null
if(!radio_connection) signal.data = list ("tag" = output_tag, "status")
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
signal.data["tag"] = output_tag
signal.data["command"] = "status"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["out_toggle_power"]) if(href_list["out_toggle_power"])
output_info = null output_info = null
if(!radio_connection) signal.data = list ("tag" = output_tag, "power_toggle")
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
signal.data["tag"] = output_tag
signal.data["command"] = "power_toggle"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["out_set_pressure"]) if(href_list["out_set_pressure"])
output_info = null output_info = null
if(!radio_connection) signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]")
return 0
var/datum/signal/signal = new signal.data["sigtype"]="command"
signal.transmission_method = 1 //radio signal radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
signal.source = src
signal.data["tag"] = output_tag spawn(5)
signal.data["command"] = "set_internal_pressure" src.updateDialog()
signal.data["parameter"] = "[pressure_setting]"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["adj_pressure"])
var/change = text2num(href_list["adj_pressure"])
pressure_setting = min(max(0, pressure_setting + change), 50*ONE_ATMOSPHERE)
spawn(7)
attack_hand(usr)
fuel_injection fuel_injection
icon = 'computer.dmi' icon = 'computer.dmi'
@@ -386,12 +347,11 @@ Max Output Pressure: [output_pressure] kPa<BR>"}
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data["tag"] = device_tag signal.data = list(
"tag" = device_tag,
if(injecting) "power" = injecting,
signal.data["command"] = "power_on" "sigtype"="command"
else )
signal.data["command"] = "power_off"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
@@ -441,10 +401,11 @@ Rate: [volume_rate] L/sec<BR>"}
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data = list(
signal.data["tag"] = device_tag "tag" = device_tag,
signal.data["command"] = "status" "status",
"sigtype"="command"
)
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
if(href_list["toggle_automation"]) if(href_list["toggle_automation"])
@@ -458,9 +419,11 @@ Rate: [volume_rate] L/sec<BR>"}
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data = list(
signal.data["tag"] = device_tag "tag" = device_tag,
signal.data["command"] = "power_toggle" "power_toggle",
"sigtype"="command"
)
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
@@ -471,79 +434,79 @@ Rate: [volume_rate] L/sec<BR>"}
var/datum/signal/signal = new var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal signal.transmission_method = 1 //radio signal
signal.source = src signal.source = src
signal.data = list(
signal.data["tag"] = device_tag "tag" = device_tag,
signal.data["command"] = "inject" "inject",
"sigtype"="command"
)
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
/obj/machinery/computer/atmos_alert /obj/machinery/computer/atmos_alert
var/datum/radio_frequency/radio_connection var/datum/radio_frequency/radio_connection
initialize() /obj/machinery/computer/atmos_alert/initialize()
set_frequency(receive_frequency) set_frequency(receive_frequency)
receive_signal(datum/signal/signal) /obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal)
if(!signal || signal.encryption) return if(!signal || signal.encryption) return
var/zone = signal.data["zone"] var/zone = signal.data["zone"]
var/severity = signal.data["alert"] var/severity = signal.data["alert"]
if(!zone || !severity) return if(!zone || !severity) return
minor_alarms -= zone minor_alarms -= zone
priority_alarms -= zone priority_alarms -= zone
if(severity=="severe") if(severity=="severe")
priority_alarms += zone priority_alarms += zone
else if (severity=="minor") else if (severity=="minor")
minor_alarms += zone minor_alarms += zone
else /*"clear"*/ /*else "clear"*/
//do nothing //do nothing
update_icon()
proc /obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency)
set_frequency(new_frequency) radio_controller.remove_object(src, receive_frequency)
radio_controller.remove_object(src, receive_frequency) receive_frequency = new_frequency
receive_frequency = new_frequency radio_connection = radio_controller.add_object(src, receive_frequency, RADIO_ATMOSIA)
radio_connection = radio_controller.add_object(src, receive_frequency, RADIO_ATMOSIA)
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
user << browse(return_text(),"window=computer")
user.machine = src
onclose(user, "computer")
attack_hand(mob/user) /obj/machinery/computer/atmos_alert/process()
user << browse(return_text(),"window=computer") ..()
user.machine = src src.updateDialog()
onclose(user, "computer")
process() /obj/machinery/computer/atmos_alert/update_icon()
if(priority_alarms.len)
icon_state = "alert:2"
if(priority_alarms.len) else if(minor_alarms.len)
icon_state = "alert:2" icon_state = "alert:1"
else if(minor_alarms.len) else
icon_state = "alert:1" icon_state = "alert:0"
else /obj/machinery/computer/atmos_alert/proc/return_text()
icon_state = "alert:0" var/priority_text
var/minor_text
..() if(priority_alarms.len)
for(var/zone in priority_alarms)
priority_text += "<FONT color='red'><B>[zone]</B></FONT> <A href='?src=\ref[src];priority_clear=[ckey(zone)]'>X</A><BR>"
else
priority_text = "No priority alerts detected.<BR>"
src.updateDialog() if(minor_alarms.len)
for(var/zone in minor_alarms)
minor_text += "<B>[zone]</B> <A href='?src=\ref[src];minor_clear=[ckey(zone)]'>X</A><BR>"
else
minor_text = "No minor alerts detected.<BR>"
proc/return_text() var/output = {"<B>[name]</B><HR>
var/priority_text
var/minor_text
if(priority_alarms.len)
for(var/zone in priority_alarms)
priority_text += "<FONT color='red'><B>[zone]</B></FONT> <A href='?src=\ref[src];priority_clear=[ckey(zone)]'>X</A><BR>"
else
priority_text = "No priority alerts detected.<BR>"
if(minor_alarms.len)
for(var/zone in minor_alarms)
minor_text += "<B>[zone]</B> <A href='?src=\ref[src];minor_clear=[ckey(zone)]'>X</A><BR>"
else
minor_text = "No minor alerts detected.<BR>"
var/output = {"<B>[name]</B><HR>
<B>Priority Alerts:</B><BR> <B>Priority Alerts:</B><BR>
[priority_text] [priority_text]
<BR> <BR>
@@ -552,20 +515,21 @@ Rate: [volume_rate] L/sec<BR>"}
[minor_text] [minor_text]
<BR>"} <BR>"}
return output return output
Topic(href, href_list) /obj/machinery/computer/atmos_alert/Topic(href, href_list)
if(..()) if(..())
return return
if(href_list["priority_clear"]) if(href_list["priority_clear"])
var/removing_zone = href_list["priority_clear"] var/removing_zone = href_list["priority_clear"]
for(var/zone in priority_alarms) for(var/zone in priority_alarms)
if(ckey(zone) == removing_zone) if(ckey(zone) == removing_zone)
priority_alarms -= zone priority_alarms -= zone
if(href_list["minor_clear"]) if(href_list["minor_clear"])
var/removing_zone = href_list["minor_clear"] var/removing_zone = href_list["minor_clear"]
for(var/zone in minor_alarms) for(var/zone in minor_alarms)
if(ckey(zone) == removing_zone) if(ckey(zone) == removing_zone)
minor_alarms -= zone minor_alarms -= zone
update_icon()

View File

@@ -44,15 +44,16 @@
var/datum/signal/signal = new var/datum/signal/signal = new
signal.source = src signal.source = src
signal.transmission_method = 1 signal.transmission_method = 1
signal.data = list(
signal.data["tag"] = id "tag" = id,
signal.data["device"] = "AM" "device" = "AM",
signal.data["pressure"] = round(env_pressure) "pressure" = round(env_pressure),
"sigtype" = "status"
)
radio_connection.post_signal(src, signal) radio_connection.post_signal(src, signal)
/obj/machinery/meter/examine() /obj/machinery/meter/examine()
set src in oview(1) set src in view(3)
var/t = "A gas flow meter. " var/t = "A gas flow meter. "
if (src.target) if (src.target)
@@ -71,10 +72,10 @@
/obj/machinery/meter/Click() /obj/machinery/meter/Click()
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return 1
var/t = null var/t = null
if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai)) if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/dead))
if (src.target) if (src.target)
var/datum/gas_mixture/environment = target.return_air() var/datum/gas_mixture/environment = target.return_air()
if(environment) if(environment)
@@ -87,7 +88,7 @@
usr << "\blue <B>You are too far away.</B>" usr << "\blue <B>You are too far away.</B>"
usr << t usr << t
return return 1
/obj/machinery/meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) /obj/machinery/meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench)) if (!istype(W, /obj/item/weapon/wrench))

View File

@@ -130,6 +130,14 @@
stat &= ~EMPED stat &= ~EMPED
if (was_on) if (was_on)
turn_on() turn_on()
/obj/machinery/bot/attack_ai(mob/user as mob)
if (src.on)
turn_off()
else
turn_on()
/******************************************************************/ /******************************************************************/
// Navigation procs // Navigation procs
// Used for A-star pathfinding // Used for A-star pathfinding

View File

@@ -111,12 +111,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
usr << "You press the weird button." usr << "You press the weird button."
src.updateUsrDialog() src.updateUsrDialog()
/obj/machinery/bot/cleanbot/attack_ai()
if (src.on)
turn_off()
else
turn_on()
/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob) /obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob)
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.allowed(usr)) if(src.allowed(usr))

View File

@@ -156,12 +156,6 @@ Auto Patrol: []"},
mode = SECBOT_IDLE mode = SECBOT_IDLE
updateUsrDialog() updateUsrDialog()
/obj/machinery/bot/ed209/attack_ai(mob/user as mob)
if (src.on)
turn_off()
else
turn_on()
/obj/machinery/bot/ed209/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/machinery/bot/ed209/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged)) if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged))
user << "\red You short out [src]'s target assessment circuits." user << "\red You short out [src]'s target assessment circuits."
@@ -750,6 +744,8 @@ Auto Patrol: []"},
/obj/machinery/bot/ed209/emp_act(severity) /obj/machinery/bot/ed209/emp_act(severity)
if (cam)
cam.emp_act(severity)
if (severity > 2) if (severity > 2)
..(severity-1) ..(severity-1)
else if (severity==2 && prob(70)) else if (severity==2 && prob(70))
@@ -809,7 +805,7 @@ Auto Patrol: []"},
src.item_state = "ed209_shell" src.item_state = "ed209_shell"
src.icon_state = "ed209_shell" src.icon_state = "ed209_shell"
del(W) del(W)
else if ((istype(W, /obj/item/weapon/weldingtool)) && (src.build_step == 3)) else if ((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
if (W:remove_fuel(1,user)) if (W:remove_fuel(1,user))
src.build_step++ src.build_step++
src.name = "shielded frame assembly" src.name = "shielded frame assembly"

View File

@@ -155,13 +155,6 @@
targetdirection = null targetdirection = null
src.updateUsrDialog() src.updateUsrDialog()
/obj/machinery/bot/floorbot/attack_ai()
if (src.on)
turn_off()
else
turn_on()
/obj/machinery/bot/floorbot/process() /obj/machinery/bot/floorbot/process()
set background = 1 set background = 1

View File

@@ -95,10 +95,6 @@
src.icon_state = "medibot[src.on]" src.icon_state = "medibot[src.on]"
src.updateUsrDialog() src.updateUsrDialog()
/obj/machinery/bot/medbot/attack_ai(mob/user as mob)
return toggle_power()
/obj/machinery/bot/medbot/attack_paw(mob/user as mob) /obj/machinery/bot/medbot/attack_paw(mob/user as mob)
return attack_hand(user) return attack_hand(user)
@@ -143,7 +139,10 @@
usr.machine = src usr.machine = src
src.add_fingerprint(usr) src.add_fingerprint(usr)
if ((href_list["power"]) && (src.allowed(usr))) if ((href_list["power"]) && (src.allowed(usr)))
src.toggle_power() if (src.on)
turn_off()
else
turn_on()
else if((href_list["adj_threshold"]) && (!src.locked)) else if((href_list["adj_threshold"]) && (!src.locked))
var/adjust_num = text2num(href_list["adj_threshold"]) var/adjust_num = text2num(href_list["adj_threshold"])
@@ -310,14 +309,6 @@
return return
/obj/machinery/bot/medbot/proc/toggle_power()
if (src.on)
turn_off()
else
turn_on()
return
/obj/machinery/bot/medbot/proc/assess_patient(mob/living/carbon/C as mob) /obj/machinery/bot/medbot/proc/assess_patient(mob/living/carbon/C as mob)
//Time to see if they need medical help! //Time to see if they need medical help!
if(C.stat == 2) if(C.stat == 2)
@@ -447,6 +438,11 @@
src.stunned = min(stunned+10,20) src.stunned = min(stunned+10,20)
..() ..()
/obj/machinery/bot/medbot/emp_act(severity)
if (cam)
cam.emp_act(severity)
..()
/obj/machinery/bot/medbot/explode() /obj/machinery/bot/medbot/explode()
src.on = 0 src.on = 0
for(var/mob/O in hearers(src, null)) for(var/mob/O in hearers(src, null))

View File

@@ -195,14 +195,14 @@
/obj/machinery/bot/mulebot/attack_ai(var/mob/user) /obj/machinery/bot/mulebot/attack_ai(var/mob/user)
usr.machine = src user.machine = src
interact(user, 1) interact(user, 1)
/obj/machinery/bot/mulebot/attack_hand(var/mob/user) /obj/machinery/bot/mulebot/attack_hand(var/mob/user)
. = ..() . = ..()
if (.) if (.)
return return
usr.machine = src user.machine = src
interact(user, 0) interact(user, 0)
/obj/machinery/bot/mulebot/proc/interact(var/mob/user, var/ai=0) /obj/machinery/bot/mulebot/proc/interact(var/mob/user, var/ai=0)

View File

@@ -160,12 +160,6 @@ Auto Patrol: []"},
mode = SECBOT_IDLE mode = SECBOT_IDLE
updateUsrDialog() updateUsrDialog()
/obj/machinery/bot/secbot/attack_ai(mob/user as mob)
if (src.on)
turn_off()
else
turn_on()
/obj/machinery/bot/secbot/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/machinery/bot/secbot/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged)) if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged))
user << "\red You short out [src]'s target assessment circuits." user << "\red You short out [src]'s target assessment circuits."
@@ -696,6 +690,11 @@ Auto Patrol: []"},
src.target = user src.target = user
src.mode = SECBOT_HUNT src.mode = SECBOT_HUNT
/obj/machinery/bot/secbot/emp_act(severity)
if (cam)
cam.emp_act(severity)
..()
//Secbot Construction //Secbot Construction
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/radio/signaler/S, mob/user as mob) /obj/item/clothing/head/helmet/attackby(var/obj/item/device/radio/signaler/S, mob/user as mob)
@@ -726,7 +725,7 @@ Auto Patrol: []"},
/obj/item/weapon/secbot_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/weapon/secbot_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..() ..()
if ((istype(W, /obj/item/weapon/weldingtool)) && (!src.build_step)) if ((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (!src.build_step))
if(W:remove_fuel(1,user)) if(W:remove_fuel(1,user))
src.build_step++ src.build_step++
src.overlays += image('aibots.dmi', "hs_hole") src.overlays += image('aibots.dmi', "hs_hole")

View File

@@ -55,85 +55,92 @@ datum/computer/file/embedded_program/access_controller
target_state = ACCESS_STATE_INTERNAL target_state = ACCESS_STATE_INTERNAL
process() process()
switch(state) var/process_again = 1
if(ACCESS_STATE_INTERNAL) // state -1 while(process_again)
if(target_state > state) process_again = 0
if(memory["interior_status"] == "locked") switch(state)
state = ACCESS_STATE_LOCKED if(ACCESS_STATE_INTERNAL) // state -1
else if(target_state > state)
var/datum/signal/signal = new if(memory["interior_status"] == "locked")
signal.data["tag"] = interior_door_tag state = ACCESS_STATE_LOCKED
if(memory["interior_status"] == "closed") process_again = 1
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
if(ACCESS_STATE_LOCKED)
if(target_state < state)
if(memory["exterior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["interior_status"] == "closed" || memory["interior_status"] == "open")
state = ACCESS_STATE_INTERNAL
else else
var/datum/signal/signal = new var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag signal.data["tag"] = interior_door_tag
signal.data["command"] = "unlock" if(memory["interior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
if(ACCESS_STATE_LOCKED)
if(target_state < state)
if(memory["exterior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal) post_signal(signal)
else if(target_state > state)
if(memory["interior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
if(memory["interior_status"] == "closed")
signal.data["command"] = "lock"
else else
signal.data["command"] = "secure_close" if(memory["interior_status"] == "closed" || memory["interior_status"] == "open")
post_signal(signal) state = ACCESS_STATE_INTERNAL
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_open"
post_signal(signal)
else if(target_state > state)
if(memory["interior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
if(memory["interior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["exterior_status"] == "closed" || memory["exterior_status"] == "open")
state = ACCESS_STATE_EXTERNAL
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_open"
post_signal(signal)
else else
if(memory["exterior_status"] == "closed" || memory["exterior_status"] == "open") if(memory["interior_status"] != "locked")
state = ACCESS_STATE_EXTERNAL var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
if(memory["interior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
else if(memory["exterior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
if(ACCESS_STATE_EXTERNAL) //state 1
if(target_state < state)
if(memory["exterior_status"] == "locked")
state = ACCESS_STATE_LOCKED
process_again = 1
else else
var/datum/signal/signal = new var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag signal.data["tag"] = exterior_door_tag
signal.data["command"] = "unlock" if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal) post_signal(signal)
else
if(memory["interior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
if(memory["interior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
else if(memory["exterior_status"] != "locked")
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
if(ACCESS_STATE_EXTERNAL) //state 1
if(target_state < state)
if(memory["exterior_status"] == "locked")
state = ACCESS_STATE_LOCKED
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
if(memory["exterior_status"] == "closed")
signal.data["command"] = "lock"
else
signal.data["command"] = "secure_close"
post_signal(signal)
return 1 return 1

View File

@@ -32,7 +32,7 @@ datum/computer/file/embedded_program/airlock_controller
memory["interior_status"] = signal.data["door_status"] memory["interior_status"] = signal.data["door_status"]
else if(receive_tag==airpump_tag) else if(receive_tag==airpump_tag)
if(signal.data["power"]=="on") if(signal.data["power"])
memory["pump_status"] = signal.data["direction"] memory["pump_status"] = signal.data["direction"]
else else
memory["pump_status"] = "off" memory["pump_status"] = "off"
@@ -57,119 +57,146 @@ datum/computer/file/embedded_program/airlock_controller
target_state = AIRLOCK_STATE_CLOSED target_state = AIRLOCK_STATE_CLOSED
process() process()
switch(state) var/process_again = 1
if(AIRLOCK_STATE_INOPEN) // state -2 while(process_again)
if(target_state > state) process_again = 0
if(memory["interior_status"] == "closed") switch(state)
state = AIRLOCK_STATE_CLOSED if(AIRLOCK_STATE_INOPEN) // state -2
else if(target_state > state)
var/datum/signal/signal = new if(memory["interior_status"] == "closed")
signal.data["tag"] = interior_door_tag state = AIRLOCK_STATE_CLOSED
signal.data["command"] = "secure_close" process_again = 1
post_signal(signal)
else
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data["tag"] = airpump_tag
signal.data["command"] = "power_off"
post_signal(signal)
if(AIRLOCK_STATE_PRESSURIZE)
if(target_state < state)
if(sensor_pressure >= ONE_ATMOSPHERE*0.95)
if(memory["interior_status"] == "open")
state = AIRLOCK_STATE_INOPEN
else else
var/datum/signal/signal = new var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_open" signal.data["command"] = "secure_close"
post_signal(signal) post_signal(signal)
else else
var/datum/signal/signal = new if(memory["pump_status"] != "off")
signal.data["tag"] = airpump_tag var/datum/signal/signal = new
if(memory["pump_status"] == "siphon") signal.data = list(
signal.data["command"] = "stabalize" "tag" = airpump_tag,
else if(memory["pump_status"] != "release") "power" = 0,
signal.data["command"] = "power_on" "sigtype"="command"
post_signal(signal) )
else if(target_state > state) post_signal(signal)
state = AIRLOCK_STATE_CLOSED
if(AIRLOCK_STATE_CLOSED) if(AIRLOCK_STATE_PRESSURIZE)
if(target_state > state) if(target_state < state)
if(memory["interior_status"] == "closed") if(sensor_pressure >= ONE_ATMOSPHERE*0.95)
state = AIRLOCK_STATE_DEPRESSURIZE if(memory["interior_status"] == "open")
else state = AIRLOCK_STATE_INOPEN
var/datum/signal/signal = new process_again = 1
signal.data["tag"] = interior_door_tag else
signal.data["command"] = "secure_close" var/datum/signal/signal = new
post_signal(signal) signal.data["tag"] = interior_door_tag
else if(target_state < state) signal.data["command"] = "secure_open"
if(memory["exterior_status"] == "closed") post_signal(signal)
state = AIRLOCK_STATE_PRESSURIZE else
else var/datum/signal/signal = new
var/datum/signal/signal = new signal.data = list(
signal.data["tag"] = exterior_door_tag "tag" = airpump_tag,
signal.data["command"] = "secure_close" "sigtype"="command"
post_signal(signal) )
if(memory["pump_status"] == "siphon")
signal.data["stabalize"] = 1
else if(memory["pump_status"] != "release")
signal.data["power"] = 1
post_signal(signal)
else if(target_state > state)
state = AIRLOCK_STATE_CLOSED
process_again = 1
else if(AIRLOCK_STATE_CLOSED)
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data["tag"] = airpump_tag
signal.data["command"] = "power_off"
post_signal(signal)
if(AIRLOCK_STATE_DEPRESSURIZE)
var/target_pressure = ONE_ATMOSPHERE*0.05
if(sanitize_external)
target_pressure = ONE_ATMOSPHERE*0.01
if(sensor_pressure <= target_pressure)
if(target_state > state) if(target_state > state)
if(memory["exterior_status"] == "open") if(memory["interior_status"] == "closed")
state = AIRLOCK_STATE_OUTOPEN state = AIRLOCK_STATE_DEPRESSURIZE
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else if(target_state < state)
if(memory["exterior_status"] == "closed")
state = AIRLOCK_STATE_PRESSURIZE
process_again = 1
else else
var/datum/signal/signal = new var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_open" signal.data["command"] = "secure_close"
post_signal(signal) post_signal(signal)
else if(target_state < state)
state = AIRLOCK_STATE_CLOSED
else if((target_state < state) && !sanitize_external)
state = AIRLOCK_STATE_CLOSED
else
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.data["tag"] = airpump_tag
if(memory["pump_status"] == "release")
signal.data["command"] = "purge"
else if(memory["pump_status"] != "siphon")
signal.data["command"] = "power_on"
post_signal(signal)
if(AIRLOCK_STATE_OUTOPEN) //state 2 else
if(target_state < state) if(memory["pump_status"] != "off")
if(memory["exterior_status"] == "closed") var/datum/signal/signal = new
if(sanitize_external) signal.data = list(
state = AIRLOCK_STATE_DEPRESSURIZE "tag" = airpump_tag,
else "power" = 0,
"sigtype"="command"
)
post_signal(signal)
if(AIRLOCK_STATE_DEPRESSURIZE)
var/target_pressure = ONE_ATMOSPHERE*0.05
if(sanitize_external)
target_pressure = ONE_ATMOSPHERE*0.01
if(sensor_pressure <= target_pressure)
if(target_state > state)
if(memory["exterior_status"] == "open")
state = AIRLOCK_STATE_OUTOPEN
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_open"
post_signal(signal)
else if(target_state < state)
state = AIRLOCK_STATE_CLOSED state = AIRLOCK_STATE_CLOSED
process_again = 1
else if((target_state < state) && !sanitize_external)
state = AIRLOCK_STATE_CLOSED
process_again = 1
else else
var/datum/signal/signal = new var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag signal.transmission_method = 1 //radio signal
signal.data["command"] = "secure_close" signal.data = list(
post_signal(signal) "tag" = airpump_tag,
else "sigtype"="command"
if(memory["pump_status"] != "off") )
var/datum/signal/signal = new if(memory["pump_status"] == "release")
signal.data["tag"] = airpump_tag signal.data["purge"] = 1
signal.data["command"] = "power_off" else if(memory["pump_status"] != "siphon")
signal.data["power"] = 1
post_signal(signal) post_signal(signal)
if(AIRLOCK_STATE_OUTOPEN) //state 2
if(target_state < state)
if(memory["exterior_status"] == "closed")
if(sanitize_external)
state = AIRLOCK_STATE_DEPRESSURIZE
process_again = 1
else
state = AIRLOCK_STATE_CLOSED
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"power" = 0,
"sigtype"="command"
)
post_signal(signal)
memory["sensor_pressure"] = sensor_pressure memory["sensor_pressure"] = sensor_pressure
memory["processing"] = state != target_state memory["processing"] = state != target_state
sensor_pressure = null //sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0
return 1 return 1

View File

@@ -42,7 +42,8 @@ obj/machinery/embedded_controller
if(!signal || signal.encryption) return if(!signal || signal.encryption) return
if(program) if(program)
return program.receive_signal(signal, receive_method, receive_param) program.receive_signal(signal, receive_method, receive_param)
//spawn(5) program.process() //no, program.process sends some signals and machines respond and we here again and we lag -rastaf0
Topic(href, href_list) Topic(href, href_list)
if(..()) if(..())
@@ -50,8 +51,10 @@ obj/machinery/embedded_controller
if(program) if(program)
program.receive_user_command(href_list["command"]) program.receive_user_command(href_list["command"])
spawn(5) program.process()
usr.machine = src usr.machine = src
spawn(5) src.updateDialog()
process() process()
if(program) if(program)

View File

@@ -783,7 +783,7 @@
//SN src = null //SN src = null
del(src) del(src)
return return
if (!( istype(W, /obj/item/weapon/weldingtool) )) if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding))
return return
if (!( src.status )) if (!( src.status ))
src.status = 1 src.status = 1
@@ -875,7 +875,7 @@
//SN src = null //SN src = null
del(src) del(src)
return return
if (!( istype(W, /obj/item/weapon/weldingtool) )) if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding ))
return return
if (!( src.status )) if (!( src.status ))
src.status = 1 src.status = 1
@@ -935,7 +935,7 @@
//SN src = null //SN src = null
del(src) del(src)
return return
if (( istype(W, /obj/item/weapon/weldingtool) )) if (( istype(W, /obj/item/weapon/weldingtool) && W:welding))
return return
if (!( src.status )) if (!( src.status ))
src.status = 1 src.status = 1

View File

@@ -135,7 +135,7 @@
user << "\red The [src.name] needs to be unwelded from the floor." user << "\red The [src.name] needs to be unwelded from the floor."
return return
else if(istype(W, /obj/item/weapon/weldingtool)) else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(active) if(active)
user << "Turn off the [src] first." user << "Turn off the [src] first."
return return

View File

@@ -102,7 +102,7 @@
if(2) if(2)
user << "\red The [src.name] needs to be unwelded from the floor." user << "\red The [src.name] needs to be unwelded from the floor."
return return
else if(istype(W, /obj/item/weapon/weldingtool)) else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
switch(state) switch(state)
if(0) if(0)
user << "\red The [src.name] needs to be wrenched to the floor." user << "\red The [src.name] needs to be wrenched to the floor."

File diff suppressed because it is too large Load Diff