Merge pull request #8335 from GinjaNinja32/reagent_dispenser

Reagent dispenser rework
This commit is contained in:
Chinsky
2015-03-17 10:05:18 +03:00
16 changed files with 4818 additions and 4368 deletions

View File

@@ -1421,6 +1421,12 @@
#include "code\modules\reagents\Chemistry-Recipes.dm"
#include "code\modules\reagents\reagent_containers.dm"
#include "code\modules\reagents\reagent_dispenser.dm"
#include "code\modules\reagents\dispenser\_defines.dm"
#include "code\modules\reagents\dispenser\cartridge.dm"
#include "code\modules\reagents\dispenser\cartridge_presets.dm"
#include "code\modules\reagents\dispenser\dispenser2.dm"
#include "code\modules\reagents\dispenser\dispenser_presets.dm"
#include "code\modules\reagents\dispenser\supply.dm"
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"

View File

@@ -5,7 +5,7 @@
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points.
var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Science","Hydroponics", "Supply", "Miscellaneous")
var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Atmospherics","Medical","Reagents","Reagent Cartridges","Science","Hydroponics", "Supply", "Miscellaneous")
/datum/supply_packs
var/name = null

View File

@@ -47,6 +47,9 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \
new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/utensil/pknife, 1, on_floor = 1), \
new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \
new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0), \
new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0), // 500u
new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0), // 250u
new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
)
var/global/list/datum/stack_recipe/iron_recipes = list ( \

View File

@@ -2,251 +2,10 @@
#define LIQUID 2
#define GAS 3
#define CHEM_DISPENSER_ENERGY_COST 0.1 //How many energy points do we use per unit of chemical?
#define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") //list of available bottle sprites
#define REAGENTS_PER_SHEET 20
/obj/machinery/chem_dispenser
name = "chem dispenser"
density = 1
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
use_power = 0
idle_power_usage = 40
var/ui_title = "Chem Dispenser 5000"
var/energy = 100
var/max_energy = 100
var/amount = 30
var/accept_glass = 0 //At 0 ONLY accepts glass containers. Kinda misleading varname.
var/atom/beaker = null
var/recharged = 0
var/hackedcheck = 0
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid","tungsten")
/obj/machinery/chem_dispenser/proc/recharge()
if(stat & (BROKEN|NOPOWER)) return
var/addenergy = 1
var/oldenergy = energy
energy = min(energy + addenergy, max_energy)
if(energy != oldenergy)
use_power(CHEM_SYNTH_ENERGY / CHEM_DISPENSER_ENERGY_COST) // This thing uses up "alot" of power (this is still low as shit for creating reagents from thin air)
nanomanager.update_uis(src) // update all UIs attached to src
/obj/machinery/chem_dispenser/power_change()
..()
nanomanager.update_uis(src) // update all UIs attached to src
/obj/machinery/chem_dispenser/process()
if(recharged <= 0)
recharge()
recharged = 15
else
recharged -= 1
/obj/machinery/chem_dispenser/New()
..()
recharge()
dispensable_reagents = sortList(dispensable_reagents)
/obj/machinery/chem_dispenser/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
del(src)
return
/obj/machinery/chem_dispenser/blob_act()
if (prob(50))
del(src)
/obj/machinery/chem_dispenser/meteorhit()
del(src)
return
/**
* The ui_interact proc is used to open and update Nano UIs
* If ui_interact is not used then the UI will not update correctly
* ui_interact is currently defined for /atom/movable
*
* @param user /mob The mob who is interacting with this ui
* @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
*
* @return nothing
*/
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1)
if(stat & (BROKEN|NOPOWER)) return
if(user.stat || user.restrained()) return
// this is the data which will be sent to the ui
var/data[0]
data["amount"] = amount
data["energy"] = round(energy)
data["maxEnergy"] = round(max_energy)
data["isBeakerLoaded"] = beaker ? 1 : 0
data["glass"] = accept_glass
var beakerContents[0]
var beakerCurrentVolume = 0
if(beaker && beaker:reagents && beaker:reagents.reagent_list.len)
for(var/datum/reagent/R in beaker:reagents.reagent_list)
beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list...
beakerCurrentVolume += R.volume
data["beakerContents"] = beakerContents
if (beaker)
data["beakerCurrentVolume"] = beakerCurrentVolume
data["beakerMaxVolume"] = beaker:volume
else
data["beakerCurrentVolume"] = null
data["beakerMaxVolume"] = null
var chemicals[0]
for (var/re in dispensable_reagents)
var/datum/reagent/temp = chemical_reagents_list[re]
if(temp)
chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list...
data["chemicals"] = chemicals
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
ui.open()
/obj/machinery/chem_dispenser/Topic(href, href_list)
if(stat & (NOPOWER|BROKEN))
return 0 // don't update UIs attached to this object
if(href_list["amount"])
amount = round(text2num(href_list["amount"]), 5) // round to nearest 5
if (amount < 0) // Since the user can actually type the commands himself, some sanity checking
amount = 0
if (amount > 120)
amount = 120
if(href_list["dispense"])
if (dispensable_reagents.Find(href_list["dispense"]) && beaker != null && beaker.is_open_container())
var/obj/item/weapon/reagent_containers/B = src.beaker
var/datum/reagents/R = B.reagents
var/space = R.maximum_volume - R.total_volume
//uses 1 energy per 10 units.
var/added_amount = min(amount, energy / CHEM_DISPENSER_ENERGY_COST, space)
R.add_reagent(href_list["dispense"], added_amount)
energy = max(energy - added_amount * CHEM_DISPENSER_ENERGY_COST, 0)
if(href_list["ejectBeaker"])
if(beaker)
var/obj/item/weapon/reagent_containers/B = beaker
B.loc = loc
beaker = null
add_fingerprint(usr)
return 1 // update UIs attached to this object
/obj/machinery/chem_dispenser/attackby(var/obj/item/weapon/reagent_containers/B as obj, var/mob/user as mob)
if(isrobot(user))
return
if(src.beaker)
user << "Something is already loaded into the machine."
return
if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food))
if(!accept_glass && istype(B,/obj/item/weapon/reagent_containers/food))
user << "<span class='notice'>This machine only accepts beakers</span>"
src.beaker = B
user.drop_item()
B.loc = src
user << "You set [B] on the machine."
nanomanager.update_uis(src) // update all UIs attached to src
return
/obj/machinery/chem_dispenser/attack_ai(mob/user as mob)
return src.attack_hand(user)
/obj/machinery/chem_dispenser/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
ui_interact(user)
/obj/machinery/chem_dispenser/soda
icon_state = "soda_dispenser"
name = "soda fountain"
desc = "A drink fabricating machine, capable of producing many sugary drinks with just one touch."
ui_title = "Soda Dispens-o-matic"
energy = 100
accept_glass = 1
max_energy = 100
dispensable_reagents = list("water","ice","coffee","cream","tea","icetea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","watermelonjuice")
/obj/machinery/chem_dispenser/soda/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
..()
if(istype(B, /obj/item/device/multitool))
if(hackedcheck == 0)
user << "You change the mode from 'McNano' to 'Pizza King'."
dispensable_reagents += list("thirteenloko","grapesoda")
hackedcheck = 1
return
else
user << "You change the mode from 'Pizza King' to 'McNano'."
dispensable_reagents -= list("thirteenloko","grapesoda")
hackedcheck = 0
return
/obj/machinery/chem_dispenser/beer
icon_state = "booze_dispenser"
name = "booze dispenser"
ui_title = "Booze Portal 9001"
energy = 100
accept_glass = 1
max_energy = 100
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
dispensable_reagents = list("lemon_lime","sugar","orangejuice","limejuice","sodawater","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead")
/obj/machinery/chem_dispenser/beer/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
..()
if(istype(B, /obj/item/device/multitool))
if(hackedcheck == 0)
user << "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
dispensable_reagents += list("goldschlager","patron","watermelonjuice","berryjuice")
hackedcheck = 1
return
else
user << "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
dispensable_reagents -= list("goldschlager","patron","watermelonjuice","berryjuice")
hackedcheck = 0
return
/obj/machinery/chem_dispenser/meds
name = "chem dispenser magic"
density = 1
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
use_power = 0
idle_power_usage = 40
ui_title = "Chem Dispenser 9000"
energy = 100
max_energy = 100
amount = 30
accept_glass = 0 //At 0 ONLY accepts glass containers. Kinda misleading varname.
beaker = null
recharged = 0
hackedcheck = 0
dispensable_reagents = list("inaprovaline","ryetalyn","paracetamol","tramadol","oxycodone","sterilizine","leporazine","kelotane","dermaline","dexalin","dexalinp","tricordrazine","anti_toxin","synaptizine","hyronalin","arithrazine","alkysine","imidazoline","peridaxon","bicaridine","hyperzine","rezadone","spaceacillin","ethylredoxrazine","stoxin","chloralhydrate","cryoxadone","clonexadone")
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,8 @@
#define CARTRIDGE_VOLUME_LARGE 500
#define CARTRIDGE_VOLUME_MEDIUM 250
#define CARTRIDGE_VOLUME_SMALL 100
// Chemistry dispenser starts with 21
// ERT dispenser starts with 28
#define DISPENSER_MAX_CARTRIDGES 30

