Files
Bubberstation/code/modules/bitrunning/objects/vendor.dm
Jeremiah 235ebba7e0 Bitrunning hotfix 3 (#78818)
## About The Pull Request
The next round of small changes to how bitrunning works - mostly from
feedback, bug reports etc.

- The loot crate delivery spot is now a buildable machine (the
byteforge), making it replaceable in the event of a disaster
- Same for netpods and quantum consoles. These boards are now
researchable and buildable.
- New icons for the byteforge and the health monitor
- Some bug fixes around despawning avatars
- Reimplements one of the bitrunning unit tests

<details>
<summary>Pictures ⬇️</summary>

Host monitor

![hostmon](https://github.com/tgstation/tgstation/assets/42397676/dc6811bc-7ce9-4eae-a91b-96975bd13c65)

Byteforge

![dreamseeker_LewhZG8bEl](https://github.com/tgstation/tgstation/assets/42397676/3071bc5f-b2c1-47d5-8a56-b0e6c216be20)

Spawning a crate

![dreamseeker_mHGSfoeMu5](https://github.com/tgstation/tgstation/assets/42397676/d5f84e91-b9bc-4bb8-8f1c-f8931154ff6d)
</details>

## Why It's Good For The Game
Bitrunning bug fixes and personal requests
Fixes #78571 
Fixes an issue reported in discord - players stuck as gondola spawn

## Changelog
🆑
fix: Added extra checks to bitrunning domain cleanup so avatars are
deleted properly.
add: Quantum servers now look for a new machine called a byteforge to
spawn loot on- no longer on an invisible landmark. This should make the
rooms rebuildable after disasters.
add: *Most* bitrunning machinery is now researchable and buildable via
circuits in the engineering protolathe.
/🆑
2023-10-09 00:26:16 -04:00

87 lines
2.8 KiB
Plaintext

#define CREDIT_TYPE_BITRUNNING "np"
/obj/machinery/computer/order_console/bitrunning
name = "bitrunning supplies order console"
desc = "NexaCache(tm)! Dubiously authentic gear for the digital daredevil."
icon = 'icons/obj/machines/bitrunning.dmi'
icon_state = "vendor"
icon_keyboard = null
icon_screen = null
circuit = /obj/item/circuitboard/computer/order_console/bitrunning
cooldown_time = 10 SECONDS
cargo_cost_multiplier = 0.65
express_cost_multiplier = 1
purchase_tooltip = @{"Your purchases will arrive at cargo,
and hopefully get delivered by them.
35% cheaper than express delivery."}
express_tooltip = @{"Sends your purchases instantly."}
credit_type = CREDIT_TYPE_BITRUNNING
order_categories = list(
CATEGORY_BITRUNNING_FLAIR,
CATEGORY_BITRUNNING_TECH,
CATEGORY_BEPIS,
)
blackbox_key = "bitrunning"
/obj/machinery/computer/order_console/bitrunning/subtract_points(final_cost, obj/item/card/id/card)
if(final_cost <= card.registered_account.bitrunning_points)
card.registered_account.bitrunning_points -= final_cost
return TRUE
return FALSE
/obj/machinery/computer/order_console/bitrunning/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries)
var/list/things_to_order = list()
for(var/datum/orderable_item/item as anything in groceries)
things_to_order[item.item_path] = groceries[item]
var/datum/supply_pack/bitrunning/pack = new(
purchaser = purchaser, \
cost = get_total_cost(), \
contains = things_to_order,
)
var/datum/supply_order/new_order = new(
pack = pack,
orderer = purchaser,
orderer_rank = "Bitrunning Vendor",
orderer_ckey = purchaser.ckey,
reason = "",
paying_account = card.registered_account,
department_destination = null,
coupon = null,
charge_on_purchase = FALSE,
manifest_can_fail = FALSE,
cost_type = credit_type,
can_be_cancelled = FALSE,
)
say("Thank you for your purchase! It will arrive on the next cargo shuttle!")
radio.talk_into(src, "A bitrunner has ordered equipment which will arrive on the cargo shuttle! Please make sure it gets to them as soon as possible!", radio_channel)
SSshuttle.shopping_list += new_order
/obj/machinery/computer/order_console/bitrunning/retrieve_points(obj/item/card/id/id_card)
return round(id_card.registered_account.bitrunning_points)
/obj/machinery/computer/order_console/bitrunning/ui_act(action, params)
. = ..()
if(!.)
flick("vendor_off", src)
/obj/machinery/computer/order_console/bitrunning/update_icon_state()
icon_state = "[initial(icon_state)][powered() ? null : "_off"]"
return ..()
/datum/supply_pack/bitrunning
name = "bitrunning order"
hidden = TRUE
crate_name = "bitrunning delivery crate"
access = list(ACCESS_BIT_DEN)
/datum/supply_pack/bitrunning/New(purchaser, cost, list/contains)
. = ..()
name = "[purchaser]'s Bitrunning Order"
src.cost = cost
src.contains = contains
#undef CREDIT_TYPE_BITRUNNING