From 8cffc2298c0a83e961f262559e24e07b646b236c Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 7 Mar 2018 11:29:46 +0200 Subject: [PATCH 1/7] Readies our borg stuff for next sync fixes. -Fixes the default module icon missing from our _vr.dmi -Makes our custom modules enable ui_style_vr to pull the hud icon from our dmi instead. -Makes relogging etc not revert to default ui file if ui_style_vr is enabled for the borg. -Moves the clumsy VS edit borg reset stuff to a more appropriate place. -Adds the recently fixed attack anim offset fix and the ui_style_vr to the reset module. --- code/_onclick/hud/robot.dm | 4 +++- .../objects/items/robot/robot_upgrades.dm | 6 +----- .../silicon/robot/robot_modules/station_vr.dm | 14 ++++++++++++++ .../mob/living/silicon/robot/robot_vr.dm | 1 + icons/mob/screen1_robot_vr.dmi | Bin 137916 -> 138303 bytes 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index daaa52e827..230df89655 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -276,6 +276,8 @@ var/obj/screen/robot_inventory r.client.screen -= r.robot_modules_background /mob/living/silicon/robot/update_hud() - ..() + if(ui_style_vr) //VOREStation Edit + hands.icon = 'icons/mob/screen1_robot_vr.dmi' if(modtype) hands.icon_state = lowertext(modtype) + ..() \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 57888db514..7cf1ffa141 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -26,14 +26,10 @@ /obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R) if(..()) return 0 - R.pixel_x = initial(pixel_x) //VOREStation Edit - R.pixel_y = initial(pixel_y) //VOREStation Edit - R.dogborg = FALSE //VOREStation Edit - R.wideborg = FALSE //VOREStation Edit R.uneq_all() R.modtype = initial(R.modtype) R.hands.icon_state = initial(R.hands.icon_state) - R.icon = initial(R.icon) //VOREStation Edit - Dogborg reset tweak since separate file. + R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name) R.module.Reset(R) qdel(R.module) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 393e167b87..92c53171b3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -120,6 +120,7 @@ src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem. R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE //R.icon_state = "k9" R.pixel_x = -16 R.old_x = -16 @@ -173,6 +174,7 @@ src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE //R.icon_state = "medihound" R.pixel_x = -16 R.old_x = -16 @@ -202,6 +204,7 @@ src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) R.icon = 'icons/mob/64x64robot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE R.pixel_x = -16 R.old_x = -16 R.default_pixel_x = -16 @@ -226,6 +229,7 @@ src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE //R.icon_state = "scrubpup" R.pixel_x = -16 R.old_x = -16 @@ -260,6 +264,7 @@ src.emag = new /obj/item/weapon/hand_tele(src) R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE //R.icon_state = "science" R.pixel_x = -16 R.old_x = -16 @@ -268,3 +273,12 @@ R.wideborg = TRUE ..() +/obj/item/weapon/robot_module/Reset(var/mob/living/silicon/robot/R) + R.pixel_x = initial(pixel_x) + R.pixel_y = initial(pixel_y) + R.icon = initial(R.icon) + R.dogborg = FALSE + R.wideborg = FALSE + R.ui_style_vr = FALSE + R.default_pixel_x = initial(pixel_x) + ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 630643dbd6..bcec8d6431 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -8,6 +8,7 @@ var/dogborg = FALSE //Dogborg special features (overlays etc.) var/wideborg = FALSE //When the borg simply doesn't use standard 32p size. var/original_icon = 'icons/mob/robots.dmi' + var/ui_style_vr = FALSE //Do we use our hud icons? var/vr_icons = list( "handy-hydro", "handy-service", diff --git a/icons/mob/screen1_robot_vr.dmi b/icons/mob/screen1_robot_vr.dmi index c173ff82fda6f2a00ac92916457b4ad3104824e3..01647f02cfaafcfd70a703b9c34d67ad1bb2b54f 100644 GIT binary patch delta 16690 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 From f54383b995f486327cb5645c68ee3afda36e0561 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 9 Mar 2018 22:59:47 +0200 Subject: [PATCH 2/7] vr --- code/_onclick/hud/robot.dm | 6 ++---- code/_onclick/hud/robot_vr.dm | 6 ++++++ vorestation.dme | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 code/_onclick/hud/robot_vr.dm diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 230df89655..ae726ec481 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -276,8 +276,6 @@ var/obj/screen/robot_inventory r.client.screen -= r.robot_modules_background /mob/living/silicon/robot/update_hud() - if(ui_style_vr) //VOREStation Edit - hands.icon = 'icons/mob/screen1_robot_vr.dmi' + ..() if(modtype) - hands.icon_state = lowertext(modtype) - ..() \ No newline at end of file + hands.icon_state = lowertext(modtype) \ No newline at end of file diff --git a/code/_onclick/hud/robot_vr.dm b/code/_onclick/hud/robot_vr.dm new file mode 100644 index 0000000000..5e376182a0 --- /dev/null +++ b/code/_onclick/hud/robot_vr.dm @@ -0,0 +1,6 @@ +/mob/living/silicon/robot/update_hud() + if(ui_style_vr) + hands.icon = 'icons/mob/screen1_robot_vr.dmi' + if(modtype) + hands.icon_state = lowertext(modtype) + ..() \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index 07176cd050..e780d3caf8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -123,6 +123,7 @@ #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\other_mobs.dm" #include "code\_onclick\hud\robot.dm" +#include "code\_onclick\hud\robot_vr.dm" #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\screen_objects_vr.dm" #include "code\_onclick\hud\spell_screen_objects.dm" From c134f8ad655d9b270be724f7c4d753f78ae566d1 Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 9 Mar 2018 23:50:43 -0500 Subject: [PATCH 3/7] Reduce qdel log file by 150000% Fix indenting error that caused it to log repeatedly. Also put it in its own file to match the pattern used by overlays and initialize. --- code/controllers/subsystems/garbage.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 32c1e37a6e..eff85a3627 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -81,7 +81,8 @@ SUBSYSTEM_DEF(garbage) dellog += "\tIgnored force: [I.no_respect_force] times" if (I.no_hint) dellog += "\tNo hint: [I.no_hint] times" - log_misc(dellog.Join()) + var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") + text2file(dellog.Join(), "data/logs/[date_string]-qdel.log") /datum/controller/subsystem/garbage/fire() //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. From c73a10247066038dbcdc5ac3fd4c9aca6cc80ce0 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Sat, 10 Mar 2018 19:39:55 +0000 Subject: [PATCH 4/7] Adds Aruis to diona whitelist --- config/alienwhitelist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 7ed5aac2dc..32864ca31d 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -1,4 +1,5 @@ aether_elemental - Daemon +aruis - Diona aruis - Xenochimera azmodan412 - Xenochimera azmodan412 - Xenomorph Hybrid From 2c9bdf3ae4a6b7cf17d50ee9a6cc94257b2b9512 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Mar 2018 15:52:20 -0500 Subject: [PATCH 5/7] POLARIS: Revamp logging to be consistent --- code/_helpers/logging.dm | 98 +++++++++++++------ code/_helpers/mobs.dm | 24 +++-- code/_helpers/time.dm | 5 +- code/_onclick/item_attack.dm | 4 +- code/defines/procs/announce.dm | 2 +- .../gamemodes/changeling/powers/absorb.dm | 4 +- .../changeling/powers/bioelectrogenesis.dm | 4 +- .../changeling/powers/blind_sting.dm | 4 +- .../gamemodes/changeling/powers/cryo_sting.dm | 4 +- .../gamemodes/changeling/powers/deaf_sting.dm | 4 +- .../changeling/powers/death_sting.dm | 4 +- .../changeling/powers/delayed_toxin_sting.dm | 5 +- .../changeling/powers/enfeebling_string.dm | 4 +- .../changeling/powers/extract_dna_sting.dm | 4 +- .../gamemodes/changeling/powers/lsd_sting.dm | 4 +- .../gamemodes/changeling/powers/para_sting.dm | 4 +- .../gamemodes/changeling/powers/shriek.dm | 15 +-- .../changeling/powers/silence_sting.dm | 4 +- .../changeling/powers/transform_sting.dm | 4 +- .../changeling/powers/unfat_sting.dm | 4 +- code/game/gamemodes/cult/ritual.dm | 5 +- code/game/gamemodes/cult/runes.dm | 23 +++-- .../game/machinery/computer/communications.dm | 4 +- .../computer3/computers/communications.dm | 4 +- .../machinery/computer3/computers/prisoner.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- .../kitchen/cooking_machines/fryer.dm | 4 +- code/game/machinery/kitchen/gibber.dm | 4 +- code/game/objects/effects/mines.dm | 2 +- code/game/objects/items.dm | 4 +- code/game/objects/items/devices/PDA/PDA.dm | 4 +- code/game/objects/items/devices/aicard.dm | 4 +- .../objects/items/devices/communicator/UI.dm | 2 +- .../items/devices/communicator/messaging.dm | 2 +- code/game/objects/items/devices/defib.dm | 2 +- code/game/objects/items/devices/flash.dm | 4 +- .../objects/items/devices/traitordevices.dm | 6 +- .../objects/items/weapons/cigs_lighters.dm | 2 +- .../objects/items/weapons/dna_injector.dm | 5 +- code/game/objects/items/weapons/explosives.dm | 5 +- .../objects/items/weapons/gift_wrappaper.dm | 5 +- .../items/weapons/grenades/chem_grenade.dm | 4 +- .../objects/items/weapons/grenades/grenade.dm | 2 +- code/game/objects/items/weapons/handcuffs.dm | 11 +-- .../items/weapons/implants/implanter.dm | 2 +- code/game/objects/items/weapons/trays.dm | 4 +- code/game/objects/items/weapons/weaponry.dm | 5 +- code/game/objects/structures/morgue.dm | 4 - .../stool_bed_chair_nest/wheelchair.dm | 4 +- code/game/verbs/ooc.dm | 4 +- code/modules/admin/IsBanned.dm | 6 +- code/modules/admin/admin.dm | 1 - code/modules/admin/admin_attack_log.dm | 3 +- code/modules/admin/verbs/adminsay.dm | 6 +- code/modules/admin/verbs/antag-ooc.dm | 2 +- code/modules/client/client procs.dm | 2 +- code/modules/clothing/rings/rings.dm | 4 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/dead/observer/say.dm | 4 +- code/modules/mob/emote.dm | 5 +- code/modules/mob/language/language.dm | 2 +- code/modules/mob/living/carbon/alien/emote.dm | 2 +- code/modules/mob/living/carbon/brain/emote.dm | 2 +- .../mob/living/carbon/carbon_defense.dm | 9 +- code/modules/mob/living/carbon/human/emote.dm | 2 - .../mob/living/carbon/human/emote_vr.dm | 1 - code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 12 +-- .../mob/living/carbon/human/human_defense.dm | 10 +- .../mob/living/carbon/human/human_powers.dm | 4 +- .../mob/living/carbon/human/stripping.dm | 8 +- code/modules/mob/living/living.dm | 10 +- code/modules/mob/living/living_defense.dm | 8 +- code/modules/mob/living/say.dm | 7 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- code/modules/mob/living/silicon/say.dm | 8 +- .../simple_animal/borer/borer_captive.dm | 2 +- .../simple_animal/constructs/soulstone.dm | 5 +- .../mob/living/simple_animal/simple_animal.dm | 3 +- code/modules/mob/login.dm | 6 +- code/modules/mob/logout.dm | 2 +- code/modules/mob/mob_grab.dm | 9 +- code/modules/mob/mob_grab_specials.dm | 8 +- code/modules/organs/organ.dm | 4 +- code/modules/paperwork/pen.dm | 15 +-- code/modules/projectiles/gun.dm | 19 ++-- .../projectiles/guns/launcher/syringe_gun.dm | 6 +- code/modules/projectiles/projectile.dm | 13 +-- code/modules/reagents/reagent_containers.dm | 10 +- .../reagents/reagent_containers/borghydro.dm | 2 +- .../reagents/reagent_containers/dropper.dm | 6 +- .../reagent_containers/food/snacks.dm | 5 +- .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/pill.dm | 7 +- .../reagents/reagent_containers/syringes.dm | 10 +- code/modules/recycling/disposal.dm | 9 +- code/modules/resleeving/implant.dm | 2 +- code/modules/vehicles/cargo_train.dm | 2 +- code/modules/vehicles/train.dm | 2 +- .../tools/ano_device_battery.dm | 4 +- 100 files changed, 262 insertions(+), 355 deletions(-) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 07e2985bbb..29b72ff6f7 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -41,41 +41,71 @@ if (config.log_vote) diary << "\[[time_stamp()]]VOTE: [text][log_end]" -/proc/log_access(text) +/proc/log_access_in(client/new_client) if (config.log_access) - diary << "\[[time_stamp()]]ACCESS: [text][log_end]" + var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]" + diary << "\[[time_stamp()]]ACCESS IN: [message][log_end]" -/proc/log_say(text) +/proc/log_access_out(mob/last_mob) + if (config.log_access) + var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out" + diary << "\[[time_stamp()]]ACCESS OUT: [message][log_end]" + +/proc/log_say(text, mob/speaker) if (config.log_say) - diary << "\[[time_stamp()]]SAY: [text][log_end]" + diary << "\[[time_stamp()]]SAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]" -/proc/log_ooc(text) +/proc/log_ooc(text, client/user) if (config.log_ooc) - diary << "\[[time_stamp()]]OOC: [text][log_end]" + diary << "\[[time_stamp()]]OOC: [user.simple_info_line()]: [html_decode(text)][log_end]" -/proc/log_whisper(text) +/proc/log_aooc(text, client/user) + if (config.log_ooc) + diary << "\[[time_stamp()]]AOOC: [user.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_looc(text, client/user) + if (config.log_ooc) + diary << "\[[time_stamp()]]LOOC: [user.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_whisper(text, mob/speaker) if (config.log_whisper) - diary << "\[[time_stamp()]]WHISPER: [text][log_end]" + diary << "\[[time_stamp()]]WHISPER: [speaker.simple_info_line()]: [html_decode(text)][log_end]" -/proc/log_emote(text) +/proc/log_emote(text, mob/speaker) if (config.log_emote) - diary << "\[[time_stamp()]]EMOTE: [text][log_end]" + diary << "\[[time_stamp()]]EMOTE: [speaker.simple_info_line()]: [html_decode(text)][log_end]" -/proc/log_attack(text) +/proc/log_attack(attacker, defender, message) if (config.log_attack) - diary << "\[[time_stamp()]]ATTACK: [text][log_end]" //Seperate attack logs? Why? FOR THE GLORY OF SATAN! + diary << "\[[time_stamp()]]ATTACK: [attacker] against [defender]: [message][log_end]" -/proc/log_adminsay(text) +/proc/log_adminsay(text, mob/speaker) if (config.log_adminchat) - diary << "\[[time_stamp()]]ADMINSAY: [text][log_end]" + diary << "\[[time_stamp()]]ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_modsay(text, mob/speaker) + if (config.log_adminchat) + diary << "\[[time_stamp()]]MODSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_eventsay(text, mob/speaker) + if (config.log_adminchat) + diary << "\[[time_stamp()]]EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_ghostsay(text, mob/speaker) + if (config.log_say) + diary << "\[[time_stamp()]]DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)][log_end]" + +/proc/log_ghostemote(text, mob/speaker) + if (config.log_emote) + diary << "\[[time_stamp()]]DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)][log_end]" /proc/log_adminwarn(text) if (config.log_adminwarn) - diary << "\[[time_stamp()]]ADMINWARN: [text][log_end]" + diary << "\[[time_stamp()]]ADMINWARN: [html_decode(text)][log_end]" -/proc/log_pda(text) +/proc/log_pda(text, mob/speaker) if (config.log_pda) - diary << "\[[time_stamp()]]PDA: [text][log_end]" + diary << "\[[time_stamp()]]PDA: [speaker.simple_info_line()]: [html_decode(text)][log_end]" /proc/log_to_dd(text) world.log << text //this comes before the config check because it can't possibly runtime @@ -105,12 +135,14 @@ return english_list(comps, nothing_text="0", and_text="|", comma_text="|") //more or less a logging utility -/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special_characters = 1) +//Always return "Something/(Something)", even if it's an error message. +/proc/key_name(var/whom, var/include_link = null, var/highlight_special_characters = 1) var/mob/M var/client/C var/key - if(!whom) return "*null*" + if(!whom) + return "INVALID/INVALID" if(istype(whom, /client)) C = whom M = C.mob @@ -127,9 +159,11 @@ C = D.current.client else if(istype(whom, /datum)) var/datum/D = whom - return "*invalid:[D.type]*" + return "INVALID/([D.type])" + else if(istext(whom)) + return "AUTOMATED/[whom]" //Just give them the text back else - return "*invalid*" + return "INVALID/INVALID" . = "" @@ -137,7 +171,7 @@ if(include_link && C) . += "" - if(C && C.holder && C.holder.fakekey && !include_name) + if(C && C.holder && C.holder.fakekey) . += "Administrator" else . += key @@ -146,21 +180,19 @@ if(C) . += "" else . += " (DC)" else - . += "*no key*" - - if(include_name && M) - var/name + . += "INVALID" + var/name = "INVALID" + if(M) if(M.real_name) name = M.real_name else if(M.name) name = M.name - if(include_link && is_special_character(M) && highlight_special_characters) - . += "/([name])" //Orange - else - . += "/([name])" + name = "[name]" //Orange + + . += "/([name])" return . @@ -189,3 +221,9 @@ if(!istype(d)) return json_encode(d) return d.log_info_line() + +/mob/proc/simple_info_line() + return "[key_name(src)] ([x],[y],[z])" + +/client/proc/simple_info_line() + return "[key_name(src)] ([mob.x],[mob.y],[mob.z])" diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 708363f5f8..1ba5ec30b5 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -145,13 +145,23 @@ Proc for attack log creation, because really why not 6 is additional information, anything that needs to be added */ -/proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null) - if(user && ismob(user)) - user.attack_log += text("\[[time_stamp()]\] Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]") - if(target && ismob(target)) - target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]") - if(admin) - log_attack("[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]") +/proc/add_attack_logs(mob/user, mob/target, what_done, var/admin_notify = TRUE) + if(islist(target)) //Multi-victim adding + var/list/targets = target + for(var/mob/M in targets) + add_attack_logs(user,M,what_done,admin_notify) + return + + var/user_str = key_name(user) + var/target_str = key_name(target) + + if(ismob(user)) + user.attack_log += text("\[[time_stamp()]\] Attacked [target_str]: [what_done]") + if(ismob(target)) + target.attack_log += text("\[[time_stamp()]\] Attacked by [user_str]: [what_done]") + log_attack(user_str,target_str,what_done) + if(admin_notify) + msg_admin_attack("[key_name_admin(user)] vs [target_str]: [what_done]") //checks whether this item is a module of the robot it is located in. /proc/is_robot_module(var/obj/item/thing) diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 6dad42e128..58348761f8 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -58,8 +58,11 @@ var/next_station_date_change = 1 DAY station_date = num2text((text2num(time2text(timeofday, "YYYY"))+544)) + "-" + time2text(timeofday, "MM-DD") return station_date +//ISO 8601 /proc/time_stamp() - return time2text(station_time_in_ticks, "hh:mm:ss") + var/date_portion = time2text(world.timeofday, "YYYY-MM-DD") + var/time_portion = time2text(world.timeofday, "hh:mm:ss") + return "[date_portion]T[time_portion]" /* Returns 1 if it is the selected month and day */ proc/isDay(var/month, var/day) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 01e87b490d..d583084791 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -82,9 +82,7 @@ avoid code duplication. This includes items that may sometimes act as a standard M.lastattacker = user if(!no_attack_log) - user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" - msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" ) + add_attack_logs(user,M,"attacked with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])") ///////////////////////// user.setClickCooldown(user.get_attack_speed(src)) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index d6ab3edc0c..902285bf45 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -94,7 +94,7 @@ datum/announcement/priority/command/Sound(var/message_sound) datum/announcement/proc/Log(message as text, message_title as text) if(log) - log_say("[key_name(usr)] has made \a [announcement_type]: [message_title] - [message] - [announcer]") + log_game("[key_name(usr)] has made \a [announcement_type]: [message_title] - [message] - [announcer]") message_admins("[key_name_admin(usr)] has made \a [announcement_type].", 1) /proc/GetNameAndAssignmentFromId(var/obj/item/weapon/card/id/I) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 0af67b22ed..f76fd5ca47 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -53,9 +53,7 @@ src << "We stab [T] with the proboscis." src.visible_message("[src] stabs [T] with the proboscis!") T << "You feel a sharp stabbing pain!" - T.attack_log += text("\[[time_stamp()]\] Was absorbed by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Absorbed [key_name(T)]") - msg_admin_attack("[key_name(T)] was absorbed by [key_name(src)]") + add_attack_logs(src,T,"Absorbed (changeling)") var/obj/item/organ/external/affecting = T.get_organ(src.zone_sel.selecting) if(affecting.take_damage(39,0,1,0,"large organic needle")) T:UpdateDamageIcon() diff --git a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm index 1579252628..3f3c1bd7ad 100644 --- a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm +++ b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm @@ -47,7 +47,7 @@ var/agony = 80 * siemens //Does more than if hit with an electric hand, since grabbing is slower. G.affecting.stun_effect_act(0, agony, BP_TORSO, src) - msg_admin_attack("[key_name(src)] shocked [key_name(G.affecting)] with the [src].") + add_attack_logs(src,G.affecting,"Changeling shocked") if(siemens) visible_message("Arcs of electricity strike [G.affecting]!", @@ -149,7 +149,7 @@ C.electrocute_act(electrocute_amount * siemens,src,1.0,BP_TORSO) C.stun_effect_act(0, agony_amount * siemens, BP_TORSO, src) - msg_admin_attack("[key_name(user)] shocked [key_name(C)] with the [src].") + add_attack_logs(user,C,"Shocked with [src]") if(siemens) visible_message("Arcs of electricity strike [C]!", diff --git a/code/game/gamemodes/changeling/powers/blind_sting.dm b/code/game/gamemodes/changeling/powers/blind_sting.dm index 41b14478b3..347881df9b 100644 --- a/code/game/gamemodes/changeling/powers/blind_sting.dm +++ b/code/game/gamemodes/changeling/powers/blind_sting.dm @@ -15,9 +15,7 @@ var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_blind_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was blind stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used blind sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was blind stung by [key_name(src)]") + add_attack_logs(src,T,"Blind sting (changeling)") T << "Your eyes burn horrificly!" T.disabilities |= NEARSIGHTED var/duration = 300 diff --git a/code/game/gamemodes/changeling/powers/cryo_sting.dm b/code/game/gamemodes/changeling/powers/cryo_sting.dm index 4bb92a543e..bc68428d89 100644 --- a/code/game/gamemodes/changeling/powers/cryo_sting.dm +++ b/code/game/gamemodes/changeling/powers/cryo_sting.dm @@ -16,9 +16,7 @@ var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_cryo_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was cryo stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used cryo sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was cryo stung by [key_name(src)]") + add_attack_logs(src,T,"Cryo sting (changeling)") var/inject_amount = 10 if(src.mind.changeling.recursive_enhancement) inject_amount = inject_amount * 1.5 diff --git a/code/game/gamemodes/changeling/powers/deaf_sting.dm b/code/game/gamemodes/changeling/powers/deaf_sting.dm index 24c1e5d260..a94ad1744a 100644 --- a/code/game/gamemodes/changeling/powers/deaf_sting.dm +++ b/code/game/gamemodes/changeling/powers/deaf_sting.dm @@ -15,9 +15,7 @@ var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_deaf_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was deaf stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used deaf sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was deaf stung by [key_name(src)]") + add_attack_logs(src,T,"Deaf sting (changeling)") var/duration = 300 if(src.mind.changeling.recursive_enhancement) duration = duration + 100 diff --git a/code/game/gamemodes/changeling/powers/death_sting.dm b/code/game/gamemodes/changeling/powers/death_sting.dm index 52412a4282..6dd0cdbf85 100644 --- a/code/game/gamemodes/changeling/powers/death_sting.dm +++ b/code/game/gamemodes/changeling/powers/death_sting.dm @@ -13,9 +13,7 @@ var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_DEATHsting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was death stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used death sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was death stung by [key_name(src)]") + add_attack_logs(src,T,"Death sting (changeling)") T << "You feel a small prick and your chest becomes tight." T.silent = 10 T.Paralyse(10) diff --git a/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm b/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm index a9b323465c..7853a9603e 100644 --- a/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm +++ b/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm @@ -28,10 +28,7 @@ var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_delayed_toxic_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was delayed toxic stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used delayed toxic sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was delayed toxic stung by [key_name(src)]") - + add_attack_logs(src,T,"Delayed toxic sting (chagneling)") var/type_to_give = /datum/modifier/delayed_toxin_sting if(src.mind.changeling.recursive_enhancement) type_to_give = /datum/modifier/delayed_toxin_sting/strong diff --git a/code/game/gamemodes/changeling/powers/enfeebling_string.dm b/code/game/gamemodes/changeling/powers/enfeebling_string.dm index b7a6c56957..16303f7c58 100644 --- a/code/game/gamemodes/changeling/powers/enfeebling_string.dm +++ b/code/game/gamemodes/changeling/powers/enfeebling_string.dm @@ -35,9 +35,7 @@ if(ishuman(T)) var/mob/living/carbon/human/H = T - T.attack_log += text("\[[time_stamp()]\] Was enfeebling stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used enfeebling sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was enfeebling stung by [key_name(src)]") + add_attack_logs(src,T,"Enfeebling sting (changeling)") var/type_to_give = /datum/modifier/enfeeble if(src.mind.changeling.recursive_enhancement) diff --git a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm index 6198e409a6..0c5d91d83b 100644 --- a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm +++ b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm @@ -35,9 +35,7 @@ src << "This creature's DNA is ruined beyond useability!" return 0 - T.attack_log += text("\[[time_stamp()]\] Had DNA extracted via sting by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used DNA extraction sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was DNA extraction stung by [key_name(src)]") + add_attack_logs(src,T,"DNA extraction sting (changeling)") var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) absorbDNA(newDNA) diff --git a/code/game/gamemodes/changeling/powers/lsd_sting.dm b/code/game/gamemodes/changeling/powers/lsd_sting.dm index 9adb4acd09..fabb81327e 100644 --- a/code/game/gamemodes/changeling/powers/lsd_sting.dm +++ b/code/game/gamemodes/changeling/powers/lsd_sting.dm @@ -13,9 +13,7 @@ var/mob/living/carbon/T = changeling_sting(15,/mob/proc/changeling_lsdsting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was hallucination stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used hallucination sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was hallucination stung by [key_name(src)]") + add_attack_logs(src,T,"Hallucination sting (changeling)") spawn(rand(300,600)) if(T) T.hallucination += 400 feedback_add_details("changeling_powers","HS") diff --git a/code/game/gamemodes/changeling/powers/para_sting.dm b/code/game/gamemodes/changeling/powers/para_sting.dm index efe6fe8f79..7a0020bd0f 100644 --- a/code/game/gamemodes/changeling/powers/para_sting.dm +++ b/code/game/gamemodes/changeling/powers/para_sting.dm @@ -12,9 +12,7 @@ var/mob/living/carbon/T = changeling_sting(30,/mob/proc/changeling_paralysis_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was paralysis stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used paralysis sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was paralysis stung by [key_name(src)]") + add_attack_logs(src,T,"Paralysis sting (changeling)") T << "Your muscles begin to painfully tighten." T.Weaken(20) feedback_add_details("changeling_powers","PS") diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 40e796490f..4989c27f87 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -51,12 +51,8 @@ range = range * 2 to_chat(src, "We are extra loud.") - src.attack_log += text("\[[time_stamp()]\] Used Resonant Shriek.") - message_admins("[key_name(src)] used Resonant Shriek ([src.x],[src.y],[src.z]) (JMP).") - log_game("[key_name(src)] used Resonant Shriek.") - visible_message("[src] appears to shout.") - + var/list/affected = list() for(var/mob/living/M in range(range, src)) if(iscarbon(M)) if(!M.mind || !M.mind.changeling) @@ -67,7 +63,7 @@ M.adjustEarDamage(0,30) M.Confuse(20) M << sound('sound/effects/screech.ogg') - M.attack_log += text("\[[time_stamp()]\] Was affected by [key_name(src)]'s Resonant Shriek.") + affected += M else if(M != src) M << "You hear a familiar screech from nearby. It has no effect on you." @@ -77,7 +73,7 @@ M << sound('sound/weapons/flash.ogg') M << "Auditory input overloaded. Reinitializing..." M.Weaken(rand(5,10)) - M.attack_log += text("\[[time_stamp()]\] Was affected by [key_name(src)]'s Resonant Shriek.") + affected += M for(var/obj/machinery/light/L in range(range, src)) L.on = 1 @@ -85,6 +81,7 @@ changeling.last_shriek = world.time + add_attack_logs(src,affected,"Used resonant shriek") feedback_add_details("changeling_powers","RS") return 1 @@ -133,9 +130,7 @@ visible_message("[src] appears to shout.") - src.attack_log += text("\[[time_stamp()]\] Used Dissonant Shriek.") - message_admins("[key_name(src)] used Dissonant Shriek ([src.x],[src.y],[src.z]) (JMP).") - log_game("[key_name(src)] used Dissonant Shriek.") + add_attack_logs(src,null,"Use dissonant shriek") for(var/obj/machinery/light/L in range(5, src)) L.on = 1 diff --git a/code/game/gamemodes/changeling/powers/silence_sting.dm b/code/game/gamemodes/changeling/powers/silence_sting.dm index 1ab25278a4..334b0c139f 100644 --- a/code/game/gamemodes/changeling/powers/silence_sting.dm +++ b/code/game/gamemodes/changeling/powers/silence_sting.dm @@ -15,9 +15,7 @@ var/mob/living/carbon/T = changeling_sting(10,/mob/proc/changeling_silence_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was silence stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used silence sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was silence stung by [key_name(src)]") + add_attack_logs(src,T,"Silence sting (changeling)") var/duration = 30 if(src.mind.changeling.recursive_enhancement) duration = duration + 10 diff --git a/code/game/gamemodes/changeling/powers/transform_sting.dm b/code/game/gamemodes/changeling/powers/transform_sting.dm index 797eec92d2..678e195e22 100644 --- a/code/game/gamemodes/changeling/powers/transform_sting.dm +++ b/code/game/gamemodes/changeling/powers/transform_sting.dm @@ -36,9 +36,7 @@ if((HUSK in T.mutations) || (!ishuman(T) && !issmall(T))) src << "Our sting appears ineffective against its DNA." return 0 - T.attack_log += text("\[[time_stamp()]\] Was transform stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used transform sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was transform stung by [key_name(src)]") + add_attack_logs(src,T,"Transformation sting (changeling)") T.visible_message("[T] transforms!") T.dna = chosen_dna.Clone() T.real_name = chosen_dna.real_name diff --git a/code/game/gamemodes/changeling/powers/unfat_sting.dm b/code/game/gamemodes/changeling/powers/unfat_sting.dm index 4b42f55e30..f2e238746d 100644 --- a/code/game/gamemodes/changeling/powers/unfat_sting.dm +++ b/code/game/gamemodes/changeling/powers/unfat_sting.dm @@ -11,9 +11,7 @@ var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_unfat_sting) if(!T) return 0 - T.attack_log += text("\[[time_stamp()]\] Was unfat stung by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Used unfat sting on [key_name(T)]") - msg_admin_attack("[key_name(T)] was unfat stung by [key_name(src)]") + add_attack_logs(src,T,"Unfat sting (changeling)") T << "you feel a small prick as stomach churns violently and you become to feel skinnier." T.overeatduration = 0 T.nutrition -= 100 diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 8db7a49255..d91e2e1f47 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -292,10 +292,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," words[cultwords[V]] = V attack(mob/living/M as mob, mob/living/user as mob) - - M.attack_log += text("\[[time_stamp()]\] Has had the [name] used on them by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used [name] on [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey]) (JMP)") + add_attack_logs(user,M,"Hit with [name]") if(istype(M,/mob/observer/dead)) var/mob/observer/dead/D = M diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 0e0ff60791..d7579698d1 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -139,7 +139,7 @@ var/list/sacrificed = list() target.take_overall_damage(0, rand(5, 20)) // You dirty resister cannot handle the damage to your mind. Easily. - even cultists who accept right away should experience some effects // Resist messages go! if(initial_message) //don't do this stuff right away, only if they resist or hesitate. - admin_attack_log(attacker, target, "Used a convert rune", "Was subjected to a convert rune", "used a convert rune on") + add_attack_logs(attacker,target,"Convert rune") switch(target.getFireLoss()) if(0 to 25) target << "Your blood boils as you force yourself to resist the corruption invading every corner of your mind." @@ -247,7 +247,7 @@ var/list/sacrificed = list() if(R.word1==cultwords["travel"] && R.word2==cultwords["blood"] && R.word3==cultwords["self"]) for(var/mob/living/carbon/D in R.loc) if(D.stat!=2) - admin_attack_log(usr, D, "Used a blood drain rune.", "Was victim of a blood drain rune.", "used a blood drain rune on") + add_attack_logs(usr,D,"Blood drain rune") var/bdrain = rand(1,25) D << "You feel weakened." D.take_overall_damage(bdrain, 0) @@ -933,7 +933,7 @@ var/list/sacrificed = list() if(affected.len) usr.say("Sti[pick("'","`")] kaliedir!") usr << "The world becomes quiet as the deafening rune dissipates into fine dust." - admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on") + add_attack_logs(usr,affected,"Deafen rune") qdel(src) else return fizzle() @@ -952,7 +952,7 @@ var/list/sacrificed = list() if(affected.len) usr.whisper("Sti[pick("'","`")] kaliedir!") usr << "Your talisman turns into gray dust, deafening everyone around." - admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on") + add_attack_logs(usr, affected, "Deafen rune") for (var/mob/V in orange(1,src)) if(!(iscultist(V))) V.show_message("Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3) @@ -978,7 +978,7 @@ var/list/sacrificed = list() if(affected.len) usr.say("Sti[pick("'","`")] kaliesin!") usr << "The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust." - admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on") + add_attack_logs(usr, affected, "Blindness rune") qdel(src) else return fizzle() @@ -998,7 +998,7 @@ var/list/sacrificed = list() if(affected.len) usr.whisper("Sti[pick("'","`")] kaliesin!") usr << "Your talisman turns into gray dust, blinding those who not follow the Nar-Sie." - admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on") + add_attack_logs(usr, affected, "Blindness rune") return @@ -1035,8 +1035,7 @@ var/list/sacrificed = list() if(iscultist(C) && !C.stat) C.say("Dedo ol[pick("'","`")]btoh!") C.take_overall_damage(15, 0) - admin_attacker_log_many_victims(usr, victims, "Used a blood boil rune.", "Was the victim of a blood boil rune.", "used a blood boil rune on") - log_and_message_admins_many(cultists - usr, "assisted activating a blood boil rune.") + add_attack_logs(usr, victims, "Blood boil rune") qdel(src) else return fizzle() @@ -1084,13 +1083,13 @@ var/list/sacrificed = list() C.Weaken(1) C.Stun(1) C.show_message("The rune explodes in a bright flash.", 3) - admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") + add_attack_logs(usr,C,"Stun rune") else if(issilicon(L)) var/mob/living/silicon/S = L S.Weaken(5) S.show_message("BZZZT... The rune has exploded in a bright flash.", 3) - admin_attack_log(usr, S, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") + add_attack_logs(usr,S,"Stun rune") qdel(src) else ///When invoked as talisman, stun and mute the target mob. usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!") @@ -1104,7 +1103,7 @@ var/list/sacrificed = list() if(issilicon(T)) T.Weaken(15) - admin_attack_log(usr, T, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") + add_attack_logs(usr,T,"Stun rune") else if(iscarbon(T)) var/mob/living/carbon/C = T C.flash_eyes() @@ -1112,7 +1111,7 @@ var/list/sacrificed = list() C.silent += 15 C.Weaken(25) C.Stun(25) - admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") + add_attack_logs(usr,C,"Stun rune") return /////////////////////////////////////////TWENTY-FIFTH RUNE diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 785d841702..5f1fe0e532 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -187,7 +187,7 @@ return CentCom_announce(input, usr) usr << "Message transmitted." - log_say("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]") + log_game("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]") centcomm_message_cooldown = 1 spawn(300)//10 minute cooldown centcomm_message_cooldown = 0 @@ -204,7 +204,7 @@ return Syndicate_announce(input, usr) usr << "Message transmitted." - log_say("[key_name(usr)] has made an illegal announcement: [input]") + log_game("[key_name(usr)] has made an illegal announcement: [input]") centcomm_message_cooldown = 1 spawn(300)//10 minute cooldown centcomm_message_cooldown = 0 diff --git a/code/game/machinery/computer3/computers/communications.dm b/code/game/machinery/computer3/computers/communications.dm index 6f802c54bd..acd66ebde1 100644 --- a/code/game/machinery/computer3/computers/communications.dm +++ b/code/game/machinery/computer3/computers/communications.dm @@ -197,7 +197,7 @@ return CentCom_announce(input, usr) usr << "Message transmitted." - log_say("[key_name(usr)] has made a [using_map.boss_short] announcement: [input]") + log_game("[key_name(usr)] has made a [using_map.boss_short] announcement: [input]") centcomm_message_cooldown = 1 spawn(600)//10 minute cooldown centcomm_message_cooldown = 0 @@ -214,7 +214,7 @@ return Syndicate_announce(input, usr) usr << "Message transmitted." - log_say("[key_name(usr)] has made an illegal announcement: [input]") + log_game("[key_name(usr)] has made an illegal announcement: [input]") centcomm_message_cooldown = 1 spawn(600)//10 minute cooldown centcomm_message_cooldown = 0 diff --git a/code/game/machinery/computer3/computers/prisoner.dm b/code/game/machinery/computer3/computers/prisoner.dm index 7e3ada285d..27943bb353 100644 --- a/code/game/machinery/computer3/computers/prisoner.dm +++ b/code/game/machinery/computer3/computers/prisoner.dm @@ -95,7 +95,7 @@ var/obj/item/weapon/implant/I = locate(href_list["warn"]) if( istype(I) && I.imp_in) var/mob/living/carbon/R = I.imp_in - log_say("PrisonComputer3 message: [key_name(usr)]->[key_name(R)] : [warning]") + log_game("PrisonComputer3 message: [key_name(usr)]->[key_name(R)] : [warning]") R << "You hear a voice in your head saying: '[warning]'" interact() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0988ceb879..344f1c9a10 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -599,7 +599,7 @@ About the new airlock wires panel: else if(duration) //electrify door for the given duration seconds if(usr) shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])") - usr.attack_log += text("\[[time_stamp()]\] Electrified the [name] at [x] [y] [z]") + add_attack_logs(usr,name,"Electrified a door") else shockedby += text("\[[time_stamp()]\] - EMP)") message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/game/machinery/kitchen/cooking_machines/fryer.dm index 1fc0e75ef1..7e5cc055e8 100644 --- a/code/game/machinery/kitchen/cooking_machines/fryer.dm +++ b/code/game/machinery/kitchen/cooking_machines/fryer.dm @@ -58,9 +58,7 @@ victim << "Searing hot oil scorches your [E ? E.name : "flesh"]!" if(victim.client) - user.attack_log += text("\[[time_stamp()]\] Has [cook_type] \the [victim] ([victim.ckey]) in \a [src]") - victim.attack_log += text("\[[time_stamp()]\] Has been [cook_type] in \a [src] by [user.name] ([user.ckey])") - msg_admin_attack("[user] ([user.ckey]) [cook_type] \the [victim] ([victim.ckey]) in \a [src]. (JMP)") + add_attack_logs(user,victim,"[cook_type] in [src]") icon_state = off_icon cooking = 0 diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index ceea16ec3b..d695253aa9 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -211,9 +211,7 @@ if(src.occupant.reagents) src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1)) - src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" //One shall not simply gib a mob unnoticed! - user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" - msg_admin_attack("[user.name] ([user.ckey]) gibbed [src.occupant] ([src.occupant.ckey]) (JMP)") + add_attack_logs(user,occupant,"Used [src] to gib") src.occupant.ghostize() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 47fa55be1a..a1a6623ff1 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -208,7 +208,7 @@ /obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times add_fingerprint(user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") + msg_admin_attack("[key_name_admin(user)] primed \a [src]") user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!") if(do_after(user, 10 SECONDS)) playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2e8429edd3..e4e0e55b2c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -476,9 +476,7 @@ var/list/global/slot_flags_enumeration = list( visible_message("[U] attempts to stab [M] in the eyes, but misses!") return - user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") //BS12 EDIT ALG + add_attack_logs(user,M,"Attack eyes with [name]") user.setClickCooldown(user.get_attack_speed()) user.do_attack_animation(M) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 31ce05c43b..2a5554a328 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1169,7 +1169,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" ([reply ? "Reply" : "Unable to Reply"])" new_info(message_silent, ttone, reception_message) - log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]") + log_pda("(PDA: [sending_unit]) sent \"[message]\" to [name]", usr) new_message = 1 update_icon() @@ -1181,7 +1181,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" (Reply) [track]" new_info(message_silent, newstone, reception_message) - log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]") + log_pda("(PDA: [sending_unit]) sent \"[message]\" to [name]",usr) new_message = 1 /obj/item/device/pda/verb/verb_reset_pda() diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index ab893415ac..ebad249bde 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -61,7 +61,7 @@ if (href_list["wipe"]) var/confirm = alert("Are you sure you want to disable this core's power? This cannot be undone once started.", "Confirm Shutdown", "Yes", "No") if(confirm == "Yes" && (CanUseTopic(user, state) == STATUS_INTERACTIVE)) - admin_attack_log(user, carded_ai, "Purged using \the [src.name]", "Was purged with \the [src.name]", "used \the [src.name] to purge") + add_attack_logs(user,carded_ai,"Purged from AI Card") flush = 1 carded_ai.suiciding = 1 carded_ai << "Your power has been disabled!" @@ -110,7 +110,7 @@ new /obj/structure/AIcore/deactivated(get_turf(ai)) ai.carded = 1 - admin_attack_log(user, ai, "Extracted with [src.name]", "Was extracted with [src.name]", "used the [src.name] to extract") + add_attack_logs(user,ai,"Extracted into AI Card") src.name = "[initial(name)] - [ai.name]" ai.loc = src diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index b54c879d68..a39cc82fb4 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -188,7 +188,7 @@ if(text) exonet.send_message(their_address, "text", text) im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text)) - log_pda("[usr] (COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]") + log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]",usr) for(var/mob/M in player_list) if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index c775a70499..fffa0407f8 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -136,7 +136,7 @@ to_chat(src, "You have sent '[text_message]' to [chosen_communicator].") exonet_messages.Add("To [chosen_communicator]:
[text_message]") - log_pda("[usr] (COMM: [src]) sent \"[text_message]\" to [chosen_communicator]") + log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) for(var/mob/M in player_list) if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 9eb4991f69..5d489b8269 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -475,7 +475,7 @@ if(burn_damage > 15 && H.can_feel_pain()) H.emote("scream") - admin_attack_log(user, H, "Electrocuted using \a [src]", "Was electrocuted with \a [src]", "used \a [src] to electrocute") + add_attack_logs(user,H,"Shocked using [name]") /obj/item/weapon/shockpaddles/proc/make_alive(mob/living/carbon/human/M) //This revives the mob var/deadtime = world.time - M.timeofdeath diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index ba812cefd3..53b2d83564 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -59,9 +59,7 @@ /obj/item/device/flash/attack(mob/living/M, mob/living/user, var/target_zone) if(!user || !M) return //sanity - M.attack_log += text("\[[time_stamp()]\] Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to flash [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey]) (JMP)") + add_attack_logs(user,M,"Flashed (attempt) with [src]") user.setClickCooldown(user.get_attack_speed(src)) user.do_attack_animation(M) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 126a4871c9..7820d0c4ea 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -35,9 +35,9 @@ effective or pretty fucking useless. user << "The mind batterer has been burnt out!" return - user.attack_log += text("\[[time_stamp()]\] Used [src] to knock down people in the area.") - + var/list/affected = list() for(var/mob/living/carbon/human/M in orange(10, user)) + affected += M spawn() if(prob(50)) @@ -49,6 +49,8 @@ effective or pretty fucking useless. else M << "You feel a sudden, electric jolt travel through your head." + add_attack_logs(user,affected,"Used a [name]") + playsound(src.loc, 'sound/misc/interference.ogg', 50, 1) user << "You trigger [src]." times_used += 1 diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 729ef1d066..b812fb3c00 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -561,7 +561,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(lit == 1) M.IgniteMob() - msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] and lit them on fire (INTENT: [uppertext(user.a_intent)]) (JMP)") + add_attack_logs(user,M,"Lit on fire with [src]") if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit) var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index febde75f68..ac0a93941b 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -130,10 +130,7 @@ if((buf.types & DNA2_BUF_SE) && (block ? (GetState() && block == MONKEYBLOCK) : GetState(MONKEYBLOCK))) injected_with_monkey = " (MONKEY)" - M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.ckey])") - log_attack("[user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])") - message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with \the [src][injected_with_monkey]") + add_attack_logs(user,M,"[injected_with_monkey] used the [name] on") // Apply the DNA shit. inject(M, user) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 1e1565a2ae..b49a76c5a9 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -55,11 +55,8 @@ loc = null if (ismob(target)) - add_logs(user, target, "planted [name] on") + add_attack_logs(user, target, "planted [name] on with [timer] second fuse") user.visible_message("[user.name] finished planting an explosive on [target.name]!") - message_admins("[key_name(user, user.client)](?) planted [src.name] on [key_name(target)](?) with [timer] second fuse",0,1) - log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse") - else message_admins("[key_name(user, user.client)](?) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1) log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse") diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 46543b901b..bef0f8fcd9 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -179,10 +179,7 @@ H.loc = present - H.attack_log += text("\[[time_stamp()]\] Has been wrapped with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to wrap [H.name] ([H.ckey])") - msg_admin_attack("[key_name(user)] used [src] to wrap [key_name(H)]") - + add_attack_logs(user,H,"Wrapped with [src]") else user << "You need more paper." else diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 0eaf073cfa..92de17d994 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -43,7 +43,7 @@ if(stage > 1 && !active && clown_check(user)) user << "You prime \the [name]!" - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src]. (JMP)") + msg_admin_attack("[key_name_admin(user)] primed \a [src]") activate() add_fingerprint(user) @@ -136,7 +136,7 @@ icon_state = initial(icon_state) + "_active" if(user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") + msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") return diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index b46d987b4c..5854e02cac 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -72,7 +72,7 @@ return if(user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") + msg_admin_attack("[key_name_admin(user)] primed \a [src.name]") icon_state = initial(icon_state) + "_active" active = 1 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index ea838cce0b..dd041bb46a 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -76,9 +76,7 @@ if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime return 0 - H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") - msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]") + add_attack_logs(user,H,"Handcuffed (attempt)") feedback_add_details("handcuffs","H") user.setClickCooldown(user.get_attack_speed(src)) @@ -116,8 +114,7 @@ var/last_chew = 0 var/s = "[H.name] chews on [T.his] [O.name]!" H.visible_message(s, "You chew on your [O.name]!") - H.attack_log += text("\[[time_stamp()]\] [s] ([H.ckey])") - log_attack("[s] ([H.ckey])") + add_attack_logs(H,H,"chewed own [O.name]") if(O.take_damage(3,0,1,1,"teeth marks")) H:UpdateDamageIcon() @@ -283,9 +280,7 @@ var/last_chew = 0 if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime return 0 - H.attack_log += text("\[[time_stamp()]\] Has been legcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to legcuff [H.name] ([H.ckey])") - msg_admin_attack("[key_name(user)] attempted to legcuff [key_name(H)]") + add_attack_logs(user,H,"Legcuffed (attempt)") feedback_add_details("legcuffs","H") user.setClickCooldown(user.get_attack_speed(src)) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 01c302eb52..d99c5f5ff2 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -54,7 +54,7 @@ if(user && M && (get_turf(M) == T1) && src && src.imp) M.visible_message("[M] has been implanted by [user].") - admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on") + add_attack_logs(user,M,"Implanted with [imp.name] using [name]") if(src.imp.implanted(M)) src.imp.loc = M diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index c2ea991d98..68a2c3a774 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -52,9 +52,7 @@ if (istype(location, /turf/simulated)) location.add_blood(H) ///Plik plik, the sound of blood - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP)") + add_attack_logs(user,M,"Hit with [src]") if(prob(15)) M.Weaken(3) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 8938e611c0..b5ae0912e9 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -17,10 +17,7 @@ /obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - - msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") + add_attack_logs(user,M,"Hit with [src] (nullrod)") user.setClickCooldown(user.get_attack_speed(src)) user.do_attack_animation(M) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 82a6d7fdfd..4954553a00 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -306,10 +306,6 @@ if (C.can_feel_pain()) C.emote("scream") - //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. - //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point in this when the mob's about to be deleted - //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" - //log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]") M.death(1) M.ghostize() qdel(M) diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 550b59d112..bb1a62e40b 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -176,9 +176,7 @@ if(pulling) occupant.visible_message("[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!") - pulling.attack_log += "\[[time_stamp()]\] Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]" - occupant.attack_log += "\[[time_stamp()]\] Thrusted into \a [A] by [pulling.name] ([pulling.ckey]) with \the [name]" - msg_admin_attack("[pulling.name] ([pulling.ckey]) has thrusted [occupant.name]'s ([occupant.ckey]) [name] into \a [A] (JMP)") + add_attack_logs(pulling,occupant,"Crashed their [name] into [A]") else occupant.visible_message("[occupant] crashed into \the [A]!") diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 6d6ac626a1..330ad9c322 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -38,7 +38,7 @@ src << "OOC is not allowed during voting." return - log_ooc("[mob.name]/[key] : [msg]") + log_ooc(msg, src) if(msg) handle_spam_prevention(MUTE_OOC) @@ -111,7 +111,7 @@ message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return - log_ooc("(LOCAL) [mob.name]/[key] : [msg]") + log_looc(msg,src) if(msg) handle_spam_prevention(MUTE_OOC) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 39926e1414..e28c4fd570 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -6,13 +6,13 @@ world/IsBanned(key,address,computer_id) //Guest Checking if(!config.guests_allowed && IsGuestKey(key)) - log_access("Failed Login: [key] - Guests not allowed") + log_adminwarn("Failed Login: [key] - Guests not allowed") message_admins("Failed Login: [key] - Guests not allowed") 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 && config.ToRban && ToRban_isbanned(address)) - log_access("Failed Login: [src] - Banned: ToR") + log_adminwarn("Failed Login: [src] - Banned: ToR") message_admins("Failed Login: [src] - Banned: ToR") //ban their computer_id and ckey for posterity AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0) @@ -24,7 +24,7 @@ world/IsBanned(key,address,computer_id) //Ban Checking . = CheckBan( ckey(key), computer_id, address ) if(.) - log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") + log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") message_admins("Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]") return . diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9a5ac33c22..e657c718c0 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -12,7 +12,6 @@ var/global/floorIsLava = 0 C << msg /proc/msg_admin_attack(var/text) //Toggleable Attack Messages - log_attack(text) var/rendered = "ATTACK: [text]" for(var/client/C in admins) if((R_ADMIN|R_MOD) & C.holder.rights) diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm index 967a4375da..f04bdf3b61 100644 --- a/code/modules/admin/admin_attack_log.dm +++ b/code/modules/admin/admin_attack_log.dm @@ -16,7 +16,7 @@ proc/log_and_message_admins_many(var/list/mob/users, var/message) log_admin("[english_list(user_keys)] [message]") message_admins("[english_list(user_keys)] [message]") - +/* Old procs proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message) if(victim) victim.attack_log += text("\[[time_stamp()]\] [key_name(attacker)] - [victim_message]") @@ -42,3 +42,4 @@ proc/admin_inject_log(mob/attacker, mob/victim, obj/item/weapon, reagents, amoun "used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred", "was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred", "used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into") +*/ diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 264e5ad64e..0fdc158227 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -9,7 +9,7 @@ if(!msg) return - log_admin("ADMIN: [key_name(src)] : [msg]") + log_adminsay(msg,src) if(check_rights(R_ADMIN,0)) for(var/client/C in admins) @@ -27,7 +27,7 @@ return msg = sanitize(msg) - log_admin("MOD: [key_name(src)] : [msg]") + log_modsay(msg,src) if (!msg) return @@ -50,7 +50,7 @@ return msg = sanitize(msg) - log_admin("EVENT: [key_name(src)] : [msg]") + log_eventsay(msg,src) if (!msg) return diff --git a/code/modules/admin/verbs/antag-ooc.dm b/code/modules/admin/verbs/antag-ooc.dm index f3a6ffc77c..22689f1718 100644 --- a/code/modules/admin/verbs/antag-ooc.dm +++ b/code/modules/admin/verbs/antag-ooc.dm @@ -39,4 +39,4 @@ if((M.mind && M.mind.special_role && A && A.can_use_aooc) || isobserver(M)) // Antags must have their type be allowed to AOOC to see AOOC. This prevents, say, ERT from seeing AOOC. to_chat(M, "[create_text_tag("aooc", "Antag-OOC:", M.client)] [player_display]: [msg]") - log_ooc("(ANTAG) [key] : [msg]") \ No newline at end of file + log_aooc(msg,src) \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 76de070805..fe37d19f4b 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -252,7 +252,7 @@ //Panic bunker code if (isnum(player_age) && player_age == 0) //first connection if (config.panic_bunker && !holder && !deadmin_holder) - log_access("Failed Login: [key] - New account attempting to connect during panic bunker") + log_adminwarn("Failed Login: [key] - New account attempting to connect during panic bunker") message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") to_chat(src, "Sorry but the server is currently not accepting connections from never before seen players.") qdel(src) diff --git a/code/modules/clothing/rings/rings.dm b/code/modules/clothing/rings/rings.dm index f8ebd5443e..852ccfdb82 100644 --- a/code/modules/clothing/rings/rings.dm +++ b/code/modules/clothing/rings/rings.dm @@ -37,9 +37,9 @@ if(reagents.total_volume) to_chat(H, "You feel a prick as you slip on \the [src].") if(H.reagents) - var/contained_reagents = reagents.get_reagents() + var/contained = reagents.get_reagents() var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD) - admin_inject_log(usr, H, src, contained_reagents, trans) + add_attack_logs(usr, H, "Injected with [name] containing [contained] transferred [trans] units") return //Sleepy Ring diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 745025e3e3..ce24b1852f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -753,7 +753,7 @@ mob/observer/dead/MayRespawn(var/feedback = 0) return 0 var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) if(msg) - log_say("SpectralWhisper: [key_name(usr)]->[M.key] : [msg]") + log_say("(SPECWHISP to [key_name(M)]): [msg]", src) M << " You hear a strange, unidentifiable voice in your head... [msg]" src << " You said: '[msg]' to [M]." else diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 8da03e4de0..c950a84209 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -4,7 +4,7 @@ if (!message) return - log_say("Ghost/[src.key] : [message]") + log_ghostsay(message, src) if (src.client) if(message) @@ -25,7 +25,7 @@ if(act != "me") return - log_emote("Ghost/[src.key] : [message]") + log_ghostemote(message, src) if(src.client) if(message) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index ccd5bb6b6d..f1ccde0a17 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -15,14 +15,13 @@ else input = message if(input) + log_emote(message,src) //Log before we add junk message = "[src] [input]" else return if (message) - log_emote("[name]/[key] : [message]") - message = say_emphasis(message) // Hearing gasp and such every five seconds is not good emotes were not global for a reason. @@ -78,7 +77,7 @@ input = say_emphasis(input) if(input) - log_emote("Ghost/[src.key] : [input]") + log_ghostemote(input, src) if(!invisibility) //If the ghost is made visible by admins or cult. And to see if the ghost has toggled its own visibility, as well. -Mech visible_message("[src] [input]") else diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index b9eb226e12..ef8fc37c19 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -99,7 +99,7 @@ return (copytext(message, length(message)) == "!") ? 2 : 1 /datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - log_say("[key_name(speaker)] : ([name]) [message]") + log_say("(HIVE) [message]", src) if(!speaker_mask) speaker_mask = speaker.name message = format_message(message, get_spoken_verb(message)) diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm index 7a70f22cea..175338e5ff 100644 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ b/code/modules/mob/living/carbon/alien/emote.dm @@ -119,7 +119,7 @@ else 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) diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index cb07a338c7..22efdc76c6 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -63,7 +63,7 @@ src << "Unusable emote '[act]'. Say *help for a list." if (message) - 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)) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 08d0c9384e..18acbda04d 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -101,9 +101,8 @@ G.last_action = world.time flick(G.hud.icon_state, G.hud) - user.attack_log += "\[[time_stamp()]\] Knifed [name] ([ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" - src.attack_log += "\[[time_stamp()]\] Got knifed by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" - msg_admin_attack("[key_name(user)] knifed [key_name(src)] with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" ) + add_attack_logs(user,src,"Knifed (throat slit)") + return 1 /mob/living/carbon/proc/shank_attack(obj/item/W, obj/item/weapon/grab/G, mob/user, hit_zone) @@ -119,9 +118,7 @@ if(W.hitsound) playsound(loc, W.hitsound, 50, 1, -1) - user.attack_log += "\[[time_stamp()]\] Shanked [name] ([ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" - src.attack_log += "\[[time_stamp()]\] Got shanked by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" - msg_admin_attack("[key_name(user)] shanked [key_name(src)] with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" ) + add_attack_logs(user,src,"Knifed (shanked)") return 1 diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 2e6d022b4f..c8348aab30 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -729,10 +729,8 @@ src << "Unusable emote '[act]'. Say *help for a list." if (message) - log_emote("[name]/[key] : [message]") custom_emote(m_type,message) - /mob/living/carbon/human/verb/pose() set name = "Set Pose" set desc = "Sets a description which will be shown when someone examines you." diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 0d89a76944..22a3c24d21 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -66,7 +66,6 @@ log_and_message_admins("broke their [breaking] with *flip, ahahah.", src) if (message) - log_emote("[name]/[key] : [message]") custom_emote(m_type,message) return 1 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index eb32a5a751..6da16a608d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -896,7 +896,7 @@ else target.show_message(" You hear a voice that seems to echo around the room: [say]") usr.show_message(" You project your mind into [target.real_name]: [say]") - log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]") + log_say("(TPATH to [key_name(target)]) [say]",src) for(var/mob/observer/dead/G in world) G.show_message("Telepathic message from [src] to [target]: [say]") diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 159c15ee75..e698258bdb 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -251,9 +251,8 @@ H.visible_message("[attack_message]") playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), 25, 1, -1) - H.attack_log += text("\[[time_stamp()]\] [miss_type ? (miss_type == 1 ? "Missed" : "Blocked") : "[pick(attack.attack_verb)]"] [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] [miss_type ? (miss_type == 1 ? "Was missed by" : "Has blocked") : "Has Been [pick(attack.attack_verb)]"] by [H.name] ([H.ckey])") - msg_admin_attack("[key_name(H)] [miss_type ? (miss_type == 1 ? "has missed" : "was blocked by") : "has [pick(attack.attack_verb)]"] [key_name(src)]") + + add_attack_logs(H,src,"Melee attacked with fists (miss/block)") if(miss_type) return 0 @@ -284,10 +283,8 @@ apply_damage(real_damage, hit_dam_type, hit_zone, armour, soaked, sharp=attack.sharp, edge=attack.edge) if(I_DISARM) - M.attack_log += text("\[[time_stamp()]\] Disarmed [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey])") + add_attack_logs(H,src,"Disarmed") - msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey])") M.do_attack_animation(src) if(w_uniform) @@ -349,8 +346,7 @@ if(!damage) return - user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])") + add_attack_logs(user,src,"Melee attacked with fists (miss/block)",admin_notify = FALSE) //No admin notice since this is usually fighting simple animals src.visible_message("[user] has [attack_message] [src]!") user.do_attack_animation(src) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index e5647682fa..1befd9579b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -65,7 +65,7 @@ emp_act c_hand = r_hand if(c_hand && (stun_amount || agony_amount > 10)) - msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") + msg_admin_attack("[key_name(src)] was disarmed by a stun effect") drop_from_inventory(c_hand) if (affected.robotic >= ORGAN_ROBOT) @@ -403,13 +403,7 @@ emp_act src.visible_message("[src] has been hit in the [hit_area] by [O].") if(ismob(O.thrower)) - var/mob/M = O.thrower - var/client/assailant = M.client - if(assailant) - src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [M.name] ([assailant.ckey])") - M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with a thrown [O]") - if(!istype(src,/mob/living/simple_animal/mouse)) - msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") + add_attack_logs(O.thrower,src,"Hit with thrown [O.name]") //If the armor absorbs all of the damage, skip the rest of the calculations var/soaked = get_armor_soak(affecting, "melee", O.armor_penetration) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index b131e0b558..630c3658a8 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -74,7 +74,7 @@ src << "Not even a [src.species.name] can speak to the dead." return - log_say("[key_name(src)] communed to [key_name(M)]: [text]") + log_say("(COMMUNE to [key_name(M)]) [text]",src) M << "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]" if(istype(M,/mob/living/carbon/human)) @@ -104,7 +104,7 @@ var/msg = sanitize(input("Message:", "Psychic Whisper") as text|null) if(msg) - log_say("PsychicWhisper: [key_name(src)]->[M.key] : [msg]") + log_say("(PWHISPER to [key_name(M)]) [msg]", src) M << "You hear a strange, alien voice in your head... [msg]" src << "You said: \"[msg]\" to [M]" return diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index d67eaf76a9..82ca192181 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -48,8 +48,7 @@ if(istype(A, /obj/item/clothing/accessory/badge) || istype(A, /obj/item/clothing/accessory/medal)) user.visible_message("\The [user] tears off \the [A] from [src]'s [suit.name]!") - attack_log += "\[[time_stamp()]\] Has had \the [A] removed by [user.name] ([user.ckey])" - user.attack_log += "\[[time_stamp()]\] Attempted to remove [name]'s ([ckey]) [A.name]" + add_attack_logs(user,src,"Stripped [A.name] off [suit.name]") A.on_removed(user) suit.accessories -= A update_inv_w_uniform() @@ -81,7 +80,7 @@ return if(stripping) - admin_attack_log(user, src, "Attempted to remove \a [target_slot]", "Target of an attempt to remove \a [target_slot].", "attempted to remove \a [target_slot] from") + add_attack_logs(user,src,"Removed equipment from slot [target_slot]") unEquip(target_slot) else if(user.unEquip(held)) equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1) @@ -108,8 +107,7 @@ if (suit.has_sensor >= 2) user << "\The [src]'s suit sensor controls are locked." return - attack_log += text("\[[time_stamp()]\] Has had their sensors toggled by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to toggle [name]'s ([ckey]) sensors") + add_attack_logs(user,src,"Adjusted suit sensor level") suit.set_sensors(user) // Remove all splints. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index d813fb939b..de188e9336 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1178,15 +1178,9 @@ default behaviour is: //limit throw range by relative mob size throw_range = round(M.throw_range * min(src.mob_size/M.mob_size, 1)) - var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) - if(start_T && end_T) - var/start_T_descriptor = "tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]" - var/end_T_descriptor = "tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]" - - M.attack_log += text("\[[time_stamp()]\] Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]") - usr.attack_log += text("\[[time_stamp()]\] Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]") - msg_admin_attack("[usr.name] ([usr.ckey]) has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor] (JMP)") + if(end_T) + add_attack_logs(src,M,"Thrown via grab to [end_T.x],[end_T.y],[end_T.z]") src.drop_from_inventory(item) if(!item || !isturf(item.loc)) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 61ec68550d..3d9140dd46 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -271,10 +271,7 @@ var/mob/M = O.thrower var/client/assailant = M.client if(assailant) - src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [M.name] ([assailant.ckey])") - M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with a thrown [O]") - if(!istype(src,/mob/living/simple_animal/mouse)) - msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") + add_attack_logs(M,src,"Hit by thrown [O.name]") // Begin BS12 momentum-transfer code. var/mass = 1.5 @@ -337,8 +334,7 @@ return adjustBruteLoss(damage) - user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])") + add_attack_logs(user,src,"Generic attack (probably animal)", admin_notify = FALSE) //Usually due to simple_animal attacks src.visible_message("[user] has [attack_message] [src]!") user.do_attack_animation(src) spawn(1) updatehealth() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 676c55da9a..1661fcc582 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -270,7 +270,7 @@ proc/get_radio_key_from_channel(var/channel) src.custom_emote(1, "[pick(speaking.signlang_verb)].") if (speaking.flags & SIGNLANG) - log_say("[name]/[key] : SIGN: [message]") + log_say("(SIGN) [message]", src) return say_signlang(message, pick(speaking.signlang_verb), speaking) //These will contain the main receivers of the message @@ -366,7 +366,10 @@ proc/get_radio_key_from_channel(var/channel) qdel(I) //Log the message to file - log_say("[name]/[key][whispering ? " (W)" : ""]: [message]") + if(whispering) + log_whisper(message,src) + else + log_say(message, src) return 1 /mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b67f4cd185..bc1a330a27 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -395,7 +395,7 @@ var/list/ai_verbs_default = list( return CentCom_announce(input, usr) usr << "Message transmitted." - log_say("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]") + log_game("[key_name(usr)] has made an IA [using_map.boss_short] announcement: [input]") emergency_message_cooldown = 1 spawn(300) emergency_message_cooldown = 0 diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 9cf8b7c7c6..0beaa78005 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -2,7 +2,7 @@ return ..((sanitize ? sanitize(message) : message), whispering = whispering) /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) /mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) ..() @@ -64,7 +64,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) @@ -111,8 +111,6 @@ /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) @@ -141,6 +139,8 @@ if(O) O.see_emote(src, message) + log_emote("(HPAD) [message]", src) + else //This shouldn't occur, but better safe then sorry. src << "No holopad connected." return 0 diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm index 2290e6ae6a..c34dca00e8 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_captive.dm @@ -15,7 +15,7 @@ message = sanitize(message) if (!message) return - log_say("[key_name(src)] : [message]") + log_say(message,src) if (stat == 2) return say_dead(message) diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm index fdd1615259..baf99ec0e4 100644 --- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm +++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm @@ -27,10 +27,7 @@ user << "This being is corrupted by an alien intelligence and cannot be soul trapped." return..() - M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey]) (JMP)") - + add_attack_logs(user,M,"Soulstone'd with [src.name]") transfer_soul("VICTIM", M, user) return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9f72e59a4b..5bf254583a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -1269,8 +1269,7 @@ var/mob/living/L = target_mob if(prob(melee_miss_chance)) - src.attack_log += text("\[[time_stamp()]\] attacked [L.name] ([L.ckey])") - L.attack_log += text("\[[time_stamp()]\] was attacked by [src.name] ([src.ckey])") + add_attack_logs(src,L,"Animal-attacked (miss)", admin_notify = FALSE) visible_message("[src] misses [L]!") do_attack_animation(src) return L diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 4879c05de3..cf50a44f85 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -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 @@ -18,10 +18,10 @@ if(matches) if(M.client) message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 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("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 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() diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index e6dfd9e0d8..63684680fe 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -2,7 +2,7 @@ nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs player_list -= src disconnect_time = world.realtime - log_access("Logout: [key_name(src)]") + log_access_out(src) if(admin_datums[src.ckey]) if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. var/admins_number = admins.len diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 1602c8cb47..58c530d06c 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -265,9 +265,7 @@ state = GRAB_NECK icon_state = "grabbed+1" assailant.set_dir(get_dir(assailant, affecting)) - affecting.attack_log += "\[[time_stamp()]\] Has had their neck grabbed by [assailant.name] ([assailant.ckey])" - assailant.attack_log += "\[[time_stamp()]\] Grabbed the neck of [affecting.name] ([affecting.ckey])" - msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)]") + add_attack_logs(assailant,affecting,"Neck grabbed") hud.icon_state = "kill" hud.name = "kill" affecting.Stun(10) //10 ticks of ensured grab @@ -277,10 +275,7 @@ state = GRAB_KILL assailant.visible_message("[assailant] has tightened [TU.his] grip on [affecting]'s neck!") - affecting.attack_log += "\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])" - assailant.attack_log += "\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])" - msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]") - + add_attack_logs(assailant,affecting,"Strangled") affecting.setClickCooldown(10) affecting.AdjustLosebreath(1) affecting.set_dir(WEST) diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index a7b82566f2..a497bd0cc5 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -82,9 +82,7 @@ attacker << "You cannot locate any eyes on [target]!" return - attacker.attack_log += text("\[[time_stamp()]\] Attacked [target.name]'s eyes using grab ([target.ckey])") - target.attack_log += text("\[[time_stamp()]\] Had eyes attacked by [attacker.name]'s grab ([attacker.ckey])") - msg_admin_attack("[key_name(attacker)] attacked [key_name(target)]'s eyes using a grab action.") + add_attack_logs(attacker,target,"Eye gouge using grab") attack.handle_eye_attack(attacker, target) @@ -111,9 +109,7 @@ target.visible_message("[target] [target.species.get_knockout_message(target)]") playsound(attacker.loc, "swing_hit", 25, 1, -1) - attacker.attack_log += text("\[[time_stamp()]\] Headbutted [target.name] ([target.ckey])") - target.attack_log += text("\[[time_stamp()]\] Headbutted by [attacker.name] ([attacker.ckey])") - msg_admin_attack("[key_name(attacker)] has headbutted [key_name(target)]") + add_attack_logs(attacker,target,"Headbutted using grab") attacker.drop_from_inventory(src) src.loc = null diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 16cb6db64e..fb73f3d0be 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -326,9 +326,7 @@ var/list/organ_cache = list() if(owner && vital) if(user) - user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [owner.name] ([owner.ckey]) (INTENT: [uppertext(user.a_intent)])" - owner.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])" - msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [owner.name] ([owner.ckey]) (INTENT: [uppertext(user.a_intent)]) (JMP)") + add_attack_logs(user,owner,"Removed vital organ [src.name]") owner.death() owner.can_defib = 0 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7b310ccaa7..d29dc212ac 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -62,17 +62,6 @@ icon_state = "pen" colour = "white" - -/obj/item/weapon/pen/attack(mob/M as mob, mob/user as mob) - if(!ismob(M)) - return - user << "You stab [M] with the pen." -// M << "You feel a tiny prick!" //That's a whole lot of meta! - M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") - return - /* * Reagent pens */ @@ -95,9 +84,9 @@ if(M.can_inject(user,1)) if(reagents.total_volume) if(M.reagents) - var/contained_reagents = reagents.get_reagents() + var/contained = reagents.get_reagents() var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) - admin_inject_log(user, M, src, contained_reagents, trans) + add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units") /* * Sleepy Pens diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bf60bb2100..aa3faa7468 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -410,10 +410,13 @@ if(one_handed_penalty >= 20) to_chat(user, "You struggle to keep \the [src] pointed at the correct position with just one hand!") - if(reflex) - admin_attack_log(user, target, attacker_message = "fired [src] by reflex.", victim_message = "triggered a reflex shot from [src].", admin_message = "shot [target], who triggered gunfire ([src]) by reflex)") + var/target_for_log + if(ismob(target)) + target_for_log = target else - admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].") + target_for_log = "[target.name]" + + add_attack_logs(user,target_for_log,"Fired gun [src.name] ([reflex ? "REFLEX" : "MANUAL"])") //update timing user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) @@ -489,10 +492,14 @@ if(!(target && target.loc)) target = targloc //pointblank = 0 + + var/target_for_log + if(ismob(target)) + target_for_log = target + else + target_for_log = "[target.name]" - log_and_message_admins("Fired [src].") - - //admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].") + add_attack_logs("Unmanned",target_for_log,"Fired [src.name]") //update timing next_fire_time = world.time + fire_delay diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 6b2c52a304..12a107b642 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -52,9 +52,9 @@ var/mob/living/L = hit_atom //unfortuately we don't know where the dart will actually hit, since that's done by the parent. if(L.can_inject() && syringe.reagents) - var/reagent_log = syringe.reagents.get_reagents() - syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD) - admin_inject_log(thrower, L, src, reagent_log, 15, violent=1) + var/contained = syringe.reagents.get_reagents() + var/trans = syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD) + add_attack_logs(thrower,L,"Shot with [src.name] containing [contained], trasferred [trans] units") syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null) syringe.update_icon() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7cf68c5d39..0600125f8a 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -200,17 +200,8 @@ //admin logs if(!no_attack_log) - if(istype(firer, /mob)) - - var/attacker_message = "shot with \a [src.type]" - var/victim_message = "shot with \a [src.type]" - var/admin_message = "shot (\a [src.type])" - - admin_attack_log(firer, target_mob, attacker_message, victim_message, admin_message) - else - if(target_mob) // Sometimes the target_mob gets gibbed or something. - target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with \a [src]" - msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with \a [src] (JMP)") + if(istype(firer, /mob) && istype(target_mob)) + add_attack_logs(firer,target_mob,"Shot with \a [src.type] projectile") //sometimes bullet_act() will want the projectile to continue flying if (result == PROJECTILE_CONTINUE) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index fc89bab93d..b870a55902 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -62,10 +62,7 @@ return 1 var/contained = reagentlist() - target.attack_log += text("\[[time_stamp()]\] Has been splashed with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to splash [target.name] ([target.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) splashed [target.name] ([target.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - + add_attack_logs(user,target,"Splashed with [src.name] containing [contained]") user.visible_message("[target] has been splashed with something by [user]!", "You splash the solution onto [target].") reagents.splash(target, reagents.total_volume) return 1 @@ -126,10 +123,7 @@ other_feed_message_finish(user, target) var/contained = reagentlist() - target.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Fed [name] by [target.name] ([target.ckey]). Reagents: [contained]") - msg_admin_attack("[key_name(user)] fed [key_name(target)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - + add_attack_logs(user,target,"Fed from [src.name] containing [contained]") reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST) feed_sound(user) return 1 diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 33bea945ec..d5a1f0571a 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -88,7 +88,7 @@ var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]]) M.reagents.add_reagent(reagent_ids[mode], t) reagent_volumes[reagent_ids[mode]] -= t - admin_inject_log(user, M, src, reagent_ids[mode], t) + add_attack_logs(user, M, "Borg injected with [reagent_ids[mode]]") user << "[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining." return diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index f15c2faf3f..ee551696cf 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -62,12 +62,8 @@ user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") return - var/mob/living/M = target var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - + add_attack_logs(user,target,"Used [src.name] containing [contained]") trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 37fcd9ace0..c7d10bb97f 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -119,9 +119,8 @@ user.setClickCooldown(user.get_attack_speed(src)) if(!do_mob(user, M)) return - M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") - user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") - msg_admin_attack("[key_name(user)] fed [key_name(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])") + //Do we really care about this + add_attack_logs(user,M,"Fed with [src.name] containing [reagentlist(src)]", admin_notify = FALSE) user.visible_message("[user] feeds [M] [src].") diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index d59982d256..e38d07dcd2 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -59,7 +59,7 @@ if(M.reagents) var/contained = reagentlist() var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) - admin_inject_log(user, M, src, contained, trans) + add_attack_logs(user,M,"Injected with [src.name] containing [contained], trasferred [trans] units") to_chat(user, "[trans] units injected. [reagents.total_volume] units remaining in \the [src].") return diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 403220346f..c93df31ec4 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -59,9 +59,7 @@ user.visible_message("[user] forces [M] to swallow \the [src].") var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained]") - msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") + add_attack_logs(user,M,"Fed a pill containing [contained]") if(reagents && reagents.total_volume) reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) @@ -80,8 +78,7 @@ return to_chat(user, "You dissolve \the [src] in [target].") - user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]") - msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)") + add_attack_logs(user,null,"Spiked [target.name] with a pill containing [reagentlist()]") reagents.trans_to(target, reagents.total_volume) for(var/mob/O in viewers(2, user)) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 033077b00c..28b06a862d 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -216,7 +216,7 @@ if(trans) to_chat(user, "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.") - admin_inject_log(user, target, src, contained, trans) + add_attack_logs(user,target,"Injected with [src.name] containing [contained], trasferred [trans] units") else to_chat(user, "The syringe is empty.") @@ -274,9 +274,7 @@ user.remove_from_mob(src) qdel(src) - user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM)." - target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM)." - msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP)") + add_attack_logs(user,target,"Syringe harmclick") return @@ -292,10 +290,10 @@ var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand - var/contained_reagents = reagents.get_reagents() + var/contained = reagents.get_reagents() var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) if(isnull(trans)) trans = 0 - admin_inject_log(user, target, src, contained_reagents, trans, violent=1) + add_attack_logs(user,target,"Stabbed with [src.name] containing [contained], trasferred [trans] units") break_syringe(target, user) /obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 228d4296ed..e9b59dd14f 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -130,9 +130,8 @@ for (var/mob/C in viewers(src)) C.show_message("[GM.name] has been placed in the [src] by [user].", 3) qdel(G) - usr.attack_log += text("\[[time_stamp()]\] Has placed [GM.name] ([GM.ckey]) in disposals.") - GM.attack_log += text("\[[time_stamp()]\] Has been placed in disposals by [usr.name] ([usr.ckey])") - msg_admin_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit. (JMP)") + + add_attack_logs(user,GM,"Disposals dunked") return if(isrobot(user)) @@ -185,9 +184,7 @@ msg = "[user.name] stuffs [target.name] into the [src]!" user << "You stuff [target.name] into the [src]!" - user.attack_log += text("\[[time_stamp()]\] Has placed [target.name] ([target.ckey]) in disposals.") - target.attack_log += text("\[[time_stamp()]\] Has been placed in disposals by [user.name] ([user.ckey])") - msg_admin_attack("[user] ([user.ckey]) placed [target] ([target.ckey]) in a disposals unit. (JMP)") + add_attack_logs(user,target,"Disposals dunked") else return if (target.client) diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm index 856e7bac2c..0bfe571a8b 100644 --- a/code/modules/resleeving/implant.dm +++ b/code/modules/resleeving/implant.dm @@ -112,7 +112,7 @@ imps -= imp imp.imp_in = M imp.implanted = 1 - admin_attack_log(user, M, "Implanted using \the [src.name] ([imp.name])", "Implanted with \the [src.name] ([imp.name])", "used an implanter, [src.name] ([imp.name]), on") + add_attack_logs(user,M,"Implanted backup implant") if (ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index e1c643b776..f9c14af3a5 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -164,8 +164,8 @@ var/mob/living/carbon/human/D = load D << "You ran over [H]!" visible_message("\The [src] ran over [H]!") + add_attack_logs(D,H,"Ran over with [src.name]") attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") - msg_admin_attack("[D.name] ([D.ckey]) ran over [H.name] ([H.ckey]). (JMP)") else attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 74ef6075fd..42f97676ad 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -56,7 +56,7 @@ if(istype(load, /mob/living/carbon/human)) var/mob/living/D = load D << "You hit [M]!" - msg_admin_attack("[D.name] ([D.ckey]) hit [M.name] ([M.ckey]) with [src]. (JMP)") + add_attack_logs(D,M,"Ran over with [src.name]") //------------------------------------------- diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index 72a6e39980..a7fdae7553 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -209,6 +209,4 @@ M.lastattacker = user if(inserted_battery.battery_effect) - user.attack_log += "\[[time_stamp()]\] Tapped [M.name] ([M.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.name])" - M.attack_log += "\[[time_stamp()]\] Tapped by [user.name] ([user.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.name])" - msg_admin_attack("[key_name(user)] tapped [key_name(M)] with [name] (EFFECT: [inserted_battery.battery_effect.name])" ) + add_attack_logs(user,M,"Anobattery tap ([inserted_battery.battery_effect.name])") From 46f4022852cd914eb7636036b65493b9ea5d0bef Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Mar 2018 15:52:33 -0500 Subject: [PATCH 6/7] VS: Consistent logging changes to match polaris commit --- code/_helpers/logging_vr.dm | 12 +++++------ code/game/objects/structures/morgue_vr.dm | 4 ---- .../station/station_special_abilities_vr.dm | 20 +++++-------------- code/modules/mob/say_vr.dm | 3 +-- .../nifsoft/software/13_soulcatcher.dm | 7 ++++--- code/modules/vehicles/Securitrain_vr.dm | 2 +- code/modules/vehicles/rover_vr.dm | 2 +- code/modules/vore/eating/living_vr.dm | 4 ++-- code/modules/vore/resizing/resize_vr.dm | 10 +++++----- 9 files changed, 25 insertions(+), 39 deletions(-) diff --git a/code/_helpers/logging_vr.dm b/code/_helpers/logging_vr.dm index 2f4c48acc6..b87da0a8b5 100644 --- a/code/_helpers/logging_vr.dm +++ b/code/_helpers/logging_vr.dm @@ -1,11 +1,11 @@ -/proc/log_nsay(text,inside) +/proc/log_nsay(text, inside, mob/speaker) if (config.log_say) - diary << "\[[time_stamp()]]NSAY (NIF:[inside]): [text][log_end]" + diary << "\[[time_stamp()]]NSAY (NIF:[inside]): [speaker.simple_info_line()]: [text][log_end]" -/proc/log_nme(text,inside) +/proc/log_nme(text, inside, mob/speaker) if (config.log_emote) - diary << "\[[time_stamp()]]NME (NIF:[inside]): [text][log_end]" + diary << "\[[time_stamp()]]NME (NIF:[inside]): [speaker.simple_info_line()]: [text][log_end]" -/proc/log_subtle(text) +/proc/log_subtle(text, mob/speaker) if (config.log_emote) - diary << "\[[time_stamp()]]SUBTLE: [text][log_end]" + diary << "\[[time_stamp()]]SUBTLE: [speaker.simple_info_line()]: [text][log_end]" diff --git a/code/game/objects/structures/morgue_vr.dm b/code/game/objects/structures/morgue_vr.dm index abe82bdbac..eaf27b5ad0 100644 --- a/code/game/objects/structures/morgue_vr.dm +++ b/code/game/objects/structures/morgue_vr.dm @@ -44,10 +44,6 @@ if (C.can_feel_pain()) C.emote("scream") - //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. - //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point in this when the mob's about to be deleted - //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" - //log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]") M.death(1) M.ghostize() qdel(M) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index fe1d90aae1..036cd1cc9d 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -437,9 +437,7 @@ C.absorbing_prey = 0 to_chat(C, "You have completely drained [T], causing them to pass out.") to_chat(T, "You feel weak, as if you have no control over your body whatsoever as [C] finishes draining you.!") - T.attack_log += text("\[[time_stamp()]\] Was drained by [key_name(C)]") - C.attack_log += text("\[[time_stamp()]\] Drained [key_name(T)]") - msg_admin_attack("[key_name(T)] was completely drained of all nutrition by [key_name(C)]") + add_attack_logs(C,T,"Succubus drained") return if(!do_mob(src, T, 50) || G.state != GRAB_NECK) //One drain tick every 5 seconds. @@ -516,9 +514,7 @@ absorbing_prey = 0 to_chat(src, "You have completely drained [T], killing them.") to_chat(T, "You feel... So... Weak...") - T.attack_log += text("\[[time_stamp()]\] Was drained by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Drained [key_name(T)]") - msg_admin_attack("[key_name(T)] was completely drained of all nutrition by [key_name(src)]") + add_attack_logs(src,T,"Succubus drained (almost lethal)") return if(drain_finalized == 1 || T.getBrainLoss() < 55) //Let's not kill them with this unless the drain is finalized. This will still stack up to 55, since 60 is lethal. T.adjustBrainLoss(5) //Will kill them after a short bit! @@ -533,9 +529,7 @@ to_chat(src, "You have completely drained [T], killing them in the process.") to_chat(T, "You... Feel... So... Weak...") visible_message("[src] seems to finish whatever they were doing to [T].") - T.attack_log += text("\[[time_stamp()]\] Was drained by [key_name(src)]") - src.attack_log += text("\[[time_stamp()]\] Drained [key_name(T)]") - msg_admin_attack("[key_name(T)] was completely drained of all nutrition by [key_name(src)]") + add_attack_logs(src,T,"Succubus drained (lethal)") return if(!do_mob(src, T, 50) || G.state != GRAB_NECK) //One drain tick every 5 seconds. @@ -595,9 +589,7 @@ C.absorbing_prey = 0 to_chat(C, "You have completely fed [T] every part of your body!") to_chat(T, "You feel quite strong and well fed, as [C] finishes feeding \himself to you!") - T.attack_log += text("\[[time_stamp()]\] Was fed via slime feed by [key_name(C)]") - C.attack_log += text("\[[time_stamp()]\] Fed via slime feed [key_name(T)]") - msg_admin_attack("[key_name(C)] fed [key_name(T)] via slime feed, resulting in them being eaten!") + add_attack_logs(C,T,"Slime fed") C.feed_grabbed_to_self_falling_nom(T,C) //Reused this proc instead of making a new one to cut down on code usage. return @@ -740,9 +732,7 @@ T.apply_damage(25, BRUTE, T_ext) visible_message("[src] severely damages [T]'s [T_ext.name]!") - src.attack_log += text("\[[time_stamp()]\] Shred_limb'd [T.real_name] ([T.ckey])") - T.attack_log += text("\[[time_stamp()]\] [src.real_name] ([src.ckey]) shred_limb'd me") - msg_admin_attack("[src.real_name] ([src.ckey]) shredded (shred_limb) [T.real_name] ([T.ckey]) (JMP)") + add_attack_logs(src,T,"Shredded (hardvore)") /mob/living/proc/flying_toggle() set name = "Toggle Flight" diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index c0e7c6b9ce..5153a3c23f 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -36,13 +36,12 @@ input = message if(input) + log_subtle(message,src) message = "[src] [input]" else return if (message) - log_subtle("[name]/[key] : [message]") - var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote var/list/vis_mobs = vis["mobs"] var/list/vis_objs = vis["objs"] diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 8bd92831dc..dfa9e87246 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -77,7 +77,6 @@ proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) var/sender_name = eyeobj ? eyeobj.name : sender.name - log_nsay("[sender_name]/[sender.key] : [message]",nif.human) //AR Projecting if(eyeobj) @@ -85,15 +84,15 @@ //Not AR Projecting else - log_nsay("[sender_name]/[sender.key] : [message]",nif.human) to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender_name] speaks, \"[message]\"") for(var/brainmob in brainmobs) var/mob/living/carbon/brain/caught_soul/CS = brainmob to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender_name] speaks, \"[message]\"") + log_nsay(message,nif.human.real_name,src) + proc/emote_into(var/message, var/mob/living/sender, var/mob/eyeobj) var/sender_name = eyeobj ? eyeobj.name : sender.name - log_nme("[sender_name]/[sender.key] : [message]",nif.human) //AR Projecting if(eyeobj) @@ -106,6 +105,8 @@ var/mob/living/carbon/brain/caught_soul/CS = brainmob to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender_name] [message]") + log_nme(message,nif.human.real_name,src) + proc/show_settings(var/mob/living/carbon/human/H) set waitfor = FALSE var/settings_list = list( diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm index 01ff285ada..2ab76f315c 100644 --- a/code/modules/vehicles/Securitrain_vr.dm +++ b/code/modules/vehicles/Securitrain_vr.dm @@ -183,8 +183,8 @@ var/mob/living/carbon/human/D = load to_chat(D, "You ran over \the [H]!" visible_message("\The [src] ran over \the [H]!") + add_attack_logs(D,H,"Ran over with [src.name]") attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") - msg_admin_attack("[D.name] ([D.ckey]) ran over [H.name] ([H.ckey]). (JMP)") else attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm index aec7254bf7..3d7892b4b2 100644 --- a/code/modules/vehicles/rover_vr.dm +++ b/code/modules/vehicles/rover_vr.dm @@ -182,8 +182,8 @@ var/mob/living/carbon/human/D = load to_chat(D, "You ran over \the [H]!") visible_message("\The [src] ran over \the [H]!") + add_attack_logs(D,H,"Ran over with [src.name]") attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") - msg_admin_attack("[D.name] ([D.ckey]) ran over [H.name] ([H.ckey]). (JMP)") else attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index a1ce795bcc..1482e226b8 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -414,9 +414,9 @@ // Inform Admins if (pred == user) - msg_admin_attack("[key_name(pred)] ate [key_name(prey)]. ([pred ? "JMP" : "null"])") + add_attack_logs(pred,prey,"Eaten via [belly.name]") else - msg_admin_attack("[key_name(user)] forced [key_name(pred)] to eat [key_name(prey)]. ([pred ? "JMP" : "null"])") + add_attack_logs(user,pred,"Forced to eat [key_name(prey)]") return 1 // diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index d76955eb7f..05f9a377e2 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -233,7 +233,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 tmob.resting = 1 //Force them down to the ground. //Log it for admins (as opposed to walk which logs damage) - admin_attack_log(src, tmob, "Pinned [tmob.name] under foot.", "Was pinned under foot by [src.name].", "Pinned [tmob.name] under foot.") + add_attack_logs(src,tmob,"Pinned underfoot") //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) @@ -255,7 +255,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 tmob.resting = 1 //Log it for admins (as opposed to run which logs no damage) - admin_attack_log(src, tmob, "Pinned [tmob.name] under foot for [damage] HALLOSS.", "Was pinned under foot by [src.name] for [damage] HALLOSS.", "Pinned [tmob.name] under foot for [damage] HALLOSS.") + add_attack_logs(src,tmob,"Pinned underfoot (+HALLOSS)") //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) @@ -306,7 +306,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 for(var/obj/item/organ/external/I in Ht.organs) I.take_damage(calculated_damage, 0) // 5 damage min, 26.25 damage max, depending on size & RNG. If they're only stepped on once, the damage will (probably not...) heal over time. Ht.drip(0.1) - admin_attack_log(src, Ht, "crushed [Ht] under foot for [calculated_damage * 11] damage.", "Was crushed under foot by [Ht] for [calculated_damage * 11] damage.", "Crushed [Ht] for [damage * 10] damage.") + add_attack_logs(src,tmob,"Crushed underfoot") //Walking on I_HURT else @@ -318,7 +318,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 for(var/obj/item/organ/I in Ht.organs) I.take_damage(calculated_damage, 0) Ht.drip(3) - admin_attack_log(src, Ht, "Crushed [Ht] under foot for [calculated_damage * 11] damage.", "Was crushed under foot by [Ht] for [calculated_damage * 11] damage.", "Crushed [Ht] for [calculated_damage * 11] damage.") + add_attack_logs(src,tmob,"Crushed underfoot") //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) @@ -347,7 +347,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 forceMove(tmob.loc) //Log it for admins (still a mechanical attack due to the pin) - admin_attack_log(src, tmob, "Pinned (grab w/ shoes) [tmob.name] under foot.", "Was pinned (grab w/ shoes) under foot by [src.name].", "Pinned (grab w/ shoes) [tmob.name] under foot.") + add_attack_logs(src,tmob,"Pinned (grab w/ shoes) underfoot") //Not a human, or not a taur while wearing shoes = no grab if(!H || (!isTaurTail(H.tail_style) && H.shoes)) From fae2b48eab73ea8ec603599226ff04def20f82e6 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Mar 2018 17:17:16 -0500 Subject: [PATCH 7/7] POLARIS: Moves daily logs into being folders rather than files --- code/_helpers/logging.dm | 6 +++++- code/controllers/subsystems/atoms.dm | 4 +--- code/controllers/subsystems/garbage.dm | 3 +-- code/controllers/subsystems/overlays.dm | 4 +--- code/global.dm | 3 +++ code/modules/admin/verbs/getlogs.dm | 7 ++++++- code/modules/error_handler/error_handler.dm | 8 ++++---- code/world.dm | 10 ++++++---- 8 files changed, 27 insertions(+), 18 deletions(-) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 29b72ff6f7..06b9fc72fa 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -27,7 +27,7 @@ /proc/log_debug(text) if (config.log_debug) - diary << "\[[time_stamp()]]DEBUG: [text][log_end]" + debug_log << "\[[time_stamp()]]DEBUG: [text][log_end]" for(var/client/C in admins) if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) @@ -112,6 +112,10 @@ if(config.log_world_output) diary << "\[[time_stamp()]]DD_OUTPUT: [text][log_end]" +/proc/log_error(text) + world.log << text + error_log << "\[[time_stamp()]]RUNTIME: [text][log_end]" + /proc/log_misc(text) diary << "\[[time_stamp()]]MISC: [text][log_end]" diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm index 6b5669878c..5b09b186bb 100644 --- a/code/controllers/subsystems/atoms.dm +++ b/code/controllers/subsystems/atoms.dm @@ -135,9 +135,7 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/Shutdown() var/initlog = InitLog() if(initlog) - //text2file(initlog, "[GLOB.log_directory]/initialize.log") - var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - text2file(initlog, "data/logs/[date_string]-initialize.log") + text2file(initlog, "[log_path]-initialize.log") #undef BAD_INIT_QDEL_BEFORE #undef BAD_INIT_DIDNT_INIT diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index eff85a3627..b4d43a8d3f 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -81,8 +81,7 @@ SUBSYSTEM_DEF(garbage) dellog += "\tIgnored force: [I.no_respect_force] times" if (I.no_hint) dellog += "\tNo hint: [I.no_hint] times" - var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - text2file(dellog.Join(), "data/logs/[date_string]-qdel.log") + text2file(dellog.Join(), "[log_path]-qdel.log") /datum/controller/subsystem/garbage/fire() //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 352102e175..ed9b81016f 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -29,9 +29,7 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B /datum/controller/subsystem/overlays/Shutdown() - //text2file(render_stats(stats), "[GLOB.log_directory]/overlay.log") - var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - text2file(render_stats(stats), "data/logs/[date_string]-overlay.log") + text2file(render_stats(stats), "[log_path]-overlay.log") /datum/controller/subsystem/overlays/Recover() overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches diff --git a/code/global.dm b/code/global.dm index f2a79c8868..c77cd68011 100644 --- a/code/global.dm +++ b/code/global.dm @@ -21,7 +21,10 @@ var/global/list/global_map = null // Noises made when hit while typing. var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") +var/log_path = "data/logs/" //See world.dm for the full calculated path var/diary = null +var/error_log = null +var/debug_log = null var/href_logfile = null // var/station_name = "Northern Star" // var/const/station_orig = "Northern Star" //station_name can't be const due to event prefix/suffix diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index eac11fcac0..3f6e4c9e74 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -85,7 +85,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 = "[log_path].log" if( fexists(path) ) src << run( file(path) ) else @@ -99,7 +99,10 @@ set category = "Admin" set name = "Show Server Attack Log" set desc = "Shows today's server attack log." + + to_chat(usr,"This verb doesn't actually do anything.") + /* var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log" if( fexists(path) ) src << run( file(path) ) @@ -109,3 +112,5 @@ usr << run( file(path) ) feedback_add_details("admin_verb","SSAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return + */ + \ No newline at end of file diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index de71bfc1ca..db3843a8c9 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -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_error("\[[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_error("\[[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,9 +95,9 @@ 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_error("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]") for(var/line in desclines) - log_to_dd(line) + log_error(line) if(error_cache) error_cache.logError(e, desclines, e_src = e_src) diff --git a/code/world.dm b/code/world.dm index 635aa8d537..ed3b5efb9b 100644 --- a/code/world.dm +++ b/code/world.dm @@ -42,10 +42,12 @@ var/global/datum/global_init/init = new () /world/New() world.log << "Map Loading Complete" //logs - var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - href_logfile = file("data/logs/[date_string] hrefs.htm") - diary = file("data/logs/[date_string].log") - diary << "[log_end]\n[log_end]\nStarting up. [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]" + log_path += time2text(world.realtime, "YYYY/MM-Month/DD-Day/round-hh-mm-ss") + diary = file("[log_path].log") + href_logfile = file("[log_path]-hrefs.htm") + error_log = file("[log_path]-error.log") + debug_log = file("[log_path]-debug.log") + debug_log << "[log_end]\n[log_end]\nStarting up. [time_stamp()][log_end]\n---------------------[log_end]" changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently if(byond_version < RECOMMENDED_VERSION)