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