Files
Casper3667andGitHub 2ef91b3bf3 A bundle of smaller bugfixes (#21882)
-  Assunzioni Sera Stellata di Dalyan Wine can be ordered again.
- Sandals now default to being wood colored if not otherwise given
color.
- Added camera film to the toy shelf storage and briefcases and canes to
the clothing shelf storage.
-  Fixed that the operations lobby was powered by the wrong grid.
-  Added some custom items to the merchant blacklist.
2026-02-19 11:25:30 +00:00

690 lines
24 KiB
Plaintext

/**
* Cigarette shelf
* Clothing shelf
* Food and drinks shelf
* Toy shelf
* Cash register
* Commissary restock
* Cigarettes
* Tobacco leaves
* Chewing tobacco
* Smoking accessories
* Electronic cigarette
* Snack
* Xeno snack
* Candy
* Microwave meal
* Drink
* Cheap booze
* Restock crate
*/
/obj/machinery/smartfridge/tradeshelf
name = "cigarette shelf"
desc = "A commercialized shelf for cigarettes and associated items."
icon_state = "trade_smokes"
use_power = POWER_USE_OFF
idle_power_usage = 0
active_power_usage = 0
contents_path = "-cigarettebox"
accepted_items = list(/obj/item/storage/box/fancy/cigarettes,
/obj/item/storage/chewables,
/obj/item/storage/box/fancy/chewables,
/obj/item/storage/cigfilters,
/obj/item/storage/box/fancy/cigpaper,
/obj/item/storage/box/fancy/matches,
/obj/item/flame/lighter,
/obj/item/clothing/mask/smokable/ecig,
/obj/item/reagent_containers/ecig_cartridge,
/obj/item/spacecash/ewallet/lotto
)
display_tiers = 5
display_tier_amt = 3
/obj/machinery/smartfridge/tradeshelf/clothing
name = "clothing shelf"
desc = "A commercialized shelf for clothing and associated items."
icon_state = "trade_clothes"
contents_path = "-clothing"
accepted_items = list(/obj/item/storage/backpack,
/obj/item/storage/belt,
/obj/item/clothing,
/obj/item/storage/briefcase,
/obj/item/cane
)
display_tiers = 3
display_tier_amt = 5
/obj/machinery/smartfridge/tradeshelf/food
name = "food and drinks shelf"
desc = "A commercialized shelf for food and drinks."
icon_state = "trade_food"
contents_path = "-edible"
use_power = POWER_USE_IDLE
idle_power_usage = 5
active_power_usage = 100
cooling = TRUE
accepted_items = list(/obj/item/reagent_containers/food,
/obj/item/storage/box/fancy/cookiesnack,
/obj/item/storage/box/pineapple,
/obj/item/storage/box/fancy/gum,
/obj/item/storage/box/fancy/vkrexitaffy,
/obj/item/clothing/mask/chewable/candy/lolli,
/obj/item/storage/box/fancy/admints,
/obj/item/storage/box/fancy/quick_microwave_pizza,
/obj/item/reagent_containers/food/snacks/packaged_microwave_mac_and_cheeze,
/obj/item/reagent_containers/food/snacks/packaged_microwave_fiery_mac_and_cheeze,
/obj/item/storage/box/fancy/packaged_burger,
/obj/item/storage/box/fancy/packaged_mossburger,
/obj/item/storage/box/fancy/toptarts_strawberry,
/obj/item/storage/box/fancy/toptarts_chocolate_peanutbutter,
/obj/item/storage/box/fancy/toptarts_blueberry,
/obj/item/storage/box/unique/donkpockets,
/obj/item/storage/box/fancy/yoke
)
display_tiers = 4
display_tier_amt = 5
/obj/machinery/smartfridge/tradeshelf/toy
name = "toy shelf"
desc = "A commercialized shelf for toys and associated items."
icon_state = "trade_toys"
contents_path = "-toy"
accepted_items = list(/obj/item/toy,
/obj/item/lipstick,
/obj/item/paicard,
/obj/item/camera,
/obj/item/synthesized_instrument,
/obj/item/storage/box/unique/snappops,
/obj/item/haircomb,
/obj/item/storage/box/fancy/crayons,
/obj/item/melee/dinograbber,
/obj/item/laser_pointer,
/obj/item/deck,
/obj/item/storage/pill_bottle/dice,
/obj/item/pen,
/obj/item/storage/stickersheet,
/obj/item/gun/projectile/revolver/capgun,
/obj/item/gun/bang,
/obj/item/eightball,
/obj/item/bikehorn,
/obj/item/camera_film
)
display_tiers = 4
display_tier_amt = 5
/obj/machinery/smartfridge/tradeshelf/mouse_drop_receive(atom/dropping, mob/user, params)
LoadComponent(/datum/component/leanable, dropping)
/obj/machinery/smartfridge/tradeshelf/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/commissary_restrock))
var/obj/item/commissary_restrock/P = attacking_item
var/item_loaded = 0
for(var/obj/G in P.contents)
if(accept_check(G))
if(length(contents) >= max_n_of_items)
break
P.remove_from_storage(G,src)
item_quants[G.name]++
item_loaded++
if(item_loaded)
user.visible_message("<b>[user]</b> loads [src] with [P].", SPAN_NOTICE("You load [src] with [P]."))
if(length(P.contents) > 0)
to_chat(user, SPAN_NOTICE("Some items are refused."))
update_overlays()
return TRUE
. = ..()
// -------------------------------------------------
/obj/structure/cash_register/commissary
var/machine_id = ""
var/list/items = list()
var/list/items_to_price = list()
var/list/buying = list()
var/new_item = ""
var/new_price = 0
var/sum = 0
var/editmode = FALSE
var/receipt = ""
var/destinationact = "Operations"
var/credit = 100
var/shop_name = "Commissary"
storage_type = null
/obj/structure/cash_register/commissary/mechanics_hints(mob/user, distance, is_adjacent)
. = list()
. += "Alt click with a command id in hand, to gain command access."
. += "Alt click with credits in hand, to deposit them."
. += "Alt click while having operations access, to withdraw credits from it."
. += "Items can be paid for with id cards, charge cards or physical credits, and a receipt will be printed."
/obj/structure/cash_register/commissary/Initialize()
. = ..()
machine_id = "[station_name()] Idris Quik-Pay Register #[SSeconomy.num_financial_terminals++]"
/obj/structure/cash_register/commissary/AltClick(var/mob/user)
var/item = user.get_active_hand()
var/obj/item/card/id/I = item
if(istype(I) && (ACCESS_HEADS in I.access))
if(ACCESS_HEADS in I.access)
editmode = TRUE
to_chat(user, SPAN_NOTICE("Command access granted."))
SStgui.update_uis(src)
return
if(istype(item, /obj/item/spacecash) && !istype(item, /obj/item/spacecash/ewallet))
var/obj/item/spacecash/cashmoney = item
credit += cashmoney.worth
user.drop_from_inventory(cashmoney,get_turf(src))
visible_message("\The [user] inserts some credits into \the [src]." )
qdel(cashmoney)
return
I = user.GetIdCard()
if(istype(I) && (ACCESS_CARGO in I.access))
var/price_guess = text2num(sanitizeSafe( tgui_input_text(user, "How much do you wish to withdraw? Remaining credits: [credit]电", "QuikPay", 0, 10), 10))
if(isnull(price_guess) || price_guess == 0)
return
price_guess = max(0, round(price_guess, 0.01))
if(credit >= price_guess)
spawn_money(price_guess, loc, user)
credit -= price_guess
visible_message("\The [user] remove some credits from \the [src]." )
return
/obj/structure/cash_register/commissary/proc/print_receipt()
var/obj/item/paper/notepad/receipt/R = new(loc)
var/receiptname = "Receipt: [machine_id]"
R.set_content_unsafe(receiptname, receipt, sum)
//stamp the paper
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
stampoverlay.icon_state = "paper_stamp-hop"
if(!R.stamped)
R.stamped = new
R.stamped += /obj/item/stamp
R.AddOverlays(stampoverlay)
R.stamps += "<HR><i>This paper has been stamped by the Idris Quik-Pay Register.</i>"
usr.put_in_any_hand_if_possible(R)
R.ripped = TRUE
/obj/structure/cash_register/commissary/attackby(obj/item/attacking_item, mob/user)
if(sum == 0)
return
if (istype(attacking_item, /obj/item/spacecash/ewallet))
card_pay(attacking_item, user)
return
else if (istype(attacking_item, /obj/item/card/id))
ID_pay(attacking_item, user)
return
else if(istype(attacking_item, /obj/item/spacecash))
cash_pay(attacking_item, user)
return
/obj/structure/cash_register/commissary/proc/cash_pay(obj/item/spacecash/cashmoney, mob/user)
var/transaction_amount = sum
if(transaction_amount > cashmoney.worth)
to_chat(user, SPAN_WARNING("[icon2html(cashmoney, user)] That is not enough money."))
return 0
if(istype(cashmoney, /obj/item/spacecash/bundle))
visible_message(SPAN_INFO("\The [user] inserts some cash into \the [src]."))
var/obj/item/spacecash/bundle/cashmoney_bundle = cashmoney
cashmoney_bundle.worth -= transaction_amount
if(cashmoney_bundle.worth <= 0)
usr.drop_from_inventory(cashmoney_bundle,get_turf(src))
qdel(cashmoney_bundle)
else
cashmoney_bundle.update_icon()
else
visible_message(SPAN_INFO("\The [user] inserts a bill into \the [src]."))
var/left = cashmoney.worth - transaction_amount
user.drop_from_inventory(cashmoney,get_turf(src))
qdel(cashmoney)
if(left)
spawn_money(left, get_turf(user), user)
credit += transaction_amount
print_receipt()
clear_order()
return 1
/obj/structure/cash_register/commissary/proc/ID_pay(obj/item/attacking_item, mob/user)
var/obj/item/card/id/I = attacking_item.GetID()
var/transaction_amount = sum
var/transaction_purpose = "[destinationact] Payment"
var/transaction_terminal = machine_id
var/transaction = SSeconomy.transfer_money(I.associated_account_number, SSeconomy.get_department_account(destinationact)?.account_number,transaction_purpose,transaction_terminal,transaction_amount,null,usr)
if(transaction)
to_chat(user, SPAN_NOTICE("[icon2html(src, user)]<span class='warning'>[transaction].</span>"))
else
playsound(src, 'sound/machines/chime.ogg', 50, 1)
visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes."))
visible_message("\The [user] swipes a card on \the [src]." )
print_receipt()
sum = 0
receipt = ""
to_chat(user, SPAN_NOTICE("Transaction completed, please return to the home screen."))
clear_order()
/obj/structure/cash_register/commissary/proc/card_pay(obj/item/attacking_item, mob/user)
var/obj/item/spacecash/ewallet/E = attacking_item
var/transaction_amount = sum
var/transaction_purpose = "[destinationact] Payment"
var/transaction_terminal = machine_id
if(transaction_amount <= E.worth)
SSeconomy.charge_to_account(SSeconomy.get_department_account(destinationact)?.account_number, E.owner_name, transaction_purpose, transaction_terminal, transaction_amount)
E.worth -= transaction_amount
visible_message("\The [user] swipes a card on \the [src]." )
playsound(src, 'sound/machines/chime.ogg', 50, 1)
src.audible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes."))
print_receipt()
sum = 0
receipt = ""
to_chat(user, SPAN_NOTICE("Transaction completed, please return to the home screen."))
clear_order()
else if (transaction_amount > E.worth)
to_chat(user, SPAN_WARNING("[icon2html(src, user)]\The [E] doesn't have that much money!"))
return
/obj/structure/cash_register/commissary/attack_hand(mob/living/user)
. = ..()
ui_interact(user)
/obj/structure/cash_register/commissary/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "QuikPay", "Idris Quik-Pay Register", 550, 550)
ui.open()
/obj/structure/cash_register/commissary/ui_data(var/mob/user)
var/list/data = list()
data["items"] = items
data["buying"] = buying
data["sum"] = sum
data["new_item"] = new_item
data["new_price"] = new_price
data["editmode"] = editmode
data["destinationact"] = destinationact
return data
/obj/structure/cash_register/commissary/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
switch(action)
if("add")
if(!editmode)
to_chat(usr, SPAN_WARNING("Device locked."))
return FALSE
items += list(list("name" = new_item, "price" = new_price))
items_to_price[new_item] = new_price
. = TRUE
if("remove")
if(!editmode)
to_chat(usr, SPAN_NOTICE("Device locked."))
return FALSE
var/index = 0
for(var/list/L in items)
index++
if(L["name"] == params["removing"])
items.Cut(index, index+1)
. = TRUE
if("set_new_price")
new_price = params["set_new_price"]
. = TRUE
if("set_new_item")
new_item = params["set_new_item"]
. = TRUE
if("clear")
clear_order()
. = TRUE
if("buy")
for(var/list/L in buying)
if(L["name"] == params["buying"])
L["amount"]++
return TRUE
buying += list(list("name" = params["buying"], "amount" = params["amount"], "price" = items_to_price[params["buying"]]))
if("removal")
var/index = 0
for(var/list/L in buying)
index++
if(L["name"] == params["removal"])
if(L["amount"] > 1)
L["amount"]--
else
buying.Cut(index, index+1)
. = TRUE
if("confirm")
// Ensuring it is clear, in case the button is clicked multiple times
receipt = ""
sum = 0
var/obj/item/card/id/id_card = usr.GetIdCard()
var/cashier = id_card? id_card.registered_name : "Unknown"
receipt = "<center><H2>[shop_name] receipt</H2>Today's date: [worlddate2text()]<BR>Cashier: [cashier]</center><HR>Purchased items:<ul>"
for(var/list/bought_item in buying)
var/item_name = bought_item["name"]
var/item_amount = bought_item["amount"]
var/item_price = items_to_price[item_name]
receipt += "<li><b>[item_name]</b>: [item_amount] x [item_price]电: [item_amount * item_price]电<br>"
sum += item_price * item_amount
receipt += "</ul><HR>Total:</b> [sum]电<br>"
playsound(src, 'sound/machines/ping.ogg', 25, 1)
audible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] pings."))
. = TRUE
if("locking")
if(editmode)
editmode = FALSE
to_chat(usr, SPAN_NOTICE("Device locked."))
else
if(!editmode)
var/obj/item/card/id/I = usr.GetIdCard()
if(!istype(I))
return
if(check_access(I))
editmode = !editmode
to_chat(usr, SPAN_NOTICE("Device [editmode ? "un" : ""]locked."))
. = TRUE
if("accountselect")
if(!editmode)
to_chat(usr, SPAN_WARNING("Device locked."))
return FALSE
var/dest = tgui_input_list(usr, "What account would you like to select?", "Destination Account", assoc_to_keys(SSeconomy.department_accounts))
if(!dest)
return FALSE
destinationact = dest
return TRUE
/obj/structure/cash_register/commissary/proc/clear_order()
buying.Cut()
sum = 0
receipt = ""
/obj/item/commissary_restrock
name = "commissary cigarette restock pack"
icon = 'icons/obj/storage/boxes.dmi'
icon_state = "commissary_restock"
item_state = "commissary_restock"
w_class = WEIGHT_CLASS_NORMAL
var/illustration = "sparkler"
var/starts_with = list(
// Cigarettes
/obj/item/storage/box/fancy/cigarettes/pra = 3,
/obj/item/storage/box/fancy/cigarettes/dpra = 3,
/obj/item/storage/box/fancy/cigarettes/nka = 3,
/obj/item/storage/box/fancy/cigarettes/federation = 3,
/obj/item/storage/box/fancy/cigarettes/dyn = 3,
/obj/item/storage/box/fancy/cigarettes/oracle = 3,
/obj/item/storage/box/fancy/cigarettes/koko = 3,
/obj/item/storage/box/fancy/cigarettes/dromedaryco = 3,
/obj/item/storage/box/fancy/cigarettes/nicotine = 3,
/obj/item/storage/box/fancy/cigarettes/cigar = 3
)
/obj/item/commissary_restrock/rollable
name = "commissary tobacco leaves restock pack"
starts_with = list(
// Rollables
/obj/item/storage/chewables/rollable = 3,
/obj/item/storage/chewables/rollable/unathi = 3,
/obj/item/storage/chewables/rollable/fine = 3,
/obj/item/storage/chewables/rollable/nico = 3,
/obj/item/storage/chewables/rollable/oracle = 3,
/obj/item/storage/chewables/rollable/vedamor = 3
)
/obj/item/commissary_restrock/chewable
name = "commissary chewing tobacco restock pack"
starts_with = list(
// Chewing tobacco
/obj/item/storage/chewables/tobacco = 3,
/obj/item/storage/chewables/tobacco/bad = 3,
/obj/item/storage/chewables/tobacco/fine = 3,
/obj/item/storage/chewables/tobacco/federation = 3,
/obj/item/storage/chewables/tobacco/dyn = 3,
/obj/item/storage/chewables/tobacco/koko = 3,
/obj/item/storage/box/fancy/chewables/tobacco/nico = 3,
/obj/item/storage/chewables/oracle = 3,
/obj/item/storage/chewables/solar_salve = 3
)
/obj/item/commissary_restrock/smoking_accessory
name = "commissary smoking accessories restock pack"
starts_with = list(
// Misc smoking
/obj/item/storage/cigfilters = 6,
/obj/item/storage/box/fancy/cigpaper = 3,
/obj/item/storage/box/fancy/cigpaper/fine = 3,
// Lighters & stuff
/obj/item/storage/box/fancy/matches = 5,
/obj/item/flame/lighter/random = 4,
/obj/item/flame/lighter/zippo = 4,
/obj/item/spacecash/ewallet/lotto = 8 // A bit of a risk that hangar techs may just use them instead of selling, but that should be handled IC as theft
)
/obj/item/commissary_restrock/electronic_cig
name = "commissary electronic cigarette restock pack"
starts_with = list(
// Electronic
/obj/item/clothing/mask/smokable/ecig/util = 3,
/obj/item/reagent_containers/ecig_cartridge/med_nicotine = 2,
/obj/item/reagent_containers/ecig_cartridge/high_nicotine = 2,
/obj/item/reagent_containers/ecig_cartridge/orange = 2,
/obj/item/reagent_containers/ecig_cartridge/watermelon = 2,
/obj/item/reagent_containers/ecig_cartridge/grape = 2
)
/obj/item/commissary_restrock/food
name = "commissary snack restock pack"
illustration = "snack"
starts_with = list(
// Chips
/obj/item/reagent_containers/food/snacks/chips = 6,
/obj/item/reagent_containers/food/snacks/chips/chicken = 3,
/obj/item/reagent_containers/food/snacks/chips/cucumber = 3,
/obj/item/reagent_containers/food/snacks/chips/dirtberry = 3,
/obj/item/reagent_containers/food/snacks/chips/phoron = 3, // Not actually phoron
/obj/item/reagent_containers/food/snacks/algaechips = 2,
// General
/obj/item/reagent_containers/food/snacks/no_raisin = 3,
/obj/item/storage/box/pineapple = 2,
/obj/item/reagent_containers/food/snacks/ricetub = 4,
/obj/item/reagent_containers/food/snacks/riceball = 4,
/obj/item/reagent_containers/food/snacks/seaweed = 4,
/obj/item/reagent_containers/food/snacks/tuna = 2,
/obj/item/reagent_containers/food/drinks/dry_ramen = 3,
/obj/item/reagent_containers/food/snacks/sosjerky = 3
)
/obj/item/commissary_restrock/food/xeno
name = "commissary xeno snack restock pack"
illustration = "snack"
starts_with = list(
// Skrell
/obj/item/reagent_containers/food/snacks/skrellsnacks = 3,
/obj/item/reagent_containers/food/snacks/meatsnack = 2,
/obj/item/reagent_containers/food/drinks/jyalra = 2,
/obj/item/reagent_containers/food/drinks/jyalra/cheese = 2,
/obj/item/reagent_containers/food/drinks/jyalra/apple = 2,
/obj/item/reagent_containers/food/drinks/jyalra/cherry = 2,
// Vaurca
/obj/item/reagent_containers/food/snacks/koisbar_clean = 6,
// Unathi
/obj/item/reagent_containers/food/snacks/nathisnack = 2,
/obj/item/reagent_containers/food/snacks/candy/koko = 3,
// Tajara
/obj/item/reagent_containers/food/snacks/adhomian_can = 2,
)
/obj/item/commissary_restrock/food/candy
name = "commissary candy restock pack"
starts_with = list(
// Candy
/obj/item/reagent_containers/food/snacks/candy = 4,
/obj/item/reagent_containers/food/snacks/chocolatebar = 4,
/obj/item/reagent_containers/food/snacks/whitechocolate/wrapped = 4,
/obj/item/storage/box/fancy/cookiesnack = 3,
/obj/item/storage/box/fancy/gum = 4,
/obj/item/storage/box/fancy/vkrexitaffy = 3,
/obj/item/clothing/mask/chewable/candy/lolli = 5,
/obj/item/storage/box/fancy/admints = 3,
/obj/item/reagent_containers/food/drinks/bottle/bestblend,
/obj/item/storage/box/fancy/foysnack,
/obj/item/reagent_containers/food/snacks/choctruffles
)
/obj/item/commissary_restrock/food/microwave
name = "commissary microwave meal restock pack"
starts_with = list(
// Microwave meals
/obj/item/storage/box/fancy/quick_microwave_pizza = 3,
/obj/item/storage/box/fancy/quick_microwave_pizza/olive = 3,
/obj/item/storage/box/fancy/quick_microwave_pizza/pepperoni = 3,
/obj/item/storage/box/fancy/quick_microwave_pizza/district6 = 3,
/obj/item/reagent_containers/food/snacks/packaged_microwave_mac_and_cheeze = 3,
/obj/item/reagent_containers/food/snacks/packaged_microwave_fiery_mac_and_cheeze = 3,
/obj/item/storage/box/fancy/packaged_burger = 3,
/obj/item/storage/box/fancy/packaged_mossburger = 2,
/obj/item/reagent_containers/food/snacks/quick_curry = 3,
/obj/item/reagent_containers/food/snacks/hv_dinner = 3,
/obj/item/storage/box/fancy/toptarts_strawberry = 3,
/obj/item/storage/box/fancy/toptarts_chocolate_peanutbutter = 3,
/obj/item/storage/box/fancy/toptarts_blueberry = 3,
/obj/item/storage/box/unique/donkpockets = 3
)
/obj/item/commissary_restrock/drink
name = "commissary drink restock pack"
illustration = "soda"
starts_with = list(
// Soda
/obj/item/reagent_containers/food/drinks/cans/cola = 5,
/obj/item/reagent_containers/food/drinks/cans/diet_cola = 5,
/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 5,
/obj/item/reagent_containers/food/drinks/cans/dr_gibb = 5,
/obj/item/reagent_containers/food/drinks/cans/starkist = 5,
/obj/item/reagent_containers/food/drinks/cans/peach_soda = 5,
/obj/item/reagent_containers/food/drinks/cans/space_up = 5,
/obj/item/reagent_containers/food/drinks/cans/melon_soda = 5,
// Misc
/obj/item/reagent_containers/food/drinks/waterbottle = 5,
/obj/item/reagent_containers/food/drinks/cans/root_beer = 5,
/obj/item/reagent_containers/food/drinks/cans/iced_tea = 5,
/obj/item/reagent_containers/food/drinks/cans/grape_juice = 5,
/obj/item/reagent_containers/food/drinks/zobo = 5,
// Skrell
/obj/item/reagent_containers/food/drinks/cans/dyn = 5,
// Tajara
/obj/item/reagent_containers/food/drinks/cans/hrozamal_soda = 5,
/obj/item/reagent_containers/food/drinks/cans/adhomai_milk = 3,
/obj/item/reagent_containers/food/drinks/cans/earthen_juice = 3,
// Milk
/obj/item/reagent_containers/food/drinks/cans/beetle_milk = 5,
/obj/item/reagent_containers/food/drinks/carton/small/milk = 5,
/obj/item/reagent_containers/food/drinks/carton/small/milk/choco = 5,
/obj/item/reagent_containers/food/drinks/carton/small/milk/strawberry = 5
)
/obj/item/commissary_restrock/drink/booze_cheap
name = "commissary cheap booze restock pack"
starts_with = list(
// Booze
/obj/item/storage/box/fancy/yoke/beer = 2,
/obj/item/storage/box/fancy/yoke/ebisu = 2,
/obj/item/storage/box/fancy/yoke/shimauma = 2,
/obj/item/reagent_containers/food/drinks/cans/beer = 6,
/obj/item/reagent_containers/food/drinks/cans/beer/rice = 6,
/obj/item/reagent_containers/food/drinks/cans/beer/rice/shimauma = 6,
/obj/item/reagent_containers/food/drinks/cans/beer/whistlingforest = 6,
/obj/item/reagent_containers/food/drinks/bottle/small/xuizijuice = 6
)
/obj/item/commissary_restrock/Initialize(mapload, ...)
. = ..()
if(illustration)
var/image/illustration_img = image(icon, illustration)
illustration_img.appearance_flags |= RESET_COLOR
AddOverlays(illustration_img)
fill()
/obj/item/commissary_restrock/proc/fill()
if(LAZYLEN(starts_with))
for(var/t in starts_with)
if(!ispath(t))
crash_with("[t] in [src]'s starts_with list is not a path!")
continue
for(var/i=0, i<starts_with[t], i++)
new t(src)
return
/obj/item/commissary_restrock/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This item can be used to restock the commissary shelves."
. += "Left-click on this when empty to fold it into a sheet if it is empty."
/obj/item/commissary_restrock/attack_self(mob/user as mob)
. = ..()
if(contents.len)
to_chat(user, SPAN_NOTICE("There are still things left in \the [src]."))
return
to_chat(user, SPAN_NOTICE("You fold \the [src] flat."))
playsound(src.loc, 'sound/items/storage/boxfold.ogg', 30, 1)
var/obj/item/foldable = new /obj/item/stack/material/cardboard()
qdel(src)
user.put_in_hands(foldable) //try to put it inhands if possible
/obj/item/commissary_restrock/proc/remove_from_storage(obj/item/W, atom/new_location)
if(!istype(W))
return FALSE
if(new_location)
W.forceMove(new_location)
else
W.forceMove(get_turf(src))
W.on_exit_storage(src)
update_icon()
return TRUE
/obj/item/commissary_restrock/update_icon()
. = ..()
if(length(contents) == 0)
icon_state = "[initial(icon_state)]_used"
item_state = "[initial(item_state)]_used"
/obj/structure/closet/crate/commissary
name = "commissary crate"
desc = "A crate packed with boxes of various goods. Handle with care!"
/obj/structure/closet/crate/commissary/fill()
new /obj/item/commissary_restrock(src)
new /obj/item/commissary_restrock/rollable(src)
new /obj/item/commissary_restrock/chewable(src)
new /obj/item/commissary_restrock/smoking_accessory(src)
new /obj/item/commissary_restrock/electronic_cig(src)
new /obj/item/commissary_restrock/food(src)
new /obj/item/commissary_restrock/food/candy(src)
new /obj/item/commissary_restrock/food/xeno(src)
new /obj/item/commissary_restrock/food/microwave(src)
new /obj/item/commissary_restrock/drink(src)
new /obj/item/commissary_restrock/drink/booze_cheap(src)