From 22a3bcf704974f64f437e2ba898d4a9a54710575 Mon Sep 17 00:00:00 2001 From: Krausus Date: Wed, 22 Jun 2016 14:24:22 -0400 Subject: [PATCH] Emote Fixes and "Me" Tweak (#4749) - Tweaked "Me" verb to allow inclusion of the message when typing directly into chat box. - Fixed ghosts, with ghostsight on, seeing emotes twice when near the emoter. - Fixed *flip runtiming when used with no target and no grab. - Fixed scream not displaying any message. - Fixed double sanitizing in custom emotes. - Fixed several cases where user wasn't getting passed into proc calls. - Removed a couple unnecessary periods from dialogs. --- code/datums/Emote_system/emote.dm | 31 ++++++++++++++++-------------- code/datums/Emote_system/emotes.dm | 19 +++++++++++++++++- code/modules/mob/say.dm | 13 +++++++++++-- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm index 07089785740..4f130fbf330 100644 --- a/code/datums/Emote_system/emote.dm +++ b/code/datums/Emote_system/emote.dm @@ -281,7 +281,7 @@ VampyrBytes var/end = start + lentext(startText) + 1 message = copytext(message, 1, start) + copytext(message, end, lentext(message) + 1) - message = replaceMobWithYou(user, message) + message = replaceMobWithYou(user, message, user) return message @@ -298,21 +298,21 @@ VampyrBytes visualOrAudible = 1 log_emote("[user.name]/[user.key] : [message]") - sendToDead(message) + sendToDead(user, message) for(var/mob/M in getRecipients(getLoc(user, message), visualOrAudible)) var/msg = "" if(M==user) msg = createSelfMessage(user, params, message) if(msg) - outputMessage(M, msg) + outputMessage(M, msg, user) continue if(M.stat == UNCONSCIOUS || (M.sleeping && M.stat != DEAD)) if(!visualOrAudible == 2) continue msg = "... You can almost hear someone talking ..." - outputMessage(M, msg) + outputMessage(M, msg, user) continue if(M.sdisabilities & DEAF || M.ear_deaf) @@ -325,7 +325,7 @@ VampyrBytes if(!msg && visualOrAudible == 2) continue if(msg) - outputMessage(M, msg) + outputMessage(M, msg, user) continue if(M.sdisabilities & BLIND || M.blinded || M.paralysis || (M.see_invisible < user.invisibility && visualOrAudible == 2)) @@ -336,7 +336,7 @@ VampyrBytes if(!msg && visualOrAudible == 1) continue if(msg) - outputMessage(M, msg) + outputMessage(M, msg, user) continue if(M.see_invisible < user.invisibility && visualOrAudible == 1) @@ -406,12 +406,15 @@ VampyrBytes message = addExtras(message) return message -/datum/emote/proc/sendToDead(var/message = "") +/datum/emote/proc/sendToDead(var/mob/user, var/message = "", var/ghostEmote) for(var/mob/M in dead_mob_list) if(!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers and new players - if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) - M.show_message(message) + if(M.stat == DEAD) + if(ghostEmote && ((M.client.prefs.toggles & CHAT_GHOSTSIGHT) || (M in viewers(user)))) + M.show_message(message) + else if((M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(user))) + M.show_message(message) /datum/emote/proc/playSound(var/mob/user, var/list/params) if(!sound) @@ -534,10 +537,10 @@ one is used in /datum/emote_handler/customEmote(). /datum/emote/custom/proc/getMessage(var/mob/user) // user.set_typing_indicator(1) // user.hud_typing = 1 - var/input = sanitize(copytext(input(user,"What do you want to emote?.", "Custom emote") as text|null,1,MAX_MESSAGE_LEN)) + var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) // user.hud_typing = 0 // user.set_typing_indicator(0) - input = strip_html_properly(input) + input = trim_strip_html_properly(input) return input /datum/emote/custom/available(var/mob/user) @@ -572,13 +575,13 @@ one is used in /datum/emote_handler/customEmote(). return "deadchat is globally muted" /datum/emote/custom/ghost/getMessage(var/mob/user) - var/input = sanitize(copytext(input(user,"What do you want to emote?.", "Custom emote") as text|null,1,MAX_MESSAGE_LEN)) - input = strip_html_properly(input) + var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) + input = trim_strip_html_properly(input) return input /datum/emote/custom/ghost/processMessage(var/mob/user, var/list/params, var/message = "") if(!message) return log_emote("Ghost/[user.key] : [message]") - sendToDead(message) + sendToDead(user, message, ghostEmote = 1) diff --git a/code/datums/Emote_system/emotes.dm b/code/datums/Emote_system/emotes.dm index a5383c30c23..fd17fcc3953 100644 --- a/code/datums/Emote_system/emotes.dm +++ b/code/datums/Emote_system/emotes.dm @@ -594,7 +594,7 @@ /datum/emote/flip/flipOver/doAction(var/mob/user, var/params, var/message) var/obj/item/weapon/grab/G = user.get_active_hand() - if(G == params["target"]) + if(istype(G) && (G.affecting == params["target"]) && !G.affecting.buckled) var/turf/oldloc = user.loc var/turf/newloc = G.affecting.loc if(isturf(oldloc) && isturf(newloc)) @@ -1150,12 +1150,29 @@ name = "scream" desc = "makes the mob scream" commands = list("scream", "screams") + text = "screams!" + selfText = "scream!" audible = 1 mimeText = "acts out a scream" muzzledNoise = "very loud" cooldown = 50 vol = 80 +/datum/emote/scream/createMessage(var/mob/user, var/list/params) + var/mob/living/carbon/human/H = user + + if(istype(H)) + return "\The [user] [H.species.scream_verb]!" + else + return ..() + +/datum/emote/scream/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) + var/mob/living/carbon/human/H = user + + if(istype(H) && (H.species.scream_verb != "screams")) + return message + return ..() + /datum/emote/scream/machine name = "machine scream" sound = 'sound/goonstation/voice/robot_scream.ogg' diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 70d1e72205a..493fade2ea1 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -28,12 +28,21 @@ usr.say(message) -/mob/verb/me_verb() +/mob/verb/me_verb(message as text) set name = "Me" set category = "Emotes" + set desc = "(action) Enter a custom emote." + + if(!message) + return + + message = trim_strip_html_properly(message) + + if(message == "") + return if(emoteHandler) - return emoteHandler.runEmote("me") + return emoteHandler.runEmote("me", message) /mob/proc/say_dead(var/message)