mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
- Fixed vaccines not giving resistance if mob isn't infected.
- Added control interface for atmo mixer and pumps. - Atmo meters now also show gas temperature - Mecha logs. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@741 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -22,9 +22,11 @@ obj/machinery/atmospherics/binary/pump
|
||||
var/on = 0
|
||||
var/target_pressure = ONE_ATMOSPHERE
|
||||
|
||||
/*
|
||||
attack_hand(mob/user)
|
||||
on = !on
|
||||
update_icon()
|
||||
*/
|
||||
|
||||
update_icon()
|
||||
if(node1&&node2)
|
||||
@@ -123,6 +125,39 @@ obj/machinery/atmospherics/binary/pump
|
||||
|
||||
target_pressure = number
|
||||
|
||||
if(signal.data["tag"])
|
||||
spawn(5) broadcast_status()
|
||||
update_icon()
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
attack_hand(user as mob)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
if(!src.allowed(user))
|
||||
user << "\red Access denied."
|
||||
return
|
||||
usr.machine = src
|
||||
var/dat = {"<b>Power: </b><a href='?src=\ref[src];power=1'>[on?"On":"Off"]</a><br>
|
||||
<b>Desirable output pressure: </b>
|
||||
<a href='?src=\ref[src];out_press=-100'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-10'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-1'>-</a>
|
||||
[round(target_pressure,0.1)]kPa
|
||||
<a href='?src=\ref[src];out_press=1'>+</a>
|
||||
<a href='?src=\ref[src];out_press=10'><b>+</b></a>
|
||||
<a href='?src=\ref[src];out_press=100'><b>+</b></a>
|
||||
"}
|
||||
|
||||
user << browse("<HEAD><TITLE>[src.name] control</TITLE></HEAD><TT>[dat]</TT>", "window=atmo_pump")
|
||||
onclose(user, "atmo_pump")
|
||||
return
|
||||
|
||||
Topic(href,href_list)
|
||||
if(href_list["power"])
|
||||
on = !on
|
||||
if(href_list["out_press"])
|
||||
src.target_pressure = max(0, min(4500, src.target_pressure + text2num(href_list["out_press"])))
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -336,7 +336,9 @@ obj/machinery/atmospherics/filter/attack_hand(user as mob) // -- TLE
|
||||
else
|
||||
current_filter_type = "ERROR - Report this bug to the admin, please!"
|
||||
|
||||
dat += {"<b>Filtering: </b>[current_filter_type]<br><HR>
|
||||
dat += {"
|
||||
<b>Power: </b><a href='?src=\ref[src];power=1'>[on?"On":"Off"]</a><br>
|
||||
<b>Filtering: </b>[current_filter_type]<br><HR>
|
||||
<h4>Set Filter Type:</h4>
|
||||
<A href='?src=\ref[src];filterset=0'>Carbon Molecules</A><BR>
|
||||
<A href='?src=\ref[src];filterset=1'>Oxygen</A><BR>
|
||||
@@ -344,12 +346,15 @@ obj/machinery/atmospherics/filter/attack_hand(user as mob) // -- TLE
|
||||
<A href='?src=\ref[src];filterset=3'>Carbon Dioxide</A><BR>
|
||||
<A href='?src=\ref[src];filterset=4'>Nitrous Oxide</A><BR>
|
||||
<A href='?src=\ref[src];filterset=-1'>Nothing</A><BR>
|
||||
<HR><B>Desirible output pressure:</B>
|
||||
<HR><B>Desirable output pressure:</B>
|
||||
<a href='?src=\ref[src];out_press=-100'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-10'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-1'>-</a>
|
||||
[src.target_pressure]
|
||||
<a href='?src=\ref[src];out_press=1'>+</a>
|
||||
<a href='?src=\ref[src];out_press=10'><b>+</b></a>"}
|
||||
<a href='?src=\ref[src];out_press=10'><b>+</b></a>
|
||||
<a href='?src=\ref[src];out_press=100'><b>+</b></a>
|
||||
"}
|
||||
/*
|
||||
user << browse("<HEAD><TITLE>[src.name] control</TITLE></HEAD>[dat]","window=atmo_filter")
|
||||
onclose(user, "atmo_filter")
|
||||
@@ -375,8 +380,13 @@ obj/machinery/atmospherics/filter/Topic(href, href_list) // -- TLE
|
||||
src.temp = null
|
||||
if(href_list["out_press"])
|
||||
src.target_pressure = max(0, min(4000, src.target_pressure + text2num(href_list["out_press"])))
|
||||
|
||||
if(href_list["power"])
|
||||
on=!on
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
/*
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
*/
|
||||
return
|
||||
|
||||
@@ -7,6 +7,7 @@ obj/machinery/atmospherics/mixer
|
||||
|
||||
dir = SOUTH
|
||||
initialize_directions = SOUTH|NORTH|WEST
|
||||
req_access = list(access_atmospherics)
|
||||
|
||||
var/on = 0
|
||||
|
||||
@@ -246,4 +247,59 @@ obj/machinery/atmospherics/mixer
|
||||
del(network_out)
|
||||
node_out = null
|
||||
|
||||
return null
|
||||
return null
|
||||
|
||||
|
||||
attack_hand(user as mob)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
if(!src.allowed(user))
|
||||
user << "\red Access denied."
|
||||
return
|
||||
usr.machine = src
|
||||
var/dat = {"<b>Power: </b><a href='?src=\ref[src];power=1'>[on?"On":"Off"]</a><br>
|
||||
<b>Desirable output pressure: </b>
|
||||
<a href='?src=\ref[src];out_press=-100'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-10'><b>-</b></a>
|
||||
<a href='?src=\ref[src];out_press=-1'>-</a>
|
||||
[target_pressure]kPa
|
||||
<a href='?src=\ref[src];out_press=1'>+</a>
|
||||
<a href='?src=\ref[src];out_press=10'><b>+</b></a>
|
||||
<a href='?src=\ref[src];out_press=100'><b>+</b></a>
|
||||
<br>
|
||||
<b>Node 1 Concentration:</b>
|
||||
<a href='?src=\ref[src];node1_c=-0.1'><b>-</b></a>
|
||||
<a href='?src=\ref[src];node1_c=-0.01'>-</a>
|
||||
[node1_concentration]([node1_concentration*100]%)
|
||||
<a href='?src=\ref[src];node1_c=0.01'><b>+</b></a>
|
||||
<a href='?src=\ref[src];node1_c=0.1'>+</a>
|
||||
<br>
|
||||
<b>Node 2 Concentration:</b>
|
||||
<a href='?src=\ref[src];node2_c=-0.1'><b>-</b></a>
|
||||
<a href='?src=\ref[src];node2_c=-0.01'>-</a>
|
||||
[node2_concentration]([node2_concentration*100]%)
|
||||
<a href='?src=\ref[src];node2_c=0.01'><b>+</b></a>
|
||||
<a href='?src=\ref[src];node2_c=0.1'>+</a>
|
||||
"}
|
||||
|
||||
user << browse("<HEAD><TITLE>[src.name] control</TITLE></HEAD><TT>[dat]</TT>", "window=atmo_mixer")
|
||||
onclose(user, "atmo_mixer")
|
||||
return
|
||||
|
||||
Topic(href,href_list)
|
||||
if(href_list["power"])
|
||||
on = !on
|
||||
if(href_list["out_press"])
|
||||
src.target_pressure = max(0, min(4500, src.target_pressure + text2num(href_list["out_press"])))
|
||||
if(href_list["node1_c"])
|
||||
var/value = text2num(href_list["node1_c"])
|
||||
src.node1_concentration = max(0, min(1, src.node1_concentration + value))
|
||||
src.node2_concentration = max(0, min(1, src.node2_concentration - value))
|
||||
if(href_list["node2_c"])
|
||||
var/value = text2num(href_list["node2_c"])
|
||||
src.node2_concentration = max(0, min(1, src.node2_concentration + value))
|
||||
src.node1_concentration = max(0, min(1, src.node1_concentration - value))
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -154,6 +154,8 @@ datum
|
||||
if(self.data&&method == INGEST)
|
||||
if(M.virus && M.virus.type == self.data)
|
||||
M.virus.cure()
|
||||
else if(!(self.data in M.resistances))
|
||||
M.resistances += self.data
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -22,50 +22,49 @@
|
||||
usr << "\blue You deactivate the GPS"
|
||||
|
||||
proc/work()
|
||||
if(!active) return
|
||||
if(!beacon)
|
||||
for(var/obj/ship_landing_beacon/B in world)
|
||||
if(B.name == "Beacon - SS13")
|
||||
beacon = B
|
||||
break
|
||||
|
||||
while(active)
|
||||
if(!beacon)
|
||||
usr << "\red Unable to detect beacon signal."
|
||||
for(var/obj/ship_landing_beacon/B in world)
|
||||
if(B.name == "Beacon - SS13")
|
||||
beacon = B
|
||||
break
|
||||
|
||||
if(!beacon)
|
||||
usr << "\red Unable to detect beacon signal."
|
||||
active = 0
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
|
||||
if(!istype(src.loc, /turf) && !istype(src.loc, /mob))
|
||||
usr << "\red Too much interference. Please hold the device in hand or place it on belt."
|
||||
active = 0
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
|
||||
if(!istype(src.loc, /turf) && !istype(src.loc, /mob))
|
||||
usr << "\red Too much interference. Please hold the device in hand or place it on belt."
|
||||
active = 0
|
||||
icon_state = "pinonnull"
|
||||
return
|
||||
src.icon_state = "pinonfar"
|
||||
|
||||
src.icon_state = "pinonfar"
|
||||
var/atom/cur_loc = src.loc
|
||||
|
||||
var/atom/cur_loc = src.loc
|
||||
if(cur_loc.z == beacon.z)
|
||||
src.dir = get_dir(cur_loc,beacon)
|
||||
else
|
||||
var/list/beacon_global_loc = beacon.get_global_map_pos()
|
||||
var/list/src_global_loc = cur_loc.get_global_map_pos()
|
||||
if(beacon_global_loc && src_global_loc)
|
||||
var/hor_dir = 0
|
||||
var/ver_dir = 0
|
||||
if(beacon_global_loc["x"]>src_global_loc["x"])
|
||||
hor_dir = EAST
|
||||
else if(beacon_global_loc["x"]<src_global_loc["x"])
|
||||
hor_dir = WEST
|
||||
|
||||
if(cur_loc.z == beacon.z)
|
||||
src.dir = get_dir(cur_loc,beacon)
|
||||
else
|
||||
var/list/beacon_global_loc = beacon.get_global_map_pos()
|
||||
var/list/src_global_loc = cur_loc.get_global_map_pos()
|
||||
if(beacon_global_loc && src_global_loc)
|
||||
var/hor_dir = 0
|
||||
var/ver_dir = 0
|
||||
if(beacon_global_loc["x"]>src_global_loc["x"])
|
||||
hor_dir = EAST
|
||||
else if(beacon_global_loc["x"]<src_global_loc["x"])
|
||||
hor_dir = WEST
|
||||
if(beacon_global_loc["y"]>src_global_loc["y"])
|
||||
ver_dir = NORTH
|
||||
else if(beacon_global_loc["y"]<src_global_loc["y"])
|
||||
ver_dir = SOUTH
|
||||
|
||||
if(beacon_global_loc["y"]>src_global_loc["y"])
|
||||
ver_dir = NORTH
|
||||
else if(beacon_global_loc["y"]<src_global_loc["y"])
|
||||
ver_dir = SOUTH
|
||||
|
||||
src.dir = hor_dir|ver_dir
|
||||
|
||||
spawn(5) .()
|
||||
src.dir = hor_dir|ver_dir
|
||||
sleep(5)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/explorers_box
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
if (src.target)
|
||||
var/datum/gas_mixture/environment = target.return_air()
|
||||
if(environment)
|
||||
t += text("The pressure gauge reads [] kPa", round(environment.return_pressure(), 0.1))
|
||||
t += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]°K ([round(environment.temperature-T0C,0.01)]°C)"
|
||||
else
|
||||
t += "The sensor error light is blinking."
|
||||
else
|
||||
@@ -78,7 +78,7 @@
|
||||
if (src.target)
|
||||
var/datum/gas_mixture/environment = target.return_air()
|
||||
if(environment)
|
||||
t = text("<B>Pressure:</B> [] kPa", round(environment.return_pressure(), 0.1))
|
||||
t = "<B>Pressure:</B> [round(environment.return_pressure(), 0.01)] kPa; <B>Temperature:</B> [round(environment.temperature,0.01)]°K ([round(environment.temperature-T0C,0.01)]°C)"
|
||||
else
|
||||
t = "\red <B>Results: Sensor Error!</B>"
|
||||
else
|
||||
|
||||
@@ -191,6 +191,7 @@
|
||||
src.Move(src.loc)
|
||||
if(usr.client)
|
||||
usr.client.mouse_pointer_icon = file("icons/misc/mecha_mouse.dmi")
|
||||
src.log_message("[usr] moved in as pilot.")
|
||||
return
|
||||
|
||||
/obj/mecha/combat/go_out()
|
||||
@@ -209,6 +210,7 @@
|
||||
weapons -= destr_weapon
|
||||
destr_weapon.destroy()
|
||||
src.occupant_message("<font color='red'>The [destr_weapon] is destroyed!</font>")
|
||||
src.log_append_to_last("[destr_weapon] is destoyed.",1)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
if(!istype(mecha, /obj/mecha/combat))
|
||||
return
|
||||
src.chassis = mecha
|
||||
chassis.log_append_to_last("[src.name] initialized.")
|
||||
return
|
||||
|
||||
/datum/mecha_weapon/proc/destroy()
|
||||
@@ -55,6 +56,7 @@
|
||||
missiles--
|
||||
spawn(weapon_cooldown)
|
||||
weapon_ready = 1
|
||||
chassis.log_message("Fired from [src.name], targeting [target].",1)
|
||||
return
|
||||
|
||||
proc/rearm()
|
||||
@@ -64,6 +66,7 @@
|
||||
missiles++
|
||||
missiles_to_add--
|
||||
chassis.cell.charge -= missile_energy_cost
|
||||
chassis.log_message("Rearmed [src.name].")
|
||||
return
|
||||
|
||||
get_weapon_info()
|
||||
@@ -108,6 +111,7 @@
|
||||
F.prime()
|
||||
spawn(weapon_cooldown)
|
||||
weapon_ready = 1
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
return
|
||||
|
||||
/datum/mecha_weapon/laser
|
||||
@@ -136,7 +140,7 @@
|
||||
A.process()
|
||||
spawn(weapon_cooldown)
|
||||
weapon_ready = 1
|
||||
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
return
|
||||
|
||||
|
||||
@@ -144,6 +148,7 @@
|
||||
weapon_cooldown = 50
|
||||
name = "eZ-13 mk2 Heavy pulse rifle"
|
||||
energy_drain = 60
|
||||
var/num_penetrations = 2
|
||||
|
||||
fire(target)
|
||||
if(!fire_checks(target)) return
|
||||
@@ -157,6 +162,7 @@
|
||||
|
||||
playsound(chassis, 'marauder.ogg', 50, 1)
|
||||
var/obj/beam/a_laser/A = new /obj/beam/a_laser/pulse_laser(curloc)
|
||||
A.life = num_penetrations
|
||||
A.current = curloc
|
||||
A.yo = targloc.y - curloc.y
|
||||
A.xo = targloc.x - curloc.x
|
||||
@@ -166,7 +172,7 @@
|
||||
A.process()
|
||||
spawn(weapon_cooldown)
|
||||
weapon_ready = 1
|
||||
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
return
|
||||
|
||||
|
||||
@@ -174,6 +180,7 @@
|
||||
weapon_cooldown = 10
|
||||
name = "PBT \"Pacifier\" Mounted Taser"
|
||||
energy_drain = 20
|
||||
weapon_cooldown = 7
|
||||
|
||||
fire(target)
|
||||
if(!fire_checks(target)) return
|
||||
@@ -196,7 +203,7 @@
|
||||
A.process()
|
||||
spawn(weapon_cooldown)
|
||||
weapon_ready = 1
|
||||
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
return
|
||||
|
||||
|
||||
|
||||
+71
-15
@@ -22,6 +22,7 @@
|
||||
var/deflect_chance = 2 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
|
||||
var/obj/item/weapon/cell/cell = new
|
||||
var/state = 0
|
||||
var/list/log = new
|
||||
|
||||
var/datum/effects/system/spark_spread/spark_system = new
|
||||
var/lights = 0
|
||||
@@ -48,6 +49,7 @@
|
||||
var/datum/global_iterator/pr_location_temp_check //processes location temperature damage
|
||||
var/datum/global_iterator/pr_internal_damage //processes internal damage
|
||||
|
||||
|
||||
/obj/mecha/New()
|
||||
..()
|
||||
src.air_contents.volume = gas_tank_volume //liters
|
||||
@@ -64,8 +66,10 @@
|
||||
pr_inertial_movement = new /datum/global_iterator/mecha_intertial_movement(null,0)
|
||||
pr_location_temp_check = new /datum/global_iterator/mecha_location_temp_check(list(src))
|
||||
pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0)
|
||||
|
||||
src.verbs -= /obj/mecha/verb/disconnect_from_port
|
||||
src.verbs -= /atom/movable/verb/pull
|
||||
src.log_message("[src.name] created.")
|
||||
return
|
||||
|
||||
/obj/mecha/Del()
|
||||
@@ -140,6 +144,7 @@
|
||||
if(istype(src.loc, /turf/space))
|
||||
if(!src.check_for_support())
|
||||
src.pr_inertial_movement.start(list(src,direction))
|
||||
src.log_message("Movement control lost. Inertial movement started.")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -192,6 +197,7 @@
|
||||
if("fire")
|
||||
src.health -= amount*1.2
|
||||
src.update_health()
|
||||
src.log_append_to_last("Took [amount] points of damage. Damage type: \"[type]\".",1)
|
||||
return
|
||||
|
||||
/obj/mecha/proc/check_for_internal_damage(var/list/possible_int_damage,var/ignore_threshold=null)//TODO
|
||||
@@ -206,6 +212,7 @@
|
||||
if(int_dam_flag)
|
||||
internal_damage |= int_dam_flag
|
||||
pr_internal_damage.start()
|
||||
src.log_append_to_last("Internal damage of type [int_dam_flag].[ignore_threshold?"Ignoring damage threshold.":null]",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -217,6 +224,7 @@
|
||||
return
|
||||
|
||||
/obj/mecha/attack_hand(mob/user as mob)
|
||||
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
||||
if (user.mutations & 8 && !prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
@@ -225,6 +233,7 @@
|
||||
else
|
||||
src.visible_message("<font color='red'><b>[user] hits [src.name]. Nothing happens</b></font>")
|
||||
user << "<font color='red'><b>You hit [src.name] with no visible effect.</b></font>"
|
||||
src.log_append_to_last("Armor saved.")
|
||||
return
|
||||
|
||||
/obj/mecha/attack_paw(mob/user as mob)
|
||||
@@ -232,6 +241,7 @@
|
||||
|
||||
|
||||
/obj/mecha/attack_alien(mob/user as mob)
|
||||
src.log_message("Attack by alien. Attacker - [user].",1)
|
||||
if(!prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
@@ -241,6 +251,7 @@
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("\red The [user] slashes at [src.name]'s armor!", 1)
|
||||
else
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src.loc, 'slash.ogg', 50, 1, -1)
|
||||
user << "\green Your claws had no effect!"
|
||||
src.occupant_message("\blue The [user]'s claws are stopped by the armor.")
|
||||
@@ -251,8 +262,10 @@
|
||||
|
||||
|
||||
/obj/mecha/hitby(A as mob|obj)
|
||||
src.log_message("Hit by [A].",1)
|
||||
if(prob(src.deflect_chance) || istype(A, /mob))
|
||||
src.occupant_message("\blue The [A] bounces off the armor.")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("The [A] bounces off the [src.name] armor", 1)
|
||||
@@ -260,22 +273,34 @@
|
||||
var/mob/M = A
|
||||
M.bruteloss += 10
|
||||
M.updatehealth()
|
||||
return
|
||||
|
||||
else if(istype(A, /obj))
|
||||
var/obj/O = A
|
||||
if(O.throwforce)
|
||||
src.take_damage(O.throwforce)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/bullet_act(flag)
|
||||
var/dam_type
|
||||
switch(dam_type)
|
||||
if(PROJECTILE_PULSE)
|
||||
dam_type = "Pulse"
|
||||
if(PROJECTILE_LASER)
|
||||
dam_type = "Laser"
|
||||
if(PROJECTILE_TASER)
|
||||
dam_type = "Taser"
|
||||
else
|
||||
dam_type = "Default"
|
||||
src.log_message("Hit by projectile. Type: [dam_type]([flag]).",1)
|
||||
if(prob(src.deflect_chance))
|
||||
src.occupant_message("\blue The armor deflects the incoming projectile.")
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("The [src.name] armor deflects the projectile", 1)
|
||||
src.log_append_to_last("Armor saved.")
|
||||
else
|
||||
var/damage
|
||||
var/ignore_threshold
|
||||
@@ -309,8 +334,10 @@
|
||||
return
|
||||
|
||||
/obj/mecha/ex_act(severity)
|
||||
src.log_message("Affected by explosion of severity: [severity].",1)
|
||||
if(prob(src.deflect_chance))
|
||||
severity++
|
||||
src.log_append_to_last("Armor saved, changing severity to [severity].")
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.destroy()
|
||||
@@ -328,17 +355,6 @@
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST),1)
|
||||
return
|
||||
|
||||
/obj/mecha/proc/check_location_temp()
|
||||
spawn while(src)
|
||||
if(istype(src.loc, /turf/simulated/))
|
||||
var/turf/simulated/T = src.loc
|
||||
if(T.air)
|
||||
if(T.air.temperature > src.max_temperature)
|
||||
src.take_damage(10)
|
||||
sleep(10)
|
||||
return
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
//////// Atmospheric stuff ////////
|
||||
/////////////////////////////////////
|
||||
@@ -387,7 +403,7 @@
|
||||
var/datum/pipe_network/network = connected_port.return_network(src)
|
||||
if(network && !network.gases.Find(air_contents))
|
||||
network.gases += air_contents
|
||||
|
||||
src.log_message("Connected to gas port.")
|
||||
return 1
|
||||
|
||||
/obj/mecha/proc/disconnect()
|
||||
@@ -400,7 +416,7 @@
|
||||
|
||||
connected_port.connected_device = null
|
||||
connected_port = null
|
||||
|
||||
src.log_message("Disconnected from gas port.")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -455,6 +471,8 @@
|
||||
src.sd_SetLuminosity(src.luminosity + src.lights_power)
|
||||
else
|
||||
src.sd_SetLuminosity(src.luminosity - src.lights_power)
|
||||
src.log_message("Toggled lights.")
|
||||
return
|
||||
|
||||
/obj/mecha/verb/move_inside()
|
||||
set name = "Move Inside"
|
||||
@@ -462,8 +480,10 @@
|
||||
|
||||
if (usr.stat != 0 || !istype(usr, /mob/living/carbon/human))
|
||||
return
|
||||
src.log_message("[usr] tries to move in.")
|
||||
if (src.occupant)
|
||||
usr << "\blue <B>The [src.name] is already occupied!</B>"
|
||||
src.log_append_to_last("Permission denied.")
|
||||
return
|
||||
/*
|
||||
if (usr.abiotic())
|
||||
@@ -472,6 +492,7 @@
|
||||
*/
|
||||
if(!src.operation_allowed(usr))
|
||||
usr << "\red Access denied"
|
||||
src.log_append_to_last("Permission denied.")
|
||||
return
|
||||
usr << "You start climbing into [src.name]"
|
||||
spawn(20)
|
||||
@@ -483,6 +504,7 @@
|
||||
src.add_fingerprint(usr)
|
||||
src.Entered(usr)
|
||||
src.Move(src.loc)
|
||||
src.log_append_to_last("[usr] moved in as pilot.")
|
||||
return
|
||||
|
||||
|
||||
@@ -509,6 +531,7 @@
|
||||
/obj/mecha/proc/go_out()
|
||||
if(!src.occupant) return
|
||||
if(src.occupant.Move(src.loc))
|
||||
src.log_message("[src.occupant] moved out.")
|
||||
src.Exited(src.occupant)
|
||||
if (src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
@@ -516,6 +539,7 @@
|
||||
src.occupant << browse(null, "window=exosuit")
|
||||
src.occupant = null
|
||||
src.pr_update_stats.stop()
|
||||
|
||||
return
|
||||
|
||||
////// Misc
|
||||
@@ -526,6 +550,26 @@
|
||||
src.occupant << "[message]"
|
||||
return
|
||||
|
||||
/obj/mecha/proc/log_message(message as text,red=null)
|
||||
log.len++
|
||||
log[log.len] = list("time"=world.timeofday,"message"="[red?"<font color='red'>":null][message][red?"</font>":null]")
|
||||
return log.len
|
||||
|
||||
/obj/mecha/proc/log_append_to_last(message as text,red=null)
|
||||
var/list/last_entry = src.log[src.log.len]
|
||||
last_entry["message"] += "<br>[red?"<font color='red'>":null][message][red?"</font>":null]"
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/proc/get_log_html()
|
||||
var/output = "<html><head><title>[src.name] Log</title></head><body style='font: 13px 'Courier', monospace;'>"
|
||||
for(var/list/entry in log)
|
||||
output += {"<div style='font-weight: bold;'>[time2text(entry["time"],"DDD MMM DD hh:mm:ss")]</div>
|
||||
<div style='margin-left:15px; margin-bottom:10px;'>[entry["message"]]</div>
|
||||
"}
|
||||
output += "</body></html>"
|
||||
return output
|
||||
|
||||
/obj/mecha/proc/operation_allowed(mob/living/carbon/human/H)
|
||||
//check if it doesn't require any access at all
|
||||
if(src.check_operational_access(null))
|
||||
@@ -573,6 +617,7 @@
|
||||
|
||||
|
||||
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
src.log_message("Attacked by [W].")
|
||||
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(src.internals_access_allowed(usr))
|
||||
if(state==0)
|
||||
@@ -609,6 +654,7 @@
|
||||
src.cell = null
|
||||
state = 4
|
||||
user << "You unscrew and pry out the powercell."
|
||||
src.log_message("Powercell removed")
|
||||
else if(state==4 && src.cell)
|
||||
state=3
|
||||
user << "You screw the cell in place"
|
||||
@@ -621,6 +667,7 @@
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.cell = W
|
||||
src.log_message("Powercell installed")
|
||||
else
|
||||
user << "There's already a powercell installed."
|
||||
return
|
||||
@@ -644,6 +691,7 @@
|
||||
else
|
||||
if(prob(src.deflect_chance))
|
||||
user << "\red The [W] bounces off [src.name] armor."
|
||||
src.log_append_to_last("Armor saved.")
|
||||
/*
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
@@ -684,6 +732,7 @@
|
||||
var/output = {"<a href='?src=\ref[src];toggle_lights=1'>Toggle Lights</a><br>
|
||||
[(/obj/mecha/verb/disconnect_from_port in src.verbs)?"<a href='?src=\ref[src];port_disconnect=1'>Disconnect from port</a><br>":null]
|
||||
[(/obj/mecha/verb/connect_to_port in src.verbs)?"<a href='?src=\ref[src];port_connect=1'>Connect to port</a><br>":null]
|
||||
<a href='?src=\ref[src];view_log=1'>View internal log</a><br>
|
||||
<a href='?src=\ref[src];eject=1'>Eject</a><br>
|
||||
"}
|
||||
return output
|
||||
@@ -705,15 +754,22 @@
|
||||
if (href_list["eject"])
|
||||
src.eject()
|
||||
return
|
||||
if (href_list["view_log"])
|
||||
src.occupant << browse(src.get_log_html(), "window=exosuit_log")
|
||||
onclose(occupant, "exosuit_log")
|
||||
return
|
||||
if (href_list["repair_int_control_lost"])
|
||||
src.occupant_message("Recalibrating coordination system.")
|
||||
src.log_message("Recalibration of coordination system started.")
|
||||
var/T = src.loc
|
||||
spawn(100)
|
||||
if(T == src.loc)
|
||||
src.internal_damage &= ~MECHA_INT_CONTROL_LOST
|
||||
src.occupant_message("<font color='blue'>Recalibration successful.</font>")
|
||||
src.log_message("Recalibration of coordination system finished with 0 errors.")
|
||||
else
|
||||
src.occupant_message("<font color='red'>Recalibration failed.</font>")
|
||||
src.log_message("Recalibration of coordination system failed with 1 error.",1)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
if(!istype(mecha, /obj/mecha/working))
|
||||
return
|
||||
src.chassis = mecha
|
||||
chassis.log_append_to_last("[src.name] initialized.")
|
||||
return
|
||||
|
||||
|
||||
@@ -75,6 +76,7 @@
|
||||
O.loc = chassis
|
||||
O.anchored = 0
|
||||
chassis.occupant_message("<font color='blue'>[target] succesfully loaded.</font>")
|
||||
chassis.log_message("Loaded [O]. Cargo compartment capacity: [chassis.cargo_capacity - chassis.cargo.len]")
|
||||
else
|
||||
chassis.occupant_message("<font color='red'>You must hold still while handling objects.</font>")
|
||||
tool_ready = 1
|
||||
@@ -123,6 +125,7 @@
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
chassis.occupant_message("\red The [target] is too durable to drill through.")
|
||||
else
|
||||
chassis.log_message("Drilled through [target]")
|
||||
target.ex_act(2)
|
||||
tool_ready = 1
|
||||
return
|
||||
|
||||
@@ -33,13 +33,11 @@
|
||||
var/turf/T = get_turf(O.loc)
|
||||
if(T)
|
||||
T.Entered(O)
|
||||
return
|
||||
|
||||
src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
|
||||
if (href_list["select_tool"])
|
||||
var/tool = locate(href_list["select_tool"])
|
||||
if(tool)
|
||||
src.selected_tool = tool
|
||||
return
|
||||
return
|
||||
|
||||
/obj/mecha/working/get_stats_part()
|
||||
@@ -70,4 +68,5 @@
|
||||
tools -= destr_tool
|
||||
destr_tool.destroy()
|
||||
src.occupant_message("<font color='red'>The [destr_tool] is destroyed!</font>")
|
||||
src.log_append_to_last("[destr_tool] is destroyed.")
|
||||
return
|
||||
Reference in New Issue
Block a user