View File

@@ -0,0 +1,90 @@
/obj/item/weapon/reagent_containers/chem_disp_cartridge
name = "chemical dispenser cartridge"
desc = "This goes in a chemical dispenser."
icon_state = "cartridge"
w_class = 3
volume = CARTRIDGE_VOLUME_LARGE
amount_per_transfer_from_this = 50
// Large, but inaccurate. Use a chem dispenser or beaker for accuracy.
possible_transfer_amounts = list(50, 100)
var/spawn_reagent = null
var/label = ""
/obj/item/weapon/reagent_containers/chem_disp_cartridge/New()
..()
if(spawn_reagent)
reagents.add_reagent(spawn_reagent, volume)
var/datum/reagent/R = chemical_reagents_list[spawn_reagent]
setLabel(R.name)
/obj/item/weapon/reagent_containers/chem_disp_cartridge/examine(mob/user)
..()
user << "It has a capacity of [volume] units."
if(reagents.total_volume <= 0)
user << "It is empty."
else
user << "It contains [reagents.total_volume] units of liquid."
if(!is_open_container())
user << "The cap is sealed."
/obj/item/weapon/reagent_containers/chem_disp_cartridge/verb/setLabel(L as text)
set name = "Set Cartridge Label"
set category = "Object"
set src in view(usr, 1)
if(L)
if(usr)
usr << "<span class='notice'>You set the label on \the [src] to '[L]'.</span>"
label = L
name = "[initial(name)] - '[L]'"
else
if(usr)
usr << "<span class='notice'>You clear the label on \the [src].</span>"
label = ""
name = initial(name)
/obj/item/weapon/reagent_containers/chem_disp_cartridge/attack_self()
..()
if (is_open_container())
usr << "<span class = 'notice'>You put the cap on \the [src].</span>"
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the cap off \the [src].</span>"
flags |= OPENCONTAINER
/obj/item/weapon/reagent_containers/chem_disp_cartridge/afterattack(obj/target, mob/user , flag)
if (!is_open_container() || !flag)
return
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
target.add_fingerprint(user)
if(!target.reagents.total_volume && target.reagents)
user << "<span class='warning'>\The [target] is empty.</span>"
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='warning'>\The [src] is full.</span>"
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
user << "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [target].</span>"
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
user << "<span class='warning'>\The [src] is empty.</span>"
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='warning'>\The [target] is full.</span>"
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You transfer [trans] units of the solution to \the [target].</span>"
else
return ..()

