Files

600 lines
24 KiB
Plaintext

/obj/item/clothing/neck
name = "necklace"
icon = 'icons/obj/clothing/neck.dmi'
abstract_type = /obj/item/clothing/neck
body_parts_covered = NECK
slot_flags = ITEM_SLOT_NECK
interaction_flags_click = NEED_DEXTERITY
strip_delay = 4 SECONDS
equip_delay_other = 4 SECONDS
/obj/item/clothing/neck/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
. = ..()
if(isinhands || !(body_parts_covered & HEAD))
return
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
/obj/item/clothing/neck/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
. = ..()
if (isinhands || !(body_parts_covered & HEAD))
return
var/blood_overlay = get_blood_overlay("mask")
if (blood_overlay)
. += blood_overlay
/obj/item/clothing/neck/bowtie
name = "bow tie"
desc = "A small neosilk bowtie."
inhand_icon_state = "" //no inhands
w_class = WEIGHT_CLASS_SMALL
custom_price = PAYCHECK_CREW
icon = 'icons/map_icons/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/bowtie"
post_init_icon_state = "bowtie_greyscale"
greyscale_config = /datum/greyscale_config/ties
greyscale_config_worn = /datum/greyscale_config/ties/worn
greyscale_colors = "#151516ff"
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/neck/bowtie/rainbow
name = "rainbow bow tie"
desc = "An extremely large neosilk rainbow-colored bowtie."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bowtie_rainbow"
post_init_icon_state = null
greyscale_config = null
greyscale_config_worn = null
greyscale_colors = null
/obj/item/clothing/neck/tie
name = "slick tie"
desc = "A neosilk tie."
inhand_icon_state = "" //no inhands
alternate_worn_layer = LOW_NECK_LAYER // So that it renders below suit jackets, MODsuits, etc
w_class = WEIGHT_CLASS_SMALL
custom_price = PAYCHECK_CREW
icon = 'icons/map_icons/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/tie"
post_init_icon_state = "tie_greyscale_tied"
greyscale_config = /datum/greyscale_config/ties
greyscale_config_worn = /datum/greyscale_config/ties/worn
greyscale_colors = "#4d4e4e"
flags_1 = IS_PLAYER_COLORABLE_1
/// All ties start untied unless otherwise specified
var/is_tied = FALSE
/// How long it takes to tie the tie
var/tie_timer = 4 SECONDS
/// Is this tie a clip-on, meaning it does not have an untied state?
var/clip_on = FALSE
/obj/item/clothing/neck/tie/Initialize(mapload)
. = ..()
if(!clip_on)
update_appearance(UPDATE_ICON)
register_context()
/obj/item/clothing/neck/tie/examine(mob/user)
. = ..()
. += span_notice("The tie can be worn above or below your suit. Alt-Right-click to toggle.")
if(clip_on)
. += span_notice("Looking closely, you can see that it's actually a cleverly disguised clip-on.")
else if(!is_tied)
. += span_notice("The tie can be tied with Alt-Click.")
else
. += span_notice("The tie can be untied with Alt-Click.")
/obj/item/clothing/neck/tie/click_alt(mob/user)
if(clip_on)
return NONE
to_chat(user, span_notice("You concentrate as you begin [is_tied ? "untying" : "tying"] [src]..."))
var/tie_timer_actual = tie_timer
// Mirrors give you a boost to your tying speed. I realize this stacks and I think that's hilarious.
for(var/obj/structure/mirror/reflection in view(2, user))
tie_timer_actual *= 0.8
// Heads of staff are experts at tying their ties.
if(HAS_TRAIT(user, TRAIT_FAST_TYING))
tie_timer_actual *= 0.5
// Tie/Untie our tie
if(!do_after(user, tie_timer_actual))
to_chat(user, span_notice("Your fingers fumble away from [src] as your concentration breaks."))
return CLICK_ACTION_BLOCKING
// Clumsy & Dumb people have trouble tying their ties.
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50))
to_chat(user, span_notice("You just can't seem to get a proper grip on [src]!"))
return CLICK_ACTION_BLOCKING
// Success!
is_tied = !is_tied
user.visible_message(
span_notice("[user] adjusts [user.p_their()] tie[HAS_TRAIT(user, TRAIT_BALD) ? "" : " and runs a hand across [user.p_their()] head"]."),
span_notice("You successfully [is_tied ? "tied" : "untied"] [src]!"),
)
update_appearance(UPDATE_ICON)
user.update_clothing(ITEM_SLOT_NECK)
return CLICK_ACTION_SUCCESS
/obj/item/clothing/neck/tie/click_alt_secondary(mob/user)
alternate_worn_layer = (alternate_worn_layer == initial(alternate_worn_layer) ? NONE : initial(alternate_worn_layer))
user.update_clothing(ITEM_SLOT_NECK)
balloon_alert(user, "wearing [alternate_worn_layer == initial(alternate_worn_layer) ? "below" : "above"] suits")
/obj/item/clothing/neck/tie/update_icon()
. = ..()
if(clip_on)
return
// Normal strip & equip delay, along with 2 second self equip since you need to squeeze your head through the hole.
if(is_tied)
icon_state = "tie_greyscale_tied"
strip_delay = 4 SECONDS
equip_delay_other = 4 SECONDS
equip_delay_self = 2 SECONDS
else // Extremely quick strip delay, it's practically a ribbon draped around your neck
icon_state = "tie_greyscale_untied"
strip_delay = 1 SECONDS
equip_delay_other = 1 SECONDS
equip_delay_self = 0 SECONDS
/obj/item/clothing/neck/tie/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
context[SCREENTIP_CONTEXT_ALT_RMB] = "Wear [alternate_worn_layer == initial(alternate_worn_layer) ? "above" : "below"] suit"
if(clip_on)
return CONTEXTUAL_SCREENTIP_SET
if(is_tied)
context[SCREENTIP_CONTEXT_ALT_LMB] = "Untie"
else
context[SCREENTIP_CONTEXT_ALT_LMB] = "Tie"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/clothing/neck/tie/worn_overlays(mutable_appearance/standing, isinhands)
. = ..()
var/mob/living/carbon/human/wearer = loc
if(!ishuman(wearer) || !wearer.w_uniform)
return
var/obj/item/clothing/under/undershirt = wearer.w_uniform
if(!istype(undershirt) || !LAZYLEN(undershirt.attached_accessories))
return
if(alternate_worn_layer)
. += undershirt.accessory_overlay
/obj/item/clothing/neck/tie/blue
name = "blue tie"
icon_state = "/obj/item/clothing/neck/tie/blue"
post_init_icon_state = "tie_greyscale_untied"
greyscale_colors = "#5275b6ff"
/obj/item/clothing/neck/tie/red
name = "red tie"
icon_state = "/obj/item/clothing/neck/tie/red"
post_init_icon_state = "tie_greyscale_untied"
greyscale_colors = "#c23838ff"
/obj/item/clothing/neck/tie/red/tied
is_tied = TRUE
flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1
/obj/item/clothing/neck/tie/red/hitman
desc = "This is a $47,000 custom-tailored Référence Du Tueur À Gages tie. The clot is from neosilkworms raised at a tie microfarm in Cookwell, from a secret pattern passed down by monk tailors since the twenty-first century!"
tie_timer = 1 SECONDS // You're a professional.
flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1
/obj/item/clothing/neck/tie/red/hitman/tied
is_tied = TRUE
flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1
/obj/item/clothing/neck/tie/black
name = "black tie"
icon_state = "/obj/item/clothing/neck/tie/black"
post_init_icon_state = "tie_greyscale_untied"
greyscale_colors = "#151516ff"
/obj/item/clothing/neck/tie/black/tied
is_tied = TRUE
flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1
/obj/item/clothing/neck/tie/horrible
name = "horrible tie"
desc = "A neosilk tie. This one is disgusting."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "horribletie"
post_init_icon_state = null
clip_on = TRUE
greyscale_config = null
greyscale_config_worn = null
greyscale_colors = null
/obj/item/clothing/neck/robe_cape
name = "robe cape"
desc = "A comfortable cape, draped down your back and held around your neck with a brooch."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/robe_cape"
post_init_icon_state = "robe_cape"
worn_icon = 'icons/mob/clothing/neck.dmi'
worn_icon_state = "robe_cape"
abstract_type = /obj/item/clothing/neck
greyscale_config = /datum/greyscale_config/robe_cape
greyscale_config_worn = /datum/greyscale_config/robe_cape/worn
greyscale_colors = "#2a2844"
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/neck/robe_cape/Initialize(mapload)
. = ..()
AddElement(/datum/element/surgery_aid, "cape")
/obj/item/clothing/neck/tie/detective
name = "loose tie"
desc = "A loosely tied necktie, a perfect accessory for the over-worked detective."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "detective"
post_init_icon_state = null
clip_on = TRUE
greyscale_config = null
greyscale_config_worn = null
greyscale_colors = null
/obj/item/clothing/neck/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
/obj/item/clothing/neck/stethoscope/Initialize(mapload)
. = ..()
AddElement(/datum/element/adjust_fishing_difficulty, -3) //FISH DOCTOR?!
/obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] won't hear much!"))
return OXYLOSS
/obj/item/clothing/neck/stethoscope/attack(mob/living/target, mob/living/user)
if(!ishuman(target) || !isliving(user))
return ..()
if(user.combat_mode)
return
var/mob/living/carbon/carbon_patient = target
var/body_part = carbon_patient.parse_zone_with_bodypart(user.zone_selected)
var/oxy_loss = carbon_patient.get_oxy_loss()
var/heart_strength
var/pulse_pressure
var/having_heart_attack = carbon_patient.has_status_effect(/datum/status_effect/heart_attack)
var/heart_noises = TRUE
var/obj/item/organ/heart/heart = carbon_patient.get_organ_slot(ORGAN_SLOT_HEART)
var/obj/item/organ/lungs/lungs = carbon_patient.get_organ_slot(ORGAN_SLOT_LUNGS)
var/obj/item/organ/liver/liver = carbon_patient.get_organ_slot(ORGAN_SLOT_LIVER)
var/obj/item/organ/appendix/appendix = carbon_patient.get_organ_slot(ORGAN_SLOT_APPENDIX)
var/render_list = list()//information will be packaged in a list for clean display to the user
//determine what specific action we're taking
switch (body_part)
if(BODY_ZONE_CHEST)//Listening to the chest
user.visible_message(span_notice("[user] places [src] against [carbon_patient]'s [body_part] and listens attentively."), ignored_mobs = user)
if(HAS_TRAIT(user, TRAIT_DEAF))
to_chat(user, span_notice("You place [src] against [carbon_patient]'s [body_part]. Fat load of good it does you though, since you can't hear."))
return
else
render_list += span_info("You place [src] against [carbon_patient]'s [body_part]:\n")
//assess breathing
var/lung_noises = TRUE
if(isnull(lungs) \
|| carbon_patient.stat == DEAD \
|| (HAS_TRAIT(carbon_patient, TRAIT_FAKEDEATH)) \
|| (HAS_TRAIT(carbon_patient, TRAIT_NOBREATH))\
|| carbon_patient.failed_last_breath \
|| carbon_patient.losebreath)//If pt is dead or otherwise not breathing
render_list += "<span class='danger ml-1'>[target.p_Theyre()] not breathing!</span>\n"
lung_noises = FALSE
else if(lungs.damage > 10)//if breathing, check for lung damage
render_list += "<span class='danger ml-1'>You hear fluid in [target.p_their()] lungs!</span>\n"
else if(oxy_loss > 10)//if they have suffocation damage
render_list += "<span class='danger ml-1'>[target.p_Theyre()] breathing heavily!</span>\n"
else
render_list += "<span class='notice ml-1'>[target.p_Theyre()] breathing normally.</span>\n"//they're okay :D
if(lung_noises)
render_list += "<span class='notice ml-1'>[lungs.hear_breath_noise(user)]</span>\n"
//assess heart
if(body_part == BODY_ZONE_CHEST)//if we're listening to the chest
if(isnull(heart) || !heart.is_beating() || carbon_patient.stat == DEAD)
render_list += "<span class='danger ml-1'>You don't hear a heartbeat!</span>\n"//they're dead or their heart isn't beating
heart_noises = FALSE
else if(having_heart_attack)
render_list += "<span class='danger ml-1'>You hear a rapid, irregular heartbeat.</span>\n"
else if(heart.damage > 10 || carbon_patient.get_blood_volume(apply_modifiers = TRUE) <= BLOOD_VOLUME_OKAY)
render_list += "<span class='danger ml-1'>You hear a weak heartbeat.</span>\n"//their heart is damaged, or they have critical blood
else
render_list += "<span class='notice ml-1'>You hear a healthy heartbeat.</span>\n"//they're okay :D
if(heart_noises)
render_list += "<span class='notice ml-1'>[heart.hear_beat_noise(user)]</span>\n"
if(BODY_ZONE_PRECISE_GROIN)//If we're targeting the groin
render_list += span_info("You carefully press down on [carbon_patient]'s abdomen:\n")
user.visible_message(span_notice("[user] presses their hands against [carbon_patient]'s abdomen."), ignored_mobs = user)
//assess abdominal organs
var/appendix_okay = TRUE
var/liver_okay = TRUE
if(!liver)//sanity check, ensure the patient actually has a liver
render_list += "<span class='danger ml-1'>You can't feel anything where [target.p_their()] liver would be.</span>\n"
liver_okay = FALSE
else
if(liver.damage > 10)
render_list += "<span class='danger ml-1'>[target.p_Their()] liver feels firm.</span>\n"//their liver is damaged
liver_okay = FALSE
if(!appendix)//sanity check, ensure the patient actually has an appendix
render_list += "<span class='danger ml-1'>You can't feel anything where [target.p_their()] appendix would be.</span>\n"
appendix_okay = FALSE
else
if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS)
render_list += "<span class='danger ml-1'>[target] screams when you lift your hand from [target.p_their()] appendix!</span>\n"//scream if their appendix is damaged and they're awake
target.emote("scream")
appendix_okay = FALSE
if(liver_okay && appendix_okay)//if they have all their organs and have no detectable damage
render_list += "<span class='notice ml-1'>You don't find anything abnormal.</span>\n"//they're okay :D
if(BODY_ZONE_PRECISE_EYES)
balloon_alert(user, "can't do that!")
return
if(BODY_ZONE_PRECISE_MOUTH)
balloon_alert(user, "can't do that!")
return
else//targeting an extremity or the head
if(body_part == BODY_ZONE_HEAD)
render_list += span_info("You carefully press your fingers to [carbon_patient]'s neck:\n")
user.visible_message(span_notice("[user] presses their fingers against [carbon_patient]'s neck."), ignored_mobs = user)
else
render_list += span_info("You carefully press your fingers to [carbon_patient]'s [body_part]:\n")
user.visible_message(span_notice("[user] presses their fingers against [carbon_patient]'s [body_part]."), ignored_mobs = user)
var/cached_blood_volume = carbon_patient.get_blood_volume(apply_modifiers = TRUE)
//assess pulse (heart & blood level)
if(isnull(heart) || !heart.is_beating() || cached_blood_volume <= BLOOD_VOLUME_OKAY || carbon_patient.stat == DEAD)
render_list += "<span class='danger ml-1'>You can't find a pulse!</span>\n"//they're dead, their heart isn't beating, or they have critical blood
else
if(having_heart_attack)
heart_strength = span_danger("irregular")
else if(heart.damage > 10)
heart_strength = span_danger("weak")//their heart is damaged
else
heart_strength = span_notice("regular")//they're okay :D
if((cached_blood_volume <= BLOOD_VOLUME_SAFE && cached_blood_volume > BLOOD_VOLUME_OKAY) || having_heart_attack)
pulse_pressure = span_danger("thready")//low blood
else
pulse_pressure = span_notice("strong")//they're okay :D
render_list += "<span class='notice ml-1'>[target.p_Their()] pulse is [pulse_pressure] and [heart_strength].</span>\n"
//display our packaged information in an examine block for easy reading
to_chat(user, boxed_message(jointext(render_list, "")), type = MESSAGE_TYPE_INFO)
///////////
//SCARVES//
///////////
/obj/item/clothing/neck/scarf
name = "scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon = 'icons/map_icons/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/scarf"
post_init_icon_state = "scarf"
w_class = WEIGHT_CLASS_TINY
custom_price = PAYCHECK_CREW
greyscale_colors = "#EEEEEE#EEEEEE"
greyscale_config = /datum/greyscale_config/scarf
greyscale_config_worn = /datum/greyscale_config/scarf/worn
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/neck/scarf/black
name = "black scarf"
icon_state = "/obj/item/clothing/neck/scarf/black"
greyscale_colors = "#4A4A4B#4A4A4B"
/obj/item/clothing/neck/scarf/pink
name = "pink scarf"
icon_state = "/obj/item/clothing/neck/scarf/pink"
greyscale_colors = "#F699CD#F699CD"
/obj/item/clothing/neck/scarf/red
name = "red scarf"
icon_state = "/obj/item/clothing/neck/scarf/red"
greyscale_colors = "#D91414#D91414"
/obj/item/clothing/neck/scarf/green
name = "green scarf"
icon_state = "/obj/item/clothing/neck/scarf/green"
greyscale_colors = "#5C9E54#5C9E54"
/obj/item/clothing/neck/scarf/darkblue
name = "dark blue scarf"
icon_state = "/obj/item/clothing/neck/scarf/darkblue"
greyscale_colors = "#1E85BC#1E85BC"
/obj/item/clothing/neck/scarf/purple
name = "purple scarf"
icon_state = "/obj/item/clothing/neck/scarf/purple"
greyscale_colors = "#9557C5#9557C5"
/obj/item/clothing/neck/scarf/yellow
name = "yellow scarf"
icon_state = "/obj/item/clothing/neck/scarf/yellow"
greyscale_colors = "#E0C14F#E0C14F"
/obj/item/clothing/neck/scarf/orange
name = "orange scarf"
icon_state = "/obj/item/clothing/neck/scarf/orange"
greyscale_colors = "#C67A4B#C67A4B"
/obj/item/clothing/neck/scarf/cyan
name = "cyan scarf"
icon_state = "/obj/item/clothing/neck/scarf/cyan"
greyscale_colors = "#54A3CE#54A3CE"
/obj/item/clothing/neck/scarf/zebra
name = "zebra scarf"
icon_state = "/obj/item/clothing/neck/scarf/zebra"
greyscale_colors = "#333333#EEEEEE"
/obj/item/clothing/neck/scarf/christmas
name = "christmas scarf"
icon_state = "/obj/item/clothing/neck/scarf/christmas"
greyscale_colors = "#038000#960000"
/obj/item/clothing/neck/large_scarf
name = "large scarf"
icon = 'icons/map_icons/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/large_scarf"
post_init_icon_state = "large_scarf"
w_class = WEIGHT_CLASS_TINY
custom_price = PAYCHECK_CREW
greyscale_config = /datum/greyscale_config/scarf
greyscale_config_worn = /datum/greyscale_config/scarf/worn
greyscale_colors = "#C6C6C6#EEEEEE"
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/neck/large_scarf/red
name = "large red scarf"
icon_state = "/obj/item/clothing/neck/large_scarf/red"
greyscale_colors = "#8A2908#A06D66"
/obj/item/clothing/neck/large_scarf/green
name = "large green scarf"
icon_state = "/obj/item/clothing/neck/large_scarf/green"
greyscale_colors = "#525629#888674"
/obj/item/clothing/neck/large_scarf/blue
name = "large blue scarf"
icon_state = "/obj/item/clothing/neck/large_scarf/blue"
greyscale_colors = "#20396C#6F7F91"
/obj/item/clothing/neck/large_scarf/syndie
name = "suspicious looking striped scarf"
desc = "Ready to operate."
icon_state = "/obj/item/clothing/neck/large_scarf/syndie"
greyscale_colors = "#B40000#545350"
armor_type = /datum/armor/large_scarf_syndie
/obj/item/clothing/neck/infinity_scarf
name = "infinity scarf"
icon = 'icons/map_icons/clothing/neck.dmi'
icon_state = "/obj/item/clothing/neck/infinity_scarf"
post_init_icon_state = "infinity_scarf"
w_class = WEIGHT_CLASS_TINY
custom_price = PAYCHECK_CREW
greyscale_colors = COLOR_VERY_LIGHT_GRAY
greyscale_config = /datum/greyscale_config/infinity_scarf
greyscale_config_worn = /datum/greyscale_config/infinity_scarf/worn
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/neck/petcollar
name = "pet collar"
desc = "It's for pets."
icon_state = "petcollar"
var/tagname = null
var/human_wearable = FALSE
/datum/armor/large_scarf_syndie
fire = 50
acid = 40
/*
/obj/item/clothing/neck/petcollar/mob_can_equip(mob/M, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE)
if(!ismonkey(M) && !human_wearable)
return FALSE
return ..()
*/ //BUBBER EDIT END: LET ME WEAR MY PET COLLARS
/obj/item/clothing/neck/petcollar/wearable
human_wearable = TRUE
/obj/item/clothing/neck/petcollar/attack_self(mob/user)
tagname = sanitize_name(tgui_input_text(user, "Would you like to change the name on the tag?", "Pet Naming", "Spot", MAX_NAME_LEN))
if (!tagname || !length(tagname))
name = initial(name)
tagname = null
return
name = "[initial(name)] - [tagname]"
/obj/item/clothing/neck/petcollar/wearable/cyber
desc = "You wear the tie, or you wear this. Your choice."
icon_state = "petcollar_cyber"
//////////////
//DOPE BLING//
//////////////
/obj/item/clothing/neck/necklace/dope
name = "gold necklace"
desc = "Damn, it feels good to be a gangster."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
/obj/item/clothing/neck/necklace/dope/merchant
desc = "Don't ask how it works, the proof is in the holochips!"
/// scales the amount received in case an admin wants to emulate taxes/fees.
var/profit_scaling = 1
/// toggles between sell (TRUE) and get price post-fees (FALSE)
var/selling = FALSE
/obj/item/clothing/neck/necklace/dope/merchant/attack_self(mob/user)
. = ..()
selling = !selling
to_chat(user, span_notice("[src] has been set to [selling ? "'Sell'" : "'Get Price'"] mode."))
/obj/item/clothing/neck/necklace/dope/merchant/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
var/datum/export_report/ex = export_item_and_contents(interacting_with, delete_unsold = selling, dry_run = !selling)
var/price = 0
for(var/x in ex.total_amount)
price += ex.total_value[x]
if(price)
var/true_price = round(price*profit_scaling)
var/fee_display = round(price-true_price)
to_chat(user, span_notice("[selling ? "Sold" : "Getting the price of"] [interacting_with], value: <b>[true_price]</b> [MONEY_NAME][interacting_with.contents.len ? " (exportable contents included)" : ""].[profit_scaling < 1 && selling ? "<b>[fee_display]</b> [MONEY_NAME_AUTOPURAL(fee_display)] taken as processing fee\s." : ""]"))
if(selling)
new /obj/item/holochip(get_turf(user), true_price)
else
to_chat(user, span_warning("There is no export value for [interacting_with] or any items within it."))
return ITEM_INTERACT_BLOCKING
/obj/item/clothing/neck/beads
name = "plastic bead necklace"
desc = "A cheap, plastic bead necklace. Show team spirit! Collect them! Throw them away! The possibilities are endless!"
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "beads"
color = "#ffffff"
custom_price = PAYCHECK_CREW * 0.2
custom_materials = (list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT*5))
/obj/item/clothing/neck/beads/Initialize(mapload)
. = ..()
color = color = pick("#ff0077","#d400ff","#2600ff","#00ccff","#00ff2a","#e5ff00","#ffae00","#ff0000", "#ffffff")
/obj/item/clothing/neck/wreath
name = "\improper Watcher Wreath"
desc = "An elaborate crown made from the twisted flesh and sinew of a watcher. \
Wearing it makes you feel like you have eyes in the back of your head."
icon_state = "watcher_wreath"
worn_y_offset = 10
alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER
resistance_flags = FIRE_PROOF | LAVA_PROOF
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 2, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2)
/obj/item/clothing/neck/wreath/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "wreath_emissive", src, alpha = src.alpha)
/obj/item/clothing/neck/wreath/icewing
name = "\improper Icewing Wreath"
desc = "An elaborate crown made from the twisted flesh and sinew of an icewing watcher. \
Wearing it sends shivers down your spine just from being near it."
icon_state = "icewing_wreath"
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2)