diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 49ee5887e8c..c63b1fb54d5 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -78,8 +78,7 @@ #define COLOR_RED_LIGHT "#FF3333" #define COLOR_DEEP_SKY_BLUE "#00e1ff" - -#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : null)) +#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (isclient(I) ? I : null)) // Shuttles. diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 05757c9b7db..d08c49d6a8d 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -538,15 +538,15 @@ proc/get_nt_opposed() set category = "OOC" if(!ticker || !ticker.mode) - to_chat(usr, "Something is terribly wrong; there is no gametype.") + to_chat(usr, "Something is terribly wrong; there is no gametype.") return if(master_mode != "secret") - to_chat(usr, "The roundtype is [capitalize(ticker.mode.name)]") + to_chat(usr, "The roundtype is [capitalize(ticker.mode.name)]") if(ticker.mode.round_description) - to_chat(usr, "[ticker.mode.round_description]") + to_chat(usr, "[ticker.mode.round_description]") if(ticker.mode.extended_round_description) - to_chat(usr, "[ticker.mode.extended_round_description]") + to_chat(usr, "[ticker.mode.extended_round_description]") else - to_chat(usr, "Shhhh. It's a secret.") + to_chat(usr, "Shhhh. It's a secret.") return diff --git a/code/game/verbs/advanced_who.dm b/code/game/verbs/advanced_who.dm index bbde65fd07e..9f067054f25 100644 --- a/code/game/verbs/advanced_who.dm +++ b/code/game/verbs/advanced_who.dm @@ -71,4 +71,5 @@ msg += "[line]\n" msg += "Total Players: [length(Lines)]" + msg = "" + msg + "" to_chat(src, msg) \ No newline at end of file diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 2bf3a1f5cc7..2bd7326b3b9 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -6,7 +6,7 @@ set category = null set name = "Admin PM Mob" if(!holder) - to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") return if( !ismob(M) || !M.client ) return @@ -18,7 +18,7 @@ set category = "Admin" set name = "Admin PM" if(!holder) - to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") return var/list/client/targets[0] for(var/client/T) @@ -37,7 +37,7 @@ /client/proc/cmd_ahelp_reply(whom) if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return var/client/C if(istext(whom)) @@ -48,16 +48,16 @@ C = whom if(!C) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") return var/datum/admin_help/AH = C.current_ticket if(AH) - message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.") + message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.") var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null if (!msg) - message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.") + message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.") return cmd_admin_pm(whom, msg, AH) @@ -65,12 +65,12 @@ //Fetching a message if needed. src is the sender and C is the target client /client/proc/cmd_admin_pm(whom, msg, datum/admin_help/AH) if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo - to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.") - to_chat(src, "Message: [msg]") + to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.") + to_chat(src, "Message: [msg]") return var/client/recipient @@ -95,14 +95,14 @@ if(!msg) return if(holder) - to_chat(src, "Error: Use the admin IRC channel, nerd.") + to_chat(src, "Error: Use the admin IRC channel, nerd.") return else if(!recipient) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") to_chat(src, msg) else current_ticket.MessageNoRecipient(msg) @@ -116,12 +116,12 @@ return if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") + to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).") return if(!recipient) if(holder) - to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, "Error: Admin-PM: Client not found.") else current_ticket.MessageNoRecipient(msg) return @@ -140,27 +140,27 @@ var/keywordparsedmsg = keywords_lookup(msg) if(irc) - to_chat(src, "PM to-Admins: [rawmsg]") - admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]") + to_chat(src, "PM to-Admins: [rawmsg]") + admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]") ircreplyamount-- send2irc("Reply: [ckey]",rawmsg) else if(recipient.holder) if(holder) //both are admins - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") //omg this is dumb, just fill in both their tickets - var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" + var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" admin_ticket_log(src, interaction_message) if(recipient != src) //reeee admin_ticket_log(recipient, interaction_message) else //recipient is an admin but sender is not - var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" + var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" admin_ticket_log(src, replymsg) to_chat(recipient, replymsg) - to_chat(src, "PM to-Admins: [msg]") + to_chat(src, "PM to-Admins: [msg]") //play the recieving admin the adminhelp sound (if they have them enabled) if(recipient.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) @@ -171,12 +171,12 @@ if(!recipient.current_ticket) new /datum/admin_help(msg, recipient, TRUE) - to_chat(recipient, "-- Administrator private message --") - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") - to_chat(recipient, "Click on the administrator's name to reply.") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") + to_chat(recipient, "-- Administrator private message --") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") + to_chat(recipient, "Click on the administrator's name to reply.") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") - admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") + admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") //always play non-admin recipients the adminhelp sound recipient << 'sound/effects/adminhelp.ogg' @@ -195,19 +195,19 @@ return else //neither are admins - to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") + to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") return if(irc) log_admin("PM: [key_name(src)]->IRC: [rawmsg]") for(var/client/X in admins) - to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]") + to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]") else log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]") //we don't use message_admins here because the sender/receiver might get it too for(var/client/X in admins) if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient - to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" ) + to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" ) /proc/IrcPm(target,msg,sender) var/client/C = GLOB.directory[target] @@ -256,11 +256,11 @@ message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]") log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]") - to_chat(C, "-- Administrator private message --") - to_chat(C, "Admin PM from-[adminname]: [msg]") - to_chat(C, "Click on the administrator's name to reply.") + to_chat(C, "-- Administrator private message --") + to_chat(C, "Admin PM from-[adminname]: [msg]") + to_chat(C, "Click on the administrator's name to reply.") - admin_ticket_log(C, "PM From [irc_tagged]: [msg]") + admin_ticket_log(C, "PM From [irc_tagged]: [msg]") window_flash(C, ignorepref = TRUE) //always play non-admin recipients the adminhelp sound diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 8930a18811a..ef64cd4acd7 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -29,17 +29,9 @@ You can set verify to TRUE if you want send() to sleep until the client has the //This proc sends the asset to the client, but only if it needs it. //This proc blocks(sleeps) unless verify is set to false /proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) + client = CLIENT_FROM_VAR(client) // Will get client from a mob, or accept a client, or return null if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 + return 0 if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) return 0 @@ -73,17 +65,9 @@ You can set verify to TRUE if you want send() to sleep until the client has the //This proc blocks(sleeps) unless verify is set to false /proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) + client = CLIENT_FROM_VAR(client) // Will get client from a mob, or accept a client, or return null if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 + return 0 var/list/unreceived = asset_list - (client.cache + client.sending) if(!unreceived || !unreceived.len) diff --git a/code/modules/vchat/js/vchat.js b/code/modules/vchat/js/vchat.js index cca2d8d3c59..634cbbfe90f 100644 --- a/code/modules/vchat/js/vchat.js +++ b/code/modules/vchat/js/vchat.js @@ -152,7 +152,7 @@ function start_vue() { admin: false }, { - matches: ".notice, .adminnotice, .info, .sinister, .cult", + matches: ".notice:not(.pm), .adminnotice, .info, .sinister, .cult", becomes: "vc_info", pretty: "Notices", tooltip: "Non-urgent messages from the game and items", @@ -160,7 +160,7 @@ function start_vue() { admin: false }, { - matches: ".critical, .danger, .userdanger, .warning, .italics", + matches: ".critical, .danger, .userdanger, .warning:not(.pm), .italics", becomes: "vc_warnings", pretty: "Warnings", tooltip: "Urgent messages from the game and items", diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index 23900f2d3c3..0e8f0051361 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -140,6 +140,10 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic /datum/chatOutput/proc/become_broken() broken = TRUE loaded = FALSE + + if(!owner) + qdel(src) + return update_vis() diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index 2f709c48d26..d698ccbbbd4 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -110,7 +110,7 @@ if(holder) to_chat(holder, "the [bicon(src)] [src] held by [holder] shudders in your grasp.") else - src.loc.visible_message("the \icon[src] [src] shudders.") + src.loc.visible_message("the [bicon(src)] [src] shudders.") //consume power inserted_battery.use_power(energy_consumed_on_touch) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index a6b904fa8a8..06ed2760b68 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -16,10 +16,10 @@ em {font-style: normal;font-weight: bold;} /* OOC */ .ooc {font-weight: bold;} +.looc {color: #3A9696;} .ooc img.text_tag {width: 32px; height: 10px;} .ooc .everyone {color: #002eb8;} -.ooc .looc {color: #3A9696;} .ooc .elevated {color: #2e78d9;} .ooc .moderator {color: #184880;} .ooc .developer {color: #1b521f;} diff --git a/interface/skin.dmf b/interface/skin.dmf index 917ff0455e4..2892676bcab 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1251,6 +1251,7 @@ window "outputwindow" style = ".system {color:#FF0000;}" max-lines = 0 saved-params = "" + enable-http-images = true window "rpane" elem "rpane" diff --git a/maps/RandomZLevels/wildwest.dm b/maps/RandomZLevels/wildwest.dm index f2f48bf9fc0..83007c250e0 100644 --- a/maps/RandomZLevels/wildwest.dm +++ b/maps/RandomZLevels/wildwest.dm @@ -121,7 +121,7 @@ if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, "[M] triggered the \icon[src] [src]") + to_chat(O, "[M] triggered the [bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M)