Merge pull request #7025 from Citadel-Station-13/upstream-merge-37790

[MIRROR] Individual Logs now follow the client around automatically
This commit is contained in:
deathride58
2018-06-07 04:34:11 +00:00
committed by GitHub
12 changed files with 55 additions and 26 deletions
+5 -1
View File
@@ -63,7 +63,11 @@
body += "<a href='?priv_msg=[M.ckey]'>PM</a> - "
body += "<a href='?_src_=holder;[HrefToken()];subtlemessage=[REF(M)]'>SM</a> - "
body += "<a href='?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(M)]'>FLW</a> - "
body += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)]'>LOGS</a>\] <br>"
//Default to client logs if available
var/source = LOGSRC_MOB
if(M.client)
source = LOGSRC_CLIENT
body += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_src=[source]'>LOGS</a>\] <br>"
body += "<b>Mob type</b> = [M.type]<br><br>"
+1 -1
View File
@@ -1905,7 +1905,7 @@
to_chat(usr, "This can only be used on instances of type /mob.")
return
show_individual_logging_panel(M, href_list["log_type"])
show_individual_logging_panel(M, href_list["log_src"], href_list["log_type"])
else if(href_list["languagemenu"])
if(!check_rights(R_ADMIN))
return
+33 -13
View File
@@ -1,32 +1,52 @@
/proc/show_individual_logging_panel(mob/M, type = INDIVIDUAL_ATTACK_LOG)
/proc/show_individual_logging_panel(mob/M, source = LOGSRC_CLIENT, type = INDIVIDUAL_ATTACK_LOG)
if(!M || !ismob(M))
return
var/dat = "<center><a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_ATTACK_LOG]'>Attack log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SAY_LOG]'>Say log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_EMOTE_LOG]'>Emote log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_OOC_LOG]'>OOC log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SHOW_ALL_LOG]'>Show all</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[type]'>Refresh</a></center>"
//Add client links
var/dat = ""
if(M.client)
dat += "<center><p>Client</p></center>"
dat += "<center><a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_ATTACK_LOG];log_src=[LOGSRC_CLIENT]'>Attack log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SAY_LOG];log_src=[LOGSRC_CLIENT]'>Say log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_EMOTE_LOG];log_src=[LOGSRC_CLIENT]'>Emote log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_OOC_LOG];log_src=[LOGSRC_CLIENT]'>OOC log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SHOW_ALL_LOG];log_src=[LOGSRC_CLIENT]'>Show all</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[type];log_src=[LOGSRC_CLIENT]'>Refresh</a></center>"
else
dat += "<p> No client attached to mob </p>"
dat += "<hr style='background:#000000; border:0; height:1px'>"
dat += "<center><p>Mob</p></center>"
//Add the links for the mob specific log
dat += "<center><a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_ATTACK_LOG];log_src=[LOGSRC_MOB]'>Attack log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SAY_LOG];log_src=[LOGSRC_MOB]'>Say log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_EMOTE_LOG];log_src=[LOGSRC_MOB]'>Emote log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_OOC_LOG];log_src=[LOGSRC_MOB]'>OOC log</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[INDIVIDUAL_SHOW_ALL_LOG];log_src=[LOGSRC_MOB]'>Show all</a> | "
dat += "<a href='?_src_=holder;[HrefToken()];individuallog=[REF(M)];log_type=[type];log_src=[LOGSRC_MOB]'>Refresh</a></center>"
dat += "<hr style='background:#000000; border:0; height:1px'>"
var/log_source = M.logging;
if(source == LOGSRC_CLIENT && M.client) //if client doesn't exist just fall back to the mob log
log_source = M.client.player_details.logging //should exist, if it doesn't that's a bug, don't check for it not existing
if(type == INDIVIDUAL_SHOW_ALL_LOG)
dat += "<center>Displaying all logs of [key_name(M)]</center><br><hr>"
for(var/log_type in M.logging)
dat += "<center>Displaying all [source] logs of [key_name(M)]</center><br><hr>"
for(var/log_type in log_source)
dat += "<center><b>[log_type]</b></center><br>"
var/list/reversed = M.logging[log_type]
var/list/reversed = log_source[log_type]
if(islist(reversed))
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
dat += "<hr>"
else
dat += "<center>[type] of [key_name(M)]</center><br>"
var/list/reversed = M.logging[type]
dat += "<center>[source] [type] of [key_name(M)]</center><br>"
var/list/reversed = log_source[type]
if(reversed)
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><hr>"
usr << browse(dat, "window=invidual_logging_[M];size=600x480")
usr << browse(dat, "window=invidual_logging_[key_name(M)];size=600x480")
+2 -1
View File
@@ -1,2 +1,3 @@
/datum/player_details
var/list/player_actions = list()
var/list/player_actions = list()
var/list/logging = list(INDIVIDUAL_ATTACK_LOG, INDIVIDUAL_SAY_LOG, INDIVIDUAL_EMOTE_LOG, INDIVIDUAL_OOC_LOG)
@@ -79,7 +79,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
var/mob/body = loc
if(ismob(body))
T = get_turf(body) //Where is the body located?
logging = body.logging //preserve our logs by copying them to our ghost
gender = body.gender
if(body.mind && body.mind.name)
+1 -4
View File
@@ -48,7 +48,4 @@
for(var/datum/action/A in client.player_details.player_actions)
A.Grant(src)
if(!GLOB.individual_log_list[ckey])
GLOB.individual_log_list[ckey] = logging
else
logging = GLOB.individual_log_list[ckey]
log_message("Client [key_name(src)] has taken ownership of mob [src]", INDIVIDUAL_OWNERSHIP_LOG)
+2 -1
View File
@@ -1,4 +1,5 @@
/mob/Logout()
log_message("[key_name(src)] is no longer owning mob [src]", INDIVIDUAL_OWNERSHIP_LOG)
SStgui.on_logout(src)
unset_machine()
GLOB.player_list -= src
@@ -8,4 +9,4 @@
if(loc)
loc.on_log(FALSE)
return TRUE
return TRUE
+1
View File
@@ -785,6 +785,7 @@
//This will update a mob's name, real_name, mind.name, GLOB.data_core records, pda, id and traitor text
//Calling this proc without an oldname will only update the mob and skip updating the pda, id and records ~Carn
/mob/proc/fully_replace_character_name(oldname,newname)
log_message("[src] name changed from [oldname] to [newname]", INDIVIDUAL_OWNERSHIP_LOG)
if(!newname)
return 0
real_name = newname
+6
View File
@@ -477,12 +477,18 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(!LAZYLEN(message) || !message_type)
return
if(client)
if(!islist(client.player_details.logging[message_type]))
client.player_details.logging[message_type] = list()
if(!islist(logging[message_type]))
logging[message_type] = list()
var/list/timestamped_message = list("[LAZYLEN(logging[message_type]) + 1]\[[time_stamp()]\] [key_name(src)]" = message)
logging[message_type] += timestamped_message
if(client)
client.player_details.logging[message_type] += timestamped_message
/mob/proc/can_hear()
. = TRUE
@@ -231,7 +231,6 @@
if(!new_mob)
return
new_mob.grant_language(/datum/language/common)
new_mob.logging = M.logging
// Some forms can still wear some items
for(var/obj/item/W in contents)