mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 03:22:41 +00:00
* [ready] unit tests all worn icons (#72370) Fixes #71692 🆑 ShizCalev code: Added a unit test for ALL worn icons. fix: Fixed a bunch of broken worn icons! /🆑 * [ready] unit tests all worn icons * Should have fixed most of the failures now * Here, hopefully that should fix what was left * Okay maybe it just hadn't been fixed yet * I can be a bit dumb sometimes * Okay, now it's going to work, I promise * I'm so tired of this Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com> Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com> Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
166 lines
4.4 KiB
Plaintext
166 lines
4.4 KiB
Plaintext
/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
|
|
var/cached_flat_icon
|
|
|
|
/obj/item/storage/wallet/Initialize(mapload)
|
|
. = ..()
|
|
atom_storage.max_slots = 4
|
|
atom_storage.set_holdable(list(
|
|
/obj/item/stack/spacecash,
|
|
/obj/item/holochip,
|
|
/obj/item/card,
|
|
/obj/item/clothing/mask/cigarette,
|
|
/obj/item/coupon,
|
|
/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/reagent_containers/pill,
|
|
/obj/item/screwdriver,
|
|
// SKYRAT EDIT BEGIN
|
|
/obj/item/condom_pack,
|
|
// SKYRAT EDIT END
|
|
/obj/item/stamp),
|
|
list(/obj/item/screwdriver/power))
|
|
|
|
/obj/item/storage/wallet/Exited(atom/movable/gone, direction)
|
|
. = ..()
|
|
if(isidcard(gone))
|
|
refreshID()
|
|
|
|
/**
|
|
* Calculates the new front ID.
|
|
*
|
|
* Picks the ID card that has the most combined command or higher tier accesses.
|
|
*/
|
|
/obj/item/storage/wallet/proc/refreshID()
|
|
LAZYCLEARLIST(combined_access)
|
|
|
|
front_id = null
|
|
var/winning_tally = 0
|
|
var/is_magnetic_found = FALSE
|
|
for(var/obj/item/card/id/id_card in contents)
|
|
// Certain IDs can forcibly jump to the front so they can disguise other cards in wallets. Chameleon/Agent ID cards are an example of this.
|
|
if(!is_magnetic_found && HAS_TRAIT(id_card, TRAIT_MAGNETIC_ID_CARD))
|
|
front_id = id_card
|
|
is_magnetic_found = TRUE
|
|
|
|
if(!is_magnetic_found)
|
|
var/card_tally = SSid_access.tally_access(id_card, ACCESS_FLAG_COMMAND)
|
|
if(card_tally > winning_tally)
|
|
winning_tally = card_tally
|
|
front_id = id_card
|
|
|
|
LAZYINITLIST(combined_access)
|
|
combined_access |= id_card.access
|
|
|
|
// If we didn't pick a front ID - Maybe none of our cards have any command accesses? Just grab the first card (if we even have one).
|
|
// We could also have no ID card in the wallet at all, which will mean we end up with a null front_id and that's fine too.
|
|
if(!front_id)
|
|
front_id = (locate(/obj/item/card/id) in contents)
|
|
|
|
if(ishuman(loc))
|
|
var/mob/living/carbon/human/wearing_human = loc
|
|
if(wearing_human.wear_id == src)
|
|
wearing_human.sec_hud_set_ID()
|
|
|
|
update_label()
|
|
update_appearance(UPDATE_ICON)
|
|
update_slot_icon()
|
|
|
|
/obj/item/storage/wallet/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
|
|
. = ..()
|
|
if(isidcard(arrived))
|
|
refreshID()
|
|
|
|
/obj/item/storage/wallet/update_overlays()
|
|
. = ..()
|
|
cached_flat_icon = null
|
|
if(!front_id)
|
|
return
|
|
. += mutable_appearance(front_id.icon, front_id.icon_state)
|
|
. += front_id.overlays
|
|
. += mutable_appearance(icon, "wallet_overlay")
|
|
|
|
/obj/item/storage/wallet/proc/get_cached_flat_icon()
|
|
if(!cached_flat_icon)
|
|
cached_flat_icon = getFlatIcon(src)
|
|
return cached_flat_icon
|
|
|
|
/obj/item/storage/wallet/get_examine_string(mob/user, thats = FALSE)
|
|
if(front_id)
|
|
return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" //displays all overlays in chat
|
|
return ..()
|
|
|
|
/obj/item/storage/wallet/proc/update_label()
|
|
if(front_id)
|
|
name = "wallet displaying [front_id]"
|
|
else
|
|
name = "wallet"
|
|
|
|
/obj/item/storage/wallet/examine()
|
|
. = ..()
|
|
if(front_id)
|
|
. += span_notice("Alt-click to remove the id.")
|
|
|
|
/obj/item/storage/wallet/get_id_examine_strings(mob/user)
|
|
. = ..()
|
|
if(front_id)
|
|
. += front_id.get_id_examine_strings(user)
|
|
|
|
/obj/item/storage/wallet/GetID()
|
|
return front_id
|
|
|
|
/obj/item/storage/wallet/RemoveID()
|
|
if(!front_id)
|
|
return
|
|
. = front_id
|
|
front_id.forceMove(get_turf(src))
|
|
|
|
/obj/item/storage/wallet/InsertID(obj/item/inserting_item)
|
|
var/obj/item/card/inserting_id = inserting_item.RemoveID()
|
|
if(!inserting_id)
|
|
return FALSE
|
|
attackby(inserting_id)
|
|
if(inserting_id in contents)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/storage/wallet/GetAccess()
|
|
if(LAZYLEN(combined_access))
|
|
return combined_access
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/storage/wallet/random
|
|
icon_state = "random_wallet" // for mapping purposes
|
|
worn_icon_state = "wallet"
|
|
|
|
/obj/item/storage/wallet/random/Initialize(mapload)
|
|
. = ..()
|
|
icon_state = "wallet"
|
|
|
|
/obj/item/storage/wallet/random/PopulateContents()
|
|
new /obj/item/holochip(src, rand(5, 30))
|
|
new /obj/effect/spawner/random/entertainment/wallet_storage(src)
|