diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 8b82c1812e..5b1df6cb68 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -39,7 +39,7 @@
//title_image = ntitle_image
/datum/browser/proc/add_stylesheet(name, file)
- if (istype(name, /datum/asset/spritesheet))
+ if(istype(name, /datum/asset/spritesheet))
var/datum/asset/spritesheet/sheet = name
stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]"
else
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 7bafefcf53..d78152acd3 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -704,9 +704,43 @@ GLOBAL_LIST_EMPTY(asset_datums)
Insert(initial(D.id), I)
return ..()
+/datum/asset/spritesheet/vending
+ name = "vending"
+
+/datum/asset/spritesheet/vending/register()
+ for(var/k in GLOB.vending_products)
+ var/atom/item = k
+ if(!ispath(item, /atom))
+ continue
+
+ var/icon_file = initial(item.icon)
+ var/icon_state = initial(item.icon_state)
+ var/icon/I
+
+ var/icon_states_list = icon_states(icon_file)
+ if(icon_state in icon_states_list)
+ I = icon(icon_file, icon_state, SOUTH)
+ var/c = initial(item.color)
+ if(!isnull(c) && c != "#FFFFFF")
+ I.Blend(c, ICON_MULTIPLY)
+ else
+ var/icon_states_string
+ for(var/an_icon_state in icon_states_list)
+ if(!icon_states_string)
+ icon_states_string = "[json_encode(an_icon_state)](\ref[an_icon_state])"
+ else
+ icon_states_string += ", [json_encode(an_icon_state)](\ref[an_icon_state])"
+ stack_trace("[item] does not have a valid icon state, icon=[icon_file], icon_state=[json_encode(icon_state)](\ref[icon_state]), icon_states=[icon_states_string]")
+ I = icon('icons/turf/floors.dmi', "", SOUTH)
+
+ var/imgid = replacetext(replacetext("[item]", "/obj/item/", ""), "/", "-")
+
+ Insert(imgid, I)
+ return ..()
+
/datum/asset/simple/genetics
assets = list(
"dna_discovered.gif" = 'html/dna_discovered.gif',
"dna_undiscovered.gif" = 'html/dna_undiscovered.gif',
"dna_extra.gif" = 'html/dna_extra.gif'
-)
\ No newline at end of file
+)
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index c1f6a3a4be..d2ea0ada47 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -30,10 +30,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/amount = 0
///How many we can store at maximum
var/max_amount = 0
- ///Does the item have a custom price override
- var/custom_price
- ///Does the item have a custom premium price override
- var/custom_premium_price
/**
* # vending machines
@@ -96,12 +92,14 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/list/slogan_list = list()
///Small ad messages in the vending screen - random chance of popping up whenever you open it
var/list/small_ads = list()
+ var/dish_quants = list() //used by the snack machine's custom compartment to count dishes.
///Message sent post vend (Thank you for shopping!)
var/vend_reply
///Last world tick we sent a vent reply
var/last_reply
///Last world tick we sent a slogan message out
var/last_slogan
+ var/last_shopper
///How many ticks until we can send another
var/slogan_delay = 6000
///Icon when vending an item to the user
@@ -125,9 +123,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
///Bills we accept?
var/obj/item/stack/spacecash/bill
///Default price of items if not overridden
- var/default_price = 25
- ///Default price of premium items if not overridden
- var/extra_price = 50
/**
* Is this item on station or not
*
@@ -234,7 +229,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
return
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
- if(!(machine_stat & BROKEN) && powered())
+ if(!(stat & BROKEN) && powered())
SSvis_overlays.add_vis_overlay(src, icon, light_mask, EMISSIVE_LAYER, EMISSIVE_PLANE)
/obj/machinery/vending/obj_break(damage_flag)
@@ -289,8 +284,6 @@ GLOBAL_LIST_EMPTY(vending_products)
if(!start_empty)
R.amount = amount
R.max_amount = amount
- R.custom_price = initial(temp.custom_price)
- R.custom_premium_price = initial(temp.custom_premium_price)
recordlist += R
/**
* Refill a vending machine from a refill canister
@@ -447,7 +440,7 @@ GLOBAL_LIST_EMPTY(vending_products)
if(canLoadItem(the_item) && loadingAttempt(the_item,user))
SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, the_item, src, TRUE)
loaded++
- else
+ else
denied_items++
if(denied_items)
to_chat(user, "[src] refuses some items!")
@@ -530,13 +523,6 @@ GLOBAL_LIST_EMPTY(vending_products)
if(seconds_electrified && !(stat & NOPOWER))
if(shock(user, 100))
return
-
- if(tilted && !user.buckled && !isAI(user))
- to_chat(user, "You begin righting [src].")
- if(do_after(user, 50, target=src))
- untilt(user)
- return
-
return ..()
/obj/machinery/vending/ui_base_html(html)
@@ -558,7 +544,6 @@ GLOBAL_LIST_EMPTY(vending_products)
var/list/data = list(
path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"),
name = R.name,
- price = R.custom_price || default_price,
max_amount = R.max_amount,
ref = REF(R)
)
@@ -568,7 +553,6 @@ GLOBAL_LIST_EMPTY(vending_products)
var/list/data = list(
path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"),
name = R.name,
- price = R.custom_premium_price || extra_price,
max_amount = R.max_amount,
ref = REF(R),
premium = TRUE
@@ -579,7 +563,6 @@ GLOBAL_LIST_EMPTY(vending_products)
var/list/data = list(
path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"),
name = R.name,
- price = R.custom_price || default_price,
max_amount = R.max_amount,
ref = REF(R),
premium = TRUE
@@ -588,66 +571,55 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/ui_data(mob/user)
. = list()
- var/mob/living/carbon/human/H
- var/obj/item/card/id/C
.["stock"] = list()
- for (var/datum/data/vending_product/R in product_records + coin_records + hidden_records)
+ for(var/datum/data/vending_product/R in product_records + coin_records + hidden_records)
.["stock"][R.name] = R.amount
.["extended_inventory"] = extended_inventory
/obj/machinery/vending/ui_act(action, params)
. = ..()
if(.)
- return
+ return
switch(action)
if("vend")
. = TRUE
if(!vend_ready)
- return
- if(panel_open)
+ return
+ if(panel_open)
to_chat(usr, "The vending machine cannot dispense products while its service panel is open!")
- return
+ return
vend_ready = FALSE //One thing at a time!!
var/datum/data/vending_product/R = locate(params["ref"])
var/list/record_to_check = product_records + coin_records
if(extended_inventory)
record_to_check = product_records + coin_records + hidden_records
- if(!R || !istype(R) || !R.product_path)
+ if(!R || !istype(R) || !R.product_path)
vend_ready = TRUE
- return
- var/price_to_use = default_price
- if(R.custom_price)
- price_to_use = R.custom_price
- if(R in hidden_records)
- if(!extended_inventory)
- vend_ready = TRUE
return
- else if (!(R in record_to_check))
+ if(R in hidden_records)
+ if(!extended_inventory)
+ vend_ready = TRUE
+ return
+ else if(!(R in record_to_check))
vend_ready = TRUE
- message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!")
- return
- if (R.amount <= 0)
+ message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!")
+ return
+ if (R.amount <= 0)
say("Sold out of [R.name].")
flick(icon_deny,src)
vend_ready = TRUE
- return
- if(onstation && ishuman(usr))
- var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/C = H.get_idcard(TRUE)
-
-
-
+ return
if(last_shopper != usr || purchase_message_cooldown < world.time)
say("Thank you for shopping with [src]!")
purchase_message_cooldown = world.time + 5 SECONDS
last_shopper = usr
- use_power(5)
- if(icon_vend) //Show the vending animation if needed
- flick(icon_vend,src)
+ use_power(5)
+ if(icon_vend) //Show the vending animation if needed
+ flick(icon_vend,src)
playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
new R.product_path(get_turf(src))
R.amount--
- SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]"))
+ SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]"))
vend_ready = TRUE
/obj/machinery/vending/process()
@@ -685,7 +657,7 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/power_change()
. = ..()
- if(powered())
+ if(powered())
START_PROCESSING(SSmachines, src)
//Somebody cut an important wire and now we're following a new definition of "pitch."
diff --git a/sound/machines/machine_vend.ogg b/sound/machines/machine_vend.ogg
new file mode 100644
index 0000000000..92867a1f3d
Binary files /dev/null and b/sound/machines/machine_vend.ogg differ
diff --git a/tgui-next/packages/tgui/interfaces/Vending.js b/tgui-next/packages/tgui/interfaces/Vending.js
index e394c2d241..ed409f93e8 100644
--- a/tgui-next/packages/tgui/interfaces/Vending.js
+++ b/tgui-next/packages/tgui/interfaces/Vending.js
@@ -33,8 +33,6 @@ export const Vending = props => {
Welcome, {data.user.name},
{' '}
{data.user.job || "Unemployed"}!
-
- Your balance is {data.user.cash} credits.
) || (
@@ -47,16 +45,6 @@ export const Vending = props => {
{inventory.map((product => {
- const free = (
- !data.onstation
- || product.price === 0
- || (
- !product.premium
- && data.department
- && data.user
- && data.department === data.user.department
- )
- );
return (
@@ -91,7 +79,7 @@ export const Vending = props => {
{custom && (