Hard upstream sync (#6951)
* maps - none of our changes included yet i'll get them in after i finish up the rest of the sync * sync part 1 - underscore folders in code * controllers folder * datums folder * game folder * cmon, work * modules - admin to awaymissions * cargo to events * fields to lighting * mapping > ruins * rest of the code folder * rest of the folders in the root directory * DME * fixes compiling errors. it compiles so it works * readds map changes * fixes dogborg module select * fixes typo in moduleselect_alternate_icon filepath
This commit is contained in:
@@ -0,0 +1,270 @@
|
||||
/datum/bounty/item/assistant/strange_object
|
||||
name = "Strange Object"
|
||||
description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away."
|
||||
reward = 1200
|
||||
wanted_types = list(/obj/item/relic)
|
||||
|
||||
/datum/bounty/item/assistant/scooter
|
||||
name = "Scooter"
|
||||
description = "Nanotrasen has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up."
|
||||
reward = 1080 // the mat hoffman
|
||||
wanted_types = list(/obj/vehicle/ridden/scooter)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/bounty/item/assistant/skateboard
|
||||
name = "Skateboard"
|
||||
description = "Nanotrasen has determined walking to be a wasteful. Ship a skateboard to CentCom to speed operations up."
|
||||
reward = 900 // the tony hawk
|
||||
wanted_types = list(/obj/vehicle/ridden/scooter/skateboard)
|
||||
|
||||
/datum/bounty/item/assistant/stunprod
|
||||
name = "Stunprod"
|
||||
description = "CentCom demands a stunprod to use against dissidents. Craft one, then ship it."
|
||||
reward = 1300
|
||||
wanted_types = list(/obj/item/melee/baton/cattleprod)
|
||||
|
||||
/datum/bounty/item/assistant/soap
|
||||
name = "Soap"
|
||||
description = "Soap has gone missing from CentCom's bathrooms and nobody knows who took it. Replace it and be the hero CentCom needs."
|
||||
reward = 2000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/soap)
|
||||
|
||||
/datum/bounty/item/assistant/spear
|
||||
name = "Spears"
|
||||
description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears."
|
||||
reward = 2000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/twohanded/spear)
|
||||
|
||||
/datum/bounty/item/assistant/toolbox
|
||||
name = "Toolboxes"
|
||||
description = "There's an absence of robustness at Central Command. Hurry up and ship some toolboxes as a solution."
|
||||
reward = 2000
|
||||
required_count = 6
|
||||
wanted_types = list(/obj/item/storage/toolbox)
|
||||
|
||||
/datum/bounty/item/assistant/statue
|
||||
name = "Statue"
|
||||
description = "Central Command would like to commision an artsy statue for the lobby. Ship one out, when possible."
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/structure/statue)
|
||||
|
||||
/datum/bounty/item/assistant/clown_box
|
||||
name = "Clown Box"
|
||||
description = "The universe needs laughter. Stamp cardboard with a clown stamp and ship it out."
|
||||
reward = 1500
|
||||
wanted_types = list(/obj/item/storage/box/clown)
|
||||
|
||||
/datum/bounty/item/assistant/cheesiehonkers
|
||||
name = "Cheesie Honkers"
|
||||
description = "Apparently the company that makes Cheesie Honkers is going out of business soon. CentCom wants to stock up before it happens!"
|
||||
reward = 1200
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/cheesiehonkers)
|
||||
|
||||
/datum/bounty/item/assistant/baseball_bat
|
||||
name = "Baseball Bat"
|
||||
description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream."
|
||||
reward = 2000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/melee/baseball_bat)
|
||||
|
||||
/datum/bounty/item/assistant/extendohand
|
||||
name = "Extendo-Hand"
|
||||
description = "Commander Betsy is getting old, and can't bend over to get the telescreen remote anymore. Management has requested an extendo-hand to help her out."
|
||||
reward = 2500
|
||||
wanted_types = list(/obj/item/extendohand)
|
||||
|
||||
/datum/bounty/item/assistant/donut
|
||||
name = "Donuts"
|
||||
description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale."
|
||||
reward = 3000
|
||||
required_count = 10
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/donut)
|
||||
|
||||
/datum/bounty/item/assistant/donkpocket
|
||||
name = "Donk-Pockets"
|
||||
description = "Consumer safety recall: Warning. Donk-Pockets manufactured in the past year contain hazardous lizard biomatter. Return units to CentCom immediately."
|
||||
reward = 3000
|
||||
required_count = 10
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/donkpocket)
|
||||
|
||||
/datum/bounty/item/assistant/briefcase
|
||||
name = "Briefcase"
|
||||
description = "Central Command will be holding a business convention this year. Ship a few briefcases in support."
|
||||
reward = 2500
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/storage/briefcase)
|
||||
|
||||
/datum/bounty/item/assistant/sunglasses
|
||||
name = "Sunglasses"
|
||||
description = "A famous blues duo is passing through the sector, but they've lost their shades and they can't perform. Ship new sunglasses to CentCom to rectify this."
|
||||
reward = 3000
|
||||
required_count = 2
|
||||
wanted_types = list(/obj/item/clothing/glasses/sunglasses)
|
||||
|
||||
/datum/bounty/item/assistant/gondola_hide
|
||||
name = "Gondola Hide"
|
||||
description = "Central Command has recently learned of strange creatures called Gondolas. If you catch one, ship its hide back to CentCom."
|
||||
reward = 5000
|
||||
wanted_types = list(/obj/item/stack/sheet/animalhide/gondola)
|
||||
|
||||
/datum/bounty/item/assistant/monkey_hide
|
||||
name = "Monkey Hide"
|
||||
description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it."
|
||||
reward = 1500
|
||||
wanted_types = list(/obj/item/stack/sheet/animalhide/monkey)
|
||||
|
||||
/datum/bounty/item/assistant/heart
|
||||
name = "Heart"
|
||||
description = "Commander Johnson is in critical condition after suffering a heart attack. Doctors say he needs a new heart fast. Ship one, pronto!"
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/organ/heart)
|
||||
|
||||
/datum/bounty/item/assistant/lung
|
||||
name = "Lungs"
|
||||
description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded."
|
||||
reward = 3000
|
||||
required_count = 1
|
||||
wanted_types = list(/obj/item/organ/lungs)
|
||||
|
||||
/datum/bounty/item/assistant/appendix
|
||||
name = "Appendix"
|
||||
description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay."
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/organ/appendix)
|
||||
|
||||
/datum/bounty/item/assistant/lizard_tail
|
||||
name = "Lizard Tail"
|
||||
description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?"
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/organ/tail/lizard)
|
||||
|
||||
/datum/bounty/item/assistant/shard
|
||||
name = "Shards"
|
||||
description = "A killer clown has been stalking CentCom, and staff have been unable to catch her because she's not wearing shoes. Please ship some shards so that a booby trap can be constructed."
|
||||
reward = 1500
|
||||
required_count = 15
|
||||
wanted_types = list(/obj/item/shard)
|
||||
|
||||
/datum/bounty/item/assistant/comfy_chair
|
||||
name = "Comfy Chairs"
|
||||
description = "Commander Pat is unhappy with his chair. He claims it hurts his back. Ship some alternatives out to humor him. "
|
||||
reward = 1500
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/structure/chair/comfy)
|
||||
|
||||
/datum/bounty/item/assistant/revolver
|
||||
name = "Revolver"
|
||||
description = "Captain Johann of station 12 has challenged Captain Vic of station 11 to a duel. He's asked for help securing an appropriate revolver to use."
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/item/gun/ballistic/revolver)
|
||||
|
||||
/datum/bounty/item/assistant/hand_tele
|
||||
name = "Hand Tele"
|
||||
description = "Central Command has come up with a genius idea: Why not teleport cargo rather than ship it? Send over a hand tele, receive payment, then wait 6-8 years while they deliberate."
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/item/hand_tele)
|
||||
|
||||
/datum/bounty/item/assistant/geranium
|
||||
name = "Geraniums"
|
||||
description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you."
|
||||
reward = 4000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy/geranium)
|
||||
|
||||
/datum/bounty/item/assistant/poppy
|
||||
name = "Poppies"
|
||||
description = "Commander Zot really wants to sweep Security Officer Olivia off her feet. Send a shipment of Poppies - her favorite flower - and he'll happily reward you."
|
||||
reward = 1000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/poppy)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/bounty/item/assistant/shadyjims
|
||||
name = "Shady Jim's"
|
||||
description = "There's an irate officer at CentCom demanding that he receive a box of Shady Jim's cigarettes. Please ship one. He's starting to make threats."
|
||||
reward = 500
|
||||
wanted_types = list(/obj/item/storage/fancy/cigarettes/cigpack_shadyjims)
|
||||
|
||||
/datum/bounty/item/assistant/potted_plants
|
||||
name = "Potted Plants"
|
||||
description = "Central Command is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants."
|
||||
reward = 2000
|
||||
required_count = 8
|
||||
wanted_types = list(/obj/item/twohanded/required/kirbyplants)
|
||||
|
||||
/datum/bounty/item/assistant/earmuffs
|
||||
name = "Earmuffs"
|
||||
description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/clothing/ears/earmuffs)
|
||||
|
||||
/datum/bounty/item/assistant/handcuffs
|
||||
name = "Handcuffs"
|
||||
description = "A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints)."
|
||||
reward = 1000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/restraints/handcuffs)
|
||||
|
||||
/datum/bounty/item/assistant/monkey_cubes
|
||||
name = "Monkey Cubes"
|
||||
description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes."
|
||||
reward = 2000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/monkeycube)
|
||||
|
||||
/datum/bounty/item/assistant/chainsaw
|
||||
name = "Chainsaw"
|
||||
description = "The chef at CentCom is having trouble butchering her animals. She requests one chainsaw, please."
|
||||
reward = 2500
|
||||
wanted_types = list(/obj/item/twohanded/required/chainsaw)
|
||||
|
||||
/datum/bounty/item/assistant/ied
|
||||
name = "IED"
|
||||
description = "Nanotrasen's maximum security prison at CentCom is undergoing personnel training. Ship a handful of IEDs to serve as a training tools."
|
||||
reward = 2000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/grenade/iedcasing)
|
||||
|
||||
/datum/bounty/item/assistant/bonfire
|
||||
name = "Lit Bonfire"
|
||||
description = "Space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Ship a lit bonfire to warm them up."
|
||||
reward = 5000
|
||||
wanted_types = list(/obj/structure/bonfire)
|
||||
|
||||
/datum/bounty/item/assistant/bonfire/applies_to(obj/O)
|
||||
if(!..())
|
||||
return FALSE
|
||||
var/obj/structure/bonfire/B = O
|
||||
return !!B.burning
|
||||
|
||||
/datum/bounty/item/assistant/plasma_tank
|
||||
name = "Full Tank of Plasma"
|
||||
description = "Station 12 has requested supplies to set up a singularity engine. In particular, they request 28 moles of plasma."
|
||||
reward = 2500
|
||||
wanted_types = list(/obj/item/tank)
|
||||
var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact.
|
||||
|
||||
/datum/bounty/item/assistant/plasma_tank/applies_to(obj/O)
|
||||
if(!..())
|
||||
return FALSE
|
||||
var/obj/item/tank/T = O
|
||||
if(!T.air_contents.gases[/datum/gas/plasma])
|
||||
return FALSE
|
||||
return T.air_contents.gases[/datum/gas/plasma][MOLES] >= moles_required
|
||||
|
||||
/datum/bounty/item/assistant/corgimeat
|
||||
name = "Raw Corgi Meat"
|
||||
description = "The Syndicate recently stole all of CentCom's corgi meat. Ship out a replacement immediately."
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi)
|
||||
|
||||
/datum/bounty/item/chef/action_figures
|
||||
name = "Action Figures"
|
||||
description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints."
|
||||
reward = 4000
|
||||
required_count = 5
|
||||
wanted_types = list(/obj/item/toy/figure)
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
/datum/bounty/item/chef/birthday_cake
|
||||
name = "Birthday Cake"
|
||||
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
|
||||
reward = 4000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday)
|
||||
|
||||
/datum/bounty/item/chef/soup
|
||||
name = "Soup"
|
||||
description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers. Ship any type of soup."
|
||||
reward = 3000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/soup)
|
||||
|
||||
/datum/bounty/item/chef/popcorn
|
||||
name = "Popcorn Bags"
|
||||
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
|
||||
reward = 3000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn)
|
||||
|
||||
/datum/bounty/item/chef/onionrings
|
||||
name = "Onion Rings"
|
||||
description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support."
|
||||
reward = 3000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/onionrings)
|
||||
|
||||
/datum/bounty/item/chef/icecreamsandwich
|
||||
name = "Ice Cream Sandwiches"
|
||||
description = "Upper management has been screaming non-stop for ice cream. Please send some."
|
||||
reward = 4000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/icecreamsandwich)
|
||||
|
||||
/datum/bounty/item/chef/bread
|
||||
name = "Bread"
|
||||
description = "Problems with central planning have led to bread prices skyrocketing. Ship some bread to ease tensions."
|
||||
reward = 1000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/bread, /obj/item/reagent_containers/food/snacks/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/rawpastrybase)
|
||||
|
||||
/datum/bounty/item/chef/pie
|
||||
name = "Pie"
|
||||
description = "3.14159? No! CentCom management wants edible pie! Ship a whole one."
|
||||
reward = 3142
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/pie)
|
||||
|
||||
/datum/bounty/item/chef/salad
|
||||
name = "Salad or Rice Bowls"
|
||||
description = "CentCom management is going on a health binge. Your order is to ship salad or rice bowls."
|
||||
reward = 3000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/salad)
|
||||
|
||||
/datum/bounty/item/chef/carrotfries
|
||||
name = "Carrot Fries"
|
||||
description = "Night sight can mean life or death! A shipment of carrot fries is the order."
|
||||
reward = 3500
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries)
|
||||
|
||||
/datum/bounty/item/chef/superbite
|
||||
name = "Super Bite Burger"
|
||||
description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
|
||||
reward = 12000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite)
|
||||
|
||||
/datum/bounty/item/chef/poppypretzel
|
||||
name = "Poppy Pretzel"
|
||||
description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test."
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel)
|
||||
|
||||
/datum/bounty/item/chef/cubancarp
|
||||
name = "Cuban Carp"
|
||||
description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom."
|
||||
reward = 8000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/cubancarp)
|
||||
|
||||
/datum/bounty/item/chef/hotdog
|
||||
name = "Hot Dog"
|
||||
description = "Nanotrasen is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate."
|
||||
reward = 8000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/hotdog)
|
||||
|
||||
/datum/bounty/item/chef/lemon
|
||||
name = "Lemons"
|
||||
description = "A commander claims he can turn lemons into money. Ship him a few and he'll deposit the money into the station's account."
|
||||
reward = 4444
|
||||
required_count = 10
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lemon)
|
||||
|
||||
/datum/bounty/item/chef/eggplantparm
|
||||
name = "Eggplant Parmigianas"
|
||||
description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
|
||||
reward = 3500
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/eggplantparm)
|
||||
|
||||
/datum/bounty/item/chef/muffin
|
||||
name = "Muffins"
|
||||
description = "The Muffin Man is visiting CentCom, but he's forgotten his muffins! Your order is to rectify this."
|
||||
reward = 3000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/muffin)
|
||||
|
||||
/datum/bounty/item/chef/chawanmushi
|
||||
name = "Chawanmushi"
|
||||
description = "Nanotrasen wants to improve relations with its sister company, Japanotrasen. Ship Chawanmushi immediately."
|
||||
reward = 8000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/chawanmushi)
|
||||
|
||||
/datum/bounty/item/chef/kebab
|
||||
name = "Kebabs"
|
||||
description = "Remove all kebab from station you are best food. Ship to CentCom to remove from the premises."
|
||||
reward = 3500
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/kebab)
|
||||
|
||||
/datum/bounty/item/chef/soylentgreen
|
||||
name = "Soylent Green"
|
||||
description = "CentCom has heard wonderful things about the product 'Soylent Green', and would love to try some. If you endulge them, expect a pleasant bonus."
|
||||
reward = 5000
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/soylentgreen)
|
||||
|
||||
/datum/bounty/item/chef/pancakes
|
||||
name = "Pancakes"
|
||||
description = "Here at Nanotrasen we consider employees to be family. And you know what families love? Pancakes. Ship a baker's dozen."
|
||||
reward = 5000
|
||||
required_count = 13
|
||||
wanted_types = list(/datum/crafting_recipe/food/pancakes)
|
||||
|
||||
/datum/bounty/item/chef/nuggies
|
||||
name = "Chicken Nuggets"
|
||||
description = "The vice president's son won't shut up about chicken nuggies. Would you mind shipping some?"
|
||||
reward = 4000
|
||||
required_count = 6
|
||||
wanted_types = list(/obj/item/reagent_containers/food/snacks/nugget)
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/datum/bounty/item
|
||||
var/required_count = 1
|
||||
var/shipped_count = 0
|
||||
var/list/wanted_types // Types accepted for the bounty.
|
||||
var/include_subtypes = TRUE // Set to FALSE to make the datum apply only to a strict type.
|
||||
var/list/exclude_types // Types excluded.
|
||||
|
||||
/datum/bounty/item/New()
|
||||
..()
|
||||
wanted_types = typecacheof(wanted_types)
|
||||
exclude_types = typecacheof(exclude_types)
|
||||
|
||||
/datum/bounty/item/completion_string()
|
||||
return {"[shipped_count]/[required_count]"}
|
||||
|
||||
/datum/bounty/item/can_claim()
|
||||
return ..() && shipped_count >= required_count
|
||||
|
||||
/datum/bounty/item/applies_to(obj/O)
|
||||
if(!include_subtypes && !(O.type in wanted_types))
|
||||
return FALSE
|
||||
if(include_subtypes && (!is_type_in_typecache(O, wanted_types) || is_type_in_typecache(O, exclude_types)))
|
||||
return FALSE
|
||||
if(O.flags_1 & HOLOGRAM_1)
|
||||
return FALSE
|
||||
return shipped_count < required_count
|
||||
|
||||
/datum/bounty/item/ship(obj/O)
|
||||
if(!applies_to(O))
|
||||
return
|
||||
shipped_count += 1
|
||||
|
||||
/datum/bounty/item/compatible_with(datum/other_bounty)
|
||||
return type != other_bounty.type
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/datum/bounty/item/mech/New()
|
||||
..()
|
||||
description = "Upper management has requested one [name] mech be sent as soon as possible. Ship it to receive a large payment."
|
||||
|
||||
/datum/bounty/item/mech/ship(obj/O)
|
||||
if(!applies_to(O))
|
||||
return
|
||||
if(istype(O, /obj/mecha))
|
||||
var/obj/mecha/M = O
|
||||
M.wreckage = null // So the mech doesn't explode.
|
||||
..()
|
||||
|
||||
/datum/bounty/item/mech/mark_high_priority(scale_reward)
|
||||
return ..(max(scale_reward * 0.7, 1.2))
|
||||
|
||||
/datum/bounty/item/mech/ripley
|
||||
name = "APLU \"Ripley\""
|
||||
reward = 13000
|
||||
wanted_types = list(/obj/mecha/working/ripley)
|
||||
|
||||
/datum/bounty/item/mech/odysseus
|
||||
name = "Odysseus"
|
||||
reward = 11000
|
||||
wanted_types = list(/obj/mecha/medical/odysseus)
|
||||
|
||||
/datum/bounty/item/mech/gygax
|
||||
name = "Gygax"
|
||||
reward = 28000
|
||||
wanted_types = list(/obj/mecha/combat/gygax)
|
||||
|
||||
/datum/bounty/item/mech/durand
|
||||
name = "Durand"
|
||||
reward = 20000
|
||||
wanted_types = list(/obj/mecha/combat/durand)
|
||||
|
||||
/datum/bounty/item/mech/phazon
|
||||
name = "Phazon"
|
||||
reward = 50000
|
||||
wanted_types = list(/obj/mecha/combat/phazon)
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
/datum/bounty/reagent
|
||||
var/required_volume = 10
|
||||
var/shipped_volume = 0
|
||||
var/datum/reagent/wanted_reagent
|
||||
|
||||
/datum/bounty/reagent/completion_string()
|
||||
return {"[round(shipped_volume)]/[required_volume] Units"}
|
||||
|
||||
/datum/bounty/reagent/can_claim()
|
||||
return ..() && shipped_volume >= required_volume
|
||||
|
||||
/datum/bounty/reagent/applies_to(obj/O)
|
||||
if(!istype(O, /obj/item/reagent_containers))
|
||||
return FALSE
|
||||
if(!O.reagents || !O.reagents.has_reagent(wanted_reagent.id))
|
||||
return FALSE
|
||||
if(O.flags_1 & HOLOGRAM_1)
|
||||
return FALSE
|
||||
return shipped_volume < required_volume
|
||||
|
||||
/datum/bounty/reagent/ship(obj/O)
|
||||
if(!applies_to(O))
|
||||
return
|
||||
shipped_volume += O.reagents.get_reagent_amount(wanted_reagent.id)
|
||||
if(shipped_volume > required_volume)
|
||||
shipped_volume = required_volume
|
||||
|
||||
/datum/bounty/reagent/compatible_with(other_bounty)
|
||||
if(!istype(other_bounty, /datum/bounty/reagent))
|
||||
return TRUE
|
||||
var/datum/bounty/reagent/R = other_bounty
|
||||
return wanted_reagent.id != R.wanted_reagent.id
|
||||
|
||||
/datum/bounty/reagent/simple_drink
|
||||
name = "Simple Drink"
|
||||
reward = 1500
|
||||
|
||||
datum/bounty/reagent/simple_drink/New()
|
||||
// Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped.
|
||||
var/static/list/possible_reagents = list(\
|
||||
/datum/reagent/consumable/ethanol/antifreeze,\
|
||||
/datum/reagent/consumable/ethanol/andalusia,\
|
||||
/datum/reagent/consumable/tea/arnold_palmer,\
|
||||
/datum/reagent/consumable/ethanol/b52,\
|
||||
/datum/reagent/consumable/ethanol/bananahonk,\
|
||||
/datum/reagent/consumable/ethanol/beepsky_smash,\
|
||||
/datum/reagent/consumable/ethanol/between_the_sheets,\
|
||||
/datum/reagent/consumable/ethanol/bilk,\
|
||||
/datum/reagent/consumable/ethanol/black_russian,\
|
||||
/datum/reagent/consumable/ethanol/bloody_mary,\
|
||||
/datum/reagent/consumable/ethanol/brave_bull,\
|
||||
/datum/reagent/consumable/ethanol/martini,\
|
||||
/datum/reagent/consumable/ethanol/cuba_libre,\
|
||||
/datum/reagent/consumable/ethanol/eggnog,\
|
||||
/datum/reagent/consumable/ethanol/erikasurprise,\
|
||||
/datum/reagent/consumable/ethanol/ginfizz,\
|
||||
/datum/reagent/consumable/ethanol/gintonic,\
|
||||
/datum/reagent/consumable/ethanol/grappa,\
|
||||
/datum/reagent/consumable/ethanol/grog,\
|
||||
/datum/reagent/consumable/ethanol/hooch,\
|
||||
/datum/reagent/consumable/ethanol/iced_beer,\
|
||||
/datum/reagent/consumable/ethanol/irishcarbomb,\
|
||||
/datum/reagent/consumable/ethanol/manhattan,\
|
||||
/datum/reagent/consumable/ethanol/margarita,\
|
||||
/datum/reagent/consumable/ethanol/gargle_blaster,\
|
||||
/datum/reagent/consumable/ethanol/rum_coke,\
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail,\
|
||||
/datum/reagent/consumable/ethanol/snowwhite,\
|
||||
/datum/reagent/consumable/soy_latte,\
|
||||
/datum/reagent/consumable/cafe_latte,\
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb,\
|
||||
/datum/reagent/consumable/ethanol/tequila_sunrise,\
|
||||
/datum/reagent/consumable/ethanol/manly_dorf,\
|
||||
/datum/reagent/consumable/ethanol/thirteenloko,\
|
||||
/datum/reagent/consumable/triple_citrus,\
|
||||
/datum/reagent/consumable/ethanol/vodkamartini,\
|
||||
/datum/reagent/consumable/ethanol/whiskeysoda,\
|
||||
/datum/reagent/consumable/ethanol/beer/green,\
|
||||
/datum/reagent/consumable/ethanol/demonsblood,\
|
||||
/datum/reagent/consumable/ethanol/crevice_spike,\
|
||||
/datum/reagent/consumable/ethanol/singulo,\
|
||||
/datum/reagent/consumable/ethanol/whiskey_sour)
|
||||
|
||||
var/reagent_type = pick(possible_reagents)
|
||||
wanted_reagent = new reagent_type
|
||||
name = wanted_reagent.name
|
||||
description = "CentCom is thirsty! Send a shipment of [name] to CentCom to quench the company's thirst."
|
||||
reward += rand(0, 2) * 500
|
||||
|
||||
/datum/bounty/reagent/complex_drink
|
||||
name = "Complex Drink"
|
||||
reward = 4000
|
||||
|
||||
datum/bounty/reagent/complex_drink/New()
|
||||
// Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped.
|
||||
var/static/list/possible_reagents = list(\
|
||||
/datum/reagent/consumable/ethanol/atomicbomb,\
|
||||
/datum/reagent/consumable/ethanol/bacchus_blessing,\
|
||||
/datum/reagent/consumable/ethanol/bastion_bourbon,\
|
||||
/datum/reagent/consumable/ethanol/booger,\
|
||||
/datum/reagent/consumable/ethanol/hippies_delight,\
|
||||
/datum/reagent/consumable/ethanol/drunkenblumpkin,\
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz,\
|
||||
/datum/reagent/consumable/ethanol/goldschlager,\
|
||||
/datum/reagent/consumable/ethanol/hearty_punch,\
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj,\
|
||||
/datum/reagent/consumable/ethanol/narsour,\
|
||||
/datum/reagent/consumable/ethanol/neurotoxin,\
|
||||
/datum/reagent/consumable/ethanol/patron,\
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec,\
|
||||
/datum/reagent/consumable/ethanol/quintuple_sec,\
|
||||
/datum/reagent/consumable/bluecherryshake,\
|
||||
/datum/reagent/consumable/doctor_delight,\
|
||||
/datum/reagent/consumable/ethanol/silencer)
|
||||
|
||||
var/reagent_type = pick(possible_reagents)
|
||||
wanted_reagent = new reagent_type
|
||||
name = wanted_reagent.name
|
||||
description = "CentCom is offering a reward for talented mixologists. Ship a container of [name] to claim the prize."
|
||||
reward += rand(0, 4) * 500
|
||||
|
||||
/datum/bounty/reagent/chemical
|
||||
name = "Chemical"
|
||||
reward = 4000
|
||||
required_volume = 30
|
||||
|
||||
datum/bounty/reagent/chemical/New()
|
||||
// Don't worry about making this comprehensive. It doesn't matter if some chems are skipped.
|
||||
var/static/list/possible_reagents = list(\
|
||||
/datum/reagent/medicine/leporazine,\
|
||||
/datum/reagent/medicine/clonexadone,\
|
||||
/datum/reagent/medicine/pyroxadone,\
|
||||
/datum/reagent/medicine/rezadone,\
|
||||
/datum/reagent/medicine/mine_salve,\
|
||||
/datum/reagent/medicine/pen_acid,\
|
||||
/datum/reagent/medicine/perfluorodecalin,\
|
||||
/datum/reagent/medicine/ephedrine,\
|
||||
/datum/reagent/medicine/diphenhydramine,\
|
||||
/datum/reagent/medicine/atropine,\
|
||||
/datum/reagent/medicine/strange_reagent,\
|
||||
/datum/reagent/medicine/regen_jelly,\
|
||||
/datum/reagent/drug/space_drugs,\
|
||||
/datum/reagent/drug/crank,\
|
||||
/datum/reagent/drug/krokodil,\
|
||||
/datum/reagent/drug/methamphetamine,\
|
||||
/datum/reagent/drug/bath_salts,\
|
||||
/datum/reagent/drug/aranesp,\
|
||||
/datum/reagent/nitroglycerin,\
|
||||
/datum/reagent/blackpowder,\
|
||||
/datum/reagent/napalm,\
|
||||
/datum/reagent/teslium,\
|
||||
/datum/reagent/firefighting_foam,\
|
||||
/datum/reagent/consumable/honey,\
|
||||
/datum/reagent/consumable/mayonnaise,\
|
||||
/datum/reagent/consumable/frostoil,\
|
||||
/datum/reagent/toxin/slimejelly,\
|
||||
/datum/reagent/toxin/itching_powder,\
|
||||
/datum/reagent/toxin/amanitin,\
|
||||
/datum/reagent/toxin/coniine,\
|
||||
/datum/reagent/toxin/cyanide,\
|
||||
/datum/reagent/toxin/heparin,\
|
||||
/datum/reagent/toxin/skewium,\
|
||||
/datum/reagent/toxin/anacea,\
|
||||
/datum/reagent/toxin/mimesbane,\
|
||||
/datum/reagent/pax)
|
||||
|
||||
var/reagent_type = pick(possible_reagents)
|
||||
wanted_reagent = new reagent_type
|
||||
name = wanted_reagent.name
|
||||
description = "CentCom is in desperate need of the chemical [name]. Ship a container of it to be rewarded."
|
||||
reward += rand(0, 4) * 500
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/datum/bounty/item/science/boh
|
||||
name = "Bag of Holding"
|
||||
description = "Nanotrasen would make good use of high-capacity backpacks. If you have any, please ship them."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/storage/backpack/holding)
|
||||
|
||||
/datum/bounty/item/science/tboh
|
||||
name = "Trash Bag of Holding"
|
||||
description = "Nanotrasen would make good use of high-capacity trash bags. If you have any, please ship them."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/storage/backpack/holding)
|
||||
|
||||
/datum/bounty/item/science/bluespace_syringe
|
||||
name = "Bluespace Syringe"
|
||||
description = "Nanotrasen would make good use of high-capacity syringes. If you have any, please ship them."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/reagent_containers/syringe/bluespace)
|
||||
|
||||
/datum/bounty/item/science/bluespace_body_bag
|
||||
name = "Bluespace Body Bag"
|
||||
description = "Nanotrasen would make good use of high-capacity body bags. If you have any, please ship them."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/bodybag/bluespace)
|
||||
|
||||
/datum/bounty/item/science/nightvision_goggles
|
||||
name = "Night Vision Goggles"
|
||||
description = "An electrical storm has busted all the lights at CentCom. While management is waiting for replacements, perhaps some night vision goggles can be shipped?"
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/clothing/glasses/night, /obj/item/clothing/glasses/meson/night, /obj/item/clothing/glasses/hud/health/night, /obj/item/clothing/glasses/hud/security/night, /obj/item/clothing/glasses/hud/diagnostic/night)
|
||||
|
||||
/datum/bounty/item/science/experimental_welding_tool
|
||||
name = "Experimental Welding Tool"
|
||||
description = "A recent accident has left most of CentCom's welding tools exploded. Ship replacements to be rewarded."
|
||||
reward = 10000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/weldingtool/experimental)
|
||||
|
||||
/datum/bounty/item/science/cryostasis_beaker
|
||||
name = "Cryostasis Beaker"
|
||||
description = "Chemists at Central Command have discovered a new chemical that can only be held in cryostasis beakers. The only problem is they don't have any! Rectify this to receive payment."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/reagent_containers/glass/beaker/noreact)
|
||||
|
||||
/datum/bounty/item/science/diamond_drill
|
||||
name = "Diamond Mining Drill"
|
||||
description = "Central Command is willing to pay three months salary in exchange for one diamond mining drill."
|
||||
reward = 15000
|
||||
wanted_types = list(/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)
|
||||
|
||||
/datum/bounty/item/science/floor_buffer
|
||||
name = "Floor Buffer Upgrade"
|
||||
description = "One of CentCom's janitors made a small fortune betting on carp races. Now they'd like to commission an upgrade to their floor buffer."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/janiupgrade)
|
||||
|
||||
/datum/bounty/item/science/flightsuit
|
||||
name = "Flight Suit"
|
||||
description = "According to all known laws of physics, flight suits are cool. CentCom will pay at a premium for them, so get shipping!"
|
||||
reward = 30000
|
||||
wanted_types = list(/obj/item/clothing/suit/space/hardsuit/flightsuit)
|
||||
|
||||
/datum/bounty/item/science/advanced_mop
|
||||
name = "Advanced Mop"
|
||||
description = "Excuse me. I'd like to request $17 for a push broom rebristling. Either that, or an advanced mop."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/mop/advanced)
|
||||
|
||||
/datum/bounty/item/science/advanced_egun
|
||||
name = "Advanced Energy Gun"
|
||||
description = "With the price of rechargers on the rise, upper management is interested in purchasing guns that are self-powered. If you ship one, they'll pay."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/gun/energy/e_gun/nuclear)
|
||||
@@ -0,0 +1,62 @@
|
||||
/datum/bounty/item/security/headset
|
||||
name = "Security Headset"
|
||||
description = "Nanotrasen wants to ensure that their encryption is working correctly. Ship them a security headset so that they can check."
|
||||
reward = 800
|
||||
wanted_types = list(/obj/item/radio/headset/headset_sec, /obj/item/radio/headset/heads/hos)
|
||||
|
||||
/datum/bounty/item/security/securitybelt
|
||||
name = "Security Belt"
|
||||
description = "CentCom is having difficulties with their security belts. Ship one from the station to receive compensation."
|
||||
reward = 800
|
||||
wanted_types = list(/obj/item/storage/belt/security)
|
||||
|
||||
/datum/bounty/item/security/sechuds
|
||||
name = "Security HUDSunglasses"
|
||||
description = "CentCom screwed up and ordered the wrong type of security sunglasses. They request the station ship some of theirs."
|
||||
reward = 800
|
||||
wanted_types = list(/obj/item/clothing/glasses/hud/security/sunglasses)
|
||||
|
||||
/datum/bounty/item/security/riotshotgun
|
||||
name = "Riot Shotguns"
|
||||
description = "Hooligans have boarded CentCom! Ship riot shotguns quick, or things are going to get dirty."
|
||||
reward = 5000
|
||||
required_count = 2
|
||||
wanted_types = list(/obj/item/gun/ballistic/shotgun/riot)
|
||||
|
||||
/datum/bounty/item/security/pinpointer
|
||||
name = "Nuclear Pinpointer"
|
||||
description = "There's a teeny-tiny itty-bitty chance CentCom may have lost a nuke disk. Can the station spare a pinpointer to help out?"
|
||||
reward = 1500
|
||||
wanted_types = list(/obj/item/pinpointer/nuke)
|
||||
|
||||
/datum/bounty/item/security/captains_spare
|
||||
name = "Captain's Spare"
|
||||
description = "Captain Bart of Station 12 has forgotten his ID! Ship him your station's spare, would you?"
|
||||
reward = 1500
|
||||
wanted_types = list(/obj/item/card/id/captains_spare)
|
||||
|
||||
/datum/bounty/item/security/hardsuit
|
||||
name = "Security Hardsuit"
|
||||
description = "Space pirates are heading towards CentCom! Quick! Ship a security hardsuit to aid the fight!"
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/item/clothing/suit/space/hardsuit/security)
|
||||
|
||||
/datum/bounty/item/security/krav_maga
|
||||
name = "Krav Maga Gloves"
|
||||
description = "Chef Howerwitz of CentCom is trying to take a kung-fu Pizza out of the oven, but his mitts aren't up to the task. Ship them a pair of Krav Maga gloves to do the job right."
|
||||
reward = 2000
|
||||
wanted_types = list(/obj/item/clothing/gloves/krav_maga)
|
||||
|
||||
/datum/bounty/item/security/recharger
|
||||
name = "Rechargers"
|
||||
description = "Nanotrasen military academy is conducting marksmanship exercises. They request that rechargers be shipped."
|
||||
reward = 2000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/machinery/recharger)
|
||||
|
||||
/datum/bounty/item/security/sabre
|
||||
name = "Officer's Sabre"
|
||||
description = "A 3-hour LARP session will be held at CentCom in the upcoming months. A shipped officer's sabre would make a good prop."
|
||||
reward = 2500
|
||||
wanted_types = list(/obj/item/melee/sabre)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/datum/bounty/item/slime
|
||||
reward = 3000
|
||||
|
||||
/datum/bounty/item/slime/New()
|
||||
..()
|
||||
description = "Nanotrasen's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it."
|
||||
reward += rand(0, 4) * 500
|
||||
|
||||
/datum/bounty/item/slime/green
|
||||
name = "Green Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/green)
|
||||
|
||||
/datum/bounty/item/slime/pink
|
||||
name = "Pink Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/pink)
|
||||
|
||||
/datum/bounty/item/slime/gold
|
||||
name = "Gold Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/gold)
|
||||
|
||||
/datum/bounty/item/slime/oil
|
||||
name = "Oil Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/oil)
|
||||
|
||||
/datum/bounty/item/slime/black
|
||||
name = "Black Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/black)
|
||||
|
||||
/datum/bounty/item/slime/lightpink
|
||||
name = "Light Pink Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/lightpink)
|
||||
|
||||
/datum/bounty/item/slime/adamantine
|
||||
name = "Adamantine Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/adamantine)
|
||||
|
||||
/datum/bounty/item/slime/rainbow
|
||||
name = "Rainbow Slime Extract"
|
||||
wanted_types = list(/obj/item/slime_extract/rainbow)
|
||||
@@ -0,0 +1,41 @@
|
||||
/datum/bounty/item/alien_organs
|
||||
name = "Alien Organs"
|
||||
description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thouroughly compensated."
|
||||
reward = 25000
|
||||
required_count = 3
|
||||
wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo)
|
||||
|
||||
/datum/bounty/item/syndicate_documents
|
||||
name = "Syndicate Documents"
|
||||
description = "Intel regarding the syndicate is highly prized at CentCom. If you find syndicate documents, ship them. You could save lives."
|
||||
reward = 10000
|
||||
wanted_types = list(/obj/item/documents/syndicate, /obj/item/documents/photocopy)
|
||||
|
||||
/datum/bounty/item/syndicate_documents/applies_to(obj/O)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(istype(O, /obj/item/documents/photocopy))
|
||||
var/obj/item/documents/photocopy/Copy = O
|
||||
return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate))
|
||||
return TRUE
|
||||
|
||||
/datum/bounty/more_bounties
|
||||
name = "More Bounties"
|
||||
description = "Complete enough bounties and CentCom will issue new ones!"
|
||||
reward = 3 // number of bounties
|
||||
var/required_bounties = 5
|
||||
|
||||
/datum/bounty/more_bounties/can_claim()
|
||||
return ..() && completed_bounty_count() >= required_bounties
|
||||
|
||||
/datum/bounty/more_bounties/completion_string()
|
||||
return "[min(required_bounties, completed_bounty_count())]/[required_bounties] Bounties"
|
||||
|
||||
/datum/bounty/more_bounties/reward_string()
|
||||
return "Up to [reward] new bounties"
|
||||
|
||||
/datum/bounty/more_bounties/claim()
|
||||
if(can_claim())
|
||||
claimed = TRUE
|
||||
for(var/i = 0; i < reward; ++i)
|
||||
try_add_bounty(random_bounty())
|
||||
@@ -0,0 +1,81 @@
|
||||
/datum/bounty/virus
|
||||
reward = 5000
|
||||
var/shipped = FALSE
|
||||
var/stat_value = 0
|
||||
var/stat_name = ""
|
||||
|
||||
/datum/bounty/virus/New()
|
||||
..()
|
||||
stat_value = rand(4, 11)
|
||||
if(rand(3) == 1)
|
||||
stat_value *= -1
|
||||
name = "Virus ([stat_name] of [stat_value])"
|
||||
description = "Nanotrasen is interested in a virus with a [stat_name] stat of exactly [stat_value]. Central Command will pay handsomely for such a virus."
|
||||
reward += rand(0, 4) * 500
|
||||
|
||||
/datum/bounty/virus/completion_string()
|
||||
return shipped ? "Shipped" : "Not Shipped"
|
||||
|
||||
/datum/bounty/virus/can_claim()
|
||||
return ..() && shipped
|
||||
|
||||
/datum/bounty/virus/applies_to(obj/O)
|
||||
if(shipped)
|
||||
return FALSE
|
||||
if(O.flags_1 & HOLOGRAM_1)
|
||||
return FALSE
|
||||
if(!istype(O, /obj/item/reagent_containers || !O.reagents || !O.reagents.reagent_list))
|
||||
return FALSE
|
||||
var/datum/reagent/blood/B = locate() in O.reagents.reagent_list
|
||||
if(!B)
|
||||
return FALSE
|
||||
for(var/V in B.get_diseases())
|
||||
if(!istype(V, /datum/disease/advance))
|
||||
continue
|
||||
if(accepts_virus(V))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/bounty/virus/ship(obj/O)
|
||||
if(!applies_to(O))
|
||||
return
|
||||
shipped = TRUE
|
||||
|
||||
/datum/bounty/virus/compatible_with(datum/other_bounty)
|
||||
if(!istype(other_bounty, /datum/bounty/virus))
|
||||
return TRUE
|
||||
var/datum/bounty/virus/V = other_bounty
|
||||
return type != V.type || stat_value != V.stat_value
|
||||
|
||||
|
||||
/datum/bounty/virus/proc/accepts_virus(V)
|
||||
return TRUE
|
||||
|
||||
/datum/bounty/virus/resistance
|
||||
stat_name = "resistance"
|
||||
|
||||
/datum/bounty/virus/resistance/accepts_virus(V)
|
||||
var/datum/disease/advance/A = V
|
||||
return A.totalResistance() == stat_value
|
||||
|
||||
/datum/bounty/virus/stage_speed
|
||||
stat_name = "stage speed"
|
||||
|
||||
/datum/bounty/virus/stage_speed/accepts_virus(V)
|
||||
var/datum/disease/advance/A = V
|
||||
return A.totalStageSpeed() == stat_value
|
||||
|
||||
/datum/bounty/virus/stealth
|
||||
stat_name = "stealth"
|
||||
|
||||
/datum/bounty/virus/stealth/accepts_virus(V)
|
||||
var/datum/disease/advance/A = V
|
||||
return A.totalStealth() == stat_value
|
||||
|
||||
/datum/bounty/virus/transmit
|
||||
stat_name = "transmittable"
|
||||
|
||||
/datum/bounty/virus/transmit/accepts_virus(V)
|
||||
var/datum/disease/advance/A = V
|
||||
return A.totalTransmittable() == stat_value
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
GLOBAL_LIST_EMPTY(bounties_list)
|
||||
|
||||
/datum/bounty
|
||||
var/name
|
||||
var/description
|
||||
var/reward = 1000 // In credits.
|
||||
var/claimed = FALSE
|
||||
var/high_priority = FALSE
|
||||
|
||||
// Displayed on bounty UI screen.
|
||||
/datum/bounty/proc/completion_string()
|
||||
return ""
|
||||
|
||||
// Displayed on bounty UI screen.
|
||||
/datum/bounty/proc/reward_string()
|
||||
return "[reward] Credits"
|
||||
|
||||
/datum/bounty/proc/can_claim()
|
||||
return !claimed
|
||||
|
||||
// Called when the claim button is clicked. Override to provide fancy rewards.
|
||||
/datum/bounty/proc/claim()
|
||||
if(can_claim())
|
||||
SSshuttle.points += reward
|
||||
claimed = TRUE
|
||||
|
||||
// If an item sent in the cargo shuttle can satisfy the bounty.
|
||||
/datum/bounty/proc/applies_to(obj/O)
|
||||
return FALSE
|
||||
|
||||
// Called when an object is shipped on the cargo shuttle.
|
||||
/datum/bounty/proc/ship(obj/O)
|
||||
return
|
||||
|
||||
// When randomly generating the bounty list, duplicate bounties must be avoided.
|
||||
// This proc is used to determine if two bounties are duplicates, or incompatible in general.
|
||||
/datum/bounty/proc/compatible_with(other_bounty)
|
||||
return TRUE
|
||||
|
||||
/datum/bounty/proc/mark_high_priority(scale_reward = 2)
|
||||
if(high_priority)
|
||||
return
|
||||
high_priority = TRUE
|
||||
reward = round(reward * scale_reward)
|
||||
|
||||
// This proc is called when the shuttle docks at CentCom.
|
||||
// It handles items shipped for bounties.
|
||||
/proc/bounty_ship_item_and_contents(atom/movable/AM, dry_run=FALSE)
|
||||
if(!GLOB.bounties_list.len)
|
||||
setup_bounties()
|
||||
|
||||
var/list/matched_one = FALSE
|
||||
for(var/thing in reverseRange(AM.GetAllContents()))
|
||||
var/matched_this = FALSE
|
||||
for(var/datum/bounty/B in GLOB.bounties_list)
|
||||
if(B.applies_to(thing))
|
||||
matched_one = TRUE
|
||||
matched_this = TRUE
|
||||
if(!dry_run)
|
||||
B.ship(thing)
|
||||
if(!dry_run && matched_this)
|
||||
qdel(thing)
|
||||
return matched_one
|
||||
|
||||
// Returns FALSE if the bounty is incompatible with the current bounties.
|
||||
/proc/try_add_bounty(datum/bounty/new_bounty)
|
||||
if(!new_bounty || !new_bounty.name || !new_bounty.description)
|
||||
return FALSE
|
||||
for(var/i in GLOB.bounties_list)
|
||||
var/datum/bounty/B = i
|
||||
if(!B.compatible_with(new_bounty) || !new_bounty.compatible_with(B))
|
||||
return FALSE
|
||||
GLOB.bounties_list += new_bounty
|
||||
return TRUE
|
||||
|
||||
// Returns a new bounty of random type, but does not add it to GLOB.bounties_list.
|
||||
/proc/random_bounty()
|
||||
switch(rand(1, 9))
|
||||
if(1)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
|
||||
return new subtype
|
||||
if(2)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/mech))
|
||||
return new subtype
|
||||
if(3)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/chef))
|
||||
return new subtype
|
||||
if(4)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/security))
|
||||
return new subtype
|
||||
if(5)
|
||||
if(rand(2) == 1)
|
||||
return new /datum/bounty/reagent/simple_drink
|
||||
return new /datum/bounty/reagent/complex_drink
|
||||
if(6)
|
||||
return new /datum/bounty/reagent/chemical
|
||||
if(7)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/virus))
|
||||
return new subtype
|
||||
if(8)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/science))
|
||||
return new subtype
|
||||
if(9)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/slime))
|
||||
return new subtype
|
||||
|
||||
// Called lazily at startup to populate GLOB.bounties_list with random bounties.
|
||||
/proc/setup_bounties()
|
||||
for(var/i = 0; i < 3; ++i)
|
||||
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
|
||||
try_add_bounty(new subtype)
|
||||
|
||||
for(var/i = 0; i < 1; ++i)
|
||||
var/list/subtype = pick(subtypesof(/datum/bounty/item/mech))
|
||||
try_add_bounty(new subtype)
|
||||
|
||||
for(var/i = 0; i < 2; ++i)
|
||||
var/list/subtype = pick(subtypesof(/datum/bounty/item/chef))
|
||||
try_add_bounty(new subtype)
|
||||
|
||||
for(var/i = 0; i < 1; ++i)
|
||||
var/list/subtype = pick(subtypesof(/datum/bounty/item/security))
|
||||
try_add_bounty(new subtype)
|
||||
|
||||
try_add_bounty(new /datum/bounty/reagent/simple_drink)
|
||||
try_add_bounty(new /datum/bounty/reagent/complex_drink)
|
||||
try_add_bounty(new /datum/bounty/reagent/chemical)
|
||||
|
||||
for(var/i = 0; i < 1; ++i)
|
||||
var/list/subtype = pick(subtypesof(/datum/bounty/virus))
|
||||
try_add_bounty(new subtype)
|
||||
|
||||
var/datum/bounty/B = pick(GLOB.bounties_list)
|
||||
B.mark_high_priority()
|
||||
|
||||
// Generate these last so they can't be high priority.
|
||||
try_add_bounty(new /datum/bounty/item/alien_organs)
|
||||
try_add_bounty(new /datum/bounty/item/syndicate_documents)
|
||||
try_add_bounty(new /datum/bounty/more_bounties)
|
||||
|
||||
/proc/completed_bounty_count()
|
||||
var/count = 0
|
||||
for(var/i in GLOB.bounties_list)
|
||||
var/datum/bounty/B = i
|
||||
if(B.claimed)
|
||||
++count
|
||||
return count
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
#define PRINTER_TIMEOUT 10
|
||||
|
||||
/obj/machinery/computer/bounty
|
||||
name = "Nanotrasen bounty console"
|
||||
desc = "Used to check and claim bounties offered by Nanotrasen"
|
||||
icon_screen = "bounty"
|
||||
circuit = /obj/item/circuitboard/computer/bounty
|
||||
light_color = "#E2853D"//orange
|
||||
var/printer_ready = 0 //cooldown var
|
||||
|
||||
/obj/machinery/computer/bounty/Initialize()
|
||||
. = ..()
|
||||
printer_ready = world.time + PRINTER_TIMEOUT
|
||||
|
||||
/obj/machinery/computer/bounty/proc/print_paper()
|
||||
new /obj/item/paper/bounty_printout(loc)
|
||||
|
||||
/obj/item/paper/bounty_printout
|
||||
name = "paper - Bounties"
|
||||
|
||||
/obj/item/paper/bounty_printout/Initialize()
|
||||
. = ..()
|
||||
info = "<h2>Nanotrasen Cargo Bounties</h2></br>"
|
||||
for(var/datum/bounty/B in GLOB.bounties_list)
|
||||
if(B.claimed)
|
||||
continue
|
||||
info += "<h3>[B.name]</h3>"
|
||||
info += "<ul><li>Reward: [B.reward_string()]</li>"
|
||||
info += "<li>Completed: [B.completion_string()]</li></ul>"
|
||||
|
||||
/obj/machinery/computer/bounty/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(!GLOB.bounties_list.len)
|
||||
setup_bounties()
|
||||
|
||||
var/dat = ""
|
||||
dat += "<a href='?src=[REF(src)];refresh=1'>Refresh</a>"
|
||||
dat += "<a href='?src=[REF(src)];refresh=1;choice=Print'>Print Paper</a>"
|
||||
dat += "<p>Credits: <b>[SSshuttle.points]</b></p>"
|
||||
dat += {"<table style="text-align:center;" border="1" cellspacing="0" width="100%">"}
|
||||
dat += "<tr><th>Name</th><th>Description</th><th>Reward</th><th>Completion</th><th>Status</th></tr>"
|
||||
for(var/datum/bounty/B in GLOB.bounties_list)
|
||||
var/background
|
||||
if(B.can_claim())
|
||||
background = "'background-color:#4F7529;'"
|
||||
else if(B.claimed)
|
||||
background = "'background-color:#294675;'"
|
||||
else
|
||||
background = "'background-color:#990000;'"
|
||||
dat += "<tr style=[background]>"
|
||||
if(B.high_priority)
|
||||
dat += text("<td><b>[]</b></td>", B.name)
|
||||
dat += text("<td><b>High Priority:</b> []</td>", B.description)
|
||||
dat += text("<td><b>[]</b></td>", B.reward_string())
|
||||
else
|
||||
dat += text("<td>[]</td>", B.name)
|
||||
dat += text("<td>[]</td>", B.description)
|
||||
dat += text("<td>[]</td>", B.reward_string())
|
||||
dat += text("<td>[]</td>", B.completion_string())
|
||||
if(B.can_claim())
|
||||
dat += text("<td><A href='?src=[REF(src)];refresh=1;choice=Claim;d_rec=[REF(B)]'>Claim</a></td>")
|
||||
else if(B.claimed)
|
||||
dat += text("<td>Claimed</td>")
|
||||
else
|
||||
dat += text("<td>Unclaimed</td>")
|
||||
dat += "</tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/browser/popup = new(user, "bounties", "Nanotrasen Bounties", 700, 600)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/bounty/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
switch(href_list["choice"])
|
||||
if("Print")
|
||||
if(printer_ready < world.time)
|
||||
printer_ready = world.time + PRINTER_TIMEOUT
|
||||
print_paper()
|
||||
|
||||
if("Claim")
|
||||
var/datum/bounty/B = locate(href_list["d_rec"])
|
||||
if(B in GLOB.bounties_list)
|
||||
B.claim()
|
||||
|
||||
if(href_list["refresh"])
|
||||
playsound(src, "terminal_type", 25, 0)
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/export_scanner
|
||||
name = "export scanner"
|
||||
desc = "A device used to check objects against Nanotrasen exports database."
|
||||
desc = "A device used to check objects against Nanotrasen exports and bounty database."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "export_scanner"
|
||||
item_state = "radio"
|
||||
@@ -31,8 +31,9 @@
|
||||
// Before you fix it:
|
||||
// yes, checking manifests is a part of intended functionality.
|
||||
var/price = export_item_and_contents(O, cargo_console.contraband, (cargo_console.obj_flags & EMAGGED), dry_run=TRUE)
|
||||
|
||||
if(price)
|
||||
to_chat(user, "<span class='notice'>Scanned [O], value: <b>[price]</b> credits[O.contents.len ? " (contents included)" : ""].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Scanned [O], no export value.</span>")
|
||||
if(bounty_ship_item_and_contents(O, dry_run=TRUE))
|
||||
to_chat(user, "<span class='notice'>Scanned item is eligible for one or more bounties.</span>")
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
// Armor, gloves, space suits - it all goes here
|
||||
|
||||
/datum/export/gear
|
||||
|
||||
// Security gear
|
||||
/datum/export/gear/sec_helmet
|
||||
cost = 100
|
||||
unit_name = "helmet"
|
||||
@@ -12,37 +9,13 @@
|
||||
cost = 100
|
||||
unit_name = "armor vest"
|
||||
export_types = list(/obj/item/clothing/suit/armor/vest)
|
||||
include_subtypes = FALSE
|
||||
|
||||
|
||||
/datum/export/gear/riot_helmet
|
||||
cost = 250
|
||||
unit_name = "riot helmet"
|
||||
export_types = list(/obj/item/clothing/head/helmet/riot)
|
||||
|
||||
/datum/export/gear/riot_armor
|
||||
cost = 250
|
||||
unit_name = "riot armor suit"
|
||||
export_types = list(/obj/item/clothing/suit/armor/riot)
|
||||
|
||||
/datum/export/gear/bulletproof_armor
|
||||
cost = 250
|
||||
unit_name = "bulletproof armor vest"
|
||||
export_types = list(/obj/item/clothing/suit/armor/bulletproof)
|
||||
|
||||
/datum/export/gear/reflector_armor
|
||||
cost = 650
|
||||
unit_name = "reflector armor vest"
|
||||
export_types = list(/obj/item/clothing/suit/armor/laserproof)
|
||||
|
||||
|
||||
/datum/export/gear/riot_shield
|
||||
cost = 400
|
||||
cost = 100
|
||||
unit_name = "riot shield"
|
||||
export_types = list(/obj/item/shield/riot)
|
||||
|
||||
|
||||
// Masks
|
||||
/datum/export/gear/mask/breath
|
||||
cost = 2
|
||||
unit_name = "breath mask"
|
||||
@@ -55,47 +28,30 @@
|
||||
include_subtypes = FALSE
|
||||
|
||||
|
||||
|
||||
// EVA gear
|
||||
/datum/export/gear/space
|
||||
/datum/export/gear/space/helmet
|
||||
cost = 75
|
||||
unit_name = "space helmet"
|
||||
export_types = list(/obj/item/clothing/head/helmet/space, /obj/item/clothing/head/helmet/space/eva, /obj/item/clothing/head/helmet/space/nasavoid)
|
||||
include_subtypes = FALSE
|
||||
|
||||
/datum/export/gear/space/helmet
|
||||
cost = 500
|
||||
unit_name = "space helmet"
|
||||
export_types = list(/obj/item/clothing/head/helmet/space, /obj/item/clothing/head/helmet/space/eva)
|
||||
|
||||
/datum/export/gear/space/suit
|
||||
cost = 600
|
||||
cost = 150
|
||||
unit_name = "space suit"
|
||||
export_types = list(/obj/item/clothing/suit/space, /obj/item/clothing/suit/space/eva)
|
||||
|
||||
|
||||
/datum/export/gear/space/voidhelmet
|
||||
cost = 550
|
||||
unit_name = "void helmet"
|
||||
export_types = list(/obj/item/clothing/head/helmet/space/nasavoid)
|
||||
|
||||
/datum/export/gear/space/voidsuit
|
||||
cost = 650
|
||||
unit_name = "void suit"
|
||||
export_types = list(/obj/item/clothing/suit/space/nasavoid)
|
||||
export_types = list(/obj/item/clothing/suit/space, /obj/item/clothing/suit/space/eva, /obj/item/clothing/suit/space/nasavoid)
|
||||
include_subtypes = FALSE
|
||||
|
||||
|
||||
/datum/export/gear/space/syndiehelmet
|
||||
cost = 1000
|
||||
cost = 150
|
||||
unit_name = "Syndicate space helmet"
|
||||
export_types = list(/obj/item/clothing/head/helmet/space/syndicate)
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/gear/space/syndiesuit
|
||||
cost = 1500
|
||||
cost = 300
|
||||
unit_name = "Syndicate space suit"
|
||||
export_types = list(/obj/item/clothing/suit/space/syndicate)
|
||||
include_subtypes = TRUE
|
||||
|
||||
|
||||
// Radsuits
|
||||
/datum/export/gear/radhelmet
|
||||
cost = 50
|
||||
unit_name = "radsuit hood"
|
||||
@@ -106,7 +62,6 @@
|
||||
unit_name = "radsuit"
|
||||
export_types = list(/obj/item/clothing/suit/radiation)
|
||||
|
||||
// Biosuits
|
||||
/datum/export/gear/biohood
|
||||
cost = 50
|
||||
unit_name = "biosuit hood"
|
||||
@@ -117,13 +72,12 @@
|
||||
unit_name = "biosuit"
|
||||
export_types = list(/obj/item/clothing/suit/bio_suit)
|
||||
|
||||
// Bombsuits
|
||||
/datum/export/gear/bombhelmet
|
||||
cost = 100
|
||||
cost = 50
|
||||
unit_name = "bomb suit hood"
|
||||
export_types = list(/obj/item/clothing/head/bomb_hood)
|
||||
|
||||
/datum/export/gear/bombsuit
|
||||
cost = 300
|
||||
cost = 100
|
||||
unit_name = "bomb suit"
|
||||
export_types = list(/obj/item/clothing/suit/bomb_suit)
|
||||
export_types = list(/obj/item/clothing/suit/bomb_suit)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
// Large objects that don't fit in crates, but must be sellable anyway.
|
||||
|
||||
// Crates, boxes, lockers.
|
||||
/datum/export/large/crate
|
||||
cost = 500
|
||||
k_elasticity = 0
|
||||
@@ -29,9 +26,11 @@
|
||||
export_types = list(/obj/structure/closet/crate/wooden)
|
||||
exclude_types = list()
|
||||
|
||||
/datum/export/large/crate/coffin
|
||||
cost = 250//50 wooden crates cost 2000 points, and you can make 10 coffins in seconds with those planks. Each coffin selling for 250 means you can make a net gain of 500 points for wasting your time making coffins.
|
||||
unit_name = "coffin"
|
||||
export_types = list(/obj/structure/closet/crate/coffin)
|
||||
|
||||
|
||||
// Reagent dispensers.
|
||||
/datum/export/large/reagent_dispenser
|
||||
cost = 100 // +0-400 depending on amount of reagents left
|
||||
var/contents_cost = 400
|
||||
@@ -58,19 +57,18 @@
|
||||
|
||||
|
||||
|
||||
// Heavy engineering equipment. Singulo/Tesla parts mostly.
|
||||
/datum/export/large/emitter
|
||||
cost = 400
|
||||
cost = 200
|
||||
unit_name = "emitter"
|
||||
export_types = list(/obj/machinery/power/emitter)
|
||||
|
||||
/datum/export/large/field_generator
|
||||
cost = 400
|
||||
cost = 200
|
||||
unit_name = "field generator"
|
||||
export_types = list(/obj/machinery/field/generator)
|
||||
|
||||
/datum/export/large/collector
|
||||
cost = 600
|
||||
cost = 200
|
||||
unit_name = "collector"
|
||||
export_types = list(/obj/machinery/power/rad_collector)
|
||||
|
||||
@@ -94,89 +92,14 @@
|
||||
unit_name = "supermatter shard"
|
||||
export_types = list(/obj/machinery/power/supermatter_crystal/shard)
|
||||
|
||||
// Misc
|
||||
|
||||
/datum/export/large/iv
|
||||
cost = 300
|
||||
cost = 50
|
||||
unit_name = "iv drip"
|
||||
export_types = list(/obj/machinery/iv_drip)
|
||||
|
||||
/datum/export/large/barrier
|
||||
cost = 100
|
||||
cost = 25
|
||||
unit_name = "security barrier"
|
||||
export_types = list(/obj/item/grenade/barrier, /obj/structure/barricade/security)
|
||||
|
||||
//Mecha
|
||||
/datum/export/large/mech
|
||||
export_types = list(/obj/mecha)
|
||||
var/sellable
|
||||
|
||||
/datum/export/large/mech/applies_to(obj/O)
|
||||
if(!..())
|
||||
return FALSE
|
||||
|
||||
var/obj/mecha/ME = O
|
||||
ME.wreckage = null // So the mech doesn't blow up in the cargo shuttle
|
||||
if(sellable)
|
||||
return TRUE
|
||||
|
||||
/datum/export/large/mech/sellable
|
||||
export_types = list()
|
||||
sellable = TRUE
|
||||
|
||||
/datum/export/large/mech/sellable/ripley
|
||||
cost = 7500 //boards cost 2500 and takes another 1566 worth of materials (glass, metal, plaseel) to build + significant labor
|
||||
unit_name = "APLU \"Ripley\""
|
||||
export_types = list(/obj/mecha/working/ripley)
|
||||
exclude_types = list(/obj/mecha/working/ripley/firefighter)
|
||||
|
||||
/datum/export/large/mech/sellable/firefighter
|
||||
cost = 9000 //same as a ripley but takes 10 more plasteel and 5 less metal
|
||||
unit_name = "APLU \"Firefighter\""
|
||||
export_types = list(/obj/mecha/working/ripley/firefighter)
|
||||
|
||||
/datum/export/large/mech/sellable/odysseus
|
||||
cost = 6000 // 1540 of material + 2000 price boards + labor
|
||||
unit_name = "odysseus"
|
||||
export_types = list(/obj/mecha/medical/odysseus)
|
||||
|
||||
/datum/export/large/mech/sellable/gygax
|
||||
cost = 25000 // The material is worth 22631 alone. Not as big of a premium as one would expect, since R&D would have provided upgrades by then.
|
||||
unit_name = "gygax"
|
||||
export_types = list(/obj/mecha/combat/gygax)
|
||||
exclude_types = list(/obj/mecha/combat/gygax/dark)
|
||||
|
||||
/datum/export/large/mech/sellable/honkmech
|
||||
cost = 80000 // The bananium alone is worth around 64887 credits
|
||||
unit_name = "H.O.N.K"
|
||||
message = "- HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONK HONKHONKHONKHONK"
|
||||
export_types = list(/obj/mecha/combat/honker)
|
||||
|
||||
/datum/export/large/mech/sellable/durand
|
||||
cost = 12000 // 7586 worth of material. That's less than a gygax. Players will be disappointed by the durand's comparative lack of worth but oh well. Still a large premium because this requires significant cooperation between R&D, robotics, and cargo.
|
||||
unit_name = "durand"
|
||||
export_types = list(/obj/mecha/combat/durand)
|
||||
|
||||
/datum/export/large/mech/sellable/phazon
|
||||
cost = 50000 // 15767 material + anomaly core. Fuck it, if you're willing to try selling one of these you should get BIG FUCKING MONEY
|
||||
unit_name = "phazon"
|
||||
export_types = list(/obj/mecha/combat/phazon)
|
||||
|
||||
/datum/export/large/mech/sellable/syndiegygax
|
||||
cost = 50000 // You somehow stole a nuke op's gygax and sold it to nanotrasen. Go you.
|
||||
unit_name = "captured syndicate gygax"
|
||||
export_types = list(/obj/mecha/combat/gygax/dark)
|
||||
|
||||
/datum/export/large/mech/sellable/syndiegygax/syndie
|
||||
cost = 25000 // You somehow stole a nuke op's gygax and sold it back to the syndicate. Why would you do this?
|
||||
unit_name = "gygax"
|
||||
emagged = TRUE
|
||||
|
||||
/datum/export/large/mech/sellable/mauler
|
||||
cost = 87500 // Whoa, momma.
|
||||
unit_name = "captured mauler"
|
||||
export_types = list(/obj/mecha/combat/marauder/mauler)
|
||||
|
||||
/datum/export/large/mech/sellable/mauler/syndie
|
||||
cost = 43750 // Just like the mauler is worth 1.75x the telecrystals compared to the gygax, the price reflects this
|
||||
unit_name = "mauler"
|
||||
emagged = TRUE
|
||||
|
||||
@@ -29,65 +29,57 @@
|
||||
|
||||
// Materials. Nothing but plasma is really worth selling. Better leave it all to RnD and sell some plasma instead.
|
||||
|
||||
// Bananium. Exporting it makes the clown cry. Priceless.
|
||||
/datum/export/material/bananium
|
||||
cost = 5000
|
||||
cost = 1000
|
||||
material_id = MAT_BANANIUM
|
||||
message = "cm3 of bananium"
|
||||
|
||||
// Diamonds. Rare and expensive.
|
||||
/datum/export/material/diamond
|
||||
cost = 2500
|
||||
cost = 500
|
||||
material_id = MAT_DIAMOND
|
||||
message = "cm3 of diamonds"
|
||||
|
||||
// Plasma. The oil of 26 century. The reason why you are here.
|
||||
/datum/export/material/plasma
|
||||
cost = 300
|
||||
cost = 200
|
||||
k_elasticity = 0
|
||||
material_id = MAT_PLASMA
|
||||
message = "cm3 of plasma"
|
||||
|
||||
// Uranium. Still useful for both power generation and nuclear annihilation.
|
||||
/datum/export/material/uranium
|
||||
cost = 400
|
||||
cost = 100
|
||||
material_id = MAT_URANIUM
|
||||
message = "cm3 of uranium"
|
||||
|
||||
// Gold. Used in electronics and corrosion-resistant plating.
|
||||
/datum/export/material/gold
|
||||
cost = 250
|
||||
cost = 125
|
||||
material_id = MAT_GOLD
|
||||
message = "cm3 of gold"
|
||||
|
||||
// Silver.
|
||||
/datum/export/material/silver
|
||||
cost = 100
|
||||
cost = 50
|
||||
material_id = MAT_SILVER
|
||||
message = "cm3 of silver"
|
||||
|
||||
// Titanium.
|
||||
/datum/export/material/titanium
|
||||
cost = 250
|
||||
cost = 125
|
||||
material_id = MAT_TITANIUM
|
||||
message = "cm3 of titanium"
|
||||
|
||||
// Plastitanium.
|
||||
/datum/export/material/plastitanium
|
||||
cost = 550
|
||||
material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium, so ((250 x 250) + (250 x 500)) / 250
|
||||
cost = 325 // plasma + titanium costs
|
||||
material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium
|
||||
message = "cm3 of plastitanium"
|
||||
|
||||
// Metal. Common building material.
|
||||
/datum/export/material/metal
|
||||
cost = 5
|
||||
message = "cm3 of metal"
|
||||
material_id = MAT_METAL
|
||||
export_types = list(
|
||||
/obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel,
|
||||
/obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin)
|
||||
|
||||
// Glass. Common building material.
|
||||
/datum/export/material/glass
|
||||
cost = 5
|
||||
message = "cm3 of glass"
|
||||
material_id = MAT_GLASS
|
||||
export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/export/seed
|
||||
cost = 100 // Gets multiplied by potency
|
||||
cost = 50 // Gets multiplied by potency
|
||||
k_elasticity = 1 //price inelastic/quantity elastic, only need to export a few samples
|
||||
unit_name = "new plant species sample"
|
||||
export_types = list(/obj/item/seeds)
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
//
|
||||
// Sheet Exports
|
||||
//
|
||||
|
||||
/datum/export/stack
|
||||
unit_name = "sheet"
|
||||
|
||||
@@ -11,106 +7,87 @@
|
||||
return S.amount
|
||||
return 0
|
||||
|
||||
// Hides
|
||||
|
||||
// Leather, skin and other farming by-products.
|
||||
|
||||
/datum/export/stack/skin
|
||||
unit_name = ""
|
||||
|
||||
// Monkey hide. Cheap.
|
||||
/datum/export/stack/skin/monkey
|
||||
cost = 150
|
||||
cost = 50
|
||||
unit_name = "monkey hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/monkey)
|
||||
|
||||
// Human skin. Illegal
|
||||
/datum/export/stack/skin/human
|
||||
cost = 2000
|
||||
cost = 100
|
||||
contraband = TRUE
|
||||
unit_name = "piece"
|
||||
message = "of human skin"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/human)
|
||||
|
||||
// Goliath hide. Expensive.
|
||||
/datum/export/stack/skin/goliath_hide
|
||||
cost = 2500
|
||||
cost = 200
|
||||
unit_name = "goliath hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide)
|
||||
|
||||
// Cat hide. Just in case Runtime is catsploding again.
|
||||
/datum/export/stack/skin/cat
|
||||
cost = 2000
|
||||
cost = 150
|
||||
contraband = TRUE
|
||||
unit_name = "cat hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/cat)
|
||||
|
||||
// Corgi hide. You monster.
|
||||
/datum/export/stack/skin/corgi
|
||||
cost = 2500
|
||||
cost = 200
|
||||
contraband = TRUE
|
||||
unit_name = "corgi hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/corgi)
|
||||
|
||||
// Lizard hide. Very expensive.
|
||||
/datum/export/stack/skin/lizard
|
||||
cost = 5000
|
||||
cost = 150
|
||||
unit_name = "lizard hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/lizard)
|
||||
|
||||
// Gondola hide. Mindbogglingly expensive.
|
||||
/datum/export/stack/skin/gondola
|
||||
cost = 10000
|
||||
cost = 500
|
||||
unit_name = "gondola hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/gondola)
|
||||
|
||||
// Alien hide. Extremely expensive.
|
||||
/datum/export/stack/skin/xeno
|
||||
cost = 3000
|
||||
cost = 500
|
||||
unit_name = "alien hide"
|
||||
export_types = list(/obj/item/stack/sheet/animalhide/xeno)
|
||||
|
||||
|
||||
// Common materials.
|
||||
// For base materials, see materials.dm
|
||||
|
||||
// Plasteel. Lightweight, strong and contains some plasma too.
|
||||
/datum/export/stack/plasteel
|
||||
cost = 305 // 2000u of plasma + 2000u of metal.
|
||||
cost = 155 // 2000u of plasma + 2000u of metal.
|
||||
message = "of plasteel"
|
||||
export_types = list(/obj/item/stack/sheet/plasteel)
|
||||
|
||||
// Reinforced Glass. Common building material. 1 glass + 0.5 metal, cost is rounded up.
|
||||
// 1 glass + 0.5 metal, cost is rounded up.
|
||||
/datum/export/stack/rglass
|
||||
cost = 8
|
||||
message = "of reinforced glass"
|
||||
export_types = list(/obj/item/stack/sheet/rglass)
|
||||
|
||||
// Bluespace Polycrystals. Uncommon.
|
||||
/datum/export/stack/bscrystal
|
||||
cost = 750
|
||||
cost = 300
|
||||
message = "of bluespace crystals"
|
||||
export_types = list(/obj/item/stack/sheet/bluespace_crystal)
|
||||
|
||||
// Wood. Quite expensive in the grim and dark 26 century.
|
||||
/datum/export/stack/wood
|
||||
cost = 50
|
||||
cost = 30
|
||||
unit_name = "wood plank"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/wood)
|
||||
|
||||
// Cardboard. Cheap.
|
||||
/datum/export/stack/cardboard
|
||||
cost = 2
|
||||
message = "of cardboard"
|
||||
export_types = list(/obj/item/stack/sheet/cardboard)
|
||||
|
||||
// Sandstone. Literally dirt cheap.
|
||||
/datum/export/stack/sandstone
|
||||
cost = 1
|
||||
unit_name = "block"
|
||||
message = "of sandstone"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/sandstone)
|
||||
|
||||
// Cable.
|
||||
/datum/export/stack/cable
|
||||
cost = 0.2
|
||||
unit_name = "cable piece"
|
||||
@@ -118,23 +95,14 @@
|
||||
|
||||
// Weird Stuff
|
||||
|
||||
// Alien Alloy. Like plasteel, but better.
|
||||
// Major players would pay a lot to get some, so you can get a lot of money from producing and selling those.
|
||||
// Just don't forget to fire all your production staff before the end of month.
|
||||
/datum/export/stack/abductor
|
||||
cost = 5000
|
||||
cost = 1000
|
||||
message = "of alien alloy"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/abductor)
|
||||
|
||||
// Adamantine. Does not occur naurally.
|
||||
/datum/export/stack/adamantine
|
||||
unit_name = "bar"
|
||||
cost = 7500
|
||||
cost = 500
|
||||
message = "of adamantine"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/adamantine)
|
||||
|
||||
// Mythril. Does not occur naurally.
|
||||
/datum/export/stack/mythril
|
||||
cost = 15000
|
||||
message = "of mythril"
|
||||
export_types = list(/obj/item/stack/sheet/mineral/mythril)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// Various tools and handheld engineering devices.
|
||||
|
||||
/datum/export/toolbox
|
||||
cost = 4
|
||||
unit_name = "toolbox"
|
||||
@@ -34,7 +32,6 @@
|
||||
export_types = list(/obj/item/wirecutters)
|
||||
|
||||
|
||||
// Welding tools
|
||||
/datum/export/weldingtool
|
||||
cost = 5
|
||||
unit_name = "welding tool"
|
||||
@@ -52,7 +49,6 @@
|
||||
export_types = list(/obj/item/weldingtool/largetank, /obj/item/weldingtool/hugetank)
|
||||
|
||||
|
||||
// Fire extinguishers
|
||||
/datum/export/extinguisher
|
||||
cost = 15
|
||||
unit_name = "fire extinguisher"
|
||||
@@ -65,7 +61,6 @@
|
||||
export_types = list(/obj/item/extinguisher/mini)
|
||||
|
||||
|
||||
// Flashlights
|
||||
/datum/export/flashlight
|
||||
cost = 5
|
||||
unit_name = "flashlight"
|
||||
@@ -83,7 +78,6 @@
|
||||
export_types = list(/obj/item/flashlight/seclite)
|
||||
|
||||
|
||||
// Analyzers and Scanners
|
||||
/datum/export/analyzer
|
||||
cost = 5
|
||||
unit_name = "analyzer"
|
||||
@@ -102,18 +96,17 @@
|
||||
exclude_types = list(/obj/item/radio/mech)
|
||||
|
||||
|
||||
// High-tech tools.
|
||||
/datum/export/rcd
|
||||
cost = 100 // 15 metal -> 75 credits, +25 credits for production
|
||||
cost = 100
|
||||
unit_name = "rapid construction device"
|
||||
export_types = list(/obj/item/construction/rcd)
|
||||
|
||||
/datum/export/rcd_ammo
|
||||
cost = 60 // 6 metal, 4 glass -> 50 credits, +10 credits
|
||||
cost = 60
|
||||
unit_name = "compressed matter cardridge"
|
||||
export_types = list(/obj/item/rcd_ammo)
|
||||
|
||||
/datum/export/rpd
|
||||
cost = 350 // 37.5 metal, 18.75 glass -> 281.25 credits, + some
|
||||
cost = 100
|
||||
unit_name = "rapid piping device"
|
||||
export_types = list(/obj/item/pipe_dispenser)
|
||||
|
||||
@@ -11,18 +11,18 @@
|
||||
include_subtypes = TRUE
|
||||
|
||||
/datum/export/weapon/knife
|
||||
cost = 750
|
||||
cost = 100
|
||||
unit_name = "combat knife"
|
||||
export_types = list(/obj/item/kitchen/knife/combat)
|
||||
|
||||
|
||||
/datum/export/weapon/taser
|
||||
cost = 250
|
||||
cost = 200
|
||||
unit_name = "advanced taser"
|
||||
export_types = list(/obj/item/gun/energy/e_gun/advtaser)
|
||||
|
||||
/datum/export/weapon/laser
|
||||
cost = 250
|
||||
cost = 200
|
||||
unit_name = "laser gun"
|
||||
export_types = list(/obj/item/gun/energy/laser)
|
||||
|
||||
@@ -32,35 +32,34 @@
|
||||
export_types = list(/obj/item/gun/energy/disabler)
|
||||
|
||||
/datum/export/weapon/energy_gun
|
||||
cost = 900
|
||||
cost = 300
|
||||
unit_name = "energy gun"
|
||||
export_types = list(/obj/item/gun/energy/e_gun)
|
||||
|
||||
|
||||
/datum/export/weapon/wt550
|
||||
cost = 1400
|
||||
cost = 300
|
||||
unit_name = "WT-550 automatic rifle"
|
||||
export_types = list(/obj/item/gun/ballistic/automatic/wt550)
|
||||
|
||||
/datum/export/weapon/shotgun
|
||||
cost = 350
|
||||
cost = 300
|
||||
unit_name = "combat shotgun"
|
||||
export_types = list(/obj/item/gun/ballistic/shotgun/automatic/combat)
|
||||
|
||||
|
||||
/datum/export/weapon/flashbang
|
||||
cost = 15
|
||||
cost = 5
|
||||
unit_name = "flashbang grenade"
|
||||
export_types = list(/obj/item/grenade/flashbang)
|
||||
|
||||
/datum/export/weapon/teargas
|
||||
cost = 15
|
||||
cost = 5
|
||||
unit_name = "tear gas grenade"
|
||||
export_types = list(/obj/item/grenade/chem_grenade/teargas)
|
||||
|
||||
|
||||
/datum/export/weapon/flash
|
||||
cost = 10
|
||||
cost = 5
|
||||
unit_name = "handheld flash"
|
||||
export_types = list(/obj/item/assembly/flash)
|
||||
include_subtypes = TRUE
|
||||
@@ -97,7 +96,7 @@
|
||||
cost = 40000
|
||||
unit_name = "Blood Contract"
|
||||
export_types = list(/obj/item/blood_contract)
|
||||
|
||||
|
||||
//Artifacts of lavaland
|
||||
|
||||
/datum/export/weapon/immortality_talisman
|
||||
|
||||
@@ -1,23 +1,38 @@
|
||||
#define MAX_EMAG_ROCKETS 8
|
||||
#define BEACON_COST 5000
|
||||
#define SP_LINKED 1
|
||||
#define SP_READY 2
|
||||
#define SP_LAUNCH 3
|
||||
#define SP_UNLINK 4
|
||||
#define SP_UNREADY 5
|
||||
|
||||
/obj/machinery/computer/cargo/express
|
||||
name = "express supply console"
|
||||
desc = "This console allows the user to purchase a package \
|
||||
with 1/40th of the delivery time: made possible by NanoTrasen's new \"Drop Pod Railgun\".\
|
||||
with 1/40th of the delivery time: made possible by NanoTrasen's new \"1500mm Orbital Railgun\".\
|
||||
All sales are near instantaneous - please choose carefully"
|
||||
icon_screen = "supply_express"
|
||||
circuit = /obj/item/circuitboard/computer/cargo/express
|
||||
blockade_warning = "Bluespace instability detected. Delivery impossible."
|
||||
req_access = list(ACCESS_QM)
|
||||
var/message
|
||||
var/locked = TRUE
|
||||
var/printed_beacons = 0 //number of beacons printed. Used to determine beacon names.
|
||||
var/list/meme_pack_data
|
||||
var/podID = 0//0 is your standard supply droppod (requires dissassembly after landing), 1 is the bluespace drop pod (teleports out after landing)
|
||||
var/obj/item/supplypod_beacon/beacon //the linked supplypod beacon
|
||||
var/area/landingzone = /area/quartermaster/storage //where we droppin boys
|
||||
var/podID = POD_STANDARD //0 is your standard supply supplypod (requires dissassembly after landing), 1 is the bluespace supply pod (teleports out after landing)
|
||||
var/cooldown = 0 //cooldown to prevent printing supplypod beacon spam
|
||||
var/locked = TRUE //is the console locked? unlock with ID
|
||||
var/usingBeacon = FALSE //is the console in beacon mode? exists to let beacon know when a pod may come in
|
||||
|
||||
/obj/machinery/computer/cargo/express/Initialize()
|
||||
. = ..()
|
||||
packin_up()
|
||||
|
||||
/obj/machinery/computer/cargo/express/Destroy()
|
||||
if(beacon)
|
||||
beacon.unlink_console()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params)
|
||||
if((istype(W, /obj/item/card/id) || istype(W, /obj/item/pda)) && allowed(user))
|
||||
@@ -25,17 +40,24 @@
|
||||
to_chat(user, "<span class='notice'>You [locked ? "lock" : "unlock"] the interface.</span>")
|
||||
return
|
||||
else if(istype(W, /obj/item/disk/cargo/bluespace_pod))
|
||||
podID = 1//doesnt effect circuit board, so that reversal is possible
|
||||
podID = POD_BLUESPACE//doesnt effect circuit board, making reversal possible
|
||||
to_chat(user, "<span class='notice'>You insert the disk into [src], allowing for advanced supply delivery vehicles.</span>")
|
||||
qdel(W)
|
||||
return TRUE
|
||||
else if(istype(W, /obj/item/supplypod_beacon))
|
||||
var/obj/item/supplypod_beacon/sb = W
|
||||
if (sb.express_console != src)
|
||||
sb.link_console(src, user)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] is already linked to [sb].</span>")
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/cargo/express/emag_act(mob/living/user)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] swipes a suspicious card through [src]!</span>",
|
||||
"<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
|
||||
"<span class='notice'>You change the routing protocols, allowing the Supply Pod to land anywhere on the station.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
// This also sets this on the circuit board
|
||||
var/obj/item/circuitboard/computer/cargo/board = circuit
|
||||
@@ -68,29 +90,58 @@
|
||||
ui = new(user, src, ui_key, "cargo_express", name, 1000, 800, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
/obj/machinery/computer/cargo/express/ui_data(mob/user)
|
||||
var/canBeacon = beacon && (isturf(beacon.loc) || ismob(beacon.loc))//is the beacon in a valid location?
|
||||
var/list/data = list()
|
||||
data["locked"] = locked
|
||||
data["locked"] = locked//swipe an ID to unlock
|
||||
data["siliconUser"] = user.has_unlimited_silicon_privilege
|
||||
data["beaconzone"] = beacon ? get_area(beacon) : ""//where is the beacon located? outputs in the tgui
|
||||
data["usingBeacon"] = usingBeacon //is the mode set to deliver to the beacon or the cargobay?
|
||||
data["canBeacon"] = !usingBeacon || canBeacon //is the mode set to beacon delivery, and is the beacon in a valid location?
|
||||
data["canBuyBeacon"] = cooldown <= 0 && SSshuttle.points >= BEACON_COST
|
||||
data["beaconError"] = usingBeacon && !canBeacon ? "(BEACON ERROR)" : ""//changes button text to include an error alert if necessary
|
||||
data["hasBeacon"] = beacon != null//is there a linked beacon?
|
||||
data["beaconName"] = beacon ? beacon.name : "No Beacon Found"
|
||||
data["printMsg"] = cooldown > 0 ? "Print Beacon for [BEACON_COST] credits ([cooldown])" : "Print Beacon for [BEACON_COST] credits"//buttontext for printing beacons
|
||||
data["points"] = SSshuttle.points
|
||||
data["supplies"] = list()
|
||||
message = "Sales are near-instantaneous - please choose carefully."
|
||||
if(SSshuttle.supplyBlocked)
|
||||
message = blockade_warning
|
||||
if(usingBeacon && !beacon)
|
||||
message = "BEACON ERROR: BEACON MISSING"//beacon was destroyed
|
||||
else if (usingBeacon && !canBeacon)
|
||||
message = "BEACON ERROR: MUST BE EXPOSED"//beacon's loc/user's loc must be a turf
|
||||
if(obj_flags & EMAGGED)
|
||||
message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD."
|
||||
|
||||
data["message"] = message
|
||||
if(!meme_pack_data)
|
||||
packin_up()
|
||||
stack_trace("You didn't give the cargo tech good advice, and he ripped the manifest. As a result, there was no pack data for [src]")
|
||||
data["supplies"] = meme_pack_data
|
||||
|
||||
if (cooldown > 0)//cooldown used for printing beacons
|
||||
cooldown--
|
||||
return data
|
||||
|
||||
/obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui)
|
||||
switch(action)
|
||||
if("LZCargo")
|
||||
usingBeacon = FALSE
|
||||
if (beacon)
|
||||
beacon.update_status(SP_UNREADY) //ready light on beacon will turn off
|
||||
if("LZBeacon")
|
||||
usingBeacon = TRUE
|
||||
if (beacon)
|
||||
beacon.update_status(SP_READY) //turns on the beacon's ready light
|
||||
if("printBeacon")
|
||||
if (SSshuttle.points >= BEACON_COST)
|
||||
cooldown = 10//a ~ten second cooldown for printing beacons to prevent spam
|
||||
var/obj/item/supplypod_beacon/C = new /obj/item/supplypod_beacon(drop_location())
|
||||
C.link_console(src, usr)//rather than in beacon's Initialize(), we can assign the computer to the beacon by reusing this proc)
|
||||
printed_beacons++//printed_beacons starts at 0, so the first one out will be called beacon # 1
|
||||
beacon.name = "Supply Pod Beacon #[printed_beacons]"
|
||||
SSshuttle.points -= BEACON_COST
|
||||
|
||||
if("add")//Generate Supply Order first
|
||||
var/id = text2path(params["id"])
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
|
||||
@@ -108,35 +159,43 @@
|
||||
rank = "Silicon"
|
||||
var/reason = ""
|
||||
var/list/empty_turfs
|
||||
var/area/landingzone
|
||||
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
if(SO.pack.cost <= SSshuttle.points)
|
||||
landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas
|
||||
for(var/turf/open/floor/T in landingzone.contents)
|
||||
if(is_blocked_turf(T))
|
||||
continue
|
||||
LAZYADD(empty_turfs, T)
|
||||
CHECK_TICK
|
||||
if(empty_turfs && empty_turfs.len)
|
||||
var/LZ = empty_turfs[rand(empty_turfs.len-1)]
|
||||
var/LZ
|
||||
if (istype(beacon) && usingBeacon)//prioritize beacons over landing in cargobay
|
||||
LZ = get_turf(beacon)
|
||||
beacon.update_status(SP_LAUNCH)
|
||||
else if (!usingBeacon)//find a suitable supplypod landing zone in cargobay
|
||||
landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas
|
||||
if (!landingzone)
|
||||
WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.")
|
||||
landingzone = get_area(src)
|
||||
for(var/turf/open/floor/T in landingzone.contents)//uses default landing zone
|
||||
if(is_blocked_turf(T))
|
||||
continue
|
||||
LAZYADD(empty_turfs, T)
|
||||
CHECK_TICK
|
||||
if(empty_turfs && empty_turfs.len)
|
||||
LZ = pick(empty_turfs)
|
||||
if (SO.pack.cost <= SSshuttle.points && LZ)//we need to call the cost check again because of the CHECK_TICK call
|
||||
SSshuttle.points -= SO.pack.cost
|
||||
new /obj/effect/DPtarget(LZ, SO, podID)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
else
|
||||
if(SO.pack.cost * (0.72*MAX_EMAG_ROCKETS) <= SSshuttle.points) // bulk discount :^)
|
||||
landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas
|
||||
landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas //override default landing zone
|
||||
for(var/turf/open/floor/T in landingzone.contents)
|
||||
if(is_blocked_turf(T))
|
||||
continue
|
||||
LAZYADD(empty_turfs, T)
|
||||
CHECK_TICK
|
||||
if(empty_turfs && empty_turfs.len)
|
||||
SSshuttle.points -= SO.pack.cost * (1.2*MAX_EMAG_ROCKETS)
|
||||
SSshuttle.points -= SO.pack.cost * (0.72*MAX_EMAG_ROCKETS)
|
||||
SO.generateRequisition(get_turf(src))
|
||||
for(var/i in 1 to MAX_EMAG_ROCKETS)
|
||||
var/LZ = empty_turfs[rand(empty_turfs.len-1)]
|
||||
var/LZ = pick(empty_turfs)
|
||||
LAZYREMOVE(empty_turfs, LZ)
|
||||
new /obj/effect/DPtarget(LZ, SO, podID)
|
||||
. = TRUE
|
||||
|
||||
+86
-16
@@ -32,11 +32,12 @@
|
||||
if (admin_spawned)
|
||||
for(var/item in contains)
|
||||
var/atom/A = new item(C)
|
||||
A.admin_spawned = TRUE
|
||||
A.flags_1 |= ADMIN_SPAWNED_1
|
||||
else
|
||||
for(var/item in contains)
|
||||
new item(C)
|
||||
|
||||
// If you add something to this list, please group it by type and sort it alphabetically instead of just jamming it in like an animal
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Emergency ///////////////////////////////////////
|
||||
@@ -715,7 +716,7 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////// Engine Construction /////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/supply_pack/engine
|
||||
group = "Engine Construction"
|
||||
@@ -851,7 +852,7 @@
|
||||
crate_name = "supermatter shard crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
dangerous = TRUE
|
||||
|
||||
|
||||
/datum/supply_pack/engine/tesla_coils
|
||||
name = "Tesla Coil Crate"
|
||||
desc = "Whether it's high-voltage executions, creating research points, or just plain old power generation: This pack of four Tesla coils can do it all!"
|
||||
@@ -1406,7 +1407,7 @@
|
||||
/obj/item/vending_refill/cola,
|
||||
/obj/item/vending_refill/cola)
|
||||
crate_name = "soft drinks supply crate"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Organic /////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1430,7 +1431,7 @@
|
||||
name = "Beekeeping Starter Crate"
|
||||
desc = "BEES BEES BEES. Contains three honey frames, a beekeeper suit and helmet, flyswatter, bee house, and, of course, a pure-bred Nanotrasen-Standardized Queen Bee!"
|
||||
cost = 1500
|
||||
contains = list(/obj/structure/beebox,
|
||||
contains = list(/obj/structure/beebox/unwrenched,
|
||||
/obj/item/honey_frame,
|
||||
/obj/item/honey_frame,
|
||||
/obj/item/honey_frame,
|
||||
@@ -1706,14 +1707,6 @@
|
||||
/datum/supply_pack/costumes_toys
|
||||
group = "Costumes & Toys"
|
||||
|
||||
/datum/supply_pack/costumes_toys/autodrobe
|
||||
name = "Autodrobe Supply Crate"
|
||||
desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/vending_refill/autodrobe,
|
||||
/obj/item/vending_refill/autodrobe)
|
||||
crate_name = "autodrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/randomised
|
||||
name = "Collectable Hats Crate"
|
||||
desc = "Flaunt your status with three unique, highly-collectable hats!"
|
||||
@@ -1942,6 +1935,73 @@
|
||||
var/item = pick_n_take(L)
|
||||
new item(C)
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/autodrobe
|
||||
name = "Autodrobe Supply Crate"
|
||||
desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/vending_refill/autodrobe,
|
||||
/obj/item/vending_refill/autodrobe)
|
||||
crate_name = "autodrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/cargo
|
||||
name = "Cargo Department Supply Crate"
|
||||
desc = "This crate contains a refill for the CargoDrobe."
|
||||
cost = 750
|
||||
contains = list(/obj/item/vending_refill/wardrobe/cargo_wardrobe)
|
||||
crate_name = "cargo department supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/engineering
|
||||
name = "Engineering Department Wardrobe Supply Crate"
|
||||
desc = "This crate contains refills for the EngiDrobe and AtmosDrobe."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/vending_refill/wardrobe/engi_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/atmos_wardrobe)
|
||||
crate_name = "engineering department wardrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/general
|
||||
name = "General Wardrobes Supply Crate"
|
||||
desc = "This crate contains refills for the CuraDrobe, BarDrobe, ChefDrobe, JaniDrobe, ChapDrobe."
|
||||
cost = 3750
|
||||
contains = list(/obj/item/vending_refill/wardrobe/curator_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/bar_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/chef_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/jani_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/chap_wardrobe)
|
||||
crate_name = "general wardrobes vendor refills"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/hydroponics
|
||||
name = "Hydrobe Supply Crate"
|
||||
desc = "This crate contains a refill for the Hydrobe."
|
||||
cost = 750
|
||||
contains = list(/obj/item/vending_refill/wardrobe/hydro_wardrobe)
|
||||
crate_name = "hydrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/medical
|
||||
name = "Medical Department Wardrobe Supply Crate"
|
||||
desc = "This crate contains refills for the MediDrobe, ChemDrobe, GeneDrobe, and ViroDrobe."
|
||||
cost = 3000
|
||||
contains = list(/obj/item/vending_refill/wardrobe/medi_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/chem_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/gene_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/viro_wardrobe)
|
||||
crate_name = "medical department wardrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/science
|
||||
name = "Science Department Wardrobe Supply Crate"
|
||||
desc = "This crate contains refills for the SciDrobe and RoboDrobe."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/vending_refill/wardrobe/robo_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/science_wardrobe)
|
||||
crate_name = "science department wardrobe supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/wardrobes/security
|
||||
name = "Security Department Supply Crate"
|
||||
desc = "This crate contains refills for the SecDrobe and LawDrobe."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/vending_refill/wardrobe/sec_wardrobe,
|
||||
/obj/item/vending_refill/wardrobe/law_wardrobe)
|
||||
crate_name = "security department supply crate"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Miscellaneous ///////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -2033,6 +2093,17 @@
|
||||
contains = list(/obj/item/storage/box/fountainpens)
|
||||
crate_type = /obj/structure/closet/crate/wooden
|
||||
|
||||
/datum/supply_pack/misc/funeral
|
||||
name = "Funeral Supply 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 garmets and flowers."
|
||||
cost = 600
|
||||
contains = list(/obj/item/clothing/under/burial,
|
||||
/obj/item/reagent_containers/food/snacks/grown/harebell,
|
||||
/obj/item/reagent_containers/food/snacks/grown/poppy/geranium
|
||||
)
|
||||
crate_name = "coffin"
|
||||
crate_type = /obj/structure/closet/crate/coffin
|
||||
|
||||
/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 holywater, bibles, chaplain robes, and burial garmets."
|
||||
@@ -2042,9 +2113,8 @@
|
||||
/obj/item/storage/book/bible/booze,
|
||||
/obj/item/storage/book/bible/booze,
|
||||
/obj/item/clothing/suit/hooded/chaplain_hoodie,
|
||||
/obj/item/clothing/suit/hooded/chaplain_hoodie,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial)
|
||||
/obj/item/clothing/suit/hooded/chaplain_hoodie
|
||||
)
|
||||
crate_name = "religious supplies crate"
|
||||
|
||||
/datum/supply_pack/misc/toner
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
/obj/item/supplypod_beacon
|
||||
name = "Supply Pod Beacon"
|
||||
desc = "A device that can be linked to an Express Supply Console for precision supply pod deliveries. Alt-click to remove link."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "supplypod_beacon"
|
||||
item_state = "radio"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/obj/machinery/computer/cargo/express/express_console
|
||||
var/linked = FALSE
|
||||
var/ready = FALSE
|
||||
var/launched = FALSE
|
||||
|
||||
/obj/item/supplypod_beacon/proc/update_status(var/consoleStatus)
|
||||
switch(consoleStatus)
|
||||
if (SP_LINKED)
|
||||
linked = TRUE
|
||||
playsound(src,'sound/machines/twobeep.ogg',50,0)
|
||||
if (SP_READY)
|
||||
ready = TRUE
|
||||
if (SP_LAUNCH)
|
||||
launched = TRUE
|
||||
playsound(src,'sound/machines/triple_beep.ogg',50,0)
|
||||
playsound(src,'sound/machines/warning-buzzer.ogg',50,0)
|
||||
addtimer(CALLBACK(src, .proc/endLaunch), 33)//wait 3.3 seconds (time it takes for supplypod to land), then update icon
|
||||
if (SP_UNLINK)
|
||||
linked = FALSE
|
||||
playsound(src,'sound/machines/synth_no.ogg',50,0)
|
||||
if (SP_UNREADY)
|
||||
ready = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/supplypod_beacon/update_icon()
|
||||
cut_overlays()
|
||||
if (launched)
|
||||
add_overlay("sp_green")
|
||||
else if (ready)
|
||||
add_overlay("sp_yellow")
|
||||
else if (linked)
|
||||
add_overlay("sp_orange")
|
||||
|
||||
/obj/item/supplypod_beacon/proc/endLaunch()
|
||||
launched = FALSE
|
||||
update_status()
|
||||
|
||||
/obj/item/supplypod_beacon/examine(user)
|
||||
..()
|
||||
if(!express_console)
|
||||
to_chat(user, "<span class='notice'>[src] is not currently linked to a Express Supply console.</span>")
|
||||
|
||||
/obj/item/supplypod_beacon/Destroy()
|
||||
if(express_console)
|
||||
express_console.beacon = null
|
||||
return ..()
|
||||
|
||||
/obj/item/supplypod_beacon/proc/unlink_console()
|
||||
if(express_console)
|
||||
express_console.beacon = null
|
||||
express_console = null
|
||||
update_status(SP_UNLINK)
|
||||
update_status(SP_UNREADY)
|
||||
|
||||
/obj/item/supplypod_beacon/proc/link_console(obj/machinery/computer/cargo/express/C, mob/living/user)
|
||||
if (C.beacon)//if new console has a beacon, then...
|
||||
C.beacon.unlink_console()//unlink the old beacon from new console
|
||||
if (express_console)//if this beacon has an express console
|
||||
express_console.beacon = null//remove the connection the expressconsole has from beacons
|
||||
express_console = C//set the linked console var to the console
|
||||
express_console.beacon = src//out with the old in with the news
|
||||
update_status(SP_LINKED)
|
||||
if (express_console.usingBeacon)
|
||||
update_status(SP_READY)
|
||||
to_chat(user, "<span class='notice'>[src] linked to [C].</span>")
|
||||
|
||||
/obj/item/supplypod_beacon/AltClick(mob/user)
|
||||
if (!user.canUseTopic(src, !issilicon(user)))
|
||||
return
|
||||
if (express_console)
|
||||
unlink_console()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There is no linked console!</span>")
|
||||
|
||||
/obj/item/supplypod_beacon/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console
|
||||
var/new_beacon_name = stripped_input(user, "What would you like the tag to be?")
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(new_beacon_name)
|
||||
name += " ([tag])"
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
Reference in New Issue
Block a user