mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
2 minor enforcements for vending machines (#92752)
## About The Pull Request - Ensures vending machines don't runtime if the buyer dont have an ID card, valid account or department job. The UI usually disables itself when this is case but if this proc is called through other means we ensure no runtime occurs - Dispensing an item (like when the machine shoots out items/freebies/regular vending) always uses power & not just when buying the item through the UI ## Changelog 🆑 code: adds some null checks against players without an ID card/valid account vending an item code: ensures dispensing an item always uses energy & not just when vending /🆑
This commit is contained in:
+16
-9
@@ -168,6 +168,10 @@
|
||||
if(isliving(user))
|
||||
living_user = user
|
||||
card_used = living_user.get_idcard(TRUE)
|
||||
if(QDELETED(card_used))
|
||||
speak("You do not possess an ID to purchase [item_record.name].")
|
||||
return
|
||||
|
||||
if(age_restrictions && item_record.age_restricted && (!card_used.registered_age || card_used.registered_age < AGE_MINOR))
|
||||
speak("You are not of legal age to purchase [item_record.name].")
|
||||
if(!(user in GLOB.narcd_underages))
|
||||
@@ -190,7 +194,6 @@
|
||||
purchase_message_cooldown = world.time + 5 SECONDS
|
||||
//This is not the best practice, but it's safe enough here since the chances of two people using a machine with the same ref in 5 seconds is fuck low
|
||||
last_shopper = REF(user)
|
||||
use_energy(active_power_usage)
|
||||
if(icon_vend) //Show the vending animation if needed
|
||||
flick(icon_vend, src)
|
||||
|
||||
@@ -226,16 +229,16 @@
|
||||
var/obj/item/vended_item = null
|
||||
if(dispense_returned)
|
||||
vended_item = LAZYACCESS(item_record.returned_products, LAZYLEN(item_record.returned_products)) //first in, last out
|
||||
if(!QDELETED(vended_item))
|
||||
vended_item.forceMove(spawn_location)
|
||||
vended_item.forceMove(spawn_location)
|
||||
else if(item_record.amount)
|
||||
vended_item = new item_record.product_path(spawn_location)
|
||||
if(vended_item.type in contraband)
|
||||
ADD_TRAIT(vended_item, TRAIT_CONTRABAND, INNATE_TRAIT)
|
||||
item_record.amount--
|
||||
|
||||
if(!QDELETED(vended_item))
|
||||
on_dispense(vended_item, dispense_returned)
|
||||
on_dispense(vended_item, dispense_returned)
|
||||
use_energy(active_power_usage)
|
||||
|
||||
return vended_item
|
||||
|
||||
/**
|
||||
@@ -262,10 +265,13 @@
|
||||
/obj/machinery/vending/proc/proceed_payment(obj/item/card/id/paying_id_card, mob/living/mob_paying, datum/data/vending_product/product_to_vend, price_to_use, discountless)
|
||||
PROTECTED_PROC(TRUE)
|
||||
|
||||
if(QDELETED(paying_id_card)) //not available(null) or somehow is getting destroyed
|
||||
speak("You do not possess an ID to purchase [product_to_vend.name].")
|
||||
return FALSE
|
||||
//do we have an account with job to purchase
|
||||
var/datum/bank_account/account = paying_id_card.registered_account
|
||||
if(!account || !account.account_job) //unregistered account & jobless
|
||||
speak("Your do not have a valid account with an registered job.")
|
||||
return FALSE
|
||||
|
||||
//deduct money from person
|
||||
if(account.account_job && account.account_job.paycheck_department == payment_department && !discountless)
|
||||
price_to_use = max(round(price_to_use * DEPARTMENT_DISCOUNT), 1) //No longer free, but signifigantly cheaper.
|
||||
if(LAZYLEN(product_to_vend.returned_products))
|
||||
@@ -274,7 +280,8 @@
|
||||
speak("You do not possess the funds to purchase [product_to_vend.name].")
|
||||
flick(icon_deny,src)
|
||||
return FALSE
|
||||
//actual payment here
|
||||
|
||||
//transfer money to machine
|
||||
var/datum/bank_account/paying_id_account = SSeconomy.get_dep_account(payment_department)
|
||||
if(paying_id_account)
|
||||
SSblackbox.record_feedback("amount", "vending_spent", price_to_use)
|
||||
|
||||
Reference in New Issue
Block a user