mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-16 18:45:22 +01:00
9fb7c20daa
## About The Pull Request Last Christmas we had and resolved this bug #88595 where via the mechanic of buying random trash, Cargo could roll on the roulette to try and get random Christmas presents and open them for random items. This was removed because it's not supposed to work that way and was a way of exploiting Christmas cheer for personal gain, which is grinchsome behaviour. That said, being able to order Christmas presents is also kind of soulful, so this PR brings that mechanic back but on purpose this time. During the Christmas season _only_, Cargo can spend 3000 credits of their budget to order a "Surplus Christmas Gifts" crate which contains 4-6 presents _with pre-assigned recipients_. In a similar system to addressed mail, only the person written on the gift tag can open the present, so unless you're sufficiently scroogeous to collect a huge pile of presents on the cargo room floor in hopes of getting a couple with your name on (in my testing these contained raw unbaked croissant dough, and a piece of paper from a space ruin) you should mostly be using this to deliver generalised holiday cheer to the crew rather than just yourself. This PR also contains (maybe as more lines than the actual feature) a refactor changing a bunch of boolean vars on `/datum/supply_pack` into bitflags, because I needed to add one more and it seemed silly to have so many booleans. ## Why It's Good For The Game It allows those with the yuletide spirit to deliver some christmas cheer to their fellow man, isn't that the season's reason? ## Changelog 🆑 add: When the game considers it to be Christmas, Cargo can order additional Christmas gifts pre-addressed to random crew members. /🆑
273 lines
11 KiB
Plaintext
273 lines
11 KiB
Plaintext
/datum/supply_pack/misc
|
|
group = "Miscellaneous Supplies"
|
|
|
|
/datum/supply_pack/misc/artsupply
|
|
name = "Art Supplies"
|
|
desc = "Make some happy little accidents with a rapid pipe cleaner layer, \
|
|
three spraycans, and lots of crayons!"
|
|
cost = CARGO_CRATE_VALUE * 1.8
|
|
contains = list(/obj/item/rcl,
|
|
/obj/item/storage/toolbox/artistic,
|
|
/obj/item/storage/toolbox/crafter,
|
|
/obj/item/toy/crayon/spraycan = 3,
|
|
/obj/item/storage/crayons,
|
|
/obj/item/toy/crayon/white,
|
|
/obj/item/toy/crayon/rainbow,
|
|
)
|
|
crate_name = "art supply crate"
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
|
|
/datum/supply_pack/misc/tattoo_kit
|
|
name = "Tattoo Kit"
|
|
desc = "A tattoo kit with some extra starting ink."
|
|
cost = CARGO_CRATE_VALUE * 1.8
|
|
contains = list(
|
|
/obj/item/tattoo_kit,
|
|
/obj/item/toner = 2)
|
|
crate_name = "tattoo crate"
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
discountable = SUPPLY_PACK_STD_DISCOUNTABLE
|
|
|
|
/datum/supply_pack/misc/bicycle
|
|
name = "Bicycle"
|
|
desc = "Nanotrasen reminds all employees to never toy with powers outside their control."
|
|
cost = 1000000 //Special case, we don't want to make this in terms of crates because having bikes be a million credits is the whole meme.
|
|
contains = list(/obj/vehicle/ridden/bicycle)
|
|
crate_name = "bicycle crate"
|
|
crate_type = /obj/structure/closet/crate/large
|
|
discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
|
|
|
|
/datum/supply_pack/misc/bigband
|
|
name = "Big Band Instrument Collection"
|
|
desc = "Get your sad station movin' and groovin' with this fine collection! \
|
|
Contains nine different instruments!"
|
|
cost = CARGO_CRATE_VALUE * 10
|
|
crate_name = "Big band musical instruments collection"
|
|
contains = list(/obj/item/instrument/violin,
|
|
/obj/item/instrument/guitar,
|
|
/obj/item/instrument/glockenspiel,
|
|
/obj/item/instrument/accordion,
|
|
/obj/item/instrument/saxophone,
|
|
/obj/item/instrument/trombone,
|
|
/obj/item/instrument/recorder,
|
|
/obj/item/instrument/harmonica,
|
|
/obj/structure/musician/piano/unanchored,
|
|
)
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
|
|
/datum/supply_pack/misc/book_crate
|
|
name = "Book Crate"
|
|
desc = "Surplus from the Nanotrasen Archives, these seven books are sure to be good reads."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
access_view = ACCESS_LIBRARY
|
|
contains = list(/obj/item/book/codex_gigas,
|
|
/obj/item/book/manual/random = 3,
|
|
/obj/item/book/random = 3,
|
|
)
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
|
|
/datum/supply_pack/misc/commandkeys
|
|
name = "Command Encryption Key Crate"
|
|
desc = "A pack of encryption keys that give access to the command radio network. \
|
|
Nanotrasen reminds unauthorized employees not to eavesdrop in on secure communications channels, \
|
|
or at least to keep heckling of the command staff to a minimum."
|
|
access_view = ACCESS_COMMAND
|
|
access = ACCESS_COMMAND
|
|
cost = CARGO_CRATE_VALUE * 4
|
|
contains = list(/obj/item/encryptionkey/headset_com = 3)
|
|
crate_type = /obj/structure/closet/crate/secure/centcom
|
|
crate_name = "command encryption key crate"
|
|
|
|
/datum/supply_pack/misc/exploration_drone
|
|
name = "Exploration Drone"
|
|
desc = "A replacement long-range exploration drone."
|
|
cost = CARGO_CRATE_VALUE * 5
|
|
contains = list(/obj/item/exodrone)
|
|
crate_name = "exodrone crate"
|
|
|
|
/datum/supply_pack/misc/exploration_fuel
|
|
name = "Drone Fuel Pellet"
|
|
desc = "A fresh tank of exploration drone fuel."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
contains = list(/obj/item/fuel_pellet)
|
|
crate_name = "exodrone fuel crate"
|
|
|
|
/datum/supply_pack/misc/paper
|
|
name = "Bureaucracy Crate"
|
|
desc = "High stacks of papers on your desk are a big problem - make it pea-sized with \
|
|
these bureaucratic supplies! Contains six pens, some camera film, hand labeler supplies, \
|
|
a paper bin, a carbon paper bin, three folders, a laser pointer, two clipboards and two stamps."
|
|
cost = CARGO_CRATE_VALUE * 3.2
|
|
contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled,
|
|
/obj/item/camera_film,
|
|
/obj/item/hand_labeler,
|
|
/obj/item/hand_labeler_refill = 2,
|
|
/obj/item/paper_bin,
|
|
/obj/item/paper_bin/carbon,
|
|
/obj/item/pen/fourcolor = 2,
|
|
/obj/item/pen,
|
|
/obj/item/pen/fountain,
|
|
/obj/item/pen/blue,
|
|
/obj/item/pen/red,
|
|
/obj/item/folder/blue,
|
|
/obj/item/folder/red,
|
|
/obj/item/folder/yellow,
|
|
/obj/item/clipboard = 2,
|
|
/obj/item/stamp/granted,
|
|
/obj/item/stamp/denied,
|
|
/obj/item/laser_pointer/purple,
|
|
)
|
|
crate_name = "bureaucracy crate"
|
|
|
|
/datum/supply_pack/misc/fountainpens
|
|
name = "Calligraphy Crate"
|
|
desc = "Sign death warrants in style with these seven executive fountain pens."
|
|
cost = CARGO_CRATE_VALUE * 1.45
|
|
contains = list(/obj/item/storage/box/fountainpens)
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
crate_name = "calligraphy crate"
|
|
|
|
/datum/supply_pack/misc/wrapping_paper
|
|
name = "Festive Wrapping Paper Crate"
|
|
desc = "Want to mail your loved ones gift-wrapped chocolates, stuffed animals, the Clown's severed head? \
|
|
You can do all that, with this crate full of wrapping paper."
|
|
cost = CARGO_CRATE_VALUE * 1.8
|
|
contains = list(/obj/item/stack/wrapping_paper)
|
|
crate_type = /obj/structure/closet/crate/wooden
|
|
crate_name = "festive wrapping paper crate"
|
|
|
|
|
|
/datum/supply_pack/misc/funeral
|
|
name = "Funeral Supplies Crate"
|
|
desc = "At the end of the day, someone's gonna want someone dead. Give them a proper send-off with these \
|
|
funeral supplies! Contains a coffin with burial garments and flowers."
|
|
cost = CARGO_CRATE_VALUE * 1.6
|
|
access_view = ACCESS_CHAPEL_OFFICE
|
|
contains = list(/obj/item/clothing/under/misc/burial,
|
|
/obj/item/food/grown/harebell,
|
|
/obj/item/food/grown/poppy/geranium,
|
|
)
|
|
crate_name = "coffin"
|
|
crate_type = /obj/structure/closet/crate/coffin
|
|
|
|
/datum/supply_pack/misc/empty
|
|
name = "Empty Supplypod"
|
|
desc = "Presenting the New Nanotrasen-Brand Bluespace Supplypod! Transport cargo with grace and ease! \
|
|
Call today and we'll shoot over a demo unit for just 300 credits!"
|
|
cost = CARGO_CRATE_VALUE * 0.6 //Empty pod, so no crate refund
|
|
contains = list()
|
|
order_flags = ORDER_POD_ONLY
|
|
crate_type = null
|
|
special_pod = /obj/structure/closet/supplypod/bluespacepod
|
|
|
|
/datum/supply_pack/misc/empty/generate(atom/A, datum/bank_account/paying_account)
|
|
return
|
|
|
|
/datum/supply_pack/misc/religious_supplies
|
|
name = "Religious Supplies Crate"
|
|
desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your \
|
|
cargo bay. Contains two bottles of holy water, bibles, chaplain robes, and burial garments."
|
|
cost = CARGO_CRATE_VALUE * 6 // it costs so much because the Space Church needs funding to build a cathedral
|
|
access_view = ACCESS_CHAPEL_OFFICE
|
|
contains = list(/obj/item/reagent_containers/cup/glass/bottle/holywater = 2,
|
|
/obj/item/book/bible/booze = 2,
|
|
/obj/item/clothing/suit/hooded/chaplain_hoodie = 2,
|
|
/obj/item/clothing/under/misc/burial = 2,
|
|
)
|
|
crate_name = "religious supplies crate"
|
|
|
|
/datum/supply_pack/misc/candles_bulk
|
|
name = "Candle Box Crate"
|
|
desc = "Keep your local chapel lit with three candle boxes!"
|
|
cost = CARGO_CRATE_VALUE * 2
|
|
contains = list(/obj/item/storage/fancy/candle_box = 3)
|
|
crate_name = "candle box crate"
|
|
|
|
/datum/supply_pack/misc/toner
|
|
name = "Toner Crate"
|
|
desc = "Spent too much ink printing butt pictures? Fret not, with these six toner refills, \
|
|
you'll be printing butts 'till the cows come home!'"
|
|
cost = CARGO_CRATE_VALUE * 2
|
|
contains = list(/obj/item/toner = 6)
|
|
crate_name = "toner crate"
|
|
|
|
/datum/supply_pack/misc/toner_large
|
|
name = "Toner Crate (Large)"
|
|
desc = "Tired of changing toner cartridges? These six extra heavy duty refills contain \
|
|
roughly five times as much toner as the base model!"
|
|
cost = CARGO_CRATE_VALUE * 6
|
|
contains = list(/obj/item/toner/large = 6)
|
|
crate_name = "large toner crate"
|
|
|
|
/datum/supply_pack/misc/training_toolbox
|
|
name = "Training Toolbox Crate"
|
|
desc = "Hone your combat abiltities with two AURUMILL-Brand Training Toolboxes! \
|
|
Guarenteed to count hits made against living beings!"
|
|
cost = CARGO_CRATE_VALUE * 2
|
|
contains = list(/obj/item/training_toolbox = 2)
|
|
crate_name = "training toolbox crate"
|
|
|
|
///Special supply crate that generates random syndicate gear up to a determined TC value
|
|
/datum/supply_pack/misc/syndicate
|
|
name = "Assorted Syndicate Gear"
|
|
desc = "Contains a random assortment of syndicate gear."
|
|
order_flags = ORDER_SPECIAL //Cannot be ordered via cargo
|
|
contains = list()
|
|
crate_name = "syndicate gear crate"
|
|
crate_type = /obj/structure/closet/crate
|
|
test_ignored = TRUE
|
|
///Total TC worth of contained uplink items
|
|
var/crate_value = 30
|
|
///What uplink the contents are pulled from
|
|
var/contents_uplink_type = UPLINK_TRAITORS
|
|
|
|
///Generate assorted uplink items, taking into account the same surplus modifiers used for surplus crates
|
|
/datum/supply_pack/misc/syndicate/fill(obj/structure/closet/crate/C)
|
|
var/list/uplink_items = list()
|
|
for(var/datum/uplink_item/item as anything in SStraitor.uplink_items)
|
|
if(item.purchasable_from & contents_uplink_type && item.item)
|
|
uplink_items += item
|
|
|
|
while(crate_value)
|
|
var/datum/uplink_item/uplink_item = pick(uplink_items)
|
|
if(!uplink_item.surplus || prob(100 - uplink_item.surplus))
|
|
continue
|
|
if(length(uplink_item.restricted_roles) || length(uplink_item.restricted_species))
|
|
continue
|
|
if(crate_value < uplink_item.cost)
|
|
continue
|
|
crate_value -= uplink_item.cost
|
|
new uplink_item.item(C)
|
|
|
|
///Syndicate supply crate that can have its contents value changed by admins, uses a seperate datum to avoid having admins touch the original one.
|
|
/datum/supply_pack/misc/syndicate/custom_value
|
|
|
|
/datum/supply_pack/misc/syndicate/custom_value/proc/setup_contents(value, uplink)
|
|
crate_value = value
|
|
contents_uplink_type = uplink
|
|
|
|
/datum/supply_pack/misc/papercutter
|
|
name = "Paper Cutters Crate"
|
|
desc = "Contains 3 office-grade paper cutters, equipped with sharp blades that can cut any paper into two thin slips.\
|
|
Comes with one replacement blade."
|
|
cost = CARGO_CRATE_VALUE * 3.5
|
|
contains = list(
|
|
/obj/item/papercutter = 3,
|
|
/obj/item/hatchet/cutterblade = 1,
|
|
)
|
|
crate_name = "paper cutters crate"
|
|
|
|
/datum/supply_pack/misc/water_cooler
|
|
name = "Liquid Cooler - Water"
|
|
desc = "A liquid cooler, stocked with the freshest water in all the Periphery. Perfect for wasting time at the office!"
|
|
cost = CARGO_CRATE_VALUE * 2
|
|
contains = list(/obj/structure/reagent_dispensers/water_cooler/jugless = 1, /obj/item/reagent_containers/cooler_jug/water = 1)
|
|
crate_name = "water cooler crate"
|
|
|
|
/datum/supply_pack/misc/punch_cooler
|
|
name = "Liquid Cooler - Fruit Punch"
|
|
desc = "A liquid cooler, stocked with exotic fruit punch that can heal injuries! Be sure to remain near the liquid cooler while drinking, for your own health and safety. Seriously, do NOT drink this stuff away from the cooler."
|
|
cost = CARGO_CRATE_VALUE * 6
|
|
contains = list(/obj/structure/reagent_dispensers/water_cooler/jugless = 1, /obj/item/reagent_containers/cooler_jug/punch = 1)
|
|
crate_name = "punch cooler crate"
|