mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
derp. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3510 316c924e-a436-60f5-8080-3fe189b3f50e
144 lines
5.8 KiB
Plaintext
144 lines
5.8 KiB
Plaintext
/*
|
|
HOW DO I LOG RUNTIMES?
|
|
Firstly, start dreamdeamon if it isn't already running. Then select "world>Log Session" (or press the F3 key)
|
|
navigate the popup window to the data/logs/runtime/ folder from where your tgstation .dmb is located.
|
|
(you may have to make this folder yourself)
|
|
|
|
OPTIONAL: you can select the little checkbox down the bottom to make dreamdeamon save the log everytime you
|
|
start a world. Just remember to repeat these steps with a new name when you update to a new revision!
|
|
|
|
Save it with the name of the revision your server uses (e.g. r3459.txt).
|
|
Game Masters will now be able to grant access any runtime logs you have archived this way!
|
|
This will allow us to gather information on bugs across multiple servers and make maintaining the TG
|
|
codebase for the entire /TG/station commuity a TONNE easier :3 Thanks for your help!
|
|
*/
|
|
|
|
#define FTPDELAY 600 //600 tick delay to discourage spam
|
|
/*
|
|
These procs have failsafes built in to prevent spamming of file requests. As such it can only be used once every
|
|
[FTPDELAY] ticks. This can be changed by modifying FTPDELAY's value above.
|
|
|
|
PLEASE USE RESPONSIBLY, only download from the server if the log isn't already available elsewhere!
|
|
Bandwidth is expensive and lags are lame. Some log files canr each sizes of 4MB!
|
|
*/
|
|
|
|
//This proc allows Game Masters to grant a client access to the .getruntimelog verb
|
|
//Permissions expire at the end of each round.
|
|
//Runtimes can be used to meta or spot game-crashing exploits so it's advised to only grant coders that
|
|
//you trust access. Also, it may be wise to ensure that they are not going to play in the current round.
|
|
/client/proc/giveruntimelog()
|
|
set name = ".giveruntimelog"
|
|
set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder."
|
|
set category = null
|
|
|
|
if( !src.holder || holder.rank != "Game Master" )
|
|
src << "<font color='red'>Only Game Masters may use this command.</font>"
|
|
return
|
|
|
|
var/list/clients = list()
|
|
for(var/client/C)
|
|
clients += C
|
|
|
|
var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in clients
|
|
if( !target || !istype(target,/client) )
|
|
src << "<font color='red'>Error: giveruntimelog(): Client not found.</font>"
|
|
return
|
|
|
|
target.verbs |= /client/proc/getruntimelog
|
|
target << "<font color='red'>You have been granted access to runtime logs. Please use them responsibly or risk being banned.</font>"
|
|
return
|
|
|
|
//This proc allows download of runtime logs saved within the data/logs/ folder by dreamdeamon.
|
|
//It works similarly to show-server-log.
|
|
/client/proc/getruntimelog()
|
|
set name = ".getruntimelog"
|
|
set desc = "Retrieve any session logfiles saved by dreamdeamon."
|
|
set category = null
|
|
|
|
var/time_to_wait = fileaccess_timer - world.time
|
|
if(time_to_wait > 0)
|
|
src << "<font color='red'>Error: getruntimelog(): spam prevention. Please wait [round(time_to_wait/10)] seconds.</font>"
|
|
return
|
|
fileaccess_timer = world.time + FTPDELAY
|
|
|
|
var/path = "data/logs/runtime/"
|
|
|
|
var/list/path_list = flist(path)
|
|
var/choice = input(src,"Choose a runtime-log to download:","Download",null) as null|anything in path_list
|
|
if(!choice) return
|
|
|
|
path += "[choice]"
|
|
if(!fexists(path))
|
|
src << "<font color='red'>Error: getruntimelog(): Files not found/Invalid file([path]).</font>"
|
|
return
|
|
|
|
message_admins("[src] accessed runtime log: [path]")
|
|
src << run( file(path) )
|
|
return
|
|
|
|
//This proc allows download of past server logs saved within the data/logs/ folder.
|
|
//It works similarly to show-server-log.
|
|
/client/proc/getserverlog()
|
|
set name = ".getserverlog"
|
|
set desc = "Like 'Show Server Log' but it fetches old logs if there are any."
|
|
set category = null
|
|
|
|
var/time_to_wait = fileaccess_timer - world.time
|
|
if(time_to_wait > 0)
|
|
src << "<font color='red'>Error: getserverlog(): spam prevention. Please wait [round(time_to_wait/10)] seconds.</font>"
|
|
return
|
|
fileaccess_timer = world.time + FTPDELAY
|
|
|
|
var/path = "data/logs/"
|
|
for(var/i=0, i<4, i++) //only bother searching up to 4 sub-directories. If we don't find it by then: give up.
|
|
var/list/path_list = flist(path)
|
|
if(path_list.len) path_list -= "runtime/"
|
|
else break
|
|
|
|
var/choice = input(src,"Choose a directory to access:","Download",null) as null|anything in path_list
|
|
if(!choice) return
|
|
|
|
path += "[choice]"
|
|
|
|
if( text2ascii(choice,length(choice)) != 47 ) //not a directory, finish up
|
|
if(!fexists(path))
|
|
src << "<font color='red'>Error: getserverlog(): File not found/Invalid file([path]).</font>"
|
|
return
|
|
src << run( file(path) )
|
|
return
|
|
return
|
|
|
|
|
|
//Other log stuff put here for the sake of organisation
|
|
|
|
//Shows today's server log
|
|
/obj/admins/proc/view_txt_log()
|
|
set category = "Admin"
|
|
set name = "Show Server Log"
|
|
set desc = "Shows today's server log."
|
|
|
|
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")].log"
|
|
if( fexists(path) )
|
|
src << run( file(path) )
|
|
else
|
|
src << "<font color='red'>Error: view_txt_log(): File not found/Invalid path([path]).</font>"
|
|
return
|
|
feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
return
|
|
|
|
//Shows today's attack log
|
|
/obj/admins/proc/view_atk_log()
|
|
set category = "Admin"
|
|
set name = "Show Server Attack Log"
|
|
set desc = "Shows today's server attack log."
|
|
|
|
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log"
|
|
if( fexists(path) )
|
|
src << run( file(path) )
|
|
else
|
|
src << "<font color='red'>Error: view_atk_log(): File not found/Invalid path([path]).</font>"
|
|
return
|
|
usr << run( file(path) )
|
|
feedback_add_details("admin_verb","SSAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
return
|