diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 9439176fd09..8963e21c911 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -589,37 +589,55 @@ taste_description = "oranges" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/reagent/consumable/ethanol/screwdrivercocktail/on_transfer(atom/atom, methods = TOUCH, trans_volume) - if(!(methods & INGEST)) - return ..() - - if(src == atom.reagents.get_master_reagent() && istype(atom, /obj/item/reagent_containers/cup/glass/drinkingglass)) - var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = atom - drink.tool_behaviour = TOOL_SCREWDRIVER +/datum/reagent/consumable/ethanol/screwdrivercocktail/on_new(data) + . = ..() + // We want to turn only base drinking glasses with screwdriver(cocktail) into screwdrivers(tool), + // but we can't check style so we have to check type, and we don't want it match subtypes like istype does + if(holder?.my_atom && holder.my_atom.type == /obj/item/reagent_containers/cup/glass/drinkingglass/) var/list/reagent_change_signals = list( COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_REM_REAGENT, - COMSIG_REAGENTS_DEL_REAGENT, - COMSIG_REAGENTS_CLEAR_REAGENTS, - COMSIG_REAGENTS_REACTED, ) - RegisterSignals(drink.reagents, reagent_change_signals, PROC_REF(on_reagent_change)) - - return ..() + RegisterSignals(holder, reagent_change_signals, PROC_REF(on_reagent_change)) + RegisterSignal(holder, COMSIG_REAGENTS_CLEAR_REAGENTS, PROC_REF(on_reagents_clear)) + RegisterSignal(holder, COMSIG_REAGENTS_DEL_REAGENT, PROC_REF(on_reagent_delete)) + if(src == holder.get_master_reagent()) + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = holder.my_atom + drink.tool_behaviour = TOOL_SCREWDRIVER + drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') /datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagent_change(datum/reagents/reagents) SIGNAL_HANDLER - if(src != reagents.get_master_reagent()) - var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + if(reagents.get_master_reagent() == src) + drink.tool_behaviour = TOOL_SCREWDRIVER + drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') + else drink.tool_behaviour = initial(drink.tool_behaviour) - UnregisterSignal(reagents, list( + drink.usesound = initial(drink.usesound) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagents_clear(datum/reagents/reagents) + SIGNAL_HANDLER + unregister_screwdriver(reagents) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagent_delete(datum/reagents/reagents, datum/reagent/deleted_reagent) + SIGNAL_HANDLER + if(deleted_reagent != src) + return + unregister_screwdriver(reagents) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/unregister_screwdriver(datum/reagents/reagents) + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + if(drink.tool_behaviour == TOOL_SCREWDRIVER) + drink.tool_behaviour = initial(drink.tool_behaviour) + drink.usesound = initial(drink.usesound) + UnregisterSignal(reagents, list( COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_CLEAR_REAGENTS, - COMSIG_REAGENTS_REACTED, )) /datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)