From 636081e47e16e22cb9152286bb481d14ecd6cb0b Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Mon, 16 May 2016 22:56:03 +0100 Subject: [PATCH] Cleans up message output + bugfixes and tweaks --- code/datums/Emote_system/emote.dm | 179 +++++++++++++----------------- 1 file changed, 76 insertions(+), 103 deletions(-) diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm index 65a09d23ea3..f12d0e20214 100644 --- a/code/datums/Emote_system/emote.dm +++ b/code/datums/Emote_system/emote.dm @@ -14,14 +14,18 @@ VampyrBytes var/text = "" var/selfText = "" // the version of text that you should see - eg, if text is screams, you want scream here, as You screams is bad grammer var/startText = "" // if you need to put something in before [user]. Should end with a space + var/selfStart = 1 // whether the start text is used in what you see + + var/audible = 0 var/mimeText = "" var/sound // sound file var/vol = 50 - var/audible = 0 - var/muzzledNoise = "" // if the emote is audible and you're muzzled, this is what type of noise you make (eg weak, loud). End with a space - var/restrained = "" // 1 if being restrained prevents this emote + var/muzzleAffected = 0 // whether being muzzled affects this emote + var/muzzledNoise = "" // if the emote is audible and you're muzzled, this is what type of noise you make (eg weak, loud). var/cooldown = 0 + var/restrained = 0 // 1 if being restrained prevents this emote + var/canTarget = 0 // 1 if the emote accepts a target var/targetMob = 0 // 0 if target can be any atom, 1 if it has to be a mob, var/targetText = "at" // what goes inbetween user and target @@ -65,12 +69,10 @@ VampyrBytes if(message) . = outputMessage(user, message, params) - var/played = 0 - if(!doMime(user)) - played = playSound(user, vol) - if(played) - . = 2 + if(!doMime(user)) + if(playSound(user, vol)) + . = 2 doAction(user, params) @@ -88,7 +90,6 @@ VampyrBytes if(canTarget) params["target"] = getTarget(user) - return params // return "invalid" from either of these getters if you've tested the input and it's failed @@ -97,15 +98,17 @@ VampyrBytes return number /datum/emote/proc/getTarget(var/mob/user) + if(user.sdisabilities & BLIND || user.blinded || user.paralysis) + return if(targetMob) - return getMobTarget() - return getAtomTarget() + return getMobTarget(user) + return getAtomTarget(user) -/datum/emote/proc/getMobTarget() +/datum/emote/proc/getMobTarget(var/mob/user) var/mob/target = input("Select target", "Target Mob") as null|mob in view() return target -/datum/emote/proc/getAtomTarget() +/datum/emote/proc/getAtomTarget(var/mob/user) var/atom/target = input("Select target", "Target") as null|mob|obj|turf in oview() return target @@ -135,25 +138,23 @@ VampyrBytes message = mimeMessage(user, params) if(!message) - if(muzzledNoise && user.is_muzzled()) + if(muzzleAffected && user.is_muzzled()) message = muzzleMessage(user) - else if(checkForParams(params)) message = paramMessage(user, params) else - message = "[user] [text]" + message = "[user] [text]" if(message && "target" in params) if(params["target"]) message = addTarget(user, params, message) - message = addExtras(message) return message /datum/emote/proc/checkForParams(var/list/params) for(var/p in params) - if(params[p] == "target") + if(p == "target") continue return 1 @@ -170,14 +171,14 @@ VampyrBytes return if(checkForParams(params)) return paramMimeMessage(user, params) - var/message = "[user] [mimeText]" + var/message = "[user] [mimeText]" if(message && "target" in params) if(params["target"]) message = addTarget(user, params, message) return message /datum/emote/proc/muzzleMessage(var/mob/user) - var/message = "[user] makes a " + var/message = "[user] makes a " if(muzzledNoise) message += "[muzzledNoise] " message += "noise" @@ -201,109 +202,81 @@ VampyrBytes // What you should see when you perform the emote /datum/emote/proc/createSelfMessage(var/mob/user, var/message = "") - if(startText) + if(startText && selfStart) message = replacetext(message, "[user]", "you") else message = replacetext(message, "[user]", "You") if(selfText) message = replacetext(message, text, selfText) + if(!selfStart) + var/start = findtextEx(message, startText) + var/end = start + lentext(startText) + 1 + message = copytext(message, 1, start) + copytext(message, end, lentext(message) + 1) + return message /datum/emote/proc/outputMessage(var/mob/user, var/message = "", var/list/params) - if(!message) - return + var/visualOrAudible = audible + 1 + if(doMime(user)) + visualOrAudible = 1 + var/selfMessage = createSelfMessage(user, message) + log_emote("[user.name]/[user.key] : [message]") sendToDead(message) - if(audible) - return audible_message(message, user, params) - else - return visible_message(message, user, params) -/datum/emote/proc/visible_message(var/message = "", var/mob/user, var/list/params) - var/selfMessage = createSelfMessage(user, message) - for(var/mob/M in viewers(user)) - if(M.see_invisible < user.invisibility) - continue //can't view the invisible - var/msg = message + for(var/mob/M in getRecipients(user, visualOrAudible)) + var/msg = "" + if(selfMessage && M==user) msg = selfMessage - else if(M.sdisabilities & BLIND || M.blinded || M.paralysis) - if(M.sdisabilities & DEAF || M.ear_deaf) + + else if(M.stat == UNCONSCIOUS || (M.sleeping > 0 && M.stat != 2)) + if (visualOrAudible == 2) + msg = "... You can almost hear someone talking ..." + else continue - msg = createBlindMessage(message, user, params) - if(msg) - outputAudibleMessage(msg, M, user, 1) - else - outputVisibleMessage(msg, M, user, params) - return 1 -/datum/emote/proc/audible_message(var/message = "", var/mob/user, var/list/params) - if(doMime(user)) - return visible_message(message, user) - var/selfMessage = createSelfMessage(user, message) - for(var/mob/M in get_mobs_in_view(7, user)) - var/msg = message - if(selfMessage && M==user) - msg = selfMessage else if(M.sdisabilities & DEAF || M.ear_deaf) if(M.sdisabilities & BLIND || M.blinded || M.paralysis) continue - msg = createDeafMessage(user, message) - if(msg) - outputVisibleMessage(msg, M, user, 1) - else - outputAudibleMessage(msg, M, user) - return 2 + if((!(M in getRecipients(user, 1))) || M.see_invisible < user.invisibility) + continue + msg = createDeafMessage(user, message, params) -/datum/emote/proc/outputVisibleMessage(var/message, var/mob/recipient, var/mob/user, var/list/params, var/retest = 0) - if(retest) - if(!user) - return - var/found = 0 - for(var/mob/M in viewers(user)) - if(M == recipient) - found = 1 - if(recipient.see_invisible < user.invisibility) - return - break - if(!found) - return - if(recipient.sdisabilities & DEAF || recipient.ear_deaf) - if(!(recipient == user)) - var/msg = createDeafMessage(user, message, params) - if(msg) - message = msg - if(recipient.stat == UNCONSCIOUS || (recipient.sleeping > 0 && recipient.stat != 2)) - to_chat(recipient, "... You can almost hear someone talking ...") - else - to_chat(recipient, message) + if(!msg && visualOrAudible == 2) + continue + + else if(M.sdisabilities & BLIND || M.blinded || M.paralysis || (M.see_invisible < user.invisibility && visualOrAudible == 2)) + if(!(M in getRecipients(user, 2))) + continue + msg = createBlindMessage(user, message, params) + if(!msg && visualOrAudible == 1) + continue + + else if(M.see_invisible < user.invisibility) + continue + + if(!msg) + msg = message + + to_chat(M, msg) + return visualOrAudible + +/datum/emote/proc/getRecipients(var/mob/user, var/visualOrAudible) + var/list/recipients[0] + switch(visualOrAudible) + if(1) + recipients = viewers(user) + if(2) + recipients = get_mobs_in_view(7, user) + return recipients -/datum/emote/proc/outputAudibleMessage(var/message = "", var/mob/recipient, var/mob/user, var/list/params, var/retest = 0) - if(retest) - if(!user) - return - var/found = 0 - for(var/mob/M in get_mobs_in_view(7, user)) - if(M == recipient) - found = 1 - break - if(!found) - return - if(recipient.sdisabilities & BLIND || recipient.blinded || recipient.paralysis) - if(!(recipient == user)) - var/msg = createBlindMessage(user, message, params) - if(msg) - message = msg - if(recipient.stat == UNCONSCIOUS || (recipient.sleeping > 0 && recipient.stat != 2)) - to_chat(recipient, "... You can almost hear someone talking ...") - else - to_chat(recipient, message) // set up different messages for blind people here. Empty will mean no message for //non-audible emotes and the standard message for audible ones /datum/emote/proc/createBlindMessage(var/mob/user, var/message, var/list/params) if(audible && selfText) - return "You hear someone [selfText]" + return "You hear someone [selfText]" // set up different messages for deaf people here. Empty will mean no message for // audible emotes and standard for non-audible ones @@ -318,9 +291,10 @@ VampyrBytes M.show_message(message) /datum/emote/proc/playSound(var/mob/user) - if(sound) - playsound(user, sound, vol) - return 1 + if(!sound) + return + playsound(user, sound, vol) + return 1 /datum/emote/proc/doMime(var/mob/user) if(mimeText && user.mind && user.mind.miming) @@ -408,8 +382,7 @@ available, but if you do, make sure you return ..() so the check for use_me is s message = getMessage(user) text = message audible = isAudible - if(user.mind && user.mind.miming) - audible = 0 + /datum/emote/custom/proc/getMessage(var/mob/user) var/input = sanitize(copytext(input(user,"Choose an emote to display.") as text|null,1,MAX_MESSAGE_LEN))