From ea6d249cd764ed7daa5711535e1bf2e8cc448b15 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Fri, 19 Jul 2024 22:24:14 +0200 Subject: [PATCH] Fixes item actions not working properly (#6756) # About the pull request Calling the parent of all actions (https://github.com/cmss13-devs/cmss13/pull/6442) caused a lot of bugs, this fixes that. Closes https://github.com/cmss13-devs/cmss13/issues/6755 Closes https://github.com/cmss13-devs/cmss13/issues/6753 Closes #6732 Closes https://github.com/cmss13-devs/cmss13/pull/6742 # Explain why it's good for the game Bugs are bad # Testing Photographs and Procedure
Screenshots & Videos Tested on practically every object that has a use-in-hand functionality with an action button.
# Changelog :cl: fix: Fixed a large amount of objects activating erroneous functionality (like an armor light) when using action buttons tied to that object. /:cl: Co-authored-by: John Doe --- code/datums/action.dm | 17 +++++++++++------ code/game/objects/items/devices/flashlight.dm | 2 +- .../objects/items/devices/motion_detector.dm | 2 +- code/game/objects/items/devices/whistle.dm | 3 +-- code/modules/clothing/gloves/boom_glove.dm | 2 +- code/modules/cm_preds/yaut_weapons.dm | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index 8dbf6c9df5a5..e6c87eca6a0d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -187,12 +187,6 @@ holder_item = null return ..() -/datum/action/item_action/action_activate() - . = ..() - if(target) - var/obj/item/I = target - I.ui_action_click(owner, holder_item) - /datum/action/item_action/can_use_action() if(ishuman(owner) && !owner.is_mob_incapacitated()) var/mob/living/carbon/human/human = owner @@ -213,6 +207,17 @@ name = "Toggle [target]" button.name = name +/datum/action/item_action/toggle/action_activate() + . = ..() + if(target) + var/obj/item/I = target + I.ui_action_click(owner, holder_item) + +/datum/action/item_action/toggle/use/New(target) + . = ..() + name = "Use [target]" + button.name = name + //This is the proc used to update all the action buttons. /mob/proc/update_action_buttons(reload_screen) if(!client) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 8d5e3cc752ff..e506f51ce21c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -15,7 +15,7 @@ ground_offset_x = 2 ground_offset_y = 6 - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle) var/on = FALSE var/raillight_compatible = TRUE //Can this be turned into a rail light ? var/toggleable = TRUE diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm index dcbcc0dd8bc7..f68295001f92 100644 --- a/code/game/objects/items/devices/motion_detector.dm +++ b/code/game/objects/items/devices/motion_detector.dm @@ -33,7 +33,7 @@ var/long_range_cooldown = 2 var/blip_type = "detector" var/iff_signal = FACTION_MARINE - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle) var/scanning = FALSE // controls if MD is in process of scan var/datum/shape/rectangle/square/range_bounds var/long_range_locked = FALSE //only long-range MD diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 331df3ffa006..07196a3e1bb9 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -5,7 +5,7 @@ w_class = SIZE_TINY flags_atom = FPRINT|CONDUCT flags_equip_slot = SLOT_FACE - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) var/volume = 60 var/spam_cooldown_time = 10 SECONDS @@ -51,7 +51,6 @@ usr.put_in_l_hand(src) add_fingerprint(usr) - /obj/item/device/hailer name = "hailer" desc = "Used by obese officers to save their breath for running." diff --git a/code/modules/clothing/gloves/boom_glove.dm b/code/modules/clothing/gloves/boom_glove.dm index 8cc3e8d910f6..ddddc5ecef5e 100644 --- a/code/modules/clothing/gloves/boom_glove.dm +++ b/code/modules/clothing/gloves/boom_glove.dm @@ -12,7 +12,7 @@ var/cooldown = 50 var/last_use = 0 - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) /obj/item/clothing/gloves/marine/boom_glove/item_action_slot_check(mob/user, slot) if(!ishuman(user)) return FALSE diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index b6d595c37b96..3bbbd11c0784 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -486,7 +486,7 @@ throw_range = 6 hitsound = 'sound/weapons/slash.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) unacidable = TRUE /obj/item/weapon/yautja/knife/attack(mob/living/target, mob/living/carbon/human/user)