mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* asset cache cdn * Fix cdn rsc (#52886) I was converting this to use length so it didn't have to care if the list existed or not, and forgot to remove the .len. this broke cdn .rsc files because length(num) returns 0. * Add warning about https to the external rsc config (#53367) today in hostchat we discovered that most of the servers who tried to do cdn the .rsc, had unknown issues because they had used https:// urls. Byond can't into https. like 5 servers had failed to get this to work because of that pitfall, so im gonna add a warning to the config. * tchat * tgchat compile * fixes * Merge pull request #53011 from stylemistake/tgui-chat-fix-asay tgchat: Fix asay * chat color * logging * webstorage * compile TGUI * actually like compiles on the DM side * Update chat-dark.scss * Update chat-light.scss * Update resources.txt * Update tgui-panel.bundle.css * Colors * compile * s * s * Ports Gamers TGChat so we can edit it. - NOT LIVE TGCHAT BRANCH (#10226) * asset cache cdn * Fix cdn rsc (#52886) I was converting this to use length so it didn't have to care if the list existed or not, and forgot to remove the .len. this broke cdn .rsc files because length(num) returns 0. * Add warning about https to the external rsc config (#53367) today in hostchat we discovered that most of the servers who tried to do cdn the .rsc, had unknown issues because they had used https:// urls. Byond can't into https. like 5 servers had failed to get this to work because of that pitfall, so im gonna add a warning to the config. * tchat * tgchat compile * fixes * Merge pull request #53011 from stylemistake/tgui-chat-fix-asay tgchat: Fix asay * chat color * logging * webstorage * compile TGUI * actually like compiles on the DM side * Update chat-dark.scss * Update chat-light.scss * Update resources.txt * Update tgui-panel.bundle.css * Colors * compile * s * s Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com> Co-authored-by: TheSmallBlue <ilanmori@hotmail.com> * Fixes Replay Chat * Update to_chat.dm * Update chat.dm * Update demo.dm * yarn berry * yarn berry compile * Update resources.txt * Update config/resources.txt * Update resources.txt * Attempt at fixing reconnect. * Lets try fix it again * oops * THROW THE SINK AT IT * ree * Makes Travis work again thank you jamie * Fixes snowflake images * Update security.dm * Updates TGChat Test Merge (#10307) * asset cache cdn * Fix cdn rsc (#52886) I was converting this to use length so it didn't have to care if the list existed or not, and forgot to remove the .len. this broke cdn .rsc files because length(num) returns 0. * Add warning about https to the external rsc config (#53367) today in hostchat we discovered that most of the servers who tried to do cdn the .rsc, had unknown issues because they had used https:// urls. Byond can't into https. like 5 servers had failed to get this to work because of that pitfall, so im gonna add a warning to the config. * tchat * tgchat compile * fixes * Merge pull request #53011 from stylemistake/tgui-chat-fix-asay tgchat: Fix asay * chat color * logging * webstorage * compile TGUI * actually like compiles on the DM side * Update chat-dark.scss * Update chat-light.scss * Update resources.txt * Update tgui-panel.bundle.css * Colors * compile * s * s * Ports Gamers TGChat so we can edit it. - NOT LIVE TGCHAT BRANCH (#10226) * asset cache cdn * Fix cdn rsc (#52886) I was converting this to use length so it didn't have to care if the list existed or not, and forgot to remove the .len. this broke cdn .rsc files because length(num) returns 0. * Add warning about https to the external rsc config (#53367) today in hostchat we discovered that most of the servers who tried to do cdn the .rsc, had unknown issues because they had used https:// urls. Byond can't into https. like 5 servers had failed to get this to work because of that pitfall, so im gonna add a warning to the config. * tchat * tgchat compile * fixes * Merge pull request #53011 from stylemistake/tgui-chat-fix-asay tgchat: Fix asay * chat color * logging * webstorage * compile TGUI * actually like compiles on the DM side * Update chat-dark.scss * Update chat-light.scss * Update resources.txt * Update tgui-panel.bundle.css * Colors * compile * s * s Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com> Co-authored-by: TheSmallBlue <ilanmori@hotmail.com> * Fixes Replay Chat * Update to_chat.dm * Update chat.dm * Update demo.dm * yarn berry * yarn berry compile * Update resources.txt * Update config/resources.txt * Update resources.txt * Attempt at fixing reconnect. * Lets try fix it again * oops * THROW THE SINK AT IT * ree * Makes Travis work again thank you jamie * Fixes snowflake images * Update security.dm Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com> Co-authored-by: TheSmallBlue <ilanmori@hotmail.com> Co-authored-by: alexkar598 <25136265+alexkar598@users.noreply.github.com> * Fixes * Undo Kitchen Sink * Fucking 7 Hours. * status panel * stat panel fixes * fixes * stat panel stuff * Stat panel finish * Compile, oops * Update server_maint.dm * Update world.dm * Update interface.dm * tgui compile * Update subsystems.dm * fix statpanel deleting whole admin tab (#54211) fix: adminhelping no longer removes entire admin tab fix: end of round no longer removes entire admin tab * Update skin.dmf * verbs? Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com> Co-authored-by: TheSmallBlue <ilanmori@hotmail.com> Co-authored-by: Jamie D <993128+JamieD1@users.noreply.github.com> Co-authored-by: alexkar598 <25136265+alexkar598@users.noreply.github.com> Co-authored-by: Couls <coul422@gmail.com> Co-authored-by: Tad Hardesty <tad@platymuus.com> Co-authored-by: Bobbahbrown <bobbahbrown@gmail.com>
169 lines
7.3 KiB
Plaintext
169 lines
7.3 KiB
Plaintext
SUBSYSTEM_DEF(statpanels)
|
|
name = "Stat Panels"
|
|
wait = 4
|
|
init_order = INIT_ORDER_STATPANELS
|
|
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
|
|
var/list/currentrun = list()
|
|
var/encoded_global_data
|
|
var/mc_data_encoded
|
|
var/list/cached_images = list()
|
|
|
|
/datum/controller/subsystem/statpanels/fire(resumed = FALSE)
|
|
if (!resumed)
|
|
var/datum/map_config/cached = SSmapping.next_map_config
|
|
var/round_time = world.time - SSticker.round_start_time
|
|
var/list/global_data = list(
|
|
"Map: [SSmapping.config?.map_name || "Loading..."]",
|
|
cached ? "Next Map: [cached.map_name]" : null,
|
|
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
|
|
"Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
|
|
"Round Time: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]",
|
|
"Station Time: [station_time_timestamp()]",
|
|
"Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)"
|
|
)
|
|
|
|
if(SSshuttle.emergency)
|
|
var/ETA = SSshuttle.emergency.getModeStr()
|
|
if(ETA)
|
|
global_data += "[ETA] [SSshuttle.emergency.getTimerStr()]"
|
|
encoded_global_data = url_encode(json_encode(global_data))
|
|
src.currentrun = GLOB.clients.Copy()
|
|
mc_data_encoded = null
|
|
var/list/currentrun = src.currentrun
|
|
while(length(currentrun))
|
|
var/client/target = currentrun[length(currentrun)]
|
|
currentrun.len--
|
|
if(!target.statbrowser_ready)
|
|
continue
|
|
if(target.stat_tab == "Status")
|
|
var/ping_str = url_encode("Ping: [round(target.lastping, 1)]ms (Average: [round(target.avgping, 1)]ms)")
|
|
var/other_str = url_encode(json_encode(target.mob.get_status_tab_items()))
|
|
target << output("[encoded_global_data];[ping_str];[other_str]", "statbrowser:update")
|
|
if(!target.holder)
|
|
target << output("", "statbrowser:remove_admin_tabs")
|
|
else
|
|
if(!("MC" in target.panel_tabs))
|
|
target << output("[url_encode(target.holder.href_token)]", "statbrowser:add_admin_tabs")
|
|
if(target.stat_tab == "MC")
|
|
var/turf/eye_turf = get_turf(target.eye)
|
|
var/coord_entry = url_encode(COORD(eye_turf))
|
|
if(!mc_data_encoded)
|
|
generate_mc_data()
|
|
target << output("[mc_data_encoded];[coord_entry]", "statbrowser:update_mc")
|
|
if(!length(GLOB.sdql2_queries) && ("SDQL2" in target.panel_tabs))
|
|
target << output("", "statbrowser:remove_sdql2")
|
|
else if(length(GLOB.sdql2_queries) && (target.stat_tab == "SDQL2" || !("SDQL2" in target.panel_tabs)))
|
|
var/list/sdql2A = list()
|
|
sdql2A[++sdql2A.len] = list("", "Access Global SDQL2 List", REF(GLOB.sdql2_vv_statobj))
|
|
var/list/sdql2B = list()
|
|
for(var/i in GLOB.sdql2_queries)
|
|
var/datum/SDQL2_query/Q = i
|
|
sdql2B = Q.generate_stat()
|
|
sdql2A += sdql2B
|
|
target << output(url_encode(json_encode(sdql2A)), "statbrowser:update_sdql2")
|
|
if(target.mob)
|
|
var/mob/M = target.mob
|
|
if((target.stat_tab in target.spell_tabs) || !length(target.spell_tabs) && (length(M.mob_spell_list) || length(M.mind?.spell_list)))
|
|
var/list/proc_holders = M.get_proc_holders()
|
|
target.spell_tabs.Cut()
|
|
for(var/phl in proc_holders)
|
|
var/list/proc_holder_list = phl
|
|
target.spell_tabs |= proc_holder_list[1]
|
|
var/proc_holders_encoded = ""
|
|
if(length(proc_holders))
|
|
proc_holders_encoded = url_encode(json_encode(proc_holders))
|
|
target << output("[url_encode(json_encode(target.spell_tabs))];[proc_holders_encoded]", "statbrowser:update_spells")
|
|
if(M?.listed_turf)
|
|
var/mob/target_mob = M
|
|
if(!target_mob.TurfAdjacent(target_mob.listed_turf))
|
|
target << output("", "statbrowser:remove_listedturf")
|
|
target_mob.listed_turf = null
|
|
else if(target.stat_tab == M?.listed_turf.name || !(M?.listed_turf.name in target.panel_tabs))
|
|
var/list/overrides = list()
|
|
var/list/turfitems = list()
|
|
for(var/img in target.images)
|
|
var/image/target_image = img
|
|
if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override)
|
|
continue
|
|
overrides += target_image.loc
|
|
turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), icon2html(target_mob.listed_turf, target, sourceonly=TRUE))
|
|
for(var/tc in target_mob.listed_turf)
|
|
var/atom/movable/turf_content = tc
|
|
if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT)
|
|
continue
|
|
if(turf_content.invisibility > target_mob.see_invisible)
|
|
continue
|
|
if(turf_content in overrides)
|
|
continue
|
|
if(turf_content.IsObscured())
|
|
continue
|
|
if(length(turfitems) < 30) // only create images for the first 30 items on the turf, for performance reasons
|
|
if(!(REF(turf_content) in cached_images))
|
|
cached_images += REF(turf_content)
|
|
turf_content.RegisterSignal(turf_content, COMSIG_PARENT_QDELETING, /atom/.proc/remove_from_cache) // we reset cache if anything in it gets deleted
|
|
if(ismob(turf_content) || length(turf_content.overlays) > 2)
|
|
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), costly_icon2html(turf_content, target, sourceonly=TRUE))
|
|
else
|
|
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), icon2html(turf_content, target, sourceonly=TRUE))
|
|
else
|
|
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content))
|
|
else
|
|
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content))
|
|
turfitems = url_encode(json_encode(turfitems))
|
|
target << output("[turfitems];", "statbrowser:update_listedturf")
|
|
if(MC_TICK_CHECK)
|
|
return
|
|
|
|
|
|
/datum/controller/subsystem/statpanels/proc/generate_mc_data()
|
|
var/list/mc_data = list(
|
|
list("CPU:", world.cpu),
|
|
list("Instances:", "[num2text(world.contents.len, 10)]"),
|
|
list("World Time:", "[world.time]"),
|
|
list("Globals:", GLOB.stat_entry(), "\ref[GLOB]"),
|
|
list("[config]:", config.stat_entry(), "\ref[config]"),
|
|
list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)"),
|
|
list("Master Controller:", Master.stat_entry(), "\ref[Master]"),
|
|
list("Failsafe Controller:", Failsafe.stat_entry(), "\ref[Failsafe]"),
|
|
list("","")
|
|
)
|
|
for(var/ss in Master.subsystems)
|
|
var/datum/controller/subsystem/sub_system = ss
|
|
mc_data[++mc_data.len] = list("\[[sub_system.state_letter()]][sub_system.name]", sub_system.stat_entry(), "\ref[sub_system]")
|
|
mc_data[++mc_data.len] = list("Camera Net", "Cameras: [GLOB.cameranet.cameras.len] | Chunks: [GLOB.cameranet.chunks.len]", "\ref[GLOB.cameranet]")
|
|
mc_data_encoded = url_encode(json_encode(mc_data))
|
|
|
|
/atom/proc/remove_from_cache()
|
|
SSstatpanels.cached_images -= REF(src)
|
|
|
|
/// verbs that send information from the browser UI
|
|
/client/verb/set_tab(tab as text|null)
|
|
set name = "Set Tab"
|
|
set hidden = TRUE
|
|
|
|
stat_tab = tab
|
|
|
|
/client/verb/send_tabs(tabs as text|null)
|
|
set name = "Send Tabs"
|
|
set hidden = TRUE
|
|
|
|
panel_tabs |= tabs
|
|
|
|
/client/verb/remove_tabs(tabs as text|null)
|
|
set name = "Remove Tabs"
|
|
set hidden = TRUE
|
|
|
|
panel_tabs -= tabs
|
|
|
|
/client/verb/reset_tabs()
|
|
set name = "Reset Tabs"
|
|
set hidden = TRUE
|
|
|
|
panel_tabs = list()
|
|
|
|
/client/verb/panel_ready()
|
|
set name = "Panel Ready"
|
|
set hidden = TRUE
|
|
|
|
statbrowser_ready = TRUE
|