diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 08b8ce9b6cb8..a36e995c9a5f 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -27,6 +27,8 @@ GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for e GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs GLOBAL_LIST_EMPTY(bots_list) GLOBAL_LIST_EMPTY(aiEyes) +GLOBAL_LIST_EMPTY(suit_sensors_list) //all people with suit sensors on +GLOBAL_LIST_EMPTY(nanite_sensors_list) //app people with nanite monitoring program GLOBAL_LIST_EMPTY(new_player_list) //all /mob/dead/new_player, in theory all should have clients and those that don't are in the process of spawning and get deleted when done. ///underages who have been reported to security for trying to buy things they shouldn't, so they can't spam GLOBAL_LIST_EMPTY(narcd_underages) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 10720aa19b4f..9710e45b7049 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -16,7 +16,7 @@ /obj/machinery/computer/crew/syndie icon_keyboard = "syndie_key" -/obj/machinery/computer/crew/interact(mob/user) +/obj/machinery/computer/crew/ui_interact(mob/user) GLOB.crewmonitor.show(user,src) GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) @@ -67,6 +67,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) jobs["Clerk"] = 71 //Yogs: Added IDs for this job, also need to skip 70 or it clerk would be considered a head job jobs["Tourist"] = 72 //Yogs: Added IDs for this job jobs["Artist"] = 73 //Yogs: Added IDs for this job + jobs["Assistant"] = 74 //Yogs: Assistants are with the other civilians jobs["Admiral"] = 200 jobs["CentCom Commander"] = 210 jobs["Custodian"] = 211 @@ -76,7 +77,6 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) jobs["Security Response Officer"] = 221 jobs["Engineer Response Officer"] = 222 jobs["Medical Response Officer"] = 223 - jobs["Assistant"] = 999 //Unknowns/custom jobs should appear after civilians, and before assistants src.jobs = jobs @@ -128,18 +128,58 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/pos_y var/life_status - for(var/mob/living/carbon/human/H in GLOB.carbon_list) + for(var/i in GLOB.nanite_sensors_list) + var/mob/living/carbon/human/H = i var/nanite_sensors = FALSE if(H in SSnanites.nanite_monitored_mobs) nanite_sensors = TRUE // Check if their z-level is correct and if they are wearing a uniform. // Accept H.z==0 as well in case the mob is inside an object. - if ((H.z == 0 || H.z == z) && (istype(H.w_uniform, /obj/item/clothing/under) || nanite_sensors)) + + if(((H.z == 0 || H.z == z || (is_station_level(H.z) && is_station_level(z))) && (nanite_sensors))) + + pos = H.z == 0 || (nanite_sensors) ? get_turf(H) : null + + // Special case: If the mob is inside an object confirm the z-level on turf level. + if (H.z == 0 && (!pos || pos.z != z)) + continue + + I = H.wear_id ? H.wear_id.GetID() : null + + if (I) + name = I.registered_name + assignment = I.assignment + ijob = jobs[I.assignment] + else + name = "Unknown" + assignment = "" + ijob = 80 + + life_status = (!H.stat ? TRUE : FALSE) + + oxydam = round(H.getOxyLoss(),1) + toxdam = round(H.getToxLoss(),1) + burndam = round(H.getFireLoss(),1) + brutedam = round(H.getBruteLoss(),1) + + if (!pos) + pos = get_turf(H) + area = get_area_name(H, TRUE) + pos_x = pos.x + pos_y = pos.y + + results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null)) + + for(var/i in GLOB.suit_sensors_list) + var/mob/living/carbon/human/H = i + // Check if their z-level is correct and if they are wearing a uniform. + // Accept H.z==0 as well in case the mob is inside an object. Nanite sensors come before normal sensors. + if((H.z == 0 || H.z == z || (is_station_level(H.z) && is_station_level(z))) && (istype(H.w_uniform, /obj/item/clothing/under)) && !(H in GLOB.nanite_sensors_list)) U = H.w_uniform // Are the suit sensors on? - if (nanite_sensors || ((U.has_sensor > 0) && U.sensor_mode)) - pos = H.z == 0 || (nanite_sensors || U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null + if ((U.has_sensor > 0) && U.sensor_mode) + pos = H.z == 0 || (U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null // Special case: If the mob is inside an object confirm the z-level on turf level. if (H.z == 0 && (!pos || pos.z != z)) @@ -156,12 +196,12 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) assignment = "" ijob = 80 - if (nanite_sensors || U.sensor_mode >= SENSOR_LIVING) + if (U.sensor_mode >= SENSOR_LIVING) life_status = (!H.stat ? TRUE : FALSE) else life_status = null - if (nanite_sensors || U.sensor_mode >= SENSOR_VITALS) + if (U.sensor_mode >= SENSOR_VITALS) oxydam = round(H.getOxyLoss(),1) toxdam = round(H.getToxLoss(),1) burndam = round(H.getFireLoss(),1) @@ -172,7 +212,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) burndam = null brutedam = null - if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS) + if (U.sensor_mode >= SENSOR_COORDS) if (!pos) pos = get_turf(H) area = get_area_name(H, TRUE) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d9996a130c29..a352e52ad371 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -214,7 +214,7 @@ BLIND // can't see anything to_chat(usr, "You have moved too far away!") return sensor_mode = modes.Find(switchMode) - 1 - + set_sensor_glob() if (src.loc == usr) switch(sensor_mode) if(0) @@ -336,3 +336,17 @@ BLIND // can't see anything deconstruct(FALSE) else ..() + +/obj/item/clothing/proc/set_sensor_glob() + var/mob/living/carbon/human/H = src.loc + + if (istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + if (U.has_sensor && U.sensor_mode && U.has_sensor != BROKEN_SENSORS) + GLOB.suit_sensors_list |= H + + else + GLOB.suit_sensors_list -= H + + else + GLOB.suit_sensors_list -= H diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 8f2eaa4b6147..f45f1aca1924 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -101,6 +101,7 @@ attached_accessory.on_uniform_equip(src, user) if(attached_accessory.above_suit) H.update_inv_wear_suit() + set_sensor_glob() /obj/item/clothing/under/dropped(mob/user) if(attached_accessory) @@ -109,7 +110,7 @@ var/mob/living/carbon/human/H = user if(attached_accessory.above_suit) H.update_inv_wear_suit() - + set_sensor_glob() ..() /obj/item/clothing/under/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1) diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index bb10eec4aad0..8d6ff5019fba 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -82,11 +82,19 @@ /datum/nanite_program/monitoring/enable_passive_effect() . = ..() SSnanites.nanite_monitored_mobs |= host_mob + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + if(!(H in GLOB.nanite_sensors_list)) + GLOB.nanite_sensors_list |= H host_mob.hud_set_nanite_indicator() /datum/nanite_program/monitoring/disable_passive_effect() . = ..() SSnanites.nanite_monitored_mobs -= host_mob + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + GLOB.nanite_sensors_list -= H + host_mob.hud_set_nanite_indicator() /datum/nanite_program/triggered/self_scan @@ -407,4 +415,4 @@ button_icon_state = "[_icon]_[_color]" /datum/action/innate/nanite_button/Activate() - program.press() \ No newline at end of file + program.press() diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js index 26424dae50f3..292f7e5eff51 100644 --- a/tgui/packages/tgui/constants.js +++ b/tgui/packages/tgui/constants.js @@ -19,8 +19,8 @@ export const COLORS = { medbay: '#3498db', science: '#9b59b6', engineering: '#f1c40f', - cargo: '#f39c12', - civilian: '#535353', // Yogs: Added new civilian color + cargo: '#d4680d', // Yogs: Added new cargo color + civilian: '#b4b4b4', // Yogs: Added new civilian color centcom: '#00c100', other: '#c38312', }, diff --git a/tgui/packages/tgui/interfaces/CrewConsole.js b/tgui/packages/tgui/interfaces/CrewConsole.js index a607024f0e4e..341a170522d2 100644 --- a/tgui/packages/tgui/interfaces/CrewConsole.js +++ b/tgui/packages/tgui/interfaces/CrewConsole.js @@ -71,7 +71,7 @@ export const CrewConsole = (props, context) => { return ( @@ -109,7 +109,7 @@ export const CrewConsole = (props, context) => { ? healthToColor( sensor.oxydam, sensor.toxdam, - sensor.brutedam, + sensor.burndam, sensor.brutedam) : ( sensor.life_status ? HEALTH_COLOR_BY_LEVEL[0]