diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 61a3ef3c5b..47a28f0669 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -134,22 +134,31 @@ if(!reagents.total_volume) // Empty activate_pin(3) return - if(AM.can_be_injected_by(src)) - if(isliving(AM)) - var/mob/living/L = AM - var/turf/T = get_turf(AM) - T.visible_message(span_warning("[src] is trying to inject [L]!")) - sleep(3 SECONDS) - if(!L.can_be_injected_by(src)) - activate_pin(3) - return - var/contained = reagents.get_reagents() - var/trans = reagents.trans_to_mob(L, transfer_amount, CHEM_BLOOD) - message_admins("[src] injected \the [L] with [trans]u of [contained].") - to_chat(AM, span_notice("You feel a tiny prick!")) - visible_message(span_warning("[src] injects [L]!")) - else - reagents.trans_to(AM, transfer_amount) + + // Handle injections using the helper, same as the syringe. + if(isliving(AM)) + var/mob/living/L = AM + if(!L.can_inject(null, 1)) // error_msg = 1 to show errors + activate_pin(3) + return + var/turf/T = get_turf(AM) + T.visible_message(span_warning("[src] is trying to inject [L]!")) + sleep(3 SECONDS) + if(!L.can_inject(null, 0)) // No error message on second check + activate_pin(3) + return + var/contained = reagents.get_reagents() + var/trans = reagents.trans_to_mob(L, transfer_amount, CHEM_BLOOD) + message_admins("[src] injected \the [L] with [trans]u of [contained].") + to_chat(AM, span_notice("You feel a tiny prick!")) + visible_message(span_warning("[src] injects [L]!")) + else + // Use standardized injection compatibility for objects + if(!AM.can_be_injected_by(src)) + activate_pin(3) + return + + reagents.trans_to(AM, transfer_amount) else if(reagents.total_volume >= volume) // Full diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 15f8aea8be..3af550a591 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -187,7 +187,7 @@ if(istype(target, /obj/item/implantcase/chem)) return - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/storage/fancy/cigarettes)) + if(!target.is_injectable_container() && !ismob(target)) to_chat(user, span_notice("You cannot directly fill this object.")) return if(!target.reagents.get_free_space()) diff --git a/code/modules/reagents/reagents/_helpers.dm b/code/modules/reagents/reagents/_helpers.dm index 887604df06..e0585a418a 100644 --- a/code/modules/reagents/reagents/_helpers.dm +++ b/code/modules/reagents/reagents/_helpers.dm @@ -8,7 +8,18 @@ return TRUE /obj/can_be_injected_by(var/atom/injector) - return is_open_container() && ..() + if(!..()) + return FALSE + // Then check if this is a type of container that can be injected + return is_injectable_container() /mob/living/can_be_injected_by(var/atom/injector) return ..() && (can_inject(null, 0, BP_TORSO) || can_inject(null, 0, BP_GROIN)) + +// Helper for anything checking if it can inject a container like a syringe. +/obj/proc/is_injectable_container() + return is_open_container() || \ + istype(src, /obj/item/reagent_containers/food) || \ + istype(src, /obj/item/slime_extract) || \ + istype(src, /obj/item/clothing/mask/smokable/cigarette) || \ + istype(src, /obj/item/storage/fancy/cigarettes)