mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-31 09:00:25 +01:00
Supercedes #21909 Adds a single bottle of bicaridine, kelotane, and dexalin to the medical smartfridge on the Horizon. Also adds bicaridine, tricordrazine, and dermaline to the cargo order screen. Butazoline and dermaline are priced as premium medicines. Tricordrazine is priced cheap. --------- Signed-off-by: Cody Brittain <1779662+Generalcamo@users.noreply.github.com> Co-authored-by: VMSolidus <evilexecutive@gmail.com>
715 lines
25 KiB
Plaintext
715 lines
25 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
|
|
has_emissive = FALSE
|
|
|
|
/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
|
|
has_emissive = TRUE
|
|
|
|
/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_icon()
|
|
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."
|
|
. += "The register can print a paper which can be used to quickly fill it out in the future by using it on the register."
|
|
|
|
/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(istype(attacking_item, /obj/item/paper))
|
|
read_paper_list(attacking_item, user)
|
|
return
|
|
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
|
|
visible_message("\The [user] swipes a card on \the [src]." )
|
|
audible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes."))
|
|
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
|
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]." )
|
|
audible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes."))
|
|
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
|
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/proc/read_paper_list(obj/item/paper/R, mob/user)
|
|
if(!editmode)
|
|
balloon_alert(user, "device locked!")
|
|
return FALSE
|
|
var/result = read_paper_price_list(R)
|
|
for(var/item in result)
|
|
items += list(list("name" = item["name"], "price" = item["price"]))
|
|
items_to_price[item["name"]] += item["price"]
|
|
|
|
/obj/structure/cash_register/commissary/proc/print_price(mob/user)
|
|
return print_price_to_paper(shop_name, items, loc, user)
|
|
|
|
/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)
|
|
balloon_alert(usr, "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)
|
|
balloon_alert(usr, "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
|
|
balloon_alert(usr, "device locked!")
|
|
else
|
|
if(!editmode)
|
|
var/obj/item/card/id/I = usr.GetIdCard()
|
|
if(!istype(I))
|
|
return
|
|
if(check_access(I))
|
|
editmode = !editmode
|
|
balloon_alert(usr, "device [editmode ? "un" : ""]locked")
|
|
. = TRUE
|
|
|
|
if("accountselect")
|
|
if(!editmode)
|
|
balloon_alert(usr, "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
|
|
. = TRUE
|
|
|
|
if("print_dsv")
|
|
if(!editmode)
|
|
balloon_alert(usr, "device locked!")
|
|
return FALSE
|
|
print_price(usr)
|
|
. = 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)
|