diff --git a/GainStation13/code/mechanics/den abductors/console.dm b/GainStation13/code/mechanics/den abductors/console.dm
index 03990015..f3d29fec 100644
--- a/GainStation13/code/mechanics/den abductors/console.dm
+++ b/GainStation13/code/mechanics/den abductors/console.dm
@@ -13,6 +13,8 @@
var/obj/item/abductor/gizmo/gizmo
/// The current scale linked with the console
var/obj/structure/scale/credits/linked_scale
+ /// How much of each goodie have we purchased?
+ var/list/buy_counts = list()
/obj/machinery/abductor/feeder_console/attack_hand(mob/user)
. = ..()
@@ -24,18 +26,11 @@
var/credits = linked_scale?.credits
dat += "Gear Credits: [credits]
"
- dat += "Transfer credits in exchange for supplies:
"
- dat += "Nutri-Pump TURBO Autosurgeon
"
- dat += "Meal Vendor Refill
"
- dat += "Lipoifier Grenade (Weak)
"
- dat += "Lipoifier Grenade (Strong)
"
- dat += "Fatbeam Gun
"
- dat += "Science Tool
"
- dat += "Chameleon Kit
"
- dat += "Banana Cream Pie Cannon
"
- dat += "Thermal Imaging Glasses
"
- dat += "Reagent Gun
"
- dat += "Protolathe Kit
"
+ dat += "Transfer credits in exchange for supplies:
"
+ for(var/goodie in subtypesof(/datum/feeders_den_goodie))
+ var/datum/feeders_den_goodie/temp_goodie = new goodie()
+ dat += "[temp_goodie.name] (Cost: [temp_goodie.credit_cost])
"
+ qdel(temp_goodie)
if(pad)
dat += "Emergency Teleporter System."
@@ -60,29 +55,23 @@
if(href_list["teleporter_send"])
TeleporterSend()
if(href_list["dispense"])
- switch(href_list["dispense"])
- if("fatbeam")
- Dispense(/obj/item/gun/fatbeam, cost=400)
- if("tool")
- Dispense(/obj/item/abductor/gizmo, cost=120)
- if("grenade_weak")
- Dispense(/obj/item/grenade/chem_grenade/lipoifier_weak, cost=120)
- if("grenade_strong")
- Dispense(/obj/item/grenade/chem_grenade/lipoifier_strong, cost=360)
- if("nutripump_turbo")
- Dispense(/obj/item/autosurgeon/nutripump_turbo, cost=150)
- if("vendor_refill")
- Dispense(/obj/item/vending_refill/mealdor, cost=100)
- if("chameleon")
- Dispense(/obj/item/storage/box/syndie_kit/chameleon, cost=300)
- if("pie_cannon")
- Dispense(/obj/item/pneumatic_cannon/pie/selfcharge, cost=500)
- if("thermals")
- Dispense(/obj/item/clothing/glasses/thermal/syndi, cost=400)
- if("reagent_gun")
- Dispense(/obj/item/gun/chem, cost=500)
- if("protolathe_kit")
- Dispense(/obj/item/storage/box/rndboards, cost=1500)
+ var/datum_path = href_list["dispense"]
+ var/datum/feeders_den_goodie/goodie_datum = new datum_path()
+ var/price = goodie_datum.credit_cost
+ var/item_path = goodie_datum.item_to_dispense
+
+ if(!isnull(goode.datum.initial_stock) && buy_counts[goodie_datum.name] && (buy_counts[goodie_datum.name] >= goodie_datum.initial_stock))
+ say("Unable to purchase more!")
+ return FALSE
+
+ if(!Dispense(item_path, price))
+ return FALSE
+
+ if(buy_counts[goodie_datum.name] == null)
+ buy_counts[goodie_datum.name] = 0
+
+ buy_counts[goodie_datum.name] += 1
+ qdel(goodie_datum)
updateUsrDialog()
@@ -133,9 +122,12 @@
return TRUE
/obj/machinery/abductor/feeder_console/proc/Dispense(obj/item/new_item, cost = 1)
+ if(!ispath(new_item))
+ return FALSE
+
if(!linked_scale?.credits || linked_scale.credits < cost)
say("Insufficent credits!")
- return TRUE
+ return FALSE
linked_scale.credits -= cost
say("Incoming supply!")
diff --git a/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm b/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm
new file mode 100644
index 00000000..a070abc3
--- /dev/null
+++ b/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm
@@ -0,0 +1,71 @@
+/datum/feeders_den_goodie
+ /// What is the name of the goodie we want to buy?
+ var/name
+ /// How much credits does this cost to buy?
+ var/credit_cost = 0
+ /// How much stock of this can be bought? If this is null, infinite can be bought
+ var/initial_stock
+ /// What is the path of the item to dispense?
+ var/item_to_dispense
+
+/datum/feeders_den_goodie/food_vendor_refill
+ name = "Food Vendor Refill"
+ credit_cost = 100
+ item_to_dispense = /obj/item/vending_refill/mealdor
+
+/datum/feeders_den_goodie/gizmo
+ name = "Science Tool"
+ credit_cost = 120
+ item_to_dispense = /obj/item/abductor/gizmo/feeder
+
+/datum/feeders_den_goodie/nutripump_turbo
+ name = "Nutri-Pump TURBO Autosurgeon"
+ credit_cost = 150
+ item_to_dispense = /obj/item/autosurgeon/nutripump_turbo
+
+/datum/feeders_den_goodie/fatbeam_gun
+ name = "Fatbeam gun"
+ credit_cost = 400
+ item_to_dispense = /obj/item/gun/fatbeam
+ initial_stock = 2
+
+/datum/feeders_den_goodie/grenade_weak
+ name = "Lipofier Grenade (Weak)"
+ credit_cost = 120
+ item_to_dispense = /obj/item/grenade/chem_grenade/lipoifier_weak
+ initial_stock = 6
+
+/datum/feeders_den_goodie/grenade_strong
+ name = "Lipofier Grenade (Strong)"
+ credit_cost = 360
+ item_to_dispense = /obj/item/grenade/chem_grenade/lipoifier_strong
+ initial_stock = 3
+
+/datum/feeders_den_goodie/chameleon
+ name = "Chameleon Kit"
+ credit_cost = 300
+ item_to_dispense = /obj/item/storage/box/syndie_kit/chameleon
+ initial_stock = 2
+
+/datum/feeders_den_goodie/pie_cannon
+ name = "Banana Cream Pie Cannon"
+ credit_cost = 500
+ item_to_dispense = /obj/item/pneumatic_cannon/pie/selfcharge
+ initial_stock = 2
+
+/datum/feeders_den_goodie/thermals
+ name = "Thermal Imaging Glasses"
+ credit_cost = 400
+ item_to_dispense = /obj/item/clothing/glasses/thermal/syndi
+ initial_stock = 2
+
+/datum/feeders_den_goodie/reagent_gun
+ name = "Reagent Gun"
+ credit_cost = 500
+ item_to_dispense = /obj/item/gun/chem
+
+/datum/feeders_den_goodie/protolathe
+ name = "R&D Kit"
+ credit_cost = 1500
+ item_to_dispense = /obj/item/storage/box/rndboards
+ initial_stock = 2
diff --git a/tgstation.dme b/tgstation.dme
index fbe1dbe5..4feb4645 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3087,6 +3087,7 @@
#include "GainStation13\code\mechanics\wand.dm"
#include "GainStation13\code\mechanics\web_weaving.dm"
#include "GainStation13\code\mechanics\den abductors\console.dm"
+#include "GainStation13\code\mechanics\den abductors\purchaseble_goodies.dm"
#include "GainStation13\code\mobs\cakegolem.dm"
#include "GainStation13\code\mobs\chocoslime.dm"
#include "GainStation13\code\mobs\races\caloritegolem.dm"