Adds vendor refill cartridges to cargo

This commit is contained in:
Heroman
2022-02-15 07:08:16 +10:00
parent 6c78b5a5c7
commit 19e522b437
11 changed files with 562 additions and 1310 deletions
+1
View File
@@ -23,6 +23,7 @@ var/list/all_supply_groups = list("Atmospherics",
"Science",
"Security",
"Supplies",
"Vendor Refills",
"Voidsuits")
/datum/supply_pack
@@ -0,0 +1,137 @@
/datum/supply_pack/vending_refills
group = "Vendor Refills"
containertype = /obj/structure/closet/crate/plastic
containername = "vendor refill cartridge crate"
/datum/supply_pack/randomised/vending_refills
group = "Vendor Refills"
containertype = /obj/structure/closet/crate/plastic
containername = "vendor refill cartridge crate"
/datum/supply_pack/vending_refills/snack
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snack)
name = "Getmore Chocolate Corp Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/fitness
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/fitness)
name = "SweatMAX Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/hotfood
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/hotfood)
name = "Hot Foods Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/weeb
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/weeb)
name = "Nippon-tan Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/sol
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/sol)
name = "Sol-Snacks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/snix
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snix)
name = "Snix Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/snlvend
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snlvend)
name = "Shop-n-Large Snacks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/sovietvend
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/sovietvend)
name = "Ration Station Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/coffee
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/coffee)
name = "Hot Drinks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/cola
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/cola)
name = "Robust Softdrinks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/cola_soft
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft)
name = "Soft Robustdrinks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/sovietsoda
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda)
name = "BODA Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/bepis
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/bepis)
name = "Bepis Softdrinks Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/cigarette
contains = list(/obj/item/weapon/refill_cartridge/autoname/cigarette)
name = "Cigarette Vendor Refill Cartridge"
cost = 15
/datum/supply_pack/vending_refills/wardrobe
contains = list(/obj/item/weapon/refill_cartridge/multitype/wardrobe)
name = "Wardrobe Vendor Refill Cartridge"
cost = 10
/datum/supply_pack/vending_refills/giftvendor
contains = list(/obj/item/weapon/refill_cartridge/autoname/giftvendor)
name = "AlliCo Baubles and Confectionaries Vendor Refill Cartridge"
cost = 20
/datum/supply_pack/vending_refills/general_food
contains = list(/obj/item/weapon/refill_cartridge/multitype/food = 5)
name = "5-Pack Food Vendor Refill Cartridges"
cost = 75
/datum/supply_pack/vending_refills/general_drink
contains = list(/obj/item/weapon/refill_cartridge/multitype/drink = 5)
name = "5-Pack Drink Vendor Refill Cartridges"
cost = 75
/datum/supply_pack/vending_refills/general_clothing
contains = list(/obj/item/weapon/refill_cartridge/multitype/clothing = 5)
name = "5-Pack Clothing Vendor Refill Cartridges"
cost = 75
/datum/supply_pack/vending_refills/general_technical
contains = list(/obj/item/weapon/refill_cartridge/multitype/technical = 5)
name = "5-Pack Technical Vendor Refill Cartridges"
cost = 75
/datum/supply_pack/vending_refills/general_specialty
contains = list(/obj/item/weapon/refill_cartridge/multitype/specialty = 5)
name = "5-Pack Specialty Vendor Refill Cartridges"
cost = 150
/datum/supply_pack/randomised/vending_refills/value_pack // 5 random vendor-specific cartridges at lower average price. But why?
num_contained = 5
contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snack,
/obj/item/weapon/refill_cartridge/autoname/food/fitness,
/obj/item/weapon/refill_cartridge/autoname/food/hotfood,
/obj/item/weapon/refill_cartridge/autoname/food/weeb,
/obj/item/weapon/refill_cartridge/autoname/food/sol,
/obj/item/weapon/refill_cartridge/autoname/food/snix,
/obj/item/weapon/refill_cartridge/autoname/food/snlvend,
/obj/item/weapon/refill_cartridge/autoname/food/sovietvend,
/obj/item/weapon/refill_cartridge/autoname/drink/coffee,
/obj/item/weapon/refill_cartridge/autoname/drink/cola,
/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft,
/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda,
/obj/item/weapon/refill_cartridge/autoname/drink/bepis,
/obj/item/weapon/refill_cartridge/autoname/cigarette,
/obj/item/weapon/refill_cartridge/multitype/wardrobe,
/obj/item/weapon/refill_cartridge/autoname/technical/assist,
/obj/item/weapon/refill_cartridge/autoname/technical/tool,
/obj/item/weapon/refill_cartridge/autoname/giftvendor)
name = "5-pack Extra-Cheap Vendor Refill Cartridges"
cost = 35
+6 -1
View File
@@ -65,7 +65,12 @@
var/new_product = new item_path(stored)
instances += new_product
/datum/stored_item/proc/refill_products(var/refill_amount)
if(!instances)
init_products()
for(var/i = 1 to refill_amount)
var/new_product = new item_path(stored)
instances += new_product
/datum/stored_item/stack/get_amount()
return amount
+46
View File
@@ -42,6 +42,10 @@
var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price.
/// Set automatically, enables pricing
var/has_prices = FALSE
// This one is used for refill cartridge use.
var/list/refill = list() // For each, use the following pattern:
// Enables refilling with appropriate cartridges
var/refillable = TRUE
// List of vending_product items available.
var/list/product_records = list()
@@ -126,12 +130,31 @@ GLOBAL_LIST_EMPTY(vending_products)
if(LAZYLEN(premium))
has_premium = TRUE
if(!LAZYLEN(refill) && refillable) // Manually setting refill list prevents the automatic population. By default filled with all entries from normal product.
refill += products
LAZYCLEARLIST(products)
LAZYCLEARLIST(contraband)
LAZYCLEARLIST(premium)
LAZYCLEARLIST(prices)
all_products.Cut()
/obj/machinery/vending/proc/refill_inventory()
if(!(LAZYLEN(refill))) //This shouldn't happen, but just in case...
return
for(var/entry in refill)
var/datum/stored_item/vending_product/current_product
for(var/datum/stored_item/vending_product/product in product_records)
if(product.item_path == entry)
current_product = product
break
if(!current_product)
continue
else
current_product.refill_products(refill[entry])
/obj/machinery/vending/Destroy()
qdel(wires)
wires = null
@@ -170,6 +193,29 @@ GLOBAL_LIST_EMPTY(vending_products)
if(I || istype(W, /obj/item/weapon/spacecash))
attack_hand(user)
return
else if(istype(W, /obj/item/weapon/refill_cartridge))
if(stat & (BROKEN|NOPOWER))
to_chat(user, "<span class='notice'>You cannot refill [src] while it is not functioning.</span>")
return
if(!anchored)
to_chat(user, "<span class='notice'>You cannot refill [src] while it is not secured.</span>")
return
if(panel_open)
to_chat(user, "<span class='notice'>You cannot refill [src] while it's panel is open.</span>")
return
if(!refillable)
to_chat(user, "<span class='notice'>\the [src] does not have a refill port.</span>")
return
var/obj/item/weapon/refill_cartridge/RC = W
if(RC.can_refill(src))
to_chat(user, "<span class='notice'>You refill [src] using [RC].</span>")
user.drop_from_inventory(RC)
qdel(RC)
refill_inventory()
return
else
to_chat(user, "<span class='notice'>You cannot refill [src] with [RC].</span>")
return
else if(W.is_screwdriver())
panel_open = !panel_open
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
+3
View File
@@ -152,6 +152,9 @@
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 2,
/obj/item/weapon/reagent_containers/food/drinks/greentea = 10,
/obj/item/weapon/reagent_containers/food/drinks/chaitea = 5) // VOREStation Edit - Lowers Coffee/Hot Chocolate/Tea Prices from 3 -> 2.
refill = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 15,
/obj/item/weapon/reagent_containers/food/drinks/tea = 1,
/obj/item/weapon/reagent_containers/food/drinks/ice = 29)
vending_sound = "machines/vending/vending_coffee.ogg"
/obj/machinery/vending/snack
File diff suppressed because it is too large Load Diff
+161
View File
@@ -0,0 +1,161 @@
/obj/item/weapon/refill_cartridge
name = "vending refill cartridge"
desc = "A specialized cartridge used to refill vending machines with fresh product. Tamper proof."
icon = 'icons/obj/refill_cartridges.dmi'
icon_state = "rc_generic"
item_state = "syringe_kit"
var/refill_type
/obj/item/weapon/refill_cartridge/proc/can_refill(obj/machinery/vending/V as obj)
if(V.type == refill_type)
return TRUE
return FALSE
/obj/item/weapon/refill_cartridge/multitype
refill_type = list()
var/refill_exceptions = list()
/obj/item/weapon/refill_cartridge/multitype/can_refill(obj/machinery/vending/V as obj)
for(var/entry in refill_type)
if(istype(V, entry) && !(V.type in refill_exceptions))
return TRUE
return FALSE
/obj/item/weapon/refill_cartridge/autoname/Initialize()
..()
if(refill_type && ispath(refill_type))
var/atom/tmp = refill_type
src.name = "[initial(tmp.name)] refill cartridge"
/obj/item/weapon/refill_cartridge/universal // For admin/event use. Can refill any refillable vendor.
name = "ultimate vending refill cartridge"
desc = "A universal cartridge used to refill vending machines with fresh product."
icon_state = "rc_mystery"
/obj/item/weapon/refill_cartridge/universal/can_refill(obj/machinery/vending/V as obj)
return TRUE
// Multi-vendor subtypes
/obj/item/weapon/refill_cartridge/multitype/technical
name = "technical vendor refill cartridge"
icon_state = "rc_mechanical"
refill_type = list(/obj/machinery/vending/assist,
/obj/machinery/vending/tool,
/obj/machinery/vending/loadout/gadget)
/obj/item/weapon/refill_cartridge/multitype/food
name = "food vendor refill cartridge"
icon_state = "rc_food"
refill_type = list(/obj/machinery/vending/snack,
/obj/machinery/vending/fitness,
/obj/machinery/vending/hotfood,
/obj/machinery/vending/weeb,
/obj/machinery/vending/sol,
/obj/machinery/vending/snix,
/obj/machinery/vending/snlvend,
/obj/machinery/vending/sovietvend)
/obj/item/weapon/refill_cartridge/multitype/drink
name = "drinks vendor refill cartridge"
icon_state = "rc_drink"
refill_type = list(/obj/machinery/vending/coffee,
/obj/machinery/vending/cola,
/obj/machinery/vending/sovietsoda,
/obj/machinery/vending/bepis)
/obj/item/weapon/refill_cartridge/multitype/smokes //Multitype version in case multiple smoke machine vendors exist in future.
name = "smoking vendor refill cartridge"
icon_state = "rc_generic"
refill_type = list(/obj/machinery/vending/cigarette)
/obj/item/weapon/refill_cartridge/multitype/clothing
name = "clothing vendor refill cartridge"
icon_state = "rc_clothes"
refill_type = list(/obj/machinery/vending/wardrobe,
/obj/machinery/vending/loadout)
refill_exceptions = list(/obj/machinery/vending/loadout/gadget)
/obj/item/weapon/refill_cartridge/multitype/specialty
name = "specialty vendor refill cartridge"
icon_state = "rc_generic"
refill_type = list(/obj/machinery/vending/cart,
/obj/machinery/vending/medical,
/obj/machinery/vending/phoronresearch,
/obj/machinery/vending/wallmed1,
/obj/machinery/vending/wallmed2,
/obj/machinery/vending/wallmed_airlock,
/obj/machinery/vending/security,
/obj/machinery/vending/hydronutrients,
/obj/machinery/vending/dinnerware,
/obj/machinery/vending/engivend,
/obj/machinery/vending/robotics,
/obj/machinery/vending/fishing,
/obj/machinery/vending/blood,
/obj/machinery/vending/entertainer)
/obj/item/weapon/refill_cartridge/autoname/food
icon_state = "rc_food"
/obj/item/weapon/refill_cartridge/autoname/food/snack
refill_type = /obj/machinery/vending/snack
/obj/item/weapon/refill_cartridge/autoname/food/fitness
refill_type = /obj/machinery/vending/fitness
/obj/item/weapon/refill_cartridge/autoname/food/hotfood
refill_type = /obj/machinery/vending/hotfood
/obj/item/weapon/refill_cartridge/autoname/food/weeb
refill_type = /obj/machinery/vending/weeb
/obj/item/weapon/refill_cartridge/autoname/food/sol
refill_type = /obj/machinery/vending/sol
/obj/item/weapon/refill_cartridge/autoname/food/snix
refill_type = /obj/machinery/vending/snix
/obj/item/weapon/refill_cartridge/autoname/food/snlvend
refill_type = /obj/machinery/vending/snlvend
/obj/item/weapon/refill_cartridge/autoname/food/sovietvend
refill_type = /obj/machinery/vending/sovietvend
/obj/item/weapon/refill_cartridge/autoname/drink
icon_state = "rc_drink"
/obj/item/weapon/refill_cartridge/autoname/drink/coffee
refill_type = /obj/machinery/vending/coffee
/obj/item/weapon/refill_cartridge/autoname/drink/cola
refill_type = /obj/machinery/vending/cola
/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft
refill_type = /obj/machinery/vending/cola/soft
/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda
refill_type = /obj/machinery/vending/sovietsoda
/obj/item/weapon/refill_cartridge/autoname/drink/bepis
refill_type = /obj/machinery/vending/bepis
/obj/item/weapon/refill_cartridge/autoname/cigarette
icon_state = "rc_generic"
refill_type = /obj/machinery/vending/cigarette
/obj/item/weapon/refill_cartridge/multitype/wardrobe
name = "specialized wardrobe refill cartridge"
icon_state = "rc_clothes"
refill_type = list(/obj/machinery/vending/wardrobe)
/obj/item/weapon/refill_cartridge/autoname/technical
icon_state = "rc_mechanical"
/obj/item/weapon/refill_cartridge/autoname/technical/assist
refill_type = /obj/machinery/vending/assist
/obj/item/weapon/refill_cartridge/autoname/technical/tool
refill_type = /obj/machinery/vending/tool
/obj/item/weapon/refill_cartridge/autoname/giftvendor
refill_type = /obj/machinery/vending/giftvendor
@@ -146,3 +146,13 @@
. = ..()
reagents.add_reagent("sleevingcure", 1)
color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/airlock
name = "\'Airlock\' Pill"
desc = "Neutralizes toxins and provides a mild analgesic effect."
icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/airlock/New()
..()
reagents.add_reagent("anti_toxin", 15)
reagents.add_reagent("paracetamol", 5)
Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

