diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index cf562a6c90b..4da858daca0 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -120,7 +120,7 @@
var/datum/controller/subsystem/tickets/tickets_system
// We treat PMs as mentorhelps if we were explicitly so, or if neither
// party is an admin.
- if(type == "Mentorhelp" || !(check_rights(R_ADMIN|R_MOD, 0, C.mob) || check_rights(R_ADMIN|R_MOD, 0, src.mob)))
+ if(type == "Mentorhelp" || !(check_rights(R_ADMIN|R_MOD, 0, C.mob) || check_rights(R_ADMIN|R_MOD, 0, mob)))
send_span = "mentorhelp"
recieve_span = "mentorhelp"
message_type = MESSAGE_TYPE_MENTORPM
@@ -167,22 +167,32 @@
return
var/ping_link = check_rights(R_ADMIN, 0, mob) ? "(PING)" : ""
- var/window_link = "(WINDOW)"
+ var/ticket_link
var/alert_link = check_rights(R_ADMIN, FALSE, mob) ? "(ALERT)" : ""
if(ticket_id != -1)
if(message_type == MESSAGE_TYPE_MENTORPM)
- window_link = "(TICKET)"
+ ticket_link = "(TICKET)"
else
- window_link = "(TICKET)"
+ ticket_link = "(TICKET)"
var/emoji_msg = "[msg]"
- recieve_message = "[type] from-[recieve_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg][C.holder ? "
[ping_link] [window_link] [alert_link]" : ""]"
+ var/recieve_window_link = "(WINDOW)"
+ if(message_type == MESSAGE_TYPE_MENTORPM && check_rights(R_ADMIN|R_MENTOR, 0, C.mob))
+ recieve_window_link = ticket_link
+ else if(message_type == MESSAGE_TYPE_ADMINPM && check_rights(R_ADMIN, 0, C.mob))
+ recieve_window_link = ticket_link
+ recieve_message = "[type] from-[recieve_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg][C.holder ? "
[ping_link] [recieve_window_link] [alert_link]" : ""]"
if(message_type == MESSAGE_TYPE_MENTORPM)
recieve_message = chat_box_mhelp(recieve_message)
else
recieve_message = chat_box_ahelp(recieve_message)
to_chat(C, recieve_message)
- var/send_message = "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [window_link] [alert_link]"
+ var/send_window_link = "(WINDOW)"
+ if(message_type == MESSAGE_TYPE_MENTORPM && check_rights(R_ADMIN|R_MENTOR, 0, mob))
+ send_window_link = ticket_link
+ else if(message_type == MESSAGE_TYPE_ADMINPM && check_rights(R_ADMIN, 0, mob))
+ send_window_link = ticket_link
+ var/send_message = "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [send_window_link] [alert_link]"
if(message_type == MESSAGE_TYPE_MENTORPM)
send_message = chat_box_mhelp(send_message)
else
@@ -191,9 +201,9 @@
var/third_party_message
if(message_type == MESSAGE_TYPE_MENTORPM)
- third_party_message = chat_box_mhelp("[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]->[key_name(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [window_link] [alert_link]")
+ third_party_message = chat_box_mhelp("[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]->[key_name(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [ticket_link] [alert_link]")
else
- third_party_message = chat_box_ahelp("[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]->[key_name(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [window_link] [alert_link]")
+ third_party_message = chat_box_ahelp("[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]->[key_name(C, TRUE, type, ticket_id = ticket_id)]:
[emoji_msg]
[ping_link] [ticket_link] [alert_link]")
//play the recieving admin the adminhelp sound (if they have them enabled)
//non-admins always hear the sound, as they cannot toggle it
@@ -287,6 +297,7 @@
target.pm_tracker.show_ui(target.mob)
/datum/pm_tracker
+ var/ckey
var/current_title = ""
var/open = FALSE
var/list/datum/pm_convo/pms = list()
@@ -294,6 +305,9 @@
var/window_id = "pms_window"
var/forced = FALSE
+/datum/pm_tracker/New(ckey_in)
+ ckey = ckey_in
+
/datum/pm_convo
var/list/messages = list()
var/archived = FALSE
@@ -326,6 +340,10 @@
show_ui(user)
/datum/pm_tracker/proc/show_ui(mob/user)
+ // Please do not open someone else's PMs, that makes them not very private.
+ if(user.ckey != ckey)
+ return
+
var/dat = ""
// If it was forced open, make them use a special close button that alerts admins to closure
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 31edadc979f..aa06fa2055c 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -11,7 +11,7 @@
var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent.
var/last_message_time = 0 //holds the last time (based on world.time) a message was sent
- var/datum/pm_tracker/pm_tracker = new()
+ var/datum/pm_tracker/pm_tracker
/////////
//OTHER//
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index d2412ed6d54..0ad98f3ae25 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -262,6 +262,9 @@
stat_panel = new(src, "statbrowser")
stat_panel.subscribe(src, PROC_REF(on_stat_panel_message))
+ // Create a PM tracker bound to this ckey.
+ pm_tracker = new(ckey)
+
tgui_panel = new(src, "browseroutput")
tgui_say = new(src, "tgui_say")
TopicData = null //Prevent calls to client.Topic from connect