mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Alien stun chance on harm decreased. Alien stab intent changed to stun intent which deals light damage. It does have a very high chance of knock down and an even higher chance of disarming the target. Hud icon changed to reflect this. Upped the chance aliens stunning cyborgs with stun intent. Updated aliens attacking monkeys code. Aliens can now directly attack the AI. General code cleanup for alien attacks and others attacking aliens (hand to hand). Humanoid aliens may no longer run on tables. Fixed a typo in the Corrode ability. Increased the amount of abuse resin walls can take. Changed how damaging them works (as windows). Hulks may now smash straight through resin walls. Aliens may now destroy them without acid (and can no longer use acid on them). Spit now produces a message when used. Fixed aliens not being stunned by stun batons. Aliens can now attack/destroy turrets. Removed alien vision loss from being shot by lasors. Aliens are not deterred by flash now (flashbangs should still work). You can no-longer stab aliens in their nonexistent eyes with screwdrivers or forks. Changing a mob into an alien now properly sets their intent (help). Minor, misc alien code adjustments. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@762 316c924e-a436-60f5-8080-3fe189b3f50e
758 lines
24 KiB
Plaintext
758 lines
24 KiB
Plaintext
/obj/machinery/alarm
|
|
|
|
var/frequency = 1439
|
|
var/list/sensors = list()
|
|
var/list/vents = list()
|
|
var/list/sensor_information = list()
|
|
var/list/vent_information = list()
|
|
var/datum/radio_frequency/radio_connection
|
|
var/alarm_area //Currently unused. Maybe do something if emmaged or hacked...Like change the area to security, syphon air out, ..., profit.
|
|
var/locked = 1
|
|
var/panic = 0 //is this alarm panicked?
|
|
var/device = null
|
|
|
|
req_access = list(access_atmospherics)
|
|
|
|
attack_hand(mob/user)
|
|
if(!(istype(usr, /mob/living/silicon) || istype(usr, /mob/living/carbon/human)))
|
|
user << "\red You don't have the dexterity to do this."
|
|
return
|
|
if(stat & (NOPOWER|BROKEN))
|
|
return
|
|
|
|
//Following is no longer needed, as all human/silicon mobs will be able to view air info.
|
|
/*else if(!(istype(usr, /mob/living/silicon)) && locked)
|
|
user << "\red You must unlock the Air Alarm interface first"
|
|
return*/
|
|
src.add_fingerprint(user)
|
|
|
|
user << browse(return_text(),"window=air_alarm")
|
|
user.machine = src
|
|
onclose(user, "air_alarm")
|
|
return
|
|
|
|
|
|
receive_signal(datum/signal/signal)
|
|
if(!signal || signal.encryption) return
|
|
|
|
var/id_tag = signal.data["tag"]
|
|
if(!id_tag || (!sensors.Find(id_tag) && !vents.Find(id_tag))) return
|
|
if(signal.data["device"] == "AScr")
|
|
sensor_information[id_tag] = signal.data
|
|
else if(signal.data["device"] == "AVP")
|
|
vent_information[id_tag] = signal.data
|
|
|
|
proc
|
|
set_frequency(new_frequency)
|
|
radio_controller.remove_object(src, "[frequency]")
|
|
frequency = new_frequency
|
|
radio_connection = radio_controller.add_object(src, "[frequency]")
|
|
|
|
|
|
send_signal(var/target, var/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise
|
|
if(!radio_connection)
|
|
return 0
|
|
|
|
var/datum/signal/signal = new
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.source = src
|
|
|
|
signal.data["tag"] = target
|
|
signal.data["command"] = command
|
|
|
|
radio_connection.post_signal(src, signal)
|
|
// world << text("Signal [] Broadcasted to []", command, target)
|
|
|
|
return 1
|
|
|
|
return_text()
|
|
if(!(istype(usr, /mob/living/silicon)) && locked)
|
|
return "<html><head><title>[alarm_zone] Air Alarm</title></head><body>[return_status()]<hr><i>(Swipe ID card to unlock interface)</i></body></html>"
|
|
else
|
|
return "<html><head><title>[alarm_zone] Air Alarm</title></head><body>[return_status()]<hr>[return_controls()]</body></html>"
|
|
|
|
return_status()
|
|
var/turf/location = src.loc
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
var/datum/gas_mixture/environment = location.return_air()
|
|
var/environment_pressure = environment.return_pressure()
|
|
var/total = environment.oxygen + environment.carbon_dioxide + environment.toxins + environment.nitrogen
|
|
var/safe = 2
|
|
var/percent
|
|
var/output = "<b>Air Status:</b><br>"
|
|
|
|
if(total == 0)
|
|
output +={"<font color='red'><b>Warning: Cannot obtain air sample for analysis.</b></font>"}
|
|
return output
|
|
|
|
output += {"Pressure: "}
|
|
//Pressure sensor
|
|
if((environment_pressure < ONE_ATMOSPHERE*0.90) || (environment_pressure > ONE_ATMOSPHERE*1.10))
|
|
if((environment_pressure < ONE_ATMOSPHERE*0.80) || (environment_pressure > ONE_ATMOSPHERE*1.20))
|
|
output += {"<font color='red'><b>[environment_pressure]</b></font>kPa<br>"}
|
|
safe = 0
|
|
else
|
|
output += {"<font color='orange'>[environment_pressure]</font>kPa<br>"}
|
|
if(safe != 0) safe = 1
|
|
else
|
|
output+= {"<font color='green'>[environment_pressure]</font>kPa<br>"}
|
|
|
|
output += {"Oxygen: "}
|
|
//Oxygen Levels Sensor
|
|
percent = round(environment.oxygen / total * 100, 2)
|
|
if((environment.oxygen < MOLES_O2STANDARD*0.90) || (environment.oxygen > MOLES_O2STANDARD*1.10))
|
|
if(environment.oxygen < MOLES_O2STANDARD*0.80)
|
|
output += {"<font color='red'><b>[percent]</b></font>%<br>"}
|
|
safe = 0
|
|
else
|
|
output += {"<font color='orange'>[percent]</font>%<br>"}
|
|
if(safe != 0) safe = 1
|
|
else output += {"<font color='green'>[percent]</font>%<br>"}
|
|
|
|
output += {"Carbon: "}
|
|
percent = round(environment.carbon_dioxide / total * 100, 2)
|
|
//CO2 Levels Sensor
|
|
if(environment.carbon_dioxide > 5)
|
|
if(environment.carbon_dioxide > 10)
|
|
output += {"<font color='red'><b>[percent]</b></font>%<br>"}
|
|
safe = 0
|
|
else
|
|
output+= {"<font color='orange'>[percent]</font>%<br>"}
|
|
if(safe != 0) safe = 1
|
|
else output += {"<font color='green'>[percent]</font>%<br>"}
|
|
|
|
output += {"Toxins: "}
|
|
//Plasma Levels Sensor
|
|
percent = round(environment.toxins / total * 100, 2)
|
|
if(safe && (environment.toxins > 1))
|
|
if(environment.toxins > 2)
|
|
output += {"<font color='red'><b>[percent]</b></font>%<br>"}
|
|
safe = 0
|
|
else
|
|
output += {"<font color='orange'>[percent]</font>%<br>"}
|
|
if(safe != 0) safe = 1
|
|
else output += {"<font color='green'>[percent]</font>%<br>"}
|
|
|
|
//Trace Gas Sensor
|
|
if(safe && environment.trace_gases.len)
|
|
for(var/datum/gas/sleeping_agent/SA in environment.trace_gases)
|
|
var/SA_pp = (SA.moles/environment.total_moles())*environment_pressure
|
|
if(SA_pp > 0.01)
|
|
if(SA_pp > 1)
|
|
output += {"Notice: <font color='red'>High Concentration of Unknown Particles Detected</font><br>"}
|
|
safe = 0
|
|
else
|
|
output += {"Notice: <font color='orange'>Low Concentration of Unknown Particles Detected</font><br>"}
|
|
safe = 1
|
|
|
|
output += {"Temperature: "}
|
|
//Temperature Levels Sensor
|
|
if((environment.temperature < (T20C-10)) || (environment.temperature > (T20C+10)))
|
|
if((environment.temperature < (T20C-20)) || (environment.temperature > (T20C+10)))
|
|
output += {"<font color='red'><b>[environment.temperature]</b></font>K<br>"}
|
|
safe = 0
|
|
else
|
|
output +={"<font color='orange'>[environment.temperature]</font>K<br>"}
|
|
else output += {"<font color='green'>[environment.temperature]</font>K<br>"}
|
|
|
|
//Overall status
|
|
output += {"Local Status: "}
|
|
if(safe == 0) output += {"<font color='red'><b>DANGER: Internals Required</b></font>"}
|
|
else if(safe == 1) output += {"<font color='orange'>Caution</font>"}
|
|
else if (A.atmosalm == 1) output += {"<font color='orange'>Caution: Atmos alert in area</font>"}
|
|
else output += {"<font color='green'>Optimal</font>"}
|
|
|
|
return output
|
|
|
|
|
|
return_controls()
|
|
var/output = ""//"<B>[alarm_zone] Air [name]</B><HR>"
|
|
if(!src.device)
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if(A.atmosalm)
|
|
output += {"<a href='?src=\ref[src];atmos_reset=1'>Reset - Atmospheric Alarm</a><hr>"}
|
|
else
|
|
output += {"<a href='?src=\ref[src];atmos_alarm=1'>Activate - Atmospheric Alarm</a><hr>"}
|
|
|
|
output += {"<a href='?src=\ref[src];scrubbers_control=1'>Scrubbers Control</a><br>
|
|
<a href='?src=\ref[src];vents_control=1'>Vents Control</a><br>
|
|
<HR>
|
|
"}
|
|
|
|
output += "<A href='?src=\ref[src];toggle_panic_siphon_global=1'><font color='red'><B>TOGGLE PANIC SYPHON IN AREA</B></font></A>"
|
|
output += "<HR><A href='?src=\ref[src];reinit_atmos_machinery=1'>Reinitialize atmospheric machinery in area</A>"
|
|
else
|
|
var/sensor_data
|
|
if(src.device == "Scrubbers")
|
|
if(sensors.len)
|
|
for(var/id_tag in sensors)
|
|
var/long_name = sensors[id_tag]
|
|
var/list/data = sensor_information[id_tag]
|
|
var/sensor_part = "<B>[long_name]</B>:<BR>"
|
|
|
|
if(data)
|
|
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];scr_toggle_power=[id_tag]'>[(data["on"]?"on":"off")]</A><BR>
|
|
<B>Type:</B> <A href='?src=\ref[src];scr_toggle_scrubbing=[id_tag]'>[(data["scrubbing"]?"scrubbing":"syphoning")]</A><BR>"}
|
|
if(data["scrubbing"])
|
|
sensor_part += "<B>Filtering:</B> Carbon Dioxide <A href='?src=\ref[src];scr_toggle_co2_scrub=[id_tag]'>([(data["filter_co2"]?"on":"off")])</A>; Toxins <A href='?src=\ref[src];scr_toggle_tox_scrub=[id_tag]'>([data["filter_toxins"]?"on":"off"])</A>; Nitrous Oxide <A href='?src=\ref[src];scr_toggle_n2o_scrub=[id_tag]'>([data["filter_n2o"]?"on":"off"])</A><BR>"
|
|
sensor_part += "<A href='?src=\ref[src];scr_toggle_panic_siphon=[id_tag]'><font color='[(data["panic"]?"blue'>Dea":"red'>A")]ctivate panic syphon</A></font><BR>"
|
|
if(data["panic"])
|
|
sensor_part += "<font color='red'><B>PANIC SYPHON ACTIVATED</B></font>"
|
|
sensor_part += "<HR>"
|
|
else
|
|
sensor_part = "<FONT color='red'>[long_name] can not be found!</FONT><BR><HR>"
|
|
|
|
sensor_data += sensor_part
|
|
else
|
|
sensor_data = "No scrubbers connected.<BR>"
|
|
|
|
else if(src.device == "Vents")
|
|
if(vents.len)
|
|
for(var/id_tag in vents)
|
|
var/long_name = vents[id_tag]
|
|
var/list/data = vent_information[id_tag]
|
|
var/sensor_part = "<B>[long_name]</B>:<BR>"
|
|
|
|
if(data)
|
|
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];v_toggle_power=[id_tag]'>[data["power"]]</A><BR>
|
|
<B>Pressure checks:</B> <A href='?src=\ref[src];v_toggle_checks=[id_tag]'>[data["checks"]?"on":"off"]</A><BR>
|
|
<HR>"}
|
|
else
|
|
sensor_part = "<FONT color='red'>[long_name] can not be found!</FONT><HR>"
|
|
|
|
sensor_data += sensor_part
|
|
else
|
|
sensor_data = "No scrubbers connected.<BR>"
|
|
|
|
output = {"[sensor_data]<a href='?src=\ref[src];main=1'>Main menu</a><br>"}
|
|
|
|
return output
|
|
|
|
alarm()
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
for(var/area/RA in A.related)
|
|
RA.atmosalert()
|
|
return
|
|
reset()
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
for(var/area/RA in A.related)
|
|
RA.atmosreset()
|
|
return
|
|
|
|
initialize()
|
|
set_frequency(frequency)
|
|
|
|
|
|
Topic(href, href_list)
|
|
//if(..())
|
|
// return
|
|
if(href_list["atmos_alarm"])
|
|
src.alarm()
|
|
if(href_list["atmos_reset"])
|
|
src.reset()
|
|
if(href_list["scrubbers_control"])
|
|
src.device = "Scrubbers"
|
|
if(href_list["vents_control"])
|
|
src.device = "Vents"
|
|
if(href_list["main"])
|
|
src.device = null
|
|
if(href_list["scr_toggle_power"])
|
|
send_signal(href_list["scr_toggle_power"], "toggle_power")
|
|
|
|
if(href_list["scr_toggle_scrubbing"])
|
|
send_signal(href_list["scr_toggle_scrubbing"], "toggle_scrubbing")
|
|
|
|
if(href_list["scr_toggle_co2_scrub"])
|
|
send_signal(href_list["scr_toggle_co2_scrub"], "toggle_co2_scrub")
|
|
|
|
if(href_list["scr_toggle_tox_scrub"])
|
|
send_signal(href_list["scr_toggle_tox_scrub"], "toggle_tox_scrub")
|
|
|
|
if(href_list["scr_toggle_n2o_scrub"])
|
|
send_signal(href_list["scr_toggle_n2o_scrub"], "toggle_n2o_scrub")
|
|
|
|
if(href_list["scr_toggle_panic_siphon"])
|
|
send_signal(href_list["scr_toggle_panic_siphon"], "toggle_panic_siphon")
|
|
|
|
if(href_list["v_toggle_power"])
|
|
send_signal(href_list["v_toggle_power"], "power_toggle")
|
|
if(href_list["v_toggle_checks"])
|
|
send_signal(href_list["v_toggle_checks"], "toggle_checks")
|
|
|
|
if(href_list["toggle_panic_siphon_global"])
|
|
for(var/V in sensors)
|
|
send_signal(V, "toggle_panic_siphon")
|
|
for(var/P in vents)
|
|
send_signal(P, "power_off")
|
|
panic = !panic
|
|
if(href_list["reinit_atmos_machinery"])
|
|
var/A = get_area(loc)
|
|
connect_area_atmos_machinery(A)
|
|
|
|
|
|
spawn(5)
|
|
// attack_hand(usr)
|
|
src.updateUsrDialog()
|
|
return
|
|
|
|
|
|
/obj/machinery/alarm/New()
|
|
..()
|
|
|
|
if(!alarm_zone)
|
|
var/area/A = get_area(loc)
|
|
if(A.name)
|
|
alarm_zone = A.name
|
|
else
|
|
alarm_zone = "Unregistered"
|
|
|
|
/obj/machinery/alarm/process()
|
|
if (src.skipprocess)
|
|
src.skipprocess--
|
|
return
|
|
|
|
var/turf/location = src.loc
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
var/safe = 2
|
|
|
|
if(stat & (NOPOWER|BROKEN))
|
|
icon_state = "alarmp"
|
|
return
|
|
|
|
use_power(5, ENVIRON)
|
|
|
|
if (!( istype(location, /turf) ))
|
|
return 0
|
|
|
|
var/datum/gas_mixture/environment = location.return_air()
|
|
|
|
var/environment_pressure = environment.return_pressure()
|
|
|
|
if((environment_pressure < ONE_ATMOSPHERE*0.90) || (environment_pressure > ONE_ATMOSPHERE*1.10))
|
|
//Pressure sensor
|
|
if((environment_pressure < ONE_ATMOSPHERE*0.80) || (environment_pressure > ONE_ATMOSPHERE*1.20))
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
if(safe && ((environment.oxygen < MOLES_O2STANDARD*0.90) || (environment.oxygen > MOLES_O2STANDARD*1.10)))
|
|
//Oxygen Levels Sensor
|
|
if(environment.oxygen < MOLES_O2STANDARD*0.80)
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
if(safe && ((environment.temperature < (T20C-10)) || (environment.temperature > (T20C+10))))
|
|
//Oxygen Levels Sensor
|
|
if((environment.temperature < (T20C-20)) || (environment.temperature > (T20C+10)))
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
if(safe && (environment.carbon_dioxide > 5))
|
|
//CO2 Levels Sensor
|
|
if(environment.carbon_dioxide > 10)
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
if(safe && (environment.toxins > 1))
|
|
//Plasma Levels Sensor
|
|
if(environment.toxins > 2)
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
if(safe && environment.trace_gases.len)
|
|
for(var/datum/gas/sleeping_agent/SA in environment.trace_gases)
|
|
var/SA_pp = (SA.moles/environment.total_moles())*environment_pressure
|
|
if(SA_pp > 0.01)
|
|
if(SA_pp > 1)
|
|
safe = 0
|
|
else safe = 1
|
|
|
|
|
|
if(safe && A.atmosalm)
|
|
safe = 1
|
|
|
|
if(!safe)
|
|
src.icon_state = "alarm1"
|
|
else if(safe == 1)
|
|
src.icon_state = "alarm2"
|
|
else
|
|
src.icon_state = "alarm0"
|
|
|
|
|
|
if(safe == 2) src.skipprocess = 1
|
|
else if(alarm_frequency)
|
|
post_alert(safe)
|
|
|
|
if(!safe)
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
A.atmosalert()
|
|
|
|
return
|
|
|
|
/obj/machinery/alarm/proc/post_alert(alert_level)
|
|
|
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency)
|
|
|
|
if(!frequency) return
|
|
|
|
var/datum/signal/alert_signal = new
|
|
alert_signal.source = src
|
|
alert_signal.transmission_method = 1
|
|
alert_signal.data["zone"] = alarm_zone
|
|
alert_signal.data["type"] = "Atmospheric"
|
|
|
|
if(alert_level==0)
|
|
alert_signal.data["alert"] = "severe"
|
|
else
|
|
alert_signal.data["alert"] = "minor"
|
|
|
|
frequency.post_signal(src, alert_signal)
|
|
|
|
/obj/machinery/alarm/attackby(W as obj, user as mob)
|
|
if (istype(W, /obj/item/weapon/wirecutters))
|
|
stat ^= BROKEN
|
|
src.add_fingerprint(user)
|
|
for(var/mob/O in viewers(user, null))
|
|
O.show_message(text("\red [] has []activated []!", user, (stat&BROKEN) ? "de" : "re", src), 1)
|
|
return
|
|
|
|
else if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
|
if(stat & (NOPOWER|BROKEN))
|
|
user << "It does nothing"
|
|
else
|
|
if(src.allowed(usr))
|
|
locked = !locked
|
|
user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface."
|
|
else
|
|
user << "\red Access denied."
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/alarm/power_change()
|
|
if(powered(ENVIRON))
|
|
stat &= ~NOPOWER
|
|
else
|
|
stat |= NOPOWER
|
|
|
|
/*/obj/machinery/alarm/Click()
|
|
if(istype(usr, /mob/living/silicon/ai))
|
|
return examine()
|
|
return ..()*/
|
|
|
|
/obj/machinery/alarm/examine()
|
|
set src in oview(1)
|
|
/*
|
|
if(usr.stat)
|
|
return
|
|
if(stat & (NOPOWER|BROKEN))
|
|
return
|
|
if(!(istype(usr, /mob/living/carbon/human) || ticker))
|
|
if (!istype(usr, /mob/living/silicon/ai))
|
|
usr << "\red You don't have the dexterity to do this!"
|
|
return
|
|
if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai))
|
|
var/turf/T = src.loc
|
|
if (!( istype(T, /turf) ))
|
|
return
|
|
|
|
var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
|
|
turf_total = max(turf_total, 1)
|
|
usr.show_message("\blue <B>Results:</B>", 1)
|
|
var/t = ""
|
|
var/t1 = turf_total / CELLSTANDARD * 100
|
|
if ((90 < t1 && t1 < 110))
|
|
usr.show_message(text("\blue Air Pressure: []%", t1), 1)
|
|
else
|
|
usr.show_message(text("\blue Air Pressure:\red []%", t1), 1)
|
|
t1 = T.n2 / turf_total * 100
|
|
t1 = round(t1, 0.0010)
|
|
if ((60 < t1 && t1 < 80))
|
|
t += text("<font color=blue>Nitrogen: []</font> ", t1)
|
|
else
|
|
t += text("<font color=red>Nitrogen: []</font> ", t1)
|
|
t1 = T.oxygen / turf_total * 100
|
|
t1 = round(t1, 0.0010)
|
|
if ((20 < t1 && t1 < 24))
|
|
t += text("<font color=blue>Oxygen: []</font> ", t1)
|
|
else
|
|
t += text("<font color=red>Oxygen: []</font> ", t1)
|
|
t1 = T.poison / turf_total * 100
|
|
t1 = round(t1, 0.0010)
|
|
if (t1 < 0.5)
|
|
t += text("<font color=blue>Plasma: []</font> ", t1)
|
|
else
|
|
t += text("<font color=red>Plasma: []</font> ", t1)
|
|
t1 = T.co2 / turf_total * 100
|
|
t1 = round(t1, 0.0010)
|
|
if (t1 < 1)
|
|
t += text("<font color=blue>CO2: []</font> ", t1)
|
|
else
|
|
t += text("<font color=red>CO2: []</font> ", t1)
|
|
t1 = T.sl_gas / turf_total * 100
|
|
t1 = round(t1, 0.0010)
|
|
if (t1 < 5)
|
|
t += text("<font color=blue>NO2: []</font>", t1)
|
|
else
|
|
t += text("<font color=red>NO2: []</font>", t1)
|
|
t1 = T.temp - T0C
|
|
if (T.temp > 326.444 || T.temp < 282.591)
|
|
t += text("<br><font color=red>Temperature: []</font>", t1)
|
|
else
|
|
t += text("<br><font color=blue>Temperature: []</font>", t1)
|
|
usr.show_message(t, 1)
|
|
return
|
|
else
|
|
usr << "\blue <B>You are too far away.</B>"
|
|
*/
|
|
|
|
|
|
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
|
if(src.detecting)
|
|
if(temperature > T0C+200)
|
|
src.alarm() // added check of detector status here
|
|
return
|
|
|
|
/obj/machinery/firealarm/attack_ai(mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/firealarm/bullet_act(BLAH)
|
|
return src.alarm()
|
|
|
|
/obj/machinery/firealarm/attack_paw(mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/firealarm/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if (istype(W, /obj/item/weapon/wirecutters))
|
|
src.detecting = !( src.detecting )
|
|
if (src.detecting)
|
|
user.visible_message("\red [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.")
|
|
else
|
|
user.visible_message("\red [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.")
|
|
else
|
|
src.alarm()
|
|
src.add_fingerprint(user)
|
|
return
|
|
|
|
/obj/machinery/firealarm/process()
|
|
if(stat & (NOPOWER|BROKEN))
|
|
return
|
|
|
|
use_power(10, ENVIRON)
|
|
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
|
|
if(A.fire)
|
|
src.icon_state = "fire1"
|
|
else
|
|
src.icon_state = "fire0"
|
|
|
|
if (src.timing)
|
|
if (src.time > 0)
|
|
src.time = round(src.time) - 1
|
|
else
|
|
alarm()
|
|
src.time = 0
|
|
src.timing = 0
|
|
src.updateDialog()
|
|
return
|
|
|
|
/obj/machinery/firealarm/power_change()
|
|
if(powered(ENVIRON))
|
|
stat &= ~NOPOWER
|
|
icon_state = "fire0"
|
|
else
|
|
spawn(rand(0,15))
|
|
stat |= NOPOWER
|
|
icon_state = "firep"
|
|
|
|
/obj/machinery/firealarm/attack_hand(mob/user as mob)
|
|
if(user.stat || stat & (NOPOWER|BROKEN))
|
|
return
|
|
|
|
user.machine = src
|
|
var/area/A = src.loc
|
|
var/d1
|
|
var/d2
|
|
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
|
A = A.loc
|
|
|
|
if (A.fire)
|
|
d1 = text("<A href='?src=\ref[];reset=1'>Reset - Lockdown</A>", src)
|
|
else
|
|
d1 = text("<A href='?src=\ref[];alarm=1'>Alarm - Lockdown</A>", src)
|
|
if (src.timing)
|
|
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
|
else
|
|
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
|
var/second = src.time % 60
|
|
var/minute = (src.time - second) / 60
|
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Fire alarm</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
user << browse(dat, "window=firealarm")
|
|
onclose(user, "firealarm")
|
|
else
|
|
A = A.loc
|
|
if (A.fire)
|
|
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("Reset - Lockdown"))
|
|
else
|
|
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("Alarm - Lockdown"))
|
|
if (src.timing)
|
|
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
|
else
|
|
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
|
var/second = src.time % 60
|
|
var/minute = (src.time - second) / 60
|
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", stars("Fire alarm"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
user << browse(dat, "window=firealarm")
|
|
onclose(user, "firealarm")
|
|
return
|
|
|
|
/obj/machinery/firealarm/Topic(href, href_list)
|
|
..()
|
|
if (usr.stat || stat & (BROKEN|NOPOWER))
|
|
return
|
|
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
|
usr.machine = src
|
|
if (href_list["reset"])
|
|
src.reset()
|
|
else
|
|
if (href_list["alarm"])
|
|
src.alarm()
|
|
else
|
|
if (href_list["time"])
|
|
src.timing = text2num(href_list["time"])
|
|
else
|
|
if (href_list["tp"])
|
|
var/tp = text2num(href_list["tp"])
|
|
src.time += tp
|
|
src.time = min(max(round(src.time), 0), 120)
|
|
src.updateUsrDialog()
|
|
|
|
src.add_fingerprint(usr)
|
|
else
|
|
usr << browse(null, "window=firealarm")
|
|
return
|
|
return
|
|
|
|
/obj/machinery/firealarm/proc/reset()
|
|
if (!( src.working ))
|
|
return
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
for(var/area/RA in A.related)
|
|
RA.firereset()
|
|
return
|
|
|
|
/obj/machinery/firealarm/proc/alarm()
|
|
if (!( src.working ))
|
|
return
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
for(var/area/RA in A.related)
|
|
RA.firealert()
|
|
//playsound(src.loc, 'signal.ogg', 75, 0)
|
|
return
|
|
|
|
/obj/machinery/partyalarm/attack_paw(mob/user as mob)
|
|
return src.attack_hand(user)
|
|
/obj/machinery/partyalarm/attack_hand(mob/user as mob)
|
|
if(user.stat || stat & (NOPOWER|BROKEN))
|
|
return
|
|
|
|
user.machine = src
|
|
var/area/A = src.loc
|
|
var/d1
|
|
var/d2
|
|
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
|
|
A = A.loc
|
|
|
|
if (A.party)
|
|
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
|
|
else
|
|
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
|
|
if (src.timing)
|
|
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
|
else
|
|
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
|
var/second = src.time % 60
|
|
var/minute = (src.time - second) / 60
|
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Party Button</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
user << browse(dat, "window=partyalarm")
|
|
onclose(user, "partyalarm")
|
|
else
|
|
A = A.loc
|
|
if (A.fire)
|
|
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
|
|
else
|
|
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
|
|
if (src.timing)
|
|
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
|
else
|
|
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
|
var/second = src.time % 60
|
|
var/minute = (src.time - second) / 60
|
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
user << browse(dat, "window=partyalarm")
|
|
onclose(user, "partyalarm")
|
|
return
|
|
|
|
/obj/machinery/partyalarm/proc/reset()
|
|
if (!( src.working ))
|
|
return
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
A.partyreset()
|
|
return
|
|
|
|
/obj/machinery/partyalarm/proc/alarm()
|
|
if (!( src.working ))
|
|
return
|
|
var/area/A = src.loc
|
|
A = A.loc
|
|
if (!( istype(A, /area) ))
|
|
return
|
|
A.partyalert()
|
|
return
|
|
|
|
/obj/machinery/partyalarm/Topic(href, href_list)
|
|
..()
|
|
if (usr.stat || stat & (BROKEN|NOPOWER))
|
|
return
|
|
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
|
usr.machine = src
|
|
if (href_list["reset"])
|
|
src.reset()
|
|
else
|
|
if (href_list["alarm"])
|
|
src.alarm()
|
|
else
|
|
if (href_list["time"])
|
|
src.timing = text2num(href_list["time"])
|
|
else
|
|
if (href_list["tp"])
|
|
var/tp = text2num(href_list["tp"])
|
|
src.time += tp
|
|
src.time = min(max(round(src.time), 0), 120)
|
|
src.updateUsrDialog()
|
|
|
|
src.add_fingerprint(usr)
|
|
else
|
|
usr << browse(null, "window=partyalarm")
|
|
return
|
|
return
|