-21
View File
@@ -264,27 +264,6 @@
/obj/machinery/power/supermatter/touch_map_edge()
qdel(src)
//Airlock antitox vendor
/obj/machinery/vending/wallmed_airlock
name = "Airlock NanoMed"
desc = "Wall-mounted Medical Equipment dispenser. This limited-use version dispenses antitoxins with mild painkillers for surface EVAs."
icon_state = "wallmed"
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/weapon/reagent_containers/pill/airlock = 20)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2)
req_log_access = access_cmo
has_logs = 1
/obj/item/weapon/reagent_containers/pill/airlock
name = "\'Airlock\' Pill"
desc = "Neutralizes toxins and provides a mild analgesic effect."
icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/airlock/New()
..()
reagents.add_reagent("anti_toxin", 15)
reagents.add_reagent("paracetamol", 5)
//"Red" Armory Door
/obj/machinery/door/airlock/security/armory
name = "Red Armory"
+2
View File
@@ -471,6 +471,7 @@
#include "code\datums\supplypacks\supply.dm"
#include "code\datums\supplypacks\supply_vr.dm"
#include "code\datums\supplypacks\supplypacks.dm"
#include "code\datums\supplypacks\vending_refills_vr.dm"
#include "code\datums\supplypacks\voidsuits.dm"
#include "code\datums\supplypacks\voidsuits_vr.dm"
#include "code\datums\underwear\bottom.dm"
@@ -2145,6 +2146,7 @@
#include "code\modules\economy\vending.dm"
#include "code\modules\economy\vending_machines.dm"
#include "code\modules\economy\vending_machines_vr.dm"
#include "code\modules\economy\vending_refills.dm"
#include "code\modules\emotes\emote_define.dm"
#include "code\modules\emotes\emote_mob.dm"
#include "code\modules\emotes\definitions\_mob.dm"