From 9ef257db50e28f87427da8482ae37cfd2b0e186c Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Wed, 9 May 2018 08:30:29 -0700 Subject: [PATCH] [s] Fix wallets acting as though they still contain removed IDs --- code/game/objects/items/storage/wallets.dm | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 6acf72518f..ab86cf0d50 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/storage/wallet name = "wallet" desc = "It can hold a few small and personal things." @@ -89,3 +90,100 @@ if(item3_type) new item3_type(src) update_icon() +======= +/obj/item/storage/wallet + name = "wallet" + desc = "It can hold a few small and personal things." + icon_state = "wallet" + w_class = WEIGHT_CLASS_SMALL + resistance_flags = FLAMMABLE + slot_flags = ITEM_SLOT_ID + + var/obj/item/card/id/front_id = null + var/list/combined_access + +/obj/item/storage/wallet/ComponentInitialize() + . = ..() + GET_COMPONENT(STR, /datum/component/storage) + STR.max_items = 4 + STR.can_hold = typecacheof(list( + /obj/item/stack/spacecash, + /obj/item/card, + /obj/item/clothing/mask/cigarette, + /obj/item/flashlight/pen, + /obj/item/seeds, + /obj/item/stack/medical, + /obj/item/toy/crayon, + /obj/item/coin, + /obj/item/dice, + /obj/item/disk, + /obj/item/implanter, + /obj/item/lighter, + /obj/item/lipstick, + /obj/item/match, + /obj/item/paper, + /obj/item/pen, + /obj/item/photo, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/screwdriver, + /obj/item/stamp)) + +/obj/item/storage/wallet/Exited(atom/movable/AM) + . = ..() + // The loc has not actually changed yet when this proc is called, so call + // refreshID and have it ignore the outgoing atom. + refreshID(AM) + +/obj/item/storage/wallet/proc/refreshID(atom/movable/removed) + LAZYCLEARLIST(combined_access) + if(!(front_id in src) || front_id == removed) + front_id = null + for(var/obj/item/card/id/I in contents) + if(I == removed) + continue + if(!front_id) + front_id = I + LAZYINITLIST(combined_access) + combined_access |= I.access + update_icon() + +/obj/item/storage/wallet/Entered(atom/movable/AM) + . = ..() + refreshID() + +/obj/item/storage/wallet/update_icon() + var/new_state = "wallet" + if(front_id) + new_state = "wallet_[front_id.icon_state]" + if(new_state != icon_state) //avoid so many icon state changes. + icon_state = new_state + +/obj/item/storage/wallet/GetID() + return front_id + +/obj/item/storage/wallet/GetAccess() + if(LAZYLEN(combined_access)) + return combined_access + else + return ..() + +/obj/item/storage/wallet/random + icon_state = "random_wallet" + +/obj/item/storage/wallet/random/PopulateContents() + var/item1_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500) + var/item2_type + if(prob(50)) + item2_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500) + var/item3_type = pick( /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/gold, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/iron ) + + spawn(2) + if(item1_type) + new item1_type(src) + if(item2_type) + new item2_type(src) + if(item3_type) + new item3_type(src) + update_icon() +>>>>>>> b235fce... Fix wallets appearing to still contain a removed ID (#37719)