Ports Goonchat from Baystation. (#9635)

changes:

    rscadd: "Ported a new chat system, Goonchat, that allows for cool things like changing font style, size, spacing, highlighting up to 5 strings in the chat, and DARK MODE."
    rscadd: "Repeated chat messages can now get compacted. You can disable this in goonchat settings."
    rscadd: "You can change icon style to any font on your system."
    tweak: "The game window has been altered a bit to adjust for this."
    rscdel: "Removed skin style prefs as they are no longer used."
This commit is contained in:
Matt Atlas
2020-09-24 22:06:04 +02:00
committed by GitHub
parent a7401aeb1d
commit d4666caaac
277 changed files with 4057 additions and 2955 deletions

View File

@@ -127,6 +127,12 @@ You can set verify to TRUE if you want send() to sleep until the client has the
/proc/register_asset(asset_name, asset)
SSassets.cache[asset_name] = asset
//Generated names do not include file extention.
//Used mainly for code that deals with assets in a generic way
//The same asset will always lead to the same asset name
/proc/generate_asset_name(file)
return "asset.[md5(fcopy_rsc(file))]"
//These datums are used to populate the asset cache, the proc "register()" does this.
//all of our asset datums, used for referring to these later
@@ -231,6 +237,16 @@ var/list/asset_datums = list()
/datum/asset/chem_master/send(client)
send_asset_list(client, assets)
/datum/asset/simple/accents
verify = FALSE
/datum/asset/simple/accents/register()
for(var/A in subtypesof(/datum/accent)) //yes we have to do this here, SSrecords isn't initialized yet
var/datum/accent/accent = new A
var/name = "[accent.tag_icon].png"
assets[name] = icon('./icons/accent_tags.dmi', accent.tag_icon)
..()
/datum/asset/simple/faction_icons
assets = list(
"faction_EPMC.png" = 'icons/misc/factions/ECFlogo.png',
@@ -241,3 +257,48 @@ var/list/asset_datums = list()
"faction_Hepht.png" = 'icons/misc/factions/Hephaestuslogo.png',
"faction_unaffiliated.png" = 'icons/misc/factions/Unaffiliatedlogo.png'
)
/datum/asset/group
var/list/children
/datum/asset/group/register()
for(var/type in children)
get_asset_datum(type)
/datum/asset/group/send(client/C)
for(var/type in children)
var/datum/asset/A = get_asset_datum(type)
A.send(C)
/datum/asset/group/goonchat
children = list(
/datum/asset/simple/jquery,
/datum/asset/simple/goonchat,
/datum/asset/simple/fontawesome
)
/datum/asset/simple/jquery
verify = FALSE
assets = list(
"jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js',
)
/datum/asset/simple/goonchat
verify = TRUE
assets = list(
"json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js',
"browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js',
"browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css',
"browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css'
)
/datum/asset/simple/fontawesome
verify = FALSE
assets = list(
"fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot',
"fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff',
"fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot',
"fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff',
"font-awesome.css" = 'html/font-awesome/css/all.min.css',
"v4shim.css" = 'html/font-awesome/css/v4-shims.min.css'
)

View File

@@ -77,3 +77,8 @@
var/authed = TRUE
var/is_initialized = FALSE // Used to track whether the client has been initialized with InitClient.
preload_rsc = 0
///goonchat chatoutput of the client
var/datum/chatOutput/chatOutput

View File

@@ -42,8 +42,6 @@
if (!info_sent)
handle_connection_info(src, href_list["data"])
info_sent = 1
else
server_greeting.close_window(src, "Your greeting window has malfunctioned and has been shut down.")
return
@@ -96,6 +94,11 @@
if("usr") hsrc = mob
if("prefs") return prefs.process_link(usr,href_list)
if("vars") return view_var_Topic(href,href_list,hsrc)
if("chat") return chatOutput.Topic(href, href_list)
switch(href_list["action"])
if("openLink")
send_link(src, href_list["link"])
if(href_list["warnacknowledge"])
var/queryid = text2num(href_list["warnacknowledge"])
@@ -143,13 +146,13 @@
query_details["new_status"] = "confirmed"
query_details["id"] = request_id
feedback_message = "<font color='green'><b>Account successfully linked!</b></font>"
feedback_message = "<span class='good'><b>Account successfully linked!</b></span>"
if ("deny")
query_contents = "UPDATE ss13_player_linking SET status = :new_status:, deleted_at = NOW() WHERE id = :id:"
query_details["new_status"] = "rejected"
query_details["id"] = request_id
feedback_message = "<font color='red'><b>Link request rejected!</b></font>"
feedback_message = "<span class='warning'><b>Link request rejected!</b></span>"
else
to_chat(src, "<span class='warning'>Invalid command sent.</span>")
return
@@ -210,11 +213,6 @@
if ("webint")
src.open_webint()
// Forward appropriate topics to the server greeting datum.
if ("greeting")
if (server_greeting)
server_greeting.handle_call(href_list, src)
// Handle the updating of MotD and Memo tabs upon click.
if ("updateHashes")
var/save = 0
@@ -308,13 +306,13 @@
//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc.
/client/AllowUpload(filename, filelength)
if(filelength > UPLOAD_LIMIT)
to_chat(src, "<font color='red'>Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB.</font>")
to_chat(src, "<span class='warning'>Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB.</span>")
return 0
/* //Don't need this at the moment. But it's here if it's needed later.
//Helps prevent multiple files being uploaded at once. Or right after eachother.
var/time_to_wait = fileaccess_timer - world.time
if(time_to_wait > 0)
to_chat(src, "<font color='red'>Error: AllowUpload(): Spam prevention. Please wait [round(time_to_wait/10)] seconds.</font>")
to_chat(src, "<span class='warning'>Error: AllowUpload(): Spam prevention. Please wait [round(time_to_wait/10)] seconds.</span>")
return 0
fileaccess_timer = world.time + FTPDELAY */
return 1
@@ -326,6 +324,9 @@
/client/New(TopicData)
TopicData = null //Prevent calls to client.Topic from connect
// Load goonchat
chatOutput = new(src)
if(!(connection in list("seeker", "web"))) //Invalid connection type.
return null
if(byond_version < MIN_CLIENT_VERSION) //Out of date client.
@@ -355,6 +356,7 @@
m.client = src
src.InitPrefs() //Init some default prefs
m.LateLogin()
chatOutput.start()
return m
//Do auth shit
else
@@ -362,6 +364,7 @@
src.InitClient()
src.InitPrefs()
mob.LateLogin()
chatOutput.start()
/client/proc/InitPrefs()
//preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum)
@@ -376,12 +379,6 @@
prefs.last_id = computer_id //these are gonna be used for banning
if (byond_version >= 511 && prefs.clientfps)
fps = prefs.clientfps
if(SStheming)
SStheming.apply_theme_from_perfs(src)
// Server greeting shenanigans.
if (server_greeting.find_outdated_info(src, 1) && !info_sent)
server_greeting.display_to_client(src)
/client/proc/InitClient()
to_chat(src, "<span class='alert'>If the title screen is black, resources are still downloading. Please be patient until the title screen appears.</span>")
@@ -686,15 +683,6 @@
send_link(src, linkURL)
return
/client/verb/show_greeting()
set name = "Open Greeting"
set category = "OOC"
// Update the information just in case.
server_greeting.find_outdated_info(src, 1)
server_greeting.display_to_client(src)
/client/proc/check_ip_intel()
set waitfor = 0 //we sleep when getting the intel, no need to hold up the client connection while we sleep
if (config.ipintel_email)
@@ -751,4 +739,4 @@
if(istype(gun) && gun.can_autofire())
M.set_dir(get_dir(M, over_object))
gun.Fire(get_turf(over_object), mob, params, (get_dist(over_object, mob) <= 1), FALSE)
CHECK_TICK
CHECK_TICK

View File

@@ -0,0 +1,132 @@
//Darkmode preference by Kmc2000//
/*
This lets you switch chat themes by using winset and CSS loading, you must relog to see this change (or rebuild your browseroutput datum)
Things to note:
If you change ANYTHING in interface/skin.dmf you need to change it here:
Format:
winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value")
How this works:
I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat)
This then swaps the window theme automatically
Thanks to spacemaniac and mcdonald for help with the JS side of this.
*/
/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested.
//Main windows
winset(src, "infowindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none")
winset(src, "infowindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "rpane", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none")
winset(src, "rpane", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "info", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "browseroutput", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "browseroutput", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "rpanewindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "rpanewindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "mainwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none")
winset(src, "split", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "mainvsplit", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
//Buttons
winset(src, "textb", "background-color = #494949;background-color = none")
winset(src, "textb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "infob", "background-color = #494949;background-color = none")
winset(src, "infob", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "rulesb", "background-color = #494949;background-color = none")
winset(src, "rulesb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "Lore", "background-color = #494949;background-color = none")
winset(src, "Lore", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "wikib", "background-color = #494949;background-color = none")
winset(src, "wikib", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "forumb", "background-color = #494949;background-color = none")
winset(src, "forumb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "changelog", "background-color = #494949;background-color = none")
winset(src, "changelog", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "interfaceb", "background-color = #494949;background-color = none")
winset(src, "interfaceb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "discordb", "background-color = #494949;background-color = none")
winset(src, "discordb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "reportbugb", "background-color = #494949;background-color = none")
winset(src, "reportbugb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "hotkey_toggle", "background-color = #494949;background-color = none")
winset(src, "hotkey_toggle", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
//Status and verb tabs
winset(src, "output", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "output", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "statwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "statwindow", "text-color = #eaeaea;text-color = #000000")
winset(src, "info", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = #FFFFFF")
winset(src, "info", "tab-background-color = [COLOR_DARKMODE_BACKGROUND];tab-background-color = none")
winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "info", "tab-text-color = [COLOR_DARKMODE_TEXT];tab-text-color = #000000")
winset(src, "info", "prefix-color = [COLOR_DARKMODE_TEXT];prefix-color = #000000")
winset(src, "info", "suffix-color = [COLOR_DARKMODE_TEXT];suffix-color = #000000")
//Say, OOC, me Buttons etc.
winset(src, "saybutton", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "saybutton", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000")
winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none")
/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing
//Main windows
winset(src, "infowindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "infowindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "rpane", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "rpane", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "info", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "browseroutput", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "browseroutput", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "rpanewindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "rpanewindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "mainwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "split", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "mainvsplit", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
//Buttons
winset(src, "textb", "background-color = none;background-color = #494949")
winset(src, "textb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "infob", "background-color = none;background-color = #494949")
winset(src, "infob", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "rulesb", "background-color = none;background-color = #494949")
winset(src, "rulesb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "Lore", "background-color = none;background-color = #494949")
winset(src, "Lore", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "wikib", "background-color = none;background-color = #494949")
winset(src, "wikib", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "forumb", "background-color = none;background-color = #494949")
winset(src, "forumb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "changelog", "background-color = none;background-color = #494949")
winset(src, "changelog", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "interfaceb", "background-color = none;background-color = #494949")
winset(src, "interfaceb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "discordb", "background-color = none;background-color = #494949")
winset(src, "discordb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "reportbugb", "background-color = none;background-color = #494949")
winset(src, "reportbugb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "hotkey_toggle", "background-color = none;background-color = #494949")
winset(src, "hotkey_toggle", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
//Status and verb tabs
winset(src, "output", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
winset(src, "output", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "statwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
winset(src, "statwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "info", "background-color = #FFFFFF;background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
winset(src, "info", "tab-background-color = none;tab-background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "info", "tab-text-color = #000000;tab-text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "info", "prefix-color = #000000;prefix-color = [COLOR_DARKMODE_TEXT]")
winset(src, "info", "suffix-color = #000000;suffix-color = [COLOR_DARKMODE_TEXT]")
//Say, OOC, me Buttons etc.
winset(src, "saybutton", "background-color = none;background-color = #494949")
winset(src, "saybutton", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")
winset(src, "asset_cache_browser", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]")
winset(src, "asset_cache_browser", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]")

View File

@@ -699,7 +699,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(current_species.preview_icon)
var/icon/preview = icon(current_species.preview_icon, "")
preview.Scale(64, 64) // Scale it here to stop it blurring.
to_chat(usr, browse_rsc(icon(icon = preview, icon_state = ""), "species_preview_[current_species.short_name].png"))
send_rsc(usr, icon(icon = preview, icon_state = ""), "species_preview_[current_species.short_name].png")
dat += "<img src='species_preview_[current_species.short_name].png' width='64px' height='64px'><br/><br/>"
dat += "<b>Language:</b> [current_species.language]<br/>"
dat += "<small>"
@@ -740,9 +740,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(restricted)
if(restricted == 1)
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='?src=\ref[user];preference=open_whitelist_forum'>the forums</a>.</small></b></font></br>"
dat += "<span class='warning'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='?src=\ref[user];preference=open_whitelist_forum'>the forums</a>.</small></b></span></br>"
else if(restricted == 2)
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race.</small></b></font></br>"
dat += "<span class='warning'><b>You cannot play as this species.</br><small>This species is not available for play as a station race.</small></b></span></br>"
if(!restricted || check_rights(R_ADMIN, 0))
dat += "\[<a href='?src=\ref[src];set_species=[html_encode(pref.species_preview)]'>select</a>\]"
dat += "</center>"

View File

@@ -7,7 +7,6 @@
S["UI_style_color"] >> pref.UI_style_color
S["UI_style_alpha"] >> pref.UI_style_alpha
S["html_UI_style"] >> pref.html_UI_style
S["skin_theme"] >> pref.skin_theme
S["ooccolor"] >> pref.ooccolor
S["clientfps"] >> pref.clientfps
@@ -16,7 +15,6 @@
S["UI_style_color"] << pref.UI_style_color
S["UI_style_alpha"] << pref.UI_style_alpha
S["html_UI_style"] << pref.html_UI_style
S["skin_theme"] << pref.skin_theme
S["ooccolor"] << pref.ooccolor
S["clientfps"] << pref.clientfps
@@ -28,7 +26,6 @@
"UI_style_color",
"UI_style_alpha",
"html_UI_style",
"skin_theme",
"ooccolor",
"clientfps",
"tooltip_style"
@@ -47,7 +44,6 @@
"UI_style_color",
"UI_style_alpha",
"html_UI_style",
"skin_theme",
"ooccolor",
"clientfps",
"tooltip_style",
@@ -62,7 +58,6 @@
"UI_style_color" = pref.UI_style_color,
"UI_style" = pref.UI_style,
"html_UI_style" = pref.html_UI_style,
"skin_theme" = pref.skin_theme,
"ooccolor" = pref.ooccolor,
"clientfps" = pref.clientfps,
"tooltip_style" = pref.tooltip_style
@@ -74,7 +69,6 @@
pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha))
pref.clientfps = sanitize_integer(text2num(pref.clientfps), 0, 1000, initial(pref.clientfps))
pref.html_UI_style = sanitize_inlist(pref.html_UI_style, SStheming.available_html_themes, initial(pref.html_UI_style))
pref.skin_theme = sanitize_inlist(pref.skin_theme, SStheming.skin_themes, initial(pref.skin_theme))
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
/datum/category_item/player_setup_item/player_global/ui/content(mob/user)
@@ -86,7 +80,6 @@
dat += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> - <a href='?src=\ref[src];reset=alpha'>reset</a><br>"
dat += "<b>Tooltip Style:</b> <a href='?src=\ref[src];select_tooltip_style=1'><b>[pref.tooltip_style]</b></a><br>"
dat += "<b>HTML UI Style:</b> <a href='?src=\ref[src];select_html=1'><b>[pref.html_UI_style]</b></a><br>"
dat += "<b>Main UI Style:</b> <a href='?src=\ref[src];select_skin_theme=1'><b>[pref.skin_theme]</b></a><br>"
dat += "-FPS: <a href='?src=\ref[src];select_fps=1'><b>[pref.clientfps]</b></a> - <a href='?src=\ref[src];reset=fps'>reset</a><br>"
if(can_select_ooc_color(user))
dat += "<b>OOC Color:</b> "
@@ -122,14 +115,6 @@
pref.html_UI_style = html_style_new
return TOPIC_REFRESH
else if(href_list["select_skin_theme"])
var/skin_theme_new = input(user, "Choose HTML UI style.", "Global Preference", pref.skin_theme) as null|anything in SStheming.skin_themes
if(isnull(skin_theme_new) || !CanUseTopic(user)) return TOPIC_NOACTION
pref.skin_theme = skin_theme_new
if(SStheming)
SStheming.apply_theme_from_perfs(user)
return TOPIC_REFRESH
else if(href_list["select_ooc_color"])
var/new_ooccolor = input(user, "Choose OOC color:", "Global Preference") as color|null
if(new_ooccolor && can_select_ooc_color(user) && CanUseTopic(user))

View File

@@ -234,7 +234,7 @@
switch(pref.alternate_option)
if(BE_ASSISTANT)
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=red>Be assistant if preference unavailable</font></a></u></center><br>"
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><span class='attack'>Be assistant if preference unavailable</span></a></u></center><br>"
if(RETURN_TO_LOBBY)
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=purple>Return to lobby if preference unavailable</font></a></u></center><br>"

View File

@@ -27,7 +27,6 @@ datum/preferences
var/UI_style_color = "#ffffff"
var/UI_style_alpha = 255
var/html_UI_style = "Nano"
var/skin_theme = "Light"
//Style for popup tooltips
var/tooltip_style = "Midnight"
var/motd_hash = "" //Hashes for the new server greeting window.

View File

@@ -27,7 +27,7 @@
if(prefs.asfx_togs & ASFX_AMBIENCE)
to_chat(src, "You will now hear ambient sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear ambient sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear ambient sounds.</span>")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
feedback_add_details("admin_verb","TSFXAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -42,7 +42,7 @@
if(prefs.asfx_togs & ASFX_FOOTSTEPS)
to_chat(src, "You will now hear footstep sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear footstep sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear footstep sounds.</span>")
feedback_add_details("admin_verb","TSFXFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Toggle_asfx_vote()
@@ -54,7 +54,7 @@
if(prefs.asfx_togs & ASFX_VOTE)
to_chat(src, "You will now hear the vote alarm.")
else
to_chat(src, "<font color='red'>You will no longer hear the vote alarm.</font>")
to_chat(src, "<span class='warning'>You will no longer hear the vote alarm.</span>")
feedback_add_details("admin_verb","TSFXFV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_vox_voice()
@@ -76,7 +76,7 @@
if(prefs.asfx_togs & ASFX_DROPSOUND)
to_chat(src, "You will now hear dropping and throwing sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear dropping and throwing sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear dropping and throwing sounds.</span>")
/client/proc/Toggle_arcadesounds()
set name = "Toggle Arcade SFX"
@@ -88,7 +88,7 @@
if(prefs.asfx_togs & ASFX_ARCADE)
to_chat(src, "You will now hear arcade sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear arcade sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear arcade sounds.</span>")
/client/proc/Toggle_radiosounds()
set name = "Toggle Radio SFX"
@@ -100,7 +100,7 @@
if(prefs.asfx_togs & ASFX_RADIO)
to_chat(src, "You will now hear radio sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear radio sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear radio sounds.</span>")
/client/proc/Toggle_instrumentsounds()
set name = "Toggle Instrument SFX"
@@ -112,4 +112,4 @@
if(prefs.asfx_togs & ASFX_INSTRUMENT)
to_chat(src, "You will now hear instrument sounds.")
else
to_chat(src, "<font color='red'>You will no longer hear instrument sounds.</font>")
to_chat(src, "<span class='warning'>You will no longer hear instrument sounds.</span>")

View File

@@ -205,7 +205,7 @@
if(panel_notification)
new_notification("warning","You have <b>[notification_count] unread notifications!</b> Click <a href='?JSlink=warnings;notification=:src_ref'>here</a> to review and acknowledge them!")
if(chat_notification)
to_chat(user,"<font color='red'><BIG><B>You have unacknowledged notifications.</B></BIG><br>Click <a href='?JSlink=warnings;notification=:src_ref'>here</a> to review and acknowledge them!</font>")
to_chat(user,"<span class='warning'><BIG><B>You have unacknowledged notifications.</B></BIG><br>Click <a href='?JSlink=warnings;notification=:src_ref'>here</a> to review and acknowledge them!</span>")
/*
* Helper proc for getting a count of active CCIA actions against the player's characters.