From fa396269baa67fff50bb57aaeefe02b5aa8917c8 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 25 Jan 2025 13:07:35 +0100 Subject: [PATCH] Fixes head IDs not giving large pointers while slotted into a wallet or PDA (#89177) ## About The Pull Request Closes #88618 Head IDs now keep the large pointer effect when slotted into a PDA or displayed as the front ID in a wallet ## Changelog :cl: fix: Head IDs now keep the large pointer effect when slotted into a PDA or displayed as the front ID in a wallet /:cl: --- code/game/objects/items/cards_ids.dm | 75 +++++++++++++++++----------- 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 181bc6eef64..cb8f561122f 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -158,13 +158,29 @@ registered_account.bank_cards -= src if (my_store) QDEL_NULL(my_store) + if (isitem(loc)) + UnregisterSignal(loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) return ..() +/obj/item/card/id/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + if (isitem(old_loc)) + UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + if (ismob(old_loc.loc)) + UnregisterSignal(old_loc.loc, COMSIG_MOVABLE_POINTED) + . = ..() + if (isitem(loc)) + RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(on_loc_equipped)) + RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(on_loc_dropped)) + /obj/item/card/id/equipped(mob/user, slot) . = ..() - if(slot == ITEM_SLOT_ID) + if (slot == ITEM_SLOT_ID) RegisterSignal(user, COMSIG_MOVABLE_POINTED, PROC_REF(on_pointed)) +/obj/item/card/id/dropped(mob/user) + UnregisterSignal(user, COMSIG_MOVABLE_POINTED) + return ..() + /obj/item/card/id/proc/return_message_name_part(datum/source, list/stored_name, mob/living/carbon/carbon_human) SIGNAL_HANDLER var/voice_name = carbon_human.GetVoice() @@ -179,24 +195,36 @@ return_string += end_string stored_name[NAME_PART_INDEX] = return_string +/obj/item/card/id/proc/on_loc_equipped(datum/source, mob/equipper, slot) + SIGNAL_HANDLER + + if (slot == ITEM_SLOT_ID) + RegisterSignal(equipper, COMSIG_MOVABLE_POINTED, PROC_REF(on_pointed)) + +/obj/item/card/id/proc/on_loc_dropped(datum/source, mob/dropper) + SIGNAL_HANDLER + UnregisterSignal(dropper, COMSIG_MOVABLE_POINTED) + /obj/item/card/id/proc/on_pointed(mob/living/user, atom/pointed, obj/effect/temp_visual/point/point) SIGNAL_HANDLER - if((!big_pointer && !pointer_color) || HAS_TRAIT(user, TRAIT_UNKNOWN)) + if ((!big_pointer && !pointer_color) || HAS_TRAIT(user, TRAIT_UNKNOWN)) return - if(point.icon_state != /obj/effect/temp_visual/point::icon_state) //it differs from the original icon_state already. + if (point.icon_state != /obj/effect/temp_visual/point::icon_state) //it differs from the original icon_state already. return - if(big_pointer) + if (loc != user) + if (!isitem(loc)) + return + var/obj/item/as_item = loc + if (as_item.GetID() != src) + return + if (big_pointer) point.icon_state = "arrow_large" - if(pointer_color) + if (pointer_color) point.icon_state = "[point.icon_state]_white" point.color = pointer_color var/mutable_appearance/highlight = mutable_appearance(point.icon, "[point.icon_state]_highlights", appearance_flags = RESET_COLOR) point.add_overlay(highlight) -/obj/item/card/id/dropped(mob/user) - UnregisterSignal(user, COMSIG_MOVABLE_POINTED) - return ..() - /obj/item/card/id/get_id_examine_strings(mob/user) . = ..() . += list("[icon2html(get_cached_flat_icon(), user, extra_classes = "hugeicon")]") @@ -1130,6 +1158,16 @@ update_icon() return ITEM_INTERACT_SUCCESS +/obj/item/card/id/advanced/on_loc_equipped(datum/source, mob/equipper, slot) + . = ..() + if(istype(loc, /obj/item/storage/wallet) || istype(loc, /obj/item/modular_computer)) + update_intern_status(source, equipper, slot) + +/obj/item/card/id/advanced/on_loc_dropped(datum/source, mob/dropper) + . = ..() + if(istype(loc, /obj/item/storage/wallet) || istype(loc, /obj/item/modular_computer)) + remove_intern_status(source, dropper) + /obj/item/card/id/advanced/proc/update_intern_status(datum/source, mob/user, slot) SIGNAL_HANDLER @@ -1165,25 +1203,6 @@ is_intern = FALSE update_label() -/obj/item/card/id/advanced/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - - //Old loc - if(istype(old_loc, /obj/item/storage/wallet)) - UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) - - if(istype(old_loc, /obj/item/modular_computer)) - UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) - - //New loc - if(istype(loc, /obj/item/storage/wallet)) - RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status)) - RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status)) - - if(istype(loc, /obj/item/modular_computer)) - RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status)) - RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status)) - /obj/item/card/id/advanced/update_overlays() . = ..()