View File

@@ -0,0 +1,94 @@
/obj/item/weapon/reagent_containers/chem_disp_cartridge
small
volume = CARTRIDGE_VOLUME_SMALL
medium
volume = CARTRIDGE_VOLUME_MEDIUM
// Multiple
water spawn_reagent = "water"
sugar spawn_reagent = "sugar"
// Chemistry
hydrogen spawn_reagent = "hydrogen"
lithium spawn_reagent = "lithium"
carbon spawn_reagent = "carbon"
nitrogen spawn_reagent = "nitrogen"
oxygen spawn_reagent = "oxygen"
fluorine spawn_reagent = "fluorine"
sodium spawn_reagent = "sodium"
aluminum spawn_reagent = "aluminum"
silicon spawn_reagent = "silicon"
phosphorus spawn_reagent = "phosphorus"
sulfur spawn_reagent = "sulfur"
chlorine spawn_reagent = "chlorine"
potassium spawn_reagent = "potassium"
iron spawn_reagent = "iron"
copper spawn_reagent = "copper"
mercury spawn_reagent = "mercury"
radium spawn_reagent = "radium"
ethanol spawn_reagent = "ethanol"
sacid spawn_reagent = "sacid"
tungsten spawn_reagent = "tungsten"
// Bar, alcoholic
beer spawn_reagent = "beer"
kahlua spawn_reagent = "kahlua"
whiskey spawn_reagent = "whiskey"
wine spawn_reagent = "wine"
vodka spawn_reagent = "vodka"
gin spawn_reagent = "gin"
rum spawn_reagent = "rum"
tequila spawn_reagent = "tequilla"
vermouth spawn_reagent = "vermouth"
cognac spawn_reagent = "cognac"
ale spawn_reagent = "ale"
mead spawn_reagent = "mead"
// Bar, soft
ice spawn_reagent = "ice"
coffee spawn_reagent = "coffee"
cream spawn_reagent = "cream"
tea spawn_reagent = "tea"
icetea spawn_reagent = "icetea"
cola spawn_reagent = "cola"
smw spawn_reagent = "spacemountainwind"
dr_gibb spawn_reagent = "dr_gibb"
spaceup spawn_reagent = "space_up"
tonic spawn_reagent = "tonic"
sodawater spawn_reagent = "sodawater"
lemon_lime spawn_reagent = "lemon_lime"
orange spawn_reagent = "orangejuice"
lime spawn_reagent = "limejuice"
watermelon spawn_reagent = "watermelonjuice"
// ERT
inaprov spawn_reagent = "inaprovaline"
ryetalyn spawn_reagent = "ryetalyn"
paracetamol spawn_reagent = "paracetamol"
tramadol spawn_reagent = "tramadol"
oxycodone spawn_reagent = "oxycodone"
sterilizine spawn_reagent = "sterilizine"
leporazine spawn_reagent = "leporazine"
kelotane spawn_reagent = "kelotane"
dermaline spawn_reagent = "dermaline"
dexalin spawn_reagent = "dexalin"
dexalin/small volume = CARTRIDGE_VOLUME_SMALL // For the medicine cartridge crate, so it's not too easy to get large amounts of dexalin
dexalin_p spawn_reagent = "dexalinp"
tricord spawn_reagent = "tricordrazine"
dylovene spawn_reagent = "anti_toxin"
synaptizine spawn_reagent = "synaptizine"
hyronalin spawn_reagent = "hyronalin"
arithrazine spawn_reagent = "arithrazine"
alkysine spawn_reagent = "alkysine"
imidazoline spawn_reagent = "imidazoline"
peridaxon spawn_reagent = "peridaxon"
bicaridine spawn_reagent = "bicaridine"
hyperzine spawn_reagent = "hyperzine"
rezadone spawn_reagent = "rezadone"
spaceacillin spawn_reagent = "spaceacillin"
ethylredox spawn_reagent = "ethylredoxrazine"
sleeptox spawn_reagent = "stoxin"
chloral spawn_reagent = "chloralhydrate"
cryoxadone spawn_reagent = "cryoxadone"
clonexadone spawn_reagent = "clonexadone"

