mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 20:17:15 +01:00
Whitespace Standardization [MDB IGNORE] (#15748)
* Update settings * Whitespace changes * Comment out merger hooks in gitattributes Corrupt maps would have to be resolved in repo before hooks could be updated * Revert "Whitespace changes" This reverts commitafbdd1d844. * Whitespace again minus example * Gitignore example changelog * Restore changelog merge setting * Keep older dmi hook attribute until hooks can be updated * update vscode settings too * Renormalize remaining * Revert "Gitignore example changelog" This reverts commitde22ad375d. * Attempt to normalize example.yml (and another file I guess) * Try again
This commit is contained in:
@@ -1,42 +1,42 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/// Admin music volume, from 0 to 1.
|
||||
/client/var/admin_music_volume = 1
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Sends music data to the browser.
|
||||
*
|
||||
* Optional settings:
|
||||
* - pitch: the playback rate
|
||||
* - start: the start time of the sound
|
||||
* - end: when the musics stops playing
|
||||
*
|
||||
* required url string Must be an https URL.
|
||||
* optional extra_data list Optional settings.
|
||||
*/
|
||||
/datum/tgui_panel/proc/play_music(url, extra_data)
|
||||
if(!is_ready())
|
||||
return
|
||||
if(!findtext(url, GLOB.is_http_protocol))
|
||||
return
|
||||
var/list/payload = list()
|
||||
if(length(extra_data) > 0)
|
||||
for(var/key in extra_data)
|
||||
payload[key] = extra_data[key]
|
||||
payload["url"] = url
|
||||
window.send_message("audio/playMusic", payload)
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Stops playing music through the browser.
|
||||
*/
|
||||
/datum/tgui_panel/proc/stop_music()
|
||||
if(!is_ready())
|
||||
return
|
||||
window.send_message("audio/stopMusic")
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/// Admin music volume, from 0 to 1.
|
||||
/client/var/admin_music_volume = 1
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Sends music data to the browser.
|
||||
*
|
||||
* Optional settings:
|
||||
* - pitch: the playback rate
|
||||
* - start: the start time of the sound
|
||||
* - end: when the musics stops playing
|
||||
*
|
||||
* required url string Must be an https URL.
|
||||
* optional extra_data list Optional settings.
|
||||
*/
|
||||
/datum/tgui_panel/proc/play_music(url, extra_data)
|
||||
if(!is_ready())
|
||||
return
|
||||
if(!findtext(url, GLOB.is_http_protocol))
|
||||
return
|
||||
var/list/payload = list()
|
||||
if(length(extra_data) > 0)
|
||||
for(var/key in extra_data)
|
||||
payload[key] = extra_data[key]
|
||||
payload["url"] = url
|
||||
window.send_message("audio/playMusic", payload)
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Stops playing music through the browser.
|
||||
*/
|
||||
/datum/tgui_panel/proc/stop_music()
|
||||
if(!is_ready())
|
||||
return
|
||||
window.send_message("audio/stopMusic")
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/client/var/datum/tgui_panel/tgui_panel
|
||||
|
||||
/**
|
||||
* tgui panel / chat troubleshooting verb
|
||||
*/
|
||||
/client/verb/fix_tgui_panel()
|
||||
set name = "Fix chat"
|
||||
set category = "OOC"
|
||||
var/action
|
||||
log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel")
|
||||
|
||||
nuke_chat()
|
||||
|
||||
// Failed to fix, using tgalert as fallback
|
||||
action = tgalert(src, "Did that work?", "", "Yes", "No, switch to old ui")
|
||||
if (action == "No, switch to old ui")
|
||||
winset(src, "output", "on-show=&is-disabled=0&is-visible=1")
|
||||
winset(src, "browseroutput", "is-disabled=1;is-visible=0")
|
||||
log_tgui(src, "Failed to fix.", context = "verb/fix_tgui_panel")
|
||||
|
||||
/client/proc/nuke_chat()
|
||||
// Catch all solution (kick the whole thing in the pants)
|
||||
winset(src, "output", "on-show=&is-disabled=0&is-visible=1")
|
||||
winset(src, "browseroutput", "is-disabled=1;is-visible=0")
|
||||
if(!tgui_panel || !istype(tgui_panel))
|
||||
log_tgui(src, "tgui_panel datum is missing",
|
||||
context = "verb/fix_tgui_panel")
|
||||
tgui_panel = new(src)
|
||||
tgui_panel.initialize(force = TRUE)
|
||||
// Force show the panel to see if there are any errors
|
||||
winset(src, "output", "is-disabled=1&is-visible=0")
|
||||
winset(src, "browseroutput", "is-disabled=0;is-visible=1")
|
||||
|
||||
/client/verb/refresh_tgui()
|
||||
set name = "Refresh TGUI"
|
||||
set category = "OOC"
|
||||
|
||||
for(var/window_id in tgui_windows)
|
||||
var/datum/tgui_window/window = tgui_windows[window_id]
|
||||
window.reinitialize()
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/client/var/datum/tgui_panel/tgui_panel
|
||||
|
||||
/**
|
||||
* tgui panel / chat troubleshooting verb
|
||||
*/
|
||||
/client/verb/fix_tgui_panel()
|
||||
set name = "Fix chat"
|
||||
set category = "OOC"
|
||||
var/action
|
||||
log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel")
|
||||
|
||||
nuke_chat()
|
||||
|
||||
// Failed to fix, using tgalert as fallback
|
||||
action = tgalert(src, "Did that work?", "", "Yes", "No, switch to old ui")
|
||||
if (action == "No, switch to old ui")
|
||||
winset(src, "output", "on-show=&is-disabled=0&is-visible=1")
|
||||
winset(src, "browseroutput", "is-disabled=1;is-visible=0")
|
||||
log_tgui(src, "Failed to fix.", context = "verb/fix_tgui_panel")
|
||||
|
||||
/client/proc/nuke_chat()
|
||||
// Catch all solution (kick the whole thing in the pants)
|
||||
winset(src, "output", "on-show=&is-disabled=0&is-visible=1")
|
||||
winset(src, "browseroutput", "is-disabled=1;is-visible=0")
|
||||
if(!tgui_panel || !istype(tgui_panel))
|
||||
log_tgui(src, "tgui_panel datum is missing",
|
||||
context = "verb/fix_tgui_panel")
|
||||
tgui_panel = new(src)
|
||||
tgui_panel.initialize(force = TRUE)
|
||||
// Force show the panel to see if there are any errors
|
||||
winset(src, "output", "is-disabled=1&is-visible=0")
|
||||
winset(src, "browseroutput", "is-disabled=0;is-visible=1")
|
||||
|
||||
/client/verb/refresh_tgui()
|
||||
set name = "Refresh TGUI"
|
||||
set category = "OOC"
|
||||
|
||||
for(var/window_id in tgui_windows)
|
||||
var/datum/tgui_window/window = tgui_windows[window_id]
|
||||
window.reinitialize()
|
||||
|
||||
@@ -1,146 +1,146 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* Maximum number of connection records allowed to analyze.
|
||||
* Should match the value set in the browser.
|
||||
*/
|
||||
#define TGUI_TELEMETRY_MAX_CONNECTIONS 5
|
||||
|
||||
/**
|
||||
* Maximum time allocated for sending a telemetry packet.
|
||||
*/
|
||||
#define TGUI_TELEMETRY_RESPONSE_WINDOW (30 SECONDS)
|
||||
|
||||
/// Time of telemetry request
|
||||
/datum/tgui_panel/var/telemetry_requested_at
|
||||
/// Time of telemetry analysis completion
|
||||
/datum/tgui_panel/var/telemetry_analyzed_at
|
||||
/// List of previous client connections
|
||||
/datum/tgui_panel/var/list/telemetry_connections
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Requests some telemetry from the client.
|
||||
*/
|
||||
/datum/tgui_panel/proc/request_telemetry()
|
||||
telemetry_requested_at = world.time
|
||||
telemetry_analyzed_at = null
|
||||
window.send_message("telemetry/request", list(
|
||||
"limits" = list(
|
||||
"connections" = TGUI_TELEMETRY_MAX_CONNECTIONS,
|
||||
),
|
||||
))
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Analyzes a telemetry packet.
|
||||
*
|
||||
* Is currently only useful for detecting ban evasion attempts.
|
||||
*/
|
||||
/datum/tgui_panel/proc/analyze_telemetry(payload)
|
||||
if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW)
|
||||
message_admins("[key_name(client)] sent telemetry outside of the allocated time window.")
|
||||
return
|
||||
if(telemetry_analyzed_at)
|
||||
message_admins("[key_name(client)] sent telemetry more than once.")
|
||||
return
|
||||
telemetry_analyzed_at = world.time
|
||||
if(!payload)
|
||||
return
|
||||
telemetry_connections = payload["connections"]
|
||||
var/len = length(telemetry_connections)
|
||||
if(len == 0)
|
||||
return
|
||||
if(len > TGUI_TELEMETRY_MAX_CONNECTIONS)
|
||||
message_admins("[key_name(client)] was kicked for sending a huge telemetry payload")
|
||||
qdel(client)
|
||||
return
|
||||
|
||||
var/ckey = client?.ckey
|
||||
if (!ckey)
|
||||
return
|
||||
|
||||
/* FIXME: Stuff we dont have > Can be reimplemented later on
|
||||
var/list/all_known_alts = GLOB.known_alts.load_known_alts()
|
||||
var/list/our_known_alts = list()
|
||||
|
||||
for (var/known_alt in all_known_alts)
|
||||
if (known_alt[1] == ckey)
|
||||
our_known_alts += known_alt[2]
|
||||
else if (known_alt[2] == ckey)
|
||||
our_known_alts += known_alt[1]
|
||||
|
||||
var/list/found
|
||||
|
||||
var/list/query_data = list()
|
||||
|
||||
for(var/i in 1 to len)
|
||||
if(QDELETED(client))
|
||||
// He got cleaned up before we were done
|
||||
return
|
||||
var/list/row = telemetry_connections[i]
|
||||
|
||||
// Check for a malformed history object
|
||||
if (!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"]))
|
||||
return
|
||||
|
||||
if (!isnull(GLOB.round_id))
|
||||
query_data += list(list(
|
||||
"telemetry_ckey" = row["ckey"],
|
||||
"address" = row["address"],
|
||||
"computer_id" = row["computer_id"],
|
||||
))
|
||||
|
||||
if (row["ckey"] in our_known_alts)
|
||||
continue
|
||||
|
||||
if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE))
|
||||
found = row
|
||||
break
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
// This fucker has a history of playing on a banned account.
|
||||
if(found)
|
||||
var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])"
|
||||
message_admins(msg)
|
||||
send2tgs_adminless_only("Banned-user", msg)
|
||||
log_admin_private(msg)
|
||||
log_suspicious_login(msg, access_log_mirror = FALSE)
|
||||
|
||||
// Only log them all at the end, since it's not as important as reporting an evader
|
||||
for (var/list/one_query as anything in query_data)
|
||||
var/datum/db_query/query = SSdbcore.NewQuery({"
|
||||
INSERT INTO [format_table_name("telemetry_connections")] (
|
||||
ckey,
|
||||
telemetry_ckey,
|
||||
address,
|
||||
computer_id,
|
||||
first_round_id,
|
||||
latest_round_id
|
||||
) VALUES(
|
||||
:ckey,
|
||||
:telemetry_ckey,
|
||||
INET_ATON(:address),
|
||||
:computer_id,
|
||||
:round_id,
|
||||
:round_id
|
||||
) ON DUPLICATE KEY UPDATE latest_round_id = :round_id
|
||||
"}, list(
|
||||
"ckey" = ckey,
|
||||
"telemetry_ckey" = one_query["telemetry_ckey"],
|
||||
"address" = one_query["address"],
|
||||
"computer_id" = one_query["computer_id"],
|
||||
"round_id" = GLOB.round_id,
|
||||
))
|
||||
query.Execute()
|
||||
qdel(query)
|
||||
*/
|
||||
|
||||
#undef TGUI_TELEMETRY_MAX_CONNECTIONS
|
||||
#undef TGUI_TELEMETRY_RESPONSE_WINDOW
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* Maximum number of connection records allowed to analyze.
|
||||
* Should match the value set in the browser.
|
||||
*/
|
||||
#define TGUI_TELEMETRY_MAX_CONNECTIONS 5
|
||||
|
||||
/**
|
||||
* Maximum time allocated for sending a telemetry packet.
|
||||
*/
|
||||
#define TGUI_TELEMETRY_RESPONSE_WINDOW (30 SECONDS)
|
||||
|
||||
/// Time of telemetry request
|
||||
/datum/tgui_panel/var/telemetry_requested_at
|
||||
/// Time of telemetry analysis completion
|
||||
/datum/tgui_panel/var/telemetry_analyzed_at
|
||||
/// List of previous client connections
|
||||
/datum/tgui_panel/var/list/telemetry_connections
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Requests some telemetry from the client.
|
||||
*/
|
||||
/datum/tgui_panel/proc/request_telemetry()
|
||||
telemetry_requested_at = world.time
|
||||
telemetry_analyzed_at = null
|
||||
window.send_message("telemetry/request", list(
|
||||
"limits" = list(
|
||||
"connections" = TGUI_TELEMETRY_MAX_CONNECTIONS,
|
||||
),
|
||||
))
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Analyzes a telemetry packet.
|
||||
*
|
||||
* Is currently only useful for detecting ban evasion attempts.
|
||||
*/
|
||||
/datum/tgui_panel/proc/analyze_telemetry(payload)
|
||||
if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW)
|
||||
message_admins("[key_name(client)] sent telemetry outside of the allocated time window.")
|
||||
return
|
||||
if(telemetry_analyzed_at)
|
||||
message_admins("[key_name(client)] sent telemetry more than once.")
|
||||
return
|
||||
telemetry_analyzed_at = world.time
|
||||
if(!payload)
|
||||
return
|
||||
telemetry_connections = payload["connections"]
|
||||
var/len = length(telemetry_connections)
|
||||
if(len == 0)
|
||||
return
|
||||
if(len > TGUI_TELEMETRY_MAX_CONNECTIONS)
|
||||
message_admins("[key_name(client)] was kicked for sending a huge telemetry payload")
|
||||
qdel(client)
|
||||
return
|
||||
|
||||
var/ckey = client?.ckey
|
||||
if (!ckey)
|
||||
return
|
||||
|
||||
/* FIXME: Stuff we dont have > Can be reimplemented later on
|
||||
var/list/all_known_alts = GLOB.known_alts.load_known_alts()
|
||||
var/list/our_known_alts = list()
|
||||
|
||||
for (var/known_alt in all_known_alts)
|
||||
if (known_alt[1] == ckey)
|
||||
our_known_alts += known_alt[2]
|
||||
else if (known_alt[2] == ckey)
|
||||
our_known_alts += known_alt[1]
|
||||
|
||||
var/list/found
|
||||
|
||||
var/list/query_data = list()
|
||||
|
||||
for(var/i in 1 to len)
|
||||
if(QDELETED(client))
|
||||
// He got cleaned up before we were done
|
||||
return
|
||||
var/list/row = telemetry_connections[i]
|
||||
|
||||
// Check for a malformed history object
|
||||
if (!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"]))
|
||||
return
|
||||
|
||||
if (!isnull(GLOB.round_id))
|
||||
query_data += list(list(
|
||||
"telemetry_ckey" = row["ckey"],
|
||||
"address" = row["address"],
|
||||
"computer_id" = row["computer_id"],
|
||||
))
|
||||
|
||||
if (row["ckey"] in our_known_alts)
|
||||
continue
|
||||
|
||||
if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE))
|
||||
found = row
|
||||
break
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
// This fucker has a history of playing on a banned account.
|
||||
if(found)
|
||||
var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])"
|
||||
message_admins(msg)
|
||||
send2tgs_adminless_only("Banned-user", msg)
|
||||
log_admin_private(msg)
|
||||
log_suspicious_login(msg, access_log_mirror = FALSE)
|
||||
|
||||
// Only log them all at the end, since it's not as important as reporting an evader
|
||||
for (var/list/one_query as anything in query_data)
|
||||
var/datum/db_query/query = SSdbcore.NewQuery({"
|
||||
INSERT INTO [format_table_name("telemetry_connections")] (
|
||||
ckey,
|
||||
telemetry_ckey,
|
||||
address,
|
||||
computer_id,
|
||||
first_round_id,
|
||||
latest_round_id
|
||||
) VALUES(
|
||||
:ckey,
|
||||
:telemetry_ckey,
|
||||
INET_ATON(:address),
|
||||
:computer_id,
|
||||
:round_id,
|
||||
:round_id
|
||||
) ON DUPLICATE KEY UPDATE latest_round_id = :round_id
|
||||
"}, list(
|
||||
"ckey" = ckey,
|
||||
"telemetry_ckey" = one_query["telemetry_ckey"],
|
||||
"address" = one_query["address"],
|
||||
"computer_id" = one_query["computer_id"],
|
||||
"round_id" = GLOB.round_id,
|
||||
))
|
||||
query.Execute()
|
||||
qdel(query)
|
||||
*/
|
||||
|
||||
#undef TGUI_TELEMETRY_MAX_CONNECTIONS
|
||||
#undef TGUI_TELEMETRY_RESPONSE_WINDOW
|
||||
|
||||
@@ -1,102 +1,102 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui_panel datum
|
||||
* Hosts tgchat and other nice features.
|
||||
*/
|
||||
/datum/tgui_panel
|
||||
var/client/client
|
||||
var/datum/tgui_window/window
|
||||
var/broken = FALSE
|
||||
var/initialized_at
|
||||
var/oldchat = FALSE
|
||||
|
||||
/datum/tgui_panel/New(client/client, id)
|
||||
src.client = client
|
||||
window = new(client, id)
|
||||
window.subscribe(src, PROC_REF(on_message))
|
||||
|
||||
/datum/tgui_panel/Del()
|
||||
window.unsubscribe(src)
|
||||
window.close()
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* TRUE if panel is initialized and ready to receive messages.
|
||||
*/
|
||||
/datum/tgui_panel/proc/is_ready()
|
||||
return !broken && window.is_ready()
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Initializes tgui panel.
|
||||
*/
|
||||
/datum/tgui_panel/proc/initialize(force = FALSE)
|
||||
set waitfor = FALSE
|
||||
// Minimal sleep to defer initialization to after client constructor
|
||||
sleep(1 TICKS)
|
||||
initialized_at = world.time
|
||||
// Perform a clean initialization
|
||||
window.initialize(
|
||||
strict_mode = TRUE,
|
||||
assets = list(
|
||||
get_asset_datum(/datum/asset/simple/tgui_panel),
|
||||
))
|
||||
window.send_asset(get_asset_datum(/datum/asset/simple/fontawesome))
|
||||
window.send_asset(get_asset_datum(/datum/asset/simple/tgfont))
|
||||
window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat))
|
||||
// Other setup
|
||||
request_telemetry()
|
||||
addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS)
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Called when initialization has timed out.
|
||||
*/
|
||||
/datum/tgui_panel/proc/on_initialize_timed_out()
|
||||
// Currently does nothing but sending a message to old chat.
|
||||
// SEND_TEXT(client, "<span class=\"userdanger\">Failed to load fancy chat, click <a href='?src=[REF(src)];reload_tguipanel=1'>HERE</a> to attempt to reload it.</span>")
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Callback for handling incoming tgui messages.
|
||||
*/
|
||||
/datum/tgui_panel/proc/on_message(type, payload)
|
||||
if(type == "ready")
|
||||
broken = FALSE
|
||||
window.send_message("update", list(
|
||||
"config" = list(
|
||||
"client" = list(
|
||||
"ckey" = client.ckey,
|
||||
"address" = client.address,
|
||||
"computer_id" = client.computer_id,
|
||||
),
|
||||
"window" = list(
|
||||
"fancy" = FALSE,
|
||||
"locked" = FALSE,
|
||||
),
|
||||
),
|
||||
))
|
||||
return TRUE
|
||||
if(type == "audio/setAdminMusicVolume")
|
||||
client.admin_music_volume = payload["volume"]
|
||||
return TRUE
|
||||
if(type == "telemetry")
|
||||
analyze_telemetry(payload)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Sends a round restart notification.
|
||||
*/
|
||||
/datum/tgui_panel/proc/send_roundrestart()
|
||||
window.send_message("roundrestart")
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui_panel datum
|
||||
* Hosts tgchat and other nice features.
|
||||
*/
|
||||
/datum/tgui_panel
|
||||
var/client/client
|
||||
var/datum/tgui_window/window
|
||||
var/broken = FALSE
|
||||
var/initialized_at
|
||||
var/oldchat = FALSE
|
||||
|
||||
/datum/tgui_panel/New(client/client, id)
|
||||
src.client = client
|
||||
window = new(client, id)
|
||||
window.subscribe(src, PROC_REF(on_message))
|
||||
|
||||
/datum/tgui_panel/Del()
|
||||
window.unsubscribe(src)
|
||||
window.close()
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* TRUE if panel is initialized and ready to receive messages.
|
||||
*/
|
||||
/datum/tgui_panel/proc/is_ready()
|
||||
return !broken && window.is_ready()
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Initializes tgui panel.
|
||||
*/
|
||||
/datum/tgui_panel/proc/initialize(force = FALSE)
|
||||
set waitfor = FALSE
|
||||
// Minimal sleep to defer initialization to after client constructor
|
||||
sleep(1 TICKS)
|
||||
initialized_at = world.time
|
||||
// Perform a clean initialization
|
||||
window.initialize(
|
||||
strict_mode = TRUE,
|
||||
assets = list(
|
||||
get_asset_datum(/datum/asset/simple/tgui_panel),
|
||||
))
|
||||
window.send_asset(get_asset_datum(/datum/asset/simple/fontawesome))
|
||||
window.send_asset(get_asset_datum(/datum/asset/simple/tgfont))
|
||||
window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat))
|
||||
// Other setup
|
||||
request_telemetry()
|
||||
addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS)
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Called when initialization has timed out.
|
||||
*/
|
||||
/datum/tgui_panel/proc/on_initialize_timed_out()
|
||||
// Currently does nothing but sending a message to old chat.
|
||||
// SEND_TEXT(client, "<span class=\"userdanger\">Failed to load fancy chat, click <a href='?src=[REF(src)];reload_tguipanel=1'>HERE</a> to attempt to reload it.</span>")
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Callback for handling incoming tgui messages.
|
||||
*/
|
||||
/datum/tgui_panel/proc/on_message(type, payload)
|
||||
if(type == "ready")
|
||||
broken = FALSE
|
||||
window.send_message("update", list(
|
||||
"config" = list(
|
||||
"client" = list(
|
||||
"ckey" = client.ckey,
|
||||
"address" = client.address,
|
||||
"computer_id" = client.computer_id,
|
||||
),
|
||||
"window" = list(
|
||||
"fancy" = FALSE,
|
||||
"locked" = FALSE,
|
||||
),
|
||||
),
|
||||
))
|
||||
return TRUE
|
||||
if(type == "audio/setAdminMusicVolume")
|
||||
client.admin_music_volume = payload["volume"]
|
||||
return TRUE
|
||||
if(type == "telemetry")
|
||||
analyze_telemetry(payload)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Sends a round restart notification.
|
||||
*/
|
||||
/datum/tgui_panel/proc/send_roundrestart()
|
||||
window.send_message("roundrestart")
|
||||
|
||||
Reference in New Issue
Block a user