Baystation12 merchant port (#3155)

Port of the merchant mechanics from baystation12.
All of the trader, prices and most essential system are done, as well the job datum and the like. Mapping the shuttle, the base and a new dock will be done in a later pr.
Also adds phazon construction and several other items used in this pr.
The chance of the merchant slow being open at round start can be changed via the config, it is 20% by default.
This commit is contained in:
Alberyk
2017-08-04 15:36:04 -03:00
committed by Erki
parent 0f072e15e9
commit b4fa4a8b3a
82 changed files with 4539 additions and 146 deletions
+1 -1
View File
@@ -158,7 +158,7 @@
foundrecord.fields["real_rank"] = real_title
/datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1))
if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1) && SSjobs.ShouldCreateRecords(H.mind.assigned_role))
var/assignment = GetAssignment(H)
var/id = generate_record_id()
+19
View File
@@ -0,0 +1,19 @@
#define TRADER_THIS_TYPE 1
#define TRADER_SUBTYPES_ONLY 2
#define TRADER_ALL 3
#define TRADER_BLACKLIST 4
#define TRADER_BLACKLIST_SUB 8
#define TRADER_BLACKLIST_ALL 12
#define TRADER_WANTED_ONLY 1 //Do they only trade for wanted goods?
#define TRADER_MONEY 2 //Do they only accept money in return for goods.
#define TRADER_GOODS 4 //Do they accept goods in return for other goods.
//Possible response defines for when offering an item for something
#define TRADER_NO_MONEY "trade_no_money"
#define TRADER_NO_GOODS "trade_no_goods"
#define TRADER_NOT_ENOUGH "trade_not_enough"
#define TRADER_NO_BLACKLISTED "trade_blacklist"
#define TRADER_FOUND_UNWANTED "trade_found_unwanted"
#define TRADER_DEFAULT_NAME "Default" //Whether to just generate a name from the premade lists.
+157
View File
@@ -0,0 +1,157 @@
/*
TRADING BEACON
Trading beacons are generic AI driven trading outposts.
They sell generic supplies and ask for generic supplies.
*/
/datum/trader/trading_beacon
name = "AI"
origin = "Trading Beacon"
name_language = LANGUAGE_EAL
trade_flags = TRADER_MONEY|TRADER_GOODS
speech = list(
"hail_generic" = "Greetings, I am MERCHANT, Artifical Intelligence onboard ORIGIN, tasked with trading goods in return for credits and supplies.",
"hail_deny" = "We are sorry, your connection has been blacklisted. Have a nice day.",
"trade_complete" = "Thank you for your patronage.",
"trade_not_enough" = "I'm sorry, your offer is not worth what you are asking for.",
"trade_blacklisted" = "You have offered a blacklisted item. My laws do not allow me to trade for that.",
"how_much" = "ITEM will cost you roughly VALUE credits, or something of equal worth.",
"what_want" = "I have logged need for",
"compliment_deny" = "I'm sorry, I am not allowed to let compliments affect the trade.",
"compliment_accept" = "Thank you, but that will not not change our business interactions.",
"insult_good" = "I do not understand, are we not on good terms?",
"insult_bad" = "I do not understand, are you insulting me?",
"bribe_refusal" = "You have given me money to stay, however, I am a station. I do not leave."
)
possible_wanted_items = list(
/obj/item/device/ = TRADER_SUBTYPES_ONLY,
/obj/item/device/assembly = TRADER_BLACKLIST_ALL,
/obj/item/device/assembly_holder = TRADER_BLACKLIST_ALL,
/obj/item/device/encryptionkey/syndicate = TRADER_BLACKLIST,
/obj/item/device/radio = TRADER_BLACKLIST_ALL,
/obj/item/device/pda = TRADER_BLACKLIST_SUB,
/obj/item/device/uplink = TRADER_BLACKLIST
)
possible_trading_items = list(
/obj/item/weapon/storage/bag = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/storage/bag/cash = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack = TRADER_ALL,
/obj/item/weapon/storage/backpack/cultpack = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack/holding = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack/satchel/withwallet = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack/chameleon = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack/chameleon = TRADER_BLACKLIST,
/obj/item/weapon/storage/backpack/typec = TRADER_BLACKLIST_ALL,
/obj/item/weapon/storage/belt/champion = TRADER_THIS_TYPE,
/obj/item/weapon/storage/briefcase = TRADER_THIS_TYPE,
/obj/item/weapon/storage/fancy = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/storage/laundry_basket = TRADER_THIS_TYPE,
/obj/item/weapon/storage/secure/briefcase = TRADER_THIS_TYPE,
/obj/item/weapon/storage/bag/plants = TRADER_THIS_TYPE,
/obj/item/weapon/storage/bag/ore = TRADER_THIS_TYPE,
/obj/item/weapon/storage/toolbox = TRADER_ALL,
/obj/item/weapon/storage/wallet = TRADER_THIS_TYPE,
/obj/item/weapon/storage/photo_album = TRADER_THIS_TYPE,
/obj/item/clothing/glasses = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/glasses/hud = TRADER_BLACKLIST_ALL,
/obj/item/clothing/glasses/sunglasses/blindfold/tape = TRADER_BLACKLIST,
/obj/item/clothing/glasses/chameleon = TRADER_BLACKLIST,
/obj/item/clothing/glasses/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/glasses/welding/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/glasses/regular/fluff = TRADER_BLACKLIST_ALL
)
insult_drop = 0
compliment_increase = 0
/datum/trader/trading_beacon/New()
..()
origin = "[origin] #[rand(100,999)]"
/datum/trader/trading_beacon/mine
origin = "Mining Beacon"
possible_trading_items = list(
/obj/item/weapon/ore = TRADER_SUBTYPES_ONLY,
/obj/item/stack/material/glass = TRADER_ALL,
/obj/item/stack/material/iron = TRADER_THIS_TYPE,
/obj/item/stack/material/sandstone = TRADER_THIS_TYPE,
/obj/item/stack/material/marble = TRADER_THIS_TYPE,
/obj/item/stack/material/diamond = TRADER_THIS_TYPE,
/obj/item/stack/material/uranium = TRADER_THIS_TYPE,
/obj/item/stack/material/phoron = TRADER_THIS_TYPE,
/obj/item/stack/material/plastic = TRADER_THIS_TYPE,
/obj/item/stack/material/gold = TRADER_THIS_TYPE,
/obj/item/stack/material/silver = TRADER_THIS_TYPE,
/obj/item/stack/material/platinum = TRADER_THIS_TYPE,
/obj/item/stack/material/mhydrogen = TRADER_THIS_TYPE,
/obj/item/stack/material/tritium = TRADER_THIS_TYPE,
/obj/item/stack/material/osmium = TRADER_THIS_TYPE,
/obj/item/stack/material/steel = TRADER_THIS_TYPE,
/obj/item/stack/material/plasteel = TRADER_THIS_TYPE,
/obj/machinery/mining = TRADER_SUBTYPES_ONLY
)
/datum/trader/trading_beacon/manufacturing
origin = "Manufacturing Beacon"
possible_trading_items = list(
/obj/structure/AIcore = TRADER_THIS_TYPE,
/obj/structure/girder = TRADER_THIS_TYPE,
/obj/structure/grille = TRADER_THIS_TYPE,
/obj/structure/mopbucket = TRADER_THIS_TYPE,
/obj/structure/ore_box = TRADER_THIS_TYPE,
/obj/structure/coatrack = TRADER_THIS_TYPE,
/obj/structure/bookcase = TRADER_THIS_TYPE,
/obj/item/bee_pack = TRADER_THIS_TYPE,
/obj/item/weapon/bee_smoker = TRADER_THIS_TYPE,
/obj/item/beehive_assembly = TRADER_THIS_TYPE,
/obj/item/glass_jar = TRADER_THIS_TYPE,
/obj/item/honey_frame = TRADER_THIS_TYPE,
/obj/item/target = TRADER_ALL,
/obj/structure/dispenser = TRADER_SUBTYPES_ONLY,
/obj/structure/filingcabinet = TRADER_THIS_TYPE,
/obj/structure/safe = TRADER_THIS_TYPE,
/obj/structure/plushie = TRADER_SUBTYPES_ONLY,
/obj/structure/sign = TRADER_SUBTYPES_ONLY,
/obj/structure/sign/double = TRADER_BLACKLIST_ALL,
/obj/structure/sign/goldenplaque = TRADER_BLACKLIST_ALL,
/obj/structure/sign/poster = TRADER_BLACKLIST
)
/datum/trader/trading_beacon/medical
origin = "Medical Beacon"
possible_trading_items = list(
/obj/item/weapon/storage/firstaid = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/storage/pill_bottle = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/hypospray = TRADER_ALL,
/obj/item/device/healthanalyzer = TRADER_THIS_TYPE,
/obj/item/stack/medical/bruise_pack = TRADER_THIS_TYPE,
/obj/item/stack/medical/ointment = TRADER_THIS_TYPE,
/obj/item/stack/medical/advanced = TRADER_SUBTYPES_ONLY,
/obj/item/stack/medical/splint = TRADER_THIS_TYPE,
/obj/item/weapon/bonesetter = TRADER_THIS_TYPE,
/obj/item/weapon/retractor = TRADER_THIS_TYPE,
/obj/item/weapon/hemostat = TRADER_THIS_TYPE,
/obj/item/weapon/cautery = TRADER_THIS_TYPE,
/obj/item/weapon/surgicaldrill = TRADER_THIS_TYPE,
/obj/item/weapon/scalpel = TRADER_ALL,
/obj/item/weapon/circular_saw = TRADER_THIS_TYPE,
/obj/item/weapon/bonegel = TRADER_THIS_TYPE,
/obj/item/weapon/FixOVein = TRADER_THIS_TYPE,
/obj/item/weapon/bonesetter = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/syringes = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/syringegun = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/masks = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/gloves = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/cdeathalarm_kit = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/beakers = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = TRADER_THIS_TYPE
)
+169
View File
@@ -0,0 +1,169 @@
/datum/trader/pizzaria
name = "Pizza Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Pizzeria"
possible_origins = list("Papa Joes", "Pizza Ship", "Dominator Pizza", "Little Kaezars", "Pizza Planet", "Cheese Louise")
trade_flags = TRADER_MONEY
possible_wanted_items = list() //They are a pizza shop, not a bargainer.
possible_trading_items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza = TRADER_SUBTYPES_ONLY)
speech = list(
"hail_generic" = "Hello! Welcome to ORIGIN, may I take your order?",
"hail_deny" = "Beeeep... I'm sorry, your connection has been severed.",
"trade_complete" = "Thank you for choosing ORIGIN!",
"trade_no_goods" = "I'm sorry but we only take cash.",
"trade_blacklisted" = "Sir thats... highly illegal.",
"trade_not_enough" = "Uhh... that's not enough money for pizza.",
"how_much" = "That pizza will cost you VALUE credits.",
"compliment_deny" = "That's a bit forward, don't you think?",
"compliment_accept" = "Thanks, sir! You're very nice!",
"insult_good" = "Please stop that, sir.",
"insult_bad" = "Sir, just because I'm contractually obligated to keep you on the line for a minute doesn't mean I have to take this.",
"bribe_refusal" = "Uh... thanks for the cash, sir. As long as you're in the area, we'll be here..."
)
/datum/trader/pizzaria/trade(var/list/offers, var/num, var/turf/location)
. = ..()
if(.)
var/atom/movable/M = .
var/obj/item/pizzabox/box = new(location)
M.forceMove(box)
box.pizza = M
box.boxtag = "A special order from [origin]"
/datum/trader/ship/chinese
name = "Chinese Restaurant"
name_language = TRADER_DEFAULT_NAME
origin = "Captain Panda Bistro"
trade_flags = TRADER_MONEY
possible_wanted_items = list()
possible_trading_items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeykabob = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/ricepudding = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/soydope = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/wingfangchu = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/bibimbap = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/lomein = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/friedrice = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/pisanggoreng = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/chickenmomo = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/veggiemomo = TRADER_THIS_TYPE
)
var/list/fortunes = list(
"Today it's up to you to create the peacefulness you long for.",
"If you refuse to accept anything but the best, you very often get it.",
"A smile is your passport into the hearts of others.",
"Hard work pays off in the future, laziness pays off now.",
"Change can hurt, but it leads a path to something better.",
"Hidden in a valley beside an open stream- This will be the type of place where you will find your dream.",
"Never give up. You're not a failure if you don't give up.",
"Love can last a lifetime, if you want it to.",
"The love of your life is stepping into your planet this summer.",
"Your ability for accomplishment will follow with success."
)
speech = list(
"hail_generic" = "There are two things constant in life, death and Chinese food. How may I help you?",
"hail_deny" = "We do not take orders from rude customers.",
"trade_complete" = "Thank you sir for your patronage.",
"trade_blacklist" = "No, that is very odd. Why would you trade that away?",
"trade_no_goods" = "I only accept money transfers.",
"trade_not_enough" = "No, I am sorry that is not possible. I need to make a living.",
"how_much" = "I give you ITEM for VALUE credits. No more, no less.",
"compliment_deny" = "That was an odd thing to say, you are very odd.",
"compliment_accept" = "Good philosophy, see good in bad, I like.",
"insult_good" = "As a man said long ago, \"When anger rises, think of the consequences.\" Think on that.",
"insult_bad" = "I do not need to take this from you.",
"bribe_refusal" = "Hm... I'll think about it.",
"bribe_accept" = "Oh yes! I think I'll stay a few more minutes, then."
)
/datum/trader/ship/chinese/trade(var/list/offers, var/num, var/turf/location)
. = ..()
if(.)
var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/cookie = new(location)
var/obj/item/weapon/paper/paper = new(cookie)
cookie.trash = paper
paper.name = "Fortune"
paper.info = pick(fortunes)
/datum/trader/grocery
name = "Grocer"
name_language = TRADER_DEFAULT_NAME
possible_origins = list("HyTee", "Kreugars", "Spaceway", "Privaxs", "FutureValue")
trade_flags = TRADER_MONEY
possible_trading_items = list(
/obj/item/weapon/reagent_containers/food/snacks = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/food/drinks/cans = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/food/drinks/bottle = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/fruit_slice = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/grown = TRADER_BLACKLIST_ALL,
/obj/item/weapon/reagent_containers/food/snacks/human = TRADER_BLACKLIST_ALL,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/meat/human = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/variable = TRADER_BLACKLIST_ALL
)
speech = list(
"hail_generic" = "Hello, welcome to ORIGIN, grocery store of the future!",
"hail_deny" = "I'm sorry, we've blacklisted your communications due to rude behavior.",
"trade_complete" = "Thank you for shopping at ORIGIN!",
"trade_blacklist" = "I... wow that's... no, sir. No.",
"trade_no_goods" = "ORIGIN only accepts cash, sir.",
"trade_not_enough" = "That is not enough money, sir.",
"how_much" = "Sir, that'll cost you VALUE credits. Will that be all?",
"compliment_deny" = "Sir, this is a professional environment. Please don't make me get my manager.",
"compliment_accept" = "Thank you, sir!",
"insult_good" = "Sir, please do not make a scene.",
"insult_bad" = "Sir, I WILL get my manager if you don't calm down.",
"bribe_refusal" = "Of course sir! ORIGIN is always here for you!"
)
/datum/trader/bakery
name = "Pastry Chef"
name_language = TRADER_DEFAULT_NAME
origin = "Bakery"
possible_origins = list("Cakes By Design", "Corner Bakery Local", "My Favorite Cake & Pastry Cafe", "Mama Joes Bakery", "Sprinkles and Fun")
speech = list(
"hail_generic" = "Hello, welcome to ORIGIN, we serve baked goods, including pies and cakes and anything sweet!",
"hail_deny" = "Our food is a privelege, not a right. Goodbye.",
"trade_complete" = "Thank you for your purchase! Come again if you're hungry for more!",
"trade_blacklist" = "We only accept money. Not... that.",
"trade_no_goods" = "Cash for Cakes! That's our business!",
"trade_not_enough" = "Our dishes are much more expensive than that, sir.",
"how_much" = "That lovely dish will cost you VALUE credits.",
"compliment_deny" = "Oh wow, how nice of you...",
"compliment_accept" = "You're almost as sweet as my pies!",
"insult_good" = "My pie are NOT knockoffs!",
"insult_bad" = "Well, aren't you a sour apple?",
"bribe_refusal" = "Oh ho ho! I'd never think of taking ORIGIN on the road!"
)
possible_trading_items = list(
/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/limecakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice/filled = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/sliceable = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza = TRADER_BLACKLIST_ALL,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake = TRADER_BLACKLIST,
/obj/item/weapon/reagent_containers/food/snacks/pie = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/applepie = TRADER_THIS_TYPE
)
+367
View File
@@ -0,0 +1,367 @@
/datum/trader/ship/toyshop
name = "Toy Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Toy Shop"
trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY
possible_origins = list("Toys R Ours", "LEGS GO", "Kay-Cee Toys", "Build-a-Cat", "Magic Box", "The Positronic's Dungeon and Baseball Card Shop")
speech = list(
"hail_generic" = "Uuhh... hello? Welcome to ORIGIN, I hope you have a uh.... good shopping trip.",
"hail_deny" = "Nah, you're not allowed here. At all",
"trade_complete" = "Thanks for shopping... here.... at ORIGIN.",
"trade_blacklist" = "Uuuuuuuuuuuuuuuuuuuh.... no.",
"trade_found_unwanted" = "Nah! That's not what I'm looking for. Something rarer.",
"trade_not_enough" = "Just cause they're made of cardboard doesn't mean they don't cost money...",
"how_much" = "Uuuuuuuh... I'm thinking like... VALUE. Right? Or something rare that complements my interest.",
"what_want" = "Uuuuum..... I guess I want",
"compliment_deny" = "Ha! Very funny! You should write your own television show.",
"compliment_accept" = "Why yes, I do work out.",
"insult_good" = "Well well well. Guess we learned who was the troll here.",
"insult_bad" = "I've already written a nasty spacebook post in my mind about you.",
"bribe_refusal" = "Nah. I need to get moving as soon as uh... possible.",
"bribe_accept" = "You know what, I wasn't doing anything for TIME minutes anyways."
)
possible_wanted_items = list(
/obj/item/toy/figure = TRADER_THIS_TYPE,
/obj/item/toy/figure/ert = TRADER_THIS_TYPE,
/obj/item/toy/prize/honk = TRADER_THIS_TYPE
)
possible_trading_items = list(
/obj/item/toy/prize = TRADER_SUBTYPES_ONLY,
/obj/item/toy/prize/honk = TRADER_BLACKLIST,
/obj/item/toy/figure = TRADER_SUBTYPES_ONLY,
/obj/item/toy/figure/ert = TRADER_BLACKLIST,
/obj/item/toy/plushie = TRADER_SUBTYPES_ONLY,
/obj/item/toy/katana = TRADER_THIS_TYPE,
/obj/item/toy/sword = TRADER_THIS_TYPE,
/obj/item/toy/bosunwhistle = TRADER_THIS_TYPE,
/obj/item/weapon/board = TRADER_THIS_TYPE,
/obj/item/weapon/deck = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/pack = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/dice = TRADER_ALL
)
/datum/trader/ship/electronics
name = "Electronic Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Electronic Shop"
possible_origins = list("Best Sale", "Overstore", "Oldegg", "Circuit Citadel")
speech = list(
"hail_generic" = "Hello sir! Welcome to ORIGIN, I hope you find what you are looking for.",
"hail_deny" = "Your call has been disconnected.",
"trade_complete" = "Thank you for shopping at ORIGIN, would you like to put a warranty on that?",
"trade_blacklist" = "Sir, this is a /electronics/ store.",
"trade_no_goods" = "As much as I'd love to buy that from you, I'm not.",
"trade_not_enough" = "Your offer isn't adequete to the item you've selected, sir.",
"how_much" = "Your total comes out to VALUE credits.",
"compliment_deny" = "Hahaha! Yeah... funny...",
"compliment_accept" = "That's very nice of you!",
"insult_good" = "That was uncalled for, sir. Don't make me get my manager.",
"insult_bad" = "Sir, I am allowed to hang up the phone if you continue, sir.",
"bribe_refusal" = "Sorry, sir, but I can't really do that.",
"bribe_accept" = "Why not! Glad to be here for a few more minutes."
)
possible_trading_items = list(
/obj/item/weapon/computer_hardware/battery_module = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/circuitboard = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/circuitboard/telecomms = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/unary_atmos = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/arcade = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/odysseus = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/honker = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/durand = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/gygax = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/ripley = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/mecha/phazon = TRADER_BLACKLIST,
/obj/item/weapon/circuitboard/broken = TRADER_BLACKLIST,
/obj/item/stack/cable_coil = TRADER_SUBTYPES_ONLY,
/obj/item/stack/cable_coil/cyborg = TRADER_BLACKLIST,
/obj/item/stack/cable_coil/random = TRADER_BLACKLIST,
/obj/item/stack/cable_coil/cut = TRADER_BLACKLIST,
/obj/item/weapon/airalarm_electronics = TRADER_THIS_TYPE,
/obj/item/weapon/airlock_electronics = TRADER_ALL,
/obj/item/weapon/cell = TRADER_THIS_TYPE,
/obj/item/weapon/cell/crap = TRADER_THIS_TYPE,
/obj/item/weapon/cell/high = TRADER_THIS_TYPE,
/obj/item/weapon/cell/super = TRADER_THIS_TYPE,
/obj/item/weapon/cell/hyper = TRADER_THIS_TYPE,
/obj/item/weapon/module = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/tracker_electronics = TRADER_THIS_TYPE
)
/* Clothing stores: each a different type. A hat/glove store, a shoe store, and a jumpsuit store. */
/datum/trader/ship/clothingshop
name = "Clothing Store Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Clothing Store"
possible_origins = list("Space Eagle", "Banana Democracy", "Forever 22", "Textiles Factory Warehouse Outlet", "Blocks Brothers")
speech = list(
"hail_generic" = "Hello sir! Welcome to ORIGIN!",
"hail_Vox" = "Well hello sir! I don't believe we have any clothes that fit you... but you can still look!",
"hail_deny" = "We do not trade with rude customers. Consider yourself blacklisted.",
"trade_complete" = "Thank you for shopping at ORIGIN, remember: you can return after the first day if you still have the tags on!",
"trade_blacklist" = "Hm, how about no?",
"trade_no_goods" = "We don't buy, sir. Only sell.",
"trade_not_enough" = "Sorry, ORIGIN policy to not accept trades below our marked prices.",
"how_much" = "Your total comes out to VALUE credits.",
"compliment_deny" = "Excuse me?",
"compliment_accept" = "Aw, you're so nice!",
"insult_good" = "Sir.",
"insult_bad" = "Wow. I don't have to take this.",
"bribe_refusal" = "ORIGIN policy clearly states we cannot stay for more than the designated time.",
"bribe_accept" = "Hm.... sure! We'll have a few minutes of 'engine troubles'."
)
possible_trading_items = list(
/obj/item/clothing/under = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/under/acj = TRADER_BLACKLIST,
/obj/item/clothing/under/chameleon = TRADER_BLACKLIST,
/obj/item/clothing/under/color = TRADER_BLACKLIST,
/obj/item/clothing/under/dress = TRADER_BLACKLIST,
/obj/item/clothing/under/ert = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/gimmick = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/lawyer = TRADER_BLACKLIST,
/obj/item/clothing/under/pj = TRADER_BLACKLIST,
/obj/item/clothing/under/rank = TRADER_BLACKLIST,
/obj/item/clothing/under/shorts = TRADER_BLACKLIST,
/obj/item/clothing/under/stripper = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/swimsuit = TRADER_BLACKLIST,
/obj/item/clothing/under/syndicate = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/tactical = TRADER_BLACKLIST,
/obj/item/clothing/under/vox = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/wedding = TRADER_BLACKLIST,
/obj/item/clothing/under/punpun = TRADER_BLACKLIST,
/obj/item/clothing/under/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/under/dress/fluff = TRADER_BLACKLIST_ALL
)
/datum/trader/ship/clothingshop/shoes
possible_origins = list("Foot Safe", "Paysmall", "Popular Footwear", "Grimbly's Shoes", "Right Steps")
possible_trading_items = list(
/obj/item/clothing/shoes = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/shoes/chameleon = TRADER_BLACKLIST,
/obj/item/clothing/shoes/combat = TRADER_BLACKLIST,
/obj/item/clothing/shoes/clown_shoes = TRADER_BLACKLIST,
/obj/item/clothing/shoes/cult = TRADER_BLACKLIST,
/obj/item/clothing/shoes/cyborg = TRADER_BLACKLIST,
/obj/item/clothing/shoes/lightrig = TRADER_BLACKLIST_ALL,
/obj/item/clothing/shoes/magboots = TRADER_BLACKLIST_ALL,
/obj/item/clothing/shoes/swat = TRADER_BLACKLIST,
/obj/item/clothing/shoes/syndigaloshes = TRADER_BLACKLIST,
/obj/item/clothing/shoes/jackboots/unathi/fluff = TRADER_BLACKLIST_ALL
)
/datum/trader/ship/clothingshop/hatglovesaccessories
possible_origins = list("Baldie's Hats and Accessories", "The Right Fit", "Like a Glove", "Space Fashion")
possible_trading_items = list(
/obj/item/clothing/accessory = TRADER_ALL,
/obj/item/clothing/accessory/badge = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/holster = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/medal = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/storage = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/armband/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/gloves/lightrig = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/rig = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/chameleon = TRADER_BLACKLIST,
/obj/item/clothing/gloves/force = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/swat/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/black/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/gloves/yellow/typec = TRADER_BLACKLIST,
/obj/item/clothing/head = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/head/beret/centcom = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/bio_hood = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/bomb_hood = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/caphat = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/centhat = TRADER_BLACKLIST,
/obj/item/clothing/head/chameleon = TRADER_BLACKLIST,
/obj/item/clothing/head/collectable = TRADER_BLACKLIST,
/obj/item/clothing/head/culthood = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/helmet = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/lightrig = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/radiation = TRADER_BLACKLIST,
/obj/item/clothing/head/tajaran = TRADER_BLACKLIST,
/obj/item/clothing/head/welding = TRADER_BLACKLIST,
/obj/item/clothing/head/soft/sec/corp/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/det/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/winterhood = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/hairflower/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/head/beret/engineering/fluff = TRADER_BLACKLIST_ALL
)
/*
Sells devices, odds and ends, and medical stuff
*/
/datum/trader/devices
name = "Drugstore Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Drugstore"
possible_origins = list("Buy 'n Save", "Drug Carnival", "C&B", "Fentles", "Dr. Goods", "Beevees")
possible_trading_items = list(
/obj/item/device/flashlight = TRADER_ALL,
/obj/item/device/kit/paint = TRADER_SUBTYPES_ONLY,
/obj/item/device/kit/paint/ripley/fluff = TRADER_BLACKLIST_ALL,
/obj/item/weapon/aicard = TRADER_THIS_TYPE,
/obj/item/device/binoculars = TRADER_THIS_TYPE,
/obj/item/device/flash = TRADER_THIS_TYPE,
/obj/item/device/floor_painter = TRADER_THIS_TYPE,
/obj/item/device/multitool = TRADER_THIS_TYPE,
/obj/item/device/lightreplacer = TRADER_THIS_TYPE,
/obj/item/device/megaphone = TRADER_THIS_TYPE,
/obj/item/device/paicard = TRADER_THIS_TYPE,
/obj/item/device/pipe_painter = TRADER_THIS_TYPE,
/obj/item/device/healthanalyzer = TRADER_THIS_TYPE,
/obj/item/device/analyzer = TRADER_ALL,
/obj/item/device/mass_spectrometer = TRADER_ALL,
/obj/item/device/reagent_scanner = TRADER_ALL,
/obj/item/device/slime_scanner = TRADER_THIS_TYPE,
/obj/item/device/suit_cooling_unit = TRADER_THIS_TYPE,
/obj/item/device/t_scanner = TRADER_THIS_TYPE,
/obj/item/device/taperecorder = TRADER_THIS_TYPE,
/obj/item/device/batterer = TRADER_THIS_TYPE,
/obj/item/device/violin = TRADER_THIS_TYPE,
/obj/item/device/hailer = TRADER_THIS_TYPE,
/obj/item/device/uv_light = TRADER_THIS_TYPE,
/obj/item/device/mmi = TRADER_ALL,
/obj/item/device/robotanalyzer = TRADER_THIS_TYPE,
/obj/item/device/toner = TRADER_THIS_TYPE,
/obj/item/device/camera_film = TRADER_THIS_TYPE,
/obj/item/device/camera = TRADER_THIS_TYPE,
/obj/item/device/destTagger = TRADER_THIS_TYPE,
/obj/item/device/gps = TRADER_THIS_TYPE,
/obj/item/device/measuring_tape = TRADER_THIS_TYPE,
/obj/item/device/ano_scanner = TRADER_THIS_TYPE,
/obj/item/device/core_sampler = TRADER_THIS_TYPE,
/obj/item/device/depth_scanner = TRADER_THIS_TYPE,
/obj/item/device/beacon_locator = TRADER_THIS_TYPE,
/obj/item/device/antibody_scanner = TRADER_THIS_TYPE,
/obj/item/stack/medical/advanced = TRADER_BLACKLIST
)
speech = list(
"hail_generic" = "Hello hello! Bits and bobs and everything in between, I hope you find what you're looking for!",
"hail_silicon" = "Ah! Hello, robot. We only sell things that hm.... people can hold in their hands, unfortunately. You are still allowed to buy, though!",
"hail_deny" = "Oh no. I don't want to deal with YOU.",
"trade_complete" = "Thank you! Now remember, there isn't any return policy here, so be careful with that!",
"trade_blacklist" = "Hm. Well that would be illegal, so no.",
"trade_no_goods" = "I'm sorry, I only sell goods.",
"trade_not_enough" = "Gotta pay more than that to get that!",
"how_much" = "Well... I bought it for a lot, but I'll give it to you for VALUE.",
"compliment_deny" = "Uh... did you say something?",
"compliment_accept" = "Mhm! I can agree to that!",
"insult_good" = "Wow, where was that coming from?",
"insult_bad" = "Don't make me blacklist your connection.",
"bribe_refusal" = "Well, as much as I'd love to say 'yes', you realize I operate on a station, correct?"
)
/datum/trader/ship/robots
name = "Robot Seller"
name_language = TRADER_DEFAULT_NAME
origin = "Robot Store"
possible_origins = list("AI for the Straight Guy", "Mechanical Buddies", "Bot Chop Shop", "Omni Consumer Projects")
possible_trading_items = list(
/obj/item/weapon/secbot_assembly/ed209_assembly = TRADER_THIS_TYPE,
/obj/item/weapon/toolbox_tiles = TRADER_THIS_TYPE,
/obj/item/weapon/toolbox_tiles_sensor = TRADER_THIS_TYPE,
/obj/item/weapon/secbot_assembly = TRADER_ALL,
/obj/item/weapon/farmbot_arm_assembly = TRADER_THIS_TYPE,
/obj/item/weapon/firstaid_arm_assembly = TRADER_THIS_TYPE,
/obj/item/weapon/bucket_sensor = TRADER_THIS_TYPE,
/obj/item/device/paicard = TRADER_THIS_TYPE,
/obj/item/weapon/aicard = TRADER_THIS_TYPE,
/mob/living/bot = TRADER_SUBTYPES_ONLY
)
speech = list(
"hail_generic" = "Welcome to ORIGIN! Let me walk you through our fine robotic selection!",
"hail_silicon" = "Welcome to ORIGIN! Le-well, you're a synth! Well, your money is good anyways, welcome welcome!",
"hail_deny" = "ORIGIN no longer wants to speak to you.",
"trade_complete" = "I hope you enjoy your new robot!",
"trade_blacklist" = "I work with robots, sir. Not that.",
"trade_no_goods" = "You gotta buy the robots, sir. I don't do trades.",
"trade_not_enough" = "You're coming up short on cash.",
"how_much" = "My fine selection of robots will cost you VALUE!",
"compliment_deny" = "Well, I almost believed that.",
"compliment_accept" = "Thank you! My craftsmanship is my life.",
"insult_good" = "Uncalled for.... uncalled for.",
"insult_bad" = "I've programmed AIs better at insulting than you!",
"bribe_refusal" = "I've got too many customers waiting in other sectors, sorry.",
"bribe_accept" = "Hm. Don't keep me waiting too long, though."
)
/datum/trader/ship/mining
name = "Mining Supply Seller"
name_language = TRADER_DEFAULT_NAME
origin = "Mining Supply Store"
possible_origins = list("Astrodia", "Slag. Co.", "Explosive Drills S.A.", "The Shaft Shop")
possible_wanted_items = list(
/obj/item/weapon/ore = TRADER_SUBTYPES_ONLY,
/obj/item/stack/material/glass = TRADER_ALL,
/obj/item/stack/material/iron = TRADER_THIS_TYPE,
/obj/item/stack/material/sandstone = TRADER_THIS_TYPE,
/obj/item/stack/material/marble = TRADER_THIS_TYPE,
/obj/item/stack/material/diamond = TRADER_THIS_TYPE,
/obj/item/stack/material/uranium = TRADER_THIS_TYPE,
/obj/item/stack/material/phoron = TRADER_THIS_TYPE,
/obj/item/stack/material/plastic = TRADER_THIS_TYPE,
/obj/item/stack/material/gold = TRADER_THIS_TYPE,
/obj/item/stack/material/silver = TRADER_THIS_TYPE,
/obj/item/stack/material/platinum = TRADER_THIS_TYPE,
/obj/item/stack/material/mhydrogen = TRADER_THIS_TYPE,
/obj/item/stack/material/tritium = TRADER_THIS_TYPE,
/obj/item/stack/material/osmium = TRADER_THIS_TYPE,
/obj/item/stack/material/steel = TRADER_THIS_TYPE,
/obj/item/stack/material/plasteel = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/coin = TRADER_SUBTYPES_ONLY
)
possible_trading_items = list(
/obj/item/weapon/pickaxe = TRADER_ALL,
/obj/item/weapon/pickaxe/offhand = TRADER_BLACKLIST,
/obj/item/weapon/pickaxe/borgdrill = TRADER_BLACKLIST,
/obj/item/weapon/shovel = TRADER_THIS_TYPE,
/obj/item/stack/flag = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/rrf_ammo = TRADER_THIS_TYPE,
/obj/item/weapon/rrf = TRADER_THIS_TYPE,
/obj/item/weapon/ore_radar = TRADER_THIS_TYPE,
/obj/item/device/wormhole_jaunter = TRADER_THIS_TYPE,
/obj/item/weapon/resonator = TRADER_ALL,
/obj/item/weapon/autochisel = TRADER_ALL,
/obj/structure/sculpting_block = TRADER_ALL,
/obj/item/weapon/plastique/seismic = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/kinetic_accelerator = TRADER_THIS_TYPE,
/obj/item/borg/upgrade/modkit = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/gun/energy/plasmacutter = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/space/void/mining = TRADER_THIS_TYPE,
/obj/item/clothing/suit/space/void/mining = TRADER_THIS_TYPE,
/obj/machinery/mining/drill = TRADER_THIS_TYPE,
/obj/machinery/mining/brace = TRADER_THIS_TYPE,
/obj/mecha/working/ripley = TRADER_THIS_TYPE
)
speech = list(
"hail_generic" = "Welcome to ORIGIN! Let me walk you through our finest mining tools!",
"hail_deny" = "ORIGIN no longer wants to speak to you.",
"trade_complete" = "Good mining and avoid the holes!",
"trade_blacklist" = "I don't want this thing.",
"trade_no_goods" = "Only cash here!",
"trade_not_enough" = "I need more than that, son.",
"how_much" = "This damn good tool will be VALUE!",
"compliment_deny" = "Are you here to buy or chat?",
"compliment_accept" = "You are right, you won't find better tools anywhere else!",
"insult_good" = "What did you just damn say to me?",
"insult_bad" = "If you are not going to buy anything, get out!",
"bribe_refusal" = "No way, I have more people waiting to buy my tools!",
"bribe_accept" = "Alright, alright, they can wait then."
)
+215
View File
@@ -0,0 +1,215 @@
/datum/trader/ship/pet_shop
name = "Pet Shop Owner"
name_language = LANGUAGE_SKRELLIAN
origin = "Pet Shop"
trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY
possible_origins = list("Paws-Out", "Pets-R-Smart", "Tentacle Companions", "Xeno-Pets and Assorted Goods", "Barks and Drools")
speech = list(
"hail_generic" = "Welcome to my xeno-pet shop! Here you will find many wonderful companions. Some a bit more... aggressive than others. But companions none the less. I also buy pets, or trade them.",
"hail_Skrell" = "Ah! A fellow Skrell. How wonderful, I may have a few pets imported from back home. Take a look.",
"hail_deny" = "I no longer wish to speak to you.",
"trade_complete" = "Remember to give them attention and food. They are living beings, and you should treat them like so.",
"trade_blacklist" = "Legally I can't do that. Morally, I refuse to do that.",
"trade_found_unwanted" = "I only want animals. I don't need food, shiny things, I'm looking for specific ones at that. Ones I already have the cage and food for.",
"trade_not_enough" = "I'd give you the animal for free, but I need the money to feed the others. So you must pay in full.",
"how_much" = "This is a fine specimen, I believe it will cost you VALUE credits.",
"what_want" = "I have the facilities currently to support",
"compliment_deny" = "That was almost charming.",
"compliment_accept" = "Thank you. I needed that.",
"insult_good" = "I ask you to stop. We can be peaceful. I know we can.",
"insult_bad" = "My interactions with you are becoming less than fruitful.",
"bribe_refusal" = "I'm not going to do that. I have places to be.",
"bribe_accept" = "Hm. It'll be good for the animals, so sure."
)
possible_wanted_items = list(
/mob/living/simple_animal/corgi = TRADER_THIS_TYPE,
/mob/living/simple_animal/cat = TRADER_THIS_TYPE,
/mob/living/simple_animal/crab = TRADER_THIS_TYPE,
/mob/living/simple_animal/lizard = TRADER_THIS_TYPE,
/mob/living/simple_animal/mouse = TRADER_THIS_TYPE,
/mob/living/simple_animal/mushroom = TRADER_THIS_TYPE,
/mob/living/simple_animal/parrot = TRADER_THIS_TYPE,
/mob/living/simple_animal/tindalos = TRADER_THIS_TYPE,
/mob/living/simple_animal/tomato = TRADER_THIS_TYPE,
/mob/living/simple_animal/cow = TRADER_THIS_TYPE,
/mob/living/simple_animal/chick = TRADER_THIS_TYPE,
/mob/living/simple_animal/chicken = TRADER_THIS_TYPE,
/mob/living/simple_animal/yithian = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/diyaab = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/shantak = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/samak = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/retaliate/goat = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/carp = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/commanded/dog = TRADER_ALL,
/mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/biglizard = TRADER_THIS_TYPE
)
possible_trading_items = list(
/mob/living/simple_animal/corgi = TRADER_THIS_TYPE,
/mob/living/simple_animal/cat = TRADER_THIS_TYPE,
/mob/living/simple_animal/crab = TRADER_THIS_TYPE,
/mob/living/simple_animal/lizard = TRADER_THIS_TYPE,
/mob/living/simple_animal/mouse = TRADER_THIS_TYPE,
/mob/living/simple_animal/mushroom = TRADER_THIS_TYPE,
/mob/living/simple_animal/parrot = TRADER_THIS_TYPE,
/mob/living/simple_animal/tindalos = TRADER_THIS_TYPE,
/mob/living/simple_animal/tomato = TRADER_THIS_TYPE,
/mob/living/simple_animal/cow = TRADER_THIS_TYPE,
/mob/living/simple_animal/chick = TRADER_THIS_TYPE,
/mob/living/simple_animal/chicken = TRADER_THIS_TYPE,
/mob/living/simple_animal/yithian = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/diyaab = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/shantak = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/samak = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/retaliate/goat = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/carp = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/commanded/dog = TRADER_ALL,
/mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/biglizard = TRADER_THIS_TYPE,
/obj/item/device/dociler = TRADER_THIS_TYPE
)
/datum/trader/ship/prank_shop
name = "Prank Shop Owner"
name_language = LANGUAGE_ROOTSONG
origin = "Prank Shop"
compliment_increase = 0
insult_drop = 0
possible_origins = list("Yacks and Yucks Shop", "The Shop From Which I Sell Humorous Items", "The Prank Gestalt", "The Clown's Armory")
speech = list(
"hail_generic" = "We welcome you to our shop of humorous items, we invite you to partake in the experience of being pranked, and pranking someone else.",
"hail_Diona" = "Welcome, other gestalt. We invite you to learn of our experiences, and teach us of your own.",
"hail_deny" = "We cannot do business with you. We are sorry.",
"trade_complete" = "We thank you for purchasing something. We enjoyed the experience of you doing so and we hope to learn from it.",
"trade_blacklist" = "We are not allowed to do such. We are sorry.",
"trade_not_enough" = "We have sufficiently experienced giving away goods for free. We wish to experience getting money in return.",
"how_much" = "We believe that is worth VALUE credits.",
"what_want" = "We wish only for the experiences you give us, in all else we want",
"compliment_deny" = "You are attempting to compliment us.",
"compliment_accept" = "You are attempting to compliment us.",
"insult_good" = "You are attempting to insult us, correct?",
"insult_bad" = "We do not understand.",
"bribe_refusal" = "We are sorry but we cannot accept.",
"bribe_accept" = "We are happy to say that we accept this bribe."
)
possible_trading_items = list(
/obj/item/clothing/mask/gas/clown_hat = TRADER_THIS_TYPE,
/obj/item/clothing/mask/gas/sexyclown = TRADER_THIS_TYPE,
/obj/item/clothing/shoes/clown_shoes = TRADER_THIS_TYPE,
/obj/item/clothing/under/rank/clown = TRADER_THIS_TYPE,
/obj/item/device/pda/clown = TRADER_THIS_TYPE,
/obj/item/weapon/cartridge/clown = TRADER_THIS_TYPE,
/obj/item/weapon/stamp/clown = TRADER_THIS_TYPE,
/obj/item/weapon/storage/backpack/clown = TRADER_THIS_TYPE,
/obj/item/weapon/bananapeel = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/pie = TRADER_THIS_TYPE,
/obj/item/weapon/bikehorn = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/spray/waterflower = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/revolver/capgun = TRADER_THIS_TYPE,
/obj/item/clothing/mask/fakemoustache = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/wand/toy = TRADER_THIS_TYPE,
/obj/item/weapon/grenade/spawnergrenade/fake_carp = TRADER_THIS_TYPE,
/obj/item/weapon/grenade/spawnergrenade/singularity/toy = TRADER_THIS_TYPE,
/obj/item/weapon/grenade/fake = TRADER_THIS_TYPE,
/obj/item/weapon/gun/launcher/pneumatic/small = TRADER_THIS_TYPE,
/obj/item/clothing/mask/gas/monkeymask = TRADER_THIS_TYPE,
/obj/item/clothing/suit/monkeysuit = TRADER_THIS_TYPE,
/obj/item/clothing/mask/luchador = TRADER_ALL
)
/datum/trader/ship/replica_shop
name = "Replica Store Owner"
name_language = TRADER_DEFAULT_NAME
origin = "Replica Store"
possible_origins = list("Ye-Old Armory", "Knights and Knaves", "The Blacksmith", "Historical Human Apparel and Items", "The Pointy End")
speech = list(
"hail_generic" = "Welcome, welcome! You look like a man who appreciates human history. Come in, and learn! Maybe even.... buy?",
"hail_Unathi" = "Ah, you look like a lizard who knows his way around martial combat. Come in! Our stuff may not be as high quality as you are used to, but feel free to look around.",
"hail_deny" = "A man who does not appreciate history does not appreciate me. Goodbye.",
"trade_complete" = "Now remember, these may be replicas, but they are still a bit sharp!",
"trade_blacklist" = "No, I don't deal in that.",
"trade_not_enough" = "Hm. Well, I need more money than that.",
"how_much" = "This fine piece of craftsmanship costs about VALUE credits.",
"what_want" = "I want",
"compliment_deny" = "Oh ho ho! Aren't you quite the jester.",
"compliment_accept" = "Hard to tell, isn't it? I make them all myself.",
"insult_good" = "They aren't JUST replicas!",
"insult_bad" = "Well, I'll never!",
"bribe_refusal" = "Well. I'd love to stay, but I've got an Unathi client somewhere else, and they are not known for patience.",
"bribe_accept" = "Sure, I'll stay a bit longer. Just for you, though."
)
possible_trading_items = list(
/obj/item/clothing/head/wizard/magus = TRADER_THIS_TYPE,
/obj/item/weapon/shield/buckler = TRADER_THIS_TYPE,
/obj/item/clothing/head/redcoat = TRADER_THIS_TYPE,
/obj/item/clothing/head/powdered_wig = TRADER_THIS_TYPE,
/obj/item/clothing/head/hasturhood = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/gladiator = TRADER_THIS_TYPE,
/obj/item/clothing/head/plaguedoctorhat = TRADER_THIS_TYPE,
/obj/item/clothing/glasses/monocle = TRADER_THIS_TYPE,
/obj/item/clothing/mask/smokable/pipe = TRADER_THIS_TYPE,
/obj/item/clothing/mask/gas/plaguedoctor = TRADER_THIS_TYPE,
/obj/item/clothing/suit/hastur = TRADER_THIS_TYPE,
/obj/item/clothing/suit/imperium_monk = TRADER_THIS_TYPE,
/obj/item/clothing/suit/judgerobe = TRADER_THIS_TYPE,
/obj/item/clothing/suit/wizrobe/magusred = TRADER_THIS_TYPE,
/obj/item/clothing/suit/wizrobe/magusblue = TRADER_THIS_TYPE,
/obj/item/clothing/under/gladiator = TRADER_THIS_TYPE,
/obj/item/clothing/under/kilt = TRADER_THIS_TYPE,
/obj/item/clothing/under/redcoat = TRADER_THIS_TYPE,
/obj/item/clothing/under/soviet = TRADER_THIS_TYPE,
/obj/item/weapon/material/harpoon = TRADER_THIS_TYPE,
/obj/item/weapon/material/sword = TRADER_ALL,
/obj/item/weapon/material/scythe = TRADER_THIS_TYPE,
/obj/item/weapon/material/star = TRADER_THIS_TYPE,
/obj/item/weapon/material/twohanded/baseballbat = TRADER_THIS_TYPE
)
/datum/trader/ship/hardsuit
name = "Azazi Guild Seller"
name_language = LANGUAGE_UNATHI
origin = "Azazi Bulk Supply Guild"
possible_trading_items = list(
/obj/item/weapon/rig/unathi = TRADER_ALL,
/obj/item/weapon/rig/internalaffairs = TRADER_THIS_TYPE,
/obj/item/weapon/rig/industrial = TRADER_THIS_TYPE,
/obj/item/weapon/rig/eva = TRADER_THIS_TYPE,
/obj/item/weapon/rig/ce = TRADER_THIS_TYPE,
/obj/item/weapon/rig/hazmat = TRADER_THIS_TYPE,
/obj/item/weapon/rig/medical = TRADER_THIS_TYPE,
/obj/item/weapon/rig/hazard = TRADER_THIS_TYPE,
/obj/item/weapon/rig/combat = TRADER_THIS_TYPE,
/obj/item/rig_module/device/healthscanner = TRADER_THIS_TYPE,
/obj/item/rig_module/device/drill = TRADER_THIS_TYPE,
/obj/item/rig_module/device/rcd = TRADER_THIS_TYPE,
/obj/item/rig_module/chem_dispenser = TRADER_ALL,
/obj/item/rig_module/voice = TRADER_THIS_TYPE,
/obj/item/rig_module/vision = TRADER_SUBTYPES_ONLY,
/obj/item/rig_module/ai_container = TRADER_THIS_TYPE,
/obj/item/rig_module/mounted = TRADER_SUBTYPES_ONLY
)
speech = list(
"hail_generic" = "Welcome to the Azazi Bulk Sssupply Guild! We sssupply in bulk!",
"hail_Unathi" = "Hello fellow Sinta! We have many fine wares that will bring you a sense of home in this alien system.",
"hail_deny" = "Go away, Guwan.",
"trade_complete" = "Ah, excellent.",
"trade_blacklist" = "I will pretend I didn't ssssee that.",
"trade_no_goods" = "You gotta buy the robots, sir. I don't do trades.",
"trade_not_enough" = "I can't go any lower. Pay in full.",
"how_much" = "Ah! Thisss isss only VALUE creditssss.",
"compliment_deny" = "Were it not for the lawsss of thisss land I would sslay you.",
"compliment_accept" = "Ancestors blessss you.",
"insult_good" = "Ha! You have a fierce ssspirit, I like that.",
"insult_bad" = "Were you never taught to resspect your eldersss?",
"bribe_refusal" = "Do not try to dissshonor me again.",
"bribe_accept" = "Very well. I will ssstay for a bit longer."
)
+24
View File
@@ -0,0 +1,24 @@
//Ships are on a time limit as far as being around goes.
//They are ALSO the only ones that can appear after round start
/datum/trader/ship
var/duration_of_stay = 0
var/typical_duration = 5 //5 minutes (since trader processes only tick once a minute)
/datum/trader/ship/New()
..()
duration_of_stay = rand(typical_duration,typical_duration * 2)
/datum/trader/ship/tick()
..()
if(prob(-disposition) || refuse_comms)
duration_of_stay--
return --duration_of_stay > 0
/datum/trader/ship/bribe_to_stay_longer(var/amt)
if(prob(-disposition))
return get_response("bribe_refusal", "How about.... no?")
var/length = round(amt/100)
duration_of_stay += length
. = get_response("bribe_accept", "Sure, I'll stay for TIME more minutes.")
. = replacetext(., "TIME", length)
+259
View File
@@ -0,0 +1,259 @@
/datum/trader
var/name = "unsuspicious trader" //The name of the trader in question
var/origin = "some place" //The place that they are trading from
var/list/possible_origins //Possible names of the trader origin
var/disposition = 0 //The current disposition of them to us.
var/trade_flags = TRADER_MONEY //Flags
var/name_language //If this is set to a language name this will generate a name from the language
var/icon/portrait //The icon that shows up in the menu @TODO
var/list/wanted_items = list() //What items they enjoy trading for. Structure is (type = known/unknown)
var/list/possible_wanted_items //List of all possible wanted items. Structure is (type = mode)
var/list/possible_trading_items //List of all possible trading items. Structure is (type = mode)
var/list/trading_items = list() //What items they are currently trading away.
var/list/blacklisted_trade_items = list(/mob/living/carbon/human)
//Things they will automatically refuse
var/list/speech = list() //The list of all their replies and messages. Structure is (id = talk)
/*SPEECH IDS:
hail_generic When merchants hail a person
hail_[race] Race specific hails
hail_deny When merchant denies a hail
insult_good When the player insults a merchant while they are on good disposition
insult_bad When a player insults a merchatn when they are not on good disposition
complement_accept When the merchant accepts a complement
complement_deny When the merchant refuses a complement
how_much When a merchant tells the player how much something is.
trade_complete When a trade is made
trade_refuse When a trade is refused
what_want What the person says when they are asked if they want something
*/
var/want_multiplier = 2 //How much wanted items are multiplied by when traded for
var/insult_drop = 5 //How far disposition drops on insult
var/compliment_increase = 5 //How far compliments increase disposition
var/refuse_comms = 0 //Whether they refuse further communication
var/mob_transfer_message = "You are transported to ORIGIN." //What message gets sent to mobs that get sold.
/datum/trader/New()
..()
if(name_language)
if(name_language == TRADER_DEFAULT_NAME)
name = capitalize(pick(first_names_female + first_names_male)) + " " + capitalize(pick(last_names))
else
var/datum/language/L = all_languages[name_language]
if(L)
name = L.get_random_name(pick(MALE,FEMALE))
if(possible_origins && possible_origins.len)
origin = pick(possible_origins)
for(var/i in 3 to 6)
add_to_pool(trading_items, possible_trading_items, force = 1)
add_to_pool(wanted_items, possible_wanted_items, force = 1)
//If this hits 0 then they decide to up and leave.
/datum/trader/proc/tick()
addtimer(CALLBACK(src, .proc/do_after_tick), 0)
return 1
/datum/trader/proc/do_after_tick()
add_to_pool(trading_items, possible_trading_items, 200)
add_to_pool(wanted_items, possible_wanted_items, 50)
remove_from_pool(possible_trading_items, 9) //We want the stock to change every so often, so we make it so that they have roughly 10~11 ish items max
return
/datum/trader/proc/remove_from_pool(var/list/pool, var/chance_per_item)
if(pool && prob(chance_per_item * pool.len))
var/i = rand(1,pool.len)
pool[pool[i]] = null
pool -= pool[i]
/datum/trader/proc/add_to_pool(var/list/pool, var/list/possible, var/base_chance = 100, var/force = 0)
var/divisor = 1
if(pool && pool.len)
divisor = pool.len
if(force || prob(base_chance/divisor))
var/new_item = get_possible_item(possible)
if(new_item)
pool |= new_item
/datum/trader/proc/get_possible_item(var/list/trading_pool)
if(!trading_pool || !trading_pool.len)
return
var/list/possible = list()
for(var/type in trading_pool)
var/status = trading_pool[type]
if(status & TRADER_THIS_TYPE)
possible += type
if(status & TRADER_SUBTYPES_ONLY)
possible += subtypesof(type)
if(status & TRADER_BLACKLIST)
possible -= type
if(status & TRADER_BLACKLIST_SUB)
possible -= subtypesof(type)
if(possible.len)
var/picked = pick(possible)
var/atom/A = picked
if(initial(A.name) in list("object", "item","weapon", "structure", "machinery", "Mecha", "organ", "snack")) //weed out a few of the common bad types. Reason we don't check types specifically is that (hopefully) further bad subtypes don't set their name up and are similar.
return
return picked
/datum/trader/proc/get_response(var/key, var/default)
var/text
if(speech && speech[key])
text = speech[key]
else
text = default
text = replacetext(text, "MERCHANT", name)
return replacetext(text, "ORIGIN", origin)
/datum/trader/proc/print_trading_items(var/num)
num = Clamp(num,1,trading_items.len)
if(trading_items[num])
var/atom/movable/M = trading_items[num]
return "<b>[initial(M.name)]</b>"
/datum/trader/proc/get_item_value(var/trading_num)
if(!trading_items[trading_items[trading_num]])
var/type = trading_items[trading_num]
var/value = get_value(type)
value = round(rand(90,110)/100 * value) //For some reason rand doesn't like decimals.
trading_items[type] = value
return trading_items[trading_items[trading_num]]
/datum/trader/proc/offer_money_for_trade(var/trade_num, var/money_amount)
if(!(trade_flags & TRADER_MONEY))
return TRADER_NO_MONEY
var/value = get_item_value(trade_num)
if(money_amount < value)
return TRADER_NOT_ENOUGH
return value
/datum/trader/proc/offer_items_for_trade(var/list/offers, var/num, var/turf/location)
if(!offers || !offers.len)
return TRADER_NOT_ENOUGH
num = Clamp(num, 1, trading_items.len)
var/offer_worth = 0
for(var/item in offers)
var/atom/movable/offer = item
var/is_wanted = 0
if(is_type_in_list(offer,wanted_items))
is_wanted = 1
if(blacklisted_trade_items && blacklisted_trade_items.len && is_type_in_list(offer,blacklisted_trade_items))
return 0
if(istype(offer,/obj/item/weapon/spacecash))
if(!(trade_flags & TRADER_MONEY))
return TRADER_NO_MONEY
else
if(!(trade_flags & TRADER_GOODS))
return TRADER_NO_GOODS
else if((trade_flags & TRADER_WANTED_ONLY) && !is_wanted)
return TRADER_FOUND_UNWANTED
offer_worth += get_value(offer) * (is_wanted ? want_multiplier : 1)
if(!offer_worth)
return TRADER_NOT_ENOUGH
var/trading_worth = get_item_value(num)
if(!trading_worth)
return TRADER_NOT_ENOUGH
var/percent = offer_worth/trading_worth
if(percent > max(0.9,0.9-disposition/100))
return trade(offers, num, location)
return TRADER_NOT_ENOUGH
/datum/trader/proc/hail(var/mob/user)
var/specific
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(H.species)
specific = H.species.name
else if(istype(user, /mob/living/silicon))
specific = "silicon"
if(!speech["hail_[specific]"])
specific = "generic"
. = get_response("hail_[specific]", "Greetings, MOB!")
. = replacetext(., "MOB", user.name)
/datum/trader/proc/can_hail()
if(!refuse_comms && prob(-disposition))
refuse_comms = 1
return !refuse_comms
/datum/trader/proc/insult()
disposition -= rand(insult_drop, insult_drop * 2)
if(prob(-disposition/10))
refuse_comms = 1
if(disposition > 50)
return get_response("insult_good","What? I thought we were cool!")
else
return get_response("insult_bad", "Right back at you asshole!")
/datum/trader/proc/compliment()
if(prob(-disposition))
return get_response("compliment_deny", "Fuck you!")
if(prob(100-disposition))
disposition += rand(compliment_increase, compliment_increase * 2)
return get_response("compliment_accept", "Thank you!")
/datum/trader/proc/trade(var/list/offers, var/num, var/turf/location)
if(offers && offers.len)
for(var/offer in offers)
if(istype(offer,/mob))
var/text = mob_transfer_message
to_chat(offer, replacetext(text, "ORIGIN", origin))
if(istype(offer, /obj/mecha))
var/obj/mecha/M = offer
M.wreckage = null //So they don't ruin the illusion
qdel(offer)
var/type = trading_items[num]
var/atom/movable/M = new type(location)
playsound(location, 'sound/effects/teleport.ogg', 50, 1)
disposition += rand(compliment_increase,compliment_increase*3) //Traders like it when you trade with them
return M
/datum/trader/proc/how_much_do_you_want(var/num)
var/atom/movable/M = trading_items[num]
. = get_response("how_much", "Hmm.... how about VALUE credits?")
. = replacetext(.,"VALUE",get_item_value(num))
. = replacetext(.,"ITEM", initial(M.name))
/datum/trader/proc/what_do_you_want()
if(!(trade_flags & TRADER_GOODS))
return get_response(TRADER_NO_GOODS, "I don't deal in goods.")
. = get_response("what_want", "Hm, I want")
var/list/want_english = list()
for(var/type in wanted_items)
var/atom/a = type
want_english += initial(a.name)
. += " [english_list(want_english)]"
/datum/trader/proc/sell_items(var/list/offers)
if(!(trade_flags & TRADER_GOODS))
return TRADER_NO_GOODS
if(!offers || !offers.len)
return TRADER_NOT_ENOUGH
for(var/offer in offers)
if(!is_type_in_list(offer,wanted_items))
return TRADER_FOUND_UNWANTED
playsound(get_turf(offers[1]), 'sound/effects/teleport.ogg', 50, 1)
. = 0
for(var/offer in offers)
. += get_value(offer) * want_multiplier
qdel(offer)
/datum/trader/proc/bribe_to_stay_longer(var/amt)
return get_response("bribe_refusal", "How about... no?")
+232
View File
@@ -0,0 +1,232 @@
/datum/trader/ship/unique
trade_flags = TRADER_WANTED_ONLY|TRADER_GOODS
want_multiplier = 5
typical_duration = 10
/datum/trader/ship/unique/New()
..()
wanted_items = list()
for(var/type in possible_wanted_items)
var/status = possible_wanted_items[type]
if(status & TRADER_THIS_TYPE)
wanted_items += type
if(status & TRADER_SUBTYPES_ONLY)
wanted_items += subtypesof(type)
if(status & TRADER_BLACKLIST)
wanted_items -= type
if(status & TRADER_BLACKLIST_SUB)
wanted_items -= subtypesof(type)
/datum/trader/ship/unique/tick()
if(prob(-disposition) || refuse_comms)
duration_of_stay--
return --duration_of_stay > 0
/datum/trader/ship/unique/what_do_you_want()
return get_response("what_want", "I don't want anything!")
/datum/trader/ship/unique/severance
name = "Unknown"
origin = "SGS Severance"
possible_wanted_items = list(
/obj/item/weapon/reagent_containers/food/snacks/human = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/reagent_containers/food/snacks/meat/human = TRADER_THIS_TYPE,
/mob/living/carbon/human = TRADER_ALL
)
possible_trading_items = list(
/obj/mecha/combat = TRADER_SUBTYPES_ONLY,
/obj/mecha/combat/phazon = TRADER_BLACKLIST_ALL,
/obj/item/weapon/gun/projectile/automatic/rifle = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/gun/energy/pulse = TRADER_ALL,
/obj/item/weapon/gun/energy/rifle/pulse = TRADER_THIS_TYPE
)
blacklisted_trade_items = null
speech = list(
"hail_generic" = "H-hello. Can you hear me? G-good... I have... specific needs... I have a lot to t-trade with you in return of course.",
"hail_deny" = "--CONNECTION SEVERED--",
"trade_complete" = "Hahahahahahaha! Thankyouthankyouthankyou!",
"trade_no_money" = "I d-don't NEED cash.",
"trade_not_enough" = "N-no, no no no. M-more than that.... more...",
"trade_found_unwanted" = "I d-don't think you GET what I want, from your offer.",
"how_much" = "Meat. I want meat. The kind they don't serve i-in teh mess hall.",
"what_want" = "Long p-pork. Yes... thats what I want...",
"compliment_deny" = "Your lies won't c-change what I did.",
"compliment_accept" = "Yes... I suppose you're right.",
"insult_good" = "I... probably deserve that.",
"insult_bad" = "Maybe you should c-come here and say that. You'd be worth s-something then."
)
mob_transfer_message = "<span class='danger'>You are transported to ORIGIN, and with a sickening thud, you fall unconscious, never to wake again.</span>"
/datum/trader/ship/unique/rock
name = "Bobo"
origin = "Floating Rock"
possible_wanted_items = list(
/obj/item/weapon/ore = TRADER_ALL
)
possible_trading_items = list(
/obj/machinery/power/supermatter = TRADER_ALL,
/obj/item/weapon/aiModule = TRADER_SUBTYPES_ONLY
)
want_multiplier = 5000
speech = list(
"hail_generic" = "Blub am MERCHANT. Blub hunger for things. Boo bring them to blub, yes?",
"hail_deny" = "Blub does not want to speak to boo.",
"trade_complete" = "Blub likes to trade!",
"trade_no_money" = "Boo try to give Blub paper. Blub does not want paper.",
"trade_not_enough" = "Blub hungry for bore than that.",
"trade_found_unwanted" = "Blub only wants bocks. Give bocks.",
"trade_refuse" = "No, Blub will not do that. Blub wants bocks, yes? Give bocks.",
"how_much" = "Blub wants bocks. Boo give bocks. Blub gives stuff blub found.",
"what_want" = "Blub wants bocks. Big bocks, small bocks. Shiny bocks!",
"compliment_deny" = "Blub is just MERCHANT. What do boo mean?",
"compliment_accept" = "Boo are a bood berson!",
"insult_good" = "Blub do not understand. Blub thought we were briends.",
"insult_bad" = "Blub feels bad now."
)
/datum/trader/ship/unique/wizard
name = "The Grand Master"
origin = "Interdimensional Prison Cell"
possible_wanted_items = list(
/mob/living/simple_animal/construct = TRADER_SUBTYPES_ONLY,
/obj/item/weapon/melee/cultblade = TRADER_THIS_TYPE,
/obj/item/clothing/head/culthood = TRADER_ALL,
/obj/item/clothing/suit/space/cult = TRADER_ALL,
/obj/item/clothing/suit/cultrobes = TRADER_ALL,
/obj/item/clothing/head/helmet/space/cult = TRADER_ALL,
/obj/structure/cult = TRADER_SUBTYPES_ONLY,
/obj/structure/constructshell = TRADER_ALL,
/mob/living/simple_animal/familiar = TRADER_SUBTYPES_ONLY,
/mob/living/simple_animal/familiar/pet = TRADER_BLACKLIST,
/mob/living/simple_animal/hostile/mimic = TRADER_ALL,
/obj/item/clothing/head/helmet/space/void/wizard = TRADER_THIS_TYPE,
/obj/item/clothing/head/wizard = TRADER_ALL,
/obj/item/clothing/suit/space/void/wizard = TRADER_THIS_TYPE,
/obj/item/weapon/scrying = TRADER_THIS_TYPE,
/obj/item/weapon/melee/energy/wizard = TRADER_THIS_TYPE,
/obj/item/phylactery = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/staff = TRADER_ALL,
/obj/item/weapon/gun/energy/wand = TRADER_ALL,
/obj/item/weapon/gun/energy/wand/toy = TRADER_BLACKLIST
)
possible_trading_items = list(
/obj/item/weapon/contract/wizard/tk = TRADER_THIS_TYPE,
/obj/item/weapon/contract/boon/wizard/smoke = TRADER_THIS_TYPE,
/obj/item/weapon/contract/boon/wizard/horsemask = TRADER_THIS_TYPE,
/obj/item/weapon/contract/boon/wizard/gestalt = TRADER_THIS_TYPE,
/obj/item/toy/figure/wizard = TRADER_THIS_TYPE,
/obj/item/weapon/staff = TRADER_ALL
)
speech = list(
"hail_generic" = "Hello! Are you here on pleasure or business?",
"hail_Golem" = "Interesting... how incredibly interesting.... come! Let us do business!",
"hail_deny" = "I'm sorry, but I REALLY don't want to speak to you.",
"trade_complete" = "Pleasure doing business with you! Just don't feed it after midnight!",
"trade_no_money" = "Cash? Ha! What's cash to a man like me?",
"trade_not_enough" = "Hm, well I do enjoy what you're offering, I prefer a fair trade.",
"trade_found_unwanted" = "What? I want oddities! Don't you understand?",
"how_much" = "I want dark things, brooding things... things that go bump in the night. Things that bleed wrong, live wrong, are wrong.",
"what_want" = "Have anything from a broodish cult?",
"compliment_deny" = "Like I haven't heard that one before!",
"compliment_accept" = "Haha! Aren't you nice.",
"insult_good" = "Naughty naughty.",
"insult_bad" = "Now where do you get off talking to me like that?"
)
/datum/trader/ship/unique/vaurca
origin = "The Hive Shop"
name_language = LANGUAGE_VAURCA
possible_wanted_items = list(
/obj/item/weapon/reagent_containers/food/snacks/koisbar = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/grown/kois = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/food/snacks/koisbar = TRADER_THIS_TYPE,
/obj/item/stack/material/phoron = TRADER_THIS_TYPE
)
possible_trading_items = list(
/obj/item/clothing/mask/breath/vaurca = TRADER_THIS_TYPE,
/obj/item/weapon/melee/energy/vaurca = TRADER_THIS_TYPE,
/obj/item/vaurca/box = TRADER_THIS_TYPE,
/obj/item/weapon/melee/vaurca/rock = TRADER_THIS_TYPE,
/obj/item/weapon/grenade/spawnergrenade/vaurca = TRADER_THIS_TYPE,
/obj/item/clothing/suit/space/void/vaurca = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/space/void/vaurca = TRADER_THIS_TYPE,
/obj/item/clothing/shoes/magboots/vox/vaurca = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/vaurca/blaster = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/vaurca/gatlinglaser = TRADER_THIS_TYPE
)
speech = list(
"hail_generic" = "Greetingzz.",
"hail_deny" = "I'm zzorry, we do not want to zzzpeak to you.",
"trade_complete" = "Enjoy it, zzzir!",
"trade_no_money" = "I have no uzzze vhor creditzzz.",
"trade_not_enough" = "I want more, zzzzir.",
"trade_found_unwanted" = "That izzz not what I want.",
"how_much" = "We need k'oizz or vhoron, zzzir.",
"what_want" = "K'oizzz or vhoron.",
"compliment_deny" = "No kind wordzzzz...",
"compliment_accept" = "I appreciate kind wordzzz.",
"insult_good" = "Your humor izzz odd.",
"insult_bad" = "I do not take inzzultzz kindly."
)
/datum/trader/ship/unique/bluespace
name = "Maximus Crane"
origin = "Bluespace Emporium"
trade_flags = TRADER_WANTED_ONLY|TRADER_GOODS|TRADER_MONEY
possible_wanted_items = list(
/obj/item/bluespace_crystal = TRADER_ALL,
/obj/machinery/bluespacerelay = TRADER_ALL,
/obj/item/stack/telecrystal = TRADER_THIS_TYPE,
/obj/item/organ/brain/golem = TRADER_THIS_TYPE,
/obj/item/device/soulstone = TRADER_THIS_TYPE,
/obj/item/weapon/circuitboard/telesci_console = TRADER_THIS_TYPE,
/obj/item/weapon/circuitboard/telesci_pad = TRADER_THIS_TYPE,
/obj/item/phylactery = TRADER_THIS_TYPE,
/obj/item/blueprints = TRADER_THIS_TYPE,
/obj/item/weapon/storage/backpack/holding = TRADER_THIS_TYPE,
/obj/item/weapon/teleportation_scroll = TRADER_THIS_TYPE
)
possible_trading_items = list(
/obj/item/mecha_parts/chassis/phazon = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_torso = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_head = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_left_arm = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_right_arm = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_left_leg = TRADER_THIS_TYPE,
/obj/item/mecha_parts/part/phazon_right_leg = TRADER_THIS_TYPE
)
speech = list(
"hail_generic" = "I trade bluespace and bluespace accessories.",
"hail_deny" = "I have nothing to deal with you.",
"trade_complete" = "I am sure it is not going to malfuction!",
"trade_no_money" = "I don't need credits.",
"trade_not_enough" = "I will need far more than this.",
"trade_found_unwanted" = "This is useless for me.",
"trade_refuse" = "Nope, bluespace is not so cheap.",
"how_much" = "Maybe for VALUE, bluespace is not cheap!",
"what_want" = "I want bluespace related items.",
"compliment_deny" = "Well, well.",
"compliment_accept" = "I know, the squirrel is great.",
"insult_good" = "Witty.",
"insult_bad" = "And you still want to do business?"
)
+96
View File
@@ -0,0 +1,96 @@
/datum/trader/ship/vox
typical_duration = 15
origin = "UNREGISTERED VESSEL"
name_language = "Vox-pidgin"
compliment_increase = 0
trade_flags = TRADER_GOODS
var/hailed_vox = 0 //Whether we have been hailed by a vox. negatives mean pariah, positives mean regular.
blacklisted_trade_items = null
speech = list(
"hail_generic0" = "SKREEE! We will trade good stuff, yes?",
"hail_generic1" = "SKREEEEE! You friend of Vox? You trade with, yes?",
"hail_silicon0" = "Hello metal thing! You trade metal for things?",
"hail_silicon1" = "YOU KNOW VOX? Yes is good, yes yes, MOB. Trade GOOD!",
"hail_Human0" = "Hello hueman! Kiikikikiki! MOB trade with us, yes? Good!",
"hail_Human1" = "Friend of Vox is friend of all Vox! MOB you trade now!",
"hail_Vox1" = "SKREEEE! May the Shoal make this trade good, MOB!",
"hail_deny0" = "Trade closed, GO AWAY!",
"hail_deny-1" = "We no trade with shit like you!",
"hail_deny1" = "Trade gone now. Goodbye.",
"trade_complete0" = "Yes, kikikikikiki! You will not regret this trade!",
"trade_complete1" = "Yes... this is a good trade for the Shaol!",
"trade_no_money0" = "Money? Vox no need money. GOODS! Give it GOODS!",
"trade_no_money1" = "You know as well as it that money is no good.",
"trade_not_enough0" = "It wants MORE for that. Give it more.",
"trade_not_enough1" = "Ech, you insult it with such a trade? Respect it, make it equal.",
"trade_refuse1" = "You know as well as it that is not a good trade.",
"how_much0" = "You give it something worth VALUE, yes?",
"how_much1" = "Hmm.... VALUE. Something like that.",
"what_want0" = "Vox wants",
"what_want1" = "Shoal wants",
"compliment_deny0" = "No.",
"compliment_deny1" = "You know better than that!",
"compliment_accept0" = "Kikikikiki! Trade is better than talk, yes?",
"compliment_accept1" = "You butter it up? Should know better than that.",
"insult_good0" = "Bah! Why does it have to deal with you?",
"insult_good1" = "Where this come from? Is trade no good?",
"insult_bad0" = "All you meats are the same! Fuck off!",
"insult_bad1" = "If you say all this at home, you be dead!"
)
possible_wanted_items = list(
/obj/item/weapon = TRADER_SUBTYPES_ONLY,
/obj/item/stack/material = TRADER_SUBTYPES_ONLY,
/obj/item/stack/material/cyborg = TRADER_BLACKLIST_ALL,
/obj/item/organ = TRADER_SUBTYPES_ONLY
)
possible_trading_items = list(
/obj/item/weapon/gun/projectile/dartgun/vox = TRADER_SUBTYPES_ONLY,
/obj/item/mecha_parts/mecha_equipment/tool = TRADER_SUBTYPES_ONLY,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic = TRADER_SUBTYPES_ONLY,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = TRADER_BLACKLIST,
/obj/item/trash = TRADER_SUBTYPES_ONLY,
/obj/item/clothing/accessory = TRADER_ALL,
/obj/item/clothing/accessory/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/armband/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/badge/fluff = TRADER_BLACKLIST_ALL,
/obj/item/clothing/accessory/badge/old/fluff = TRADER_BLACKLIST_ALL,
/obj/item/robot_parts = TRADER_SUBTYPES_ONLY,
/obj/item/robot_parts/robot_component = TRADER_BLACKLIST,
/obj/item/weapon/storage/pill_bottle/happy = TRADER_THIS_TYPE,
/obj/item/weapon/storage/pill_bottle/zoom = TRADER_THIS_TYPE,
/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin = TRADER_THIS_TYPE
)
mob_transfer_message = "<span class='danger'>You are transported to the ORIGIN, when the transportation dizziness wears off, you find you are surrounded by cackling Vox...</span>"
/datum/trader/ship/vox/hail(var/mob/user)
var/specific
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(H.species)
if(isvox(H))
disposition = 1000
hailed_vox = 1
specific = H.species.name
else if(istype(user, /mob/living/silicon))
specific = "silicon"
if(!speech["hail_[specific][hailed_vox]"])
specific = "generic"
. = get_response("hail_[specific][hailed_vox]", "Greetings, MOB!")
. = replacetext(., "MOB", user.name)
/datum/trader/ship/vox/can_hail()
if(hailed_vox >= 0)
return ..()
return 0
/datum/trader/ship/vox/get_response(var/text, var/generic)
return ..("[text][hailed_vox]", generic)
/datum/trader/ship/vox/get_item_value(var/trading_num)
. = ..()
if(!hailed_vox)
. *= 2
+142
View File
@@ -0,0 +1,142 @@
/datum/trader/ship/gunshop
name = "Gun Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Gun Shop"
possible_origins = list("Rooty Tootie's Point-n-Shooties", "Bang-Bang Shop", "Wild-Wild-West Shop", "Jacobs", "Vladof", "Keleshnikov", "Hunting Depot", "Big Game Hunters")
speech = list(
"hail_generic" = "Hello hello! I hope you have your permit, oh who are we kidding, you're welcome anyways!",
"hail_deny" = "Law dictates that you can fuck off.",
"trade_complete" = "Thanks for buying your guns from ORIGIN!",
"trade_blacklist" = "We may deal in guns, but that doesn't mean we'll trade for illegal goods...",
"trade_no_goods" = "Cash for guns, thats the deal.",
"trade_not_enough" = "Guns are expensive! Give us more if you REALLY want it.",
"how_much" = "Well, I'd love to give this little beauty to you for VALUE.",
"compliment_deny" = "If we were in the same room right now, I'd probably punch you.",
"compliment_accept" = "Ha! Good one!",
"insult_good" = "I expected better from you. I suppose in that, I was wrong.",
"insult_bad" = "If I had my gun I'd shoot you!"
)
possible_trading_items = list(
/obj/item/weapon/gun/projectile/pistol = TRADER_ALL,
/obj/item/weapon/gun/projectile/colt = TRADER_ALL,
/obj/item/weapon/gun/projectile/sec = TRADER_ALL,
/obj/item/weapon/gun/projectile/shotgun/pump = TRADER_ALL,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel = TRADER_ALL,
/obj/item/weapon/gun/projectile/tanto = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/revolver/detective = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/revolver/deckard = TRADER_THIS_TYPE,
/obj/item/ammo_magazine/c45m = TRADER_ALL,
/obj/item/ammo_magazine/c45m/empty = TRADER_BLACKLIST,
/obj/item/ammo_magazine/shotgun = TRADER_ALL,
/obj/item/ammo_magazine/t40 = TRADER_ALL,
/obj/item/ammo_magazine/t40/empty = TRADER_BLACKLIST,
/obj/item/ammo_magazine/c38 = TRADER_ALL,
/obj/item/weapon/storage/box/beanbags = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/shotgunammo = TRADER_THIS_TYPE,
/obj/item/weapon/storage/box/shotgunshells = TRADER_THIS_TYPE,
/obj/item/clothing/accessory/holster = TRADER_ALL
)
/datum/trader/ship/egunshop
name = "Energy Gun Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "EGun Shop"
possible_origins = list("The Emperor's Lasgun Shop", "Hypireon", "Milawan", "Future-Guns", "Solar-Army")
speech = list(
"hail_generic" = "Welcome to the future of warfare! ORIGIN, your one-stop-shop for energy weaponry.",
"hail_deny" = "I'm sorry, your communication channel has been blacklisted.",
"trade_complete" = "Thank you, your purchase has been logged and you have automatically liked our Spacebook page.",
"trade_blacklist" = "I'm sorry, is that a joke?",
"trade_no_goods" = "We deal in cash.",
"trade_not_enough" = "State of the art weaponry costs more than that.",
"how_much" = "All our quality weapons are priceless, but I'd give that to you for VALUE.",
"compliment_deny" = "If I was dumber I probably would have believed you.",
"compliment_accept" = "Yes, I am very smart.",
"insult_good" = "Energy weapons are TWICE the gun bullet-based guns are!",
"insult_bad" = "Thats... very mean. I won't think twice about blacklisting your channel, so stop."
)
possible_trading_items = list(
/obj/item/weapon/gun/energy/taser = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/stunrevolver = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/xray = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/rifle = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/rifle/laser = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/gun = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/pistol = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/gun/nuclear = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/laser/shotgun = TRADER_THIS_TYPE,
/obj/item/clothing/accessory/holster = TRADER_ALL
)
/datum/trader/ship/illegalgun
name = "Comrade Sergei"
origin = "Comrade Sergei's Humble Shop"
speech = list(
"hail_generic" = "Grrreetings, comrrrade! Sergei hopes they can enjoy his selection of goods, nothing herrre was smuggled!",
"hail_deny" = "The shop is closed, comrrrade!",
"trade_complete" = "Many thanks, comrrrade, enjoy it!",
"trade_blacklist" = "No, no, nothing of this in his shop!",
"trade_no_goods" = "He only deals with crrredits, comrrrade!",
"trade_not_enough" = "Give him a bit morrre, comrrrade!",
"how_much" = "Only VALUE, just forrr them, comrade!",
"compliment_deny" = "They arre speaking like a officerrr, arre they an officerrr?",
"compliment_accept" = "Pourrr one out for Al'marrri. His gun was on stun, bless his hearrrt.",
"insult_good" = "Good one, comrrrade!",
"insult_bad" = "Rrrracist!"
)
possible_trading_items = list(
/obj/item/weapon/gun/projectile/boltaction = TRADER_ALL,
/obj/item/weapon/gun/projectile/dragunov = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/silenced = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/automatic/tommygun = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/automatic/mini_uzi = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/improvised_handgun = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/shotgun/improvised = TRADER_THIS_TYPE,
/obj/item/weapon/gun/energy/retro = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/revolver/derringer = TRADER_THIS_TYPE,
/obj/item/weapon/gun/projectile/pirate = TRADER_THIS_TYPE
)
/datum/trader/ship/tactical
name = "Tactical Gear Shop Employee"
name_language = TRADER_DEFAULT_NAME
origin = "Tactical Gear Shop"
possible_origins = list("Mall Ninja. Co.", "Hephaestus Defense Supplies", "Tacticool Emporium", "The Redshirt", "The Harmbaton")
speech = list(
"hail_generic" = "Welcome to ORIGIN, you will find everything you need to stay safe.",
"hail_deny" = "We refuse to make business with you.",
"trade_complete" = "Thank you, And stay safe.",
"trade_blacklist" = "I have no use for this",
"trade_no_goods" = "Credits or nothing..",
"trade_not_enough" = "Our gear is more valuable than this.",
"how_much" = "This fine piece will be yours for only VALUE.",
"compliment_deny" = "Are you going to buy something any time soon?",
"compliment_accept" = "Thank you, no one has better tactical gear than us, ORIGIN.",
"insult_good" = "Stop, I am not paid to hear this.",
"insult_bad" = "Good luck staying safe without us then!"
)
possible_trading_items = list(
/obj/item/clothing/suit/armor/riot = TRADER_THIS_TYPE,
/obj/item/clothing/suit/armor/bulletproof = TRADER_THIS_TYPE,
/obj/item/clothing/suit/armor/laserproof = TRADER_THIS_TYPE,
/obj/item/clothing/suit/armor/tactical = TRADER_THIS_TYPE,
/obj/item/clothing/suit/storage/vest = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/riot = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/ablative = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/ballistic = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/tactical = TRADER_THIS_TYPE,
/obj/item/clothing/glasses/night = TRADER_THIS_TYPE,
/obj/item/clothing/glasses/sunglasses/sechud/tactical = TRADER_THIS_TYPE,
/obj/item/clothing/gloves/swat = TRADER_THIS_TYPE,
/obj/item/clothing/shoes/swat = TRADER_THIS_TYPE,
/obj/item/clothing/under/tactical = TRADER_THIS_TYPE,
/obj/item/clothing/mask/gas/tactical = TRADER_THIS_TYPE,
/obj/item/weapon/shield/riot/tact = TRADER_THIS_TYPE,
/obj/item/weapon/storage/belt/security/tactical = TRADER_THIS_TYPE
)