diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 79848c748a..eea0e7deda 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -104,7 +104,7 @@
#define WAIT_FINISH 4
// Setting this much higher than 1024 could allow spammers to DOS the server easily.
-#define MAX_MESSAGE_LEN 1024
+#define MAX_MESSAGE_LEN 2048 //VOREStation Edit - I'm not sure about "easily". It can be a little longer.
#define MAX_PAPER_MESSAGE_LEN 6144
#define MAX_BOOK_MESSAGE_LEN 24576
#define MAX_RECORD_LENGTH 24576
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index f1ccde0a17..0ecdb2fc20 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -11,7 +11,7 @@
var/input
if(!message)
- input = sanitize(input(src,"Choose an emote to display.") as text|null)
+ input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
else
input = message
if(input)
@@ -70,7 +70,7 @@
var/input
if(!message)
- input = sanitize(input(src, "Choose an emote to display.") as text|null)
+ input = sanitize_or_reflect(input(src, "Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
else
input = message
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index a0276a15ac..d42c26880b 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -3,7 +3,7 @@
if(name != GetVoice())
alt_name = "(as [get_id_name("Unknown")])"
- message = sanitize(message)
+ message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages, within reason
..(message, alt_name = alt_name, whispering = whispering)
/mob/living/carbon/human/proc/forcesay(list/append)
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 206450c909..0b20c6cb7f 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -21,8 +21,8 @@
if(say_disabled) //This is here to try to identify lag problems
usr << "Speech is currently admin-disabled."
return
-
- message = sanitize(message)
+
+ message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
set_typing_indicator(FALSE)
if(use_me)
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 0608b26cce..fbf9a9febb 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -11,7 +11,7 @@
usr << "Speech is currently admin-disabled."
return
- message = sanitize(message)
+ message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
if(!message)
return
@@ -31,7 +31,7 @@
var/input
if(!message)
- input = sanitize(input(src,"Choose an emote to display.") as text|null)
+ input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src)
else
input = message
@@ -61,3 +61,31 @@
/mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm
if(act == "me")
return custom_emote_vr(type, message)
+
+#define MAX_HUGE_MESSAGE_LEN 8192
+#define POST_DELIMITER_STR "\<\>"
+/proc/sanitize_or_reflect(message,user)
+ //Way too long to send
+ if(length(message) > MAX_HUGE_MESSAGE_LEN)
+ fail_to_chat(user)
+ return
+
+ message = sanitize(message, max_length = MAX_HUGE_MESSAGE_LEN)
+
+ //Came back still too long to send
+ if(length(message) > MAX_MESSAGE_LEN)
+ fail_to_chat(user,message)
+ return null
+ else
+ return message
+
+/proc/fail_to_chat(user,message)
+ if(!message)
+ to_chat(user,"Your message was NOT SENT, either because it was FAR too long, or sanitized to nothing at all.")
+ return
+
+ var/length = length(message)
+ var/posts = Ceiling(length/MAX_MESSAGE_LEN)
+ to_chat(user,message)
+ to_chat(user,"^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.")
+#undef MAX_HUGE_MESSAGE_LEN