diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 64f137d4e17..1247c6645a9 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -51,6 +51,8 @@ var/obj/item/weapon/coin/coin var/datum/wires/vending/wires = null + var/dish_quants = list() //used by the snack machine's custom compartment to count dishes. + var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine. /obj/machinery/vending/New() @@ -84,6 +86,11 @@ coin = null ..() +/obj/machinery/vending/snack/Destroy() + for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents) + S.loc = get_turf(src) + return ..() + /obj/machinery/vending/RefreshParts() //Better would be to make constructable child if(component_parts) product_records = list() @@ -160,6 +167,72 @@ total += restock return total +/obj/machinery/vending/snack/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/reagent_containers/food/snacks)) + if(!compartment_access_check(user)) + return + if(junk_check(W)) + if(!iscompartmentfull(user)) + if(!user.drop_item()) + return + W.loc = src + food_load(W) + user << "You insert [W] into [src]'s chef compartment." + else + user << "[src]'s chef compartment does not accept junk food." + return + + if(istype(W, /obj/item/weapon/storage/bag/tray)) + if(!compartment_access_check(user)) + return + var/obj/item/weapon/storage/T = W + var/loaded = 0 + var/denied_items = 0 + for(var/obj/item/weapon/reagent_containers/food/snacks/S in T.contents) + if(iscompartmentfull(user)) + break + if(junk_check(S)) + T.remove_from_storage(S, src) + food_load(S) + loaded++ + else + denied_items++ + if(denied_items) + user << "[src] refuses some items." + if(loaded) + user << "You insert [loaded] dishes into [src]'s chef compartment." + updateUsrDialog() + return + + ..() + +/obj/machinery/vending/snack/proc/compartment_access_check(user) + req_access_txt = chef_compartment_access + if(!allowed(user) && !emagged && scan_id) + user << "[src]'s chef compartment blinks red: Access denied." + req_access_txt = "0" + return 0 + req_access_txt = "0" + return 1 + +/obj/machinery/vending/snack/proc/junk_check(obj/item/weapon/reagent_containers/food/snacks/S) + if(S.junkiness) + return 0 + return 1 + +/obj/machinery/vending/snack/proc/iscompartmentfull(mob/user) + if(contents.len >= 30) // no more than 30 dishes can fit inside + user << "[src]'s chef compartment is full." + return 1 + return 0 + +/obj/machinery/vending/snack/proc/food_load(obj/item/weapon/reagent_containers/food/snacks/S) + if(dish_quants[S.name]) + dish_quants[S.name]++ + else + dish_quants[S.name] = 1 + sortList(dish_quants) + /obj/machinery/vending/attackby(obj/item/weapon/W, mob/user, params) if(panel_open) if(default_unfasten_wrench(user, W, time = 60)) @@ -280,6 +353,15 @@ dat += "[coin] Remove" else dat += "No coin Remove" + if(istype(src, /obj/machinery/vending/snack)) + dat += "