From 291ef524bbb8c2e4030d19605bedb9dfeef52868 Mon Sep 17 00:00:00 2001
From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Date: Mon, 2 Sep 2024 04:28:55 +1000
Subject: [PATCH] Implements Env Message system (#16229)
* Implements Env Message system
* Fixes verb category for env messages
* Adds some basic logging.
---
code/modules/env_message/env_message.dm | 115 ++++++++++++++++++++++++
icons/effects/env_message.dmi | Bin 0 -> 291 bytes
vorestation.dme | 1 +
3 files changed, 116 insertions(+)
create mode 100644 code/modules/env_message/env_message.dm
create mode 100644 icons/effects/env_message.dmi
diff --git a/code/modules/env_message/env_message.dm b/code/modules/env_message/env_message.dm
new file mode 100644
index 0000000000..9b55c1ba72
--- /dev/null
+++ b/code/modules/env_message/env_message.dm
@@ -0,0 +1,115 @@
+var/global/list/env_messages = list()
+
+/obj/effect/env_message
+ name = "Env message"
+ icon = 'icons/effects/env_message.dmi'
+ icon_state = "env_message"
+ plane = PLANE_LIGHTING_ABOVE
+ mouse_opacity = TRUE
+ anchored = TRUE
+ var/list/message_list = list()
+ var/combined_message = "You should not see this"
+
+/obj/effect/env_message/Initialize(mapload)
+ .=..()
+ env_messages += src
+
+/obj/effect/env_message/Destroy()
+ env_messages -= src
+ return ..()
+
+/obj/effect/env_message/examine(mob/user)
+ . = ..()
+ for(var/tckey in message_list)
+ . += message_list[tckey]
+
+/obj/effect/env_message/proc/add_message(var/tckey, var/message)
+ message_list[tckey] = message
+ update_message()
+
+/obj/effect/env_message/proc/remove_message(var/tckey)
+ message_list -= tckey
+ if(!message_list.len)
+ qdel(src)
+ else
+ update_message()
+
+/obj/effect/env_message/proc/update_message()
+ combined_message = ""
+ var/count = 0
+ for(var/tckey in message_list)
+ combined_message += message_list[tckey]
+ count++
+ if(!(count == message_list.len))
+ combined_message += "
"
+
+/obj/effect/env_message/MouseEntered(location, control, params)
+ if(usr)
+ openToolTip(user = usr, tip_src = src, params = params, title = null, content = combined_message)
+
+ ..()
+
+/obj/effect/env_message/MouseDown()
+ closeToolTip(usr) //No reason not to, really
+
+ ..()
+
+/obj/effect/env_message/MouseExited()
+ closeToolTip(usr) //No reason not to, really
+
+ ..()
+
+/proc/clear_env_message(var/tckey)
+ for(var/obj/effect/env_message/EM in env_messages)
+ if(tckey in EM.message_list)
+ EM.remove_message(tckey)
+
+/mob/living/verb/create_env_message()
+ set name = "Create Env Message"
+ set desc = "Create an ooc message in the environment for other players to see."
+ set category = "OOC"
+
+ if(!istype(src) || !get_turf(src) || !src.ckey)
+ return
+
+ var/new_message = sanitize(tgui_input_text(src, "Type in your message. It will be displayed to players who hover over the spot where you are right now. If you already have a message somewhere, it will be removed in the process. Please refrain from abusive or deceptive messages, but otherwise, feel free to be creative!", "Env Message"))
+
+ if(!new_message)
+ return
+
+ clear_env_message(src.ckey)
+
+ var/ourturf = get_turf(src)
+
+ var/obj/effect/env_message/EM = locate(/obj/effect/env_message) in ourturf
+
+ if(!EM)
+ EM = new /obj/effect/env_message(ourturf)
+ EM.add_message(src.ckey, new_message)
+
+ log_game("[key_name(src)] created an Env Message: [new_message] at ([EM.x], [EM.y], [EM.z])")
+
+/mob/living/verb/remove_env_message()
+ set name = "Remove Env Message"
+ set desc = "Remove your current env message."
+ set category = "OOC"
+
+ if(!istype(src) || !src.ckey)
+ return
+
+ var/ourturf = get_turf(src)
+
+ var/obj/effect/env_message/EM = locate(/obj/effect/env_message) in ourturf
+
+ if(EM)
+ var/answer = tgui_alert(src, "Do you want to remove this env message? (Note: Selecting 'Yes' will remove other players' messages on this tyle too. Please don't remove other players' messages for no reason. Use 'Only My Message' to remove yours only.)", "Env Message", list("Yes", "Only My Message", "No"))
+ if(answer == "Yes")
+ if(!(src.ckey in EM.message_list) || EM.message_list.len > 1)
+ log_game("[key_name(src)] deleted an Env Message that contained other players' entries at ([EM.x], [EM.y], [EM.z])")
+ qdel(EM)
+ else if(answer == "Only My Message")
+ clear_env_message(src.ckey)
+ else
+ var/answer = tgui_alert(src, "Do you want to remove your env message?", "Env Message", list("Yes", "No"))
+ if(answer == "Yes")
+ clear_env_message(src.ckey)
\ No newline at end of file
diff --git a/icons/effects/env_message.dmi b/icons/effects/env_message.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..87440a20ad267f6a89e8a9044d96f378009383d2
GIT binary patch
literal 291
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ!m5yn5|`BCkI%Q%`;fN^pNMHV&~+X
zsG$5WmJZ1;JX!nFPt>dIK67Ek553<C>b<++|Njv*1P$uYJdc{w+%DQXCcS7ttTQSIgm
nW;a=bR}F#eJyr<|WEmKyN^^hwqJJt2XfcDQtDnm{r-UW|<+OG6
literal 0
HcmV?d00001
diff --git a/vorestation.dme b/vorestation.dme
index 51451eda27..097e8d717d 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2283,6 +2283,7 @@
#include "code\modules\entopics_vr\alternate_appearance.dm"
#include "code\modules\entopics_vr\entopics.dm"
#include "code\modules\entrepreneur\entrepreneur_items.dm"
+#include "code\modules\env_message\env_message.dm"
#include "code\modules\error_handler\_defines.dm"
#include "code\modules\error_handler\error_handler.dm"
#include "code\modules\error_handler\error_viewer.dm"