diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm
index 5d04b83e73..f47aa9e14e 100644
--- a/code/modules/client/preference_setup/global/01_ui.dm
+++ b/code/modules/client/preference_setup/global/01_ui.dm
@@ -16,6 +16,7 @@
S["tgui_input_mode"] >> pref.tgui_input_mode
S["tgui_large_buttons"] >> pref.tgui_large_buttons
S["tgui_swapped_buttons"] >> pref.tgui_swapped_buttons
+ S["chat_timestamp"] >> pref.chat_timestamp
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
S["UI_style"] << pref.UI_style
@@ -31,6 +32,7 @@
S["tgui_input_mode"] << pref.tgui_input_mode
S["tgui_large_buttons"] << pref.tgui_large_buttons
S["tgui_swapped_buttons"] << pref.tgui_swapped_buttons
+ S["chat_timestamp"] << pref.chat_timestamp
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
@@ -46,6 +48,7 @@
pref.tgui_input_mode = sanitize_integer(pref.tgui_input_mode, 0, 1, initial(pref.tgui_input_mode))
pref.tgui_large_buttons = sanitize_integer(pref.tgui_large_buttons, 0, 1, initial(pref.tgui_large_buttons))
pref.tgui_swapped_buttons = sanitize_integer(pref.tgui_swapped_buttons, 0, 1, initial(pref.tgui_swapped_buttons))
+ pref.chat_timestamp = sanitize_integer(pref.chat_timestamp, 0, 1, initial(pref.chat_timestamp))
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
. = "UI Style: [pref.UI_style]
"
@@ -61,6 +64,7 @@
. += "TGUI Input Framework: [(pref.tgui_input_mode) ? "Enabled" : "Disabled (default)"]
"
. += "TGUI Large Buttons: [(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]
"
. += "TGUI Swapped Buttons: [(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]
"
+ . += "Chat Timestamps: [(pref.chat_timestamp) ? "Enabled" : "Disabled (default)"]
"
if(can_select_ooc_color(user))
. += "OOC Color:"
if(pref.ooccolor == initial(pref.ooccolor))
@@ -142,6 +146,10 @@
pref.tgui_swapped_buttons = !pref.tgui_swapped_buttons
return TOPIC_REFRESH
+ else if(href_list["chat_timestamps"])
+ pref.chat_timestamp = !pref.chat_timestamp
+ return TOPIC_REFRESH
+
else if(href_list["reset"])
switch(href_list["reset"])
if("ui")
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index c81cce1ecc..687d6df6cf 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -31,6 +31,7 @@ var/list/preferences_datums = list()
var/tgui_input_mode = FALSE // All the Input Boxes (Text,Number,List,Alert)
var/tgui_large_buttons = TRUE
var/tgui_swapped_buttons = FALSE
+ var/chat_timestamp = FALSE
//character preferences
var/real_name //our character's name
diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm
index 0e83638e88..d74d3c178f 100644
--- a/code/modules/client/preferences_toggle_procs.dm
+++ b/code/modules/client/preferences_toggle_procs.dm
@@ -379,6 +379,16 @@
You will have to reload VChat and/or reconnect to the server for these changes to take place. \
VChat message persistence is not guaranteed if you change this again before the start of the next round.")
+/client/verb/toggle_chat_timestamps()
+ set name = "Toggle Chat Timestamps"
+ set category = "Preferences"
+ set desc = "Toggles whether or not messages in chat will display timestamps. Enabling this will not add timestamps to messages that have already been sent."
+
+ prefs.chat_timestamp = !prefs.chat_timestamp //There is no preference datum for tgui input lock, nor for any TGUI prefs.
+ SScharacter_setup.queue_preferences_save(prefs)
+
+ to_chat(src, span_notice("You have toggled chat timestamps: [prefs.chat_timestamp ? "ON" : "OFF"]."))
+
/client/verb/toggle_status_indicators()
set name = "Toggle Status Indicators"
set category = "Preferences"
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 6e2b08bdce..ae249d6762 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -138,15 +138,28 @@
ai_holder.on_hear_say(speaker, multilingual_to_message(message_pieces))
/mob/proc/on_hear_say(var/message)
- to_chat(src, "[message]")
- if(teleop)
+ var/time = say_timestamp()
+ if(client)
+ if(client.prefs.chat_timestamp)
+ to_chat(src, "[time] [message]")
+ else
+ to_chat(src, "[message]")
+ else if(teleop)
to_chat(teleop, "[create_text_tag("body", "BODY:", teleop.client)][message]")
+ else
+ to_chat(src, "[message]")
/mob/living/silicon/on_hear_say(var/message)
var/time = say_timestamp()
- to_chat(src, "[time] [message]")
- if(teleop)
- to_chat(teleop, "[create_text_tag("body", "BODY:", teleop.client)][time] [message]")
+ if(client)
+ if(client.prefs.chat_timestamp)
+ to_chat(src, "[time] [message]")
+ else
+ to_chat(src, "[message]")
+ else if(teleop)
+ to_chat(teleop, "[create_text_tag("body", "BODY:", teleop.client)][message]")
+ else
+ to_chat(src, "[message]")
// Checks if the mob's own name is included inside message. Handles both first and last names.
/mob/proc/check_mentioned(var/message)
@@ -199,7 +212,7 @@
on_hear_radio(part_a, part_b, speaker_name, track, part_c, message, part_d, part_e)
/proc/say_timestamp()
- return "\[[stationtime2text()]\]"
+ return "\[[time2text(world.timeofday, "hh:mm")]\]"
/mob/proc/on_hear_radio(part_a, part_b, speaker_name, track, part_c, formatted, part_d, part_e)
var/final_message = "[part_b][speaker_name][part_c][formatted][part_d]"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 2730d4f327..4653da4082 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -46,6 +46,7 @@
return ..()
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
+ var/time = say_timestamp()
if(!client && !teleop) return
@@ -68,9 +69,12 @@
if(stat == UNCONSCIOUS || sleeping > 0)
to_chat(src, "... You can almost hear someone talking ...")
else
- to_chat(src,msg)
- if(teleop)
+ if(client.prefs.chat_timestamp)
+ to_chat(src,"[time] [msg]")
+ else if(teleop)
to_chat(teleop, create_text_tag("body", "BODY:", teleop.client) + "[msg]")
+ else
+ to_chat(src,msg)
return
// Show a message to all mobs and objects in sight of this one