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
+28
View File
@@ -176,6 +176,7 @@
#include "code\controllers\subsystems\supply.dm"
#include "code\controllers\subsystems\ticker.dm"
#include "code\controllers\subsystems\timer.dm"
#include "code\controllers\subsystems\trade.dm"
#include "code\controllers\subsystems\vote.dm"
#include "code\controllers\subsystems\wireless.dm"
#include "code\controllers\subsystems\initialization\asteroid.dm"
@@ -275,6 +276,16 @@
#include "code\datums\repositories\cameras.dm"
#include "code\datums\repositories\crew.dm"
#include "code\datums\repositories\repository.dm"
#include "code\datums\trading\_trading_defines.dm"
#include "code\datums\trading\ai.dm"
#include "code\datums\trading\food.dm"
#include "code\datums\trading\goods.dm"
#include "code\datums\trading\misc.dm"
#include "code\datums\trading\ship.dm"
#include "code\datums\trading\trade.dm"
#include "code\datums\trading\unique.dm"
#include "code\datums\trading\vox.dm"
#include "code\datums\trading\weaponry.dm"
#include "code\datums\uplink\ammunition.dm"
#include "code\datums\uplink\announcements.dm"
#include "code\datums\uplink\badassery.dm"
@@ -452,6 +463,7 @@
#include "code\game\jobs\job\science.dm"
#include "code\game\jobs\job\security.dm"
#include "code\game\jobs\job\silicon.dm"
#include "code\game\jobs\job\outsider\merchant.dm"
#include "code\game\machinery\adv_med.dm"
#include "code\game\machinery\ai_slipper.dm"
#include "code\game\machinery\alarm.dm"
@@ -688,6 +700,7 @@
#include "code\game\objects\items\devices\binoculars.dm"
#include "code\game\objects\items\devices\chameleonproj.dm"
#include "code\game\objects\items\devices\debugger.dm"
#include "code\game\objects\items\devices\dociler.dm"
#include "code\game\objects\items\devices\flash.dm"
#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\floor_painter.dm"
@@ -803,6 +816,7 @@
#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\fake_grenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
#include "code\game\objects\items\weapons\grenades\fragmentation.dm"
#include "code\game\objects\items\weapons\grenades\grenade.dm"
@@ -1324,6 +1338,18 @@
#include "code\modules\hydroponics\trays\tray_tools.dm"
#include "code\modules\hydroponics\trays\tray_update_icons.dm"
#include "code\modules\intern\intern.dm"
#include "code\modules\item_worth\_helpers.dm"
#include "code\modules\item_worth\item_worth.dm"
#include "code\modules\item_worth\material_weapons.dm"
#include "code\modules\item_worth\materials.dm"
#include "code\modules\item_worth\reagents.dm"
#include "code\modules\item_worth\worths_list.dm"
#include "code\modules\item_worth\Value_procs\atoms.dm"
#include "code\modules\item_worth\Value_procs\mob.dm"
#include "code\modules\item_worth\Value_procs\obj.dm"
#include "code\modules\item_worth\Value_procs\obj\items.dm"
#include "code\modules\item_worth\Value_procs\obj\machinery.dm"
#include "code\modules\item_worth\Value_procs\obj\structures.dm"
#include "code\modules\law\incident.dm"
#include "code\modules\law\law.dm"
#include "code\modules\law\laws\high_severity.dm"
@@ -1352,6 +1378,8 @@
#include "code\modules\materials\material_sheets.dm"
#include "code\modules\materials\material_synth.dm"
#include "code\modules\materials\materials.dm"
#include "code\modules\merchant\merchant_machinery.dm"
#include "code\modules\merchant\merchant_programs.dm"
#include "code\modules\mining\abandonedcrates.dm"
#include "code\modules\mining\alloys.dm"
#include "code\modules\mining\coins.dm"
+3 -3
View File
@@ -76,7 +76,7 @@ var/global/list/socks_m = list(
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Duffel Bag")
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg)
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg, /datum/job/merchant)
// Visual nets
var/list/datum/visualnet/visual_nets = list()
@@ -133,7 +133,7 @@ var/global/list/cloaking_devices = list()
sortTim(facial_hair_styles_male_list, /proc/cmp_text_asc)
sortTim(facial_hair_styles_female_list, /proc/cmp_text_asc)
//Body markings
//Body markings
paths = subtypesof(/datum/sprite_accessory/marking)
for(var/path in paths)
var/datum/sprite_accessory/marking/M = new path()
@@ -180,7 +180,7 @@ var/global/list/cloaking_devices = list()
// The other lists are generated *after* we sort the main one so they don't need sorting too.
for (var/thing in all_species)
var/datum/species/S = all_species[thing]
if (!(S.spawn_flags & IS_RESTRICTED))
playable_species += S.name
if(S.spawn_flags & IS_WHITELISTED)
+5
View File
@@ -270,6 +270,8 @@ var/list/gamemode_cache = list()
var/sun_accuracy = 8
var/sun_target_z = 7
var/merchant_chance = 20 //Chance, in percentage, of the merchant job slot being open at round start
/datum/configuration/New()
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
for (var/T in L)
@@ -833,6 +835,9 @@ var/list/gamemode_cache = list()
fastboot = TRUE
world.log << "Fastboot is ENABLED."
if("merchant_chance")
config.merchant_chance = text2num(value)
else
log_misc("Unknown setting in configuration: '[name]'")
+9 -3
View File
@@ -66,6 +66,12 @@
if (J.title == rank)
return J
/datum/controller/subsystem/jobs/proc/ShouldCreateRecords(var/rank)
if(!rank) return 0
var/datum/job/job = GetJob(rank)
if(!job) return 0
return job.create_record
/datum/controller/subsystem/jobs/proc/GetPlayerAltTitle(mob/new_player/player, rank)
. = player.client.prefs.GetPlayerAltTitle(GetJob(rank))
@@ -313,7 +319,7 @@
var/datum/job/job = GetJob(rank)
var/list/spawn_in_storage = list()
if(job)
var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage.
var/list/custom_equip_leftovers = list()
@@ -676,7 +682,7 @@
Debug("LS/([H]): Entry; rank=[rank]")
var/datum/spawnpoint/spawnpos
if(H.client.prefs.spawnpoint)
spawnpos = spawntypes[H.client.prefs.spawnpoint]
@@ -790,7 +796,7 @@
else if (storage)
storage += thing
Debug("EC/([H]): Unable to equip [thing]; sending to storage.")
Debug("EC/([H]): Complete.")
return TRUE
+49
View File
@@ -0,0 +1,49 @@
/var/global/datum/controller/subsystem/trade/SStrade
/datum/controller/subsystem/trade
name = "Trade"
wait = 1 MINUTE
flags = SS_NO_TICK_CHECK
var/list/traders = list() //List of all nearby traders
/datum/controller/subsystem/trade/New()
NEW_SS_GLOBAL(SStrade)
/datum/controller/subsystem/trade/Initialize()
for(var/i in 1 to rand(1,3))
generateTrader(1)
..()
/datum/controller/subsystem/trade/Recover()
traders = SStrade.traders
/datum/controller/subsystem/trade/fire()
for(var/a in traders)
var/datum/trader/T = a
if(!T.tick())
traders -= T
qdel(T)
if(prob(100-traders.len*10))
generateTrader()
/datum/controller/subsystem/trade/proc/generateTrader(var/stations = 0)
var/list/possible = list()
if(stations)
possible += subtypesof(/datum/trader) - typesof(/datum/trader/ship)
else
if(prob(5))
possible += subtypesof(/datum/trader/ship/unique)
else
possible += subtypesof(/datum/trader/ship) - typesof(/datum/trader/ship/unique)
for(var/i in 1 to 10)
var/type = pick(possible)
var/bad = 0
for(var/trader in traders)
if(istype(trader,type))
bad = 1
break
if(bad)
continue
traders += new type
return
+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
)
+7
View File
@@ -628,6 +628,13 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
/obj/item/weapon/anomaly_core
name = "anomaly core"
desc = "An advanced bluespace device, little is know about its applications."
icon = 'icons/obj/objects.dmi'
icon_state = "anomaly_core"
origin_tech = list(TECH_MAGNET = 6, TECH_MATERIAL = 7, TECH_BLUESPACE = 8)
/obj/item/weapon/research
name = "research debugging device"
desc = "Instant research tool. For testing purposes only."
+7 -1
View File
@@ -386,7 +386,7 @@
id = access_paramedic
desc = "Paramedic Equipment"
region = ACCESS_REGION_MEDBAY
/var/const/access_detective = 68
/datum/access/access_detective
id = access_detective
@@ -450,6 +450,12 @@
desc = "Code Gold"
access_type = ACCESS_TYPE_CENTCOM
/var/const/access_merchant = 110//merchant access
/datum/access/merchant
id = access_merchant
desc = "Merchant Access"
access_type = ACCESS_TYPE_NONE
/***************
* Antag access *
***************/
+1
View File
@@ -24,6 +24,7 @@
var/account_allowed = 1 // Does this job type come with a station account?
var/economic_modifier = 2 // With how much does this job modify the initial account amount?
var/create_record = 1 // Do we announce/make records for people who spawn on this job?
var/bag_type = /obj/item/weapon/storage/backpack
var/satchel_type = /obj/item/weapon/storage/backpack/satchel_norm
+1 -1
View File
@@ -65,7 +65,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
if(has_alt_title(H, alt_title,"Emergency Physician"))
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
+36
View File
@@ -0,0 +1,36 @@
/datum/job/merchant
title = "Merchant"
faction = "Station"
department = "Civilian"
flag = MERCHANT
department_flag = CIVILIAN
total_positions = 0
spawn_positions = 1
supervisors = "yourself and the market"
selection_color = "#515151"
idtype = /obj/item/weapon/card/id/merchant
minimal_player_age = 10
economic_modifier = 5
ideal_character_age = 30
create_record = 0
account_allowed = 0
access = list(access_merchant)
minimal_access = list(access_merchant)
/datum/job/merchant/equip(var/mob/living/carbon/human/H)
if(!H)
return FALSE
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/merchant(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/price_scanner(H), slot_r_store)
H << "You are a merchant heading to the [station_name()] to make profit, your main objective is to sell and trade with the crew."
return TRUE
/datum/job/merchant/New()
..()
if(prob(config.merchant_chance))
spawn_positions = 0
+3 -2
View File
@@ -47,7 +47,8 @@ var/const/LAWYER =(1<<9)
var/const/CHAPLAIN =(1<<10)
var/const/CLOWN =(1<<11)
var/const/MIME =(1<<12)
var/const/ASSISTANT =(1<<13)
var/const/MERCHANT =(1<<13)
var/const/ASSISTANT =(1<<14)
var/list/assistant_occupations = list() //Leaving this on one line stops Travis complaining ~Scopes
@@ -106,6 +107,7 @@ var/list/civilian_positions = list(
"Janitor",
"Librarian",
"Chaplain",
"Merchant",
"Assistant"
)
@@ -119,7 +121,6 @@ var/list/security_positions = list(
"Security Cadet"
)
var/list/nonhuman_positions = list(
"AI",
"Cyborg",
+2 -2
View File
@@ -1,5 +1,5 @@
/obj/mecha/combat/phazon
desc = "An exosuit which can only be described as 'WTF?'."
desc = "The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials."
name = "Phazon"
icon_state = "phazon"
initial_icon = "phazon"
@@ -21,7 +21,7 @@
max_equip = 4
/obj/mecha/combat/phazon/New()
/obj/mecha/combat/phazon/equipped/New()
..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd
ME.attach(src)
+1 -1
View File
@@ -355,7 +355,7 @@
name = "teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
origin_tech = list(TECH_BLUESPACE = 10)
origin_tech = list(TECH_BLUESPACE = 5)
equip_cooldown = 150
energy_drain = 1000
range = RANGED
+308 -7
View File
@@ -1069,17 +1069,318 @@
list("key"=/obj/item/mecha_parts/part/phazon_head)
)
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.add_overlay("[used_atom.icon_state]+o")
qdel(used_atom)
return 1
/datum/construction/mecha/phazon_chassis/custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.add_overlay("[used_atom.icon_state]+o")
qdel(used_atom)
return 1
action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
/datum/construction/mecha/phazon_chassis/action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
/datum/construction/mecha/phazon_chassis/spawn_result()
var/obj/item/mecha_parts/chassis/const_holder = holder
const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder)
const_holder.icon = 'icons/mecha/mech_construction.dmi'
const_holder.icon_state = "phazon0"
const_holder.density = TRUE
QDEL_IN(src, 0)
return
/datum/construction/reversible/mecha/phazon
result = "/obj/mecha/combat/phazon"
steps = list(
//1
list("key"=/obj/item/weapon/anomaly_core,
"backkey"=null, //Cannot remove the anomaly core once it's in
"desc"="Anomaly core socket is open and awaiting connection."),
//2
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="External armor is wrenched."),
//3
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="External armor is installed."),
//4
list("key"=/obj/item/mecha_parts/part/phazon_armour,
"backkey"=/obj/item/weapon/weldingtool,
"desc"="Phase armor is welded."),
//5
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="Phase armor is wrenched."),
//6
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Phase armor is installed."),
//7
list("key"=/obj/item/stack/material/plasteel,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The bluespace crystal is engaged."),
//8
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/wirecutters,
"desc"="The bluespace crystal is connected."),
//9
list("key"=/obj/item/stack/cable_coil,
"backkey"=/obj/item/weapon/crowbar,
"desc"="The bluespace crystal is installed."),
//10
list("key"=/obj/item/bluespace_crystal,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Super capacitor is secured."),
//12
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Super capacitor is installed."),
//12
list("key"=/obj/item/weapon/stock_parts/capacitor/super,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Phasic scanner module is secured."),
//13
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Phasic scanner module is installed."),
//14
list("key"=/obj/item/weapon/stock_parts/scanning_module/phasic,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Weapon control module is secured."),
//15
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Weapon control is installed."),
//16
list("key"=/obj/item/weapon/circuitboard/mecha/phazon/targeting,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Peripherals control module is secured."),
//17
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Peripherals control module is installed"),
//18
list("key"=/obj/item/weapon/circuitboard/mecha/phazon/peripherals,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Central control module is secured."),
//19
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Central control module is installed."),
//20
list("key"=/obj/item/weapon/circuitboard/mecha/phazon/main,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is adjusted."),
//21
list("key"=/obj/item/weapon/wirecutters,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is added."),
//22
list("key"=/obj/item/stack/cable_coil,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The hydraulic systems are active."),
//23
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are connected."),
//24
list("key"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are disconnected.")
)
/datum/construction/reversible/mecha/phazon/action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
/datum/construction/reversible/mecha/phazon/custom_action(index, diff, atom/used_atom, mob/user)
if(!..())
return 0
//TODO: better messages.
switch(index)
if(24)
user.visible_message("[user] connects the [holder] hydraulic systems", "<span class='notice'>You connect the [holder] hydraulic systems.</span>")
holder.icon_state = "phazon1"
if(23)
if(diff==FORWARD)
user.visible_message("[user] activates the [holder] hydraulic systems.", "<span class='notice'>You activate the [holder] hydraulic systems.</span>")
holder.icon_state = "phazon2"
else
user.visible_message("[user] disconnects the [holder] hydraulic systems", "<span class='notice'>You disconnect the [holder] hydraulic systems.</span>")
holder.icon_state = "phazon0"
if(22)
if(diff==FORWARD)
user.visible_message("[user] adds the wiring to the [holder].", "<span class='notice'>You add the wiring to the [holder].</span>")
holder.icon_state = "phazon3"
else
user.visible_message("[user] deactivates the [holder] hydraulic systems.", "<span class='notice'>You deactivate the [holder] hydraulic systems.</span>")
holder.icon_state = "phazon1"
if(21)
if(diff==FORWARD)
user.visible_message("[user] adjusts the wiring of the [holder].", "<span class='notice'>You adjust the wiring of the [holder].</span>")
holder.icon_state = "phazon4"
else
user.visible_message("[user] removes the wiring from the [holder].", "<span class='notice'>You remove the wiring from the [holder].</span>")
var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
coil.amount = 4
holder.icon_state = "phazon2"
if(20)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into the [holder].", "<span class='notice'>You install the central computer mainboard into the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon5"
else
user.visible_message("[user] disconnects the wiring of the [holder].", "<span class='notice'>You disconnect the wiring of the [holder].</span>")
holder.icon_state = "phazon3"
if(19)
if(diff==FORWARD)
user.visible_message("[user] secures the mainboard.", "<span class='notice'>You secure the mainboard.</span>")
holder.icon_state = "phazon6"
else
user.visible_message("[user] removes the central control module from the [holder].", "<span class='notice'>You remove the central computer mainboard from the [holder].</span>")
new /obj/item/weapon/circuitboard/mecha/phazon/main(get_turf(holder))
holder.icon_state = "phazon4"
if(18)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into the [holder].", "<span class='notice'>You install the peripherals control module into the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon7"
else
user.visible_message("[user] unfastens the mainboard.", "<span class='notice'>You unfasten the mainboard.</span>")
holder.icon_state = "phazon5"
if(17)
if(diff==FORWARD)
user.visible_message("[user] secures the peripherals control module.", "<span class='notice'>You secure the peripherals control module.</span>")
holder.icon_state = "phazon8"
else
user.visible_message("[user] removes the peripherals control module from the [holder].", "<span class='notice'>You remove the peripherals control module from the [holder].</span>")
new /obj/item/weapon/circuitboard/mecha/phazon/peripherals(get_turf(holder))
holder.icon_state = "phazon6"
if(16)
if(diff==FORWARD)
user.visible_message("[user] installs the weapon control module into the [holder].", "<span class='notice'>You install the weapon control module into the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon9"
else
user.visible_message("[user] unfastens the peripherals control module.", "<span class='notice'>You unfasten the peripherals control module.</span>")
holder.icon_state = "phazon7"
if(15)
if(diff==FORWARD)
user.visible_message("[user] secures the weapon control module.", "<span class='notice'>You secure the weapon control module.</span>")
holder.icon_state = "phazon10"
else
user.visible_message("[user] removes the weapon control module from the [holder].", "<span class='notice'>You remove the weapon control module from the [holder].</span>")
new /obj/item/weapon/circuitboard/mecha/phazon/targeting(get_turf(holder))
holder.icon_state = "phazon8"
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs phasic scanner module to the [holder].", "<span class='notice'>You install scanner module to the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon11"
else
user.visible_message("[user] unfastens the weapon control module.", "<span class='notice'>You unfasten the weapon control module.</span>")
holder.icon_state = "phazon9"
if(13)
if(diff==FORWARD)
user.visible_message("[user] secures the phasic scanner module.", "<span class='notice'>You secure the scanner module.</span>")
holder.icon_state = "phazon12"
else
user.visible_message("[user] removes the phasic scanner module from the [holder].", "<span class='notice'>You remove the scanner module from the [holder].</span>")
new /obj/item/weapon/stock_parts/scanning_module/phasic(get_turf(holder))
holder.icon_state = "phazon10"
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs super capacitor to the [holder].", "<span class='notice'>You install capacitor to the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon13"
else
user.visible_message("[user] unfastens the phasic scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
holder.icon_state = "phazon11"
if(11)
if(diff==FORWARD)
user.visible_message("[user] secures the super capacitor.", "<span class='notice'>You secure the capacitor.</span>")
holder.icon_state = "phazon14"
else
user.visible_message("[user] removes the super capacitor from the [holder].", "<span class='notice'>You remove the capacitor from the [holder].</span>")
new /obj/item/weapon/stock_parts/capacitor/super(get_turf(holder))
holder.icon_state = "phazon12"
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs the bluespace crystal.", "<span class='notice'>You install the bluespace crystal.</span>")
qdel(used_atom)
holder.icon_state = "phazon15"
else
user.visible_message("[user] unsecures the super capacitor from the [holder].", "<span class='notice'>You unsecure the capacitor from the [holder].</span>")
holder.icon_state = "phazon13"
if(9)
if(diff==FORWARD)
user.visible_message("[user] connects the bluespace crystal.", "<span class='notice'>You connect the bluespace crystal.</span>")
holder.icon_state = "phazon16"
else
user.visible_message("[user] removes the bluespace crystal from the [holder].", "<span class='notice'>You remove the bluespace crystal from the [holder].</span>")
new /obj/item/bluespace_crystal(get_turf(holder))
holder.icon_state = "phazon14"
if(8)
if(diff==FORWARD)
user.visible_message("[user] engages the bluespace crystal.", "<span class='notice'>You engage the bluespace crystal.</span>")
holder.icon_state = "phazon17"
else
user.visible_message("[user] disconnects the bluespace crystal from the [holder].", "<span class='notice'>You disconnect the bluespace crystal from the [holder].</span>")
holder.icon_state = "phazon15"
if(7)
if(diff==FORWARD)
user.visible_message("[user] installs the phase armor layer to the [holder].", "<span class='notice'>You install the phase armor layer to the [holder].</span>")
holder.icon_state = "phazon18"
else
user.visible_message("[user] disengages the bluespace crystal.", "<span class='notice'>You disengage the bluespace crystal.</span>")
holder.icon_state = "phazon16"
if(6)
if(diff==FORWARD)
user.visible_message("[user] secures the phase armor layer.", "<span class='notice'>You secure the phase armor layer.</span>")
holder.icon_state = "phazon19"
else
user.visible_message("[user] pries the phase armor layer from the [holder].", "<span class='notice'>You pry the phase armor layer from the [holder].</span>")
var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
MS.amount = 5
holder.icon_state = "phazon17"
if(5)
if(diff==FORWARD)
user.visible_message("[user] welds the phase armor layer to the [holder].", "<span class='notice'>You weld the phase armor layer to the [holder].</span>")
holder.icon_state = "phazon20"
else
user.visible_message("[user] unfastens the phase armor layer.", "<span class='notice'>You unfasten the phase armor layer.</span>")
holder.icon_state = "phazon18"
if(4)
if(diff==FORWARD)
user.visible_message("[user] installs Phazon Armor Plates to the [holder].", "<span class='notice'>You install Phazon Armor Plates to the [holder].</span>")
qdel(used_atom)
holder.icon_state = "phazon21"
else
user.visible_message("[user] cuts phase armor layer from the [holder].", "<span class='notice'>You cut the phase armor layer from the [holder].</span>")
holder.icon_state = "phazon19"
if(3)
if(diff==FORWARD)
user.visible_message("[user] secures Phazon Armor Plates.", "<span class='notice'>You secure Phazon Armor Plates.</span>")
holder.icon_state = "phazon22"
else
user.visible_message("[user] pries Phazon Armor Plates from the [holder].", "<span class='notice'>You pry Phazon Armor Plates from the [holder].</span>")
new /obj/item/mecha_parts/part/phazon_armour(get_turf(holder))
holder.icon_state = "phazon20"
if(2)
if(diff==FORWARD)
user.visible_message("[user] welds Phazon Armor Plates to the [holder].", "<span class='notice'>You weld Phazon Armor Plates to the [holder].</span>")
else
user.visible_message("[user] unfastens Phazon Armor Plates.", "<span class='notice'>You unfasten Phazon Armor Plates.</span>")
holder.icon_state = "phazon21"
if(1)
if(diff==FORWARD)
user.visible_message("[user] carefully inserts the anomaly core into \the [holder] and secures it.", "<span class='notice'>You slowly place the anomaly core into its socket and close its chamber.</span>")
qdel(used_atom)
return 1
/datum/construction/mecha/phazon_chassis/spawn_result()
..()
feedback_inc("mecha_phazon_created",1)
return
/datum/construction/mecha/odysseus_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1
+66 -61
View File
@@ -39,32 +39,32 @@
/obj/item/mecha_parts/part/ripley_torso
name="Ripley Torso"
desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
icon_state = "ripley_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
icon_state = "ripley_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/ripley_left_arm
name="Ripley Left Arm"
desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "ripley_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/ripley_right_arm
name="Ripley Right Arm"
desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "ripley_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/ripley_left_leg
name="Ripley Left Leg"
desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "ripley_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/ripley_right_leg
name="Ripley Right Leg"
desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "ripley_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
///////// Gygax
@@ -78,41 +78,41 @@
/obj/item/mecha_parts/part/gygax_torso
name="Gygax Torso"
desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
icon_state = "gygax_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3)
icon_state = "gygax_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_head
name="Gygax Head"
desc="A Gygax head. Houses advanced surveilance and targeting sensors."
icon_state = "gygax_head"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
icon_state = "gygax_head"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_left_arm
name="Gygax Left Arm"
desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
icon_state = "gygax_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_right_arm
name="Gygax Right Arm"
desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
icon_state = "gygax_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_left_leg
name="Gygax Left Leg"
icon_state = "gygax_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
icon_state = "gygax_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_right_leg
name="Gygax Right Leg"
icon_state = "gygax_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
icon_state = "gygax_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/gygax_armour
name="Gygax Armour Plates"
icon_state = "gygax_armour"
origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
icon_state = "gygax_armour"
origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
//////////// Durand
@@ -126,38 +126,38 @@
/obj/item/mecha_parts/part/durand_torso
name="Durand Torso"
icon_state = "durand_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3)
icon_state = "durand_harness"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_head
name="Durand Head"
icon_state = "durand_head"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
icon_state = "durand_head"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_left_arm
name="Durand Left Arm"
icon_state = "durand_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
icon_state = "durand_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_right_arm
name="Durand Right Arm"
icon_state = "durand_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
icon_state = "durand_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_left_leg
name="Durand Left Leg"
icon_state = "durand_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
icon_state = "durand_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_right_leg
name="Durand Right Leg"
icon_state = "durand_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
icon_state = "durand_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
/obj/item/mecha_parts/part/durand_armour
name="Durand Armour Plates"
icon_state = "durand_armour"
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
icon_state = "durand_armour"
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
@@ -204,44 +204,49 @@
/obj/item/mecha_parts/part/phazon_torso
name="Phazon Torso"
icon_state = "phazon_harness"
//construction_time = 300
//construction_time = 300
//construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"glass"=10000,"phoron"=20000)
origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6)
origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6)
/obj/item/mecha_parts/part/phazon_head
name="Phazon Head"
icon_state = "phazon_head"
//construction_time = 200
//construction_time = 200
//construction_cost = list(DEFAULT_WALL_MATERIAL=15000,"glass"=5000,"phoron"=10000)
origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6)
origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6)
/obj/item/mecha_parts/part/phazon_left_arm
name="Phazon Left Arm"
icon_state = "phazon_l_arm"
//construction_time = 200
//construction_time = 200
//construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
/obj/item/mecha_parts/part/phazon_right_arm
name="Phazon Right Arm"
icon_state = "phazon_r_arm"
//construction_time = 200
//construction_time = 200
//construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
/obj/item/mecha_parts/part/phazon_left_leg
name="Phazon Left Leg"
icon_state = "phazon_l_leg"
//construction_time = 200
//construction_time = 200
//construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
/obj/item/mecha_parts/part/phazon_right_leg
name="Phazon Right Leg"
icon_state = "phazon_r_leg"
//construction_time = 200
//construction_time = 200
//construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
/obj/item/mecha_parts/part/phazon_armour
name="Phazon Armour Plates"
icon_state = "phazon_armor"
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 5, TECH_MAGNET = 5)
///////// Odysseus
@@ -256,37 +261,37 @@
/obj/item/mecha_parts/part/odysseus_head
name="Odysseus Head"
icon_state = "odysseus_head"
origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2)
origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2)
/obj/item/mecha_parts/part/odysseus_torso
name="Odysseus Torso"
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
icon_state = "odysseus_torso"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
icon_state = "odysseus_torso"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/odysseus_left_arm
name="Odysseus Left Arm"
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "odysseus_l_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/odysseus_right_arm
name="Odysseus Right Arm"
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "odysseus_r_arm"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/odysseus_left_leg
name="Odysseus Left Leg"
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "odysseus_l_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/obj/item/mecha_parts/part/odysseus_right_leg
name="Odysseus Right Leg"
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
icon_state = "odysseus_r_leg"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
/*/obj/item/mecha_parts/part/odysseus_armour
name="Odysseus Carapace"
+4
View File
@@ -41,6 +41,10 @@
latejoin_cyborg += loc
delete_me = 1
return
if("JoinLateMerchant")
latejoin_merchant += loc
delete_me = 1
return
if("prisonwarp")
prisonwarp += loc
delete_me = 1
@@ -223,6 +223,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
default_cartridge = /obj/item/weapon/cartridge/medical
icon_state = "pda-gene"
/obj/item/device/pda/merchant
icon_state = "pda-chef"
hidden = 1
// Special AI/pAI PDAs that cannot explode.
/obj/item/device/pda/ai
@@ -0,0 +1,69 @@
/obj/item/device/dociler
name = "dociler"
desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat."
w_class = 3
origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2)
icon_state = "animal_tagger1"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi'
)
item_state = "gun"
force = 0
var/loaded = 1
var/mode = "completely"
/obj/item/device/dociler/examine(var/mob/user)
. = ..(user)
user << "<span class='notice'>It is currently set to [mode] docile mode.</span>"
/obj/item/device/dociler/attack_self(var/mob/user)
if(mode == "somewhat")
mode = "completely"
else
mode = "somewhat"
user << "You set \the [src] to [mode] docile mode."
/obj/item/device/dociler/afterattack(var/mob/living/L, var/mob/user, proximity)
if(!proximity) return
if(!istype(L, /mob/living/simple_animal))
user << "<span class='warning'>\The [src] has no effect on \the [L].</span>"
return
if(!loaded)
user << "<span class='warning'>\The [src] isn't loaded!</span>"
return
user.visible_message("\The [user] thrusts \the [src] deep into \the [L]'s head, injecting something!")
if(mode == "somewhat")
L.faction = user.faction
else
L.faction = null
if(istype(L,/mob/living/simple_animal/hostile))
var/mob/living/simple_animal/hostile/H = L
if(!H.tameable)
user << "<span class='warning'>\The [src] has no effect on \the [L].</span>"
return
else
H.LoseTarget()
H.attack_same = 0
H.friends += user
L.desc += "<br><span class='notice'>It looks especially docile.</span>"
var/name = input(user, "Would you like to rename \the [L]?", "Dociler", L.name) as text
if(length(name))
L.real_name = name
L.name = name
loaded = 0
icon_state = "animal_tagger0"
addtimer(CALLBACK(src, .proc/do_recharge), 5 MINUTES)
/obj/item/device/dociler/proc/do_recharge()
loaded = 1
icon_state = "animal_tagger1"
src.visible_message("\The [src] beeps, refilling itself.")
@@ -372,3 +372,23 @@ REAGENT SCANNER
if (T.cores > 1)
user.show_message("Anomalious slime core amount detected")
user.show_message("Growth progress: [T.amount_grown]/10")
/obj/item/device/price_scanner
name = "price scanner"
desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy."
icon_state = "price_scanner"
slot_flags = SLOT_BELT
w_class = 2
throwforce = 0
throw_speed = 3
throw_range = 3
matter = list(DEFAULT_WALL_MATERIAL = 25, "glass" = 25)
/obj/item/device/price_scanner/afterattack(atom/movable/target, mob/user as mob, proximity)
if(!proximity)
return
var/value = get_value(target)
user.visible_message("\The [user] scans \the [target] with \the [src]")
user.show_message("Price estimation of \the [target]: [value ? value : "N/A"] Credits")
@@ -312,10 +312,17 @@ var/const/NO_EMAG_ACT = -50
item_state = "gold_id"
registered_name = "Captain"
assignment = "Captain"
/obj/item/weapon/card/id/captains_spare/New()
access = get_all_station_access()
..()
/obj/item/weapon/card/id/merchant
name = "merchant pass"
icon_state = "centcom"
desc = "An identification card issued to NanoTrasen sanctioned merchants, indicating their right to sell and buy goods."
access = list(access_merchant)
/obj/item/weapon/card/id/synthetic
name = "\improper Synthetic ID"
desc = "Access module for NanoTrasen Synthetics"
@@ -12,77 +12,93 @@
/obj/item/weapon/circuitboard/mecha/ripley
origin_tech = list(TECH_DATA = 3)
origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
name = T_BOARD_MECHA("Ripley peripherals control")
icon_state = "mcontroller"
name = T_BOARD_MECHA("Ripley peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/ripley/main
name = T_BOARD_MECHA("Ripley central control")
icon_state = "mainboard"
name = T_BOARD_MECHA("Ripley central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/gygax
origin_tech = list(TECH_DATA = 4)
origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/gygax/peripherals
name = T_BOARD_MECHA("Gygax peripherals control")
icon_state = "mcontroller"
name = T_BOARD_MECHA("Gygax peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/gygax/targeting
name = T_BOARD_MECHA("Gygax weapon control and targeting")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
name = T_BOARD_MECHA("Gygax weapon control and targeting")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
/obj/item/weapon/circuitboard/mecha/gygax/main
name = T_BOARD_MECHA("Gygax central control")
icon_state = "mainboard"
name = T_BOARD_MECHA("Gygax central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/durand
origin_tech = list(TECH_DATA = 4)
origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/durand/peripherals
name = T_BOARD_MECHA("Durand peripherals control")
icon_state = "mcontroller"
name = T_BOARD_MECHA("Durand peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/durand/targeting
name = T_BOARD_MECHA("Durand weapon control and targeting")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
name = T_BOARD_MECHA("Durand weapon control and targeting")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
/obj/item/weapon/circuitboard/mecha/durand/main
name = T_BOARD_MECHA("Durand central control")
icon_state = "mainboard"
name = T_BOARD_MECHA("Durand central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/honker
origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/honker/peripherals
name = T_BOARD_MECHA("H.O.N.K peripherals control")
icon_state = "mcontroller"
name = T_BOARD_MECHA("H.O.N.K peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/honker/targeting
name = T_BOARD_MECHA("H.O.N.K weapon control and targeting")
icon_state = "mcontroller"
name = T_BOARD_MECHA("H.O.N.K weapon control and targeting")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/honker/main
name = T_BOARD_MECHA("H.O.N.K central control")
icon_state = "mainboard"
name = T_BOARD_MECHA("H.O.N.K central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/odysseus
origin_tech = list(TECH_DATA = 3)
origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals
name = T_BOARD_MECHA("Odysseus peripherals control")
icon_state = "mcontroller"
name = T_BOARD_MECHA("Odysseus peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/odysseus/main
name = T_BOARD_MECHA("Odysseus central control")
icon_state = "mainboard"
name = T_BOARD_MECHA("Odysseus central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/phazon
origin_tech = list(TECH_DATA = 5, TECH_BLUESPACE = 5)
/obj/item/weapon/circuitboard/mecha/phazon/peripherals
name = T_BOARD_MECHA("Phazon peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/phazon/targeting
name = T_BOARD_MECHA("Phazon weapon control and targeting")
icon_state = "mcontroller"
origin_tech = list(TECH_DATA = 5, TECH_COMBAT = 6, TECH_BLUESPACE = 5)
/obj/item/weapon/circuitboard/mecha/phazon/main
name = T_BOARD_MECHA("Phazon central control")
icon_state = "mainboard"
//Undef the macro, shouldn't be needed anywhere else
#undef T_BOARD_MECHA
@@ -0,0 +1,7 @@
/obj/item/weapon/grenade/fake
name = "fragmentation grenade"
icon_state = "frag"
/obj/item/weapon/grenade/fake/prime()
active = 0
playsound(src.loc, get_sfx("explosion"), 50, 1, 30)
@@ -8,6 +8,7 @@
var/banglet = 0
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
var/list/newvars
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
@@ -21,6 +22,9 @@
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
if(newvars && length(newvars))
for(var/v in newvars)
x.vars[v] = newvars[v]
x.loc = T
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
@@ -43,3 +47,16 @@
spawner_type = /mob/living/simple_animal/hostile/carp
deliveryamt = 5
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
/obj/item/weapon/grenade/spawnergrenade/singularity
name = "singularity grenade"
spawner_type = /obj/singularity
/obj/item/weapon/grenade/spawnergrenade/singularity/toy
spawner_type = /obj/item/toy/spinningtoy
/obj/item/weapon/grenade/spawnergrenade/fake_carp
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 5)
spawner_type = /mob/living/simple_animal/hostile/carp/holodeck
deliveryamt = 4
newvars = list("faction" = null, "melee_damage_lower" = 0, "melee_damage_upper" = 0, "environment_smash" = 0, "destroy_surroundings" = 0)
+26 -1
View File
@@ -86,6 +86,31 @@
else
..()
/obj/item/weapon/shield/buckler
name = "buckler"
desc = "A wooden buckler used to block sharp things from entering your body back in the day."
icon = 'icons/obj/weapons.dmi'
icon_state = "buckler"
slot_flags = SLOT_BACK
force = 8
throwforce = 8
base_block_chance = 60
throw_speed = 10
throw_range = 20
w_class = 4.0
origin_tech = list(TECH_MATERIAL = 1)
matter = list(DEFAULT_WALL_MATERIAL = 1000, "Wood" = 1000)
attack_verb = list("shoved", "bashed")
/obj/item/weapon/shield/buckler/handle_shield(mob/user)
. = ..()
if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1)
/obj/item/weapon/shield/buckler/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null)
if(istype(damage_source, /obj/item/projectile))
return 0
return base_block_chance
/*
* Energy Shield
*/
@@ -112,7 +137,7 @@
if(user.incapacitated())
return 0
if(.)
spark(user.loc, 5)
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
@@ -4,13 +4,6 @@
* Classic Baton
*/
/*
* Banhammer
*/
/obj/item/weapon/banhammer/attack(mob/M as mob, mob/user as mob)
M << "<font color='red'><b> You have been banned FOR NO REISIN by [user]</b></font>"
user << "<font color='red'> You have <b>BANNED</b> [M]</font>"
playsound(loc, 'sound/effects/adminhelp.ogg', 15)
/*
* Classic Baton
+2 -1
View File
@@ -761,7 +761,8 @@
/obj/item/weapon/gun/projectile/automatic/terminator = 0.5,
/obj/item/weapon/rig/military = 0.5,
/obj/item/weapon/rig/unathi/fancy = 0.5,
/obj/item/clothing/mask/ai = 0.5
/obj/item/clothing/mask/ai = 0.5,
/obj/item/weapon/anomaly_core = 0.5
)
/obj/random/junk
@@ -38,3 +38,7 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/head/soft(src)
/obj/structure/closet/secure_closet/merchant
name = "merchant locker"
req_access = list(access_merchant)
+5 -4
View File
@@ -60,10 +60,11 @@ var/list/wizardstart = list()
var/turf/newplayer_start = null
//Spawnpoints.
var/list/latejoin = list()
var/list/latejoin_gateway = list()
var/list/latejoin_cryo = list()
var/list/latejoin_cyborg = list()
var/list/latejoin = list()
var/list/latejoin_gateway = list()
var/list/latejoin_cryo = list()
var/list/latejoin_cyborg = list()
var/list/latejoin_merchant = list()
var/list/kickoffsloc = list()
var/list/prisonwarp = list() // Prisoners go to these
+11 -3
View File
@@ -25,6 +25,7 @@ var/list/spawntypes = list()
/datum/spawnpoint/arrivals
display_name = "Arrivals Shuttle"
msg = "is inbound from the NTCC Odin"
disallow_job = list("Merchant")
/datum/spawnpoint/arrivals/New()
@@ -34,7 +35,7 @@ var/list/spawntypes = list()
/datum/spawnpoint/cryo
display_name = "Cryogenic Storage"
msg = "has completed cryogenic revival"
disallow_job = list("Cyborg")
disallow_job = list("Cyborg", "Merchant")
/datum/spawnpoint/cryo/New()
..()
@@ -43,8 +44,15 @@ var/list/spawntypes = list()
/datum/spawnpoint/cyborg
display_name = "Cyborg Storage"
msg = "has been activated from storage"
restrict_job = list("Cyborg")
restrict_job = list("Cyborg", "Merchant")
/datum/spawnpoint/cyborg/New()
..()
turfs = latejoin_cyborg
turfs = latejoin_cyborg
/datum/spawnpoint/merchant
display_name = "Merchant Station"
restrict_job = list("Merchant")
/datum/spawnpoint/merchant/New()
turfs = latejoin_merchant
@@ -0,0 +1,2 @@
/atom/proc/Value(var/base)
return base
@@ -0,0 +1,4 @@
/mob/living/carbon/human/Value(var/base)
. = ..()
if(species)
. *= species.rarity_value
@@ -0,0 +1,4 @@
/obj/Value()
. = ..()
for(var/a in contents)
. += get_value(a)
@@ -0,0 +1,35 @@
/obj/item/slime_extract/Value(var/base)
return base * Uses
/obj/item/ammo_casing/Value()
if(!BB)
return 1
return ..()
/obj/item/weapon/reagent_containers/Value()
. = ..()
if(reagents)
for(var/a in reagents.reagent_list)
var/datum/reagent/reg = a
. += reg.value * reg.volume
. = round(.)
/obj/item/stack/Value(var/base)
return base * amount
/obj/item/stack/material/Value()
if(!material)
return ..()
return material.value * amount
/obj/item/weapon/ore/Value()
var/material/mat = get_material_by_name(material)
if(mat)
return mat.value
return 0
/obj/item/weapon/material/Value()
return material.value * worth_multiplier
/obj/item/weapon/spacecash/Value()
return worth
@@ -0,0 +1,5 @@
/obj/machinery/Value()
. = ..()
if(stat & BROKEN)
. *= 0.5
. = round(.)
@@ -0,0 +1,5 @@
/obj/structure/barricade/Value()
return material.value
/obj/structure/bed/Value()
return ..() * material.value
+3
View File
@@ -0,0 +1,3 @@
//Workaround by Ginja due to the fact initial(parent_type) does not work.
#define PARENT(x) text2path(replacetext("[x]", regex("/\[^/\]+$"), ""))
+13
View File
@@ -0,0 +1,13 @@
/proc/get_value(atom/A) // A can be either type *or* instance; ie get_value(/obj) is valid, as is get_value(new /obj)
var/atom/t = ispath(A) ? A : A.type
while(!(t in worths)) // Find the first parent that is in the list
t = PARENT(t)
if(!t)
return 0
var/value = worths[t]
if(value >= 0) // Value zero or greater than zero, all instances have same value
return value
else // Negative. If it's a path, use -x, otherwise call Value() on the instance
if(ispath(A))
return -value
return A.Value(-value)
@@ -0,0 +1,35 @@
/obj/item/weapon/material
var/worth_multiplier = 1
//Rule of thumb is: worth more than the parts put in
//Finished good is worth more than its individual parts
/obj/item/weapon/material/kitchen
worth_multiplier = 1.1
/obj/item/weapon/material/butterfly
worth_multiplier = 8
/obj/item/weapon/material/harpoon
worth_multiplier = 15
/obj/item/weapon/material/hatchet
worth_multiplier = 6
/obj/item/weapon/material/minihoe
worth_multiplier = 6
/obj/item/weapon/material/scythe
worth_multiplier = 20
/obj/item/weapon/material/sword
worth_multiplier = 30
/obj/item/weapon/material/twohanded/fireaxe
worth_multiplier = 31
/obj/item/weapon/material/twohanded/spear
worth_multiplier = 7 //blade + stuff
/obj/item/weapon/material/star
worth_multiplier = 25
+89
View File
@@ -0,0 +1,89 @@
/material
var/value = 1
/material/uranium
value = 100
/material/diamond
value = 170
/material/gold
value = 40
/material/silver
value = 35
/material/phoron
value = 150
/material/stone/marble
value = 4
/material/steel
value = 4
/material/diona
value = 5
/material/steel/holographic
value = 0
/material/plasteel
value = 12
/material/plasteel/titanium
value = 10
/material/glass/reinforced
value = 2
/material/glass/phoron
value = 30
/material/glass/phoron/reinforced
value = 40
/material/osmium
value = 30
/material/tritium
value = 300
/material/mhydrogen
value = 100
/material/platinum
value = 200
/material/iron
value = 5
/material/voxalloy
value = 100
/material/wood
value = 3
/material/wood/holographic
value = 0
/material/cardboard
value = 0
/material/leather
value = 3
/material/hide
value = 5
/material/hide/xeno
value = 35
/material/hide/human
value = 35
/material/bone
value = 5
/material/bone/necromancer
value = 50
+603
View File
@@ -0,0 +1,603 @@
//These value assume that each unit is roughly a gram
/datum/reagent
var/value = 1 //per unit
/datum/reagent/blood
value = 2
/datum/reagent/antibodies
value = 6
/datum/reagent/water
value = 0
/datum/reagent/fuel
value = 6.8
/datum/reagent/acetone
value = 0.27
/datum/reagent/aluminum
value = 0.02
/datum/reagent/ammonia
value = 0.01
/datum/reagent/carbon
value = 0.2
/datum/reagent/copper
value = 0.02
/datum/reagent/ethanol
value = 0.01
/datum/reagent/butanol
value = 0.02
/datum/reagent/hydrazine
value = 0.017
/datum/reagent/iron
value = 0.01
/datum/reagent/lithium
value = 6
/datum/reagent/mercury
value = 0.02
/datum/reagent/phosphorus
value = 0.4
/datum/reagent/potassium
value = 1
/datum/reagent/radium
value = 50 //Radium is crazy expensive, like 100k+ per gram. So probably a bit less expensive in the future.
/datum/reagent/acid
value = 0.2
/datum/reagent/sodium
value = 0.1
/datum/reagent/sugar
value = 0.1
/datum/reagent/sulfur
value = 2
/datum/reagent/kois
value = 0.5
/datum/reagent/nutriment
value = 0.1
/datum/reagent/nutriment/virus_food
value = 0.15
/datum/reagent/nutriment/sprinkles
value = 0.05
/datum/reagent/nutriment/mint
value = 0.14
/datum/reagent/lipozine
value = 0.11
/datum/reagent/sodiumchloride
value = 0.11
/datum/reagent/blackpepper
value = 0.1
/datum/reagent/enzyme
value = 0.2
/datum/reagent/frostoil
value = 0.2
/datum/reagent/capsaicin
value = 0.2
/datum/reagent/capsaicin/condensed
value = 0.5
/datum/reagent/drink
value = 0.1
/datum/reagent/drink/milk/chocolate
value = 0.11
/datum/reagent/drink/milk/cream
value = 0.12
/datum/reagent/drink/coffee
value = 0.12
/datum/reagent/drink/coffee/soy_latte
value = 0.13
/datum/reagent/drink/hot_coco
value = 0.11
/datum/reagent/drink/milkshake
value = 0.12
/datum/reagent/drink/rewriter
value = 0.11
/datum/reagent/drink/nuka_cola
value = 0.13
/datum/reagent/drink/doctor_delight
value = 0.3
/datum/reagent/drink/ice
value = 0
/datum/reagent/drink/nothing
value = 0
/datum/reagent/ethanol/absinthe
value = 0.13
/datum/reagent/ethanol/ale
value = 0.13
/datum/reagent/ethanol/beer
value = 0.12
/datum/reagent/ethanol/bluecuracao
value = 0.16
/datum/reagent/ethanol/deadrum
value = 0.15
/datum/reagent/ethanol/gin
value = 0.1
/datum/reagent/ethanol/coffee/kahlua
value = 0.14
/datum/reagent/ethanol/melonliquor
value = 0.13
/datum/reagent/ethanol/rum
value = 0.1
/datum/reagent/ethanol/sake
value = 0.11
/datum/reagent/ethanol/tequilla
value = 0.1
/datum/reagent/ethanol/thirteenloko
value = 0.15
/datum/reagent/ethanol/vermouth
value = 0.1
/datum/reagent/ethanol/vodka
value = 0.1
/datum/reagent/ethanol/whiskey
value = 0.1
/datum/reagent/ethanol/wine
value = 0.1
/datum/reagent/ethanol/acid_spit
value = 0.15
/datum/reagent/ethanol/alliescocktail
value = 0.16
/datum/reagent/ethanol/aloe
value = 0.17
/datum/reagent/ethanol/amasec
value = 0.16
/datum/reagent/ethanol/andalusia
value = 0.15
/datum/reagent/ethanol/antifreeze
value = 0.16
/datum/reagent/ethanol/atomicbomb
value = 0.21
/datum/reagent/ethanol/coffee/b52
value = 0.17
/datum/reagent/ethanol/bahama_mama
value = 0.15
/datum/reagent/ethanol/bananahonk
value = 0.15
/datum/reagent/ethanol/barefoot
value = 0.14
/datum/reagent/ethanol/beepsky_smash
value = 0.2
/datum/reagent/ethanol/bilk
value = 0.12
/datum/reagent/ethanol/black_russian
value = 0.14
/datum/reagent/ethanol/bloody_mary
value = 0.14
/datum/reagent/ethanol/booger
value = 0.13
/datum/reagent/ethanol/coffee/brave_bull
value = 0.16
/datum/reagent/ethanol/changelingsting
value = 0.19
/datum/reagent/ethanol/martini
value = 0.16
/datum/reagent/ethanol/cuba_libre
value = 0.15
/datum/reagent/ethanol/demonsblood
value = 0.15
/datum/reagent/ethanol/devilskiss
value = 0.14
/datum/reagent/ethanol/driestmartini
value = 0.16
/datum/reagent/ethanol/ginfizz
value = 0.13
/datum/reagent/ethanol/grog
value = 0.11
/datum/reagent/ethanol/erikasurprise
value = 0.16
/datum/reagent/ethanol/gargle_blaster
value = 0.21
/datum/reagent/ethanol/gintonic
value = 0.15
/datum/reagent/ethanol/goldschlager
value = 0.2
/datum/reagent/ethanol/hippies_delight
value = 0.12
/datum/reagent/ethanol/hooch
value = 0.11
/datum/reagent/ethanol/iced_beer
value = 0.13
/datum/reagent/ethanol/irishcarbomb
value = 0.14
/datum/reagent/ethanol/coffee/irishcoffee
value = 0.12
/datum/reagent/ethanol/irish_cream
value = 0.13
/datum/reagent/ethanol/longislandicedtea
value = 0.13
/datum/reagent/ethanol/manhattan
value = 0.14
/datum/reagent/ethanol/manhattan_proj
value = 0.2
/datum/reagent/ethanol/manly_dorf
value = 0.13
/datum/reagent/ethanol/margarita
value = 0.15
/datum/reagent/ethanol/mead
value = 0.13
/datum/reagent/ethanol/moonshine
value = 0.11
/datum/reagent/ethanol/neurotoxin
value = 0.2
/datum/reagent/ethanol/patron
value = 0.16
/datum/reagent/ethanol/pwine
value = 0.19
/datum/reagent/ethanol/red_mead
value = 0.14
/datum/reagent/ethanol/sbiten
value = 0.13
/datum/reagent/ethanol/screwdrivercocktail
value = 0.13
/datum/reagent/ethanol/silencer
value = 0.135
/datum/reagent/ethanol/singulo
value = 0.2
/datum/reagent/ethanol/snowwhite
value = 0.125
/datum/reagent/ethanol/suidream
value = 0.12
/datum/reagent/ethanol/syndicatebomb
value = 0.21
/datum/reagent/ethanol/tequilla_sunrise
value = 0.13
/datum/reagent/ethanol/threemileisland
value = 0.2
/datum/reagent/ethanol/toxins_special
value = 0.2
/datum/reagent/ethanol/vodkamartini
value = 0.135
/datum/reagent/ethanol/vodkatonic
value = 0.145
/datum/reagent/ethanol/white_russian
value = 0.125
/datum/reagent/ethanol/whiskey_cola
value = 0.15
/datum/reagent/ethanol/whiskeysoda
value = 0.15
/datum/reagent/ethanol/specialwhiskey
value = 0.3
/datum/reagent/inaprovaline
value = 3.5
/datum/reagent/bicaridine
value = 4.9
/datum/reagent/kelotane
value = 2.9
/datum/reagent/dermaline
value = 3.9
/datum/reagent/dylovene
value = 2.1
/datum/reagent/dexalin
value = 2.4
/datum/reagent/dexalinp
value = 3.6
/datum/reagent/tricordrazine
value = 6
/datum/reagent/cryoxadone
value = 3.9
/datum/reagent/clonexadone
value = 5.5
/datum/reagent/paracetamol
value = 3.3
/datum/reagent/tramadol
value = 3.1
/datum/reagent/oxycodone
value = 3.3
/datum/reagent/synaptizine
value = 4.6
/datum/reagent/alkysine
value = 5.9
/datum/reagent/imidazoline
value = 4.2
/datum/reagent/peridaxon
value = 6
/datum/reagent/ryetalyn
value = 3.6
/datum/reagent/hyperzine
value = 3.9
/datum/reagent/ethylredoxrazine
value = 3.1
/datum/reagent/hyronalin
value = 2.3
/datum/reagent/arithrazine
value = 2.7
/datum/reagent/spaceacillin
value = 2.5
/datum/reagent/sterilizine
value = 2.2
/datum/reagent/leporazine
value = 2
/datum/reagent/methylphenidate
value = 6
/datum/reagent/citalopram
value = 6
/datum/reagent/paroxetine
value = 3.5
/datum/reagent/nicotine
value = 2
/datum/reagent/rezadone
value = 5
/datum/reagent/ipecac
value = 2
/datum/reagent/crayon_dust
value = 0.001
/datum/reagent/adminordrazine
value = 1000
/datum/reagent/gold
value = 7
/datum/reagent/silver
value = 4
/datum/reagent/uranium
value = 9
/datum/reagent/adrenaline
value = 2
/datum/reagent/diethylamine
value = 0.9
/datum/reagent/surfactant
value = 0.05
/datum/reagent/thermite
value = 6
/datum/reagent/space_cleaner
value = 0.7
/datum/reagent/lube
value = 0.6
/datum/reagent/glycerol
value = 8
/datum/reagent/nitroglycerin
value = 9
/datum/reagent/coolant
value = 0.8
/datum/reagent/woodpulp
value = 0.6
/datum/reagent/luminol
value = 1.4
/datum/reagent/toxin
value = 2
/datum/reagent/toxin/plasticide
value = 2.1
/datum/reagent/toxin/amatoxin
value = 2.3
/datum/reagent/toxin/carpotoxin
value = 3
/datum/reagent/toxin/phoron
value = 10
/datum/reagent/toxin/cyanide
value = 3.3
/datum/reagent/toxin/potassium_chloride
value = 4.4
/datum/reagent/toxin/potassium_chlorophoride
value = 4.5
/datum/reagent/toxin/zombiepowder
value = 2.9
/datum/reagent/toxin/fertilizer
value = 1.2
/datum/reagent/toxin/plantbgone
value = 1.1
/datum/reagent/acid/polyacid
value = 2
/datum/reagent/lexorin
value = 2.4
/datum/reagent/mutagen
value = 3.1
/datum/reagent/slimejelly
value = 1.2
/datum/reagent/soporific
value = 2.5
/datum/reagent/chloralhydrate
value = 2.6
/datum/reagent/chloralhydrate/beer2
value = 2.2
/datum/reagent/space_drugs
value = 2.8
/datum/reagent/serotrotium
value = 2.5
/datum/reagent/cryptobiolin
value = 2
/datum/reagent/impedrezene
value = 1.8
/datum/reagent/mindbreaker
value = 0.6
/datum/reagent/psilocybin
value = 0.7
/datum/reagent/slimetoxin
value = 2
/datum/reagent/aslimetoxin
value = 3
/datum/reagent/nanites
value = 9
/datum/reagent/xenomicrobes
value = 5
+892
View File
@@ -0,0 +1,892 @@
//Negative values indicate that instances of these types should use the Value proc
//Mainly used so that stuff inside them can also add to their value, and other things like material,
//stuff like that.
var/list/worths = list(
//ROBOT ASSEMBLIES,
/obj/item/weapon/secbot_assembly = 180,
/obj/item/weapon/secbot_assembly/ed209_assembly = 280,
/obj/item/weapon/farmbot_arm_assembly = 130,
/obj/item/weapon/toolbox_tiles = 80,
/obj/item/weapon/toolbox_tiles_sensor = 180,
/obj/item/weapon/firstaid_arm_assembly = 150,
/obj/item/weapon/bucket_sensor = 40,
//REAGENT CONTAINERS,
/obj/item/weapon/reagent_containers/hypospray/combat = -200,
/obj/item/weapon/reagent_containers/hypospray = -90,
/obj/item/weapon/reagent_containers/spray = -23,
/obj/item/weapon/reagent_containers/food/snacks/monkeycube = -35,
/obj/item/weapon/reagent_containers/food/snacks/human = -300,
/obj/item/weapon/reagent_containers/food/snacks/sliceable = -25,
/obj/item/weapon/reagent_containers/food/snacks/monkeycube = -15,
/obj/item/weapon/reagent_containers/food/snacks = -10,
/obj/item/weapon/reagent_containers/food/drinks/bottle = -11,
/obj/item/weapon/reagent_containers/food/drinks = -8,
/obj/item/weapon/reagent_containers/glass/rag = -5,
/obj/item/weapon/reagent_containers/glass = -60,
/obj/item/weapon/reagent_containers = -1,
//ENERGY GUNS,
/obj/item/weapon/gun/energy/rifle/pulse/destroyer = 9000,
/obj/item/weapon/gun/energy/rifle/pulse = 7000,
/obj/item/weapon/gun/energy/rifle/laser/heavy = 6500,
/obj/item/weapon/gun/energy/rifle/laser/xray = 4500,
/obj/item/weapon/gun/energy/rifle = 1500,
/obj/item/weapon/gun/energy/gun/nuclear = 2800,
/obj/item/weapon/gun/energy/gun = 700,
/obj/item/weapon/gun/energy/pistol = 550,
/obj/item/weapon/gun/energy/laser/shotgun = 4800,
/obj/item/weapon/gun/energy/laser/practice = 500,
/obj/item/weapon/gun/energy/laser = 1000,
/obj/item/weapon/gun/energy/retro = 1400,
/obj/item/weapon/gun/energy/captain = 8500,
/obj/item/weapon/gun/energy/xray = 3500,
/obj/item/weapon/gun/energy/sniperrifle = 6400,
/obj/item/weapon/gun/energy/lasertag = 10,
/obj/item/weapon/gun/energy/pulse/pistol = 4500,
/obj/item/weapon/gun/energy/pulse = 5000,
/obj/item/weapon/gun/energy/ionrifle = 2000,
/obj/item/weapon/gun/energy/decloner = 6500,
/obj/item/weapon/gun/energy/floragun = 1500,
/obj/item/weapon/gun/energy/mindflayer = 4500,
/obj/item/weapon/gun/energy/toxgun = 3500,
/obj/item/weapon/gun/energy/beegun = 4500,
/obj/item/weapon/gun/energy/mousegun = 2000,
/obj/item/weapon/gun/energy/net = 3500,
/obj/item/weapon/gun/energy/vaurca = 3000,
/obj/item/weapon/gun/energy/taser = 500,
/obj/item/weapon/gun/energy/crossbow/largecrossbow = 1600,
/obj/item/weapon/gun/energy/crossbow = 750,
/obj/item/weapon/gun/energy/temperature = 3000,
/obj/item/weapon/gun/energy/lawgiver = 7000,
/obj/item/weapon/gun/energy/kinetic_accelerator = 2500,
/obj/item/weapon/gun/energy/plasmacutter = 4000,
/obj/item/weapon/gun/energy = 2100,
//LAUNCHERS,
/obj/item/weapon/gun/launcher/spikethrower = 3500,
/obj/item/weapon/gun/launcher/crossbow = 120,
/obj/item/weapon/gun/launcher/pneumatic = 200,
/obj/item/weapon/gun/launcher/syringe = 150,
/obj/item/weapon/gun/launcher = 300,
//AUTOMATICS,
/obj/item/weapon/gun/projectile/automatic/rifle/sts35 = 3800,
/obj/item/weapon/gun/projectile/automatic/rifle/z8 = 3100,
/obj/item/weapon/gun/projectile/automatic/rifle/l6_saw = 13400,
/obj/item/weapon/gun/projectile/automatic/rifle/shotgun = 8500,
/obj/item/weapon/gun/projectile/automatic/rifle/w556 = 7500,
/obj/item/weapon/gun/projectile/automatic/c20r = 3250,
/obj/item/weapon/gun/projectile/automatic/wt550 = 2200,
/obj/item/weapon/gun/projectile/automatic/tommygun = 4000,
/obj/item/weapon/gun/projectile/automatic/mini_uzi = 2000,
/obj/item/weapon/gun/projectile/automatic/railgun = 8000,
/obj/item/weapon/gun/projectile/automatic/x9 = 2500,
/obj/item/weapon/gun/projectile/automatic/terminator = 15000,
/obj/item/weapon/gun/projectile/automatic = 2000,
//PROJECTILE,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 5500,
/obj/item/weapon/gun/projectile/shotgun/pump = 3500,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel = 2500,
/obj/item/weapon/gun/projectile/shotgun/improvised = 1000,
/obj/item/weapon/gun/projectile/improvised_handgun = 650,
/obj/item/weapon/gun/projectile/revolver/derringer = 2100,
/obj/item/weapon/gun/projectile/revolver/detective = 1500,
/obj/item/weapon/gun/projectile/revolver = 3500,
/obj/item/weapon/gun/projectile/colt = 1700,
/obj/item/weapon/gun/projectile/sec = 1650,
/obj/item/weapon/gun/projectile/tanto = 2500,
/obj/item/weapon/gun/projectile/deagle = 5600,
/obj/item/weapon/gun/projectile/gyropistol = 7500,
/obj/item/weapon/gun/projectile/heavysniper/tranq = 6000,
/obj/item/weapon/gun/projectile/heavysniper = 12000,
/obj/item/weapon/gun/projectile/silenced = 1700,
/obj/item/weapon/gun/projectile/boltaction = 1200,
/obj/item/weapon/gun/projectile/dragunov = 4500,
/obj/item/weapon/gun/projectile = 1500,
//GUN,
/obj/item/weapon/gun = 500,
//MATERIAL STACKS,
/obj/item/stack/material/marble = -20,
/obj/item/stack/material/diamond = -60,
/obj/item/stack/material/uranium = -120,
/obj/item/stack/material/plastic = -15,
/obj/item/stack/material/gold = -55,
/obj/item/stack/material/silver = -45,
/obj/item/stack/material/platinum = -95,
/obj/item/stack/material/mhydrogen = -110,
/obj/item/stack/material/tritium = -100,
/obj/item/stack/material/osmium = -100,
/obj/item/stack/material/plasteel = -100,
/obj/item/stack/material/phoron = -70,
/obj/item/stack/material/wood = -2,
/obj/item/stack/material/cloth = -3,
/obj/item/stack/material/cardboard = -1,
/obj/item/stack/material/glass/reinforced = -12,
/obj/item/stack/material/glass/phoronglass = -35,
/obj/item/stack/material/glass/phoronrglass = -65,
/obj/item/stack/material = -5,
//STACKS,
/obj/item/stack/medical/advanced/bruise_pack = -30,
/obj/item/stack/medical/advanced/ointment = -40,
/obj/item/stack/medical/splint = -25,
/obj/item/stack/medical = -15,
/obj/item/stack/nanopaste = -30,
/obj/item/stack/rods = -5,
/obj/item/stack/telecrystal = -1000,
/obj/item/stack/wax = -5,
/obj/item/stack = -5,
//STORAGE,
/obj/item/weapon/storage/briefcase/crimekit = -50,
/obj/item/weapon/storage/belt/wands = 800,
/obj/item/weapon/storage/belt/military = 700,
/obj/item/weapon/storage/belt/security/tactical = 500,
/obj/item/weapon/storage/belt/soulstone = 800,
/obj/item/weapon/storage/belt = -50,
/obj/item/weapon/storage/backpack/holding = -3000,
/obj/item/weapon/storage = -30,
//WEAPONS,
/obj/item/weapon/spacecash = -1,
/obj/item/weapon/ore = 10,
/obj/item/weapon/mining_scanner = 130,
/obj/item/weapon/bee_smoker = 50,
/obj/item/weapon/anomaly_core = 20000,
/obj/item/weapon/spellbook = 25000,
/obj/item/weapon/am_containment = 5000,
//MINING GEAR,
/obj/item/weapon/pickaxe/silver = 300,
/obj/item/weapon/pickaxe/drill = 100,
/obj/item/weapon/pickaxe/jackhammer = 90,
/obj/item/weapon/pickaxe/gold = 400,
/obj/item/weapon/pickaxe/diamond = 600,
/obj/item/weapon/pickaxe/diamonddrill = 700,
/obj/item/weapon/pickaxe = 30,
/obj/item/weapon/shovel/spade = 20,
/obj/item/weapon/rrf = 200,
/obj/item/weapon/rrf_ammo = 50,
/obj/item/weapon/ore_radar = 30,
/obj/item/device/wormhole_jaunter = 500,
/obj/item/weapon/lazarus_injector = 800,
/obj/item/weapon/extraction_pack = 600,
/obj/item/weapon/resonator/upgraded = 650,
/obj/item/weapon/resonator = 450,
/obj/item/weapon/oremagnet = 250,
/obj/item/weapon/autochisel = 500,
/obj/item/weapon/slimepotion = 200,
/obj/item/weapon/slimepotion2 = 300,
/obj/item/weapon/slimesteroid = 150,
/obj/item/weapon/slimesteroid2 = 250,
/obj/item/weapon/portable_destructive_analyzer = 780,
/obj/item/weapon/inflatable_dispenser = 300,
/obj/item/weapon/matter_decompiler = 400,
//COMPUTER HARDWARE,
/obj/item/weapon/computer_hardware/battery_module/advanced = 110,
/obj/item/weapon/computer_hardware/battery_module/super = 150,
/obj/item/weapon/computer_hardware/battery_module/ultra = 190,
/obj/item/weapon/computer_hardware/battery_module/micro = 80,
/obj/item/weapon/computer_hardware/battery_module/nano = 60,
/obj/item/weapon/computer_hardware/battery_module/lambda = 100000,
/obj/item/weapon/computer_hardware/hard_drive/advanced = 160,
/obj/item/weapon/computer_hardware/hard_drive/super = 250,
/obj/item/weapon/computer_hardware/hard_drive/cluster = 500,
/obj/item/weapon/computer_hardware/hard_drive/small = 100,
/obj/item/weapon/computer_hardware/hard_drive/micro = 60,
/obj/item/weapon/computer_hardware/hard_drive/portable = 30,
/obj/item/weapon/computer_hardware/hard_drive/portable/advanced = 60,
/obj/item/weapon/computer_hardware/hard_drive/portable/super = 125,
/obj/item/weapon/computer_hardware/network_card/advanced = 90,
/obj/item/weapon/computer_hardware/network_card/wired = 40,
/obj/item/weapon/computer_hardware/processor_unit/small = 80,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 400,
/obj/item/weapon/computer_hardware/processor_unit/photonic/small = 120,
/obj/item/weapon/computer_hardware/processor_unit = 200,
/obj/item/weapon/computer_hardware/tesla_link = 350,
/obj/item/weapon/computer_hardware = 80,
/obj/item/weapon/computer_hardware/hard_drive = 125,
/obj/item/weapon/clipboard = 15,
//POWER CELLS,
/obj/item/weapon/cell/device = 100,
/obj/item/weapon/cell/crap = 30,
/obj/item/weapon/cell/apc = 130,
/obj/item/weapon/cell/high = 160,
/obj/item/weapon/cell/mecha = 220,
/obj/item/weapon/cell/super = 280,
/obj/item/weapon/cell/hyper = 310,
/obj/item/weapon/cell/infinite = 50000,
/obj/item/weapon/cell/potato = 1,
/obj/item/weapon/cell/slime = 160,
/obj/item/weapon/cell = 60,
//SMES COILS,
/obj/item/weapon/smes_coil/weak = 1000,
/obj/item/weapon/smes_coil/super_capacity = 5000,
/obj/item/weapon/smes_coil/super_io = 4500,
/obj/item/weapon/smes_coil = 2000,
/obj/item/weapon/tracker_electronics = 150,
/obj/item/weapon/am_containment = 5000,
/obj/item/weapon/syringe_cartridge = 20,
/obj/item/weapon/silencer = 60,
/obj/item/weapon/fossil = 100,
/obj/item/weapon/vampiric = 666,
/obj/item/weapon/anobattery = 1800,
/obj/item/weapon/anodevice = 3300,
/obj/item/weapon/scrying = 20000,
/obj/item/weapon/virusdish = 65,
/obj/item/weapon/diseasedisk = 100,
/obj/item/weapon/soap/deluxe = 15,
/obj/item/weapon/cane/concealed = 250,
/obj/item/weapon/cane = 40,
/obj/item/weapon/disk/nuclear = 10000,
/obj/item/weapon/disk = 90,
/obj/item/weapon/caution = 15,
/obj/item/weapon/module = 100,
//STOCK PARTS,
/obj/item/weapon/stock_parts/capacitor/adv = 160,
/obj/item/weapon/stock_parts/scanning_module/adv = 160,
/obj/item/weapon/stock_parts/manipulator/nano = 160,
/obj/item/weapon/stock_parts/micro_laser/high = 160,
/obj/item/weapon/stock_parts/matter_bin/adv = 160,
/obj/item/weapon/stock_parts/capacitor/super = 300,
/obj/item/weapon/stock_parts/scanning_module/phasic = 300,
/obj/item/weapon/stock_parts/manipulator/pico = 250,
/obj/item/weapon/stock_parts/micro_laser/ultra = 290,
/obj/item/weapon/stock_parts/matter_bin/super = 310,
/obj/item/weapon/stock_parts/subspace/ansible = 500,
/obj/item/weapon/stock_parts/subspace/filter = 560,
/obj/item/weapon/stock_parts/subspace/amplifier = 540,
/obj/item/weapon/stock_parts/subspace/treatment = 570,
/obj/item/weapon/stock_parts/subspace/analyzer = 630,
/obj/item/weapon/stock_parts/subspace/crystal = 530,
/obj/item/weapon/stock_parts/subspace/transmitter = 620,
/obj/item/weapon/stock_parts = 80,
/obj/item/weapon/ectoplasm = 700,
/obj/item/weapon/toy/xmas_cracker = 20,
/obj/item/weapon/pinpointer/advpinpointer = 330,
/obj/item/weapon/pinpointer = 180,
/obj/item/weapon/airalarm_electronics = 90,
/obj/item/weapon/firealarm_electronics = 80,
/obj/item/weapon/camera_assembly = 35,
/obj/item/weapon/orion_ship = 100,
/obj/item/weapon/airlock_electronics/secure = 600,
/obj/item/weapon/airlock_electronics = 300,
/obj/item/weapon/cartridge = 50,
/obj/item/weapon/aiModule = 3000,
/obj/item/weapon/autopsy_scanner = 180,
//CARDS,
/obj/item/weapon/card/data/clown = 6000,
/obj/item/weapon/card/data = 300,
/obj/item/weapon/card/emag = 600,
/obj/item/weapon/card/id/silver = 200,
/obj/item/weapon/card/id/gold = 5000,
/obj/item/weapon/card/id/captains_spare = 5000,
/obj/item/weapon/card/id/syndicate_command = 7000,
/obj/item/weapon/card/id/centcom = 7000,
/obj/item/weapon/card/id/all_access = 10000,
/obj/item/weapon/card/id = 30,
/obj/item/weapon/flame/match = 1,
/obj/item/weapon/flame/lighter/zippo = 10,
/obj/item/weapon/plastique = 200,
/obj/item/weapon/extinguisher/mini = 20,
/obj/item/weapon/extinguisher = 40,
/obj/item/weapon/flamethrower = 60,
/obj/item/weapon/handcuffs/cable = 5,
/obj/item/weapon/handcuffs = 35,
/obj/item/weapon/rcd = 1000,
/obj/item/weapon/rcd_ammo = 50,
/obj/item/weapon/rsf = 300,
/obj/item/weapon/teleportation_scroll = 7000,
/obj/item/weapon/shield/riot/tact = 500,
/obj/item/weapon/shield/riot = 150,
/obj/item/weapon/shield/buckler = 200,
/obj/item/weapon/shield/energy = 1200,
//SURGERY,
/obj/item/weapon/retractor = 80,
/obj/item/weapon/hemostat = 90,
/obj/item/weapon/cautery = 110,
/obj/item/weapon/surgicaldrill = 130,
/obj/item/weapon/scalpel/laser1 = 300,
/obj/item/weapon/scalpel/laser2 = 600,
/obj/item/weapon/scalpel/laser3 = 900,
/obj/item/weapon/scalpel/manager = 1200,
/obj/item/weapon/scalpel = 60,
/obj/item/weapon/circular_saw = 140,
/obj/item/weapon/bonegel = 300,
/obj/item/weapon/FixOVein = 500,
/obj/item/weapon/bonesetter = 150,
/obj/item/weapon/locator = 100,
/obj/item/weapon/wrench = 30,
/obj/item/weapon/screwdriver = 15,
/obj/item/weapon/wirecutters = 25,
//WELDINGTOOLS,
/obj/item/weapon/weldingtool/largetank = 150,
/obj/item/weapon/weldingtool/hugetank = 300,
/obj/item/weapon/weldingtool/experimental = 600,
/obj/item/weapon/weldingtool = 100,
/obj/item/weapon/crowbar = 10,
/obj/item/weapon/beartrap = 35,
/obj/item/weapon/nullrod = 60,
/obj/item/weapon/weldpack = 300,
/obj/item/weapon/circuitboard/aicore = 6000,
/obj/item/weapon/circuitboard = 1000,
//GRENADES,
/obj/item/weapon/grenade/anti_photon = 200,
/obj/item/weapon/grenade/empgrenade = 180,
/obj/item/weapon/grenade/frag = 300,
/obj/item/weapon/grenade/spawnergrenade/vaurca = 700,
/obj/item/weapon/grenade/spawnergrenade/manhacks = 600,
/obj/item/weapon/grenade/spawnergrenade/spesscarp = 350,
/obj/item/weapon/grenade/spawnergrenade = 300,
/obj/item/weapon/grenade = 150,
/obj/item/weapon/implant = 100,
/obj/item/weapon/implanter = 80,
//MELEE,
/obj/item/weapon/melee/cultblade = 1500,
/obj/item/weapon/melee/energy/wizard = 15000,
/obj/item/weapon/melee/energy/glaive = 5400,
/obj/item/weapon/melee/energy/axe = 6000,
/obj/item/weapon/melee/energy = 4200,
/obj/item/weapon/melee/chainofcommand = 200,
/obj/item/weapon/melee/baton/stunrod = 350,
/obj/item/weapon/melee/baton/cattleprod = 30,
/obj/item/weapon/melee/baton = 80,
/obj/item/weapon/melee/classic_baton = 30,
/obj/item/weapon/melee/telebaton = 450,
/obj/item/weapon/melee/chainsword = 3000,
/obj/item/weapon/melee/ceremonial_sword = 2500,
/obj/item/weapon/melee/hammer = 1200,
/obj/item/weapon/melee/vaurca/navcomp = 1500,
/obj/item/weapon/melee/vaurca/rock = 700,
/obj/item/weapon/tank/jetpack = 390,
/obj/item/weapon/tank = 40,
/obj/item/weapon/contract = 20000,
/obj/item/weapon/ladder_mobile = 250,
/obj/item/weapon/contraband/poster = 25,
//MATERIAL,
/obj/item/weapon/material/sword = -120,
/obj/item/weapon/material/scythe = -100,
/obj/item/weapon/material/twohanded/fireaxe = -150,
/obj/item/weapon/material/harpoon = -70,
/obj/item/weapon/material = -5,
//RIGS,
/obj/item/weapon/rig/unathi/fancy = 30000,
/obj/item/weapon/rig/unathi = 17000,
/obj/item/weapon/rig/combat = 25000,
/obj/item/weapon/rig/ert = 20000,
/obj/item/weapon/rig/light/hacker = 13000,
/obj/item/weapon/rig/light/ninja = 16000,
/obj/item/weapon/rig/light/stealth = 11000,
/obj/item/weapon/rig/light = 14000,
/obj/item/weapon/rig/internalaffairs = 9000,
/obj/item/weapon/rig/merc = 25000,
/obj/item/weapon/rig/military = 30000,
/obj/item/weapon/rig/terminator = 30000,
/obj/item/weapon/rig = 15000,
/obj/item/weapon/forensics = 65,
/obj/item/weapon/evidencebag = 5,
/obj/item/weapon/sample = 15,
/obj/item/weapon/board = 15,
/obj/item/weapon/deck/holder = 10,
/obj/item/weapon/pack = 6,
/obj/item/weapon/holo = 0,
/obj/item/weapon/beach_ball/holoball = 0,
/obj/item/weapon/book/tome = 350,
/obj/item/weapon/book = 15,
/obj/item/weapon/barcodescanner = 130,
//CLOTHING,
//EARS,
/obj/item/clothing/ears/skrell = 100,
/obj/item/clothing/ears/bandanna = 20,
//GLASSES,
/obj/item/clothing/glasses/meson/prescription = 880,
/obj/item/clothing/glasses/meson = 800,
/obj/item/clothing/glasses/science = 400,
/obj/item/clothing/glasses/night = 1000,
/obj/item/clothing/glasses/regular/hipster = 400, //Hipstering is an expensive lifestyle yo,
/obj/item/clothing/glasses/regular = 300,
/obj/item/clothing/glasses/welding/superior = 450,
/obj/item/clothing/glasses/welding = 250,
/obj/item/clothing/glasses/sunglasses/prescription = 230,
/obj/item/clothing/glasses/sunglasses/sechud/tactical = 550,
/obj/item/clothing/glasses/sunglasses/sechud = 530,
/obj/item/clothing/glasses/thermal = 1990,
/obj/item/clothing/glasses/night = 1200,
/obj/item/clothing/glasses = 150,
//GLOVES,
/obj/item/clothing/gloves/boxing = 60,
/obj/item/clothing/gloves/yellow = 300,
/obj/item/clothing/gloves/fyellow = 25, //cheap cheap cheap,
/obj/item/clothing/gloves/captain = 100,
/obj/item/clothing/gloves/swat = 125,
/obj/item/clothing/gloves/combat = 400,
/obj/item/clothing/gloves/botanic_leather = 6,
/obj/item/clothing/gloves/force/syndicate = 1500,
/obj/item/clothing/gloves/force = 1000,
/obj/item/clothing/gloves = 5,
//MASKS,
/obj/item/clothing/mask/luchador = 60,
/obj/item/clothing/mask/breath/medical = 180,
/obj/item/clothing/mask/breath = 80,
/obj/item/clothing/mask/gas/plaguedoctor = 100,
/obj/item/clothing/mask/gas/swat = 200,
/obj/item/clothing/mask/gas/voice = 600,
/obj/item/clothing/mask/gas/swat/vox = 350,
/obj/item/clothing/mask/gas/tactical = 500,
/obj/item/clothing/mask/gas = 50,
/obj/item/clothing/mask/muzzle/tape = 2,
/obj/item/clothing/mask/muzzle = 100,
/obj/item/clothing/mask/surgical = 20,
/obj/item/clothing/mask/fakemoustache = 5,
/obj/item/clothing/mask/snorkel = 5,
/obj/item/clothing/mask/bluescarf = 10,
/obj/item/clothing/mask/redscarf = 15,
/obj/item/clothing/mask/greenscarf = 15,
/obj/item/clothing/mask/ninjascarf = 15,
/obj/item/clothing/mask/ai = 3000,
//SHOES,
/obj/item/clothing/shoes/galoshes = 50,
/obj/item/clothing/shoes/syndigaloshes = 250,
/obj/item/clothing/shoes/clown_shoes = 100,
/obj/item/clothing/shoes/cult = 350,
/obj/item/clothing/shoes/magboots = 350,
/obj/item/clothing/shoes/swat = 200,
/obj/item/clothing/shoes/combat = 450,
/obj/item/clothing/shoes = 25,
//SUITS,
/obj/item/clothing/suit/space/void/wizard = 5000,
/obj/item/clothing/suit/space/void/captain = 4000,
/obj/item/clothing/suit/space/void/merc = 3000,
/obj/item/clothing/suit/space/void/security = 3000,
/obj/item/clothing/suit/space/void = 2800,
/obj/item/clothing/suit/space/syndicate = 2200,
/obj/item/clothing/suit/space/skrell = 1500,
/obj/item/clothing/suit/space/vox = 1000,
/obj/item/clothing/suit/space/cult = 1050,
/obj/item/clothing/suit/space/emergency = 150,
/obj/item/clothing/suit/space = 730,
/obj/item/clothing/suit/unathi/mantle = 80,
/obj/item/clothing/suit/tajaran/furs = 90,
/obj/item/clothing/suit/cultrobes = 200,
/obj/item/clothing/suit/storage/vest/heavy/ert = 2500,
/obj/item/clothing/suit/storage/vest/merc = 3000,
/obj/item/clothing/suit/armor/vest/ert = 2500,
/obj/item/clothing/suit/armor/vest = 550,
/obj/item/clothing/suit/armor/riot = 700,
/obj/item/clothing/suit/armor/bulletproof = 700,
/obj/item/clothing/suit/armor/laserproof = 700,
/obj/item/clothing/suit/armor/reactive = 5000,
/obj/item/clothing/suit/armor/centcomm = 2000,
/obj/item/clothing/suit/armor/heavy = 1000,
/obj/item/clothing/suit/armor/hos = 1000,
/obj/item/clothing/suit/armor/tactical = 1500,
/obj/item/clothing/suit/armor = 500,
/obj/item/clothing/suit/bio_suit = 150,
/obj/item/clothing/suit/captunic/capjacket = 100,
/obj/item/clothing/suit/security/navyhos = 80,
/obj/item/clothing/suit/storage/hazardvest = 60,
/obj/item/clothing/suit/storage/toggle/labcoat = 55,
/obj/item/clothing/suit/bluetag = 20,
/obj/item/clothing/suit/redtag = 20,
/obj/item/clothing/suit/fire/heavy = 600,
/obj/item/clothing/suit/fire = 500,
/obj/item/clothing/suit/radiation = 450,
/obj/item/clothing/suit/bomb_suit = 300,
//HEADS,
/obj/item/clothing/head/collectable/petehat = 350,
/obj/item/clothing/head/collectable = 80,
/obj/item/clothing/head/hardhat = 180,
/obj/item/clothing/head/helmet/swat = 400,
/obj/item/clothing/head/helmet/gladiator = 280,
/obj/item/clothing/head/helmet/augment = 600,
/obj/item/clothing/head/helmet/riot = 500,
/obj/item/clothing/head/helmet/ablative = 500,
/obj/item/clothing/head/helmet/ballistic = 500,
/obj/item/clothing/head/helmet/merc = 1000,
/obj/item/clothing/head/helmet/tactical = 800,
/obj/item/clothing/head/helmet/gladiator = 300,
/obj/item/clothing/head/helmet/ert = 1000,
/obj/item/clothing/head/helmet/HoS = 800,
/obj/item/clothing/head/helmet = 250,
/obj/item/clothing/head/culthood = 150,
/obj/item/clothing/head/caphat/hop = 100,
/obj/item/clothing/head/caphat = 200,
/obj/item/clothing/head/centhat = 600,
/obj/item/clothing/head/hairflower = 5,
/obj/item/clothing/head/powdered_wig = 80,
/obj/item/clothing/head/justice = 30,
/obj/item/clothing/head/philosopher_wig = 70,
/obj/item/clothing/head/welding = 150,
/obj/item/clothing/head/bomb_hood = 200,
/obj/item/clothing/head/radiation = 250,
/obj/item/clothing/head/bio_hood = 100,
/obj/item/clothing/head/navy = 250,
/obj/item/clothing/head/dress/admiral = 1000,
/obj/item/clothing/head/dress = 350,
/obj/item/clothing/head/tajaran/scarf = 30,
/obj/item/clothing/head/helmet/space/void/wizard = 4000,
/obj/item/clothing/head/helmet/space/void/merc = 2000,
/obj/item/clothing/head/helmet/space/void/security = 2000,
/obj/item/clothing/head/helmet/space/void/captain = 3000,
/obj/item/clothing/head/helmet/space/void = 1900,
/obj/item/clothing/head/helmet/space/syndicate = 1200,
/obj/item/clothing/head/helmet/space/deathsquad = 2400,
/obj/item/clothing/head/helmet/space/vox = 1200,
/obj/item/clothing/head/helmet/space/skrell = 1200,
/obj/item/clothing/head/helmet/space/cult = 1300,
/obj/item/clothing/head/helmet/space/emergency = 250,
/obj/item/clothing/head/helmet/space = 450,
//ACCESSORIES,
/obj/item/clothing/accessory/storage = 55,
/obj/item/clothing/accessory/stethoscope = 70,
/obj/item/clothing/accessory/medal/gold/heroism = 1000,
/obj/item/clothing/accessory/medal/gold/captain = 800,
/obj/item/clothing/accessory/medal/gold = 600,
/obj/item/clothing/accessory/medal/silver = 300,
/obj/item/clothing/accessory/medal/iron = 150,
/obj/item/clothing/accessory/medal = 100,
/obj/item/clothing/accessory/armband = 30,
/obj/item/clothing/accessory/badge = 60,
/obj/item/clothing/accessory = 15,
//UNDERS,
/obj/item/clothing/under/rank/captain = 100,
/obj/item/clothing/under/rank/head_of_personnel = 60,
/obj/item/clothing/under/rank/head_of_personnel_whimsy = 80,
/obj/item/clothing/under/rank/chief_engineer = 95,
/obj/item/clothing/under/rank/research_director = 60,
/obj/item/clothing/under/rank/chief_medical_officer = 65,
/obj/item/clothing/under/rank/warden = 5,
/obj/item/clothing/under/rank/centcom = 200,
/obj/item/clothing/under/rank/fatigues = 250,
/obj/item/clothing/under/rank/service = 350,
/obj/item/clothing/under/rank/dress/admiral = 1000,
/obj/item/clothing/under/rank/dress = 450,
/obj/item/clothing/under/rank/centcom_commander = 300,
/obj/item/clothing/under/syndicate/tacticool = 60,
/obj/item/clothing/under/syndicate = 150,
/obj/item/clothing/under/tactical = 150,
/obj/item/clothing/under/ert = 200,
/obj/item/clothing/under/ccpolice = 250,
/obj/item/clothing/under/space = 400,
/obj/item/clothing = 50,
//DEVICES,
/obj/item/device/dociler = 450,
/obj/item/device/mmi = 1200,
/obj/item/device/kit/paint = 500,
/obj/item/device/kit = 100,
/obj/item/weapon/aicard = 6000,
/obj/item/device/chameleon = 4000,
/obj/item/device/paicard = 120,
/obj/item/device/powersink = 1800,
/obj/item/device/mass_spectrometer/adv = 400,
/obj/item/device/mass_spectrometer = 300,
/obj/item/device/reagent_scanner/adv = 600,
/obj/item/device/reagent_scanner = 500,
/obj/item/device/slime_scanner = 300,
/obj/item/device/transfer_valve = 50,
/obj/item/device/violin = 250,
/obj/item/device/pda = 60,
/obj/item/device/radio = 150,
/obj/item/device/assembly/igniter = 15,
/obj/item/device/assembly/infra = 10,
/obj/item/device/assembly/mousetrap = 5,
/obj/item/device/assembly/signaler = 30,
/obj/item/device/assembly = 50,
/obj/item/device/uv_light = 150,
/obj/item/device/eftpos = 30,
/obj/item/device = 90,
//ORGANS,
/obj/item/organ/heart = 1200,
/obj/item/organ/brain/golem = 3000,
/obj/item/organ/brain = 1200,
/obj/item/organ/pariah_brain = 5,
/obj/item/organ/vaurca/neuralsocket = 1500,
/obj/item/organ/stack/vox = 5000,
/obj/item/organ = 400,
//ITEMS,
/obj/item/slime_extract = 200,
/obj/item/robot_parts/robot_component = 250,
/obj/item/robot_parts = 30,
/obj/item/modular_computer/tablet = 1300,
/obj/item/modular_computer = 4000,
/obj/item/solar_assembly = 680,
/obj/item/ammo_casing = 5,
/obj/item/ammo_magazine = 30,
/obj/item/conveyor_construct = 100,
/obj/item/conveyor_switch_construct = 30,
/obj/item/supply_beacon = 5000,
/obj/item/frame = 60,
/obj/item/pipe = 100,
/obj/item/pipe_meter = 300,
/obj/item/mecha_parts/part/phazon_torso = 10000,
/obj/item/mecha_parts/part/phazon_head = 10000,
/obj/item/mecha_parts/part/phazon_left_arm = 10000,
/obj/item/mecha_parts/part/phazon_right_arm = 10000,
/obj/item/mecha_parts/part/phazon_left_leg = 10000,
/obj/item/mecha_parts/part/phazon_right_leg = 10000,
/obj/item/mecha_parts/part/phazon_armour = 10000,
/obj/item/mecha_parts/chassis/phazon = 10000,
/obj/item/mecha_parts/chassis = 1200,
/obj/item/mecha_parts/mecha_tracking = 400,
/obj/item/mecha_parts/mecha_equipment/teleporter = 3050,
/obj/item/mecha_parts/mecha_equipment/gravcatapult = 3000,
/obj/item/mecha_parts/mecha_equipment/armor_booster = 1100,
/obj/item/mecha_parts/mecha_equipment/repair_droid = 1900,
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay = 1300,
/obj/item/mecha_parts/mecha_equipment/generator/nuclear = 1700,
/obj/item/mecha_parts/mecha_equipment/generator = 1200,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser = 2000,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser = 1200,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy = 3000,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion = 1550,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse = 5000,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot = 4750,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg = 5800,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive = 2500,
/obj/item/mecha_parts/mecha_equipment = 1000,
/obj/item/mecha_parts = 500,
/obj/item/missile = 1200,
/obj/item/blueprints = 4000, //Information is valuable,
/obj/item/bodybag/cryobag = 600,
/obj/item/bodybag = 20,
/obj/item/glass_jar = 10,
/obj/item/target = 15,
/obj/item/inflatable = 30,
/obj/item/roller = 80,
/obj/item/rig_module/grenade_launcher = 1500,
/obj/item/rig_module/mounted/energy_blade = 5000,
/obj/item/rig_module/mounted/thermalldrill = 2500,
/obj/item/rig_module/mounted/kinetic_accelerator = 1500,
/obj/item/rig_module/mounted/plasmacutter = 2500,
/obj/item/rig_module/mounted/ion = 2000,
/obj/item/rig_module/mounted/xray = 3500,
/obj/item/rig_module/mounted/smg = 2500,
/obj/item/rig_module/mounted/pulse = 4500,
/obj/item/rig_module/mounted/taser = 1500,
/obj/item/rig_module/mounted/egun = 2100,
/obj/item/rig_module/mounted/energy_blade = 5500,
/obj/item/rig_module/mounted = 4100,
/obj/item/rig_module/stealth_field = 2500,
/obj/item/rig_module/teleporter = 3000,
/obj/item/rig_module/fabricator/energy_net = 1200,
/obj/item/rig_module/fabricator = 2800,
/obj/item/rig_module = 1000,
/obj/item/seeds = 10,
/obj/item/honey_frame = 15,
/obj/item/beehive_assembly = 100,
/obj/item/bee_pack = 200,
/obj/item/weedkiller = 30,
/obj/item/phylactery = 40000,
/obj/item/bluespace_crystal/artificial = 5000,
/obj/item/bluespace_crystal = 10000,
/obj/item/vaurca/box = 250,
/obj/item/hoist_kit = 150,
/obj/item = 5,
//STRUCTURES,
/obj/structure/ore_box = 12,
/obj/structure/constructshell = 100,
/obj/structure/cable = 1,
/obj/structure/particle_accelerator = 2000,
/obj/structure/droppod_door = 65,
/obj/structure/disposalconstruct = 0, //Similar to cables, they are assembled into something else,
/obj/structure/disposalpipe/tagger = 70,
/obj/structure/disposalpipe/sortjunction = 65,
/obj/structure/disposalpipe = 35,
/obj/structure/disposaloutlet = 65,
/obj/structure/boulder = 0, //just a dumb boulder,
/obj/structure/shuttle = 150,
/obj/structure/plasticflaps = 15,
/obj/structure/cult/pylon = 700,
/obj/structure/cult = 160,
/obj/structure/cryofeed = 450,
/obj/structure/AIcore = 6000,
/obj/structure/AIcore/deactivated = 7000,
/obj/structure/computerframe = 50,
/obj/structure/plushie = 7,
/obj/structure/bedsheetbin = 25,
/obj/structure/coatrack = 10,
/obj/structure/displaycase = 86,
/obj/structure/door_assembly = 35,
/obj/structure/girder = 15,
/obj/structure/grille = 5,
/obj/structure/inflatable = 1,
/obj/structure/janitorialcart = 120,
/obj/structure/kitchenspike = 35,
/obj/structure/lattice = 1,
/obj/structure/morgue = 100,
/obj/structure/crematorium = 600,
/obj/structure/device/piano = 1200, //pianos are expensive,
/obj/structure/noticeboard = 15,
/obj/structure/safe/floor = 180,
/obj/structure/safe = 200,
/obj/structure/sign = 25,
/obj/structure/dispenser = 500,
/obj/structure/transit_tube = 80,
/obj/structure/transit_tube_pod = 100,
/obj/structure/toilet = 50,
/obj/structure/alien = 300,
/obj/structure/closet = 15,
/obj/structure/bed = 7,
/obj/structure/holostool = 0,
/obj/structure/holohoop = 0,
/obj/structure/bookcase = 50,
/obj/structure/barricade = -1,
/obj/structure = 30,
//BOTS,
/mob/living/bot/cleanbot = 260,
/mob/living/bot/farmbot = 500,
/mob/living/bot/floorbot = 190,
/mob/living/bot/medbot = 600,
/mob/living/bot/secbot/ed209 = 1200,
/mob/living/bot/secbot = 800,
/mob/living/bot = 300,
//MOBS,
/mob/living/carbon/human = -10000,
/mob/living/carbon/slime = 5000,
/mob/living/silicon/robot = 10000,
/mob/living/silicon/pai = 1000,
/mob/living/silicon/ai = 50000,
/mob/living/silicon = 5000,
/mob/living/simple_animal/hostile/commanded/dog = 1000,
/mob/living/simple_animal/hostile/true_changeling = 20000,
/mob/living/simple_animal/hostile/biglizard = 10000,
/mob/living/simple_animal/hostile/bear/spatial = 2000,
/mob/living/simple_animal/hostile = 700,
/mob/living/simple_animal/construct = 10000,
/mob/living/simple_animal/mouse/king = 5000,
/mob/living/simple_animal/mouse = 10,
/mob/living/simple_animal/borer = 10000,
/mob/living/simple_animal/corgi/Ian = 1000, //Ian is valuable,
/mob/living/simple_animal/spiderbot = 3000,
/mob/living/simple_animal/cow = 2000, //Cow expensive,
/mob/living/simple_animal = 500,
/mob/living = 100,
//MECHAS,
/obj/mecha/combat/phazon = -100000,
/obj/mecha/combat/marauder/mauler = -80000,
/obj/mecha/combat/marauder/seraph = -70000,
/obj/mecha/combat/marauder = -60000,
/obj/mecha/combat/gygax/dark = -60000,
/obj/mecha/combat/gygax = -50000,
/obj/mecha/combat/honker = -45000,
/obj/mecha/combat/durand = -40000,
/obj/mecha/combat = -30000,
/obj/mecha = -20000,
//MACHINERY,
/obj/machinery/mineral/unloading_machine = -500,
/obj/machinery/mining/brace = -300,
/obj/machinery/drone_fabricator = -3000,
/obj/machinery/photocopier/faxmachine = -500,
/obj/machinery/papershredder = -80,
/obj/machinery/gravity_generator = -16000,
/obj/machinery/light = 25,
/obj/machinery/power/smes/buildable = -15000,
/obj/machinery/compressor = -4000,
/obj/machinery/power/turbine = -6000,
/obj/machinery/computer/turbine_computer = -2000,
/obj/machinery/chem_master = -6000,
/obj/machinery/chemical_dispenser = -5000,
/obj/machinery/conveyor = 200,
/obj/machinery/conveyor_switch = 100,
/obj/machinery/disposal = 500,
/obj/machinery/blackbox_recorder = -9500,
/obj/machinery/r_n_d/protolathe = -15000,
/obj/machinery/r_n_d/server = -20000,
/obj/machinery/r_n_d = -1000,
/obj/machinery/auto_cloner = -13000,
/obj/machinery/giga_drill = -1900,
/obj/machinery/artifact = -13500,
/obj/machinery/artifact_analyser = -11900,
/obj/machinery/artifact_harvester = -12300,
/obj/machinery/artifact_scanpad = -1800,
/obj/machinery/suspension_gen = -3000,
/obj/machinery/keycard_auth = -100,
/obj/machinery/power/supermatter/shard = 100000,
/obj/machinery/power/supermatter = 500000,
/obj/machinery/disease2/diseaseanalyser = -8000,
/obj/machinery/disease2/isolator/ = -9000,
/obj/machinery/atmospherics/pipe/simple/heat_exchanging = -1000,
/obj/machinery/atmospherics/pipe = -100,
/obj/machinery/atmospherics/portables_connector = -500,
/obj/machinery/atmospherics/tvalve = -150,
/obj/machinery/atmospherics/valve = -120,
/obj/machinery/atmospherics/binary/circulator = -2500,
/obj/machinery/atmospherics/binary/dp_vent_pump = -850,
/obj/machinery/atmospherics/binary/passive_gate = -1600,
/obj/machinery/atmospherics/pipeturbine = -3000,
/obj/machinery/atmospherics/binary/pump = -1900,
/obj/machinery/atmospherics/binary/pump/high_power = -2500,
/obj/machinery/atmospherics/omni/filter = -4000,
/obj/machinery/atmospherics/omni/mixer = -3600,
/obj/machinery/atmospherics/trinary/filter = -3300,
/obj/machinery/atmospherics/trinary/mixer = -3000,
/obj/machinery/atmospherics/unary/freezer = -6000,
/obj/machinery/atmospherics/unary/generator_input = -2500,
/obj/machinery/atmospherics/unary/heater = -6000,
/obj/machinery/atmospherics/unary/outlet_injector = -2300,
/obj/machinery/atmospherics/unary/oxygen_generator = -10000,
/obj/machinery/atmospherics/unary/vent_pump = -2000,
/obj/machinery/atmospherics/unary/vent_scrubber = -2300,
/obj/machinery/bodyscanner = -6000,
/obj/machinery/body_scanconsole = -1500,
/obj/machinery/ai_slipper = -500,
/obj/machinery/alarm = -800,
/obj/machinery/air_sensor = -800,
/obj/machinery/autolathe = -3300,
/obj/machinery/bluespacerelay = -4000,
/obj/machinery/button = 100,
/obj/machinery/cablelayer = -1700,
/obj/machinery/cell_charger = -90,
/obj/machinery/constructable_frame = -500,
/obj/machinery/cryopod = -3000,
/obj/machinery/deployable/barrier = -500,
/obj/machinery/floodlight = -200,
/obj/machinery/floor_light = -100,
/obj/machinery/floorlayer = -1500,
/obj/machinery/igniter = -300,
/obj/machinery/sparker = -500,
/obj/machinery/iv_drip = -100,
/obj/machinery/media/jukebox = -700,
/obj/machinery/magnetic_module = -500,
/obj/machinery/magnetic_controller = -500,
/obj/machinery/mass_driver = -500,
/obj/machinery/navbeacon = -90,
/obj/machinery/newscaster = -100,
/obj/machinery/nuclearbomb = -10000,
/obj/machinery/recharger = -200,
/obj/machinery/sleeper = -4000,
/obj/machinery/space_heater = -500,
/obj/machinery/ai_status_display = -600,
/obj/machinery/teleport = -15000,
/obj/machinery/camera = -700,
/obj/machinery/airlock_sensor = -800,
/obj/machinery/door/airlock = -800,
/obj/machinery/door/blast/shutters = -300,
/obj/machinery/door/blast = -1000,
/obj/machinery/door/firedoor = -600,
/obj/machinery/door = -100,
/obj/machinery/door_timer = -300,
/obj/machinery/embedded_controller/radio/airlock = -600,
/obj/machinery/gibber = -600,
/obj/machinery/microwave = -70,
/obj/machinery/pipedispenser = -100,
/obj/machinery/telecomms/broadcaster = -10000,
/obj/machinery/telecomms = -7000,
/obj/machinery/computer/mecha = -1000,
/obj/machinery/shower = -300,
/obj/machinery/acting/changer = -3000,
/obj/machinery/artillerycontrol = -1400,
/obj/machinery/dnaforensics = -1200,
/obj/machinery/microscope = -550,
/obj/machinery/atm = -4500,
/obj/machinery/readybutton = -0,
/obj/machinery/botany/editor = -16000,
/obj/machinery/botany = -9050,
/obj/machinery/seed_storage = -500,
/obj/machinery/beehive = -500,
/obj/machinery/portable_atmospherics/hydroponics/soil = 1, //its dirt,
/obj/machinery/portable_atmospherics/hydroponics = -2300,
/obj/machinery/librarypubliccomp = -600,
/obj/machinery/librarycomp = -1000,
/obj/machinery/libraryscanner = -1000,
/obj/machinery/bookbinder = -1200,
/obj/machinery/wish_granter = - 1000000,
/obj/machinery = -1000
) //Must be in descending order. Child before parents, otherwise it doesn't work.,
@@ -0,0 +1,22 @@
/obj/machinery/merchant_pad
name = "Teleportation Pad"
desc = "Place things here to trade."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "tele0"
anchored = 1
density = 0
/obj/machinery/merchant_pad/proc/get_target()
var/turf/T = get_turf(src)
for(var/a in T)
if(a == src || (!istype(a,/obj) && !istype(a,/mob/living)) || istype(a,/obj/effect))
continue
return a
/obj/machinery/merchant_pad/proc/get_targets()
. = list()
var/turf/T = get_turf(src)
for(var/a in T)
if(a == src || (!istype(a,/obj) && !istype(a,/mob/living)) || istype(a,/obj/effect))
continue
. += a
+227
View File
@@ -0,0 +1,227 @@
/datum/computer_file/program/merchant
filename = "mlist"
filedesc = "Merchant's List"
extended_desc = "Allows communication and trade between passing vessels, even while jumping."
program_icon_state = "comm"
nanomodule_path = /datum/nano_module/program/merchant
requires_ntnet = 0
available_on_ntnet = 0
size = 12
usage_flags = PROGRAM_CONSOLE
required_access_run = access_merchant
required_access_download = access_merchant
var/obj/machinery/merchant_pad/pad = null
var/current_merchant = 0
var/show_trades = 0
var/hailed_merchant = 0
var/last_comms = null
var/temp = null
var/bank = 0 //A straight up money till
/datum/nano_module/program/merchant
name = "Merchant's List"
/datum/computer_file/program/merchant/proc/get_merchant(var/num)
if(num > SStrade.traders.len)
num = SStrade.traders.len
if(num)
return SStrade.traders[num]
/datum/nano_module/program/merchant/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/list/data = host.initial_data()
var/show_trade = 0
var/hailed = 0
var/datum/trader/T
if(program)
var/datum/computer_file/program/merchant/P = program
data["temp"] = P.temp
data["mode"] = !!P.current_merchant
data["last_comms"] = P.last_comms
data["pad"] = !!P.pad
data["bank"] = P.bank
show_trade = P.show_trades
hailed = P.hailed_merchant
T = P.get_merchant(P.current_merchant)
data["mode"] = !!T
if(T)
data["traderName"] = T.name
data["origin"] = T.origin
data["hailed"] = hailed
if(show_trade)
var/list/trades = list()
if(T.trading_items.len)
for(var/i in 1 to T.trading_items.len)
trades += T.print_trading_items(i)
data["trades"] = trades
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "merchant.tmpl", "Merchant List", 575, 700, state = state)
ui.auto_update_layout = 1
ui.set_initial_data(data)
ui.open()
/datum/computer_file/program/merchant/proc/connect_pad()
for(var/obj/machinery/merchant_pad/P in orange(1,get_turf(computer)))
pad = P
return
/datum/computer_file/program/merchant/proc/test_fire()
if(pad && pad.get_target())
return 1
return 0
/datum/computer_file/program/merchant/proc/offer_money(var/datum/trader/T, var/num)
if(pad)
var/response = T.offer_money_for_trade(num, bank)
if(istext(response))
last_comms = T.get_response(response, "No thank you.")
else
last_comms = T.get_response("trade_complete", "Thank you!")
T.trade(null,num, get_turf(pad))
bank -= response
return
last_comms = "PAD NOT CONNECTED"
/datum/computer_file/program/merchant/proc/bribe(var/datum/trader/T, var/amt)
if(bank < amt)
last_comms = "ERROR: NOT ENOUGH FUNDS."
return
bank -= amt
last_comms = T.bribe_to_stay_longer(amt)
/datum/computer_file/program/merchant/proc/offer_item(var/datum/trader/T, var/num)
if(pad)
var/list/targets = pad.get_targets()
for(var/target in targets)
if(!computer_emagged && istype(target,/mob/living/carbon/human))
last_comms = "SAFETY LOCK ENABLED: SENTIENT MATTER UNTRANSMITTABLE"
return
var/response = T.offer_items_for_trade(targets,num, get_turf(pad))
if(istext(response))
last_comms = T.get_response(response,"No, a million times no.")
else
last_comms = T.get_response("trade_complete","Thanks for your business!")
return
last_comms = "PAD NOT CONNECTED"
/datum/computer_file/program/merchant/proc/sell_items(var/datum/trader/T)
if(pad)
var/list/targets = pad.get_targets()
var/response = T.sell_items(targets)
if(istext(response))
last_comms = T.get_response(response, "Nope. Nope nope nope.")
else
last_comms = T.get_response("trade_complete", "Glad to be of service!")
bank += response
return
last_comms = "PAD NOT CONNECTED"
/datum/computer_file/program/merchant/proc/transfer_to_bank()
if(pad)
var/list/targets = pad.get_targets()
for(var/target in targets)
if(istype(target, /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cash = target
bank += cash.worth
qdel(target)
last_comms = "ALL MONEY DETECTED ON PAD TRANSFERED"
return
last_comms = "PAD NOT CONNECTED"
/datum/computer_file/program/merchant/proc/get_money()
if(!pad)
last_comms = "PAD NOT CONNECTED. CANNOT TRANSFER"
return
var/turf/T = get_turf(pad)
var/obj/item/weapon/spacecash/bundle/B = new(T)
B.worth = bank
bank = 0
B.update_icon()
/datum/computer_file/program/merchant/Topic(href, href_list)
if(..())
return 1
var/mob/user = usr
if(href_list["PRG_connect_pad"])
. = 1
connect_pad()
if(href_list["PRG_continue"])
. = 1
temp = null
if(href_list["PRG_transfer_to_bank"])
. = 1
transfer_to_bank()
if(href_list["PRG_get_money"])
. = 1
get_money()
if(href_list["PRG_main_menu"])
. = 1
current_merchant = 0
if(href_list["PRG_merchant_list"])
if(SStrade.traders.len == 0)
. = 0
temp = "Cannot find any traders within broadcasting range."
else
. = 1
current_merchant = 1
hailed_merchant = 0
last_comms = null
if(href_list["PRG_test_fire"])
. = 1
if(test_fire())
temp = "Test Fire Successful"
else
temp = "Test Fire Unsuccessful"
if(href_list["PRG_scroll"])
. = 1
var/scrolled = 0
switch(href_list["PRG_scroll"])
if("right")
scrolled = 1
if("left")
scrolled = -1
var/new_merchant = Clamp(current_merchant + scrolled, 1, SStrade.traders.len)
if(new_merchant != current_merchant)
hailed_merchant = 0
last_comms = null
current_merchant = new_merchant
if(current_merchant)
var/datum/trader/T = get_merchant(current_merchant)
if(!T.can_hail())
last_comms = T.get_response("hail_deny", "No, I'm not speaking with you.")
. = 1
else
if(href_list["PRG_hail"])
. = 1
last_comms = T.hail(user)
show_trades = 0
hailed_merchant = 1
if(href_list["PRG_show_trades"])
. = 1
show_trades = !show_trades
if(href_list["PRG_insult"])
. = 1
last_comms = T.insult()
if(href_list["PRG_compliment"])
. = 1
last_comms = T.compliment()
if(href_list["PRG_offer_item"])
. = 1
offer_item(T,text2num(href_list["PRG_offer_item"]) + 1)
if(href_list["PRG_how_much_do_you_want"])
. = 1
last_comms = T.how_much_do_you_want(text2num(href_list["PRG_how_much_do_you_want"]) + 1)
if(href_list["PRG_offer_money_for_item"])
. = 1
offer_money(T, text2num(href_list["PRG_offer_money_for_item"])+1)
if(href_list["PRG_what_do_you_want"])
. = 1
last_comms = T.what_do_you_want()
if(href_list["PRG_sell_items"])
. = 1
sell_items(T)
if(href_list["PRG_bribe"])
. = 1
bribe(T, text2num(href_list["PRG_bribe"]))
@@ -29,6 +29,9 @@
supernatural = 1
see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
tameable = FALSE
var/nullblock = 0
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
@@ -37,6 +40,7 @@
var/list/construct_spells = list()
var/can_repair = 0
/mob/living/simple_animal/construct/cultify()
return
@@ -35,6 +35,7 @@
heat_damage_per_tick = 20
mob_size = 10
tameable = FALSE
/mob/living/simple_animal/hostile/alien/drone
name = "alien drone"
@@ -81,6 +81,7 @@
/mob/living/simple_animal/hostile/scarybat/cult
faction = "cult"
supernatural = 1
tameable = FALSE
/mob/living/simple_animal/hostile/scarybat/cult/cultify()
return
@@ -13,6 +13,8 @@
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
mob_push_flags = ALLMOBS
tameable = FALSE
response_help = "pets"
response_disarm = "shoves"
response_harm = "harmlessly punches"
@@ -34,23 +36,23 @@
min_oxy = 0
max_co2 = 0
max_tox = 0
var/is_devouring = FALSE
/mob/living/simple_animal/hostile/true_changeling/Initialize()
. = ..()
if(prob(25))
icon_state = "horror_alt"
icon_living = "horror_alt"
/mob/living/simple_animal/hostile/true_changeling/Life()
..()
adjustBruteLoss(-10) //it will slowly heal brute damage, making fire/laser a stronger option
/mob/living/simple_animal/hostile/true_changeling/mind_initialize()
..()
mind.assigned_role = "Changeling"
/mob/living/simple_animal/hostile/true_changeling/death(gibbed)
..()
if(!gibbed)
@@ -110,7 +112,7 @@
last_special = world.time + 100
src.is_devouring = FALSE
return
/mob/living/simple_animal/hostile/true_changeling/verb/dart(mob/living/target as mob in oview())
set name = "Launch Bone Dart"
set desc = "Launches a Bone Dart at a target."
@@ -26,6 +26,8 @@
known_commands = list("stay", "stop", "attack", "follow", "dance", "boogie", "boogy")
tameable = FALSE
/mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone)
. = ..()
if(!.)
@@ -16,6 +16,8 @@
speed = 4
mob_size = 14
tameable = FALSE
/mob/living/simple_animal/hostile/creature/cult
faction = "cult"
@@ -14,6 +14,8 @@
health = 80
environment_smash = 2
tameable = FALSE
harm_intent_damage = 10
melee_damage_lower = 15
melee_damage_upper = 15
@@ -28,6 +28,8 @@
minbodytemp = 0
speed = 4
tameable = FALSE
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
desc = "A smallish robot, this one is armed!"
@@ -26,6 +26,9 @@
/mob/living/simple_animal/hostile/proc/FindTarget()
if(!faction) //No faction, no reason to attack anybody.
return null
var/atom/T = null
stop_automated_movement = 0
for(var/atom/A in ListTargets(10))
@@ -36,6 +36,8 @@
faction = "mimic"
move_to_delay = 8
tameable = FALSE
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
@@ -37,3 +37,5 @@
heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp
cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
unsuitable_atoms_damage = 10
tameable = FALSE
@@ -49,6 +49,8 @@
var/has_loot = 1
faction = "malf_drone"
tameable = FALSE
/mob/living/simple_animal/hostile/retaliate/malf_drone/Initialize()
. = ..()
if(prob(5))
@@ -33,6 +33,8 @@
faction = "russian"
status_flags = CANPUSH
tameable = FALSE
/mob/living/simple_animal/hostile/russian/ranged
icon_state = "russianranged"
@@ -35,6 +35,8 @@
faction = "syndicate"
status_flags = CANPUSH
tameable = FALSE
/mob/living/simple_animal/hostile/syndicate/death()
..()
if(corpse)
@@ -159,6 +161,8 @@
max_n2 = 0
minbodytemp = 0
tameable = FALSE
/mob/living/simple_animal/hostile/viscerator/death()
..(null,"is smashed into pieces!")
var/T = get_turf(src)
@@ -100,6 +100,8 @@
var/can_nap = 0
var/icon_rest = null
var/tameable = TRUE //if you can tame it, used by the dociler for now
/mob/living/simple_animal/proc/beg(var/atom/thing, var/atom/holder)
visible_emote("gazes longingly at [holder]'s [thing]",0)
+7 -7
View File
@@ -329,16 +329,16 @@
character.buckled.set_dir(character.dir)
SSticker.mode.handle_latejoin(character)
if(character.mind.assigned_role != "Cyborg")
data_core.manifest_inject(character)
SSticker.minds += character.mind //Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
if(SSjobs.ShouldCreateRecords(rank))
if(character.mind.assigned_role != "Cyborg")
data_core.manifest_inject(character)
SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
//Grab some data from the character prefs for use in random news procs.
AnnounceArrival(character, rank, join_message)
else
AnnounceCyborg(character, rank, join_message)
AnnounceArrival(character, rank, join_message)
else
AnnounceCyborg(character, rank, join_message)
qdel(src)
@@ -82,3 +82,15 @@ ERT
ai_slot = new/obj/item/weapon/computer_hardware/ai_slot(src)
nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(src)
card_slot = new/obj/item/weapon/computer_hardware/card_slot(src)
// Merchant
/obj/item/modular_computer/console/preset/merchant
_app_preset_name = "merchant"
enrolled = 2
/obj/item/modular_computer/console/preset/merchant/install_default_hardware()
..()
ai_slot = new/obj/item/weapon/computer_hardware/ai_slot(src)
nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(src)
card_slot = new/obj/item/weapon/computer_hardware/card_slot(src)
@@ -162,3 +162,17 @@
new/datum/computer_file/program/crushercontrol()
)
return _prg_list
/datum/modular_computer_app_presets/merchant
name = "merchant"
display_name = "Merchant"
description = "A preset for the merchant console"
available = 0
/datum/modular_computer_app_presets/merchant/return_install_programs()
var/list/_prg_list = list(
new/datum/computer_file/program/filemanager(),
new/datum/computer_file/program/chatclient(),
new /datum/computer_file/program/merchant()
)
return _prg_list
@@ -213,3 +213,9 @@
return
else
..()
/obj/item/weapon/gun/launcher/pneumatic/small
name = "small pneumatic cannon"
desc = "It looks smaller than your garden variety cannon"
max_w_class = 1
w_class = 3
@@ -99,7 +99,7 @@
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
name = "Chloral Hydrate Bottle"
name = "chloral hydrate bottle"
desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
@@ -352,7 +352,7 @@
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
name = "Capsaicin Bottle"
name = "capsaicin bottle"
desc = "A small bottle. Contains hot sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
@@ -362,7 +362,7 @@
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/frostoil
name = "Frost Oil Bottle"
name = "frost oil bottle"
desc = "A small bottle. Contains cold sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
+21
View File
@@ -1569,6 +1569,27 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
sort_string = "NAADC"
/datum/design/circuit/mecha/phazon_main
name = "'Phazon' central control"
id = "phazon_main"
req_tech = list(TECH_DATA = 6, TECH_BLUESPACE = 6)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
sort_string = "NAAEA"
/datum/design/circuit/mecha/phazon_peri
name = "'Phazon' peripherals control"
id = "phazon_peri"
req_tech = list(TECH_DATA = 6, TECH_BLUESPACE = 6)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
sort_string = "NAAEB"
/datum/design/circuit/mecha/phazon_targ
name = "'Phazon' weapon control and targeting"
id = "phazon_targ"
req_tech = list(TECH_DATA = 6, TECH_COMBAT = 6, TECH_BLUESPACE = 6)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
sort_string = "NAAEC"
/datum/design/circuit/tcom
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
+3
View File
@@ -370,6 +370,9 @@ EVENT_CUSTOM_START_MAJOR 80;100
## Strength of ambient star light. Set to 0 or less to turn off. A value of 1 is unlikely to have a noticeable effect in most lighting systems.
STARLIGHT 0
## Chance, in percentage, of the merchant job slot being open at round start
MERCHANT_CHANCE 20
## Defines which races are allowed to join as ERT, in singular form. If unset, defaults to only human. Casing matters, separate using ;
## Example races include: Human, Tajara, Skrell, Unathi
# ERT_SPECIES Human;Skrell;Unathi
Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

+65
View File
@@ -0,0 +1,65 @@
{{if data.temp }}
<center>
<table>
<tr><td>{{:data.temp }}</td>
<tr><td>{{:helper.link('Continue', null, {'PRG_continue' : 1})}}</td>
</table>
</center>
{{else}}
<center><h3>Balance: {{:data.bank}} Credits</h3><br>
{{if data.mode}}
<div>
<div style="float: left">{{:helper.link('<=', null, {'PRG_scroll' : 'left'})}}</div>
<div>{{:helper.link('Main Menu', null, {'PRG_main_menu' : 1})}}</div>
<div style="float: right">{{:helper.link('=>', null, {'PRG_scroll' : 'right'})}}</div>
</div>
<center><h3>{{:data.traderName}}</h3><br>
Signal Origin: {{:data.origin}}<br>
{{if data.last_comms}}
<i>{{:data.last_comms}}</i>
{{/if}}
</center>
<br>
{{if data.hailed}}
{{if data.trades}}
{{:helper.link('Go Back', null, {'PRG_show_trades' : 1})}}
<br><br>
<h3>Trade Goods</h3>
<table>
{{for data.trades}}
<tr><td>{{:value}}</td>
<td>{{:helper.link('Trade', null, {'PRG_offer_item' : index})}}</td>
<td>{{:helper.link('Offer Money', null, {'PRG_offer_money_for_item' : index})}}</td>
<td>{{:helper.link('Ask Cost', null, {'PRG_how_much_do_you_want' : index})}}</td>
{{/for}}
</table>
{{else}}
{{:helper.link('List Goods', null, {'PRG_show_trades' : 1})}}<br><br>
{{:helper.link('Sell Items', null, {'PRG_sell_items' : 1})}}<br><br>
{{:helper.link('Compliment', null, {'PRG_compliment' : 1})}}<br><br>
<span class=itemLabel>Pay them to stay longer: </span><span class=itemContent>{{:helper.link('100', null, {'PRG_bribe' : 100})}} {{:helper.link('500', null, {'PRG_bribe' : 500})}} {{:helper.link('1000', null, {'PRG_bribe' : 1000})}}</span><br><br>
{{:helper.link('Ask What They Want', null, {'PRG_what_do_you_want': 1})}}<br><br>
{{:helper.link('Insult', null, {'PRG_insult' : 1})}}<br><br>
{{/if}}
{{else}}
{{:helper.link('Hail',null,{'PRG_hail': 1})}}
{{/if}}
{{else}}
<center>
<h2>Main Menu</h2>
<table style="text-align:center">
<tr><td>{{:helper.link('Open Communications', null, {'PRG_merchant_list' : 1})}}</td>
<tr><td>{{:helper.link('Test Fire Transporter', null, {'PRG_test_fire': 1 })}}</td>
<tr><td>{{:helper.link('Connect Pad', null, {'PRG_connect_pad' : 1})}}
{{if data.pad}}
<font color="green">Connected</font>
{{else}}
<font color="red">DISCONNECTED</font>
{{/if}}
</td>
<tr><td>{{:helper.link('Deposit Money', null, {'PRG_transfer_to_bank' : 1})}}</td>
<tr><td>{{:helper.link('Retrieve Money', null, {'PRG_get_money' : 1})}}</td>
</table>
</center>
{{/if}}
{{/if}}