mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 15:42:35 +00:00
Introduces a few updates from /tg/station13 with regards to runtime logging, and then modifies the runtime logging code to work properly. Developers now have access to both condensed and uncondensed runtime logs, with the former being updated at the end of each round.
181 lines
4.3 KiB
Plaintext
181 lines
4.3 KiB
Plaintext
//print an error message to world.log
|
|
|
|
|
|
// On Linux/Unix systems the line endings are LF, on windows it's CRLF, admins that don't use notepad++
|
|
// will get logs that are one big line if the system is Linux and they are using notepad. This solves it by adding CR to every line ending
|
|
// in the logs. ascii character 13 = CR
|
|
|
|
/var/global/log_end= world.system_type == UNIX ? ascii2text(13) : ""
|
|
|
|
|
|
/proc/error(msg)
|
|
world.log << "## ERROR: [msg][log_end]"
|
|
|
|
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
|
|
//print a warning message to world.log
|
|
/proc/warning(msg)
|
|
world.log << "## WARNING: [msg][log_end]"
|
|
|
|
//print a testing-mode debug message to world.log
|
|
/proc/testing(msg)
|
|
world.log << "## TESTING: [msg][log_end]"
|
|
|
|
/proc/game_log(category, text)
|
|
diary << "\[[time_stamp()]] [game_id] [category]: [text][log_end]"
|
|
|
|
/proc/log_admin(text)
|
|
admin_log.Add(text)
|
|
if (config.log_admin)
|
|
game_log("ADMIN", text)
|
|
|
|
/proc/log_debug(text)
|
|
if (config.log_debug)
|
|
game_log("DEBUG", text)
|
|
|
|
for(var/client/C in admins)
|
|
if(!C.prefs) //This is to avoid null.toggles runtime error while still initialyzing players preferences
|
|
return
|
|
if(C.prefs.toggles & CHAT_DEBUGLOGS)
|
|
C << "DEBUG: [text]"
|
|
|
|
/proc/log_game(text)
|
|
if (config.log_game)
|
|
game_log("GAME", text)
|
|
|
|
/proc/log_vote(text)
|
|
if (config.log_vote)
|
|
game_log("VOTE", text)
|
|
|
|
/proc/log_access(text)
|
|
if (config.log_access)
|
|
game_log("ACCESS", text)
|
|
|
|
/proc/log_say(text)
|
|
if (config.log_say)
|
|
game_log("SAY", text)
|
|
|
|
/proc/log_ooc(text)
|
|
if (config.log_ooc)
|
|
game_log("OOC", text)
|
|
|
|
/proc/log_whisper(text)
|
|
if (config.log_whisper)
|
|
game_log("WHISPER", text)
|
|
|
|
/proc/log_emote(text)
|
|
if (config.log_emote)
|
|
game_log("EMOTE", text)
|
|
|
|
/proc/log_attack(text)
|
|
if (config.log_attack)
|
|
game_log("ATTACK", text)
|
|
|
|
/proc/log_adminsay(text)
|
|
if (config.log_adminchat)
|
|
game_log("ADMINSAY", text)
|
|
|
|
/proc/log_adminwarn(text)
|
|
if (config.log_adminwarn)
|
|
game_log("ADMINWARN", text)
|
|
|
|
/proc/log_pda(text)
|
|
if (config.log_pda)
|
|
game_log("PDA", text)
|
|
|
|
/proc/log_to_dd(text)
|
|
world.log << text //this comes before the config check because it can't possibly runtime
|
|
if(config.log_world_output)
|
|
game_log("DD_OUTPUT", text)
|
|
|
|
/proc/log_misc(text)
|
|
game_log("MISC", text)
|
|
|
|
// Procs for logging into diary_runtime
|
|
/proc/log_hard_delete(atom/A)
|
|
if (config.log_runtime)
|
|
diary_runtime << "hard delete:[log_end]"
|
|
diary_runtime << "[A.type][log_end]"
|
|
|
|
/proc/log_exception(exception/e)
|
|
if (config.log_runtime)
|
|
if (config.log_runtime == 2)
|
|
log_debug("RUNTIME ERROR:\n[e.name]")
|
|
|
|
diary_runtime << "runtime error:[e.name][log_end]"
|
|
diary_runtime << "[e.desc]"
|
|
|
|
//pretty print a direction bitflag, can be useful for debugging.
|
|
/proc/print_dir(var/dir)
|
|
var/list/comps = list()
|
|
if(dir & NORTH) comps += "NORTH"
|
|
if(dir & SOUTH) comps += "SOUTH"
|
|
if(dir & EAST) comps += "EAST"
|
|
if(dir & WEST) comps += "WEST"
|
|
if(dir & UP) comps += "UP"
|
|
if(dir & DOWN) comps += "DOWN"
|
|
|
|
return english_list(comps, nothing_text="0", and_text="|", comma_text="|")
|
|
|
|
//more or less a logging utility
|
|
/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special_characters = 1)
|
|
var/mob/M
|
|
var/client/C
|
|
var/key
|
|
|
|
if(!whom) return "*null*"
|
|
if(istype(whom, /client))
|
|
C = whom
|
|
M = C.mob
|
|
key = C.key
|
|
else if(ismob(whom))
|
|
M = whom
|
|
C = M.client
|
|
key = M.key
|
|
else if(istype(whom, /datum/mind))
|
|
var/datum/mind/D = whom
|
|
key = D.key
|
|
M = D.current
|
|
if(D.current)
|
|
C = D.current.client
|
|
else if(istype(whom, /datum))
|
|
var/datum/D = whom
|
|
return "*invalid:[D.type]*"
|
|
else
|
|
return "*invalid*"
|
|
|
|
. = ""
|
|
|
|
if(key)
|
|
if(include_link && C)
|
|
. += "<a href='?priv_msg=\ref[C]'>"
|
|
|
|
if(C && C.holder && C.holder.fakekey && !include_name)
|
|
. += "Administrator"
|
|
else
|
|
. += key
|
|
|
|
if(include_link)
|
|
if(C) . += "</a>"
|
|
else . += " (DC)"
|
|
else
|
|
. += "*no key*"
|
|
|
|
if(include_name && M)
|
|
var/name
|
|
|
|
if(M.real_name)
|
|
name = M.real_name
|
|
else if(M.name)
|
|
name = M.name
|
|
|
|
|
|
if(include_link && is_special_character(M) && highlight_special_characters)
|
|
. += "/(<font color='#FFA500'>[name]</font>)" //Orange
|
|
else
|
|
. += "/([name])"
|
|
|
|
return .
|
|
|
|
/proc/key_name_admin(var/whom, var/include_name = 1)
|
|
return key_name(whom, 1, include_name)
|