View File

@@ -0,0 +1,175 @@
/obj/machinery/chemical_dispenser
name = "chemical dispenser"
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
var/list/spawn_cartridges = null // Set to a list of types to spawn one of each on New()
var/list/cartridges = list() // Associative, label -> cartridge
var/obj/item/weapon/reagent_containers/container = null
var/ui_title = "Chemical Dispenser"
var/accept_drinking = 0
var/amount = 30
use_power = 1
idle_power_usage = 100
density = 1
anchored = 1
/obj/machinery/chemical_dispenser/New()
..()
if(spawn_cartridges)
for(var/type in spawn_cartridges)
add_cartridge(new type(src))
/obj/machinery/chemical_dispenser/examine(mob/user)
..()
user << "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more."
/obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user)
if(!istype(C))
if(user)
user << "<span class='warning'>\The [C] will not fit in \the [src]!</span>"
return
if(cartridges.len >= DISPENSER_MAX_CARTRIDGES)
if(user)
user << "<span class='warning'>\The [src] does not have any slots open for \the [C] to fit into!</span>"
return
if(!C.label)
if(user)
user << "<span class='warning'>\The [C] does not have a label!</span>"
return
if(cartridges[C.label])
if(user)
user << "<span class='warning'>\The [src] already contains a cartridge with that label!</span>"
return
if(user)
user.drop_from_inventory(C)
user << "<span class='notice'>You add \the [C] to \the [src].</span>"
C.loc = src
cartridges[C.label] = C
cartridges = sortAssoc(cartridges)
nanomanager.update_uis(src)
/obj/machinery/chemical_dispenser/proc/remove_cartridge(label)
. = cartridges[label]
cartridges -= label
nanomanager.update_uis(src)
/obj/machinery/chemical_dispenser/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user << "<span class='notice'>You begin to [anchored ? "un" : ""]fasten \the [src].</span>"
if (do_after(user, 20))
user.visible_message(
"<span class='notice'>\The [user] [anchored ? "un" : ""]fastens \the [src].</span>",
"<span class='notice'>You have [anchored ? "un" : ""]fastened \the [src].</span>",
"You hear a ratchet.")
anchored = !anchored
else
user << "<span class='notice'>You decide not to [anchored ? "un" : ""]fasten \the [src].</span>"
else if(istype(W, /obj/item/weapon/reagent_containers/chem_disp_cartridge))
add_cartridge(W, user)
else if(istype(W, /obj/item/weapon/screwdriver))
var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges
if(!label) return
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label)
if(C)
user << "<span class='notice'>You remove \the [C] from \the [src].</span>"
C.loc = loc
else if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food))
var/obj/item/weapon/reagent_containers/RC = W
if(!accept_drinking && istype(RC,/obj/item/weapon/reagent_containers/food))
user << "<span class='warning'>This machine only accepts beakers!</span>"
return
if(!RC.is_open_container())
user << "<span class='warning'>You don't see how \the [src] could dispense reagents into \the [RC].</span>"
return
container = RC
user.drop_from_inventory(RC)
RC.loc = src
user << "<span class='notice'>You set \the [RC] on \the [src].</span>"
nanomanager.update_uis(src) // update all UIs attached to src
else
return ..()
/obj/machinery/chemical_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1)
if(stat & (BROKEN|NOPOWER)) return
if(user.stat || user.restrained()) return
// this is the data which will be sent to the ui
var/data[0]
data["amount"] = amount
data["isBeakerLoaded"] = container ? 1 : 0
data["glass"] = accept_drinking
var beakerD[0]
if(container && container.reagents && container.reagents.reagent_list.len)
for(var/datum/reagent/R in container.reagents.reagent_list)
beakerD[++beakerD.len] = list("name" = R.name, "volume" = R.volume)
data["beakerContents"] = beakerD
if(container)
data["beakerCurrentVolume"] = container.reagents.total_volume
data["beakerMaxVolume"] = container.reagents.maximum_volume
else
data["beakerCurrentVolume"] = null
data["beakerMaxVolume"] = null
var chemicals[0]
for(var/label in cartridges)
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label]
chemicals[++chemicals.len] = list("label" = label, "amount" = C.reagents.total_volume)
data["chemicals"] = chemicals
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "chem_disp.tmpl", ui_title, 390, 680)
ui.set_initial_data(data)
ui.open()
/obj/machinery/chemical_dispenser/Topic(href, href_list)
if(stat & (NOPOWER|BROKEN))
return 0 // don't update UIs attached to this object
if(href_list["amount"])
amount = round(text2num(href_list["amount"]), 1) // round to nearest 1
amount = max(0, min(120, amount)) // Since the user can actually type the commands himself, some sanity checking
else if(href_list["dispense"])
var/label = href_list["dispense"]
if(cartridges[label] && container && container.is_open_container())
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label]
C.reagents.trans_to(container, amount)
else if(href_list["ejectBeaker"])
if(container)
var/obj/item/weapon/reagent_containers/B = container
B.loc = loc
container = null
add_fingerprint(usr)
return 1 // update UIs attached to this object
/obj/machinery/chemical_dispenser/attack_ai(mob/user as mob)
src.attack_hand(user)
/obj/machinery/chemical_dispenser/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
ui_interact(user)

