mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Refactor consoles to operate on logically adjacent zlevels
This commit is contained in:
@@ -14,9 +14,24 @@ var/global/datum/repository/cameras/camera_repository = new()
|
|||||||
networks = list()
|
networks = list()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/repository/cameras/proc/cameras_in_network(var/network)
|
/datum/repository/cameras/proc/cameras_in_network(var/network, var/list/zlevels)
|
||||||
setup_cache()
|
setup_cache()
|
||||||
var/list/network_list = networks[network]
|
var/list/network_list = networks[network]
|
||||||
|
if(LAZYLEN(zlevels))
|
||||||
|
var/list/filtered_cameras = list()
|
||||||
|
for(var/list/C in network_list)
|
||||||
|
//Camera is marked as always-visible
|
||||||
|
if(C["omni"])
|
||||||
|
filtered_cameras[++filtered_cameras.len] = C
|
||||||
|
continue
|
||||||
|
//Camera might be in an adjacent zlevel
|
||||||
|
var/camz = C["z"]
|
||||||
|
if(!camz) //It's inside something (helmet, communicator, etc) or nullspace or who knows
|
||||||
|
camz = get_z(locate(C["camera"]) in cameranet.cameras)
|
||||||
|
if(camz in zlevels)
|
||||||
|
filtered_cameras[++filtered_cameras.len] = C //Can't add lists to lists with +=
|
||||||
|
return filtered_cameras
|
||||||
|
else
|
||||||
return network_list
|
return network_list
|
||||||
|
|
||||||
/datum/repository/cameras/proc/setup_cache()
|
/datum/repository/cameras/proc/setup_cache()
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
var/busy = 0
|
var/busy = 0
|
||||||
|
|
||||||
var/on_open_network = 0
|
var/on_open_network = 0
|
||||||
|
var/always_visible = FALSE //Visable from any map, good for entertainment network cameras
|
||||||
|
|
||||||
var/affected_by_emp_until = 0
|
var/affected_by_emp_until = 0
|
||||||
|
|
||||||
@@ -472,6 +473,7 @@
|
|||||||
cam["name"] = sanitize(c_tag)
|
cam["name"] = sanitize(c_tag)
|
||||||
cam["deact"] = !can_use()
|
cam["deact"] = !can_use()
|
||||||
cam["camera"] = "\ref[src]"
|
cam["camera"] = "\ref[src]"
|
||||||
|
cam["omni"] = always_visible
|
||||||
cam["x"] = x
|
cam["x"] = x
|
||||||
cam["y"] = y
|
cam["y"] = y
|
||||||
cam["z"] = z
|
cam["z"] = z
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ var/global/list/engineering_networks = list(
|
|||||||
/obj/machinery/camera/network/thunder
|
/obj/machinery/camera/network/thunder
|
||||||
network = list(NETWORK_THUNDER)
|
network = list(NETWORK_THUNDER)
|
||||||
invuln = 1
|
invuln = 1
|
||||||
|
always_visible = TRUE
|
||||||
|
|
||||||
// EMP
|
// EMP
|
||||||
|
|
||||||
|
|||||||
@@ -43,11 +43,14 @@
|
|||||||
data["current_camera"] = current_camera ? current_camera.nano_structure() : null
|
data["current_camera"] = current_camera ? current_camera.nano_structure() : null
|
||||||
data["current_network"] = current_network
|
data["current_network"] = current_network
|
||||||
data["networks"] = network ? network : list()
|
data["networks"] = network ? network : list()
|
||||||
|
|
||||||
|
var/map_levels = using_map.get_map_levels(src.z, TRUE)
|
||||||
|
data["map_levels"] = map_levels
|
||||||
|
|
||||||
if(current_network)
|
if(current_network)
|
||||||
data["cameras"] = camera_repository.cameras_in_network(current_network)
|
data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels)
|
||||||
if(current_camera)
|
if(current_camera)
|
||||||
switch_to_camera(user, current_camera)
|
switch_to_camera(user, current_camera)
|
||||||
data["map_levels"] = using_map.get_map_levels(src.z)
|
|
||||||
|
|
||||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
if (!ui)
|
if (!ui)
|
||||||
@@ -91,9 +94,6 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/computer/security/attack_hand(var/mob/user as mob)
|
/obj/machinery/computer/security/attack_hand(var/mob/user as mob)
|
||||||
if (using_map && !(src.z in using_map.contact_levels))
|
|
||||||
to_chat(user, "<span class='danger'>Unable to establish a connection:</span> You're too far away from the station!")
|
|
||||||
return
|
|
||||||
if(stat & (NOPOWER|BROKEN)) return
|
if(stat & (NOPOWER|BROKEN)) return
|
||||||
|
|
||||||
if(!isAI(user))
|
if(!isAI(user))
|
||||||
|
|||||||
@@ -47,16 +47,17 @@
|
|||||||
existing.clear(source)
|
existing.clear(source)
|
||||||
return check_alarm_cleared(existing)
|
return check_alarm_cleared(existing)
|
||||||
|
|
||||||
/datum/alarm_handler/proc/major_alarms()
|
/datum/alarm_handler/proc/major_alarms(var/z)
|
||||||
return visible_alarms()
|
return visible_alarms(z)
|
||||||
|
|
||||||
/datum/alarm_handler/proc/has_major_alarms()
|
/datum/alarm_handler/proc/has_major_alarms(var/z)
|
||||||
if(alarms && alarms.len)
|
if(!LAZYLEN(alarms))
|
||||||
return 1
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/datum/alarm_handler/proc/minor_alarms()
|
return LAZYLEN(major_alarms(z))
|
||||||
return visible_alarms()
|
|
||||||
|
/datum/alarm_handler/proc/minor_alarms(var/z)
|
||||||
|
return visible_alarms(z)
|
||||||
|
|
||||||
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
|
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
|
||||||
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
|
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
|
||||||
@@ -101,9 +102,15 @@
|
|||||||
for(var/listener in listeners)
|
for(var/listener in listeners)
|
||||||
call(listener, listeners[listener])(src, alarm, was_raised)
|
call(listener, listeners[listener])(src, alarm, was_raised)
|
||||||
|
|
||||||
/datum/alarm_handler/proc/visible_alarms()
|
/datum/alarm_handler/proc/visible_alarms(var/z)
|
||||||
|
if(!LAZYLEN(alarms))
|
||||||
|
return list()
|
||||||
|
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
|
|
||||||
var/list/visible_alarms = new()
|
var/list/visible_alarms = new()
|
||||||
for(var/datum/alarm/A in alarms)
|
for(var/datum/alarm/A in alarms)
|
||||||
if(!A.hidden)
|
if(A.hidden || (z && !(A.origin?.z in map_levels)))
|
||||||
|
continue
|
||||||
visible_alarms.Add(A)
|
visible_alarms.Add(A)
|
||||||
return visible_alarms
|
return visible_alarms
|
||||||
@@ -1,16 +1,22 @@
|
|||||||
/datum/alarm_handler/atmosphere
|
/datum/alarm_handler/atmosphere
|
||||||
category = "Atmosphere Alarms"
|
category = "Atmosphere Alarms"
|
||||||
|
|
||||||
/datum/alarm_handler/atmosphere/major_alarms()
|
/datum/alarm_handler/atmosphere/major_alarms(var/z)
|
||||||
var/list/major_alarms = new()
|
var/list/major_alarms = new()
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
for(var/datum/alarm/A in visible_alarms())
|
for(var/datum/alarm/A in visible_alarms())
|
||||||
|
if(z && (z && !(A.origin?.z in map_levels)))
|
||||||
|
continue
|
||||||
if(A.max_severity() > 1)
|
if(A.max_severity() > 1)
|
||||||
major_alarms.Add(A)
|
major_alarms.Add(A)
|
||||||
return major_alarms
|
return major_alarms
|
||||||
|
|
||||||
/datum/alarm_handler/atmosphere/minor_alarms()
|
/datum/alarm_handler/atmosphere/minor_alarms(var/z)
|
||||||
var/list/minor_alarms = new()
|
var/list/minor_alarms = new()
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
for(var/datum/alarm/A in visible_alarms())
|
for(var/datum/alarm/A in visible_alarms())
|
||||||
|
if(z && (z && !(A.origin?.z in map_levels)))
|
||||||
|
continue
|
||||||
if(A.max_severity() == 1)
|
if(A.max_severity() == 1)
|
||||||
minor_alarms.Add(A)
|
minor_alarms.Add(A)
|
||||||
return minor_alarms
|
return minor_alarms
|
||||||
|
|||||||
@@ -61,31 +61,35 @@
|
|||||||
AH.unregister_alarm(object)
|
AH.unregister_alarm(object)
|
||||||
|
|
||||||
/datum/nano_module/alarm_monitor/proc/all_alarms()
|
/datum/nano_module/alarm_monitor/proc/all_alarms()
|
||||||
|
var/z = get_z(nano_host())
|
||||||
var/list/all_alarms = new()
|
var/list/all_alarms = new()
|
||||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||||
all_alarms += AH.visible_alarms()
|
all_alarms += AH.visible_alarms(z)
|
||||||
|
|
||||||
return all_alarms
|
return all_alarms
|
||||||
|
|
||||||
/datum/nano_module/alarm_monitor/proc/major_alarms()
|
/datum/nano_module/alarm_monitor/proc/major_alarms()
|
||||||
|
var/z = get_z(nano_host())
|
||||||
var/list/all_alarms = new()
|
var/list/all_alarms = new()
|
||||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||||
all_alarms += AH.major_alarms()
|
all_alarms += AH.major_alarms(z)
|
||||||
|
|
||||||
return all_alarms
|
return all_alarms
|
||||||
|
|
||||||
// Modified version of above proc that uses slightly less resources, returns 1 if there is a major alarm, 0 otherwise.
|
// Modified version of above proc that uses slightly less resources, returns 1 if there is a major alarm, 0 otherwise.
|
||||||
/datum/nano_module/alarm_monitor/proc/has_major_alarms()
|
/datum/nano_module/alarm_monitor/proc/has_major_alarms()
|
||||||
|
var/z = get_z(nano_host())
|
||||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||||
if(AH.has_major_alarms())
|
if(AH.has_major_alarms(z))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/datum/nano_module/alarm_monitor/proc/minor_alarms()
|
/datum/nano_module/alarm_monitor/proc/minor_alarms()
|
||||||
|
var/z = get_z(nano_host())
|
||||||
var/list/all_alarms = new()
|
var/list/all_alarms = new()
|
||||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||||
all_alarms += AH.minor_alarms()
|
all_alarms += AH.minor_alarms(z)
|
||||||
|
|
||||||
return all_alarms
|
return all_alarms
|
||||||
|
|
||||||
@@ -104,9 +108,10 @@
|
|||||||
var/list/data = host.initial_data()
|
var/list/data = host.initial_data()
|
||||||
|
|
||||||
var/categories[0]
|
var/categories[0]
|
||||||
|
var/z = get_z(nano_host())
|
||||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||||
categories[++categories.len] = list("category" = AH.category, "alarms" = list())
|
categories[++categories.len] = list("category" = AH.category, "alarms" = list())
|
||||||
for(var/datum/alarm/A in AH.major_alarms())
|
for(var/datum/alarm/A in AH.major_alarms(z))
|
||||||
var/cameras[0]
|
var/cameras[0]
|
||||||
var/lost_sources[0]
|
var/lost_sources[0]
|
||||||
|
|
||||||
|
|||||||
@@ -47,12 +47,17 @@
|
|||||||
/datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state)
|
/datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state)
|
||||||
var/list/data = host.initial_data()
|
var/list/data = host.initial_data()
|
||||||
var/alarms[0]
|
var/alarms[0]
|
||||||
var/turf/T = get_turf(nano_host())
|
|
||||||
|
var/z = get_z(nano_host())
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
|
data["map_levels"] = map_levels
|
||||||
|
|
||||||
// TODO: Move these to a cache, similar to cameras
|
// TODO: Move these to a cache, similar to cameras
|
||||||
for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : machines))
|
for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : machines))
|
||||||
if(!monitored_alarms.len && alarm.alarms_hidden)
|
if(!monitored_alarms.len && alarm.alarms_hidden)
|
||||||
continue
|
continue
|
||||||
|
if(!(alarm.z in map_levels))
|
||||||
|
continue
|
||||||
alarms[++alarms.len] = list(
|
alarms[++alarms.len] = list(
|
||||||
"name" = sanitize(alarm.name),
|
"name" = sanitize(alarm.name),
|
||||||
"ref"= "\ref[alarm]",
|
"ref"= "\ref[alarm]",
|
||||||
@@ -61,7 +66,6 @@
|
|||||||
"y" = alarm.y,
|
"y" = alarm.y,
|
||||||
"z" = alarm.z)
|
"z" = alarm.z)
|
||||||
data["alarms"] = alarms
|
data["alarms"] = alarms
|
||||||
data["map_levels"] = using_map.get_map_levels(T.z)
|
|
||||||
|
|
||||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
|
|||||||
@@ -53,10 +53,15 @@
|
|||||||
var/list/sensors = list()
|
var/list/sensors = list()
|
||||||
// Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading.
|
// Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading.
|
||||||
var/obj/machinery/power/sensor/focus = null
|
var/obj/machinery/power/sensor/focus = null
|
||||||
var/turf/T = get_turf(nano_host())
|
|
||||||
|
var/z = get_z(nano_host())
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
|
data["map_levels"] = map_levels
|
||||||
|
|
||||||
// Build list of data from sensor readings.
|
// Build list of data from sensor readings.
|
||||||
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
||||||
|
if(!(S.z in map_levels))
|
||||||
|
continue
|
||||||
sensors.Add(list(list(
|
sensors.Add(list(list(
|
||||||
"name" = S.name_tag,
|
"name" = S.name_tag,
|
||||||
"alarm" = S.check_grid_warning()
|
"alarm" = S.check_grid_warning()
|
||||||
@@ -67,7 +72,6 @@
|
|||||||
data["all_sensors"] = sensors
|
data["all_sensors"] = sensors
|
||||||
if(focus)
|
if(focus)
|
||||||
data["focus"] = focus.return_reading_data()
|
data["focus"] = focus.return_reading_data()
|
||||||
data["map_levels"] = using_map.get_map_levels(T.z)
|
|
||||||
|
|
||||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
if (!ui)
|
if (!ui)
|
||||||
|
|||||||
@@ -122,11 +122,19 @@
|
|||||||
// Description: Refreshes local list of known devices.
|
// Description: Refreshes local list of known devices.
|
||||||
/datum/nano_module/rcon/proc/FindDevices()
|
/datum/nano_module/rcon/proc/FindDevices()
|
||||||
known_SMESs = new /list()
|
known_SMESs = new /list()
|
||||||
|
|
||||||
|
var/z = get_z(nano_host())
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z)
|
||||||
|
|
||||||
for(var/obj/machinery/power/smes/buildable/SMES in machines)
|
for(var/obj/machinery/power/smes/buildable/SMES in machines)
|
||||||
|
if(!(SMES.z in map_levels))
|
||||||
|
continue
|
||||||
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
|
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
|
||||||
known_SMESs.Add(SMES)
|
known_SMESs.Add(SMES)
|
||||||
|
|
||||||
known_breakers = new /list()
|
known_breakers = new /list()
|
||||||
for(var/obj/machinery/power/breakerbox/breaker in machines)
|
for(var/obj/machinery/power/breakerbox/breaker in machines)
|
||||||
|
if(!(breaker.z in map_levels))
|
||||||
|
continue
|
||||||
if(breaker.RCon_tag != "NO_TAG")
|
if(breaker.RCon_tag != "NO_TAG")
|
||||||
known_breakers.Add(breaker)
|
known_breakers.Add(breaker)
|
||||||
|
|||||||
@@ -41,10 +41,10 @@
|
|||||||
// Refreshes list of active supermatter crystals
|
// Refreshes list of active supermatter crystals
|
||||||
/datum/nano_module/supermatter_monitor/proc/refresh()
|
/datum/nano_module/supermatter_monitor/proc/refresh()
|
||||||
supermatters = list()
|
supermatters = list()
|
||||||
var/turf/T = get_turf(nano_host())
|
var/z = get_z(nano_host())
|
||||||
if(!T)
|
if(!z)
|
||||||
return
|
return
|
||||||
var/valid_z_levels = (GetConnectedZlevels(T.z) & using_map.station_levels)
|
var/valid_z_levels = using_map.get_map_levels(z)
|
||||||
for(var/obj/machinery/power/supermatter/S in machines)
|
for(var/obj/machinery/power/supermatter/S in machines)
|
||||||
// Delaminating, not within coverage, not on a tile.
|
// Delaminating, not within coverage, not on a tile.
|
||||||
if(S.grav_pulling || S.exploded || !(S.z in valid_z_levels) || !istype(S.loc, /turf/))
|
if(S.grav_pulling || S.exploded || !(S.z in valid_z_levels) || !istype(S.loc, /turf/))
|
||||||
|
|||||||
@@ -15,6 +15,12 @@
|
|||||||
return access_research
|
return access_research
|
||||||
if(NETWORK_ERT)
|
if(NETWORK_ERT)
|
||||||
return access_cent_specops
|
return access_cent_specops
|
||||||
|
//VOREStation Add Start
|
||||||
|
if(NETWORK_TALON_SHIP)
|
||||||
|
return access_talon
|
||||||
|
if(NETWORK_TALON_HELMETS)
|
||||||
|
return access_talon
|
||||||
|
//VOREStation Add End
|
||||||
|
|
||||||
if(network in using_map.station_networks)
|
if(network in using_map.station_networks)
|
||||||
return access_security // Default for all other station networks
|
return access_security // Default for all other station networks
|
||||||
@@ -62,8 +68,10 @@
|
|||||||
|
|
||||||
data["networks"] = all_networks
|
data["networks"] = all_networks
|
||||||
|
|
||||||
|
var/list/map_levels = using_map.get_map_levels(get_z(nano_host()), TRUE)
|
||||||
|
|
||||||
if(current_network)
|
if(current_network)
|
||||||
data["cameras"] = camera_repository.cameras_in_network(current_network)
|
data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels)
|
||||||
|
|
||||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
if (!ui)
|
if (!ui)
|
||||||
|
|||||||
@@ -34,18 +34,21 @@
|
|||||||
|
|
||||||
/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||||
var/list/data = host.initial_data()
|
var/list/data = host.initial_data()
|
||||||
var/turf/T = get_turf(nano_host())
|
|
||||||
|
|
||||||
data["isAI"] = isAI(user)
|
data["isAI"] = isAI(user)
|
||||||
data["map_levels"] = using_map.get_map_levels(T.z, FALSE)
|
|
||||||
|
var/z = get_z(nano_host())
|
||||||
|
var/list/map_levels = using_map.get_map_levels(z, TRUE)
|
||||||
|
data["map_levels"] = map_levels
|
||||||
|
|
||||||
data["crewmembers"] = list()
|
data["crewmembers"] = list()
|
||||||
for(var/z in data["map_levels"]) // VOREStation Edit
|
for(var/zlevel in map_levels)
|
||||||
data["crewmembers"] += crew_repository.health_data(z)
|
data["crewmembers"] += crew_repository.health_data(zlevel)
|
||||||
|
|
||||||
if(!data["map_levels"].len)
|
if(!data["map_levels"].len)
|
||||||
to_chat(user, "<span class='warning'>The crew monitor doesn't seem like it'll work here.</span>")
|
to_chat(user, "<span class='warning'>The crew monitor doesn't seem like it'll work here.</span>")
|
||||||
if(ui) // VOREStation Addition
|
if(ui)
|
||||||
ui.close() // VOREStation Addition
|
ui.close()
|
||||||
return
|
return
|
||||||
|
|
||||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ Used In File(s): \code\game\machinery\computer\camera.dm
|
|||||||
{{:helper.link('Reset', 'refresh', {'reset' : 1})}}
|
{{:helper.link('Reset', 'refresh', {'reset' : 1})}}
|
||||||
<div style="float:left;">
|
<div style="float:left;">
|
||||||
<div class='item'>
|
<div class='item'>
|
||||||
<div class='itemLabel'>Current Camera: </div>
|
<div class='itemLabel'>Current Camera: </div>
|
||||||
|
<br>
|
||||||
{{if data.current_camera}}
|
{{if data.current_camera}}
|
||||||
<div class='itemContent'><b>{{:data.current_camera.name}}</b></div>
|
<div class='itemContent'><b>{{:data.current_camera.name}}</b></div>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|||||||
Reference in New Issue
Block a user