diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 06e13d53068..2d6be2a6dbb 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -56,7 +56,7 @@ var/global/nologevent = 0 TP - PM - SM - - JMP\]
+ [admin_jump_link(M, src)]\]
Mob type = [M.type]

Kick | Warn | @@ -79,8 +79,13 @@ var/global/nologevent = 0 (toggle all) "} + var/jumptoeye = "" + if(isAI(M)) + var/mob/living/silicon/ai/A = M + if(A.client && A.eyeobj) // No point following clientless AI eyes + jumptoeye = " (Eye)" body += {"

- Jump to | + Jump to[jumptoeye] | Get | Send To

diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 3025296bb71..ff98278ce90 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -61,7 +61,7 @@ } - function expand(id,job,name,real_name,image,key,ip,antagonist,ref){ + function expand(id,job,name,real_name,image,key,ip,antagonist,ref,eyeref){ clearAll(); @@ -81,7 +81,10 @@ body += "TP - " body += "PM - " body += "SM - " - body += "JMP
" + body += "JMP" + if(eyeref) + body += "|EYE" + body += "
" if(antagonist > 0) body += "Antagonist"; @@ -287,6 +290,11 @@ M_key = replacetext(M_key, "\"", "") M_key = replacetext(M_key, "\\", "") + var/M_eyeref = "" + if(isAI(M)) + var/mob/living/silicon/ai/A = M + if(A.client && A.eyeobj) // No point following clientless AI eyes + M_eyeref = "\ref[A.eyeobj]" //output for each mob dat += {" @@ -294,7 +302,7 @@ [M_name] - [M_rname] - [M_key] ([M_job]) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c34147845cb..845e664edf1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1558,7 +1558,7 @@ src.owner << "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];" src.owner << "Location = [location_description];" src.owner << "[special_role_description]" - src.owner << "(PM) (PP) (VV) (SM) (JMP) (CA)" + src.owner << "(PM) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (CA)" else if(href_list["adminspawncookie"]) if(!check_rights(R_ADMIN|R_EVENT)) return @@ -2990,3 +2990,20 @@ current_tab = text2num(href_list["tab"]) Secrets(usr) return 1 + +/proc/admin_jump_link(var/atom/target, var/source, var/tmsg = "JMP", var/emsg = "EYE", var/sep = "|") + if(!target) return + // The way admin jump links handle their src is weirdly inconsistent... + if(istype(source, /datum/admins)) + source = "src=\ref[source]" + else + source = "_src_=holder" + + if(isAI(target)) // AI core/eye follow links + var/mob/living/silicon/ai/A = target + . = "[tmsg]" + if(A.client && A.eyeobj) // No point following clientless AI eyes + . += "[sep][emsg]" + return + else + return "[tmsg]" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 2dd6ed7f892..0a4b63a6892 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -94,7 +94,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!mob) return //this doesn't happen var/ref_mob = "\ref[mob]" - msg = "\blue [selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) (JMP) (CA) [ai_found ? " (CL)" : ""]: [msg]" + msg = "\blue [selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob, "holder")]) (CA) [ai_found ? " (CL)" : ""]: [msg]" //send this msg to all admins var/admin_number_afk = 0 diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 209ce6b0b32..cf0ec78a9b5 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -12,7 +12,7 @@ if(check_rights(R_ADMIN,0)) for(var/client/C in admins) if(R_ADMIN & C.holder.rights) - C << "ADMIN: [key_name(usr, 1)] (JMP): [msg]" + C << "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob, "holder")]): [msg]" feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -34,6 +34,6 @@ spanclass = "mod_channel_admin" for(var/client/C in admins) if(R_MOD & C.holder.rights) - C << "MOD: [key_name(usr, 1)] (JMP): [msg]" + C << "MOD: [key_name(usr, 1)] ([admin_jump_link(mob, C.holder)]): [msg]" feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f259207dcc4..3fa1386aa07 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -13,7 +13,7 @@ return var/image/cross = image('icons/obj/storage.dmi',"bible") - msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (SC): [msg]" + msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, "holder")]) (CA) (SC): [msg]" for(var/client/X in admins) if(R_EVENT & X.holder.rights) @@ -26,7 +26,7 @@ /proc/Centcomm_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "\blue CENTCOMM:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" + msg = "\blue CENTCOMM:[key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RPLY): [msg]" for(var/client/X in admins) if(R_EVENT & X.holder.rights) @@ -34,7 +34,7 @@ /proc/Syndicate_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "\blue SYNDICATE: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (REPLY): [msg]" + msg = "\blue SYNDICATE: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (REPLY): [msg]" for(var/client/X in admins) if(R_EVENT & X.holder.rights) @@ -42,7 +42,7 @@ /proc/HONK_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "\blue HONK:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" + msg = "\blue HONK:[key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RPLY): [msg]" for(var/client/X in admins) if(R_EVENT & X.holder.rights) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d4d4c53d74d..c9eaaf826a5 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -499,8 +499,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return ..() -/proc/ghost_follow_link(var/atom/target, var/atom/ghost=src) - if(!target) return +/proc/ghost_follow_link(var/atom/target, var/atom/ghost) + if((!target) || (!ghost)) return if(isAI(target)) // AI core/eye follow links var/mob/living/silicon/ai/A = target . = "core" diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index e9e087ac366..34176d34108 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -55,7 +55,7 @@ return if(speaker_name != speaker.real_name && speaker.real_name) speaker_name = "[speaker.real_name] ([speaker_name])" - track = "([ghost_follow_link(speaker)]) " + track = "([ghost_follow_link(speaker, ghost=src)]) " if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) message = "[message]" @@ -170,7 +170,7 @@ if(istype(src, /mob/dead/observer)) if(speaker_name != speaker.real_name && !isAI(speaker)) //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs. speaker_name = "[speaker.real_name] ([speaker_name])" - track = "[speaker_name] ([ghost_follow_link(follow_target)])" + track = "[speaker_name] ([ghost_follow_link(follow_target, ghost=src)])" var/formatted if(language) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index fb6dfa22f74..3383ad1eab9 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -475,7 +475,7 @@ var/list/intents = list("help","disarm","grab","harm") if(subject != M) follow = "([ghost_follow_link(subject, ghost=M)]) " if(M.stat != DEAD && M.client.holder) - follow = "(JMP) " + follow = "([admin_jump_link(subject, M.client.holder)]) " var/mob/dead/observer/DM if(istype(subject, /mob/dead/observer)) DM = subject diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index f01aa60d704..80319363248 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -260,7 +260,7 @@ var/list/alldepartments = list() /obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#006100") - var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (REPLY): Receiving '[sent.name]' via secure connection... view message" + var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (SM) ([admin_jump_link(sender, "holder")]) (CA) (BSA) (REPLY): Receiving '[sent.name]' via secure connection... view message" for(var/client/C in admins) if(R_EVENT & C.holder.rights)