View File

@@ -0,0 +1,115 @@
/obj/machinery/chemical_dispenser/full
spawn_cartridges = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/mercury,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten
)
/obj/machinery/chemical_dispenser/ert
name = "medicine dispenser"
spawn_cartridges = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/inaprov,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ryetalyn,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/paracetamol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tramadol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxycodone,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sterilizine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/leporazine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/kelotane,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dermaline,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dexalin_p,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tricord,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dylovene,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/synaptizine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyronalin,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/arithrazine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/alkysine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/imidazoline,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/peridaxon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/bicaridine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/hyperzine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/rezadone,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceacillin,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethylredox,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sleeptox,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/chloral,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cryoxadone,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/clonexadone
)
/obj/machinery/chemical_dispenser/bar_soft
name = "soft drink dispenser"
desc = "A soda machine."
icon_state = "soda_dispenser"
ui_title = "Soda Dispenser"
accept_drinking = 1
/obj/machinery/chemical_dispenser/bar_soft/full
spawn_cartridges = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ice,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cream,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/icetea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cola,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/smw,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dr_gibb,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceup,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon
)
/obj/machinery/chemical_dispenser/bar_alc
name = "booze dispenser"
desc = "A beer machine. Like a soda machine, but more fun!"
icon_state = "booze_dispenser"
ui_title = "Booze Dispenser"
accept_drinking = 1
/obj/machinery/chemical_dispenser/bar_alc/full
spawn_cartridges = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/beer,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/wine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/gin,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/rum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ale,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/mead
)

