Coonflict fiiixeeess
This commit is contained in:
@@ -30,6 +30,10 @@ 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
|
||||
@@ -50,6 +54,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
integrity_failure = 0.33
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
|
||||
circuit = /obj/item/circuitboard/machine/vendor
|
||||
payment_department = ACCOUNT_SRV
|
||||
light_power = 0.5
|
||||
light_range = MINIMUM_USEFUL_LIGHT_RANGE
|
||||
/// Is the machine active (No sales pitches if off)!
|
||||
@@ -118,11 +123,13 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
var/extended_inventory
|
||||
///Are we checking the users ID
|
||||
var/scan_id = TRUE
|
||||
///Coins that we accept?
|
||||
var/obj/item/coin/coin
|
||||
///Bills that 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
|
||||
///cost multiplier per department or access
|
||||
var/list/cost_multiplier_per_dept = list()
|
||||
/**
|
||||
* Is this item on station or not
|
||||
*
|
||||
@@ -144,7 +151,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
var/obj/item/vending_refill/refill_canister = null
|
||||
|
||||
/// how many items have been inserted in a vendor
|
||||
var/loaded_items
|
||||
var/loaded_items = 0
|
||||
|
||||
///Name of lighting mask for the vending machine
|
||||
var/light_mask
|
||||
@@ -180,11 +187,18 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
|
||||
last_slogan = world.time + rand(0, slogan_delay)
|
||||
power_change()
|
||||
if(onstation_override) //overrides the checks if true.
|
||||
onstation = TRUE
|
||||
return
|
||||
if(mapload && !is_station_level(z)) //check if it was initially created off station during mapload.
|
||||
onstation = FALSE
|
||||
if(circuit)
|
||||
circuit.onstation = onstation //sync up the circuit so the pricing schema is carried over if it's reconstructed.
|
||||
else if(circuit && (circuit.onstation != onstation)) //check if they're not the same to minimize the amount of edited values.
|
||||
onstation = circuit.onstation //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station.
|
||||
|
||||
/obj/machinery/vending/Destroy()
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(coin)
|
||||
QDEL_NULL(bill)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/can_speak()
|
||||
@@ -284,6 +298,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
if(!start_empty)
|
||||
R.amount = amount
|
||||
R.max_amount = amount
|
||||
R.custom_price = initial(temp.custom_price)
|
||||
recordlist += R
|
||||
/**
|
||||
* Refill a vending machine from a refill canister
|
||||
@@ -375,39 +390,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
if(panel_open && is_wire_tool(I))
|
||||
wires.interact(user)
|
||||
return
|
||||
else if(istype(I, /obj/item/coin))
|
||||
if(coin)
|
||||
to_chat(user, "<span class='warning'>[src] already has [coin] inserted</span>")
|
||||
return
|
||||
if(bill)
|
||||
to_chat(user, "<span class='warning'>[src] already has [bill] inserted</span>")
|
||||
return
|
||||
if(!premium.len)
|
||||
to_chat(user, "<span class='warning'>[src] doesn't have a coin slot.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
coin = I
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/spacecash))
|
||||
if(coin)
|
||||
to_chat(user, "<span class='warning'>[src] already has [coin] inserted</span>")
|
||||
return
|
||||
if(bill)
|
||||
to_chat(user, "<span class='warning'>[src] already has [bill] inserted</span>")
|
||||
return
|
||||
if(!premium.len)
|
||||
to_chat(user, "<span class='warning'>[src] doesn't have a bill slot.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
var/obj/item/stack/S = I
|
||||
S.use(1)
|
||||
bill = new S.type(src, 1)
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
return
|
||||
else if(refill_canister && istype(I, refill_canister))
|
||||
if(refill_canister && istype(I, refill_canister))
|
||||
if (!panel_open)
|
||||
to_chat(user, "<span class='warning'>You should probably unscrew the service panel first!</span>")
|
||||
else if (stat & (BROKEN|NOPOWER))
|
||||
@@ -543,11 +526,13 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
/obj/machinery/vending/ui_static_data(mob/user)
|
||||
. = list()
|
||||
.["onstation"] = onstation
|
||||
.["product_records"] = list()
|
||||
for (var/datum/data/vending_product/R in product_records)
|
||||
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)
|
||||
)
|
||||
@@ -557,6 +542,7 @@ 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
|
||||
@@ -567,6 +553,7 @@ 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
|
||||
@@ -575,12 +562,28 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
/obj/machinery/vending/ui_data(mob/user)
|
||||
. = list()
|
||||
var/obj/item/card/id/C = user.get_idcard(TRUE)
|
||||
.["cost_mult"] = 1
|
||||
.["cost_text"] = ""
|
||||
if(C && C.registered_account)
|
||||
.["user"] = list()
|
||||
.["user"]["name"] = C.registered_account.account_holder
|
||||
.["user"]["cash"] = C.registered_account.account_balance
|
||||
if(C.registered_account.account_job)
|
||||
.["user"]["job"] = C.registered_account.account_job.title
|
||||
else
|
||||
.["user"]["job"] = "No Job"
|
||||
var/cost_mult = get_best_discount(C)
|
||||
if(cost_mult != 1)
|
||||
.["cost_mult"] = cost_mult
|
||||
if(cost_mult < 1)
|
||||
.["cost_text"] = " [(1 - cost_mult) * 100]% OFF"
|
||||
else
|
||||
.["cost_text"] = " [(cost_mult - 1) * 100]% EXTRA"
|
||||
.["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
|
||||
.["coin"] = coin
|
||||
.["bill"] = bill
|
||||
|
||||
/obj/machinery/vending/ui_act(action, params)
|
||||
. = ..()
|
||||
@@ -594,75 +597,71 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
if(panel_open)
|
||||
to_chat(usr, "<span class='warning'>The vending machine cannot dispense products while its service panel is open!</span>")
|
||||
return
|
||||
if((!allowed(usr)) && !(obj_flags & EMAGGED) && scan_id) //For SECURE VENDING MACHINES YEAH
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>" )
|
||||
flick(icon_deny,src)
|
||||
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)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
if(R.amount <= 0)
|
||||
to_chat(usr, "<span class='warning'>Sold out.</span>")
|
||||
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 coin_records)
|
||||
if(!(coin || bill))
|
||||
to_chat(usr, "<span class='warning'>You need to insert a coin to get this item!</span>")
|
||||
vend_ready = TRUE
|
||||
return
|
||||
if(coin && coin.string_attached)
|
||||
if(prob(50))
|
||||
if(usr.put_in_hands(coin))
|
||||
to_chat(usr, "<span class='notice'>You successfully pull [coin] out before [src] could swallow it.</span>")
|
||||
coin = null
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You couldn't pull [coin] out because your hands are full!</span>")
|
||||
QDEL_NULL(coin)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You weren't able to pull [coin] out fast enough, the machine ate it, string and all!</span>")
|
||||
QDEL_NULL(coin)
|
||||
else
|
||||
QDEL_NULL(coin)
|
||||
QDEL_NULL(bill)
|
||||
else if(!(R in product_records))
|
||||
else if (!(R in record_to_check))
|
||||
vend_ready = TRUE
|
||||
message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!")
|
||||
return
|
||||
if(((last_reply + 200) <= world.time) && vend_reply)
|
||||
speak(vend_reply)
|
||||
last_reply = world.time
|
||||
if (R.amount <= 0)
|
||||
say("Sold out of [R.name].")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
if(onstation && price_to_use >= 0)
|
||||
var/obj/item/card/id/C = usr.get_idcard(TRUE)
|
||||
if(!C)
|
||||
say("No card found.")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
else if (!C.registered_account)
|
||||
say("No account found.")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
var/datum/bank_account/account = C.registered_account
|
||||
if(coin_records.Find(R) || hidden_records.Find(R))
|
||||
price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price
|
||||
else
|
||||
price_to_use = round(price_to_use * get_best_discount(C))
|
||||
if(price_to_use && !account.adjust_money(-price_to_use))
|
||||
say("You do not possess the funds to purchase [R.name].")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department)
|
||||
if(D)
|
||||
D.adjust_money(price_to_use)
|
||||
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)
|
||||
var/vended = new R.product_path(get_turf(src))
|
||||
playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
|
||||
var/obj/item/vended = new R.product_path(get_turf(src))
|
||||
R.amount--
|
||||
if(usr.CanReach(src) && usr.put_in_hands(vended))
|
||||
to_chat(usr, "<span class='notice'>You take [R.name] out of the slot.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>[capitalize(R.name)] falls onto the floor!</span>")
|
||||
R.amount--
|
||||
SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]"))
|
||||
vend_ready = TRUE
|
||||
return
|
||||
if("takeoutcoin")
|
||||
usr.put_in_hands(coin)
|
||||
to_chat(usr, "<span class='notice'>You remove [coin] from [src].</span>")
|
||||
coin = null
|
||||
return
|
||||
if("takeoutbill")
|
||||
usr.put_in_hands(bill)
|
||||
to_chat(usr, "<span class='notice'>You remove [bill] from [src].</span>")
|
||||
bill = null
|
||||
return
|
||||
|
||||
if("togglevoice")
|
||||
if(panel_open)
|
||||
shut_up = !shut_up
|
||||
|
||||
/obj/machinery/vending/process()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
@@ -697,6 +696,25 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
say(message)
|
||||
|
||||
/**
|
||||
* Gets the best discount from a given ID card, comparing its access and paycheck depart with cost_multiplier_per_dept.
|
||||
* It only applies to the regular selection, not premium or contraband. And a bank account is still required.
|
||||
* But it can also be used to charge more to certain departments or accesses. :)
|
||||
*
|
||||
* Arguments:
|
||||
* * list/dept_access_list - the list to compare
|
||||
*/
|
||||
/obj/machinery/vending/proc/get_best_discount(obj/item/card/id/C)
|
||||
var/list/discounts = NUMLIST2TEXTLIST(C.GetAccess())
|
||||
if(C.registered_account?.account_job)
|
||||
discounts += C.registered_account.account_job.paycheck_department
|
||||
discounts &= cost_multiplier_per_dept
|
||||
if(!length(discounts))
|
||||
return 1
|
||||
. = INFINITY
|
||||
for(var/k in discounts)
|
||||
. = min(cost_multiplier_per_dept[k], .)
|
||||
|
||||
/obj/machinery/vending/power_change()
|
||||
. = ..()
|
||||
if(powered())
|
||||
@@ -774,3 +792,196 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
/obj/machinery/vending/onTransitZ()
|
||||
return
|
||||
|
||||
/obj/machinery/vending/custom
|
||||
name = "Custom Vendor"
|
||||
icon_state = "robotics"
|
||||
icon_deny = "robotics-deny"
|
||||
max_integrity = 400
|
||||
payment_department = NO_FREEBIES
|
||||
refill_canister = /obj/item/vending_refill/custom
|
||||
/// where the money is sent
|
||||
var/datum/bank_account/private_a
|
||||
/// max number of items that the custom vendor can hold
|
||||
var/max_loaded_items = 20
|
||||
/// Base64 cache of custom icons.
|
||||
var/list/base64_cache = list()
|
||||
|
||||
/obj/machinery/vending/custom/compartmentLoadAccessCheck(mob/user)
|
||||
. = FALSE
|
||||
var/mob/living/carbon/human/H
|
||||
var/obj/item/card/id/C
|
||||
if(ishuman(user))
|
||||
H = user
|
||||
C = H.get_idcard(FALSE)
|
||||
if(C?.registered_account && C.registered_account == private_a)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/vending/custom/canLoadItem(obj/item/I, mob/user)
|
||||
. = FALSE
|
||||
if(loaded_items >= max_loaded_items)
|
||||
say("There are too many items in stock.")
|
||||
return
|
||||
if(istype(I, /obj/item/stack))
|
||||
say("Loose items may cause problems, try use it inside wrapping paper.")
|
||||
return
|
||||
if(I.custom_price)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/vending/custom/ui_data(mob/user)
|
||||
. = ..()
|
||||
.["access"] = compartmentLoadAccessCheck(user)
|
||||
.["vending_machine_input"] = list()
|
||||
for (var/O in vending_machine_input)
|
||||
if(vending_machine_input[O] > 0)
|
||||
var/base64
|
||||
var/price = 0
|
||||
for(var/obj/T in contents)
|
||||
if(T.name == O)
|
||||
price = T.custom_price
|
||||
if(!base64)
|
||||
if(base64_cache[T.type])
|
||||
base64 = base64_cache[T.type]
|
||||
else
|
||||
base64 = icon2base64(icon(T.icon, T.icon_state))
|
||||
base64_cache[T.type] = base64
|
||||
break
|
||||
var/list/data = list(
|
||||
name = O,
|
||||
price = price,
|
||||
img = base64
|
||||
)
|
||||
.["vending_machine_input"] += list(data)
|
||||
|
||||
/obj/machinery/vending/custom/ui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(action)
|
||||
if("dispense")
|
||||
. = TRUE
|
||||
if(!vend_ready)
|
||||
return
|
||||
var/N = params["item"]
|
||||
var/obj/S
|
||||
vend_ready = FALSE
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
var/obj/item/card/id/C = H.get_idcard(TRUE)
|
||||
|
||||
if(!C)
|
||||
say("No card found.")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
else if (!C.registered_account)
|
||||
say("No account found.")
|
||||
flick(icon_deny,src)
|
||||
vend_ready = TRUE
|
||||
return
|
||||
var/datum/bank_account/account = C.registered_account
|
||||
for(var/obj/O in contents)
|
||||
if(O.name == N)
|
||||
S = O
|
||||
break
|
||||
if(S)
|
||||
if(compartmentLoadAccessCheck(usr))
|
||||
vending_machine_input[N] = max(vending_machine_input[N] - 1, 0)
|
||||
S.forceMove(drop_location())
|
||||
loaded_items--
|
||||
use_power(5)
|
||||
vend_ready = TRUE
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(account.has_money(S.custom_price))
|
||||
account.adjust_money(-S.custom_price)
|
||||
var/datum/bank_account/owner = private_a
|
||||
if(owner)
|
||||
owner.adjust_money(S.custom_price)
|
||||
vending_machine_input[N] = max(vending_machine_input[N] - 1, 0)
|
||||
S.forceMove(drop_location())
|
||||
loaded_items--
|
||||
use_power(5)
|
||||
if(last_shopper != usr || purchase_message_cooldown < world.time)
|
||||
say("Thank you for buying local and purchasing [S]!")
|
||||
purchase_message_cooldown = world.time + 5 SECONDS
|
||||
last_shopper = usr
|
||||
vend_ready = TRUE
|
||||
updateUsrDialog()
|
||||
return
|
||||
else
|
||||
say("You do not possess the funds to purchase this.")
|
||||
vend_ready = TRUE
|
||||
|
||||
/obj/machinery/vending/custom/attackby(obj/item/I, mob/user, params)
|
||||
if(!private_a)
|
||||
var/mob/living/carbon/human/H
|
||||
var/obj/item/card/id/C
|
||||
if(ishuman(user))
|
||||
H = user
|
||||
C = H.get_idcard(TRUE)
|
||||
if(C?.registered_account)
|
||||
private_a = C.registered_account
|
||||
say("\The [src] has been linked to [C].")
|
||||
|
||||
if(compartmentLoadAccessCheck(user))
|
||||
if(istype(I, /obj/item/pen))
|
||||
name = stripped_input(user,"Set name","Name", name, 20)
|
||||
desc = stripped_input(user,"Set description","Description", desc, 60)
|
||||
slogan_list += stripped_input(user,"Set slogan","Slogan","Epic", 60)
|
||||
last_slogan = world.time + rand(0, slogan_delay)
|
||||
return
|
||||
|
||||
if(canLoadItem(I))
|
||||
loadingAttempt(I,user)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(panel_open && is_wire_tool(I))
|
||||
wires.interact(user)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/custom/crowbar_act(mob/living/user, obj/item/I)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/vending/custom/Destroy()
|
||||
unbuckle_all_mobs(TRUE)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
for(var/obj/item/I in contents)
|
||||
I.forceMove(T)
|
||||
explosion(T, -1, 0, 3)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/custom/unbreakable
|
||||
name = "Indestructible Vendor"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
|
||||
/obj/item/vending_refill/custom
|
||||
machine_name = "Custom Vendor"
|
||||
icon_state = "refill_custom"
|
||||
custom_premium_price = 100
|
||||
|
||||
/obj/item/price_tagger
|
||||
name = "price tagger"
|
||||
desc = "This tool is used to set a price for items used in custom vendors."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "pricetagger"
|
||||
custom_premium_price = 25
|
||||
///the price of the item
|
||||
var/price = 1
|
||||
|
||||
/obj/item/price_tagger/attack_self(mob/user)
|
||||
price = max(1, round(input(user,"set price","price") as num|null, 1))
|
||||
to_chat(user, "<span class='notice'> The [src] will now give things a [price] cr tag.</span>")
|
||||
|
||||
/obj/item/price_tagger/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(isitem(target))
|
||||
var/obj/item/I = target
|
||||
I.custom_price = price
|
||||
to_chat(user, "<span class='notice'>You set the price of [I] to [price] cr.</span>")
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/assist
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 50
|
||||
extra_price = 100
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/item/vending_refill/assist
|
||||
icon_state = "refill_engi"
|
||||
@@ -3,7 +3,6 @@
|
||||
desc = "A vending machine for costumes."
|
||||
icon_state = "theater"
|
||||
icon_deny = "theater-deny"
|
||||
req_access = list(ACCESS_THEATRE)
|
||||
product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
|
||||
vend_reply = "Thank you for using AutoDrobe!"
|
||||
products = list(/obj/item/clothing/suit/chickensuit = 1,
|
||||
@@ -124,7 +123,7 @@
|
||||
/obj/item/clothing/shoes/roman = 1,
|
||||
/obj/item/shield/riot/roman/fake = 1,
|
||||
/obj/item/skub = 1,
|
||||
/obj/item/clothing/under/costume/lobster = 1, // CIT CHANGES
|
||||
/obj/item/clothing/under/costume/lobster = 1,
|
||||
/obj/item/clothing/head/lobsterhat = 1,
|
||||
/obj/item/clothing/head/drfreezehat = 1,
|
||||
/obj/item/clothing/suit/dracula = 1,
|
||||
@@ -137,12 +136,19 @@
|
||||
/obj/item/clothing/under/costume/christmas/croptop/green = 3,
|
||||
/obj/item/clothing/head/christmashat = 3,
|
||||
/obj/item/clothing/head/christmashatg = 3,
|
||||
/obj/item/clothing/under/costume/drfreeze = 1) //End of Cit Changes
|
||||
refill_canister = /obj/item/vending_refill/autodrobe
|
||||
/obj/item/clothing/under/costume/drfreeze = 1)
|
||||
|
||||
/obj/machinery/vending/autodrobe/all_access
|
||||
desc = "A vending machine for costumes. This model appears to have no access restrictions."
|
||||
req_access = null
|
||||
refill_canister = /obj/item/vending_refill/autodrobe
|
||||
default_price = 180
|
||||
extra_price = 360
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
/obj/machinery/vending/autodrobe/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_THEATRE]" = 0)
|
||||
|
||||
/obj/machinery/vending/autodrobe/canLoadItem(obj/item/I,mob/user)
|
||||
return (I.type in products)
|
||||
|
||||
/obj/item/vending_refill/autodrobe
|
||||
machine_name = "AutoDrobe"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "boozeomat"
|
||||
icon_deny = "boozeomat-deny"
|
||||
products = list(/obj/item/reagent_containers/food/drinks/drinkingglass = 30,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/tequila = 5,
|
||||
@@ -39,12 +39,11 @@
|
||||
/obj/item/reagent_containers/food/drinks/bottle/trappist = 5)
|
||||
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
|
||||
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
|
||||
req_access = list(ACCESS_BAR)
|
||||
refill_canister = /obj/item/vending_refill/boozeomat
|
||||
|
||||
/obj/machinery/vending/boozeomat/all_access
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions."
|
||||
req_access = null
|
||||
default_price = 120
|
||||
extra_price = 100
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation
|
||||
products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1,
|
||||
@@ -56,7 +55,6 @@
|
||||
/obj/item/reagent_containers/food/drinks/ice = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6,
|
||||
/obj/item/reagent_containers/food/drinks/flask = 1)
|
||||
req_access = null
|
||||
|
||||
/obj/machinery/vending/boozeomat/pubby_captain //Captain's quarters on Pubbystation
|
||||
products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1,
|
||||
@@ -65,10 +63,17 @@
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 6,
|
||||
/obj/item/reagent_containers/food/drinks/ice = 1,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4);
|
||||
req_access = list(ACCESS_CAPTAIN)
|
||||
|
||||
/obj/machinery/vending/boozeomat/pubby_captain/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_CAPTAIN]" = 0)
|
||||
|
||||
/obj/machinery/vending/boozeomat/syndicate_access
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/machinery/vending/boozeomat/syndicate_access/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
|
||||
|
||||
/obj/item/vending_refill/boozeomat
|
||||
machine_name = "Booze-O-Mat"
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/cart
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 250
|
||||
extra_price = 500
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/cart
|
||||
icon_state = "refill_pda"
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
/obj/item/storage/fancy/cigarettes/cigars/havana = 1,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/cohiba = 1)
|
||||
refill_canister = /obj/item/vending_refill/cigarette
|
||||
default_price = 75
|
||||
extra_price = 250
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
/obj/machinery/vending/cigarette/syndicate
|
||||
products = list(/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 7,
|
||||
@@ -30,6 +33,11 @@
|
||||
/obj/item/storage/box/matches = 10,
|
||||
/obj/item/lighter/greyscale = 4,
|
||||
/obj/item/storage/fancy/rollingpapers = 5)
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/machinery/vending/cigarette/syndicate/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
|
||||
|
||||
/obj/machinery/vending/cigarette/beach //Used in the lavaland_biodome_beach.dmm ruin
|
||||
name = "\improper ShadyCigs Ultra"
|
||||
|
||||
@@ -173,6 +173,12 @@
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/polychromic = 5)
|
||||
refill_canister = /obj/item/vending_refill/clothing
|
||||
default_price = 60
|
||||
extra_price = 120
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/machinery/vending/clothing/canLoadItem(obj/item/I,mob/user)
|
||||
return (I.type in products)
|
||||
|
||||
/obj/item/vending_refill/clothing
|
||||
machine_name = "ClothesMate"
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
/obj/item/reagent_containers/food/condiment/sugar = 1)
|
||||
|
||||
refill_canister = /obj/item/vending_refill/coffee
|
||||
default_price = 45
|
||||
extra_price = 150
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
/obj/item/vending_refill/coffee
|
||||
machine_name = "Solar's Best Hot Drinks"
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy = 1)
|
||||
refill_canister = /obj/item/vending_refill/cola
|
||||
default_price = 45
|
||||
extra_price = 200
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
/obj/item/vending_refill/cola
|
||||
machine_name = "Robust Softdrinks"
|
||||
|
||||
@@ -29,6 +29,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/dinnerware
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 50
|
||||
extra_price = 250
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/dinnerware
|
||||
icon_state = "refill_cook"
|
||||
@@ -4,7 +4,6 @@
|
||||
desc = "Everything you need for do-it-yourself station repair."
|
||||
icon_state = "engi"
|
||||
icon_deny = "engi-deny"
|
||||
req_access = list(ACCESS_ENGINE_EQUIP)
|
||||
products = list(/obj/item/clothing/under/rank/engineering/chief_engineer = 4,
|
||||
/obj/item/clothing/under/rank/engineering/engineer = 4,
|
||||
/obj/item/clothing/shoes/sneakers/orange = 4,
|
||||
@@ -29,3 +28,7 @@
|
||||
/obj/item/stock_parts/manipulator = 5)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 450
|
||||
extra_price = 500
|
||||
payment_department = ACCOUNT_ENG
|
||||
cost_multiplier_per_dept = list(ACCOUNT_ENG = 0)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
desc = "Spare tool vending. What? Did you expect some witty description?"
|
||||
icon_state = "engivend"
|
||||
icon_deny = "engivend-deny"
|
||||
req_access = list(ACCESS_ENGINE_EQUIP)
|
||||
products = list(/obj/item/clothing/glasses/meson/engine = 5,
|
||||
/obj/item/clothing/glasses/welding = 5,
|
||||
/obj/item/multitool = 5,
|
||||
@@ -30,6 +29,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/engivend
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 450
|
||||
extra_price = 500
|
||||
payment_department = ACCOUNT_ENG
|
||||
cost_multiplier_per_dept = list(ACCOUNT_ENG = 0)
|
||||
|
||||
/obj/item/vending_refill/engivend
|
||||
icon_state = "refill_engi"
|
||||
@@ -11,6 +11,10 @@
|
||||
premium = list(/obj/item/melee/skateboard/pro = 3,
|
||||
/obj/item/melee/skateboard/hoverboard = 1)
|
||||
refill_canister = /obj/item/vending_refill/games
|
||||
default_price = 50
|
||||
extra_price = 250
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/games
|
||||
machine_name = "\improper Good Clean Fun"
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
/obj/item/clothing/under/pants/chaps = 5
|
||||
)
|
||||
refill_canister = /obj/item/vending_refill/kink
|
||||
default_price = 80
|
||||
extra_price = 250
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/item/vending_refill/kink
|
||||
machine_name = "KinkMate"
|
||||
|
||||
@@ -28,3 +28,6 @@
|
||||
/obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 150
|
||||
extra_price = 500
|
||||
payment_department = ACCOUNT_SEC
|
||||
|
||||
@@ -25,3 +25,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
refill_canister = /obj/item/vending_refill/donksoft
|
||||
default_price = 150
|
||||
extra_price = 300
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/machinery/vending/toyliberationstation/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
|
||||
|
||||
@@ -16,3 +16,6 @@
|
||||
contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50, "magic" = 100)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 250
|
||||
extra_price = 500
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "med"
|
||||
icon_deny = "med-deny"
|
||||
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
|
||||
req_access = list(ACCESS_MEDICAL)
|
||||
products = list(/obj/item/reagent_containers/syringe = 12,
|
||||
/obj/item/reagent_containers/dropper = 3,
|
||||
/obj/item/healthanalyzer = 4,
|
||||
@@ -47,6 +46,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
refill_canister = /obj/item/vending_refill/medical
|
||||
default_price = 200
|
||||
extra_price = 250
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/medical
|
||||
machine_name = "NanoMed Plus"
|
||||
@@ -54,4 +57,8 @@
|
||||
|
||||
/obj/machinery/vending/medical/syndicate_access
|
||||
name = "\improper SyndiMed Plus"
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/machinery/vending/medical/syndicate_access/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
refill_canister = /obj/item/vending_refill/wallmed
|
||||
default_price = 0
|
||||
extra_price = 100
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/wallmed
|
||||
machine_name = "NanoMed"
|
||||
|
||||
@@ -57,6 +57,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/hydroseeds
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 100
|
||||
extra_price = 350
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/hydroseeds
|
||||
icon_state = "refill_hydro"
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/hydronutrients
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 100
|
||||
extra_price = 250
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/hydronutrients
|
||||
icon_state = "refill_hydro"
|
||||
|
||||
@@ -11,3 +11,7 @@
|
||||
/obj/item/assembly/prox_sensor = 6,
|
||||
/obj/item/assembly/igniter = 6)
|
||||
contraband = list(/obj/item/assembly/health = 3)
|
||||
default_price = 400
|
||||
extra_price = 600
|
||||
payment_department = ACCOUNT_SCI
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SCI = 0)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
desc = "All the tools you need to create your own robot army."
|
||||
icon_state = "robotics"
|
||||
icon_deny = "robotics-deny"
|
||||
req_access = list(ACCESS_ROBOTICS)
|
||||
products = list(/obj/item/clothing/suit/toggle/labcoat = 4,
|
||||
/obj/item/clothing/under/rank/rnd/roboticist = 4,
|
||||
/obj/item/stack/cable_coil = 4,
|
||||
@@ -21,3 +20,6 @@
|
||||
/obj/item/crowbar = 5)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 600
|
||||
payment_department = ACCOUNT_SCI
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SCI = 0)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
|
||||
icon_state = "sec"
|
||||
icon_deny = "sec-deny"
|
||||
req_access = list(ACCESS_SECURITY)
|
||||
products = list(/obj/item/restraints/handcuffs = 8,
|
||||
/obj/item/restraints/handcuffs/cable/zipties = 10,
|
||||
/obj/item/grenade/flashbang = 4,
|
||||
@@ -26,6 +25,10 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
refill_canister = /obj/item/vending_refill/security
|
||||
default_price = 650
|
||||
extra_price = 700
|
||||
payment_department = ACCOUNT_SEC
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SEC = 0)
|
||||
|
||||
/obj/machinery/vending/security/pre_throw(obj/item/I)
|
||||
if(istype(I, /obj/item/grenade))
|
||||
|
||||
@@ -26,77 +26,16 @@
|
||||
/obj/item/storage/box/donkpockets = 2)
|
||||
|
||||
refill_canister = /obj/item/vending_refill/snack
|
||||
var/chef_compartment_access = "28" //ACCESS_KITCHEN
|
||||
canload_access_list = list(ACCESS_KITCHEN)
|
||||
default_price = 60
|
||||
extra_price = 160
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
input_display_header = "Chef's Food Selection"
|
||||
|
||||
/obj/item/vending_refill/snack
|
||||
machine_name = "Getmore Chocolate Corp"
|
||||
|
||||
/obj/machinery/vending/snack/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/reagent_containers/food/snacks))
|
||||
if(!compartment_access_check(user))
|
||||
return
|
||||
var/obj/item/reagent_containers/food/snacks/S = W
|
||||
if(!S.junkiness)
|
||||
if(!iscompartmentfull(user))
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
food_load(W)
|
||||
to_chat(user, "<span class='notice'>You insert [W] into [src]'s chef compartment.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src]'s chef compartment does not accept junk food.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/storage/bag/tray))
|
||||
if(!compartment_access_check(user))
|
||||
return
|
||||
var/obj/item/storage/T = W
|
||||
var/loaded = 0
|
||||
var/denied_items = 0
|
||||
for(var/obj/item/reagent_containers/food/snacks/S in T.contents)
|
||||
if(iscompartmentfull(user))
|
||||
break
|
||||
if(!S.junkiness)
|
||||
SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src, TRUE)
|
||||
food_load(S)
|
||||
loaded++
|
||||
else
|
||||
denied_items++
|
||||
if(denied_items)
|
||||
to_chat(user, "<span class='notice'>[src] refuses some items.</span>")
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>You insert [loaded] dishes into [src]'s chef compartment.</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/snack/Destroy()
|
||||
for(var/obj/item/reagent_containers/food/snacks/S in contents)
|
||||
S.forceMove(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/snack/proc/compartment_access_check(user)
|
||||
req_access_txt = chef_compartment_access
|
||||
if(!allowed(user) && !(obj_flags & EMAGGED) && scan_id)
|
||||
to_chat(user, "<span class='warning'>[src]'s chef compartment blinks red: Access denied.</span>")
|
||||
req_access_txt = "0"
|
||||
return 0
|
||||
req_access_txt = "0"
|
||||
return 1
|
||||
|
||||
/obj/machinery/vending/snack/proc/iscompartmentfull(mob/user)
|
||||
if(contents.len >= 30) // no more than 30 dishes can fit inside
|
||||
to_chat(user, "<span class='warning'>[src]'s chef compartment is full.</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/vending/snack/proc/food_load(obj/item/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/snack/random
|
||||
name = "\improper Random Snackies"
|
||||
icon_state = "random_snack"
|
||||
|
||||
@@ -7,3 +7,6 @@
|
||||
contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 1
|
||||
extra_price = 1
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
premium = list()
|
||||
|
||||
refill_canister = /obj/item/vending_refill/soviet
|
||||
default_price = 1
|
||||
extra_price = 1
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/item/vending_refill/soviet
|
||||
machine_name = "sovietvend"
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
refill_canister = /obj/item/vending_refill/sustenance
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 0
|
||||
extra_price = 0
|
||||
payment_department = NO_FREEBIES
|
||||
|
||||
/obj/item/vending_refill/sustenance
|
||||
icon_state = "refill_cook"
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
refill_canister = /obj/item/vending_refill/donksoft
|
||||
default_price = 150
|
||||
extra_price = 300
|
||||
payment_department = ACCOUNT_SRV
|
||||
|
||||
/obj/item/vending_refill/donksoft
|
||||
machine_name = "Donksoft Toy Vendor"
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
/obj/item/vending_refill/wardrobe
|
||||
icon_state = "refill_clothes"
|
||||
|
||||
/obj/machinery/vending/wardrobe
|
||||
default_price = 350
|
||||
extra_price = 400
|
||||
payment_department = NO_FREEBIES
|
||||
input_display_header = "Returned Clothing"
|
||||
|
||||
/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user)
|
||||
return (I.type in products)
|
||||
|
||||
/obj/machinery/vending/wardrobe/sec_wardrobe
|
||||
name = "\improper SecDrobe"
|
||||
desc = "A vending machine for security and security-related clothing!"
|
||||
@@ -22,6 +31,8 @@
|
||||
premium = list(/obj/item/clothing/under/rank/security/officer/formal = 5,
|
||||
/obj/item/clothing/head/beret/sec/navyofficer = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe
|
||||
payment_department = ACCOUNT_SEC
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SEC = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/sec_wardrobe
|
||||
machine_name = "SecDrobe"
|
||||
@@ -57,6 +68,8 @@
|
||||
/obj/item/clothing/suit/apron/surgical = 5,
|
||||
/obj/item/clothing/mask/surgical = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/medi_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/medi_wardrobe
|
||||
machine_name = "MediDrobe"
|
||||
@@ -80,6 +93,8 @@
|
||||
/obj/item/clothing/head/hardhat = 5,
|
||||
/obj/item/clothing/head/hardhat/weldhat = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
payment_department = ACCOUNT_ENG
|
||||
cost_multiplier_per_dept = list(ACCOUNT_ENG = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/engi_wardrobe
|
||||
machine_name = "EngiDrobe"
|
||||
@@ -101,6 +116,8 @@
|
||||
/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt = 5,
|
||||
/obj/item/clothing/shoes/sneakers/black = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/atmos_wardrobe
|
||||
payment_department = ACCOUNT_ENG
|
||||
cost_multiplier_per_dept = list(ACCOUNT_ENG = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/atmos_wardrobe
|
||||
machine_name = "AtmosDrobe"
|
||||
@@ -119,6 +136,8 @@
|
||||
/obj/item/clothing/head/soft = 5,
|
||||
/obj/item/radio/headset/headset_cargo = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/cargo_wardrobe
|
||||
payment_department = ACCOUNT_CAR
|
||||
cost_multiplier_per_dept = list(ACCOUNT_CAR = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/cargo_wardrobe
|
||||
machine_name = "CargoDrobe"
|
||||
@@ -141,6 +160,8 @@
|
||||
/obj/item/clothing/mask/bandana/skull = 2)
|
||||
contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
|
||||
payment_department = ACCOUNT_SCI
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SCI = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/robo_wardrobe
|
||||
machine_name = "RoboDrobe"
|
||||
@@ -163,6 +184,8 @@
|
||||
/obj/item/radio/headset/headset_sci = 4,
|
||||
/obj/item/clothing/mask/gas = 5)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/science_wardrobe
|
||||
payment_department = ACCOUNT_SCI
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SCI = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/science_wardrobe
|
||||
machine_name = "SciDrobe"
|
||||
@@ -182,6 +205,8 @@
|
||||
/obj/item/clothing/under/rank/civilian/hydroponics/skirt = 5,
|
||||
/obj/item/clothing/mask/bandana = 4)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/hydro_wardrobe
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/hydro_wardrobe
|
||||
machine_name = "HyDrobe"
|
||||
@@ -206,6 +231,8 @@
|
||||
/obj/item/clothing/glasses/regular/jamjar = 1,
|
||||
/obj/item/storage/bag/books = 1)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/curator_wardrobe
|
||||
payment_department = ACCOUNT_CIV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_CIV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/curator_wardrobe
|
||||
machine_name = "CuraDrobe"
|
||||
@@ -234,6 +261,8 @@
|
||||
/obj/item/clothing/neck/petcollar = 3,
|
||||
/obj/item/storage/belt/bandolier = 1)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/bar_wardrobe
|
||||
machine_name = "BarDrobe"
|
||||
@@ -259,6 +288,8 @@
|
||||
/obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2,
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking = 2)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chef_wardrobe
|
||||
machine_name = "ChefDrobe"
|
||||
@@ -290,6 +321,8 @@
|
||||
/obj/item/screwdriver = 2,
|
||||
/obj/item/stack/cable_coil/random = 4)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe
|
||||
payment_department = ACCOUNT_SRV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_SRV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/jani_wardrobe
|
||||
machine_name = "JaniDrobe"
|
||||
@@ -321,6 +354,8 @@
|
||||
/obj/item/clothing/shoes/laceup = 3,
|
||||
/obj/item/clothing/accessory/lawyers_badge = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/law_wardrobe
|
||||
payment_department = ACCOUNT_CIV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_CIV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/law_wardrobe
|
||||
machine_name = "LawDrobe"
|
||||
@@ -347,6 +382,8 @@
|
||||
premium = list(/obj/item/toy/plush/plushvar = 1,
|
||||
/obj/item/toy/plush/narplush = 1)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe
|
||||
payment_department = ACCOUNT_CIV
|
||||
cost_multiplier_per_dept = list(ACCOUNT_CIV = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chap_wardrobe
|
||||
machine_name = "ChapDrobe"
|
||||
@@ -368,6 +405,8 @@
|
||||
/obj/item/storage/bag/chemistry = 3,
|
||||
/obj/item/fermichem/pHbooklet = 3)//pH indicator)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
machine_name = "ChemDrobe"
|
||||
@@ -386,6 +425,8 @@
|
||||
/obj/item/storage/backpack/genetics = 3,
|
||||
/obj/item/storage/backpack/satchel/gen = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/gene_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/gene_wardrobe
|
||||
machine_name = "GeneDrobe"
|
||||
@@ -406,6 +447,8 @@
|
||||
/obj/item/storage/backpack/virology = 3,
|
||||
/obj/item/storage/backpack/satchel/vir = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/viro_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/viro_wardrobe
|
||||
machine_name = "ViroDrobe"
|
||||
@@ -416,7 +459,6 @@
|
||||
icon_state = "capsdrobe"
|
||||
icon_deny = "capsdrobe-deny"
|
||||
product_ads = "Only the greatest for a commander such as ours."
|
||||
req_access = list(ACCESS_CAPTAIN)
|
||||
vend_reply = "A wonderful day to you, great leader."
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/captain = 1,
|
||||
/obj/item/storage/backpack/captain = 1,
|
||||
@@ -436,6 +478,11 @@
|
||||
/obj/item/clothing/glasses/sunglasses/gar/supergar = 1,
|
||||
/obj/item/clothing/gloves/color/captain = 1)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/cap_wardrobe
|
||||
payment_department = ACCOUNT_CIV
|
||||
|
||||
/obj/machinery/vending/wardrobe/cap_wardrobe/Initialize()
|
||||
. = ..()
|
||||
cost_multiplier_per_dept = list("[ACCESS_CAPTAIN]" = 0)
|
||||
|
||||
/obj/item/vending_refill/wardrobe/cap_wardrobe
|
||||
machine_name = "Captain's Wardrobe"
|
||||
|
||||
@@ -15,12 +15,17 @@
|
||||
/obj/item/flashlight/glowstick/red = 6,
|
||||
/obj/item/flashlight = 7)
|
||||
contraband = list(/obj/item/weldingtool/largetank = 4,
|
||||
/obj/item/clothing/gloves/color/fyellow = 4)
|
||||
/obj/item/clothing/gloves/color/fyellow = 4,
|
||||
/obj/item/multitool = 2)
|
||||
premium = list(/obj/item/clothing/gloves/color/yellow = 2,
|
||||
/obj/item/weldingtool/hugetank = 2)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
|
||||
refill_canister = /obj/item/vending_refill/tool
|
||||
resistance_flags = FIRE_PROOF
|
||||
default_price = 50
|
||||
extra_price = 300
|
||||
payment_department = ACCOUNT_ENG
|
||||
cost_multiplier_per_dept = list(ACCOUNT_ENG = 0)
|
||||
|
||||
/obj/item/vending_refill/tool
|
||||
icon_state = "refill_engi"
|
||||
Reference in New Issue
Block a user