[MIRROR] Fixes screwdriver cocktail not being a screwdriver. (#26439)

* Fixes screwdriver cocktail not being a screwdriver. (#81030)

## About The Pull Request

Alternative title: The screwdriver cocktail is now the world's worst
screwdriver (for real this time).

As mentioned in my writeup in the related issue (#81017), as far as I
know, it has never actually worked.
Tl;dr: It requires `on_transfer` to be called with the method as
ingestion, but in no way does transferring into a drinking glass ever
use that method, and most ways don't even specify a method and thus
`on_transfer` doesn't even get called in the first place.
Then I went back to the original pr and tried it, and it didn't work.

Then for resolving it, it feels unwieldy to do all this trickery on the
reagent to change a value on the drinking glass when the drinking glass
already has the perfect procs for this: the `on_cup_change` and
`on_cup_reset` callbacks.
Instead of using `on_transfer` and registering a hell of a lot of
signals to re-check the master reagent every time the contents get
changed, we just check whether the style we changed into is that of a
screwdriver cocktail.
This actually works.

Oh, and I also added use sounds because it didn't have them, which I
believe only actually get used when using it as a tool and thus only
when it's a screwdriver.
## Why It's Good For The Game

Fixes #81017.
## Changelog
🆑
fix: As they should've for a while, screwdrivers (cocktail) actually
work as screwdrivers (tool).
sound: The screwdriver cocktail also actually plays the screwdriver
sound when used.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Fixes screwdriver cocktail not being a screwdriver.

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-02-09 23:05:05 -05:00
committed by GitHub
co-authored by Ghom _0Steven
parent 49bdaacbb7
commit e602b3db8b
@@ -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)