Completely Overhaul Logging

This is a merged port from /tg/station and Virgo on logging standards.
The diary has been replaced with GLOB.world_game_log, diaryofmeanpeople
is gone (because it wasn't actually used) and a whole bunch of logging
procs have been changed to optimize Splunk.
This commit is contained in:
tigercat2000
2018-04-19 15:07:59 -08:00
parent 604f26f2ec
commit c03621c508
166 changed files with 1267 additions and 3984 deletions
+8 -9
View File
@@ -1,11 +1,11 @@
//Blocks an attempt to connect before even creating our client datum thing.
world/IsBanned(key,address,computer_id)
if(!key || !address || !computer_id)
log_access("Failed Login (invalid data): [key] [address]-[computer_id]")
log_adminwarn("Failed Login (invalid data): [key] [address]-[computer_id]")
return list("reason"="invalid login data", "desc"="Error: Could not check ban status, please try again. Error message: Your computer provided invalid or blank information to the server on connection (BYOND Username, IP, and Computer ID). Provided information for reference: Username: '[key]' IP: '[address]' Computer ID: '[computer_id]'. If you continue to get this error, please restart byond or contact byond support.")
if(text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire
log_access("Failed Login (invalid cid): [key] [address]-[computer_id]")
log_adminwarn("Failed Login (invalid cid): [key] [address]-[computer_id]")
return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.")
var/admin = 0
var/ckey = ckey(key)
@@ -16,13 +16,13 @@ world/IsBanned(key,address,computer_id)
//Guest Checking
if(!guests_allowed && IsGuestKey(key))
log_access("Failed Login: [key] [computer_id] [address] - Guests not allowed")
log_adminwarn("Failed Login: [key] [computer_id] [address] - Guests not allowed")
// message_admins("<span class='notice'>Failed Login: [key] - Guests not allowed</span>")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a BYOND account.")
//check if the IP address is a known Tor node
if(config.ToRban && ToRban_isbanned(address))
log_access("Failed Login: [key] [computer_id] [address] - Banned: Tor")
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned: Tor")
message_admins("<span class='adminnotice'>Failed Login: [key] - Banned: Tor</span>")
//ban their computer_id and ckey for posterity
AddBan(ckey(key), computer_id, "Use of Tor", "Automated Ban", 0, 0)
@@ -41,14 +41,13 @@ world/IsBanned(key,address,computer_id)
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching ban on [.["key"]]</span>")
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching ban on [.["key"]].</span>")
else
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
return .
else
var/ckeytext = ckey(key)
if(!establish_db_connection())
log_to_dd("Ban database connection failure. Key [ckeytext] not checked")
diary << "Ban database connection failure. Key [ckeytext] not checked"
log_world("Ban database connection failure. Key [ckeytext] not checked")
return
var/ipquery = ""
@@ -100,7 +99,7 @@ world/IsBanned(key,address,computer_id)
. = list("reason"="[bantype]", "desc"="[desc]")
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
return .
. = ..() //default pager ban stuff
@@ -114,6 +113,6 @@ world/IsBanned(key,address,computer_id)
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching host/sticky ban.</span>")
return null
else
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]")
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]")
return .
+3 -3
View File
@@ -22,7 +22,7 @@
/proc/ToRban_update()
spawn(0)
diary << "Downloading updated ToR data..."
log_world("Downloading updated ToR data...")
var/http[] = world.Export("http://exitlist.torproject.org/exit-addresses")
var/list/rawlist = file2list(http["CONTENT"])
@@ -36,11 +36,11 @@
if(!cleaned) continue
F[cleaned] << 1
to_chat(F["last_update"], world.realtime)
diary << "ToR data updated!"
log_world("ToR data updated!")
if(usr)
to_chat(usr, "ToRban updated.")
return 1
diary << "ToR data update aborted: no data."
log_world("ToR data update aborted: no data.")
return 0
/client/proc/ToRban(task in list("update","toggle","show","remove","remove all","find"))
+3 -5
View File
@@ -4,14 +4,12 @@ var/global/nologevent = 0
////////////////////////////////
/proc/message_admins(var/msg)
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
log_adminwarn(msg)
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
if(C.prefs && !(C.prefs.toggles & CHAT_NO_ADMINLOGS))
to_chat(C, msg)
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
log_attack(text)
if(!nologevent)
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
for(var/client/C in admins)
@@ -866,13 +864,13 @@ var/global/nologevent = 0
for(var/mob/living/silicon/S in mob_list)
ai_number++
if(isAI(S))
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
to_chat(usr, "<b>AI [key_name(S, TRUE)]'s laws:</b>")
else if(isrobot(S))
var/mob/living/silicon/robot/R = S
to_chat(usr, "<b>CYBORG [key_name(S, usr)]'s [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"] laws:</b>")
to_chat(usr, "<b>CYBORG [key_name(S, TRUE)]'s [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"] laws:</b>")
else if(ispAI(S))
var/mob/living/silicon/pai/P = S
to_chat(usr, "<b>pAI [key_name(S, usr)]'s laws:</b>")
to_chat(usr, "<b>pAI [key_name(S, TRUE)]'s laws:</b>")
to_chat(usr, "[P.pai_law0]")
if(P.pai_laws)
to_chat(usr, "[P.pai_laws]")
+2 -2
View File
@@ -40,8 +40,8 @@
if("hrefs") //persistant logs and stuff
if(config && config.log_hrefs)
if(href_logfile)
src << browse(href_logfile,"window=investigate[subject];size=800x300")
if(GLOB.world_href_log)
src << browse(GLOB.world_href_log,"window=investigate[subject];size=800x300")
else
to_chat(src, "<font color='red'>Error: admin_investigate: No href logfile found.</font>")
return
+2 -4
View File
@@ -104,8 +104,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
establish_db_connection()
if(!dbcon.IsConnected())
log_to_dd("Failed to connect to database in load_admins(). Reverting to legacy system.")
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
log_world("Failed to connect to database in load_admins(). Reverting to legacy system.")
config.admin_legacy_system = 1
load_admins()
return
@@ -124,8 +123,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
//find the client for a ckey if they are connected and associate them with the new admin datum
D.associate(directory[ckey])
if(!admin_datums)
log_to_dd("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
diary << "The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system."
log_world("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
config.admin_legacy_system = 1
load_admins()
return
-2
View File
@@ -27,8 +27,6 @@ var/list/admin_verbs_admin = list(
/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/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/jumptocoord, /*we ghost and jump to a coordinate*/
/client/proc/Getmob, /*teleports a mob to our location*/
+1 -2
View File
@@ -52,8 +52,7 @@ DEBUG
log_admin("appearance_keylist was empty")
else
if(!establish_db_connection())
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
diary << "Database connection failed. Reverting to the legacy ban system."
log_world("Database connection failed. Reverting to the legacy ban system.")
config.ban_legacy_system = 1
appearance_loadbanfile()
return
+1 -2
View File
@@ -78,8 +78,7 @@ DEBUG
log_runtime(EXCEPTION("Skipping malformed job ban: [s]"))
else
if(!establish_db_connection())
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
diary << "Database connection failed. Reverting to the legacy ban system."
log_world("Database connection failed. Reverting to the legacy ban system.")
config.ban_legacy_system = 1
jobban_loadbanfile()
return
+7 -7
View File
@@ -88,7 +88,7 @@
//get message text, limit it's length.and clean/escape html
if(!msg)
msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
msg = input(src,"Message:", "Private message to [key_name(C, 0)]") as text|null
if(!msg)
return
@@ -152,9 +152,9 @@
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]</b>: [emoji_msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, TRUE, type)]</b>: [emoji_msg]</span>"
to_chat(C, recieve_message)
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, src, holder ? 1 : 0, type)]</b>: [emoji_msg]</font>")
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, TRUE, type)]</b>: [emoji_msg]</font>")
/*if(holder && !C.holder)
C.last_pm_recieved = world.time
@@ -175,13 +175,13 @@
switch(type)
if("Mentorhelp")
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, TRUE, type)]-&gt;[key_name(C, TRUE, type)]: [emoji_msg]</span>")
if("Adminhelp")
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, TRUE, type)]-&gt;[key_name(C, TRUE, type)]: [emoji_msg]</span>")
else
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, TRUE, type)]-&gt;[key_name(C, TRUE, type)]: [emoji_msg]</span>")
//Check if the mob being PM'd has any open admin tickets.
var/tickets = list()
@@ -226,4 +226,4 @@
if(X == src)
continue
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;IRC-Admins:</B> <span class='notice'>[msg]</span></font>")
to_chat(X, "<B><font color='blue'>PM: [key_name(src, TRUE, 0)]-&gt;IRC-Admins:</B> <span class='notice'>[msg]</span></font>")
+2 -2
View File
@@ -7,7 +7,7 @@
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
if(!msg) return
log_admin("[key_name(src)] : [msg]")
log_adminsay(msg, src)
if(check_rights(R_ADMIN,0))
for(var/client/C in admins)
@@ -25,7 +25,7 @@
return
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("MENTOR: [key_name(src)] : [msg]")
log_mentorsay(msg, src)
if(!msg)
return
+1 -1
View File
@@ -17,4 +17,4 @@
to_chat(M, "<font color='#960018'><span class='ooc'><span class='prefix'>AOOC:</span> <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>")
log_ooc("(ANTAG) [key] : [msg]")
log_aooc(msg, src)
+3 -47
View File
@@ -14,50 +14,6 @@
*/
//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, "<font color='red'>Only Admins may use this command.</font>")
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 clients
if(!istype(target,/client))
to_chat(src, "<font color='red'>Error: giveruntimelog(): Client not found.</font>")
return
target.verbs |= /client/proc/getruntimelog
to_chat(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/path = browse_files("data/logs/runtime/")
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()
@@ -87,7 +43,7 @@
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"
var/path = "[GLOB.log_directory]/game.log"
if( fexists(path) )
src << ftp(file(path))
@@ -103,8 +59,8 @@
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) )
var/path = "[GLOB.log_directory]/attack.log"
if(fexists(path))
src << ftp(file(path))
else
+1 -1
View File
@@ -201,7 +201,7 @@
if(rejected)
to_chat(src, "[rejected] out of [count] objects rejected your edit")
log_to_dd("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])")
log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])")
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
+7 -7
View File
@@ -342,7 +342,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]")
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
@@ -385,7 +385,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS")
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR NULLS")
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR NULLS")
return
@@ -395,7 +395,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES")
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR DUPES")
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR DUPES")
return
@@ -405,7 +405,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE")
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: SHUFFLE")
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: SHUFFLE")
return
@@ -482,7 +482,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]")
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
return
@@ -501,7 +501,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(objectvar, L))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]")
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]")
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]")
message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]")
@@ -612,7 +612,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height",
if(!O.vv_edit_var(variable, var_new))
to_chat(src, "Your edit was rejected by the object.")
return
log_to_dd("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
message_admins(msg)
+1
View File
@@ -47,6 +47,7 @@
status = 1
bombers += "[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]"
msg_admin_attack("[key_name_admin(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]")
log_game("[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature - T0C]")
to_chat(user, "<span class='notice'>A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.</span>")
else
status = 0
@@ -584,7 +584,7 @@ proc/SwapMaps_CreateFromTemplate(template_id)
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt"))
text=1
else
log_to_dd("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.")
log_world("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.")
return
if(text)
S=new
@@ -611,7 +611,7 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt"))
text=1
else
log_to_dd("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.")
log_world("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.")
return
if(text)
S=new
@@ -629,9 +629,9 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
if(!corner1 || !corner2)
log_to_dd("SwapMaps error in SwapMaps_SaveChunk():")
if(!corner1) log_to_dd(" corner1 turf is null")
if(!corner2) log_to_dd(" corner2 turf is null")
log_world("SwapMaps error in SwapMaps_SaveChunk():")
if(!corner1) log_world(" corner1 turf is null")
if(!corner2) log_world(" corner2 turf is null")
return
var/swapmap/M=new
M.id=chunk_id
@@ -658,7 +658,7 @@ proc/SwapMaps_GetSize(id)
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt"))
text=1
else
log_to_dd("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.")
log_world("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.")
return
if(text)
S=new
+4 -4
View File
@@ -57,7 +57,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
maploader.load_map(file, z_offset = zlev)
late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev)))
space_manager.remove_dirt(zlev)
log_to_dd(" Away mission loaded: [map]")
log_world(" Away mission loaded: [map]")
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name != "awaystart")
@@ -88,7 +88,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
maploader.load_map(file, z_offset = zlev)
late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev)))
space_manager.remove_dirt(zlev)
log_to_dd(" Away mission loaded: [map]")
log_world(" Away mission loaded: [map]")
//map_transition_config.Add(AWAY_MISSION_LIST)
@@ -168,7 +168,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
if(!valid)
continue
log_to_dd(" Ruin \"[ruin.name]\" loaded in [stop_watch(watch)]s at ([T.x], [T.y], [T.z]).")
log_world(" Ruin \"[ruin.name]\" loaded in [stop_watch(watch)]s at ([T.x], [T.y], [T.z]).")
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
R.Load(ruins,ruin)
@@ -179,7 +179,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
if(initialbudget == budget) //Kill me
log_to_dd(" No ruins loaded.")
log_world(" No ruins loaded.")
/obj/effect/ruin_loader
+6 -6
View File
@@ -65,7 +65,7 @@
//search the href for script injection
if( findtext(href,"<script",1,0) )
log_to_dd("Attempted use of scripts within a topic call, by [src]")
log_world("Attempted use of scripts within a topic call, by [src]")
log_runtime(EXCEPTION("Attempted use of scripts within a topic call, by [src]"), src)
message_admins("Attempted use of scripts within a topic call, by [src]")
return
@@ -94,8 +94,8 @@
//Logs all hrefs
if(config && config.log_hrefs && href_logfile)
to_chat(href_logfile, "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>")
if(config && config.log_hrefs)
WRITE_LOG(GLOB.world_href_log, "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>")
if(href_list["karmashop"])
if(config.disable_karma)
@@ -559,7 +559,7 @@
//Log all the alts
if(related_accounts_cid.len)
log_access("Alts: [key_name(src)]:[jointext(related_accounts_cid, " - ")]")
log_admin("[key_name(src)] alts:[jointext(related_accounts_cid, " - ")]")
var/watchreason = check_watchlist(ckey)
@@ -668,7 +668,7 @@
cidcheck_failedckeys[ckey] = TRUE
note_randomizer_user()
log_access("Failed Login: [key] [computer_id] [address] - CID randomizer confirmed (oldcid: [oldcid])")
log_adminwarn("Failed Login: [key] [computer_id] [address] - CID randomizer confirmed (oldcid: [oldcid])")
del(src)
return TRUE
@@ -710,7 +710,7 @@
/client/proc/cid_check_reconnect()
var/token = md5("[rand(0,9999)][world.time][rand(0,9999)][ckey][rand(0,9999)][address][rand(0,9999)][computer_id][rand(0,9999)]")
. = token
log_access("Failed Login: [key] [computer_id] [address] - CID randomizer check")
log_adminwarn("Failed Login: [key] [computer_id] [address] - CID randomizer check")
var/url = winget(src, null, "url")
//special javascript to make them reconnect under a new window.
src << browse("<a id='link' href='byond://[url]?token=[token]'>\
@@ -17,19 +17,19 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
if(M.wear_suit)
fibertext = "Material from \a [M.wear_suit]."
if(prob(10*item_multiplier) && !(fibertext in suit_fibers) && M.wear_suit.can_leave_fibers)
//log_to_dd("Added fibertext: [fibertext]")
//log_world("Added fibertext: [fibertext]")
suit_fibers += fibertext
if(!(M.wear_suit.body_parts_covered & UPPER_TORSO))
if(M.w_uniform)
fibertext = "Fibers from \a [M.w_uniform]."
if(prob(12*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) //Wearing a suit means less of the uniform exposed.
//log_to_dd("Added fibertext: [fibertext]")
//log_world("Added fibertext: [fibertext]")
suit_fibers += fibertext
if(!(M.wear_suit.body_parts_covered & HANDS))
if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
//log_to_dd("Added fibertext: [fibertext]")
//log_world("Added fibertext: [fibertext]")
suit_fibers += fibertext
else if(M.w_uniform)
fibertext = "Fibers from \a [M.w_uniform]."
@@ -39,10 +39,10 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
//log_to_dd("Added fibertext: [fibertext]")
//log_world("Added fibertext: [fibertext]")
suit_fibers += "Material from a pair of [M.gloves.name]."
else if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
//log_to_dd("Added fibertext: [fibertext]")
//log_world("Added fibertext: [fibertext]")
suit_fibers += "Material from a pair of [M.gloves.name]."
+6 -5
View File
@@ -8,7 +8,7 @@ var/total_runtimes_skipped = 0
#ifdef DEBUG
/world/Error(var/exception/e, var/datum/e_src)
if(!istype(e)) // Something threw an unusual exception
log_to_dd("\[[time_stamp()]] Uncaught exception: [e]")
log_world("\[[time_stamp()]] Uncaught exception: [e]")
return ..()
if(!error_last_seen) // A runtime is occurring too early in start-up initialization
return ..()
@@ -39,7 +39,7 @@ var/total_runtimes_skipped = 0
var/skipcount = abs(error_cooldown[erroruid]) - 1
error_cooldown[erroruid] = 0
if(skipcount > 0)
log_to_dd("\[[time_stamp()]] Skipped [skipcount] runtimes in [e.file],[e.line].")
log_world("\[[time_stamp()]] Skipped [skipcount] runtimes in [e.file],[e.line].")
error_cache.logError(e, skipCount = skipcount)
error_last_seen[erroruid] = world.time
error_cooldown[erroruid] = cooldown
@@ -95,12 +95,13 @@ var/total_runtimes_skipped = 0
desclines += " (This error will now be silenced for [ERROR_SILENCE_TIME / 600] minutes)"
// Now to actually output the error info...
log_to_dd("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]")
log_world("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]")
log_runtime_txt("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]")
for(var/line in desclines)
log_to_dd(line)
log_world(line)
log_runtime_txt(line)
if(error_cache)
error_cache.logError(e, desclines, e_src = e_src)
#endif
/proc/log_runtime(exception/e, datum/e_src, extra_info)
@@ -106,7 +106,7 @@
"<span class='userdanger'>[target] hits \himself with a bottle of [name][head_attack_message]!</span>")
//Attack logs
add_logs(user, target, "attacked", src)
add_attack_logs(user, target, "Hit with [src]")
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
SplashReagents(target)
@@ -47,7 +47,7 @@
if(!reagents || !reagents.total_volume)
return // The condiment might be empty after the delay.
user.visible_message("<span class='warning'>[user] feeds [M] from [src].</span>")
add_logs(user, M, "fed", reagentlist(src))
add_attack_logs(user, M, "Fed [src] containing [reagentlist(src)]")
var/fraction = min(10/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
@@ -59,7 +59,7 @@
user.changeNext_move(CLICK_CD_MELEE)
C.apply_damage(25, BURN, "head") //25 fire damage and disfigurement because your face was just deep fried!
head.disfigure("burn")
add_logs(user, G.affecting, "deep-fried", addition="'s face")
add_attack_logs(user, G.affecting, "Deep-fried with [src]")
qdel(G) //Removes the grip so the person MIGHT have a small chance to run the fuck away and to prevent rapid dunks.
return 0
return 0
@@ -221,7 +221,8 @@
return
if(UserOverride)
msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) [ADMIN_JMP(src)]")
log_game("[key_name(occupant)] was gibbed by an autogibber ([src]) (X:[x] Y:[y] Z:[z])")
if(operating)
return
@@ -259,11 +260,7 @@
new /obj/effect/decal/cleanable/blood/gibs(src)
if(!UserOverride)
occupant.create_attack_log("Was gibbed by [key_name(user)]") //One shall not simply gib a mob unnoticed!)
user.create_attack_log("Gibbed [key_name(occupant)]")
if(occupant.ckey)
msg_admin_attack("[key_name_admin(user)] gibbed [key_name_admin(occupant)]")
add_attack_logs(user, occupant, "Gibbed in [src]", !!occupant.ckey)
if(!iscarbon(user))
occupant.LAssailant = null
@@ -55,7 +55,7 @@
C.emote("scream")
user.changeNext_move(CLICK_CD_MELEE)
C.adjustFireLoss(30)
add_logs(user, G.affecting, "burned", src)
add_attack_logs(user, G.affecting, "Burned with [src]")
qdel(G) //Removes the grip to prevent rapid sears and give you a chance to run
return 0
return 0
@@ -61,7 +61,7 @@
C.apply_damage(5, BURN, "head") //5 fire damage, 15 brute damage, and weakening because your head was just in a hot oven with the door bashing into your neck!
C.apply_damage(15, BRUTE, "head")
C.Weaken(2)
add_logs(user, G.affecting, "smashed", addition="'s head on [src]")
add_attack_logs(user, G.affecting, "Smashed with [src]")
qdel(G) //Removes the grip to prevent rapid bashes. With the weaken, you PROBABLY can't run unless they are slow to grab you again...
return 0
return 0
+1 -1
View File
@@ -104,7 +104,7 @@
..()
if(isliving(M))
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
add_logs(user, M, "attacked", src)
add_attack_logs(user, M, "Hit with [src]")
M.AdjustEyeBlurry(force/7)
if(prob(20))
+1 -1
View File
@@ -136,7 +136,7 @@ var/list/karma_spenders = list()
var/special_role = "None"
var/assigned_role = "None"
var/karma_diary = file("data/logs/karma_[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log")
var/karma_diary = file("[GLOB.log_directory]/karma.log")
if(M.mind)
if(M.mind.special_role)
special_role = M.mind.special_role
+1 -1
View File
@@ -50,7 +50,7 @@
var/DBQuery/_query = dbcon.NewQuery(sql)
_query.Execute()
if(_query.ErrorMsg())
log_to_dd(_query.ErrorMsg())
log_world(_query.ErrorMsg())
var/list/results = list()
while(_query.NextRow())
+3 -3
View File
@@ -19,7 +19,7 @@
if(!damage)
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
D.visible_message("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
add_logs(A, D, "attempted to hit", atk_verb)
add_attack_logs(A, D, "Melee attacked with [src] (miss/block)")
return 0
@@ -32,7 +32,7 @@
"<span class='userdanger'>[A] has hit [D] with a [atk_verb]!</span>")
D.apply_damage(damage, STAMINA, affecting, armor_block)
add_logs(A, D, "punched")
add_attack_logs(A, D, "Melee attacked with [src]")
if(D.getStaminaLoss() > 50)
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
if((D.stat != DEAD) && prob(knockout_prob))
@@ -61,7 +61,7 @@
return 1
/datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
add_logs(A, D, "punched")
add_attack_logs(A, D, "Melee attacked with [src]")
A.do_attack_animation(D)
var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook")
+1 -1
View File
@@ -108,7 +108,7 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi
/datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(check_streak(A,D))
return 1
add_logs(A, D, "punched")
add_attack_logs(A, D, "Melee attacked with [src]")
A.do_attack_animation(D)
var/picked_hit_type = pick("punches", "kicks")
var/bonus_damage = 10
+1 -1
View File
@@ -55,7 +55,7 @@
D.apply_damage(damage, BRUTE, affecting, armor_block)
add_logs(A, D, "punched")
add_attack_logs(A, D, "Melee attacked with [src]")
if((D.stat != DEAD) && damage >= A.species.punchstunthreshold)
D.visible_message("<span class='danger'>[A] has weakened [D]!!</span>", \
+1 -1
View File
@@ -38,7 +38,7 @@
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.apply_damage(damage, STAMINA, affecting, armor_block)
add_logs(A, D, "mimechucked")
add_attack_logs(A, D, "Melee attacked with [src] (mimechuck)")
return 1
return basic_hit(A,D)
+1 -1
View File
@@ -28,7 +28,7 @@
var/armor_block = D.run_armor_check(null, "melee")
D.apply_damage(30, BRUTE, null, armor_block)
D.apply_effect(6, WEAKEN, armor_block)
add_logs(A, D, "suplexed")
add_attack_logs(A, D, "Melee attacked with [src] (SUPLEX)")
A.SpinAnimation(10,1)
+1 -1
View File
@@ -682,7 +682,7 @@
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
if(creator)
for(var/mob/living/L in src.loc)
add_logs(creator, L, "used a resonator field on", object="resonator")
add_attack_logs(creator, L, "Resonance field'ed")
to_chat(L, "<span class='danger'>The [src.name] ruptured with you in it!</span>")
L.adjustBruteLoss(resonance_damage)
else
@@ -28,7 +28,7 @@
if(proximity_flag)
spawn(0)
aoe_burst(T, user)
add_logs(user, target, "fired 3x3 blast at", src)
add_attack_logs(user, target, "Fired 3x3 blast at [src]")
else
if(ismineralturf(target) && get_dist(user, target) < 6) //target is minerals, we can hit it(even if we can't see it)
spawn(0)
@@ -39,11 +39,11 @@
if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one!
chaser_timer = world.time + chaser_cooldown
new /obj/effect/temp_visual/hierophant/chaser(get_turf(user), user, target, 1.5, friendly_fire_check)
add_logs(user, target, "fired a chaser at", src)
add_attack_logs(user, target, "Fired a chaser at [src]")
else
spawn(0)
cardinal_blasts(T, user) //otherwise, just do cardinal blast
add_logs(user, target, "fired cardinal blast at", src)
add_attack_logs(user, target, "Fired cardinal blast at [src]")
else
to_chat(user, "<span class='warning'>That target is out of range!</span>") //too far away
@@ -109,7 +109,7 @@
to_chat(user, "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>")
user.update_action_buttons_icon()
return
add_logs(user, rune, "teleported self from ([source.x],[source.y],[source.z]) to")
add_attack_logs(user, rune, "Teleported self from ([source.x],[source.y],[source.z]) to ([T.x],[T.y],[T.z])")
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user)
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, user)
for(var/t in RANGE_TURFS(1, T))
@@ -150,7 +150,7 @@
return
M.visible_message("<span class='hierophant_warning'>[M] fades in!</span>")
if(user != M)
add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])")
add_attack_logs(user, M, "Teleported from ([source.x],[source.y],[source.z])")
/obj/item/hierophant_staff/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
if(!T)
+2 -2
View File
@@ -4,7 +4,7 @@
if(!message)
return
log_say("Ghost/[src.key] : [message]")
log_ghostsay(message, src)
if(src.client)
if(src.client.prefs.muted & MUTE_DEADCHAT)
@@ -26,7 +26,7 @@
if(act != "me")
return
log_emote("Ghost/[src.key] : [message]")
log_ghostemote(message, src)
if(src.client)
if(src.client.prefs.muted & MUTE_DEADCHAT)
+1 -4
View File
@@ -46,7 +46,7 @@
if(message)
log_emote("[name]/[key] : [message]")
log_emote(message, src)
//Hearing gasp and such every five seconds is not good emotes were not global for a reason.
// Maybe some people are okay with that.
@@ -94,7 +94,6 @@
O.show_message(message, m_type)
/mob/proc/emote_dead(var/message)
if(client.prefs.muted & MUTE_DEADCHAT)
to_chat(src, "<span class='warning'>You cannot send deadchat emotes (muted).</span>")
return
@@ -122,8 +121,6 @@
if(message)
log_emote("Ghost/[src.key] : [message]")
for(var/mob/M in player_list)
if(istype(M, /mob/new_player))
continue
+2 -3
View File
@@ -99,7 +99,7 @@
if(!check_can_speak(speaker))
return FALSE
log_say("[key_name(speaker)]: ([name]) [message]")
log_say("([name]-HIVE) [message]", speaker)
if(!speaker_mask)
speaker_mask = speaker.name
@@ -553,14 +553,13 @@
var/drone_only
/datum/language/binary/broadcast(mob/living/speaker, message, speaker_mask)
if(!speaker.binarycheck())
return
if(!message)
return
log_robot("[key_name(speaker)] : [message]")
log_say("(ROBOT) [message]", speaker)
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i><span class='robot'>\"[message]\"</span></span></span>"
@@ -35,7 +35,7 @@ In all, this is a lot like the monkey code. /N
visible_message("<span class='danger'>[M.name] bites [src]!</span>", \
"<span class='userdanger'>[M.name] bites [src]!</span>")
adjustBruteLoss(damage)
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Alien attack", FALSE)
updatehealth()
else
to_chat(M, "<span class='warning'>[name] is too injured for that.</span>")
@@ -43,7 +43,7 @@ Doesn't work on other aliens/AI.*/
adjustPlasma(-10)
var/msg = sanitize(input("Message:", "Alien Whisper") as text|null)
if(msg)
log_say("Alien Whisper: [key_name(src)]->[key_name(M)]: [msg]")
log_say("(AWHISPER to [key_name(M)]) [msg]", src)
to_chat(M, "<span class='noticealien'>You hear a strange, alien voice in your head...<span class='noticealien'>[msg]")
to_chat(src, "<span class='noticealien'>You said: [msg] to [M]</span>")
for(var/mob/dead/observer/G in player_list)
@@ -114,7 +114,7 @@
else
to_chat(src, text("Invalid Emote: []", act))
if((message && src.stat == 0))
log_emote("[name]/[key] : [message]")
log_emote(message, src)
if(m_type & 1)
for(var/mob/O in viewers(src, null))
O.show_message(message, m_type)
@@ -84,7 +84,7 @@
"<span class='userdanger'>[M] [M.attacktext] [src]!</span>")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Animal attacked", FALSE)
updatehealth()
+2 -4
View File
@@ -564,7 +564,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
var/start_T_descriptor = "<font color='#6b5d00'>tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]</font>"
var/end_T_descriptor = "<font color='#6b4400'>tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]</font>"
add_logs(src, throwable_mob, "thrown", addition="from [start_T_descriptor] with the target [end_T_descriptor]")
add_attack_logs(src, throwable_mob, "Thrown from [start_T_descriptor] with the target [end_T_descriptor]")
else if(!(I.flags & ABSTRACT)) //can't throw abstract items
thrown_thing = I
@@ -1018,9 +1018,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
return 1
/mob/living/carbon/proc/forceFedAttackLog(var/obj/item/reagent_containers/food/toEat, mob/user)
create_attack_log("<font color='orange'>Has been fed [toEat.name] by [user.name] ([user.ckey]) Reagents: [toEat.reagentlist(toEat)]</font>")
user.create_attack_log("<font color='red'>Fed [toEat.name] to [name] ([ckey]) Reagents: [toEat.reagentlist(toEat)]</font>")
log_attack("[user.name] ([user.ckey]) fed [name] ([ckey]) with [toEat.name] Reagents: [toEat.reagentlist(toEat)] (INTENT: [uppertext(user.a_intent)])")
add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagentlist(toEat)]")
if(!iscarbon(user))
LAssailant = null
else
@@ -121,7 +121,7 @@
med_hud_set_status()
if(mind) mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0)
if(ticker && ticker.mode)
// log_to_dd("k")
// log_world("k")
sql_report_death(src)
ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now
@@ -898,7 +898,7 @@
to_chat(src, "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>")
if(message) //Humans are special fucking snowflakes and have 800 lines of emotes, they get to handle their own emotes, not call the parent.
log_emote("[name]/[key] : [message]")
log_emote(message, src)
//Hearing gasp and such every five seconds is not good emotes were not global for a reason.
// Maybe some people are okay with that.
@@ -315,7 +315,7 @@
M.do_attack_animation(src)
visible_message("<span class='danger'>[M] [M.attacktext] [src]!</span>", \
"<span class='userdanger'>[M] [M.attacktext] [src]!</span>")
add_logs(M, src, "attacked")
add_attack_logs(M, src, "Animal attacked")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
if(check_shields(damage, "the [M.name]", null, MELEE_ATTACK, M.armour_penetration))
return 0
@@ -753,12 +753,12 @@
unEquip(pocket_item)
if(thief_mode)
usr.put_in_hands(pocket_item)
add_logs(usr, src, "stripped", addition="of [pocket_item]", print_attack_log = isLivingSSD(src))
add_attack_logs(usr, src, "Stripped of [pocket_item]", isLivingSSD(src))
else
if(place_item)
usr.unEquip(place_item)
equip_to_slot_if_possible(place_item, pocket_id, 0, 1)
add_logs(usr, src, "equipped", addition="with [pocket_item]", print_attack_log = isLivingSSD(src))
add_attack_logs(usr, src, "Equipped with [pocket_item]", isLivingSSD(src))
// Update strip window
if(usr.machine == src && in_range(src, usr))
@@ -767,7 +767,7 @@
// Display a warning if the user mocks up if they don't have pickpocket gloves.
if(!thief_mode)
to_chat(src, "<span class='warning'>You feel your [pocket_side] pocket being fumbled with!</span>")
add_logs(usr, src, "attempted to strip", addition="of [pocket_item]", print_attack_log = isLivingSSD(src))
add_attack_logs(usr, src, "Attempted strip of [pocket_item]", isLivingSSD(src))
if(href_list["set_sensor"])
if(istype(w_uniform, /obj/item/clothing/under))
@@ -782,7 +782,7 @@
"<span class='danger'>You have dislodged everything from [src]'s headpocket!</span>")
var/obj/item/organ/internal/headpocket/C = get_int_organ(/obj/item/organ/internal/headpocket)
C.empty_contents()
add_logs(usr, src, "stripped", addition="of headpocket items", print_attack_log=isLivingSSD(src))
add_attack_logs(usr, src, "Stripped of headpocket items", isLivingSSD(src))
if(href_list["strip_accessory"])
if(istype(w_uniform, /obj/item/clothing/under))
@@ -18,35 +18,6 @@
..()
if((M != src) && M.a_intent != INTENT_HELP && check_shields(0, M.name, attack_type = UNARMED_ATTACK))
add_logs(M, src, "attempted to touch")
visible_message("<span class='warning'>[M] attempted to touch [src]!</span>")
return 0
if(istype(M.gloves , /obj/item/clothing/gloves/boxing/hologlove))
var/damage = rand(0, 9)
if(!damage)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has attempted to punch [src]!</span>")
return 0
var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(HULK in M.mutations)
damage += 5
Weaken(4)
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>")
apply_damage(damage, STAMINA, affecting, armor_block)
if(damage >= 9)
visible_message("<span class='danger'>[M] has weakened [src]!</span>")
apply_effect(4, WEAKEN, armor_block)
return
var/datum/martial_art/attacker_style = M.martial_art
@@ -63,11 +34,11 @@
if(S.next_step(M, src))
return 1
help_shake_act(M)
add_logs(M, src, "shaked")
add_attack_logs(M, src, "Shaked")
return 1
if(health >= config.health_threshold_crit)
help_shake_act(M)
add_logs(M, src, "shaked")
add_attack_logs(M, src, "Shaked")
return 1
if(!H.check_has_mouth())
to_chat(H, "<span class='danger'>You don't have a mouth, you cannot perform CPR!</span>")
@@ -94,7 +65,7 @@
to_chat(src, "<span class='notice'>You feel a breath of fresh air enter your lungs. It feels good.</span>")
to_chat(M, "<span class='alert'>Repeat at least every 7 seconds.")
add_logs(M, src, "CPRed")
add_attack_logs(M, src, "CPRed", FALSE)
return 1
else
to_chat(M, "<span class='danger'>You need to stay still while performing CPR!</span>")
@@ -123,8 +94,7 @@
return
//we're good to suck the blood, blaah
M.mind.vampire.handle_bloodsucking(src)
add_logs(M, src, "vampirebit")
msg_admin_attack("[key_name_admin(M)] vampirebit [key_name_admin(src)]")
add_attack_logs(M, src, "vampirebit")
return
//end vampire codes
if(attacker_style && attacker_style.harm_act(H, src))
@@ -133,7 +103,7 @@
var/datum/unarmed_attack/attack = M.species.unarmed
M.do_attack_animation(src)
add_logs(M, src, "[pick(attack.attack_verb)]ed")
add_attack_logs(M, src, "Melee attacked with fists")
if(!iscarbon(M))
LAssailant = null
@@ -172,7 +142,7 @@
if(attacker_style && attacker_style.disarm_act(H, src))
return 1
else
add_logs(M, src, "disarmed")
add_attack_logs(M, src, "Disarmed")
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -182,14 +152,11 @@
apply_effect(2, WEAKEN, run_armor_check(affecting, "melee"))
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("<span class='danger'>[M] has pushed [src]!</span>")
M.create_attack_log("<font color='red'>Pushed [src.name] ([src.ckey])</font>")
src.create_attack_log("<font color='orange'>Has been pushed by [M.name] ([M.ckey])</font>")
add_attack_logs(M, src, "Pushed over")
if(!iscarbon(M))
LAssailant = null
else
LAssailant = M
log_attack("[M.name] ([M.ckey]) pushed [src.name] ([src.ckey])")
return
var/talked = 0 // BubbleWrap
@@ -191,9 +191,7 @@ emp_act
--meatleft
to_chat(user, "<span class='warning'>You hack off a chunk of meat from [name]</span>")
if(!meatleft)
create_attack_log("Was chopped up into meat by <b>[key_name(user)]</b>")
user.create_attack_log("Chopped up <b>[key_name(src)]</b> into meat</b>")
msg_admin_attack("[key_name_admin(user)] chopped up [key_name_admin(src)] into meat")
add_attack_logs(user, src, "Chopped up into meat")
if(!iscarbon(user))
LAssailant = null
else
@@ -371,10 +369,7 @@ emp_act
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
create_attack_log("<font color='orange'>Has been attacked by \the [M] controlled by [key_name(M.occupant)] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
M.occupant.create_attack_log("<font color='red'>Attacked [src] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
msg_admin_attack("[key_name_admin(M.occupant)] attacked [key_name_admin(src)] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])")
add_attack_logs(M.occupant, src, "Mecha-meleed with [M]")
else
..()
@@ -78,9 +78,7 @@
head_organ.h_style = "Bald"
H.update_hair()
M.create_attack_log("<font color='red'>removed antennae [H.name] ([H.ckey])</font>")
H.create_attack_log("<font color='orange'>Has had their antennae removed by [M.name] ([M.ckey])</font>")
msg_admin_attack("[key_name(M)] removed [key_name(H)]'s antennae")
add_attack_logs(M, H, "Antennae removed")
return 0
/datum/species/nucleation
+2 -2
View File
@@ -816,7 +816,7 @@
who.unEquip(what)
if(silent)
put_in_hands(what)
add_logs(src, who, "stripped", addition="of [what]", print_attack_log = isLivingSSD(who))
add_attack_logs(src, who, "Stripped of [what]", isLivingSSD(who))
// The src mob is trying to place an item on someone
// Override if a certain mob should be behave differently when placing items (can't, for example)
@@ -835,7 +835,7 @@
if(what && Adjacent(who))
unEquip(what)
who.equip_to_slot_if_possible(what, where, 0, 1)
add_logs(src, who, "equipped", what, print_attack_log = isLivingSSD(who))
add_attack_logs(src, who, "Equipped [what]", isLivingSSD(who))
/mob/living/singularity_act()
+4 -8
View File
@@ -98,7 +98,7 @@
var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", I.armour_penetration)
apply_damage(I.throwforce, dtype, zone, armor, is_sharp(I), I)
if(I.thrownby)
add_logs(I.thrownby, src, "hit", I)
add_attack_logs(I.thrownby, src, "Hit with thrown [I]")
else
return 1
else
@@ -126,14 +126,10 @@
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
create_attack_log("<font color='orange'>Has been attacked by \the [M] controlled by [key_name(M.occupant)] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
M.occupant.create_attack_log("<font color='red'>Attacked [src] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
msg_admin_attack("[key_name_admin(M.occupant)] attacked [key_name_admin(src)] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])")
add_attack_logs(M.occupant, src, "Mecha-meleed with [M]")
else
step_away(src,M)
add_logs(M.occupant, src, "pushed", object=M, admin=0, print_attack_log = 0)
add_attack_logs(M.occupant, src, "Mecha-pushed with [M]", FALSE)
M.occupant_message("<span class='warning'>You push [src] out of the way.</span>")
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
return
@@ -244,7 +240,7 @@
to_chat(user, "<span class='notice'>You already grabbed [src].</span>")
return
add_logs(user, src, "grabbed", addition="passively")
add_attack_logs(user, src, "Grabbed passively")
var/obj/item/grab/G = new /obj/item/grab(user, src)
if(buckled)
+3 -3
View File
@@ -286,7 +286,7 @@ proc/get_radio_key_from_channel(var/channel)
//Log of what we've said, plain message, no spans or junk
say_log += message
log_say("[name]/[key] : [message]")
log_say(message, src)
return 1
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
@@ -313,7 +313,7 @@ proc/get_radio_key_from_channel(var/channel)
return 1
if(act && type && message) //parent call
log_emote("[name]/[key] : [message]")
log_emote(message, src)
for(var/mob/M in dead_mob_list)
if(!M.client || istype(M, /mob/new_player))
@@ -485,7 +485,7 @@ proc/get_radio_key_from_channel(var/channel)
for(var/mob/M in watching)
M.show_message(rendered, 2)
log_whisper("[name]/[key] : [message]")
log_whisper(message, src)
return 1
/mob/living/speech_bubble(var/bubble_state = "",var/bubble_loc = src, var/list/bubble_recipients = list())
+1 -1
View File
@@ -725,7 +725,7 @@ var/list/ai_verbs_default = list(
if(M.attack_sound)
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("<span class='danger'><B>[M]</B> [M.attacktext] [src]!")
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Animal attacked", FALSE)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
switch(M.melee_damage_type)
if(BRUTE)
@@ -913,7 +913,7 @@ var/list/robot_verbs_default = list(
if(M.attack_sound)
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("<span class='danger'><B>[M]</B> [M.attacktext] [src]!</span>")
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Animal attacked", FALSE)
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
switch(M.melee_damage_type)
if(BRUTE)
+4 -6
View File
@@ -1,5 +1,5 @@
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
log_say("[key_name(src)] : [message]")
log_say(message, src)
if(..())
return 1
@@ -67,8 +67,7 @@
//For holopads only. Usable by AI.
/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/language/speaking)
log_say("[key_name(src)] : [message]")
log_say("(HPAD) [message]", src)
message = trim(message)
@@ -108,9 +107,6 @@
return 1
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
log_emote("[key_name(src)] : [message]")
message = trim(message)
if(!message)
@@ -123,6 +119,8 @@
for(var/mob/M in viewers(T.loc))
M.show_message(rendered, 2)
log_emote("(HPAD) [message]", src)
else //This shouldn't occur, but better safe then sorry.
to_chat(src, "No holopad connected.")
return
@@ -219,7 +219,7 @@
turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP.
to_chat(src, "<span class='userdanger'>(#$*#$^^( OVERRIDE DETECTED</span>")
show_laws()
add_logs(user, src, "emagged")
add_attack_logs(user, src, "Emagged")
return
else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet.
to_chat(user, "<span class='warning'>You need to open maintenance panel first!</span>")
@@ -273,7 +273,7 @@
return
apply_damage(M.melee_damage_upper, BRUTE)
visible_message("<span class='userdanger'>[M] has [M.attacktext] [src]!</span>")
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Animal attacked", FALSE)
if(prob(10))
new /obj/effect/decal/cleanable/blood/oil(loc)
@@ -333,7 +333,7 @@
bot_name = name
name = paicard.pai.name
faction = user.faction
add_logs(user, paicard.pai, "uploaded to [src.bot_name],")
add_attack_logs(user, paicard.pai, "Uploaded to [src.bot_name]")
else
to_chat(user, "<span class='warning'>[W] is inactive.</span>")
else
@@ -865,7 +865,7 @@ Pass a positive integer as an argument to override a bot's default speed.
to_chat(usr, "<span class='warning'>[text_hack]</span>")
show_laws()
bot_reset()
add_logs(usr, src, "hacked")
add_attack_logs(usr, src, "Hacked")
else if(!hacked)
to_chat(usr, "<span class='userdanger'>[text_dehack_fail]</span>")
else
@@ -874,7 +874,7 @@ Pass a positive integer as an argument to override a bot's default speed.
to_chat(usr, "<span class='notice'>[text_dehack]</span>")
show_laws()
bot_reset()
add_logs(usr, src, "dehacked")
add_attack_logs(usr, src, "Dehacked")
if("ejectpai")
if(paicard && (!locked || issilicon(usr) || usr.can_admin_interact()))
to_chat(usr, "<span class='notice'>You eject [paicard] from [bot_name]</span>")
@@ -946,9 +946,9 @@ Pass a positive integer as an argument to override a bot's default speed.
key = null
paicard.forceMove(loc)
if(user)
add_logs(user, paicard.pai, "ejected from [src.bot_name],")
add_attack_logs(user, paicard.pai, "Ejected from [src.bot_name],")
else
add_logs(src, paicard.pai, "ejected")
add_attack_logs(src, paicard.pai, "Ejected")
if(announce)
to_chat(paicard.pai, "<span class='notice'>You feel your control fade as [paicard] ejects from [bot_name].</span>")
paicard = null
@@ -550,7 +550,7 @@ Auto Patrol[]"},
C.Weaken(5)
C.stuttering = 5
C.Stun(5)
add_logs(src, C, "stunned")
add_attack_logs(src, C, "Stunned by [src]")
if(declare_arrests)
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag <b>[C]</b> in [location].", radio_channel)
@@ -684,7 +684,7 @@
visible_message("<span class='danger'>[src] bumps into [M]!</span>")
else
if(!paicard)
add_logs(src, M, "knocked down")
add_attack_logs(src, M, "Knocked down")
visible_message("<span class='danger'>[src] knocks over [M]!</span>")
M.stop_pulling()
M.Stun(8)
@@ -692,7 +692,7 @@
return ..()
/mob/living/simple_animal/bot/mulebot/proc/RunOver(mob/living/carbon/human/H)
add_logs(src, H, "run over", null, "(DAMTYPE: [uppertext(BRUTE)])")
add_attack_logs(src, H, "Run over (DAMTYPE: [uppertext(BRUTE)])")
H.visible_message("<span class='danger'>[src] drives over [H]!</span>", \
"<span class='userdanger'>[src] drives over you!<span>")
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
@@ -260,7 +260,7 @@ Auto Patrol: []"},
C.Weaken(5)
C.stuttering = 5
C.Stun(5)
add_logs(src, C, "stunned")
add_attack_logs(src, C, "Stunned by [src]")
if(declare_arrests)
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag <b>[C]</b> in [location].", radio_channel)
@@ -137,7 +137,7 @@
to_chat(user, "<span class='notice'>You short out the security protocols and rewrite [src]'s internal memory.</span>")
to_chat(src, "<span class='userdanger'>You have been emagged; you are now completely loyal to [user] and their every order!</span>")
emagged_master = user.name
add_logs(user, src, "emagged")
add_attack_logs(user, src, "Emagged")
maxHealth = 60
health = 60
melee_damage_lower = 15
@@ -547,7 +547,7 @@ Difficulty: Hard
L.apply_damage(damage, BURN, limb_to_hit, armor)
if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid))
L.adjustBruteLoss(damage)
add_logs(caster, L, "struck with a [name]")
add_attack_logs(caster, L, "Struck with a [name]")
for(var/obj/mecha/M in T.contents - hit_things) //and mechs.
hit_things += M
if(M.occupant)
@@ -273,7 +273,7 @@
playsound(loc, M.attack_sound, 50, 1, 1)
visible_message("<span class='danger'>\The [M] [M.attacktext] [src]!</span>", \
"<span class='userdanger'>\The [M] [M.attacktext] [src]!</span>")
add_logs(M, src, "attacked", admin=0, print_attack_log = 0)
add_attack_logs(M, src, "Animal attacked")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
attack_threshold_check(damage,M.melee_damage_type)
+6 -3
View File
@@ -6,7 +6,8 @@
return 0
else if(stat == UNCONSCIOUS)
return 0
add_logs(src, null, "fallen unconscious at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
create_attack_log("<font color='red'>Fallen unconscious at [atom_loc_line(get_turf(src))]</font>")
log_game("[key_name(src)] fell unconscious at [atom_loc_line(get_turf(src))]")
stat = UNCONSCIOUS
if(updating)
// update_blind_effects()
@@ -19,7 +20,8 @@
return 0
else if(stat == CONSCIOUS)
return 0
add_logs(src, null, "woken up at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
create_attack_log("<font color='red'>Woken up at [atom_loc_line(get_turf(src))]</font>")
log_game("[key_name(src)] woke up at [atom_loc_line(get_turf(src))]")
stat = CONSCIOUS
if(updating)
// update_blind_effects()
@@ -40,7 +42,8 @@
return 0
if(!can_be_revived())
return 0
add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0)
create_attack_log("<font color='red'>Came back to life at [atom_loc_line(get_turf(src))]</font>")
log_game("[key_name(src)] came back to life at [atom_loc_line(get_turf(src))]")
stat = CONSCIOUS
dead_mob_list -= src
living_mob_list += src
+3 -3
View File
@@ -3,7 +3,7 @@
//Multikey checks and logging
lastKnownIP = client.address
computer_id = client.computer_id
log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]")
log_access_in(client)
if(config.log_access)
for(var/mob/M in player_list)
if(M == src) continue
@@ -19,10 +19,10 @@
if(matches)
if(M.client)
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=[usr.UID()];priv_msg=\ref[M]'>[key_name_admin(M)]</A>.</font>", 1)
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>", 1)
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
player_list |= src
+1 -1
View File
@@ -2,7 +2,7 @@
SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
unset_machine()
player_list -= src
log_access("Logout: [key_name(src)]")
log_access_out(src)
// `holder` is nil'd out by now, so we check the `admin_datums` array directly
//Only report this stuff if we are currently playing.
if(admin_datums[ckey] && ticker && ticker.current_state == GAME_STATE_PLAYING)
+5 -15
View File
@@ -272,9 +272,7 @@
state = GRAB_NECK
icon_state = "grabbed+1"
assailant.setDir(get_dir(assailant, affecting))
affecting.create_attack_log("<font color='orange'>Has had their neck grabbed by [assailant.name] ([assailant.ckey])</font>")
assailant.create_attack_log("<font color='red'>Grabbed the neck of [affecting.name] ([affecting.ckey])</font>")
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) grabbed the neck of [affecting.name] ([affecting.ckey])</font>")
add_attack_logs(assailant, affecting, "Neck grabbed")
if(!iscarbon(assailant))
affecting.LAssailant = null
else
@@ -288,9 +286,7 @@
state = GRAB_KILL
assailant.visible_message("<span class='danger'>[assailant] has tightened \his grip on [affecting]'s neck!</span>")
affecting.create_attack_log("<font color='orange'>Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])</font>")
assailant.create_attack_log("<font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
add_attack_logs(assailant, affecting, "Strangled")
assailant.next_move = world.time + 10
if(!affecting.get_organ_slot("breathing_tube"))
@@ -342,9 +338,7 @@
damage += hat.force * 3
affecting.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", affected.run_armor_check(affecting, "melee"))
playsound(assailant.loc, "swing_hit", 25, 1, -1)
assailant.create_attack_log("<font color='red'>Headbutted [affecting.name] ([affecting.ckey])</font>")
affecting.create_attack_log("<font color='orange'>Headbutted by [assailant.name] ([assailant.ckey])</font>")
msg_admin_attack("[key_name(assailant)] has headbutted [key_name(affecting)]")
add_attack_logs(assailant, affecting, "Headbutted")
return
/*if(last_hit_zone == "eyes")
@@ -361,9 +355,7 @@
return
assailant.visible_message("<span class='danger'>[assailant] presses \his fingers into [affecting]'s eyes!</span>")
to_chat(affecting, "<span class='danger'>You feel immense pain as digits are being pressed into your eyes!</span>")
assailant.create_attack_log("<font color='red'>Pressed fingers into the eyes of [affecting.name] ([affecting.ckey])</font>")
affecting.create_attack_log("<font color='orange'>Had fingers pressed into their eyes by [assailant.name] ([assailant.ckey])</font>")
msg_admin_attack("[key_name(assailant)] has pressed his fingers into [key_name(affecting)]'s eyes.")
add_attack_logs(assailant, affecting, "Eye-fucked with their fingers")
var/obj/item/organ/internal/eyes/eyes = affected.get_int_organ(/obj/item/organ/internal/eyes)
eyes.damage += rand(3,4)
if(eyes.damage >= eyes.min_broken_damage)
@@ -400,9 +392,7 @@
user.visible_message("<span class='danger'>[user] devours \the [affecting]!</span>")
if(affecting.mind)
affecting.create_attack_log("<font color='orange'>Has been devoured by [attacker.name] ([attacker.ckey])</font>")
attacker.create_attack_log("<font color='red'>Devoured [affecting.name] ([affecting.ckey])</font>")
msg_admin_attack("[key_name(attacker)] devoured [key_name(affecting)]")
add_attack_logs(attacker, affecting, "Devoured")
affecting.loc = user
attacker.stomach_contents.Add(affecting)
@@ -331,7 +331,7 @@
return 1
Nuke_request(input, usr)
to_chat(usr, "<span class='notice'>Request sent.</span>")
log_say("[key_name(usr)] has requested the nuclear codes from Centcomm")
log_game("[key_name(usr)] has requested the nuclear codes from Centcomm")
priority_announcement.Announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg')
centcomm_message_cooldown = 1
spawn(6000)//10 minute cooldown
@@ -350,7 +350,7 @@
return 1
Centcomm_announce(input, usr)
to_chat(usr, "Message transmitted.")
log_say("[key_name(usr)] has made a Centcomm announcement: [input]")
log_game("[key_name(usr)] has made a Centcomm announcement: [input]")
centcomm_message_cooldown = 1
spawn(6000)//10 minute cooldown
centcomm_message_cooldown = 0
@@ -369,7 +369,7 @@
return 1
Syndicate_announce(input, usr)
to_chat(usr, "Message transmitted.")
log_say("[key_name(usr)] has made a Syndicate announcement: [input]")
log_game("[key_name(usr)] has made a Syndicate announcement: [input]")
centcomm_message_cooldown = 1
spawn(6000)//10 minute cooldown
centcomm_message_cooldown = 0
@@ -103,7 +103,7 @@
if(!message || !channel)
return
channel.add_message(message, username)
log_chat("[user]/([user.ckey]) as [username] sent to [channel.title]: [message]")
log_chat("[username] sent to [channel.title]: [message]", user)
if("PRG_joinchannel")
. = 1
+5 -5
View File
@@ -50,11 +50,11 @@
var/icon/Tile = icon(file("nano/mapbase1024.png"))
if(Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION)
log_to_dd("NanoMapGen: <B>ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]</B>")
log_world("NanoMapGen: <B>ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]</B>")
sleep(3)
return NANOMAP_TERMINALERR
log_to_dd("NanoMapGen: <B>GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])</B>")
log_world("NanoMapGen: <B>GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])</B>")
to_chat(usr, "NanoMapGen: <B>GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])</B>")
var/count = 0;
@@ -71,16 +71,16 @@
count++
if(count % 8000 == 0)
log_to_dd("NanoMapGen: <B>[count] tiles done</B>")
log_world("NanoMapGen: <B>[count] tiles done</B>")
sleep(1)
var/mapFilename = "nanomap_z[currentZ]-new.png"
log_to_dd("NanoMapGen: <B>sending [mapFilename] to client</B>")
log_world("NanoMapGen: <B>sending [mapFilename] to client</B>")
usr << browse(Tile, "window=picture;file=[mapFilename];display=0")
log_to_dd("NanoMapGen: <B>Done.</B>")
log_world("NanoMapGen: <B>Done.</B>")
to_chat(usr, "NanoMapGen: <B>Done. File [mapFilename] uploaded to your cache.</B>")
+1 -1
View File
@@ -669,5 +669,5 @@
if(!istype(G) || G.transfer_prints)
H.reagents.add_reagent(contact_poison, contact_poison_volume)
contact_poison = null
add_logs(user, src, "picked up [src], the paper poisoned by [contact_poison_poisoner]")
add_attack_logs(src, user, "Picked up [src], the paper poisoned by [contact_poison_poisoner]")
..()
+2 -2
View File
@@ -114,7 +114,7 @@
// to_chat(M, "<span class='danger'>You feel a tiny prick!</span>")
. = 1
add_logs(user, M, "stabbed", object="[name]")
add_attack_logs(user, M, "Stabbed with [src]")
else
. = ..()
@@ -201,7 +201,7 @@
P.contact_poison = "amanitin"
P.contact_poison_volume = 15
P.contact_poison_poisoner = user.name
add_logs(user, P, "used poison pen on")
add_attack_logs(user, P, "Poison pen'ed")
to_chat(user, "<span class='warning'>You apply the poison to [P].</span>")
else
to_chat(user, "<span class='warning'>[src] clicks. It seems to be depleted.</span>")
+1 -1
View File
@@ -180,7 +180,7 @@
SSnanoui.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message
PM.notify("<b>Message from [pda.owner] ([pda.ownjob]), </b>\"[t]\" (<a href='?src=[PM.UID()];choice=Message;target=\ref[pda]'>Reply</a>)")
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
log_pda("(PDA: [src.name]) sent \"[t]\" to [P.name]", usr)
else
to_chat(U, "<span class='notice'>ERROR: Messaging server is not responding.</span>")
+1 -1
View File
@@ -254,7 +254,7 @@
//remove the old powernet and replace it with a new one throughout the network.
/proc/propagate_network(var/obj/O, var/datum/powernet/PN)
//log_to_dd("propagating new network")
//log_world("propagating new network")
var/list/worklist = list()
var/list/found_machines = list()
var/index = 1
+1 -1
View File
@@ -120,7 +120,7 @@
if(radio_controller)
radio_controller.remove_object(src, frequency)
radio_connection = null
msg_admin_attack("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
msg_admin_attack("Emitter deleted at ([x],[y],[z] - [ADMIN_JMP(src)])", 0, 1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
return ..()
@@ -227,9 +227,9 @@
active = !active
investigate_log("turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr ? usr.key : "outside forces"]","singulo")
if(active)
msg_admin_attack("PA Control Computer turned ON by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("PA Control Computer turned ON by [usr.ckey]([usr]) in ([x],[y],[z])")
use_log += text("\[[time_stamp()]\] <font color='red'>[usr.name] ([usr.ckey]) has turned on the PA Control Computer.</font>")
msg_admin_attack("PA Control Computer turned ON by [key_name_admin(usr)]",0,1)
log_game("PA Control Computer turned ON by [key_name(usr)] in ([x],[y],[z])")
use_log += text("\[[time_stamp()]\] <font color='red'>[key_name(usr)] has turned on the PA Control Computer.</font>")
if(active)
use_power = 2
for(var/obj/structure/particle_accelerator/part in connected_parts)
+1 -8
View File
@@ -173,19 +173,12 @@
R += A.id + " ("
R += num2text(A.volume) + "),"
if(istype(M, /mob))
M.create_attack_log("<b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>dartgun</b> ([R])")
user.create_attack_log("<b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>dartgun</b> ([R])")
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] shot [M] ([M.ckey]) with a dartgun ([R]).")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
else
M.create_attack_log("<b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[key_name_admin(M)]</b> with a <b>dartgun</b> ([R])")
msg_admin_attack("UNKNOWN shot [key_name(M)] with a <b>dartgun</b> ([R]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
add_attack_logs(user, M, "Shot with dartgun containing [R]", !!M.ckey)
if(D.reagents)
D.reagents.trans_to(M, 15)
to_chat(M, "<span class='danger'>You feel a slight prick.</span>")
+1 -1
View File
@@ -120,7 +120,7 @@
reagent_note += R.id + " ("
reagent_note += num2text(R.volume) + ") "
if(!log_override && firer && original)
add_logs(firer, L, "shot", src, reagent_note)
add_attack_logs(firer, L, "Shot with a [type] (potentially containing [reagent_note])")
return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter)
/obj/item/projectile/proc/get_splatter_blockage(var/turf/step_over, var/atom/target, var/splatter_dir, var/target_loca) //Check whether the place we want to splatter blood is blocked (i.e. by windows).
@@ -666,7 +666,7 @@
M.update_revive()
M.stat = UNCONSCIOUS
add_logs(M, M, "revived", object="strange reagent") //Yes, the logs say you revived yourself.
add_attack_logs(M, M, "Revived with strange reagent") //Yes, the logs say you revived yourself.
..()
/datum/reagent/medicine/mannitol
@@ -84,13 +84,9 @@
if(M.reagents)
var/datum/reagent/injected = chemical_reagents_list[reagent_ids[mode]]
var/contained = injected.name
M.create_attack_log("<font color='orange'>Has been injected with [name] by [key_name(user)]. Reagents: [contained]</font>")
user.create_attack_log("<font color='red'>Used the [name] to inject [key_name(M)]. Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
M.LAssailant = user
var/trans = R.trans_to(M, amount_per_transfer_from_this)
add_attack_logs(M, user, "Injected with [name] containing [contained], transfered [trans] units", !!M.ckey)
M.LAssailant = user
to_chat(user, "<span class='notice'>[trans] units injected. [R.total_volume] units remaining.</span>")
return
@@ -61,7 +61,7 @@
for(var/datum/reagent/R in reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
add_logs(user, C, "dripped", src, "([contained])")
add_attack_logs(user, C, "Dripped with [src] containing ([contained]), transfering [to_transfer]")
to_transfer = reagents.trans_to(C, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You transfer [to_transfer] units of the solution.</span>")
@@ -82,10 +82,7 @@
for(var/datum/reagent/R in reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
M.create_attack_log("<font color='orange'>Has been splashed with [name] by [key_name(user)]. Reagents: [contained]</font>")
user.create_attack_log("<font color='red'>Used the [name] to splash [key_name(M)]. Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] splashed [key_name_admin(M)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey)
if(!iscarbon(user))
M.LAssailant = null
else
@@ -37,7 +37,7 @@
var/contained = english_list(injected)
add_logs(user, M, "injected", src, "([contained])")
add_attack_logs(user, M, "Injected with [src] containing ([contained])")
return TRUE
@@ -145,10 +145,7 @@
rinject += R.name
var/contained = english_list(rinject)
if(L != user)
add_logs(user, L, "injected", src, addition="which had [contained]")
else
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [L.name] ([L.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])</font>")
add_attack_logs(user, L, "Injected with [name] containing [contained], transfered [amount_per_transfer_from_this] units")
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(L, INGEST, fraction)
+2 -8
View File
@@ -133,10 +133,7 @@
for(var/mob/C in viewers(src))
C.show_message("<span class='warning'>[GM.name] has been placed in the [src] by [user].</span>", 3)
qdel(G)
usr.create_attack_log("<font color='red'>Has placed [key_name(GM)] in disposals.</font>")
GM.create_attack_log("<font color='orange'>Has been placed in disposals by [key_name(user)]</font>")
if(GM.ckey)
msg_admin_attack("[key_name_admin(user)] placed [key_name_admin(GM)] in a disposals unit. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
add_attack_logs(usr, GM, "Disposal'ed", !!GM.ckey)
return
if(!I)
@@ -182,10 +179,7 @@
msg = "[user.name] stuffs [target.name] into the [src]!"
to_chat(user, "You stuff [target.name] into the [src]!")
user.create_attack_log("<font color='red'>Has placed [key_name(target)] in disposals.</font>")
target.create_attack_log("<font color='orange'>Has been placed in disposals by [key_name(user)]</font>")
if(target.ckey)
msg_admin_attack("[key_name_admin(user)] placed [key_name_admin(target)] in a disposals unit")
add_attack_logs(user, target, "Disposal'ed", !!target.ckey)
else
return
target.forceMove(src)
@@ -435,7 +435,7 @@
G.change_gender(pick(MALE,FEMALE))
G.loc = src.loc
G.key = ghost.key
add_logs(user, G, "summoned", null, "as a golem")
add_attack_logs(user, G, "Summoned as a golem")
to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.")
qdel(src)
+1 -1
View File
@@ -49,7 +49,7 @@
if(!..())
return
to_chat(owner, "<span class='caution'>You grit your teeth and burst the implanted [target]!</span>")
add_logs(owner, null, "swallowed an implanted pill", target)
add_attack_logs(owner, owner, "Swallowed implanted [target]")
if(target.reagents.total_volume)
target.reagents.reaction(owner, INGEST)
target.reagents.trans_to(owner, target.reagents.total_volume)
+1 -1
View File
@@ -227,7 +227,7 @@
user.visible_message("<span class='notice'> [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].</span>", \
"<span class='notice'> You amputate [target]'s [affected.name] with \the [tool].</span>")
add_logs(user, target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
add_attack_logs(user, target, "Surgically removed [affected.name]. INTENT: [uppertext(user.a_intent)]")//log it
var/atom/movable/thing = affected.droplimb(1,DROPLIMB_SHARP)
if(istype(thing,/obj/item))
+1 -4
View File
@@ -306,10 +306,7 @@
processing_objects |= src
if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead
if(user)
user.create_attack_log("<font color='red'> removed a vital organ ([src]) from [key_name(owner)] (INTENT: [uppertext(user.a_intent)])</font>")
owner.create_attack_log("<font color='orange'> had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])</font>")
msg_admin_attack("[key_name_admin(user)] removed a vital organ ([src]) from [key_name_admin(owner)]")
add_attack_logs(user, owner, "Removed vital organ ([src])", !!user)
owner.death()
owner = null
return src
+2 -2
View File
@@ -276,14 +276,14 @@
if(target_zone == "head" && B && B.host == target)
user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!",
"<span class='notice'>You successfully extract [B] from [target]'s [parse_zone(target_zone)].</span>")
add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]")
add_attack_logs(user, target, "Surgically removed [B]. INTENT: [uppertext(user.a_intent)]")
B.leave_host()
return FALSE
if(I && I.owner == target)
user.visible_message("<span class='notice'> [user] has separated and extracts [target]'s [I] with [tool].</span>",
"<span class='notice'> You have separated and extracted [target]'s [I] with [tool].</span>")
add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
add_attack_logs(user, target, "Surgically removed [I.name]. INTENT: [uppertext(user.a_intent)]")
spread_germs_to_organ(I, user, tool)
var/obj/item/thing = I.remove(target)
if(!istype(thing))
+2 -2
View File
@@ -455,7 +455,7 @@
user.visible_message("<span class='notice'> [user] has decoupled [target]'s [I] with \the [tool].</span>" , \
"<span class='notice'> You have decoupled [target]'s [I] with \the [tool].</span>")
add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
add_attack_logs(user, target, "Surgically removed [I.name]. INTENT: [uppertext(user.a_intent)]")
spread_germs_to_organ(I, user)
var/obj/item/thing = I.remove(target)
if(!istype(thing))
@@ -531,7 +531,7 @@
"<span class='notice'> You have decoupled [target]'s [affected.name] with \the [tool].</span>")
add_logs(user, target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
add_attack_logs(user, target, "Surgically removed [affected.name] from. INTENT: [uppertext(user.a_intent)]")//log it
var/atom/movable/thing = affected.droplimb(1,DROPLIMB_SHARP)
if(istype(thing,/obj/item))