From 5c6474ffc0976e8b9384f926ae778a0184251fa0 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Wed, 18 May 2016 14:45:14 +0100 Subject: [PATCH] Adds better text macro support, default cooldown for emotes with sound and some cleaning --- code/datums/Emote_system/emote.dm | 92 ++++++++++++++++------- code/datums/Emote_system/emote_handler.dm | 2 +- code/modules/mob/emote.dm | 2 +- 3 files changed, 68 insertions(+), 28 deletions(-) diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm index 6343c17c7c5..09a111b009f 100644 --- a/code/datums/Emote_system/emote.dm +++ b/code/datums/Emote_system/emote.dm @@ -6,6 +6,7 @@ The only exception to this is custom emotes, which are created as needed and onl VampyrBytes *******************************************************************************************************/ +#define EMOTE_COOLDOWN 20 //Time in deciseconds that the cooldown lasts /datum/emote var/name = "" @@ -18,11 +19,12 @@ VampyrBytes var/audible = 0 var/mimeText = "" + var/mimeSelf = "" //self version of mimeText var/sound // sound file var/vol = 50 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/cooldown = 0 // How long the cooldown should be on this emote. Defaults to EMOTE_COOLDOWN if not set and the emote plays a sound var/restrained = 0 // 1 if being restrained prevents this emote @@ -46,6 +48,8 @@ VampyrBytes if(count == 4) baseLevel = 0 break + if(sound && !cooldown) + cooldown = EMOTE_COOLDOWN /datum/emote/proc/doEmote(var/mob/user) if(!istype(user)) @@ -67,7 +71,8 @@ VampyrBytes message = createMessage(user, params) if(message) - . = outputMessage(user, message, params) + message = addExtras(user, params, message) + . = outputMessage(user, params, message) if(!doMime(user)) @@ -132,7 +137,7 @@ VampyrBytes /datum/emote/proc/createMessage(var/mob/user, var/list/params) if(!text) return - var/message + var/message = "" if(doMime(user)) message = mimeMessage(user, params) @@ -143,12 +148,11 @@ VampyrBytes else if(checkForParams(params)) message = paramMessage(user, params) else - message = "\The [user] [text]" + message = standardMessage(user) if(message && "target" in params) message = addTarget(user, params, message) - message = addExtras(user, params, message) return message /datum/emote/proc/checkForParams(var/list/params) @@ -157,7 +161,7 @@ VampyrBytes continue return 1 -/datum/emote/proc/addExtras(var/mob/user, var/list/params, var/message) +/datum/emote/proc/addExtras(var/mob/user, var/list/params, var/message = "") if(!message) return if(startText) @@ -165,18 +169,22 @@ VampyrBytes message = "[message]" return message +/datum/emote/proc/standardMessage(var/mob/user) + var/message = "\The [user] [text]" + return message + /datum/emote/proc/mimeMessage(var/mob/user, var/list/params) if(!mimeText) return if(checkForParams(params)) return paramMimeMessage(user, params) - var/message = "[user] [mimeText]" + var/message = "\The [user] [mimeText]" if(message && "target" in params) message = addTarget(user, params, message) return message /datum/emote/proc/muzzleMessage(var/mob/user) - var/message = "[user] makes a " + var/message = "\The [user] makes a " if(muzzledNoise) message += "[muzzledNoise] " message += "noise" @@ -195,37 +203,44 @@ VampyrBytes return message if(!params["target"]) return message - message += " [targetText] \the [params["target"]]" + if(params["target"] == user) + message += " [targetText] [getHimself(user)]" + else + message += " [targetText] \the [params["target"]]" return message // What you should see when you perform the emote -/datum/emote/proc/createSelfMessage(var/mob/user, var/message = "") +/datum/emote/proc/createSelfMessage(var/mob/user, var/list/params, var/message = "") if(!selfText) return message message = replacetext(message, text, selfText) + message = changeTextMacros(user, message) - if(startText) - if(selfStart) - message = replacetext(message, "[user]", "you") - else - message = replacetext(message, "[user]", "You") + if(mimeSelf) + message = replacetext(message, mimeText, mimeSelf) - var/start = findtextEx(message, startText) - var/end = start + lentext(startText) + 1 - message = copytext(message, 1, start) + copytext(message, end, lentext(message) + 1) + if(selfStart && startText) + message = replacetext(message, "\The [user]", "you") + else + message = replacetext(message, "\The [user]", "You") + + if(startText && !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) +/datum/emote/proc/outputMessage(var/mob/user, var/list/params, var/message = "") var/visualOrAudible = audible + 1 if(doMime(user)) visualOrAudible = 1 - var/selfMessage = createSelfMessage(user, message) + var/selfMessage = createSelfMessage(user, params, message) log_emote("[user.name]/[user.key] : [message]") sendToDead(message) - + testing(message) for(var/mob/M in getRecipients(user, visualOrAudible)) var/msg = "" @@ -243,7 +258,7 @@ VampyrBytes continue if((!(M in getRecipients(user, 1))) || M.see_invisible < user.invisibility) continue - msg = createDeafMessage(user, message, params) + msg = createDeafMessage(user, params, message) if(!msg && visualOrAudible == 2) continue @@ -251,7 +266,7 @@ VampyrBytes 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) + msg = createBlindMessage(user, params, message) if(!msg && visualOrAudible == 1) continue @@ -275,16 +290,16 @@ VampyrBytes // 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) +/datum/emote/proc/createBlindMessage(var/mob/user, var/list/params, var/message) if(audible && 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 -/datum/emote/proc/createDeafMessage(var/mob/user, var/message, var/list/params) +/datum/emote/proc/createDeafMessage(var/mob/user, var/list/params, var/message) return mimeMessage(user, params) -/datum/emote/proc/sendToDead(message) +/datum/emote/proc/sendToDead(var/message = "") for(var/mob/M in dead_mob_list) if(!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers and new players @@ -307,6 +322,7 @@ VampyrBytes if(user.emote_cd == 1) return 1 // Already on CD, prevent use user.emote_cd = 1 // Starting cooldown + spawn(cooldown) if(user.emote_cd == 2) return 1 // Don't reset if cooldown emotes were disabled by an admin during the cooldown user.emote_cd = 0 // Cooldown complete, ready for more! @@ -314,6 +330,30 @@ VampyrBytes return 0 // Proceed with emote //--FalseIncarnate +/datum/emote/proc/changeTextMacros(var/mob/user, var/message = "") + message = swapHisToYour(user, message) + message = swapHimselfToYourself(user, message) + return message + +/datum/emote/proc/getHis(var/mob/user) + var/his = "[user]\his" + his = copytext(his, lentext("[user]") + 1) + return his + +/datum/emote/proc/swapHisToYour(var/mob/user, var/message = "") + var/his = getHis(user) + message = replacetext(message, his, "your") + return message + +/datum/emote/proc/getHimself(var/mob/user) + var/himself = "[user]\himself" + himself = copytext(himself, lentext("[user]") + 1) + return himself + +/datum/emote/proc/swapHimselfToYourself(var/mob/user, var/message) + var/himself = getHimself(user) + message = replacetext(message, himself, "yourself") + return message /****************************************************************************************** Emote Verbs diff --git a/code/datums/Emote_system/emote_handler.dm b/code/datums/Emote_system/emote_handler.dm index d30d542aaec..ca8c14914f3 100644 --- a/code/datums/Emote_system/emote_handler.dm +++ b/code/datums/Emote_system/emote_handler.dm @@ -70,7 +70,7 @@ var/datum/emote/em = new t if(em.allowParent) continue - found = searchTree(em, 1) + found = searchTree(em) if(found) return (found) if(emote.available(owner)) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 201e54ef839..2832d70c90a 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -1,4 +1,4 @@ -#define EMOTE_COOLDOWN 20 //Time in deciseconds that the cooldown lasts + //Emote Cooldown System (it's so simple!) /*