//////////////////////////////////// ///// Rendering stats window /////// //////////////////////////////////// /obj/mecha/proc/get_stats_html() var/output = {" [name] data
[get_stats_part()]
[get_equipment_list()]

[get_commands()]
"} return output /obj/mecha/proc/report_internal_damage() var/output = null var/list/dam_reports = list( "[MECHA_INT_FIRE]" = "INTERNAL FIRE", "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" ) for(var/tflag in dam_reports) var/intdamflag = text2num(tflag) if(hasInternalDamage(intdamflag)) output += dam_reports[tflag] output += "
" if(cabin_air.return_pressure() > WARNING_HIGH_PRESSURE) output += "DANGEROUSLY HIGH CABIN PRESSURE
" return output /obj/mecha/proc/get_stats_part() var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" var/tank_temperature_c = internal_tank ? internal_tank.return_temperature() - T0C : "Unknown" var/cabin_pressure = round(cabin_air.return_pressure(), 0.01) . = "[report_internal_damage()]" . += "[integrity<30?"DAMAGE LEVEL CRITICAL
":null]" . += "Integrity: [integrity]%
" . += "Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
" . += "Air source: [use_internal_tank?"Internal Airtank":"Environment"]
" . += "Airtank pressure: [tank_pressure]kPa
" . += "Airtank temperature: [tank_temperature]°K|[tank_temperature_c]°C
" . += "Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
" . += "Cabin temperature: [cabin_air.temperature()]°K|[cabin_air.temperature() - T0C]°C
" . += "Lights: [lights?"on":"off"]
" . += "[dna ? "DNA-locked:
[dna] \[Reset\]
" : ""]" . += "[defense_action.owner ? "Defence Mode: [defence_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
" : ""]" . += "[smoke_action.owner ? "Smoke: [smoke]
" : ""]" . += "[zoom_action.owner ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
" : ""]" . += "[phasing_action.owner ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
" : ""]" /obj/mecha/proc/get_commands() . = "
" . += "
Electronics
" . += "" . += "
" . += "
" . += "
Airtank
" . += "" . += "
" . += "
" . += "
Permissions & Logging
" . += "" . += "
" . += "
[get_equipment_menu()]
" . += "
" . += "Eject
" /obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu . = "" if(length(equipment)) . += "
" . += "
Equipment
" . += "
" /obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html if(!length(equipment)) return . = "Equipment:
" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) . += "
[MT.get_equip_info()]
" . += "
" /obj/mecha/proc/get_log_html() var/output = "[name] Log" for(var/list/entry in log) output += {"
[time2text(entry["time"],"DDD MMM DD hh:mm:ss")] 2555
[entry["message"]]
"} output += "" return output /obj/mecha/proc/get_log_tgui() var/list/data = list() for(var/list/entry in log) data.Add(list(list( "time" = time2text(entry["time"], "hh:mm:ss"), "message" = entry["message"], ))) return data /obj/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user) if(!id_card || !user) return var/output = {"

Following keycodes are present in this system:

"} for(var/a in operation_req_access) output += "[get_access_desc(a)] - Delete
" output += "
Delete All

" output += "

Following keycodes were detected on portable device:

" for(var/a in id_card.access) if(a in operation_req_access) continue if(!get_access_desc(a)) continue //there's some strange access without a name output += "[get_access_desc(a)] - Add
" output += "
Add All

" output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" output += "" user << browse(output, "window=exosuit_add_access") onclose(user, "exosuit_add_access") return /obj/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user) if(!id_card || !user) return var/output = {" [add_req_access?"Edit operation keycodes":null] [maint_access?"Initiate/Stop maintenance protocol":null] [(state>0) ?"Set Cabin Air Pressure":null] "} user << browse(output, "window=exosuit_maint_console") onclose(user, "exosuit_maint_console") return //////////////////////////////// /////// Messages and Log /////// //////////////////////////////// /obj/mecha/proc/occupant_message(message as text) if(message) if(occupant && occupant.client) to_chat(occupant, "[bicon(src)] [message]") return /obj/mecha/proc/log_message(message as text,red=null) log.len++ log[length(log)] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") return length(log) /obj/mecha/proc/log_append_to_last(message as text,red=null) var/list/last_entry = log[length(log)] last_entry["message"] += "
[red?"":null][message][red?"":null]" return ///////////////// ///// Topic ///// ///////////////// /obj/mecha/Topic(href, href_list) ..() if(href_list["update_content"]) if(usr != occupant) return send_byjax(occupant,"exosuit.browser","content",get_stats_part()) return if(href_list["close"]) return if(usr.stat != CONSCIOUS) return var/datum/topic_input/afilter = new /datum/topic_input(href,href_list) if(href_list["select_equip"]) if(usr != occupant) return var/obj/item/mecha_parts/mecha_equipment/equip = afilter.getObj("select_equip") if(equip) selected = equip occupant_message("You switch to [equip]") visible_message("[src] raises [equip]") send_byjax(occupant, "exosuit.browser", "eq_list", get_equipment_list()) return if(href_list["eject"]) if(usr != occupant) return go_out() return if(href_list["toggle_lights"]) if(usr != occupant) return toggle_lights() return if(href_list["toggle_airtank"]) if(usr != occupant) return toggle_internal_tank() return if(href_list["rmictoggle"]) if(usr != occupant) return radio.broadcasting = !radio.broadcasting send_byjax(occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) return if(href_list["rspktoggle"]) if(usr != occupant) return radio.listening = !radio.listening send_byjax(occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) return if(href_list["rfreq"]) if(usr != occupant) return var/new_frequency = (radio.frequency + afilter.getNum("rfreq")) if(radio.frequency < PUBLIC_LOW_FREQ || radio.frequency > PUBLIC_HIGH_FREQ) new_frequency = sanitize_frequency(new_frequency) radio.set_frequency(new_frequency) send_byjax(occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") return if(href_list["view_log"]) if(usr != occupant) return occupant << browse(get_log_html(), "window=exosuit_log") onclose(occupant, "exosuit_log") return if(href_list["change_name"]) if(usr != occupant) return var/newname = strip_html_simple(input(occupant,"Choose new exosuit name","Rename exosuit",initial(name)) as text, MAX_NAME_LEN) if(newname && trim(newname)) name = newname log_game("[key_name(occupant)] has renamed an exosuit [newname]") else alert(occupant, "nope.avi") return if(href_list["toggle_id_upload"]) if(usr != occupant) return add_req_access = !add_req_access send_byjax(occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") return if(href_list["toggle_maint_access"]) if(usr != occupant) return if(state) occupant_message("Maintenance protocols in effect") return maint_access = !maint_access send_byjax(occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") return if(href_list["req_access"] && add_req_access) if(!in_range(src, usr)) return output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) return if(href_list["maint_access"] && maint_access) if(!in_range(src, usr)) return var/mob/user = afilter.getMob("user") if(user) if(state == MECHA_MAINT_OFF) state = MECHA_MAINT_ON to_chat(user, "The securing bolts are now exposed.") if(occupant) occupant.throw_alert("locked", /atom/movable/screen/alert/mech_maintenance) else if(state == MECHA_MAINT_ON) state = MECHA_MAINT_OFF to_chat(user, "The securing bolts are now hidden.") if(occupant) occupant.clear_alert("locked") output_maintenance_dialog(afilter.getObj("id_card"),user) return if(href_list["set_internal_tank_valve"] && state >= MECHA_MAINT_ON) if(!in_range(src, usr)) return var/mob/user = afilter.getMob("user") if(user) var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num if(new_pressure) internal_tank_valve = new_pressure to_chat(user, "The internal pressure valve has been set to [internal_tank_valve]kPa.") if(href_list["add_req_access"] && add_req_access && afilter.getObj("id_card")) if(!in_range(src, usr)) return operation_req_access += afilter.getNum("add_req_access") output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) return if(href_list["add_all_req_access"] && add_req_access && afilter.getObj("id_card")) if(!in_range(src, usr)) return var/obj/item/card/id/mycard = afilter.getObj("id_card") var/list/myaccess = mycard.access for(var/a in myaccess) if(get_access_desc(a)) operation_req_access += a output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) return if(href_list["del_req_access"] && add_req_access && afilter.getObj("id_card")) if(!in_range(src, usr)) return operation_req_access -= afilter.getNum("del_req_access") output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) return if(href_list["del_all_req_access"] && add_req_access && afilter.getObj("id_card")) if(!in_range(src, usr)) return operation_req_access = list() output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user")) return if(href_list["finish_req_access"]) if(!in_range(src, usr)) return add_req_access = 0 var/mob/user = afilter.getMob("user") user << browse(null,"window=exosuit_add_access") return if(href_list["dna_lock"]) if(usr != occupant) return if(occupant && !iscarbon(occupant)) to_chat(occupant, "You do not have any DNA!") return dna = occupant.dna.unique_enzymes occupant_message("You feel a prick as the needle takes your DNA sample.") return if(href_list["reset_dna"]) if(usr != occupant) return dna = null if(href_list["repair_int_control_lost"]) if(usr != occupant) return occupant_message("Recalibrating coordination system.") log_message("Recalibration of coordination system started.") var/T = loc spawn(100) if(T == loc) clearInternalDamage(MECHA_INT_CONTROL_LOST) occupant_message("Recalibration successful.") log_message("Recalibration of coordination system finished with 0 errors.") else occupant_message("Recalibration failed.") log_message("Recalibration of coordination system failed with 1 error.",1) //debug /* if(href_list["debug"]) if(href_list["set_i_dam"]) setInternalDamage(afilter.getNum("set_i_dam")) if(href_list["clear_i_dam"]) clearInternalDamage(afilter.getNum("clear_i_dam")) return */ return