mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-18 13:04:45 +00:00
## About The Pull Request Further continous organizing and cleaning the Icons folder. There are still some minior nitpicks left to do, but I reached my daily sanity expenses limit again, and the faster these get in the less issues for both me and others later. Also cleans some mess I caused by my blindness last PR. ## Why It's Good For The Game Saner spriters = better sprites
153 lines
4.3 KiB
Plaintext
153 lines
4.3 KiB
Plaintext
// A vendor machine for modular computer portable devices - Laptops and Tablets
|
|
|
|
/obj/machinery/lapvend
|
|
name = "computer vendor"
|
|
desc = "A vending machine with microfabricator capable of dispensing various NT-branded computers."
|
|
icon = 'icons/obj/machines/vending.dmi'
|
|
icon_state = "robotics"
|
|
layer = 2.9
|
|
density = TRUE
|
|
|
|
// The actual laptop/tablet
|
|
var/obj/item/modular_computer/laptop/fabricated_laptop
|
|
var/obj/item/modular_computer/pda/fabricated_tablet
|
|
|
|
// Utility vars
|
|
var/state = 0 // 0: Select device type, 1: Select loadout, 2: Payment, 3: Thankyou screen
|
|
var/devtype = 0 // 0: None(unselected), 1: Laptop, 2: Tablet
|
|
var/total_price = 0 // Price of currently vended device.
|
|
var/credits = 0
|
|
|
|
// Removes all traces of old order and allows you to begin configuration from scratch.
|
|
/obj/machinery/lapvend/proc/reset_order()
|
|
state = 0
|
|
devtype = 0
|
|
if(fabricated_laptop)
|
|
qdel(fabricated_laptop)
|
|
fabricated_laptop = null
|
|
if(fabricated_tablet)
|
|
qdel(fabricated_tablet)
|
|
fabricated_tablet = null
|
|
|
|
// Recalculates the price and optionally even fabricates the device.
|
|
/obj/machinery/lapvend/proc/fabricate_and_recalc_price(fabricate = FALSE)
|
|
total_price = 0
|
|
if(devtype == 1) // Laptop, generally cheaper to make it accessible for most station roles
|
|
if(fabricate)
|
|
fabricated_laptop = new /obj/item/modular_computer/laptop/buildable(src)
|
|
total_price = 99
|
|
|
|
return total_price
|
|
else if(devtype == 2) // Tablet, more expensive, not everyone could probably afford this.
|
|
if(fabricate)
|
|
fabricated_tablet = new(src)
|
|
total_price = 199
|
|
return FALSE
|
|
|
|
/obj/machinery/lapvend/ui_act(action, params)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
|
|
switch(action)
|
|
if("pick_device")
|
|
if(state) // We've already picked a device type
|
|
return FALSE
|
|
devtype = text2num(params["pick"])
|
|
state = 1
|
|
fabricate_and_recalc_price(FALSE)
|
|
return TRUE
|
|
if("clean_order")
|
|
reset_order()
|
|
return TRUE
|
|
if("purchase")
|
|
try_purchase()
|
|
return TRUE
|
|
if((state != 1) && devtype) // Following IFs should only be usable when in the Select Loadout mode
|
|
return FALSE
|
|
switch(action)
|
|
if("confirm_order")
|
|
state = 2 // Wait for ID swipe for payment processing
|
|
fabricate_and_recalc_price(FALSE)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/machinery/lapvend/ui_interact(mob/user, datum/tgui/ui)
|
|
if(machine_stat & (BROKEN | NOPOWER | MAINT))
|
|
if(ui)
|
|
ui.close()
|
|
return FALSE
|
|
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if (!ui)
|
|
ui = new(user, src, "ComputerFabricator")
|
|
ui.open()
|
|
|
|
/obj/machinery/lapvend/attackby(obj/item/I, mob/user)
|
|
if(istype(I, /obj/item/stack/spacecash))
|
|
var/obj/item/stack/spacecash/c = I
|
|
if(!user.temporarilyRemoveItemFromInventory(c))
|
|
return
|
|
credits += c.value
|
|
visible_message(span_info("[span_name("[user]")] inserts [c.value] cr into [src]."))
|
|
qdel(c)
|
|
return
|
|
else if(istype(I, /obj/item/holochip))
|
|
var/obj/item/holochip/HC = I
|
|
credits += HC.credits
|
|
visible_message(span_info("[user] inserts a [HC.credits] cr holocredit chip into [src]."))
|
|
qdel(HC)
|
|
return
|
|
else if(isidcard(I))
|
|
if(state != 2)
|
|
return
|
|
var/obj/item/card/id/ID = I
|
|
var/datum/bank_account/account = ID.registered_account
|
|
var/target_credits = total_price - credits
|
|
if(!account.adjust_money(-target_credits, "Vending: Laptop Vendor"))
|
|
say("Insufficient credits on card to purchase!")
|
|
return
|
|
credits += target_credits
|
|
say("[target_credits] cr have been withdrawn from your account.")
|
|
return
|
|
return ..()
|
|
|
|
// Simplified payment processing, returns 1 on success.
|
|
/obj/machinery/lapvend/proc/process_payment()
|
|
if(total_price > credits)
|
|
say("Insufficient credits.")
|
|
return FALSE
|
|
else
|
|
return TRUE
|
|
|
|
/obj/machinery/lapvend/ui_data(mob/user)
|
|
|
|
var/list/data = list()
|
|
data["state"] = state
|
|
if(state == 1)
|
|
data["devtype"] = devtype
|
|
if(state == 1 || state == 2)
|
|
data["totalprice"] = total_price
|
|
data["credits"] = credits
|
|
|
|
return data
|
|
|
|
|
|
/obj/machinery/lapvend/proc/try_purchase()
|
|
// Awaiting payment state
|
|
if(state == 2)
|
|
if(process_payment())
|
|
fabricate_and_recalc_price(1)
|
|
if((devtype == 1) && fabricated_laptop)
|
|
fabricated_laptop.forceMove(src.loc)
|
|
fabricated_laptop = null
|
|
else if((devtype == 2) && fabricated_tablet)
|
|
fabricated_tablet.forceMove(src.loc)
|
|
fabricated_tablet = null
|
|
credits -= total_price
|
|
say("Enjoy your new product!")
|
|
state = 3
|
|
addtimer(CALLBACK(src, PROC_REF(reset_order)), 100)
|
|
return TRUE
|
|
return FALSE
|