From 974d09da59a9ed8d50dac838c3060b31ee674571 Mon Sep 17 00:00:00 2001 From: VampyrBytes Date: Thu, 5 May 2016 17:40:08 +0100 Subject: [PATCH] Params Adds support for params. A few other little tweaks too --- .../{Emote system => Emote_system}/emote.dm | 137 +++++++++++------- .../emote_handler.dm | 5 +- .../{Emote system => Emote_system}/emotes.dm | 34 +++++ code/modules/mob/say.dm | 9 +- paradise.dme | 6 +- 5 files changed, 129 insertions(+), 62 deletions(-) rename code/datums/{Emote system => Emote_system}/emote.dm (81%) rename code/datums/{Emote system => Emote_system}/emote_handler.dm (92%) rename code/datums/{Emote system => Emote_system}/emotes.dm (78%) diff --git a/code/datums/Emote system/emote.dm b/code/datums/Emote_system/emote.dm similarity index 81% rename from code/datums/Emote system/emote.dm rename to code/datums/Emote_system/emote.dm index 62c3c6a14d8..f0a7e6ddb1b 100644 --- a/code/datums/Emote system/emote.dm +++ b/code/datums/Emote_system/emote.dm @@ -22,11 +22,11 @@ VampyrBytes var/restrained = "" // 1 if being restrained prevents this emote var/cooldown = 0 - var/canTarget = 0 // 1 if the emote accepts a target Emotes only recieve 1 parameter, so its either or with these 2 - var/takesParam = 0 // 1 if the emote uses a non target parameter - - var/targetMob = 0 // 0 if target can be any atom, 1 if it has to be a mob + 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 + var/takesNumber = 0 // 1 if the emote uses a number parameter + var/spanClass = "notice" var/baseLevel = 1 var/baseSet = 0 @@ -43,20 +43,31 @@ VampyrBytes baseLevel = 0 break -/datum/emote/proc/doEmote(var/mob/user, var/param) +/datum/emote/proc/doEmote(var/mob/user) if(!istype(user)) return 0 if(cooldown) if(handle_emote_CD(user)) return 0 - var/message = createMessage(user, param) + var/number + var/target - if(canTarget && param) - param = getTarget(user, param) + if(takesNumber) + number = getNumber(user) + + if(canTarget) + target = getTarget(user) + + if(number == "failed" || target == "failed") // If you need to test the input, override the appopriate get proc, call the parent, + return // then test it. If it fails, tell the user why, then return "failed" to halt the emote + + var/message = createMessage(user, number) + + if(canTarget && message) + message = addTarget(user, target, message) if(message) - message = addTarget(user, param, message) message += "" outputMessage(user, message) @@ -64,13 +75,30 @@ VampyrBytes if(!(user.mind && user.mind.miming)) playSound(user, vol) - doAction(user, param) + doAction(user, target, number) return 1 // for things that the emote does that aren't text or sound based -/datum/emote/proc/doAction(var/mob/user, var/param) +/datum/emote/proc/doAction(var/mob/user, var/atom/target, var/number) return +/datum/emote/proc/getNumber(var/mob/user) + var/number = input("How many") as null|num + return number + +/datum/emote/proc/getTarget(var/mob/user) + if(targetMob) + return getMobTarget() + return getAtomTarget() + +/datum/emote/proc/getMobTarget() + var/mob/target = input("Select target", "Target Mob") as null|mob in view() + return target + +/datum/emote/proc/getAtomTarget() + var/atom/target = input("Select target", "Target") as null|mob|obj|turf in oview() + return target + // returns the reason the user can't currently do the emote /datum/emote/proc/prevented(var/mob/user) if(user.stat == DEAD) @@ -82,39 +110,58 @@ VampyrBytes /datum/emote/proc/available(var/mob/user) return -/datum/emote/proc/createMessage(var/mob/user, var/param) +/datum/emote/proc/createMessage(var/mob/user, var/number) if(!text) return var/message - if(audible && user.mind && user.mind.miming) + if(takesNumber && number) + message = getParamMessage(user, number) + else if(audible && user.mind && user.mind.miming) message = mimeMessage(user) else if(audible && user.is_muzzled()) message = muzzleMessage(user) - else if(takesParam && param) - message = paramMessage(user, param) else - message = "[startText + " "][user] [text]" + message = "[user] [text]" + if(startText) + message = "[startText] [message]" + message = "[message]" return message /datum/emote/proc/mimeMessage(var/mob/user) if(!mimeText) return - var/message = "[startText + " "][user] [mimeText]" + var/message = "[user] [mimeText]" return message /datum/emote/proc/muzzleMessage(var/mob/user) - var/message = "makes a [muzzledNoise + " "]noise" + var/message = "[user] makes a " + if(muzzledNoise) + message += "[muzzledNoise] " + message += "noise" + return message + +/datum/emote/proc/getParamMessage(var/mob/user, var/param) + var/message + if(audible && user.mind && user.mind.miming) + message = paramMimeMessage(user, param) + else if (audible && user.is_muzzled()) + message = muzzleMessage(user) + else + message = paramMessage(user, param) return message // if the emote takes a non target parameter, set up and return the with parameter version in here /datum/emote/proc/paramMessage(var/mob/user, var/param) return -/datum/emote/proc/addTarget(var/mob/user, var/target = "", var/message = "") +// as above, but for mimes trying to do audible messages +/datum/emote/proc/paramMimeMessage(var/mob/user, var/param) + return + +/datum/emote/proc/addTarget(var/mob/user, var/atom/target, var/message = "") if(!canTarget) return message - target = getTarget(user, target) if(!target) return message if(ismob(target)) @@ -123,35 +170,6 @@ VampyrBytes message += " [targetText] \the [target]" return message -/datum/emote/proc/getTarget(var/mob/user, var/target = "") - if(!target) - return - if(targetMob) - return getMobTarget(user, target) - else - return getAtomTarget(user, target) - -/datum/emote/proc/getMobTarget(var/mob/user, var/target = "") - for (var/mob/M in view(null, user)) - if (target == M.name) - return M - -/datum/emote/proc/getAtomTarget(var/mob/user, var/target = "") - if (target) - for (var/atom/A as mob|obj|turf in view(null, user)) - if (target == A.name) - return A - -/datum/emote/proc/outputMessage(var/mob/user, var/message = "") - if(!message) - return - log_emote("[user.name]/[user.key] : [message]") - if(audible) - audible_message(message, user) - else - visible_message(message, user) - sendToDead(message) - // What you should see when you perform the emote /datum/emote/proc/createSelfMessage(var/mob/user, var/message = "") var/selfMessage @@ -163,6 +181,16 @@ VampyrBytes selfMessage = replacetext(selfMessage, text, selfText) return selfMessage +/datum/emote/proc/outputMessage(var/mob/user, var/message = "") + if(!message) + return + log_emote("[user.name]/[user.key] : [message]") + if(audible) + audible_message(message, user) + else + visible_message(message, user) + sendToDead(message) + /datum/emote/proc/visible_message(var/message = "", var/mob/user) var/selfMessage = createSelfMessage(user, message) for(var/mob/M in viewers(user)) @@ -182,7 +210,6 @@ VampyrBytes /datum/emote/proc/audible_message(var/message = "", var/mob/user) var/selfMessage = createSelfMessage(user, message) - testing(selfMessage) for(var/mob/M in get_mobs_in_view(7, user)) var/msg = message if(selfMessage && M==src) @@ -272,6 +299,11 @@ VampyrBytes return 0 // Proceed with emote //--FalseIncarnate + +/****************************************************************************************** + Emote Verbs +******************************************************************************************/ + /datum/emote/proc/addVerbs(var/mob/user) if(!istype(user)) return @@ -318,6 +350,7 @@ obj/emoteVerb/custom/New(var/mob/user) set category = "Emotes" usr.emoteHandler.runEmote("me", null, message, audible) + /************************************************************************************************************************** Custom Emotes As these are made as needed, they aren't searched for the appropriate one. As such, you need to specify conditions for which @@ -346,6 +379,10 @@ available, but if you do, make sure you return ..() so the check for use_me is s if(user.use_me) return 1 +// Yeah, no +/datum/emote/custom/createSelfMessage(var/mob/user, var/message = "") + return message + /datum/emote/custom/ghost name = "Ghost emote" startText = "DEAD: " diff --git a/code/datums/Emote system/emote_handler.dm b/code/datums/Emote_system/emote_handler.dm similarity index 92% rename from code/datums/Emote system/emote_handler.dm rename to code/datums/Emote_system/emote_handler.dm index afcb4f0253b..a20199155d2 100644 --- a/code/datums/Emote system/emote_handler.dm +++ b/code/datums/Emote_system/emote_handler.dm @@ -19,11 +19,12 @@ commands[command] = found found.addVerbs(owner) + /datum/emoteHandler/proc/deleteEmoteVerbs() for(var/obj/emoteVerb/E in owner.contents) qdel(E) -/datum/emoteHandler/proc/runEmote(var/command = "", var/param = "", var/message = "", var/audible = 0) // message and audible only used in custom emotes +/datum/emoteHandler/proc/runEmote(var/command = "", var/message = "", var/audible = 0) // message and audible only used in custom emotes if(!command) return 0 if(command == "help") @@ -43,7 +44,7 @@ emote = commands[command] if(!emote.available(owner)) // something's changed, remake the commands list, then try again to see if they've got a different version setupCommands() - return runEmote(command, param, message) + return runEmote(command, message, audible) var/prevented = emote.prevented(owner) if(prevented) diff --git a/code/datums/Emote system/emotes.dm b/code/datums/Emote_system/emotes.dm similarity index 78% rename from code/datums/Emote system/emotes.dm rename to code/datums/Emote_system/emotes.dm index 5ab3b76b56d..691ad7ab26e 100644 --- a/code/datums/Emote system/emotes.dm +++ b/code/datums/Emote_system/emotes.dm @@ -88,4 +88,38 @@ above it. If you don't want this, make the call to ..() then use commands = new return message +/datum/emote/signal + name = "signal" + desc = "raise x number of fingers" + text = "raises" + selfText = "raise" + canTarget = 1 + restrained = 1 + targetMob = 1 + takesNumber = 1 +/datum/emote/signal/New() + ..() + commands += "signal" + commands += "signals" + +/datum/emote/signal/available(var/mob/user) + if(ishuman(user)) + return 1 + +/datum/emote/signal/getNumber(var/mob/user) + var/number = ..() + var/fingersAvailable = 0 + if(!user.r_hand) + fingersAvailable += 5 + if(!user.l_hand) + fingersAvailable += 5 + if(fingersAvailable < number) + to_chat(user, "You don't have enough fingers free") + return "failed" + return number + +/datum/emote/signal/paramMessage(var/mob/user, var/param) + var/message = "[user] raises [param] finger\s" + testing(message) + return message diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 43248d54db4..709c1d778b3 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -29,7 +29,7 @@ /mob/verb/me_verb(message as text) set name = "Me" - set category = "IC" + set category = "Emotes" message = strip_html_properly(message) @@ -95,13 +95,8 @@ /mob/proc/emote(var/act, var/type, var/message) - var/param - if (findtext(act, "-", 1, null)) - var/t1 = findtext(act, "-", 1, null) - param = copytext(act, t1 + 1, length(act) + 1) - act = copytext(act, 1, t1) - emoteHandler.runEmote(act, param, message, type) + emoteHandler.runEmote(act, message, type) diff --git a/paradise.dme b/paradise.dme index b8e3c3dd148..a1cfc939216 100644 --- a/paradise.dme +++ b/paradise.dme @@ -258,9 +258,9 @@ #include "code\datums\diseases\advance\symptoms\weakness.dm" #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" -#include "code\datums\Emote system\emote.dm" -#include "code\datums\Emote system\emote_handler.dm" -#include "code\datums\Emote system\emotes.dm" +#include "code\datums\Emote_system\emote.dm" +#include "code\datums\Emote_system\emote_handler.dm" +#include "code\datums\Emote_system\emotes.dm" #include "code\datums\helper_datums\construction_datum.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\global_iterator.dm"