mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 20:42:08 +00:00
* Enforce preserving parent proc return values across ui_act call stacks (#53964) All ui_act procs should call parent by default. All procs should preserve the value of the parent proc when it's TRUTHY and pass it down the call stack. No UI should be interactible when its flags or state indicate it should not be, except when explicity overriden by child procs intentionally disregarding parent return values to achieve a specific goal. * Enforce preserving parent proc return values across ui_act call stacks Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
292 lines
14 KiB
Plaintext
292 lines
14 KiB
Plaintext
/**********************Mining Equipment Vendor**************************/
|
|
|
|
/obj/machinery/mineral/equipment_vendor
|
|
name = "mining equipment vendor"
|
|
desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
|
|
icon = 'icons/obj/machines/mining_machines.dmi'
|
|
icon_state = "mining"
|
|
density = TRUE
|
|
circuit = /obj/item/circuitboard/machine/mining_equipment_vendor
|
|
var/icon_deny = "mining-deny"
|
|
var/obj/item/card/id/inserted_id
|
|
var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
|
|
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
|
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
|
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
|
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
|
new /datum/data/mining_equipment("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 100),
|
|
new /datum/data/mining_equipment("Bubblegum Gum Packet", /obj/item/storage/box/gum/bubblegum, 100),
|
|
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
|
|
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
|
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
|
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
|
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
|
|
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
|
|
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
|
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
|
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
|
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
|
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 500),
|
|
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
|
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
|
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
|
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/kinetic_crusher, 750),
|
|
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
|
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
|
|
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
|
|
new /datum/data/mining_equipment("Luxury Medipen", /obj/item/reagent_containers/hypospray/medipen/survival/luxury, 1000),
|
|
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1000),
|
|
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
|
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
|
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1500),
|
|
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
|
|
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
|
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
|
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
|
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
|
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
|
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
|
|
new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxuryelite, 10000),
|
|
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
|
|
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
|
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
|
|
new /datum/data/mining_equipment("Minebot Cooldown Upgrade", /obj/item/borg/upgrade/modkit/cooldown/minebot, 600),
|
|
new /datum/data/mining_equipment("Minebot AI Upgrade", /obj/item/slimepotion/slime/sentience/mining, 1000),
|
|
new /datum/data/mining_equipment("KA Minebot Passthrough", /obj/item/borg/upgrade/modkit/minebot_passthrough, 100),
|
|
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
|
|
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
|
|
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
|
|
new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300),
|
|
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
|
|
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
|
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
|
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000)
|
|
)
|
|
|
|
/datum/data/mining_equipment
|
|
var/equipment_name = "generic"
|
|
var/equipment_path = null
|
|
var/cost = 0
|
|
|
|
/datum/data/mining_equipment/New(name, path, cost)
|
|
src.equipment_name = name
|
|
src.equipment_path = path
|
|
src.cost = cost
|
|
|
|
/obj/machinery/mineral/equipment_vendor/Initialize()
|
|
. = ..()
|
|
build_inventory()
|
|
|
|
/obj/machinery/mineral/equipment_vendor/proc/build_inventory()
|
|
for(var/p in prize_list)
|
|
var/datum/data/mining_equipment/M = p
|
|
GLOB.vending_products[M.equipment_path] = 1
|
|
|
|
/obj/machinery/mineral/equipment_vendor/update_icon_state()
|
|
if(powered())
|
|
icon_state = initial(icon_state)
|
|
else
|
|
icon_state = "[initial(icon_state)]-off"
|
|
|
|
/obj/machinery/mineral/equipment_vendor/ui_assets(mob/user)
|
|
return list(
|
|
get_asset_datum(/datum/asset/spritesheet/vending),
|
|
)
|
|
|
|
/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "MiningVendor", name)
|
|
ui.open()
|
|
|
|
/obj/machinery/mineral/equipment_vendor/ui_static_data(mob/user)
|
|
. = list()
|
|
.["product_records"] = list()
|
|
for(var/datum/data/mining_equipment/prize in prize_list)
|
|
var/list/product_data = list(
|
|
path = replacetext(replacetext("[prize.equipment_path]", "/obj/item/", ""), "/", "-"),
|
|
name = prize.equipment_name,
|
|
price = prize.cost,
|
|
ref = REF(prize)
|
|
)
|
|
.["product_records"] += list(product_data)
|
|
|
|
/obj/machinery/mineral/equipment_vendor/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)
|
|
.["user"] = list()
|
|
.["user"]["points"] = C.mining_points
|
|
if(C.registered_account)
|
|
.["user"]["name"] = C.registered_account.account_holder
|
|
if(C.registered_account.account_job)
|
|
.["user"]["job"] = C.registered_account.account_job.title
|
|
else
|
|
.["user"]["job"] = "No Job"
|
|
|
|
/obj/machinery/mineral/equipment_vendor/ui_act(action, params)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
|
|
switch(action)
|
|
if("purchase")
|
|
var/mob/M = usr
|
|
var/obj/item/card/id/I = M.get_idcard(TRUE)
|
|
if(!istype(I))
|
|
to_chat(usr, "<span class='alert'>Error: An ID is required!</span>")
|
|
flick(icon_deny, src)
|
|
return
|
|
var/datum/data/mining_equipment/prize = locate(params["ref"]) in prize_list
|
|
if(!prize || !(prize in prize_list))
|
|
to_chat(usr, "<span class='alert'>Error: Invalid choice!</span>")
|
|
flick(icon_deny, src)
|
|
return
|
|
if(prize.cost > I.mining_points)
|
|
to_chat(usr, "<span class='alert'>Error: Insufficient points for [prize.equipment_name] on [I]!</span>")
|
|
flick(icon_deny, src)
|
|
return
|
|
I.mining_points -= prize.cost
|
|
to_chat(usr, "<span class='notice'>[src] clanks to life briefly before vending [prize.equipment_name]!</span>")
|
|
new prize.equipment_path(loc)
|
|
SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
|
|
. = TRUE
|
|
|
|
/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
|
|
if(istype(I, /obj/item/mining_voucher))
|
|
RedeemVoucher(I, user)
|
|
return
|
|
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
|
|
return
|
|
if(default_deconstruction_crowbar(I))
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
|
|
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit")
|
|
|
|
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in sortList(items)
|
|
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
|
return
|
|
var/drop_location = drop_location()
|
|
switch(selection)
|
|
if("Survival Capsule and Explorer's Webbing")
|
|
new /obj/item/storage/belt/mining/vendor(drop_location)
|
|
if("Resonator Kit")
|
|
new /obj/item/extinguisher/mini(drop_location)
|
|
new /obj/item/resonator(drop_location)
|
|
if("Minebot Kit")
|
|
new /mob/living/simple_animal/hostile/mining_drone(drop_location)
|
|
new /obj/item/weldingtool/hugetank(drop_location)
|
|
new /obj/item/clothing/head/welding(drop_location)
|
|
new /obj/item/borg/upgrade/modkit/minebot_passthrough(drop_location)
|
|
if("Extraction and Rescue Kit")
|
|
new /obj/item/extraction_pack(drop_location)
|
|
new /obj/item/fulton_core(drop_location)
|
|
new /obj/item/stack/marker_beacon/thirty(drop_location)
|
|
if("Crusher Kit")
|
|
new /obj/item/extinguisher/mini(drop_location)
|
|
new /obj/item/kinetic_crusher(drop_location)
|
|
if("Mining Conscription Kit")
|
|
new /obj/item/storage/backpack/duffelbag/mining_conscript(drop_location)
|
|
|
|
SSblackbox.record_feedback("tally", "mining_voucher_redeemed", 1, selection)
|
|
qdel(voucher)
|
|
|
|
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
|
|
do_sparks(5, TRUE, src)
|
|
if(prob(50 / severity) && severity < 3)
|
|
qdel(src)
|
|
|
|
/****************Golem Point Vendor**************************/
|
|
|
|
/obj/machinery/mineral/equipment_vendor/golem
|
|
name = "golem ship equipment vendor"
|
|
circuit = /obj/item/circuitboard/machine/mining_equipment_vendor/golem
|
|
|
|
/obj/machinery/mineral/equipment_vendor/golem/Initialize()
|
|
desc += "\nIt seems a few selections have been added."
|
|
prize_list += list(
|
|
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250),
|
|
new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250),
|
|
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300),
|
|
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
|
|
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
|
|
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
|
|
new /datum/data/mining_equipment("Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700),
|
|
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
|
|
)
|
|
return ..()
|
|
|
|
/**********************Mining Equipment Vendor Items**************************/
|
|
|
|
/**********************Mining Equipment Voucher**********************/
|
|
|
|
/obj/item/mining_voucher
|
|
name = "mining voucher"
|
|
desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "mining_voucher"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
|
|
/**********************Mining Point Card**********************/
|
|
|
|
/obj/item/card/mining_point_card
|
|
name = "mining points card"
|
|
desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
|
|
icon_state = "data_1"
|
|
var/points = 500
|
|
|
|
/obj/item/card/mining_point_card/attackby(obj/item/I, mob/user, params)
|
|
if(istype(I, /obj/item/card/id))
|
|
if(points)
|
|
var/obj/item/card/id/C = I
|
|
C.mining_points += points
|
|
to_chat(user, "<span class='info'>You transfer [points] points to [C].</span>")
|
|
points = 0
|
|
else
|
|
to_chat(user, "<span class='alert'>There's no points left on [src].</span>")
|
|
..()
|
|
|
|
/obj/item/card/mining_point_card/examine(mob/user)
|
|
..()
|
|
to_chat(user, "<span class='alert'>There's [points] point\s on the card.</span>")
|
|
|
|
///Conscript kit
|
|
/obj/item/card/mining_access_card
|
|
name = "mining access card"
|
|
desc = "A small card, that when used on any ID, will add mining access."
|
|
icon_state = "data_1"
|
|
|
|
/obj/item/card/mining_access_card/afterattack(atom/movable/AM, mob/user, proximity)
|
|
. = ..()
|
|
if(istype(AM, /obj/item/card/id) && proximity)
|
|
var/obj/item/card/id/I = AM
|
|
I.access |= ACCESS_MINING
|
|
I.access |= ACCESS_MINING_STATION
|
|
I.access |= ACCESS_MECH_MINING
|
|
I.access |= ACCESS_MINERAL_STOREROOM
|
|
I.access |= ACCESS_CARGO
|
|
to_chat(user, "<span class='notice'>You upgrade [I] with mining access.</span>")
|
|
qdel(src)
|
|
|
|
/obj/item/storage/backpack/duffelbag/mining_conscript
|
|
name = "mining conscription kit"
|
|
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
|
|
|
|
/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents()
|
|
new /obj/item/clothing/glasses/meson(src)
|
|
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
|
new /obj/item/storage/bag/ore(src)
|
|
new /obj/item/clothing/suit/hooded/explorer(src)
|
|
new /obj/item/encryptionkey/headset_mining(src)
|
|
new /obj/item/clothing/mask/gas/explorer(src)
|
|
new /obj/item/card/mining_access_card(src)
|
|
new /obj/item/gun/energy/kinetic_accelerator(src)
|
|
new /obj/item/kitchen/knife/combat/survival(src)
|
|
new /obj/item/flashlight/seclite(src)
|