View File

@@ -0,0 +1,211 @@
/datum/supply_packs/chemistry_dispenser
name = "Reagent dispenser"
contains = list(
/obj/machinery/chemical_dispenser{anchored = 0}
)
cost = 25
containertype = /obj/structure/largecrate
containername = "reagent dispenser crate"
group = "Reagents"
/datum/supply_packs/beer_dispenser
name = "Booze dispenser"
contains = list(
/obj/machinery/chemical_dispenser/bar_alc{anchored = 0}
)
cost = 25
containertype = /obj/structure/largecrate
containername = "booze dispenser crate"
group = "Reagents"
/datum/supply_packs/soda_dispenser
name = "Soda dispenser"
contains = list(
/obj/machinery/chemical_dispenser/bar_soft{anchored = 0}
)
cost = 25
containertype = /obj/structure/largecrate
containername = "soda dispenser crate"
group = "Reagents"
/datum/supply_packs/reagents
name = "Chemistry dispenser refill"
contains = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/mercury,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten
)
cost = 150
containertype = /obj/structure/closet/crate/secure
containername = "chemical crate"
access = list(access_chemistry)
group = "Reagents"
/datum/supply_packs/alcohol_reagents
name = "Bar alcoholic dispenser refill"
contains = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/beer,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/wine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/gin,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/rum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ale,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/mead
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "alcoholic drinks crate"
access = list(access_bar)
group = "Reagents"
/datum/supply_packs/softdrink_reagents
name = "Bar soft drink dispenser refill"
contains = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ice,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cream,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/icetea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cola,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/smw,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/dr_gibb,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceup,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon
)
cost = 50
containertype = /obj/structure/closet/crate
containername = "soft drinks crate"
group = "Reagents"
/datum/supply_packs/dispenser_cartridges
name = "Empty dispenser cartridges"
contains = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge,
/obj/item/weapon/reagent_containers/chem_disp_cartridge
)
cost = 15
containertype = /obj/structure/closet/crate
containername = "dispenser cartridge crate"
group = "Reagents"
#define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\
/datum/supply_packs/dispenser_cartridges{\
_tname {\
name = _name ;\
containername = _cname ;\
containertype = /obj/structure/closet/crate/secure;\
access = list( _access );\
cost = _cost ;\
contains = list( _type , _type );\
group = "Reagent Cartridges"\
}\
}
#define PACK(_tname, _type, _name, _cname, _cost)\
/datum/supply_packs/dispenser_cartridges{\
_tname {\
name = _name ;\
containername = _cname ;\
containertype = /obj/structure/closet/crate/secure;\
cost = _cost ;\
contains = list( _type , _type );\
group = "Reagent Cartridges"\
}\
}
// Chemistry-restricted (raw reagents excluding sugar/water)
// Datum path Contents type Supply pack name Container name Cost Container access
SEC_PACK(hydrogen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen, "Reagent refill - Hydrogen", "hydrogen reagent cartridge crate", 15, access_chemistry)
SEC_PACK(lithium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium, "Reagent refill - Lithium", "lithium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(carbon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon, "Reagent refill - Carbon", "carbon reagent cartridge crate", 15, access_chemistry)
SEC_PACK(nitrogen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen, "Reagent refill - Nitrogen", "nitrogen reagent cartridge crate", 15, access_chemistry)
SEC_PACK(oxygen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen, "Reagent refill - Oxygen", "oxygen reagent cartridge crate", 15, access_chemistry)
SEC_PACK(fluorine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine, "Reagent refill - Fluorine", "fluorine reagent cartridge crate", 15, access_chemistry)
SEC_PACK(sodium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium, "Reagent refill - Sodium", "sodium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(aluminium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum, "Reagent refill - Aluminum", "aluminum reagent cartridge crate", 15, access_chemistry)
SEC_PACK(silicon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon, "Reagent refill - Silicon", "silicon reagent cartridge crate", 15, access_chemistry)
SEC_PACK(phosphorus,/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus, "Reagent refill - Phosphorus", "phosphorus reagent cartridge crate", 15, access_chemistry)
SEC_PACK(sulfur, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur, "Reagent refill - Sulfur", "sulfur reagent cartridge crate", 15, access_chemistry)
SEC_PACK(chlorine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine, "Reagent refill - Chlorine", "chlorine reagent cartridge crate", 15, access_chemistry)
SEC_PACK(potassium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium, "Reagent refill - Potassium", "potassium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(iron, /obj/item/weapon/reagent_containers/chem_disp_cartridge/iron, "Reagent refill - Iron", "iron reagent cartridge crate", 15, access_chemistry)
SEC_PACK(copper, /obj/item/weapon/reagent_containers/chem_disp_cartridge/copper, "Reagent refill - Copper", "copper reagent cartridge crate", 15, access_chemistry)
SEC_PACK(mercury, /obj/item/weapon/reagent_containers/chem_disp_cartridge/mercury, "Reagent refill - Mercury", "mercury reagent cartridge crate", 15, access_chemistry)
SEC_PACK(radium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/radium, "Reagent refill - Radium", "radium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(ethanol, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol, "Reagent refill - Ethanol", "ethanol reagent cartridge crate", 15, access_chemistry)
SEC_PACK(sacid, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid, "Reagent refill - Sulfuric Acid", "sulfuric acid reagent cartridge crate", 15, access_chemistry)
SEC_PACK(tungsten, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten, "Reagent refill - Tungsten", "tungsten reagent cartridge crate", 15, access_chemistry)
// Bar-restricted (alcoholic drinks)
// Datum path Contents type Supply pack name Container name Cost Container access
SEC_PACK(beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, "Reagent refill - Beer", "beer reagent cartridge crate", 15, access_bar)
SEC_PACK(kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, "Reagent refill - Kahlua", "kahlua reagent cartridge crate", 15, access_bar)
SEC_PACK(whiskey, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, "Reagent refill - Whiskey", "whiskey reagent cartridge crate", 15, access_bar)
SEC_PACK(wine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/wine, "Reagent refill - Wine", "wine reagent cartridge crate", 15, access_bar)
SEC_PACK(vodka, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, "Reagent refill - Vodka", "vodka reagent cartridge crate", 15, access_bar)
SEC_PACK(gin, /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, "Reagent refill - Gin", "gin reagent cartridge crate", 15, access_bar)
SEC_PACK(rum, /obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, "Reagent refill - Rum", "rum reagent cartridge crate", 15, access_bar)
SEC_PACK(tequila, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, "Reagent refill - Tequila", "tequila reagent cartridge crate", 15, access_bar)
SEC_PACK(vermouth, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, "Reagent refill - Vermouth", "vermouth reagent cartridge crate", 15, access_bar)
SEC_PACK(cognac, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, "Reagent refill - Cognac", "cognac reagent cartridge crate", 15, access_bar)
SEC_PACK(ale, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, "Reagent refill - Ale", "ale reagent cartridge crate", 15, access_bar)
SEC_PACK(mead, /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, "Reagent refill - Mead", "mead reagent cartridge crate", 15, access_bar)
// Unrestricted (water, sugar, non-alcoholic drinks)
// Datum path Contents type Supply pack name Container name Cost
PACK(water, /obj/item/weapon/reagent_containers/chem_disp_cartridge/water, "Reagent refill - Water", "water reagent cartridge crate", 15)
PACK(sugar, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, "Reagent refill - Sugar", "sugar reagent cartridge crate", 15)
PACK(ice, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ice, "Reagent refill - Ice", "ice reagent cartridge crate", 15)
PACK(tea, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tea, "Reagent refill - Tea", "tea reagent cartridge crate", 15)
PACK(icetea, /obj/item/weapon/reagent_containers/chem_disp_cartridge/icetea, "Reagent refill - Iced Tea", "iced tea reagent cartridge crate", 15)
PACK(cola, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cola, "Reagent refill - Space Cola", "\improper Space Cola reagent cartridge crate", 15)
PACK(smw, /obj/item/weapon/reagent_containers/chem_disp_cartridge/smw, "Reagent refill - Space Mountain Wind", "\improper Space Mountain Wind reagent cartridge crate", 15)
PACK(dr_gibb, /obj/item/weapon/reagent_containers/chem_disp_cartridge/dr_gibb, "Reagent refill - Dr. Gibb", "\improper Dr. Gibb reagent cartridge crate", 15)
PACK(spaceup, /obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceup, "Reagent refill - Space-Up", "\improper Space-Up reagent cartridge crate", 15)
PACK(tonic, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic, "Reagent refill - Tonic Water", "tonic water reagent cartridge crate", 15)
PACK(sodawater, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater, "Reagent refill - Soda Water", "soda water reagent cartridge crate", 15)
PACK(lemon_lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime, "Reagent refill - Lemon-Lime Juice", "lemon-lime juice reagent cartridge crate", 15)
PACK(orange, /obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, "Reagent refill - Orange Juice", "orange juice reagent cartridge crate", 15)
PACK(lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, "Reagent refill - Lime Juice", "lime juice reagent cartridge crate", 15)
PACK(watermelon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon, "Reagent refill - Watermelon Juice", "watermelon juice reagent cartridge crate", 15)
#undef SEC_PACK
#undef PACK

View File

@@ -19,7 +19,7 @@
var/list/can_be_placed_into = list(
/obj/machinery/chem_master/,
/obj/machinery/chem_dispenser/,
/obj/machinery/chemical_dispenser,
/obj/machinery/reagentgrinder,
/obj/structure/table,
/obj/structure/closet,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,6 @@
Title: Chem Dispenser 5000 UI
Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
-->
<div class="item">
<div class="itemLabel">
Energy:
</div>
<div class="itemContent">
{{:helper.displayBar(data.energy, 0, data.maxEnergy, 'good', data.energy + ' Units')}}
</div>
</div>
<div class="item">
<div class="itemLabel">
Dispense:
@@ -21,24 +12,24 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
{{:helper.link('20', 'gear', {'amount' : 20}, (data.amount == 20) ? 'selected' : null)}}
{{:helper.link('30', 'gear', {'amount' : 30}, (data.amount == 30) ? 'selected' : null)}}
{{:helper.link('40', 'gear', {'amount' : 40}, (data.amount == 40) ? 'selected' : null)}}
<br/><br/>
{{:helper.link('--', '', {'amount' : data.amount-10})}}
{{:helper.link('-', '', {'amount' : data.amount-1})}}
<div style="float: left; width: 80px; text-align: center;">{{:data.amount}}</div>
{{:helper.link('+', '', {'amount' : data.amount+1})}}
{{:helper.link('++', '', {'amount' : data.amount+10})}}
</div>
</div>
<div class="item">&nbsp;</div>
<div class="item">
<div class="itemLabel" style="width: 100%;">
{{if data.glass}}
Drink Dispenser
{{else}}
Chemical Dispenser
{{/if}}
</div>
</div>
<div class="item">
<div class="itemContentWide" style="width: 100%;">
{{if data.chemicals.length}}
{{for data.chemicals}}
{{:helper.link(value.title, 'circle-arrow-s', value.commands, null, data.glass ? 'fixedLeftWide' : 'fixedLeft')}}
{{:helper.link(value.label + " ("+value.amount+")", 'circle-arrow-s', {"dispense":value.label}, null, 'fixedLeftWide')}}
{{/for}}
{{else}}
<span class='bad'>No cartridges installed!</span>
{{/if}}
</div>
</div>
<div class="item">&nbsp;</div>
@@ -67,8 +58,7 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
Glass
{{else}}
Beaker
{{/if}}
is empty
{{/if}} is empty
</span>
{{/for}}
{{else}}
@@ -78,8 +68,7 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
Glass
{{else}}
Beaker
{{/if}}
loaded
{{/if}} loaded
</i></span>
{{/if}}
</div>