From 42c762ccd22db63550390d9e5f854656dea0450d Mon Sep 17 00:00:00 2001
From: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com>
Date: Sat, 2 Sep 2023 00:02:34 +0200
Subject: [PATCH] Using medicine on yourself on activate (#21955)
* now you can use patches, pills, injectors
* more supported meds
* apply proc
---
code/game/objects/items/stacks/medical_packs.dm | 8 +++++++-
.../reagents/reagent_containers/applicator.dm | 7 ++++++-
.../reagents/reagent_containers/hypospray.dm | 13 ++++++++++++-
code/modules/reagents/reagent_containers/pill.dm | 8 +++++++-
4 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/code/game/objects/items/stacks/medical_packs.dm b/code/game/objects/items/stacks/medical_packs.dm
index b97266aabd7..619d33831a7 100644
--- a/code/game/objects/items/stacks/medical_packs.dm
+++ b/code/game/objects/items/stacks/medical_packs.dm
@@ -17,7 +17,7 @@
var/stop_bleeding = 0
var/healverb = "bandage"
-/obj/item/stack/medical/attack(mob/living/M, mob/user)
+/obj/item/stack/medical/proc/apply(mob/living/M, mob/user)
if(get_amount() <= 0)
if(is_cyborg)
to_chat(user, "You don't have enough energy to dispense more [singular_name]\s!")
@@ -77,6 +77,12 @@
"You apply [src] on [M].")
use(1)
+/obj/item/stack/medical/attack(mob/living/M, mob/user)
+ return apply(M, user)
+
+/obj/item/stack/medical/attack_self(mob/user)
+ return apply(user, user)
+
/obj/item/stack/medical/proc/heal(mob/living/M, mob/user)
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_selected)
diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm
index d17b4fea4b8..83ecbc4a76e 100644
--- a/code/modules/reagents/reagent_containers/applicator.dm
+++ b/code/modules/reagents/reagent_containers/applicator.dm
@@ -62,7 +62,7 @@
applicator_bar.icon_state = "app_e"
. += applicator_bar
-/obj/item/reagent_containers/applicator/attack(mob/living/M, mob/user)
+/obj/item/reagent_containers/applicator/proc/apply(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "[src] is empty!")
return
@@ -93,6 +93,11 @@
update_icon()
user.changeNext_move(CLICK_CD_MELEE)
+/obj/item/reagent_containers/applicator/attack(mob/living/M, mob/user)
+ return apply(M, user)
+
+/obj/item/reagent_containers/applicator/attack_self(mob/user)
+ return apply(user, user)
/obj/item/reagent_containers/applicator/proc/apply_to(mob/living/carbon/M, mob/user, multiplier = 1, show_message = TRUE)
var/total_applied_amount = applied_amount * multiplier
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 0ecd916900e..17b119a69d3 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -18,7 +18,7 @@
var/ignore_flags = FALSE
var/safety_hypo = FALSE
-/obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user)
+/obj/item/reagent_containers/hypospray/proc/apply(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "[src] is empty!")
return
@@ -52,6 +52,12 @@
reagents.reaction(M, REAGENT_INGEST, 0.1)
return TRUE
+/obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user)
+ return apply(M, user)
+
+/obj/item/reagent_containers/hypospray/attack_self(mob/user)
+ return apply(user, user)
+
/obj/item/reagent_containers/hypospray/on_reagent_change()
if(safety_hypo && !emagged)
var/found_forbidden_reagent = FALSE
@@ -129,6 +135,11 @@
update_icon(UPDATE_ICON_STATE)
return TRUE
+/obj/item/reagent_containers/hypospray/autoinjector/attack_self(mob/user)
+ ..()
+ update_icon(UPDATE_ICON_STATE)
+ return TRUE
+
/obj/item/reagent_containers/hypospray/autoinjector/update_icon_state()
if(reagents.total_volume > 0)
icon_state = initial(icon_state)
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 2130bad9328..0bbe6956b92 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -22,7 +22,7 @@
if(!icon_state)
icon_state = "pill[rand(1, 20)]"
-/obj/item/reagent_containers/food/pill/attack(mob/living/carbon/M, mob/user, def_zone)
+/obj/item/reagent_containers/food/pill/proc/apply(mob/living/carbon/M, mob/user, def_zone)
if(!istype(M))
return FALSE
bitesize = reagents.total_volume
@@ -31,6 +31,12 @@
return TRUE
return FALSE
+/obj/item/reagent_containers/food/pill/attack(mob/living/carbon/M, mob/user, def_zone)
+ return apply(M, user)
+
+/obj/item/reagent_containers/food/pill/attack_self(mob/user)
+ return apply(user, user)
+
/obj/item/reagent_containers/food/pill/afterattack(obj/target, mob/user, proximity)
if(!proximity || !target.is_refillable())
return