diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 2785ba896fb..a2a878211a0 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -20,13 +20,13 @@
/proc/log_admin(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
- GLOB.diary << "\[[time_stamp()]]ADMIN: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]ADMIN: [text]"
//Items using this proc are stripped from public logs - use with caution
/proc/log_admin_private(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
- GLOB.diary << "\[[time_stamp()]]ADMINPRIVATE: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]ADMINPRIVATE: [text]"
/proc/log_adminsay(text)
if (config.log_adminchat)
@@ -38,67 +38,64 @@
/proc/log_game(text)
if (config.log_game)
- GLOB.diary << "\[[time_stamp()]]GAME: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]GAME: [text]"
/proc/log_vote(text)
if (config.log_vote)
- GLOB.diary << "\[[time_stamp()]]VOTE: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]VOTE: [text]"
/proc/log_access(text)
if (config.log_access)
- GLOB.diary << "\[[time_stamp()]]ACCESS: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]ACCESS: [text]"
/proc/log_say(text)
if (config.log_say)
- GLOB.diary << "\[[time_stamp()]]SAY: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]SAY: [text]"
/proc/log_prayer(text)
if (config.log_prayer)
- GLOB.diary << "\[[time_stamp()]]PRAY: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]PRAY: [text]"
/proc/log_law(text)
if (config.log_law)
- GLOB.diary << "\[[time_stamp()]]LAW: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]LAW: [text]"
/proc/log_ooc(text)
if (config.log_ooc)
- GLOB.diary << "\[[time_stamp()]]OOC: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]OOC: [text]"
/proc/log_whisper(text)
if (config.log_whisper)
- GLOB.diary << "\[[time_stamp()]]WHISPER: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]WHISPER: [text]"
/proc/log_emote(text)
if (config.log_emote)
- GLOB.diary << "\[[time_stamp()]]EMOTE: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]EMOTE: [text]"
/proc/log_attack(text)
if (config.log_attack)
- GLOB.diaryofmeanpeople << "\[[time_stamp()]]ATTACK: [text]"
+ GLOB.world_attack_log << "\[[time_stamp()]]ATTACK: [text]"
/proc/log_pda(text)
if (config.log_pda)
- GLOB.diary << "\[[time_stamp()]]PDA: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]PDA: [text]"
/proc/log_comment(text)
if (config.log_pda)
//reusing the PDA option because I really don't think news comments are worth a config option
- GLOB.diary << "\[[time_stamp()]]COMMENT: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]COMMENT: [text]"
/proc/log_chat(text)
if (config.log_pda)
- GLOB.diary << "\[[time_stamp()]]CHAT: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]CHAT: [text]"
/proc/log_sql(text)
if(config.sql_enabled)
- GLOB.diary << "\[[time_stamp()]]SQL: [text]"
+ GLOB.world_game_log << "\[[time_stamp()]]SQL: [text]"
//This replaces world.log so it displays both in DD and the file
/proc/log_world(text)
- if(config && config.log_runtimes)
- world.log = GLOB.runtime_diary
- world.log << text
- world.log = null
+ GLOB.world_runtime_log << text
world.log << text
// Helper procs for building detailed log lines
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index ff17a1d72b4..c2f0efba451 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -1,11 +1,15 @@
-GLOBAL_VAR(diary)
-GLOBAL_PROTECT(diary)
-GLOBAL_VAR(runtime_diary)
-GLOBAL_PROTECT(runtime_diary)
-GLOBAL_VAR(diaryofmeanpeople)
-GLOBAL_PROTECT(diaryofmeanpeople)
-GLOBAL_VAR(href_logfile)
-GLOBAL_PROTECT(href_logfile)
+GLOBAL_VAR(log_directory)
+GLOBAL_PROTECT(log_directory)
+GLOBAL_VAR(world_game_log)
+GLOBAL_PROTECT(world_game_log)
+GLOBAL_VAR(world_runtime_log)
+GLOBAL_PROTECT(world_runtime_log)
+GLOBAL_VAR(world_attack_log)
+GLOBAL_PROTECT(world_attack_log)
+GLOBAL_VAR(world_href_log)
+GLOBAL_PROTECT(world_href_log)
+GLOBAL_VAR(round_id)
+GLOBAL_PROTECT(round_id)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index f0f39e68255..cb4416e2983 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -43,10 +43,8 @@
var/log_attack = 0 // log attack messages
var/log_adminchat = 0 // log admin chat messages
var/log_pda = 0 // log pda messages
- var/log_hrefs = 0 // log all links clicked in-game. Could be used for debugging and tracking down exploits
var/log_twitter = 0 // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
var/log_world_topic = 0 // log all world.Topic() calls
- var/log_runtimes = FALSE // log runtimes into a file
var/sql_enabled = 0 // for sql switching
var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour
var/allow_vote_restart = 0 // allow votes to restart
@@ -271,7 +269,7 @@
if(M.config_tag)
if(!(M.config_tag in modes)) // ensure each mode is added only once
- GLOB.diary << "Adding game mode [M.name] ([M.config_tag]) to configuration."
+ GLOB.world_game_log << "Adding game mode [M.name] ([M.config_tag]) to configuration."
modes += M.config_tag
mode_names[M.config_tag] = M.name
probabilities[M.config_tag] = M.probability
@@ -360,8 +358,6 @@
log_adminchat = 1
if("log_pda")
log_pda = 1
- if("log_hrefs")
- log_hrefs = 1
if("log_twitter")
log_twitter = 1
if("log_world_topic")
@@ -495,12 +491,6 @@
ipintel_save_bad = text2num(value)
if("aggressive_changelog")
aggressive_changelog = 1
- if("log_runtimes")
- log_runtimes = TRUE
- var/newlog = file("data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log")
- if(GLOB.runtime_diary != newlog)
- world.log << "Now logging runtimes to data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log"
- GLOB.runtime_diary = newlog
if("autoconvert_notes")
autoconvert_notes = 1
if("allow_webclient")
@@ -544,7 +534,7 @@
if("error_msg_delay")
error_msg_delay = text2num(value)
else
- GLOB.diary << "Unknown setting in configuration: '[name]'"
+ GLOB.world_game_log << "Unknown setting in configuration: '[name]'"
else if(type == "game_options")
switch(name)
@@ -607,13 +597,13 @@
if(mode_name in modes)
continuous[mode_name] = 1
else
- GLOB.diary << "Unknown continuous configuration definition: [mode_name]."
+ GLOB.world_game_log << "Unknown continuous configuration definition: [mode_name]."
if("midround_antag")
var/mode_name = lowertext(value)
if(mode_name in modes)
midround_antag[mode_name] = 1
else
- GLOB.diary << "Unknown midround antagonist configuration definition: [mode_name]."
+ GLOB.world_game_log << "Unknown midround antagonist configuration definition: [mode_name]."
if("midround_antag_time_check")
midround_antag_time_check = text2num(value)
if("midround_antag_life_check")
@@ -629,9 +619,9 @@
if(mode_name in modes)
min_pop[mode_name] = text2num(mode_value)
else
- GLOB.diary << "Unknown minimum population configuration definition: [mode_name]."
+ GLOB.world_game_log << "Unknown minimum population configuration definition: [mode_name]."
else
- GLOB.diary << "Incorrect minimum population configuration definition: [mode_name] [mode_value]."
+ GLOB.world_game_log << "Incorrect minimum population configuration definition: [mode_name] [mode_value]."
if("max_pop")
var/pop_pos = findtext(value, " ")
var/mode_name = null
@@ -643,9 +633,9 @@
if(mode_name in modes)
max_pop[mode_name] = text2num(mode_value)
else
- GLOB.diary << "Unknown maximum population configuration definition: [mode_name]."
+ GLOB.world_game_log << "Unknown maximum population configuration definition: [mode_name]."
else
- GLOB.diary << "Incorrect maximum population configuration definition: [mode_name] [mode_value]."
+ GLOB.world_game_log << "Incorrect maximum population configuration definition: [mode_name] [mode_value]."
if("shuttle_refuel_delay")
shuttle_refuel_delay = text2num(value)
if("show_game_type_odds")
@@ -673,9 +663,9 @@
if(prob_name in modes)
probabilities[prob_name] = text2num(prob_value)
else
- GLOB.diary << "Unknown game mode probability configuration definition: [prob_name]."
+ GLOB.world_game_log << "Unknown game mode probability configuration definition: [prob_name]."
else
- GLOB.diary << "Incorrect probability configuration definition: [prob_name] [prob_value]."
+ GLOB.world_game_log << "Incorrect probability configuration definition: [prob_name] [prob_value]."
if("protect_roles_from_antagonist")
protect_roles_from_antagonist = 1
@@ -722,7 +712,7 @@
// Value is in the form "LAWID,NUMBER"
var/list/L = splittext(value, ",")
if(L.len != 2)
- GLOB.diary << "Invalid LAW_WEIGHT: " + t
+ GLOB.world_game_log << "Invalid LAW_WEIGHT: " + t
continue
var/lawid = L[1]
var/weight = text2num(L[2])
@@ -777,7 +767,7 @@
if("mice_roundstart")
mice_roundstart = text2num(value)
else
- GLOB.diary << "Unknown setting in configuration: '[name]'"
+ GLOB.world_game_log << "Unknown setting in configuration: '[name]'"
fps = round(fps)
if(fps <= 0)
@@ -831,7 +821,7 @@
maplist[currentmap.map_name] = currentmap
currentmap = null
else
- GLOB.diary << "Unknown command in map vote config: '[command]'"
+ GLOB.world_game_log << "Unknown command in map vote config: '[command]'"
/datum/configuration/proc/loadsql(filename)
@@ -875,7 +865,7 @@
if("feedback_tableprefix")
global.sqlfdbktableprefix = value
else
- GLOB.diary << "Unknown setting in configuration: '[name]'"
+ GLOB.world_game_log << "Unknown setting in configuration: '[name]'"
/datum/configuration/proc/pick_mode(mode_name)
// I wish I didn't have to instance the game modes in order to look up
diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm
index bac949b0465..3febc7581c7 100644
--- a/code/controllers/subsystem/blackbox.dm
+++ b/code/controllers/subsystem/blackbox.dm
@@ -41,7 +41,7 @@ SUBSYSTEM_DEF(blackbox)
msg_service = SSblackbox.msg_service
msg_cargo = SSblackbox.msg_cargo
msg_other = SSblackbox.msg_other
-
+
feedback = SSblackbox.feedback
//no touchie
@@ -84,25 +84,13 @@ SUBSYSTEM_DEF(blackbox)
if (!SSdbcore.Connect())
return
- var/round_id
-
- var/datum/DBQuery/query_feedback_max_id = SSdbcore.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]")
- if(!query_feedback_max_id.Execute())
- return
- while (query_feedback_max_id.NextRow())
- round_id = query_feedback_max_id.item[1]
-
- if (!isnum(round_id))
- round_id = text2num(round_id)
- round_id++
-
var/sqlrowlist = ""
for (var/datum/feedback_variable/FV in feedback)
if (sqlrowlist != "")
sqlrowlist += ", " //a comma (,) at the start of the first row to insert will trigger a SQL error
- sqlrowlist += "(null, Now(), [round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")"
+ sqlrowlist += "(null, Now(), [GLOB.round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")"
if (sqlrowlist == "")
return
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index f1144afc13d..fa93dbf61cf 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -85,7 +85,6 @@
SSblackbox.set_details("game_mode","[SSticker.mode]")
if(GLOB.revdata.commit)
SSblackbox.set_details("revision","[GLOB.revdata.commit]")
- SSblackbox.set_details("server_ip","[world.internet_address]:[world.port]")
if(report)
addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h))
generate_station_goals()
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index 5970b6f37e5..d6e2b8d1b66 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -63,7 +63,7 @@
if(!SSdbcore.Connect())
log_world("Ban database connection failure. Key [ckeytext] not checked")
- GLOB.diary << "Ban database connection failure. Key [ckeytext] not checked"
+ GLOB.world_game_log << "Ban database connection failure. Key [ckeytext] not checked"
return
var/ipquery = ""
diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm
index f1951a2c71a..d3a86027bb0 100644
--- a/code/modules/admin/admin_investigate.dm
+++ b/code/modules/admin/admin_investigate.dm
@@ -1,50 +1,20 @@
-//By Carnwennan
-
-//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game.
-//lists and variables are great. However, they have several major flaws:
-//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches.
-//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that
-//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine!
-#define INVESTIGATE_DIR "data/investigate/"
-
-//SYSTEM
-/proc/investigate_subject2file(subject)
- return file("[INVESTIGATE_DIR][subject].html")
-
-/proc/investigate_reset()
- if(fdel(INVESTIGATE_DIR))
- return 1
- return 0
-
-/atom/proc/investigate_log(message, subject)
- if(!message)
- return
- var/F = investigate_subject2file(subject)
- if(!F)
+atom/proc/investigate_log(message, subject)
+ if(!message || !subject)
return
+ var/F = file("[GLOB.log_directory]/[subject].html")
F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
"
-//ADMINVERBS
/client/proc/investigate_show( subject in list("hrefs","notes, memos, watchlist","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor", "kudzu") )
set name = "Investigate"
set category = "Admin"
if(!holder)
return
switch(subject)
- if("singulo", "wires", "telesci", "gravity", "records", "cargo", "supermatter", "atmos", "botany") //general one-round-only stuff
- var/F = investigate_subject2file(subject)
- if(!F)
- to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.")
- return
- src << browse(F,"window=investigate[subject];size=800x300")
- if("hrefs") //persistent logs and stuff
- if(GLOB.href_logfile)
- src << browse(GLOB.href_logfile,"window=investigate[subject];size=800x300")
- else if(!config.log_hrefs)
- to_chat(src, "Href logging is off and no logfile was found.")
- return
- else
- to_chat(src, "No href logfile was found.")
- return
if("notes, memos, watchlist")
browse_messages()
+ else
+ var/F = file("[GLOB.log_directory]/[subject].html")
+ if(!fexists(F))
+ to_chat(src, "No [subject] logfile was found.")
+ return
+ src << browse(F,"window=investigate[subject];size=800x300")
\ No newline at end of file
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index bf7b9dcb1ae..8356f693c69 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -127,7 +127,7 @@ GLOBAL_PROTECT(admin_ranks)
else
if(!SSdbcore.Connect())
log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.")
- GLOB.diary << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system."
+ GLOB.world_game_log << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system."
config.admin_legacy_system = 1
load_admin_ranks()
return
@@ -202,7 +202,7 @@ GLOBAL_PROTECT(admin_ranks)
else
if(!SSdbcore.Connect())
log_world("Failed to connect to database in load_admins(). Reverting to legacy system.")
- GLOB.diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
+ GLOB.world_game_log << "Failed to connect to database in load_admins(). Reverting to legacy system."
config.admin_legacy_system = 1
load_admins()
return
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index a32a37b046d..becffa0ec3b 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -42,16 +42,14 @@ GLOBAL_LIST_INIT(admin_verbs_admin, AVerbsAdmin())
/datum/admins/proc/set_admin_notice,/*announcement all clients see when joining the server.*/
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/toggle_view_range, /*changes how far we can see*/
- /datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
+ /datum/admins/proc/view_txt_log, /*shows the server log (world_game_log) for today*/
/datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
/client/proc/check_antagonists, /*shows all antags*/
/datum/admins/proc/access_news_network, /*allows access of newscasters*/
- /client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
- /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
- /client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
+ /client/proc/getserverlog, /*allows us to fetch server logs (world_game_log) for other days*/
/client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
/client/proc/Getmob, /*teleports a mob to our location*/
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
@@ -114,7 +112,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, AVerbsServer())
/datum/admins/proc/end_round,
/datum/admins/proc/delay,
/datum/admins/proc/toggleaban,
- /client/proc/toggle_log_hrefs,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
@@ -219,7 +216,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, AVerbsHideable())
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/datum/admins/proc/toggleaban,
- /client/proc/toggle_log_hrefs,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/client/proc/restart_controller,
@@ -634,19 +630,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, AVerbsHideable())
togglebuildmode(src.mob)
SSblackbox.add_details("admin_verb","Toggle Build Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/client/proc/toggle_log_hrefs()
- set name = "Toggle href logging"
- set category = "Server"
- if(!holder)
- return
- if(config)
- if(config.log_hrefs)
- config.log_hrefs = 0
- to_chat(src, "Stopped logging hrefs")
- else
- config.log_hrefs = 1
- to_chat(src, "Started logging hrefs")
-
/client/proc/check_ai_laws()
set name = "Check AI Laws"
set category = "Admin"
diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm
index c3438f15564..fe3fe61b3fc 100644
--- a/code/modules/admin/verbs/getlogs.dm
+++ b/code/modules/admin/verbs/getlogs.dm
@@ -1,62 +1,3 @@
-/*
- 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/runtimes/ 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!
-*/
-
-
-//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)
- to_chat(src, "Only Admins may use this command.")
- return
-
- 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 GLOB.clients
- if(!istype(target,/client))
- to_chat(src, "Error: giveruntimelog(): Client not found.")
- return
-
- target.verbs |= /client/proc/getruntimelog
- to_chat(target, "You have been granted access to runtime logs. Please use them responsibly or risk being banned.")
- 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/path = browse_files("data/logs/runtimes/")
- if(!path)
- return
-
- if(file_spam_check())
- return
-
- message_admins("[key_name_admin(src)] accessed file: [path]")
- src << ftp(file(path))
- to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.")
- 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()
@@ -83,10 +24,10 @@
/datum/admins/proc/view_txt_log()
set category = "Admin"
set name = "Show Server Log"
- set desc = "Shows today's server log."
+ set desc = "Shows server log for this round."
- if(fexists("[GLOB.diary]"))
- src << ftp(GLOB.diary)
+ if(fexists("[GLOB.world_game_log]"))
+ src << ftp(GLOB.world_game_log)
else
to_chat(src, "Server log not found, try using .getserverlog.")
return
@@ -97,10 +38,10 @@
/datum/admins/proc/view_atk_log()
set category = "Admin"
set name = "Show Server Attack Log"
- set desc = "Shows today's server attack log."
+ set desc = "Shows server attack log for this round."
- if(fexists("[GLOB.diaryofmeanpeople]"))
- src << ftp(GLOB.diaryofmeanpeople)
+ if(fexists("[GLOB.world_attack_log]"))
+ src << ftp(GLOB.world_attack_log)
else
to_chat(src, "Server attack log not found, try using .getserverlog.")
return
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index b2be9a1b219..a49af4cfa6f 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -70,8 +70,7 @@
return
//Logs all hrefs
- if(config && config.log_hrefs && GLOB.href_logfile)
- GLOB.href_logfile << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
"
+ GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
"
// Admin PM
if(href_list["priv_msg"])
@@ -270,13 +269,13 @@ GLOBAL_LIST(external_rsc_urls)
set_client_age_from_db()
var/cached_player_age = player_age //we have to cache this because other shit may change it and we need it's current value now down below.
if (isnum(cached_player_age) && cached_player_age == -1) //first connection
- player_age = 0
+ player_age = 0
if(!IsGuestKey(key) && SSdbcore.IsConnected())
findJoinDate()
sync_client_with_db(tdata)
-
-
+
+
if (isnum(cached_player_age) && cached_player_age == -1) //first connection
if (config.panic_bunker && !holder && !(ckey in GLOB.deadmins))
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
@@ -295,7 +294,7 @@ GLOBAL_LIST(external_rsc_urls)
send2irc_adminless_only("New-user", "[key_name(src)] is connecting for the first time!")
else if (isnum(cached_player_age) && cached_player_age < config.notify_new_player_age)
message_admins("New user: [key_name_admin(src)] just connected with an age of [cached_player_age] day[(player_age==1?"":"s")]")
-
+
get_message_output("watchlist entry", ckey)
check_ip_intel()
@@ -340,7 +339,7 @@ GLOBAL_LIST(external_rsc_urls)
adminGreet(1)
holder.owner = null
GLOB.admins -= src
-
+
if (!GLOB.admins.len && SSticker.IsRoundInProgress()) //Only report this stuff if we are currently playing.
if(!GLOB.admins.len) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell.
var/cheesy_message = pick(
@@ -357,9 +356,9 @@ GLOBAL_LIST(external_rsc_urls)
"What happened? Where has everyone gone?",\
"Forever alone :("\
)
-
+
send2irc("Server", "[cheesy_message] (No admins online)")
-
+
GLOB.ahelp_tickets.ClientLogout(src)
GLOB.directory -= ckey
GLOB.clients -= src
diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm
index b48dd40e093..e2cce14db39 100644
--- a/code/modules/error_handler/error_handler.dm
+++ b/code/modules/error_handler/error_handler.dm
@@ -6,7 +6,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
if(!istype(E)) //Something threw an unusual exception
log_world("\[[time_stamp()]] Uncaught exception: [E]")
return ..()
-
+
var/static/list/error_last_seen = list()
var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error)
If negative, starts at -1, and goes down by 1 each time that error gets skipped*/
@@ -107,9 +107,8 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
if (split[i] != "")
split[i] = "\[[time2text(world.timeofday,"hh:mm:ss")]\][split[i]]"
E.desc = jointext(split, "\n")
- if(config && config.log_runtimes)
- world.log = GLOB.runtime_diary
- ..(E)
+ world.log = GLOB.world_runtime_log
+ ..(E)
world.log = null
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index a4d9a32d3d2..9ff92839d16 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -31,7 +31,7 @@
break
if(!input_plate)
- GLOB.diary << "a [src] didn't find an input plate."
+ GLOB.world_game_log << "a [src] didn't find an input plate."
return
/obj/machinery/gibber/autogibber/Bumped(atom/A)
diff --git a/code/world.dm b/code/world.dm
index 5602e62aff7..547ce53efc0 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -25,17 +25,32 @@
else
external_rsc_urls.Cut(i,i+1)
#endif
- //logs
- var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day")
- GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm")
- GLOB.diary = file("data/logs/[date_string].log")
- GLOB.diaryofmeanpeople = file("data/logs/[date_string] Attack.log")
- GLOB.diary << "\n\nStarting up. [time_stamp()]\n---------------------"
- GLOB.diaryofmeanpeople << "\n\nStarting up. [time_stamp()]\n---------------------"
+ config = new
+ GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-"
+ if(config.sql_enabled)
+ if(SSdbcore.Connect())
+ log_world("Database connection established.")
+ var/datum/DBQuery/query_feedback_create_round = SSdbcore.NewQuery("INSERT INTO [format_table_name("feedback")] SELECT null, Now(), MAX(round_id)+1, \"server_ip\", 0, \"[world.internet_address]:[world.port]\" FROM [format_table_name("feedback")]")
+ query_feedback_create_round.Execute()
+ var/datum/DBQuery/query_feedback_max_id = SSdbcore.NewQuery("SELECT MAX(round_id) FROM [format_table_name("feedback")]")
+ query_feedback_max_id.Execute()
+ if(query_feedback_max_id.NextRow())
+ GLOB.round_id = query_feedback_max_id.item[1]
+ GLOB.log_directory += "[GLOB.round_id]"
+ else
+ log_world("Your server failed to establish a connection with the database.")
+ if(!GLOB.round_id)
+ GLOB.log_directory += "[time_stamp()]"
+ GLOB.world_game_log = file("[GLOB.log_directory]/game.log")
+ GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log")
+ GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log")
+ GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html")
+ GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------"
+ GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------"
+ GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------"
GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
- config = new
GLOB.revdata.DownloadPRDetails()
load_mode()
load_motd()
@@ -43,17 +58,9 @@
if(config.usewhitelist)
load_whitelist()
LoadBans()
- investigate_reset()
GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000
- if(config.sql_enabled)
- if(!SSdbcore.Connect())
- log_world("Your server failed to establish a connection with the database.")
- else
- log_world("Database connection established.")
-
-
GLOB.data_core = new /datum/datacore()
Master.Initialize(10, FALSE)
@@ -61,7 +68,7 @@
#define IRC_STATUS_THROTTLE 50
/world/Topic(T, addr, master, key)
if(config && config.log_world_topic)
- GLOB.diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]"
+ GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]"
var/list/input = params2list(T)
var/key_valid = (global.comms_allowed && input["key"] == global.comms_key)
@@ -253,7 +260,7 @@
if(Lines.len)
if(Lines[1])
GLOB.master_mode = Lines[1]
- GLOB.diary << "Saved mode is '[GLOB.master_mode]'"
+ GLOB.world_game_log << "Saved mode is '[GLOB.master_mode]'"
/world/proc/save_mode(the_mode)
var/F = file("data/mode.txt")
diff --git a/config/config.txt b/config/config.txt
index 8d27987e998..07cd2c1f874 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -71,9 +71,6 @@ LOG_PRAYER
## log lawchanges
LOG_LAW
-## log all Topic() calls (for use by coders in tracking down Topic issues)
-# LOG_HREFS
-
## log all world.Topic() calls
# LOG_WORLD_TOPIC
@@ -272,9 +269,6 @@ PANIC_SERVER_NAME [Put the name here]
## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
#AGGRESSIVE_CHANGELOG
-## Uncomment to have the game log runtimes to the log folder. (Note: this disables normal output in dd/ds, so it should be left off for testing.
-#LOG_RUNTIMES
-
## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes
AUTOCONVERT_NOTES