From 86f52910a12d7e06a4914c31456af79425349b54 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Thu, 28 May 2015 22:23:37 +0100 Subject: [PATCH 1/2] Fixes #5945, de-copy-pastes parapens and sleepypens Harm-syringes, hyposprays, parapens and sleepypens now all respect armour, and produce admin logs for transferred reagents if any are transferred. --- code/datums/supplypacks.dm | 2 +- code/game/gamemodes/game_mode.dm | 2 +- .../items/weapons/storage/uplink_kits.dm | 2 +- code/modules/paperwork/pen.dm | 81 +++++++++---------- .../reagents/reagent_containers/hypospray.dm | 6 +- .../reagents/reagent_containers/syringes.dm | 17 +++- .../research/xenoarchaeology/finds/finds.dm | 2 +- 7 files changed, 58 insertions(+), 54 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fa408d1b8f..adedddad1b 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -33,7 +33,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb, - /obj/item/weapon/pen/paralysis, + /obj/item/weapon/pen/reagent/paralysis, /obj/item/weapon/grenade/chem_grenade/incendiary) cost = 20 containertype = /obj/structure/closet/crate diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 93168d7877..03e6aa14de 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -86,7 +86,7 @@ var/global/list/additional_antag_types = list() new/datum/uplink_item(/obj/item/weapon/soap/syndie, 1, "Subversive Soap", "SP"), new/datum/uplink_item(/obj/item/weapon/cane/concealed, 2, "Concealed Cane Sword", "CC"), new/datum/uplink_item(/obj/item/weapon/cartridge/syndicate, 3, "Detomatix PDA Cartridge", "DC"), - new/datum/uplink_item(/obj/item/weapon/pen/paralysis, 3, "Paralysis Pen", "PP"), + new/datum/uplink_item(/obj/item/weapon/pen/reagent/paralysis, 3, "Paralysis Pen", "PP"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/cigarette, 4, "Cigarette Kit", "BH"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/toxin, 4, "Random Toxin - Beaker", "RT") ), diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 085e23f9b6..b33d72f6fb 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -11,7 +11,7 @@ if("stealth") new /obj/item/weapon/gun/energy/crossbow(src) - new /obj/item/weapon/pen/paralysis(src) + new /obj/item/weapon/pen/reagent/paralysis(src) new /obj/item/device/chameleon(src) return diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0d052d9114..4414f4f8f0 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -51,66 +51,59 @@ msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") return +/* + * Reagent pens + */ + +/obj/item/weapon/pen/reagent + flags = OPENCONTAINER + slot_flags = SLOT_BELT + +/obj/item/weapon/pen/reagent/New() + ..() + create_reagents(30) + +/obj/item/weapon/pen/reagent/attack(mob/living/M as mob, mob/user as mob) + + if(!istype(M)) + return + + . = ..() + + if(M.can_inject(user,1)) + if(reagents.total_volume) + if(M.reagents) + var/list/contained_reagents = list() + for(var/datum/reagent/R in reagents.reagent_list) + contained_reagents += R.name + M.attack_log += "\[[time_stamp()]\] Injected by [user.name] ([user.ckey]) with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]" + user.attack_log += "\[[time_stamp()]\] Injected [M.name] ([M.ckey]) with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]" + msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]") + reagents.trans_to_mob(M, 30, CHEM_BLOOD) + /* * Sleepy Pens */ -/obj/item/weapon/pen/sleepypen +/obj/item/weapon/pen/reagent/sleepy desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - flags = OPENCONTAINER - slot_flags = SLOT_BELT origin_tech = "materials=2;syndicate=5" - -/obj/item/weapon/pen/sleepypen/New() - var/datum/reagents/R = new/datum/reagents(30) //Used to be 300 - reagents = R - R.my_atom = src - R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N +/obj/item/weapon/pen/reagent/sleepy/New() ..() - return - - -/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) - if(!(istype(M,/mob))) - return - ..() - if(reagents.total_volume) - if(M.reagents) reagents.trans_to_mob(M, 50, CHEM_BLOOD) //used to be 150 - return + reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N /* * Parapens */ - /obj/item/weapon/pen/paralysis - flags = OPENCONTAINER - slot_flags = SLOT_BELT + /obj/item/weapon/pen/reagent/paralysis origin_tech = "materials=2;syndicate=5" - -/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) - - if(!(istype(M,/mob))) - return - +/obj/item/weapon/pen/reagent/paralysis/New() ..() - - - if(M.can_inject(user,1)) - if(reagents.total_volume) - if(M.reagents) reagents.trans_to_mob(M, 50, CHEM_BLOOD) - return - - -/obj/item/weapon/pen/paralysis/New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - R.add_reagent("zombiepowder", 10) - R.add_reagent("cryptobiolin", 15) - ..() - return + reagents.add_reagent("zombiepowder", 10) + reagents.add_reagent("cryptobiolin", 15) /* * Chameleon pen diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index c5153510d7..26b61f0cf7 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -19,17 +19,19 @@ reagents.add_reagent("tricordrazine", 30) return -/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob) +/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) if(!reagents.total_volume) user << "[src] is empty." return if (!istype(M)) return + if(!M.can_inject(user, 1)) + return + user << "You inject [M] with [src]." M << "You feel a tiny prick!" if(M.reagents) - var/contained = reagentlist() M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey]). Reagents: [contained]") user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.key]). Reagents: [contained]") diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index c7f869802b..6f306bf1e9 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -219,10 +219,6 @@ proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) - user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - target.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 [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") - if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target @@ -244,6 +240,11 @@ O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) 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)") + return user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!") @@ -255,7 +256,15 @@ user.visible_message("[user] stabs [target] with [src.name]!") target.take_organ_damage(3)// 7 is the same as crowbar punch + + var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand + var/list/contained_reagents = list() + for(var/datum/reagent/R in reagents.reagent_list) + contained_reagents += R.name + user.attack_log += "\[[time_stamp()]\] Stabbed [target.name] ([target.ckey]) with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)" + target.attack_log += "\[[time_stamp()]\] Stabbed by [user.name] ([user.ckey]) with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)" + msg_admin_attack("[key_name_admin(user)] stabbed [key_name_admin(target)] with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)") reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) break_syringe(target, user) diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index e4520e1378..84799cc552 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -254,7 +254,7 @@ if(prob(75)) new_item = new /obj/item/weapon/pen(src.loc) else - new_item = new /obj/item/weapon/pen/sleepypen(src.loc) + new_item = new /obj/item/weapon/pen/reagent/sleepy(src.loc) if(prob(30)) apply_image_decorations = 1 if(16) From 76daebe0dba9a6aa98dc879598cfa419f0e54941 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Fri, 29 May 2015 16:57:42 +0100 Subject: [PATCH 2/2] More consistent logging via admin_inject_log proc --- code/defines/procs/admin.dm | 11 ++++++++++ code/modules/paperwork/pen.dm | 11 +++------- .../reagents/reagent_containers/hypospray.dm | 5 +---- .../reagents/reagent_containers/syringes.dm | 20 ++++++------------- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index 6c5f27fa07..bf16c5267d 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -34,3 +34,14 @@ proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var for(var/mob/victim in victims) admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message) + +proc/admin_inject_log(mob/attacker, mob/victim, obj/item/weapon, reagents, amount_transferred, violent=0) + if(violent) + violent = "violently " + else + violent = "" + admin_attack_log(attacker, + victim, + "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/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 4414f4f8f0..5f0918238b 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -73,14 +73,9 @@ if(M.can_inject(user,1)) if(reagents.total_volume) if(M.reagents) - var/list/contained_reagents = list() - for(var/datum/reagent/R in reagents.reagent_list) - contained_reagents += R.name - M.attack_log += "\[[time_stamp()]\] Injected by [user.name] ([user.ckey]) with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]" - user.attack_log += "\[[time_stamp()]\] Injected [M.name] ([M.ckey]) with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]" - msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with \the [src] (INTENT: [uppertext(user.a_intent)]) Reagents: [english_list(contained_reagents)]") - reagents.trans_to_mob(M, 30, CHEM_BLOOD) - + var/contained_reagents = reagents.get_reagents() + var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) + admin_inject_log(user, M, src, contained_reagents, trans) /* * Sleepy Pens diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 26b61f0cf7..246c7ad97c 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -33,11 +33,8 @@ if(M.reagents) var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) + admin_inject_log(user, M, src, contained, trans) user << "[trans] units injected. [reagents.total_volume] units remaining in \the [src]." return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 6f306bf1e9..a221c31b10 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -171,16 +171,11 @@ user.visible_message("[user] injects [target] with the syringe!") - if(istype(target, /mob/living)) - var/mob/living/M = target - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - var/trans if(ismob(target)) + var/contained = reagentlist() trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) + admin_inject_log(user, target, src, contained, trans) else trans = reagents.trans_to(target, amount_per_transfer_from_this) user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units." @@ -259,13 +254,10 @@ var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand - var/list/contained_reagents = list() - for(var/datum/reagent/R in reagents.reagent_list) - contained_reagents += R.name - user.attack_log += "\[[time_stamp()]\] Stabbed [target.name] ([target.ckey]) with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)" - target.attack_log += "\[[time_stamp()]\] Stabbed by [user.name] ([user.ckey]) with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)" - msg_admin_attack("[key_name_admin(user)] stabbed [key_name_admin(target)] with \the [src] (INTENT: HARM). Reagents: [english_list(contained_reagents)] ([syringestab_amount_transferred]u total)") - reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) + var/contained_reagents = 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) break_syringe(target, user) proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)