Porting Goofconomy & co.

This commit is contained in:
Ghommie
2020-04-17 07:48:11 +02:00
parent 19328b8710
commit 4c6f1b622b
190 changed files with 2213 additions and 353 deletions
+282 -62
View File
@@ -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)!
@@ -120,7 +125,12 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/scan_id = TRUE
///Coins that we accept?
var/obj/item/coin/coin
///Bills 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
/**
* Is this item on station or not
*
@@ -142,7 +152,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
@@ -178,6 +188,15 @@ 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)
@@ -281,6 +300,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
@@ -372,19 +392,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(!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(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))
@@ -439,7 +447,7 @@ GLOBAL_LIST_EMPTY(vending_products)
vending_machine_input[format_text(I.name)] = 1
to_chat(user, "<span class='notice'>You insert [I] into [src]'s input compartment.</span>")
loaded_items++
/**
* Is the passed in user allowed to load this vending machines compartments
*
@@ -520,11 +528,14 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/ui_static_data(mob/user)
. = list()
.["onstation"] = onstation
.["department"] = payment_department
.["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)
)
@@ -534,6 +545,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
@@ -544,6 +556,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
@@ -552,11 +565,25 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/ui_data(mob/user)
. = list()
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)
.["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
.["user"]["department"] = C.registered_account.account_job.paycheck_department
else
.["user"]["job"] = "No Job"
.["user"]["department"] = "No Department"
.["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
/obj/machinery/vending/ui_act(action, params)
. = ..()
@@ -570,74 +597,74 @@ 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
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))
to_chat(usr, "<span class='warning'>You need to a coin to get this item!</span>")
vend_ready = TRUE
return
if(coin && coin.string_attached)
if(!prob(50))
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)
return
if(!usr.CanReach(src))
to_chat(usr, "<span class='notice'>You successfully pull [coin] out of [src] to the floor.</span>")
coin = null
if(!usr.put_in_hands(coin))
to_chat(usr, "<span class='warning'>You couldn't pull [coin] out because your hands are full!</span>")
QDEL_NULL(coin)
to_chat(usr, "<span class='notice'>You successfully pull [coin] out before [src] could swallow it.</span>")
coin = null
QDEL_NULL(coin)
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(R.amount <= 0)
to_chat(usr, "<span class='warning'>Sold out.</span>")
if (R.amount <= 0)
say("Sold out of [R.name].")
flick(icon_deny,src)
vend_ready = TRUE
return
else
R.amount--
if(((last_reply + 200) <= world.time) && vend_reply)
speak(vend_reply)
last_reply = world.time
if(onstation && 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
if(account.account_job && account.account_job.paycheck_department == payment_department)
price_to_use = 0
if(coin_records.Find(R) || hidden_records.Find(R))
price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price
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>")
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("togglevoice")
if(panel_open)
shut_up = !shut_up
/obj/machinery/vending/process()
if(stat & (BROKEN|NOPOWER))
return PROCESS_KILL
@@ -748,3 +775,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>")
+3
View File
@@ -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 = 125
extra_price = 100
payment_department = NO_FREEBIES
/obj/item/vending_refill/assist
icon_state = "refill_engi"
+7
View File
@@ -138,12 +138,19 @@
/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
default_price = 180
extra_price = 360
payment_department = ACCOUNT_SRV
/obj/machinery/vending/autodrobe/all_access
desc = "A vending machine for costumes. This model appears to have no access restrictions."
req_access = null
/obj/machinery/vending/autodrobe/canLoadItem(obj/item/I,mob/user)
return (I.type in products)
/obj/item/vending_refill/autodrobe
machine_name = "AutoDrobe"
icon_state = "refill_costume"
+4 -1
View File
@@ -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,
@@ -41,6 +41,9 @@
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
default_price = 120
extra_price = 100
payment_department = ACCOUNT_SRV
/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."
+3
View File
@@ -16,6 +16,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/cart
resistance_flags = FIRE_PROOF
default_price = 250
extra_price = 500
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/cart
icon_state = "refill_pda"
+3
View File
@@ -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,
+6
View File
@@ -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"
+3
View File
@@ -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"
+3
View File
@@ -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"
+3
View File
@@ -29,6 +29,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/dinnerware
resistance_flags = FIRE_PROOF
default_price = 50
extra_price = 250
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/dinnerware
icon_state = "refill_cook"
+3
View File
@@ -29,3 +29,6 @@
/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
+3
View File
@@ -30,6 +30,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/engivend
resistance_flags = FIRE_PROOF
default_price = 450
extra_price = 500
payment_department = ACCOUNT_ENG
/obj/item/vending_refill/engivend
icon_state = "refill_engi"
+3
View File
@@ -11,6 +11,9 @@
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
/obj/item/vending_refill/games
machine_name = "\improper Good Clean Fun"
+3
View File
@@ -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"
+3
View File
@@ -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
+3
View File
@@ -25,3 +25,6 @@
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
+3
View File
@@ -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
+3
View File
@@ -47,6 +47,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/medical
default_price = 250
extra_price = 500
payment_department = ACCOUNT_MED
/obj/item/vending_refill/medical
machine_name = "NanoMed Plus"
+3
View File
@@ -18,6 +18,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/wallmed
default_price = 250
extra_price = 500
payment_department = ACCOUNT_MED
/obj/item/vending_refill/wallmed
machine_name = "NanoMed"
+3
View File
@@ -57,6 +57,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/hydroseeds
resistance_flags = FIRE_PROOF
default_price = 100
extra_price = 350
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/hydroseeds
icon_state = "refill_hydro"
+3
View File
@@ -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/hydronutrients
resistance_flags = FIRE_PROOF
default_price = 100
extra_price = 250
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/hydronutrients
icon_state = "refill_hydro"
+3
View File
@@ -11,3 +11,6 @@
/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
+2
View File
@@ -21,3 +21,5 @@
/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
+3
View File
@@ -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/security
default_price = 650
extra_price = 700
payment_department = ACCOUNT_SEC
/obj/machinery/vending/security/pre_throw(obj/item/I)
if(istype(I, /obj/item/grenade))
+5 -67
View File
@@ -26,77 +26,15 @@
/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
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"
+3
View File
@@ -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
+3
View File
@@ -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"
+3
View File
@@ -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"
+3
View File
@@ -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"
+26
View File
@@ -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,7 @@
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
/obj/item/vending_refill/wardrobe/sec_wardrobe
machine_name = "SecDrobe"
@@ -57,6 +67,7 @@
/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
/obj/item/vending_refill/wardrobe/medi_wardrobe
machine_name = "MediDrobe"
@@ -80,6 +91,7 @@
/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
/obj/item/vending_refill/wardrobe/engi_wardrobe
machine_name = "EngiDrobe"
@@ -101,6 +113,7 @@
/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
/obj/item/vending_refill/wardrobe/atmos_wardrobe
machine_name = "AtmosDrobe"
@@ -119,6 +132,7 @@
/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
/obj/item/vending_refill/wardrobe/cargo_wardrobe
machine_name = "CargoDrobe"
@@ -141,6 +155,7 @@
/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
/obj/item/vending_refill/wardrobe/robo_wardrobe
machine_name = "RoboDrobe"
@@ -163,6 +178,7 @@
/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
/obj/item/vending_refill/wardrobe/science_wardrobe
machine_name = "SciDrobe"
@@ -182,6 +198,7 @@
/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
/obj/item/vending_refill/wardrobe/hydro_wardrobe
machine_name = "HyDrobe"
@@ -206,6 +223,7 @@
/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
/obj/item/vending_refill/wardrobe/curator_wardrobe
machine_name = "CuraDrobe"
@@ -234,6 +252,7 @@
/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
/obj/item/vending_refill/wardrobe/bar_wardrobe
machine_name = "BarDrobe"
@@ -259,6 +278,7 @@
/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
/obj/item/vending_refill/wardrobe/chef_wardrobe
machine_name = "ChefDrobe"
@@ -290,6 +310,7 @@
/obj/item/screwdriver = 2,
/obj/item/stack/cable_coil/random = 4)
refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/wardrobe/jani_wardrobe
machine_name = "JaniDrobe"
@@ -321,6 +342,7 @@
/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
/obj/item/vending_refill/wardrobe/law_wardrobe
machine_name = "LawDrobe"
@@ -368,6 +390,7 @@
/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
/obj/item/vending_refill/wardrobe/chem_wardrobe
machine_name = "ChemDrobe"
@@ -386,6 +409,7 @@
/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
/obj/item/vending_refill/wardrobe/gene_wardrobe
machine_name = "GeneDrobe"
@@ -406,6 +430,7 @@
/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
/obj/item/vending_refill/wardrobe/viro_wardrobe
machine_name = "ViroDrobe"
@@ -436,6 +461,7 @@
/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/item/vending_refill/wardrobe/cap_wardrobe
machine_name = "Captain's Wardrobe"
+3
View File
@@ -21,6 +21,9 @@
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 = 125
extra_price = 350
payment_department = ACCOUNT_ENG
/obj/item/vending_refill/tool
icon_state = "refill_engi"