diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index b80f546693d..28bb12a1b87 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -187,3 +187,8 @@ /// From /mob/living/carbon/proc/can_defib() : () /// Return a defib result flag to override default defib brain check #define COMSIG_CARBON_DEFIB_BRAIN_CHECK "carbon_defib_brain_check" + +/// From /mob/living/carbon/human/proc/smart_equip_targeted(): (mob/living/carbon/human/user, obj/item/possible_container) +#define COMSIG_HUMAN_NON_STORAGE_HOTKEY "human_storage_hotkey" + /// Return to prevent the storage fail message + #define COMPONENT_STORAGE_HOTKEY_HANDLED (1<<0) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 72adc884597..067e8f027d3 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -340,6 +340,7 @@ . = ..() AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_BACK) AddComponent(/datum/component/two_handed, force_unwielded=8, force_wielded=12) + RegisterSignal(src, COMSIG_HUMAN_NON_STORAGE_HOTKEY, PROC_REF(on_non_storage_hotkey)) /obj/item/shockpaddles/Destroy() defib = null @@ -668,6 +669,13 @@ /obj/item/shockpaddles/proc/is_wielded() return HAS_TRAIT(src, TRAIT_WIELDED) +/obj/item/shockpaddles/proc/on_non_storage_hotkey(datum/source, mob/living/carbon/human/user, obj/item/possible_storage) + SIGNAL_HANDLER + if(possible_storage == defib) + user.dropItemToGround(src) + return COMPONENT_STORAGE_HOTKEY_HANDLED + return NONE + /obj/item/shockpaddles/cyborg name = "cyborg defibrillator paddles" icon = 'icons/obj/medical/defib.dmi' diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 1346390b985..439ed75d544 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -358,6 +358,9 @@ return var/obj/item/thing = get_active_held_item() var/obj/item/equipped_item = get_item_by_slot(slot_type) + var/thing_reject = NONE + if(thing) + thing_reject = SEND_SIGNAL(thing, COMSIG_HUMAN_NON_STORAGE_HOTKEY, src, equipped_item) if(!equipped_item) // We also let you equip an item like this if(!thing) to_chat(src, span_warning("You have no [slot_item_name] to take something out of!")) @@ -370,6 +373,8 @@ if(!thing) equipped_item.attack_hand(src) else + if(thing_reject & COMPONENT_STORAGE_HOTKEY_HANDLED) + return to_chat(src, span_warning("You can't fit [thing] into your [equipped_item.name]!")) return if(!storage.supports_smart_equip)