From d58087c18c6b848f43961bf883dda9a1fd9997ba Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Wed, 27 May 2020 16:44:19 -0400 Subject: [PATCH 1/2] Fix medical stack exploit --- code/game/objects/items/stacks/medical.dm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 20f098e5d19..acf17d97359 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -24,6 +24,11 @@ to_chat(user, "You don't have the dexterity to do this!") return 1 + var/available = get_amount() + if(!available) + to_chat(user, "There's not enough [uses_charge ? "charge" : "items"] left to use that!") + return 1 + if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) @@ -101,11 +106,12 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ "You start bandaging [M]'s [affecting.name]." ) var/used = 0 for (var/datum/wound/W in affecting.wounds) - if (W.internal) + if(W.internal) continue if(W.bandaged) continue @@ -119,6 +125,10 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) @@ -164,6 +174,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 @@ -182,6 +193,10 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) @@ -271,6 +286,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 @@ -287,6 +303,11 @@ if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check. to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) From ea8c29acc812c772f281922890896eee8d2bc966 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Wed, 27 May 2020 16:44:37 -0400 Subject: [PATCH 2/2] VS: Dogborg clotter --- code/game/objects/items/stacks/medical_vr.dm | 57 +++++++++++++++++- .../silicon/robot/robot_modules/station_vr.dm | 9 +++ icons/obj/stacks_vr.dmi | Bin 4676 -> 5249 bytes 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/medical_vr.dm b/code/game/objects/items/stacks/medical_vr.dm index eda72a3fce9..4599bb43f9c 100644 --- a/code/game/objects/items/stacks/medical_vr.dm +++ b/code/game/objects/items/stacks/medical_vr.dm @@ -18,4 +18,59 @@ if(9) icon_state = "[initial(icon_state)]_9" else - icon_state = "[initial(icon_state)]_10" \ No newline at end of file + icon_state = "[initial(icon_state)]_10" + + +/obj/item/stack/medical/advanced/clotting + name = "liquid bandage kit" + singular_name = "liquid bandage kit" + desc = "A spray that stops bleeding using a patented chemical cocktail. Non-refillable. Only one use required per patient." + icon_state = "clotkit" + heal_burn = 0 + heal_brute = 2 // Only applies to non-humans, to give this some slight application on animals + origin_tech = list(TECH_BIO = 3) + apply_sounds = list('sound/effects/spray.ogg', 'sound/effects/spray2.ogg', 'sound/effects/spray3.ogg') + amount = 5 + max_amount = 5 + +/obj/item/stack/medical/advanced/clotting/attack(mob/living/carbon/human/H, var/mob/user) + if(..()) + return 1 + + if(!istype(H)) + return + + var/clotted = 0 + var/too_far_gone = 0 + + for(var/org in H.organs) //'organs' is just external organs, as opposed to 'internal_organs' + var/obj/item/organ/external/affecting = org + + // No amount of clotting is going to help you here. + if(affecting.open) + too_far_gone++ + continue + + for(var/wnd in affecting.wounds) + var/datum/wound/W = wnd + // No need + if(W.bandaged) + continue + // It's not that amazing + if(W.internal) + continue + if(W.current_stage <= W.max_bleeding_stage) + clotted++ + W.bandage() + + var/healmessage = "You spray [src] onto [H], sealing [clotted ? clotted : "no"] wounds." + if(too_far_gone) + healmessage += " You can see some wounds that are too large where the spray is not taking effect." + + to_chat(user, healmessage) + use(1) + playsound(src, pick(apply_sounds), 25) + update_icon() + +/obj/item/stack/medical/advanced/clotting/update_icon() + icon_state = "[initial(icon_state)]_[amount]" \ No newline at end of file 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 8d368233df9..7f7d601c330 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 @@ -252,6 +252,15 @@ src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(2000) + synths += medicine + + var/obj/item/stack/medical/advanced/clotting/C = new (src) + C.uses_charge = 1 + C.charge_costs = list(1000) + C.synths = list(medicine) + src.modules += C + var/datum/matter_synth/water = new /datum/matter_synth(500) water.name = "Water reserves" water.recharge_rate = 0 diff --git a/icons/obj/stacks_vr.dmi b/icons/obj/stacks_vr.dmi index 54fe25d911f887c70483b72ec959a9272ca5ab10..34d49af81bcdde7f5afe0af4e6eb366d69a0fdac 100644 GIT binary patch literal 5249 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 aglb=<8Cej8U!eS21dOhk>(%PG#Qzr;_YGhG literal 4676 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