diff --git a/aurorastation.dme b/aurorastation.dme index 3ab008995ec..894fd674880 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1764,6 +1764,8 @@ #include "code\modules\battlemonsters\items\furniture\dueling_area.dm" #include "code\modules\blob\blob.dm" #include "code\modules\cargo\bounty.dm" +#include "code\modules\cargo\cargo_categories.dm" +#include "code\modules\cargo\cargo_suppliers.dm" #include "code\modules\cargo\export_scanner.dm" #include "code\modules\cargo\exports.dm" #include "code\modules\cargo\randomstock.dm" @@ -1791,6 +1793,22 @@ #include "code\modules\cargo\exports\sheets.dm" #include "code\modules\cargo\exports\tools.dm" #include "code\modules\cargo\exports\weapons.dm" +#include "code\modules\cargo\items\atmos.dm" +#include "code\modules\cargo\items\cargo_items.dm" +#include "code\modules\cargo\items\cartridges.dm" +#include "code\modules\cargo\items\engineering.dm" +#include "code\modules\cargo\items\hospitality.dm" +#include "code\modules\cargo\items\hydroponics.dm" +#include "code\modules\cargo\items\medical.dm" +#include "code\modules\cargo\items\mining.dm" +#include "code\modules\cargo\items\miscellaneous.dm" +#include "code\modules\cargo\items\operations.dm" +#include "code\modules\cargo\items\recreation.dm" +#include "code\modules\cargo\items\robotics.dm" +#include "code\modules\cargo\items\science.dm" +#include "code\modules\cargo\items\security.dm" +#include "code\modules\cargo\items\supply.dm" +#include "code\modules\cargo\items\weaponry.dm" #include "code\modules\cargo\random_stock\_defs.dm" #include "code\modules\cargo\random_stock\large.dm" #include "code\modules\cargo\random_stock\t1_common.dm" diff --git a/code/controllers/subsystems/cargo.dm b/code/controllers/subsystems/cargo.dm index 7c7a8806bf7..f500ca9e3b0 100644 --- a/code/controllers/subsystems/cargo.dm +++ b/code/controllers/subsystems/cargo.dm @@ -1,6 +1,6 @@ //Config stuff -#define SUPPLY_DOCKZ 1 //Z-level of the Dock. -#define SUPPLY_STATIONZ 6 //Z-level of the Station. +#define SUPPLY_DOCKZ 1 //Z-level of the Dock. +#define SUPPLY_STATIONZ 6 //Z-level of the Station. #define SUPPLY_STATION_AREATYPE /area/supply/station //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE /area/supply/dock //Type of the supply shuttle area for dock @@ -70,14 +70,7 @@ SUBSYSTEM_DEF(cargo) supply_account = SSeconomy.get_department_account("Operations") //Load in the cargo items config - if(GLOB.config.cargo_load_items_from == "sql") - log_subsystem_cargo("SScargo: Attempting to Load from SQL") - load_from_sql() - else if(GLOB.config.cargo_load_items_from == "json") - log_subsystem_cargo("SScargo: Attempting to Load from JSON") - load_from_json() - else - log_game("SScargo: invalid load option specified in config") + load_cargo_files() setupExports() setupBounties() @@ -96,247 +89,74 @@ SUBSYSTEM_DEF(cargo) /datum/controller/subsystem/cargo/proc/reset_cargo() cargo_shipments = list() //List of the shipments to the station current_shipment = null //The current cargo shipment - cargo_items = list() //The list of items - cargo_categories = list() //The list of categories - cargo_suppliers = list() //The list of suppliers all_orders = list() //All orders last_item_id = 0 -//Load the cargo data from SQL -/datum/controller/subsystem/cargo/proc/load_from_sql() - if(!establish_db_connection(GLOB.dbcon)) - log_subsystem_cargo("SQL ERROR - Failed to connect. - Falling back to JSON") - return load_from_json() - else - //Reset the currently loaded data - reset_cargo() - - //Load the categories - var/DBQuery/category_query = GLOB.dbcon.NewQuery("SELECT id, name, display_name, description, icon, price_modifier FROM ss13_cargo_categories WHERE deleted_at IS NULL ORDER BY order_by ASC") - category_query.Execute() - while(category_query.NextRow()) - CHECK_TICK - add_category( - category_query.item[2], - category_query.item[3], - category_query.item[4], - category_query.item[5], - text2num(category_query.item[6])) - //Load the suppliers - var/DBQuery/supplier_query = GLOB.dbcon.NewQuery("SELECT id, short_name, name, description, tag_line, shuttle_time, shuttle_price, available, price_modifier FROM ss13_cargo_suppliers WHERE deleted_at is NULL") - supplier_query.Execute() - while(supplier_query.NextRow()) - CHECK_TICK - add_supplier( - supplier_query.item[2], - supplier_query.item[3], - supplier_query.item[4], - supplier_query.item[5], - supplier_query.item[6], - supplier_query.item[7], - supplier_query.item[8], - supplier_query.item[9]) - //Load the items - var/DBQuery/item_query = GLOB.dbcon.NewQuery("SELECT id, name, supplier, description, categories, price, items, access, container_type, groupable, item_mul FROM ss13_cargo_items WHERE deleted_at IS NULL AND approved_at IS NOT NULL AND supplier IS NOT NULL ORDER BY order_by ASC, name ASC, supplier ASC") - item_query.Execute() - while(item_query.NextRow()) - CHECK_TICK - var/item_id = item_query.item[1] - var/error_message = add_item( - item_query.item[1], - item_query.item[2], - item_query.item[3], - item_query.item[4], - item_query.item[5], - item_query.item[6], - item_query.item[7], - item_query.item[8], - item_query.item[9], - item_query.item[10], - item_query.item[11]) - if(error_message && istext(error_message)) - log_subsystem_cargo("SScargo: Error when loading item [item_id] from sql: [error_message]") - var/DBQuery/item_error_query = GLOB.dbcon.NewQuery("UPDATE ss13_cargo_items SET error_message = :error_message: WHERE id = :id:") - item_error_query.Execute(list("id"=item_id,"error_message"=error_message)) - - -//Loads the cargo data from JSON -/datum/controller/subsystem/cargo/proc/load_from_json() - var/list/cargoconfig = list() - - if(!(rustg_file_exists("config/cargo.json") == "true")) - log_config("The file config/cargo.json was not found, cargo items will not be loaded.") - return +//Load categories +/datum/controller/subsystem/cargo/proc/load_cargo_categories() + for(var/singleton/cargo_category/C as anything in (GET_SINGLETON_SUBTYPE_LIST(/singleton/cargo_category))) + log_subsystem_cargo("Loading category '[C.name]'.") + SScargo.cargo_categories[C.name] = C - try - cargoconfig = json_decode(return_file_text("config/cargo.json")) - catch(var/exception/ej) - log_subsystem_cargo("Warning: Could not load config, as cargo.json is missing - [ej]") - return +//Load Suppliers +/datum/controller/subsystem/cargo/proc/load_cargo_suppliers() + for(var/singleton/cargo_supplier/S as anything in (GET_SINGLETON_SUBTYPE_LIST(/singleton/cargo_supplier))) + log_subsystem_cargo("Loading supplier '[S.name]', with short name '[S.short_name]'.") + SScargo.cargo_suppliers[S.short_name] = S + +/datum/controller/subsystem/cargo/proc/load_cargo_items() + log_subsystem_cargo("Loading cargo items.") + var/id = 1 - //Reset the currently loaded data reset_cargo() - //Load the cargo categories - for (var/category in cargoconfig["categories"]) - CHECK_TICK - add_category( - cargoconfig["categories"][category]["name"], - cargoconfig["categories"][category]["display_name"], - cargoconfig["categories"][category]["description"], - cargoconfig["categories"][category]["icon"], - cargoconfig["categories"][category]["price_modifier"]) - //Load the suppliers - for (var/supplier in cargoconfig["suppliers"]) - CHECK_TICK - add_supplier( - supplier, - cargoconfig["suppliers"][supplier]["name"], - cargoconfig["suppliers"][supplier]["description"], - cargoconfig["suppliers"][supplier]["tag_line"], - cargoconfig["suppliers"][supplier]["shuttle_time"], - cargoconfig["suppliers"][supplier]["shuttle_price"], - cargoconfig["suppliers"][supplier]["available"], - cargoconfig["suppliers"][supplier]["price_modifier"]) - //Load the cargoitems - for (var/item in cargoconfig["items"]) - CHECK_TICK - var/error_message = add_item( - null, - cargoconfig["items"][item]["name"], - cargoconfig["items"][item]["supplier"], - cargoconfig["items"][item]["description"], - cargoconfig["items"][item]["categories"], - cargoconfig["items"][item]["price"], - cargoconfig["items"][item]["items"], - cargoconfig["items"][item]["access"], - cargoconfig["items"][item]["container_type"], - cargoconfig["items"][item]["groupable"], - cargoconfig["items"][item]["item_mul"]) - if(error_message && istext(error_message)) - log_subsystem_cargo("Error when loading item: [error_message]") - return 1 + // Get the list of all valid cargo items + for (var/singleton/cargo_item/I as anything in (GET_SINGLETON_SUBTYPE_LIST(/singleton/cargo_item))) + cargo_items[I.name] = I + I.id = id++ + I.get_adjusted_price() -//Add a new Category to the Cargo Subsystem -//Returns the /datum/cargo_category on success or a error message -/datum/controller/subsystem/cargo/proc/add_category(var/name,var/display_name,var/description,var/icon,var/price_modifier) - var/datum/cargo_category/cc = new() - cc.name = name - cc.display_name = display_name - cc.description = description - cc.icon = icon - cc.price_modifier = text2num(price_modifier) - - //Add the category to the cargo_categories list - cargo_categories[cc.name] = cc - return cc - -//Add a new Supplier to the Cargo Subsystem -//Returns the /datum/cargo_supplier/ on success or a error message -/datum/controller/subsystem/cargo/proc/add_supplier(var/short_name,var/name,var/description,var/tag_line,var/shuttle_time,var/shuttle_price,var/available,var/price_modifier) - var/datum/cargo_supplier/cs = new() - cs.short_name = short_name - cs.name = name - cs.description = description - cs.tag_line = tag_line - cs.shuttle_time = text2num(shuttle_time) - cs.shuttle_price = text2num(shuttle_price) - cs.available = text2num(available) - cs.price_modifier = text2num(price_modifier) - - cargo_suppliers[cs.short_name] = cs - return cs - -//Add a new item to the cargo subsystem, the categories and the items need to be a list or a JSON String -//Decoding of the string MUST take place before -//Returns the /datum/cargo_item on success or a error message -/datum/controller/subsystem/cargo/proc/add_item(var/id=null,var/name,var/supplier="nt",var/description,var/categories,var/price,var/items,var/access=0,var/container_type=CARGO_CONTAINER_CRATE,var/groupable=1,var/item_mul=1) - //TODO-CARGO: Maybe add the option to specify access as string instead of number - - //If no item ID is supplied generate one ourselfs (use the next free id) - //If one is supplied, update the item id if the one supplied is higher - if(!id) - id=get_next_item_id() - else - id = text2num(id) - if(id > last_item_id) - last_item_id = id - - var/datum/cargo_item/ci = new() - try - //Check if categories and items are a list and try decode them (from json) if they are not. - if(!islist(categories)) - categories = json_decode(categories) - - if(!islist(items)) - items = json_decode(items) - - ci.id = id - ci.name = name - ci.supplier = supplier - ci.description = description - ci.categories = categories - ci.price = text2num(price) - ci.items = items - ci.access = text2num(access) - ci.container_type = container_type - ci.groupable = text2num(groupable) - ci.item_mul = text2num(item_mul) - ci.amount = length(ci.items)*ci.item_mul - catch(var/exception/e) - log_subsystem_cargo("Error when loading item [name] - [id]: [e]") - qdel(ci) - return "Error when loading item [name] - [id]: [e]" - - var/path_error = null - for(var/item in ci.items) - var/itempath = text2path(ci.items[item]["path"]) - if(!ispath(itempath)) - log_subsystem_cargo("Warning - Attempted to add item with invalid path - [ci.id] - [ci.name] - [ci.items[item]["path"]]") - path_error += "Attempted to add item with invalid path - [ci.id] - [ci.name] - [ci.items[item]["path"]].\n" - - if(path_error) - return path_error - - //Check if a valid container is specified - if(!(ci.container_type in list(CARGO_CONTAINER_CRATE, CARGO_CONTAINER_FREEZER, CARGO_CONTAINER_BOX, CARGO_CONTAINER_BODYBAG))) - log_subsystem_cargo("Invalid container type specified for item [name] - [id]: Aborting") - qdel(ci) - return "Invalid container type specified for item [name] - [id]" - - //Verify the suppliers exist - var/datum/cargo_supplier/cs = get_supplier_by_name(ci.supplier) - if(!cs) - log_subsystem_cargo("[supplier] is not a valid supplier for item [name] - [id]") - qdel(ci) - return "[supplier] is not a valid supplier for item [name] - [id]" - - //Setting the supplier - ci.supplier_datum = cs - - //Add the item to the cargo_items list - cargo_items["[ci.id]"] = ci - - //Add the item to the suppliers items list - ci.supplier_datum.items.Add(ci) - - //Log a message if no categories are specified - if(ci.categories.len == 0) - log_subsystem_cargo("No categories specified for item [ci.name]") - ci.supplier_datum = null - qdel(ci) - return "No categories specified for item [name] - [id]" - - - //Add the item to the categories - for(var/category in ci.categories) - var/datum/cargo_category/cc = cargo_categories[category] - if(cc) //Check if the category exists - cc.items.Add(ci) + // Check if the category exists in SScargo.cargo_categories + if (!(I.category || SScargo.cargo_categories[I.category])) + log_subsystem_cargo("Error: Unable to find category '[I.category]' for item '[I.name]. Skipping.") + continue + else + var/singleton/cargo_category/item_category = SScargo.cargo_categories[I.category] + if (!item_category.items) + item_category.items = list() + item_category.items += I + log_subsystem_cargo("Inserted item '[I.name]' into category '[I.category]' with ID '[I.id]'.") + + if (!(I.supplier || SScargo.cargo_suppliers[I.supplier])) + log_subsystem_cargo("Error: Unable to find supplier '[I.supplier]' for item '[I.name]. Skipping.") + continue else - log_subsystem_cargo("Warning - Attempted to add [ci.name] item to category [category] that does not exist.") + var/singleton/cargo_supplier/item_supplier = SScargo.cargo_suppliers[I.supplier] + if (!item_supplier.items) + item_supplier.items = list() + item_supplier.items += I + I.supplier_data = item_supplier + log_subsystem_cargo("Inserted item '[I.name]' into supplier '[I.supplier]'.") - return ci + log_subsystem_cargo("Finished loading cargo items.") + +//Load cargo data from cargo_items.dm +/datum/controller/subsystem/cargo/proc/load_cargo_files() + log_subsystem_cargo("Starting to load cargo data from files.") + + //Reset the loaded cargo data + reset_cargo() + + //Add categories + load_cargo_categories() + + //Load suppliers + load_cargo_suppliers() + + //Load cargo items + load_cargo_items() + + log_subsystem_cargo("Finished loading cargo data from files.") /* Getting items, categories, suppliers and shipments @@ -352,23 +172,87 @@ SUBSYSTEM_DEF(cargo) /datum/controller/subsystem/cargo/proc/get_next_item_id() last_item_id++ return last_item_id -//Gets the items from a category -/datum/controller/subsystem/cargo/proc/get_items_for_category(var/category) - var/datum/cargo_category/cc = cargo_categories[category] - if(cc) - return cc.get_item_list() - else - return list() -//Gets the categories + +/// Returns a "default" cargo_category for usage in situations where one is needed. +/datum/controller/subsystem/cargo/proc/get_default_category() + var/list/categories = GET_SINGLETON_SUBTYPE_LIST(/singleton/cargo_category) + var/singleton/cargo_category/default_cat = categories[1] + log_subsystem_cargo("Default category set to '[initial(default_cat.name)]'.") + return initial(default_cat.name) + +/// Returns a string-formatted list of data for all suppliers and their information for use in TGUI. +/datum/controller/subsystem/cargo/proc/get_supplier_data(var/supplier_short_name) + var/list/supplier_data = list() + var/singleton/cargo_supplier/S = cargo_suppliers[supplier_short_name] + + if(!S) + log_subsystem_cargo("Error: Unable to find supplier '[supplier_short_name]'.") + return + + supplier_data += list( + "short_name" = S.short_name, + "name" = S.name, + "description" = S.description, + "tag_line" = S.tag_line, + "shuttle_time" = S.shuttle_time, + "shuttle_price" = S.shuttle_price, + "available" = S.available, + "price_modifier" = S.price_modifier, + ) + + return supplier_data + +/// Returns a string-formatted list of every item in each category and their information for use in TGUI. +/datum/controller/subsystem/cargo/proc/get_items_for_category(var/category_name) + var/list/item_list = list() + var/singleton/cargo_category/C = cargo_categories[category_name] + + if(!C) + log_subsystem_cargo("Error: get_items_for_category() was unable to find category '[category_name]'.") + return + + for(var/singleton/cargo_item/ci as anything in C.items) + + item_list += list(list( + "name" = ci.name, + "description" = ci.description, + "price" = ci.price, + "id" = ci.id, + "price_adjusted" = ci.adjusted_price, + "supplier" = ci.supplier, + "supplier_data" = get_supplier_data(ci.supplier), + "access" = ci.access != 0 ? get_access_desc(ci.access) : "none", + )) + + return item_list + +/// Returns a string-formatted list of categories for use in TGUI. /datum/controller/subsystem/cargo/proc/get_category_list() var/list/category_list = list() + for (var/cat_name in cargo_categories) - var/datum/cargo_category/cc = cargo_categories[cat_name] - category_list.Add(list(cc.get_list())) + // Get the singleton instance for the current category + var/singleton/cargo_category/cc = cargo_categories[cat_name] + + category_list += list(list( + "name" = cc.name, + "display_name" = cc.display_name, + "description" = cc.description, + "icon" = cc.icon, + "price_modifier" = cc.price_modifier, + )) + return category_list -//Get a category by name + +//Get category names /datum/controller/subsystem/cargo/proc/get_category_by_name(var/name) + // Check if the category exists in cargo_categories + if (!cargo_categories[name]) + log_subsystem_cargo("Error: Requested category '[name]' does not exist.") + return + + // Return the category if it exists return cargo_categories[name] //Gets a order by order id @@ -400,6 +284,7 @@ SUBSYSTEM_DEF(cargo) /* Submitting, Approving, Rejecting and Shipping Orders */ + //Gets the orders based on their status (submitted, approved, shipped) /datum/controller/subsystem/cargo/proc/get_orders_by_status(var/status, var/data_list=0) if(!status) @@ -413,6 +298,7 @@ SUBSYSTEM_DEF(cargo) else orders.Add(co) return orders + //Gets the value of orders based on their status, type is passed on to co.get_value /datum/controller/subsystem/cargo/proc/get_orders_value_by_status(var/status, var/type=0) if(!status) @@ -423,6 +309,7 @@ SUBSYSTEM_DEF(cargo) if(co.status == status) value += co.get_value(type) return value + //Gets the suppliers of the orders of a specific type /datum/controller/subsystem/cargo/proc/get_order_suppliers_by_status(var/status, var/pretty_names=0) if(!status) @@ -434,7 +321,7 @@ SUBSYSTEM_DEF(cargo) //Get the list of supplirs and add it to the suppliers list for(var/supplier in co.get_supplier_list()) if(pretty_names) - var/datum/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] + var/singleton/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] suppliers[cs.short_name] = cs.name else suppliers[supplier] = supplier @@ -498,13 +385,14 @@ SUBSYSTEM_DEF(cargo) log_subsystem_cargo("Warning: Tried to charge supply account but supply acount doesnt exist") return 0 return SSeconomy.charge_to_account(supply_account.account_number, "[commstation_name()] - Operations", "[charge_text]", "[commstation_name()] - Banking System", -charge_credits) + //Gets the pending shipment costs for the items that are about to be shipped to the station /datum/controller/subsystem/cargo/proc/get_pending_shipment_cost(var/status="approved") //Loop through all the orders marked as shipped and get the suppliers into a list of involved suppliers var/list/suppliers = get_order_suppliers_by_status(status) var/price = 0 for(var/supplier in suppliers) - var/datum/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] + var/singleton/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] if(cs) price += cs.shuttle_price return price @@ -514,7 +402,7 @@ SUBSYSTEM_DEF(cargo) var/list/suppliers = get_order_suppliers_by_status(status) var/time = 0 for(var/supplier in suppliers) - var/datum/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] + var/singleton/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] if(cs) time += cs.shuttle_time return time @@ -686,8 +574,8 @@ SUBSYSTEM_DEF(cargo) //Check if the supplier is still available for(var/datum/cargo_order_item/coi in co.items) - if(!coi.ci.supplier_datum.available) - log_subsystem_cargo("Order [co.order_id] could not be placed on the shuttle because supplier [coi.ci.supplier_datum.name] for item [coi.ci.name] is unavailable") + if(!coi.ci.supplier_data.available) + log_subsystem_cargo("Order [co.order_id] could not be placed on the shuttle because supplier [coi.ci.supplier_data.name] for item [coi.ci.name] is unavailable") continue //Check if there is enough money to ship the order @@ -700,34 +588,27 @@ SUBSYSTEM_DEF(cargo) //Spawn the crate var/containertype = co.get_container_type() - var/obj/A = new containertype(pickedloc) + var/obj/crate = new containertype(pickedloc) //Label the crate - A.name_unlabel = A.name - A.name = "[A.name] ([co.order_id] - [co.ordered_by])" - A.verbs += /atom/proc/remove_label + crate.name_unlabel = crate.name + crate.name = "[crate.name] ([co.order_id] - [co.ordered_by])" + crate.verbs += /atom/proc/remove_label //Set the access requirement if(co.required_access.len > 0) - A.req_access = co.required_access.Copy() + crate.req_access = co.required_access.Copy() //Loop through the items and spawn them for(var/datum/cargo_order_item/coi in co.items) if(!coi) continue - for(var/j=1;j<=coi.ci.item_mul;j++) - for(var/name in coi.ci.items) - var/path = coi.ci.items[name]["path"] - var/atom/item = new path(A) - //Customize the items - for(var/var_name in coi.ci.items[name]["vars"]) - try - item.vars[var_name] = coi.ci.items[name]["vars"][var_name] - catch(var/exception/e) - log_subsystem_cargo("Bad variable name [var_name] for item name: [coi.ci.name] id: [coi.ci.id] - [e]") + for(var/_ in 1 to coi.ci.spawn_amount) + for(var/item_typepath in coi.ci.items) + new item_typepath(crate) //Spawn the Paper Inside - var/obj/item/paper/P = new(A) + var/obj/item/paper/P = new(crate) P.set_content_unsafe("[co.order_id] - [co.ordered_by]", co.get_report_delivery_order()) //Shuttle is loaded now - Charge cargo for it diff --git a/code/datums/cargo.dm b/code/datums/cargo.dm index e0c5df933c2..05a120cde7f 100644 --- a/code/datums/cargo.dm +++ b/code/datums/cargo.dm @@ -1,113 +1,5 @@ -/* - A item orderable via cargo -*/ -/datum/cargo_item - var/id = 0 //ID of the item - var/name = "Cargo Item" //Name of the item - var/supplier = "rand" //ID of the supplier - var/datum/cargo_supplier/supplier_datum = null //Datum of the supplier - var/description = "You should not see this" //Description of the item - var/list/categories = list() //List of categories this item appears in - var/price = 0 //The price of the item - var/list/items = list() - var/amount = 1 //Total Amount of items in the crate (including multiplier) - var/item_mul = 1 //Multiplier of the items - var/access = null //What access requirement should be added to the container - var/container_type = "crate" //crate or box - var/groupable = 1 //If the item can be thrown into the same container as other items - -//Gets a list of the cargo item - To be json encoded -/datum/cargo_item/proc/get_list() - var/list/data = list() - data["id"] = id - data["name"] = name - data["description"] = description - data["categories"] = categories - data["price"] = price - data["amount"] = amount - data["items"] = items - data["supplier"] = supplier - data["supplier_data"] = supplier_datum.get_list() - - //Adjust the price based on the supplier adjustment and the categories - data["price_adjusted"] = get_adjusted_price() - return data - -/datum/cargo_item/proc/get_adjusted_price() - . = price - . *= supplier_datum.get_total_price_coefficient() - for(var/category in categories) - var/datum/cargo_category/cc = SScargo.get_category_by_name(category) - if(cc) - . *= cc.price_modifier - - -/* - A supplier of items -*/ -/datum/cargo_supplier - var/short_name = "" //Short name of the cargo supplier - var/name = "" //Long name of the cargo supplier - var/description = "" //Description of the supplier - var/tag_line = "" //Tag line of the supplier - var/shuttle_time = 0 //Time the shuttle takes to get to the supplier - var/shuttle_price = 0 //Price to call the shuttle - var/available = 1 //If the supplier is available - var/price_modifier = 1 //Price modifier for the supplier - var/list/items = list() //List of items of tha supplier - -//Gets a list of supplier - to be json encoded -/datum/cargo_supplier/proc/get_list() - var/list/data = list() - data["short_name"] = short_name - data["name"] = name - data["description"] = description - data["tag_line"] = tag_line - data["shuttle_time"] = shuttle_time - data["shuttle_price"] = shuttle_price - data["available"] = available - data["price_modifier"] = price_modifier - return data - -/datum/cargo_supplier/proc/get_total_price_coefficient() - var/final_coef = price_modifier - if(SSatlas.current_sector) - if(short_name in SSatlas.current_sector.cargo_price_coef) - final_coef = SSatlas.current_sector.cargo_price_coef[short_name] * price_modifier - - return final_coef -/* - A category displayed in the cargo order app -*/ -/datum/cargo_category - var/name = "cargo_category" //Name of the category - var/display_name = "Cargo Category" - var/description = "You should not see this" //Description of the Category - var/icon = "gear" //NanoUI Icon for the category - var/price_modifier = 1 //Price Modifier for the category - var/list/items = list() //List of items in the category - -// Gets a list of the cargo category - to be json encoded -/datum/cargo_category/proc/get_list() - var/list/data = list() - data["name"] = name - data["display_name"] = display_name - data["description"] = description - data["icon"] = icon - data["price_modifier"] = price_modifier - return data - -// Gets a list of the items in the cargo category - to be json encoded -/datum/cargo_category/proc/get_item_list() - var/list/item_list = list() - for(var/datum/cargo_item/ci in items) - item_list.Add(list(ci.get_list())) - return item_list +//NOTE: Cargo orders, categories and suppliers have been moved to singletons (10/11/2024). -/* - A order placed in the cargo order app. - Contains multiple order items -*/ /datum/cargo_order var/list/items = list() //List of cargo_items in the order var/order_id = 0 //ID of the order @@ -151,8 +43,8 @@ /datum/cargo_order/proc/get_object_list() var/list/object_list = list() for (var/datum/cargo_order_item/coi in items) - for(var/object in coi.ci.items) - object_list.Add(object) + for(var/atom/object in coi.ci.items) + object_list.Add(object.name) return object_list // Gets a list of the order data - Formatted as list to be json_encoded @@ -306,7 +198,7 @@ var/list/supplier_list = get_supplier_list() var/cost = 0 for(var/supplier in supplier_list) - var/datum/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] + var/singleton/cargo_supplier/cs = SScargo.cargo_suppliers[supplier] if(cs) cost += cs.shuttle_price return cost @@ -472,21 +364,20 @@ specifies the item, the supplier and the price of the item */ /datum/cargo_order_item - var/datum/cargo_item/ci //Item that has been ordered + var/singleton/cargo_item/ci //Item that has been ordered var/price //Price of the item with the given supplier var/item_id //Item id in the order //TODO-CARGO: Maybe add the option to set a fake item for traitors here -> So that cargo cant see what they are really ordering //Calculate Price /datum/cargo_order_item/proc/calculate_price() - price = ci.get_adjusted_price() - return price + price = ci.adjusted_price // Gets a list of the cargo order item - to be json encoded /datum/cargo_order_item/proc/get_list() var/list/data = list() data["name"] = ci.name - data["supplier_name"] = ci.supplier_datum.name + data["supplier_data"] = ci.supplier_data data["amount"] = ci.amount data["price"] = price data["item_id"] = item_id diff --git a/code/modules/background/space_sectors/badlands.dm b/code/modules/background/space_sectors/badlands.dm index cf7bac1e6f0..e687b0c8731 100644 --- a/code/modules/background/space_sectors/badlands.dm +++ b/code/modules/background/space_sectors/badlands.dm @@ -82,7 +82,23 @@ guaranteed_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/adhomai) scheduled_port_visits = list("Thursday", "Sunday") ports_of_call = list("the city of Nal'tor", "the city of Kaltir", "the city of Crevus") - cargo_price_coef = list("nt" = 1.2, "hpi" = 1.2, "zhu" = 1.2, "een" = 1.2, "get" = 1.2, "arz" = 1.2, "blm" = 1.2, "iac" = 1.2, "zsc" = 0.5, "vfc" = 1.2, "bis" = 1.2, "xmg" = 1.2, "npi" = 1.2) + cargo_price_coef = list( + "nanotrasen" = 1.2, + "orion" = 1.1, + "hephaestus" = 1.2, + "zeng_hu" = 1.2, + "eckharts" = 1.2, + "getmore" = 1.2, + "arizi" = 1.2, + "blam" = 1.2, + "iac" = 1.2, + "zharkov" = 0.5, + "virgo" = 1.2, + "bishop" = 1.2, + "xion" = 1.2, + "zavodskoi" = 1.2, + ) + starlight_color = "#50b7bb" starlight_power = 2 starlight_range = 4 @@ -138,7 +154,22 @@ starlight_color = "#f8711e" starlight_power = 2 starlight_range = 4 - cargo_price_coef = list("nt" = 1.5, "hpi" = 0.5, "zhu" = 1.5, "een" = 1.5, "get" = 1.2, "arz" = 0.5, "blm" = 1.2, "iac" = 1.0, "zsc" = 0.9, "vfc" = 1.2, "bis" = 1.5, "xmg" = 0.6, "npi" = 1.5) + cargo_price_coef = list( + "nanotrasen" = 1.5, + "orion" = 0.8, + "hephaestus" = 0.5, + "zeng_hu" = 1.5, + "eckharts" = 1.5, + "getmore" = 1.2, + "arizi" = 0.5, + "blam" = 1.2, + "iac" = 1.0, + "zharkov" = 0.9, + "virgo" = 1.2, + "bishop" = 1.5, + "xion" = 0.6, + "zavodskoi" = 1.5, + ) sector_welcome_message = 'sound/AI/welcome_hegemony.ogg' scheduled_port_visits = list("Thursday", "Sunday") ports_of_call = list("the city of Skalamar") diff --git a/code/modules/background/space_sectors/coalition/coalition.dm b/code/modules/background/space_sectors/coalition/coalition.dm index 3e2a4653fda..e062f8631d1 100644 --- a/code/modules/background/space_sectors/coalition/coalition.dm +++ b/code/modules/background/space_sectors/coalition/coalition.dm @@ -17,7 +17,23 @@ description = "The region most devastated by the Interstellar War, the majority of the Weeping Stars has yet to recover from the damage it suffered during the War and much of it remains underdeveloped and sparsely inhabited. During the hegemonic era of the Solarian Alliance, when the Alliance stretched from Sol to the edge of known space, this region was known as the Inner Solarian Frontier and was intended to serve as a highly-developed region for humanity to thrive in. Massive amounts of funds were used to build an infrastructure which was still incomplete when war broke out in 2277, and the shattered ruins of long-lost Solarian hegemonic era structures and projects are present throughout the region." skybox_icon = "weeping_stars" possible_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid, /obj/effect/overmap/visitable/sector/exoplanet/grass/grove, /obj/effect/overmap/visitable/sector/exoplanet/barren, /obj/effect/overmap/visitable/sector/exoplanet/lava, /obj/effect/overmap/visitable/sector/exoplanet/desert, /obj/effect/overmap/visitable/sector/exoplanet/snow) - cargo_price_coef = list("nt" = 1.2, "hpi" = 0.8, "zhu" = 0.8, "een" = 1.2, "get" = 1.2, "arz" = 1.2, "blm" = 1.2, "iac" = 1.2, "zsc" = 0.8, "vfc" = 1.2, "bis" = 0.8, "xmg" = 0.8, "npi" = 0.8) + cargo_price_coef = list( + "nanotrasen" = 1.2, + "orion" = 0.8, + "hephaestus" = 0.8, + "zeng_hu" = 0.8, + "eckharts" = 1.2, + "getmore" = 1.2, + "arizi" = 1.2, + "blam" = 1.2, + "iac" = 1.2, + "zharkov" = 0.8, + "virgo" = 1.2, + "bishop" = 0.8, + "xion" = 0.8, + "zavodskoi" = 0.8, + ) + starlight_color = "#615bff" starlight_power = 2 starlight_range = 4 @@ -48,7 +64,23 @@ description = "The system of Burzsia serves as a resource hub solely for the corporate interests of Hephaestus Industries, with vast mining infrastructure and sprawling supply ports dotted all over the system. Hephaestus ships, enormous freighters and personnel transportation vessels dominate the area, with corporate security being extremely tight. Private vessels are allowed transit and rest if needed, though always under the close surveillance of Hephaestus security and local executives. A population of local off-worlders has also been present before corporate domination, but mostly leave any external relations to the company that has, at this point, taken upon it to represent virtually all interests of the natives." skybox_icon = "weeping_stars" possible_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/burzsia, /obj/effect/overmap/visitable/sector/exoplanet/burzsia) - cargo_price_coef = list("nt" = 1.2, "hpi" = 0.4, "zhu" = 0.8, "een" = 1.2, "get" = 1.2, "arz" = 1.2, "blm" = 1.2, "iac" = 1.2, "zsc" = 0.8, "vfc" = 1.2, "bis" = 0.8, "xmg" = 0.8, "npi" = 0.8) + cargo_price_coef = list( + "nanotrasen" = 1.2, + "orion" = 1, + "hephaestus" = 0.4, + "zeng_hu" = 0.8, + "eckharts" = 1.2, + "getmore" = 1.2, + "arizi" = 1.2, + "blam" = 1.2, + "iac" = 1.2, + "zharkov" = 1.2, + "virgo" = 1.2, + "bishop" = 0.8, + "xion" = 0.8, + "zavodskoi" = 0.8, + ) + starlight_color = "#615bff" starlight_power = 2 starlight_range = 4 @@ -62,7 +94,19 @@ skybox_icon = "haneunim" possible_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/barren/qixi, /obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/ice/haneunim, /obj/effect/overmap/visitable/sector/exoplanet/barren/hwanung, /obj/effect/overmap/visitable/sector/exoplanet/lava/huozhu) guaranteed_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/konyang) - cargo_price_coef = list("nt" = 1.1, "hpi" = 0.7, "zhu" = 0.4, "een" = 1.0, "get" = 1.1, "arz" = 1.8, "blm" = 0.9, "iac" = 1.2, "zsc" = 1.8, "vfc" = 0.9, "bis" = 0.4, "xmg" = 0.7, "npi" = 0.8) + cargo_price_coef = list( + "nanotrasen" = 1.1, + "orion" = 0.7, + "hephaestus" = 0.7, + "zeng_hu" = 0.6, + "eckharts" = 1, + "blam" = 0.9, + "zharkov" = 1.2, + "virgo" = 0.9, + "bishop" = 0.5, + "xion" = 0.8, + "zavodskoi" = 0.8, + ) ports_of_call = list("the corporate district of Aoyama") scheduled_port_visits = list("Saturday", "Sunday") diff --git a/code/modules/background/space_sectors/space_sector.dm b/code/modules/background/space_sectors/space_sector.dm index dd2ce6b2ebd..9c991d9dcae 100644 --- a/code/modules/background/space_sectors/space_sector.dm +++ b/code/modules/background/space_sectors/space_sector.dm @@ -12,8 +12,23 @@ var/list/possible_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/snow, /obj/effect/overmap/visitable/sector/exoplanet/desert) ///Guaranteed planets to spawn. This ignores the map exoplanet limit, so don't put too many planets in here. var/list/guaranteed_exoplanets = list() - var/list/cargo_price_coef = list("nt" = 1, "hpi" = 1, "zhu" = 1, "een" = 1, "get" = 1, "arz" = 1, "blm" = 1, - "iac" = 1, "zsc" = 1, "vfc" = 1, "bis" = 1, "xmg" = 1, "npi" = 1) //how much the space sector afffects how expensive is ordering from that cargo supplier + var/list/cargo_price_coef = list( //how much the space sector afffects how expensive is ordering from that cargo supplier + "nanotrasen" = 1, + "orion" = 1, + "hephaestus" = 1, + "zeng_hu" = 1, + "eckharts" = 1, + "getmore" = 1, + "arizi" = 1, + "blam" = 1, + "iac" = 1, + "zharkov" = 1, + "virgo" = 1, + "bishop" = 1, + "xion" = 1, + "zavodskoi" = 1, + ) + var/skybox_icon = "ceti" /// An associated list of lore radio stations formatted like so: list("station name" = "path_to_broadcast.txt") diff --git a/code/modules/background/space_sectors/tauceti.dm b/code/modules/background/space_sectors/tauceti.dm index dd3b38b56b9..8aa39062988 100644 --- a/code/modules/background/space_sectors/tauceti.dm +++ b/code/modules/background/space_sectors/tauceti.dm @@ -3,8 +3,14 @@ description = "Tau Ceti is a system located in close proximity of Sol, and serves as the main base of operation for the megacorporation NanoTrasen. Tau Ceti is governed by the \ Republic of Biesel, a young Republic that became independent of the economically troubled Sol Alliance in 2452 due to heavy pressure by NanoTrasen. There is still resentment in \ the Sol Alliance over the loss of such a wealthy system, while NanoTrasen continues to have a heavy hand in all levels of Tau Ceti." - cargo_price_coef = list("nt" = 0.8, "hpi" = 0.8, "zhu" = 0.8, "een" = 1, "get" = 0.8, "arz" = 1, "blm" = 1, - "iac" = 1, "zsc" = 1, "vfc" = 1, "bis" = 0,8, "xmg" = 0.8, "npi" = 0.8) + cargo_price_coef = list( + "nanotrasen" = 0.8, + "orion" = 1, + "getmore" = 0.7, + "arizi" = 1.2, + "vysoka" = 1.2, + ) + guaranteed_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/biesel) possible_exoplanets = list(/obj/effect/overmap/visitable/sector/exoplanet/lava/caprice, /obj/effect/overmap/visitable/sector/exoplanet/desert/luthien, /obj/effect/overmap/visitable/sector/exoplanet/barren/valkyrie, /obj/effect/overmap/visitable/sector/exoplanet/snow/new_gibson, /obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/ice/chandras, /obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/dumas) diff --git a/code/modules/cargo/cargo_categories.dm b/code/modules/cargo/cargo_categories.dm new file mode 100644 index 00000000000..c1f60cdd574 --- /dev/null +++ b/code/modules/cargo/cargo_categories.dm @@ -0,0 +1,148 @@ +/singleton/cargo_category + + /// The internal name of the category. Items belonging to the category must have their "category" name match this exactly. + var/name = "category" + + /// The display name of this category. Displayed as the "category" on user interfaces such as the Cargo Order console. + var/display_name = "Generic Category" + + /// The description of the category. + var/description = "A generic category." + + /// The FontAwesome icon of this category. + var/icon = "box" + + /// Items belonging to this category will have their prices multiplied by this factor. Default 1. + var/price_modifier = 1 + + /// AUTO-POPULATED: The list of items in this category. + var/list/items = list() + + /// The shipment data of this category. + var/list/shipment_data = list( + "shipment_num" = 0, + "shipment_cost_sell" = 0, + "shipment_cost_purchase" = 0, + "shipment_invoice" = "", + "shuttle_fee" = 0, + "shuttle_time" = 0, + "shuttle_called_by" = "", + "shuttle_recalled_by" = "", + "completed" = 0 + ) + +/// Returns a string-formatted list of the cargo category's properties, to be used in TGUI. +/singleton/cargo_category/proc/get_list() + var/list/data = list() + data["name"] = src.name + data["display_name"] = src.display_name + data["description"] = src.description + data["icon"] = src.icon + data["price_modifier"] = src.price_modifier + return data + +// Categories are displayed in the console in the order below. + +/singleton/cargo_category/supply + name = "supply" + display_name = "Supply" + description = "Supplies, supplies, and supplies for the Supply department." + icon = "box" + price_modifier = 1 + +/singleton/cargo_category/operations + name = "operations" + display_name = "Operations" + description = "Maintenance and utility items for ship operations." + icon = "clipboard" + price_modifier = 1 + +/singleton/cargo_category/mining + name = "mining" + display_name = "Mining" + description = "Equipment for miners." + icon = "gem" + price_modifier = 1 + +/singleton/cargo_category/robotics + name = "robotics" + display_name = "Robotics" + description = "Equipment for robots, and the people that make them." + icon = "robot" + price_modifier = 1 + +/singleton/cargo_category/engineering + name = "engineering" + display_name = "Engineering" + description = "Tools, machinery, and supplies for the Engineering department." + icon = "wrench" + price_modifier = 1 + +/singleton/cargo_category/atmos + name = "atmos" + display_name = "Atmospherics" + description = "Canisters and tanks for Atmospherics." + icon = "gauge-high" + price_modifier = 1 + +/singleton/cargo_category/hospitality + name = "hospitality" + display_name = "Hospitality" + description = "Food, beverage, and supplies for hospitality establishments like the bar or kitchen." + icon = "utensils" + price_modifier = 1 + +/singleton/cargo_category/hydroponics + name = "hydroponics" + display_name = "Hydroponics" + description = "Seeds, fertilizers, and supplies for the hydroponics bay." + icon = "leaf" + price_modifier = 1 + +/singleton/cargo_category/recreation + name = "recreation" + display_name = "Recreation" + description = "Fun toys and games." + icon = "guitar" + price_modifier = 1 + +/singleton/cargo_category/medical + name = "medical" + display_name = "Medical" + description = "Medicine, chemicals, and supplies for the Medical department." + icon = "heart" + price_modifier = 1 + +/singleton/cargo_category/cartridges + name = "cartridges" + display_name = "Cartridges" + description = "Chemical cartridges for reagent dispensers." + icon = "flask" + price_modifier = 1 + +/singleton/cargo_category/science + name = "science" + display_name = "Science" + description = "Experimental tools, trinkets, and supplies for the Science department." + icon = "atom" + price_modifier = 1 + +/singleton/cargo_category/security + name = "security" + display_name = "Security" + description = "Tools, and supplies for the Security department." + icon = "shield" + price_modifier = 1 + +/singleton/cargo_category/weaponry + name = "weaponry" + display_name = "Weaponry" + description = "Arms and ammunition." + icon = "gun" + price_modifier = 1 + +/singleton/cargo_category/miscellaneous + name = "miscellaneous" + display_name = "Misc" + description = "Other stuff." + icon = "cube" diff --git a/code/modules/cargo/cargo_suppliers.dm b/code/modules/cargo/cargo_suppliers.dm new file mode 100644 index 00000000000..ada75863854 --- /dev/null +++ b/code/modules/cargo/cargo_suppliers.dm @@ -0,0 +1,167 @@ +/singleton/cargo_supplier + /// The short name (ID name) of the supplier. Used to denote the "supplier" of individual cargo items. These MUST match exactly. + var/short_name = "generic_supplier" + + /// The display name of the supplier, shown in cargo orders as the "Shipped By" entity. + var/name = "Generic Supplies Ltd." + + /// The description of the supplier. Shows up when mousing over a supplier entry in the Cargo Order console. + var/description = "You're not supposed to see this. File a bug report." + + /// The catchphrase of the supplier. + var/tag_line = "You're not supposed to see this." + + /// Time, in ticks, it takes for a shuttle carrying orders from this supplier to arrive. + var/shuttle_time = 100 + + /// The additional price an order incurs for ordering a shuttle from this supplier. + var/shuttle_price = 100 + + /// Whether or not this supplier is available or not. + var/available = TRUE + + /// The price multiplier for all items this supplier sells. + var/price_modifier = 1 + + + var/list/items = list() + +/// Returns a string-formatted list of the cargo supplier's properties, to be used in TGUI. +/singleton/cargo_supplier/proc/get_list() + var/list/data = list() + data["short_name"] = short_name + data["name"] = name + data["description"] = description + data["tag_line"] = tag_line + data["shuttle_time"] = shuttle_time + data["shuttle_price"] = shuttle_price + data["available"] = available + data["price_modifier"] = price_modifier + return data + +/// Multiplies the price modifier by any sector-dependent price modifier this supplier has and returns it. Used for sectors in which a certain supplier might be more expensive or cheaper due to regional influences, tariffs, etc. +/singleton/cargo_supplier/proc/get_total_price_coefficient() + var/final_coef = price_modifier + if(SSatlas.current_sector) + if(short_name in SSatlas.current_sector.cargo_price_coef) + final_coef = SSatlas.current_sector.cargo_price_coef[short_name] * price_modifier + + log_subsystem_cargo("get_total_price_coefficient() called on suppliers '[name]' is multiplying original value [price_modifier] to [final_coef].") + return final_coef + +/singleton/cargo_supplier/generic_supplier + +/singleton/cargo_supplier/arizi + short_name = "arizi" + name = "Arizi Guild" + description = "An Unathi guild of craftsmen dedicated to making artisan products such as fine liquor." + tag_line = "Arizi: The best of Moghes." + +/singleton/cargo_supplier/bishop + short_name = "bishop" + name = "Bishop Cybernetics" + description = "A robotics company that specializes in manufacturing high-end IPC chassis, mechanical organs, and prosthetics. A subsidiary of Zeng-Hu." + tag_line = "Without compromise." + +/singleton/cargo_supplier/blam + short_name = "blam" + name = "BLAM! Products" + description = "A janitorial supplies company best known for their highly-effective and mostly-non-toxic 'space cleaner' formula, in wide usage throughout the Spur." + tag_line = "Just say BLAM! And it's gone!" + +/singleton/cargo_supplier/eckharts + short_name = "eckharts" + name = "Eckhart's Energy Solutions Limited" + description = "A small Solarian energy company mostly concerned with the research and development of antimatter and antimatter power." + tag_line = "The future is in the atom." + +/singleton/cargo_supplier/einstein + short_name = "einstein" + name = "Einstein Engines" + description = "A Solarian megacorporation that specializes in faster-than-light warp travel and robotics." + tag_line = "Lead by our history, leading our future." + +/singleton/cargo_supplier/getmore + short_name = "getmore" + name = "Getmore Products" + description = "A food and beverage company that provides many snacks and drinks. A subsidiary of Nanotrasen." + tag_line = "Get more with Getmore!" + +/singleton/cargo_supplier/heph + short_name = "hephaestus" + name = "Hephaestus Industries" + description = "An industrial giant, Hephaestus Industries specializes in all things from mining, to robotics, to manufacturing everything under the stars." + tag_line = "The anvil on which the world is shaped." + +/singleton/cargo_supplier/iac + short_name = "iac" + name = "Interstellar Aid Corps" + description = "A nonprofit humanitarian organization dedicated to providing aid to the needy, especially in the less-affluent areas of the galaxy." + tag_line = "Making the Spur a better place." + +/singleton/cargo_supplier/idris + short_name = "idris" + name = "Idris Incorporated" + description = "A financial and service giant that operates the largest banking and finances network in the galaxy." + tag_line = "Astronomical figures. Unlimited power." + +/singleton/cargo_supplier/molinaris + short_name = "molinaris" + name = "Molinari's Animal Shipping Company" + description = "A logistics courier specializing in delivering live animals across the galaxy. It's become well-known for being the only large carrier to deliver animals alive, well-fed, and not violently killed by blunt force trauma." + tag_line = "We care about the little guys." + +/singleton/cargo_supplier/nanotrasen + short_name = "nanotrasen" + name = "NanoTrasen Corporation" + description = "NanoTrasen is a technology, energy and scientific behemoth. While they built their fortunes off of phoron and biotechnics, they also manufacture and sell plenty of consumer goods under their many subsidiaries." + tag_line = "The leader in all things phoron!" + +/singleton/cargo_supplier/orion + short_name = "orion" + name = "Orion Express" + description = "A massive logistics and shipping company that operates as the logistics division of the Stellar Corporate Conglomerate's constitutent companies." + tag_line = "Faster than light." + +/singleton/cargo_supplier/virgo + short_name = "virgo" + name = "Virgo Freight Carriers" + description = "A Xanan shipping company that operates across the Spur. It's carved a niche in making small-volume, high-priority deliveries from smaller manufacturers and suppliers." + tag_line = "Virgo: There when you need us, and not a moment too late." + +/singleton/cargo_supplier/vysoka + short_name = "vysoka" + name = "Vysoka Farming Supplies Association" + description = "A collective of farming vendors from Vysoka that provide high-quality agricultural products to farmers, gardeners and hydroponicists across the galaxy." + tag_line = "All organic. All Vysokan." + +/singleton/cargo_supplier/xion + short_name = "xion" + name = "Xion Manufacturing Group" + description = "A Hephaestus-owned robotics company primarily focused on building synthetics and prosthetics intended for durable, hard-labor tasks that focus on function above all else - looks be damned." + tag_line = "Advancing the fields of robotics, one step at a time." + +/singleton/cargo_supplier/zavodskoi + short_name = "zavodskoi" + name = "Zavodskoi Interstellar" + description = "A massive weapons and aerospace manufacturing and development conglomerate that distributes everything from light to heavy arms, space vessel weapons, ship-building, aircraft, ground vehicles, combat spacesuits, and military software." + tag_line = "Even one matters on the battlefield." + +/singleton/cargo_supplier/zeng_hu + short_name = "zeng_hu" + name = "Zeng-Hu Pharmaceuticals" + description = "A trans-stellar medical, research, and pharmaceutical conglomerate who has a hand in almost every form of medicine and science throughout the Orion Spur." + tag_line = "Building a brighter future." + +/singleton/cargo_supplier/zharkov + short_name = "zharkov" + name = "Zharkov Shipping Company" + description = "One of the largest logistics companies native to Adhomai, Zharkov specializes in interstellar exports bringing Adhomian goods to alien worlds." + tag_line = "All around Adhomai in a day or less." + +/singleton/cargo_supplier/zora + short_name = "zora" + name = "Zo'ra Hive Logistics" + description = "The logistics branch of the Zo'ra hive, one of the main Vaurca hive societies." + tag_line = "The Unstoppable." + diff --git a/code/modules/cargo/items/atmos.dm b/code/modules/cargo/items/atmos.dm new file mode 100644 index 00000000000..34858a0ae64 --- /dev/null +++ b/code/modules/cargo/items/atmos.dm @@ -0,0 +1,265 @@ +/singleton/cargo_item/oxygentank + category = "atmos" + name = "oxygen tank" + supplier = "hephaestus" + description = "A man-portable tank containing oxygen, the precious gas of life. Unless you're Vaurca, in which case it's pure poison." + price = 85 + items = list( + /obj/item/tank/oxygen + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/phorontank + category = "atmos" + name = "phoron tank" + supplier = "nanotrasen" + description = "A man-portable tank containing phoron, pure poison. Unless you're Vaurca, in which case it's the precious gas of life." + price = 750 + items = list( + /obj/item/tank/phoron + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hydrogentank + category = "atmos" + name = "hydrogen tank" + supplier = "hephaestus" + description = "A man-portable tank containing hydrogen. Do not inhale. Warning: extremely flammable." + price = 150 + items = list( + /obj/item/tank/hydrogen + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/portable_air_pump + category = "atmos" + name = "portable air pump" + supplier = "hephaestus" + description = "Used to fill or drain rooms without differentiating between gasses. NOTE: Does not come pre-filled. Air sold separately." + price = 750 + items = list( + /obj/machinery/portable_atmospherics/powered/pump + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/portable_air_scrubber + category = "atmos" + name = "portable air scrubber" + supplier = "hephaestus" + description = "Scrubs contaminants from the local atmosphere or the connected portable tank." + price = 850 + items = list( + /obj/machinery/portable_atmospherics/powered/scrubber + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/canister_air + category = "atmos" + name = "Canister (Air)" + supplier = "hephaestus" + description = "Holds nitrogen-oxygen breatheable air. Has a built-in valve to allow for filling portable tanks." + price = 1100 + items = list( + /obj/machinery/portable_atmospherics/canister/air + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_bo + category = "atmos" + name = "Canister (Boron)" + supplier = "hephaestus" + description = "Holds boron gas. Has a built-in valve to allow for filling portable tanks." + price = 1500 + items = list( + /obj/machinery/portable_atmospherics/canister/boron + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_co2 + category = "atmos" + name = "Canister (CO2)" + supplier = "hephaestus" + description = "Holds heavy CO2 gas. Has a built-in valve to allow for filling portable tanks." + price = 800 + items = list( + /obj/machinery/portable_atmospherics/canister/carbon_dioxide + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_h2 + category = "atmos" + name = "Canister (Hydrogen)" + supplier = "hephaestus" + description = "Holds flammable hydrogen. Has a built-in valve to allow for filling portable tanks." + price = 800 + items = list( + /obj/machinery/portable_atmospherics/canister/hydrogen + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_he + category = "atmos" + name = "Canister (Helium)" + supplier = "hephaestus" + description = "Holds voice-changing helium. Has a built-in valve to allow for filling portable tanks." + price = 800 + items = list( + /obj/machinery/portable_atmospherics/canister/helium + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_n2 + category = "atmos" + name = "Canister (Nitrogen)" + supplier = "hephaestus" + description = "Holds inert nitrogen. Has a built-in valve to allow for filling portable tanks." + price = 1000 + items = list( + /obj/machinery/portable_atmospherics/canister/nitrogen + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_n2o + category = "atmos" + name = "Canister (Nitrous Oxide)" + supplier = "hephaestus" + description = "Holds sleepy nitrous oxide. Has a built-in valve to allow for filling portable tanks." + price = 1500 + items = list( + /obj/machinery/portable_atmospherics/canister/sleeping_agent + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_o2 + category = "atmos" + name = "Canister (Oxygen)" + supplier = "hephaestus" + description = "Holds precious oxygen. Has a built-in valve to allow for filling portable tanks." + price = 1500 + items = list( + /obj/machinery/portable_atmospherics/canister/oxygen + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/canister_phoron + category = "atmos" + name = "Canister (Phoron)" + supplier = "nanotrasen" + description = "Holds valuable phoron. Has a built-in valve to allow for filling portable tanks." + price = 5000 + items = list( + /obj/machinery/portable_atmospherics/canister/phoron + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/pipedispenser + category = "atmos" + name = "pipe dispenser" + supplier = "hephaestus" + description = "It dispenses pipes, no idea how though." + price = 500 + items = list( + /obj/machinery/pipedispenser/orderable + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/pipepainter + category = "atmos" + name = "pipe painter" + supplier = "hephaestus" + description = "Its said that green pipes are safe to travel through." + price = 135 + items = list( + /obj/item/device/pipe_painter + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/rpd + category = "atmos" + name = "Rapid Fabrication Device P-Class" + supplier = "hephaestus" + description = "A heavily modified RFD, modified to construct pipes and piping accessories." + price = 255 + items = list( + /obj/item/rfd/piping + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/atmosvoidsuit + category = "atmos" + name = "atmos voidsuit" + supplier = "hephaestus" + description = "A special suit that protects against hazardous, low pressure environments. Has unmatched thermal protection and minor radiation." + price = 4200 + items = list( + /obj/item/clothing/suit/space/void/atmos + ) + access = ACCESS_ATMOSPHERICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/atmosphericsvoidsuithelmet + category = "atmos" + name = "atmospherics voidsuit helmet" + supplier = "hephaestus" + description = "A special helmet designed for work in a hazardous, low pressure environments. Has unmatched thermal and minor radiation protect." + price = 2850 + items = list( + /obj/item/clothing/head/helmet/space/void/atmos + ) + access = ACCESS_ATMOSPHERICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/cargo_items.dm b/code/modules/cargo/items/cargo_items.dm new file mode 100644 index 00000000000..31b04ce45d8 --- /dev/null +++ b/code/modules/cargo/items/cargo_items.dm @@ -0,0 +1,55 @@ + +// Master singleton for cargo_items. + +/singleton/cargo_item + /// The category this item belongs to. This MUST match the cargo_category "name" this item belongs to. + var/category = "miscellaneous" + + /// The name of the item. + var/name = "generic cargo item" + + /// The category this item belongs to. This MUST match the cargo_supplier "short_name" this item belongs to. + var/supplier = "generic_supplier" + + /// The description of this item. + var/description = "A basic cargo item." + + /// The amount of 'things' this "item" has. Defaults to 1. Change this for cargo items that have multiple objects packaged in them. + var/amount = 1 + + /// The base price of the item, in credits. + var/price = 1 + + /// The list of objects this item has. Duplicate items are handled by the "spawn_amount" variable. + var/list/items = list() + + /// The req_access level required to order/open the crate. + var/access = 0 + + /// What kind of container this object spawns in. Valid options: "crate", "freezer", "box" (wooden box, or shipping container if restricted), and "bodybag". + var/container_type = "crate" + + /// Whether or not this item can be shipped with other objects in the same crate. Switch to FALSE for large items that realistically cannot fit multiple in a container. + var/groupable = TRUE + + /// How many of the given items to spawn. A value of 2 spawns double the items, 5 spawns 5x, etc. Applied to EVERYTHING in the "items" list. + var/spawn_amount = 1 + + /// The numerical ID of this item. Assigned automatically during initialization. DO NOT MANUALLY MODIFY. + var/id = 0 + + /// The adjusted price of this item. Automatically calculated during initialization. DO NOT MANUALLY MODIFY. + var/adjusted_price = 1 + + /// The "supplier data" of this item, containing all the data of this item's "supplier". Automatically calculated during initialization. DO NOT MANUALLY MODIFY. + var/singleton/cargo_supplier/supplier_data = /singleton/cargo_supplier/generic_supplier + +/// Sets the item's adjusted_price according to different price modifiers. Returns nothing. +/singleton/cargo_item/proc/get_adjusted_price() + var/return_price = price + for(var/category_name in SScargo.cargo_categories) + var/singleton/cargo_category/cc = SScargo.get_category_by_name(category_name) + if(cc) + return_price *= cc.price_modifier + + adjusted_price = return_price diff --git a/code/modules/cargo/items/cartridges.dm b/code/modules/cargo/items/cartridges.dm new file mode 100644 index 00000000000..b1169fa4e47 --- /dev/null +++ b/code/modules/cargo/items/cartridges.dm @@ -0,0 +1,759 @@ +/singleton/cargo_item/chemicalcartridge + category = "cartridges" + name = "empty chemical cartridge" + supplier = "zeng_hu" + description = "A metal canister containing absolutely nothing. Fill to your heart's desire." + price = 50 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_ale + category = "cartridges" + name = "chemical cartridge - ale" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/ale + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_beer + category = "cartridges" + name = "chemical cartridge - beer" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/beer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_champagne + category = "cartridges" + name = "chemical cartridge - champagne" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/champagne + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_coffee + category = "cartridges" + name = "chemical cartridge - coffee" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/coffee + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_cognac + category = "cartridges" + name = "chemical cartridge - cognac" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/cognac + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_cola + category = "cartridges" + name = "chemical cartridge - cola" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/cola + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_cream + category = "cartridges" + name = "chemical cartridge - cream" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/cream + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_drgibb + category = "cartridges" + name = "chemical cartridge - dr gibb" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_gin + category = "cartridges" + name = "chemical cartridge - gin" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/gin + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_ice + category = "cartridges" + name = "chemical cartridge - ice" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/ice + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_icetea + category = "cartridges" + name = "chemical cartridge - iced tea" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/icetea + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_kahlua + category = "cartridges" + name = "chemical cartridge - kahlua" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/kahlua + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_lemonlime + category = "cartridges" + name = "chemical cartridge - lemon lime" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_lime + category = "cartridges" + name = "chemical cartridge - lime juice" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/lime + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_mead + category = "cartridges" + name = "chemical cartridge - mead" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/mead + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_orange + category = "cartridges" + name = "chemical cartridge - orange juice" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/orange + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_rum + category = "cartridges" + name = "chemical cartridge - rum" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/rum + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_smw + category = "cartridges" + name = "chemical cartridge - Stellar Jolt" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/smw + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_sodawater + category = "cartridges" + name = "chemical cartridge - soda water" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/sodawater + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_spaceup + category = "cartridges" + name = "chemical cartridge - Vacuum Fizz" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/spaceup + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_tea + category = "cartridges" + name = "chemical cartridge - tea" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/tea + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_tequila + category = "cartridges" + name = "chemical cartridge - tequila" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/tequila + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_tonic + category = "cartridges" + name = "chemical cartridge - tonic" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/tonic + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_vermouth + category = "cartridges" + name = "chemical cartridge - vermouth" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/vermouth + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_vodka + category = "cartridges" + name = "chemical cartridge - vodka" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/vodka + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_watermelon + category = "cartridges" + name = "chemical cartridge - watermelon" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/watermelon + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_whiskey + category = "cartridges" + name = "chemical cartridge - whiskey" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/whiskey + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_wine + category = "cartridges" + name = "chemical cartridge - wine" + supplier = "getmore" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 150 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/wine + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +// Chemicals + +/singleton/cargo_item/chemicalcartridge_acetone + category = "cartridges" + name = "chemical cartridge - acetone" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/acetone + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_aluminum + category = "cartridges" + name = "chemical cartridge - aluminum" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/aluminum + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_ammonia + category = "cartridges" + name = "chemical cartridge - ammonia" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/ammonia + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_carbon + category = "cartridges" + name = "chemical cartridge - carbon" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/carbon + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_copper + category = "cartridges" + name = "chemical cartridge - copper" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/copper + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_ethanol + category = "cartridges" + name = "chemical cartridge - ethanol" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/ethanol + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_hydrazine + category = "cartridges" + name = "chemical cartridge - hydrazine" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/hydrazine + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_hydrochloricacid + category = "cartridges" + name = "chemical cartridge - hydrochloric acid" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/hclacid + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_iron + category = "cartridges" + name = "chemical cartridge - iron" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/iron + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_lithium + category = "cartridges" + name = "chemical cartridge - lithium" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/lithium + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_mercury + category = "cartridges" + name = "chemical cartridge - mercury" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/mercury + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_phosphorus + category = "cartridges" + name = "chemical cartridge - phosphorus" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/phosphorus + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_potassium + category = "cartridges" + name = "chemical cartridge - potassium" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/potassium + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_radium + category = "cartridges" + name = "chemical cartridge - radium" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/radium + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_silicon + category = "cartridges" + name = "chemical cartridge - silicon" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/silicon + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_sodium + category = "cartridges" + name = "chemical cartridge - sodium" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/sodium + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_sugar + category = "cartridges" + name = "chemical cartridge - sugar" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/sugar + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_sulfur + category = "cartridges" + name = "chemical cartridge - sulfur" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/sulfur + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_sulfuricacid + category = "cartridges" + name = "chemical cartridge - sulfuric acid" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/sacid + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_tungsten + category = "cartridges" + name = "chemical cartridge - tungsten" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/tungsten + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_water + category = "cartridges" + name = "chemical cartridge - water" + supplier = "zeng_hu" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 300 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/water + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +// Medicines + +/singleton/cargo_item/chemicalcartridge_dylovene + category = "cartridges" + name = "chemical cartridge - dylovene" + supplier = "iac" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 500 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/dylovene + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_inaprovaline + category = "cartridges" + name = "chemical cartridge - inaprovaline" + supplier = "iac" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 500 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/inaprov + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_thetamycin + category = "cartridges" + name = "chemical cartridge - thetamycin" + supplier = "iac" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 500 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/thetamycin + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chemicalcartridge_perconol + category = "cartridges" + name = "chemical cartridge - perconol" + supplier = "iac" + description = "A metal canister containing 500 units of a substance. Mostly for use in liquid dispensers, though you can also pour it straight out of the can." + price = 500 + items = list( + /obj/item/reagent_containers/chem_disp_cartridge/perconol + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/engineering.dm b/code/modules/cargo/items/engineering.dm new file mode 100644 index 00000000000..9e95db0ba1c --- /dev/null +++ b/code/modules/cargo/items/engineering.dm @@ -0,0 +1,856 @@ +/singleton/cargo_item/glasssheets + category = "engineering" + name = "glass sheets" + supplier = "hephaestus" + description = "50 sheets of glass." + price = 275 + items = list( + /obj/item/stack/material/glass/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + +/singleton/cargo_item/plasteelsheets + category = "engineering" + name = "plasteel sheets" + supplier = "hephaestus" + description = "50 sheets of plasteel." + price = 700 + items = list( + /obj/item/stack/material/plasteel/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/plasticsheets + category = "engineering" + name = "plastic sheets" + supplier = "hephaestus" + description = "50 sheets of plastic." + price = 250 + items = list( + /obj/item/stack/material/plastic/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/steelsheets + category = "engineering" + name = "steel sheets" + supplier = "hephaestus" + description = "50 sheets of steel." + price = 400 + items = list( + /obj/item/stack/material/steel/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/woodplanks + category = "engineering" + name = "wood planks" + supplier = "hephaestus" + description = "50 planks of wood." + price = 350 + items = list( + /obj/item/stack/material/wood/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cardboardsheets + category = "engineering" + name = "cardboard sheets" + supplier = "orion" + description = "50 sheets of cardboard." + price = 50 + items = list( + /obj/item/stack/material/cardboard/full + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/carpet + category = "engineering" + name = "carpet (x10)" + supplier = "hephaestus" + description = "Ten carpet sheets. It is the same size as a normal floor tile!" + price = 350 + items = list( + /obj/item/stack/tile/carpet + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 10 + +/singleton/cargo_item/antifuelgrenade + category = "engineering" + name = "antifuel grenade" + supplier = "hephaestus" + description = "This grenade is loaded with a foaming antifuel compound -- the twenty-fifth century standard for eliminating industrial spills." + price = 250 + items = list( + /obj/item/grenade/chem_grenade/antifuel + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/brownwebbingvest + category = "engineering" + name = "brown webbing vest" + supplier = "hephaestus" + description = "Worn brownish synthcotton vest with lots of pockets to unload your hands." + price = 83 + items = list( + /obj/item/clothing/accessory/storage/brown_vest + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/circuitboard_bubbleshield + category = "engineering" + name = "circuit board (bubble shield generator)" + supplier = "hephaestus" + description = "Looks like a circuit. Probably is." + price = 1500 + items = list( + /obj/item/circuitboard/shield_gen + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/circuitboard_hullshield + category = "engineering" + name = "circuit board (hull shield generator)" + supplier = "hephaestus" + description = "Looks like a circuit. Probably is." + price = 1500 + items = list( + /obj/item/circuitboard/shield_gen_ex + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/circuitboard_shieldcapacitor + category = "engineering" + name = "circuit board (shield capacitor)" + supplier = "hephaestus" + description = "Looks like a circuit. Probably is." + price = 1500 + items = list( + /obj/item/circuitboard/shield_cap + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/circuitboard_solarcontrol + category = "engineering" + name = "circuit board (solar control console)" + supplier = "hephaestus" + description = "Looks like a circuit. Probably is." + price = 1500 + items = list( + /obj/item/circuitboard/solar_control + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/coolanttank + category = "engineering" + name = "coolant tank" + supplier = "hephaestus" + description = "A tank of industrial coolant." + price = 45 + items = list( + /obj/structure/reagent_dispensers/coolanttank + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/disposalpipedispenser + category = "engineering" + name = "Disposal Pipe Dispenser" + supplier = "hephaestus" + description = "It dispenses bigger pipes for things to travel through. No, the pipes aren't green." + price = 150 + items = list( + /obj/machinery/pipedispenser/disposal/orderable + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/toolbox + category = "engineering" + name = "mechanical toolbox" + supplier = "hephaestus" + description = "Danger. Very robust." + price = 200 + items = list( + /obj/item/storage/toolbox/mechanical + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/electricaltoolbox + category = "engineering" + name = "electrical toolbox" + supplier = "hephaestus" + description = "Danger. Very robust." + price = 200 + items = list( + /obj/item/storage/toolbox/electrical + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emergencytoolbox + category = "engineering" + name = "emergency toolbox" + supplier = "hephaestus" + description = "Danger. Very robust." + price = 120 + items = list( + /obj/item/storage/toolbox/emergency + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emaccelerationchamber + category = "engineering" + name = "EM Acceleration Chamber" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/fuel_chamber + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emcontainmentgridcenter + category = "engineering" + name = "EM Containment Grid Center" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/particle_emitter/center + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emcontainmentgridleft + category = "engineering" + name = "EM Containment Grid Left" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/particle_emitter/left + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emcontainmentgridright + category = "engineering" + name = "EM Containment Grid Right" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/particle_emitter/right + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emergencybluespacerelaycircuit + category = "engineering" + name = "emergency bluespace relay circuit" + supplier = "hephaestus" + description = "Looks like a circuit. Probably is." + price = 3000 + items = list( + /obj/item/circuitboard/bluespacerelay + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emitter + category = "engineering" + name = "emitter" + supplier = "hephaestus" + description = "It is a heavy duty industrial laser." + price = 1500 + items = list( + /obj/machinery/power/emitter + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/doorlock_engineering + category = "engineering" + name = "engineering magnetic door lock - engineering" + supplier = "hephaestus" + description = "A large, ID locked device used for completely locking down airlocks. It is painted with Engineering colors." + price = 135 + items = list( + /obj/item/device/magnetic_lock/engineering + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/engineeringvoidsuit + category = "engineering" + name = "engineering voidsuit" + supplier = "hephaestus" + description = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." + price = 4200 + items = list( + /obj/item/clothing/suit/space/void/engineering + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/engineeringvoidsuithelmet + category = "engineering" + name = "engineering voidsuit helmet" + supplier = "hephaestus" + description = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." + price = 2850 + items = list( + /obj/item/clothing/head/helmet/space/void/engineering + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fieldgenerator + category = "engineering" + name = "Field Generator" + supplier = "hephaestus" + description = "A large thermal battery that projects a high amount of energy when powered." + price = 1500 + items = list( + /obj/machinery/field_generator + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fireaxe + category = "engineering" + name = "fireaxe" + supplier = "hephaestus" + description = "The fire axe is a wooden handled axe with a heavy steel head intended for firefighting use." + price = 1500 + items = list( + /obj/item/material/twohanded/fireaxe + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fueltank + category = "engineering" + name = "fuel tank" + supplier = "hephaestus" + description = "A tank filled with welding fuel." + price = 45 + items = list( + /obj/structure/reagent_dispensers/fueltank + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/gasmask + category = "engineering" + name = "gas mask" + supplier = "hephaestus" + description = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." + price = 75 + items = list( + /obj/item/clothing/mask/gas + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + + spawn_amount = 1 + +/singleton/cargo_item/hardhat + category = "engineering" + name = "hard hat" + supplier = "hephaestus" + description = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." + price = 35 + items = list( + /obj/item/clothing/head/hardhat + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hazardvest + category = "engineering" + name = "hazard vest" + supplier = "hephaestus" + description = "A high-visibility vest used in work zones." + price = 90 + items = list( + /obj/item/clothing/suit/storage/hazardvest + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/toolbelt + category = "engineering" + name = "full toolbelt" + supplier = "hephaestus" + description = "A toolbelt, filled with basic mechanics' tools." + price = 500 + items = list( + /obj/item/storage/belt/utility/full + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/highcapacitypowercell + category = "engineering" + name = "high-capacity power cell" + supplier = "hephaestus" + description = "A high-capacity rechargable electrochemical power cell." + price = 240 + items = list( + /obj/item/cell/high + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/powercell + category = "engineering" + name = "power cell" + supplier = "hephaestus" + description = "A rechargable electrochemical power cell." + price = 90 + items = list( + /obj/item/cell + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hoistkit + category = "engineering" + name = "hoist kit" + supplier = "hephaestus" + description = "A setup kit for a hoist that can be used to lift things. The hoist will deploy in the direction you're facing." + price = 225 + items = list( + /obj/item/hoist_kit + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/inflatablebarrierbox + category = "engineering" + name = "inflatable barrier box" + supplier = "hephaestus" + description = "Contains inflatable walls and doors." + price = 360 + items = list( + /obj/item/storage/bag/inflatable + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/insulatedgloves + category = "engineering" + name = "insulated gloves" + supplier = "hephaestus" + description = "These gloves will protect the wearer from electric shock." + price = 450 + items = list( + /obj/item/clothing/gloves/yellow + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tajaranelectricalgloves + category = "engineering" + name = "tajaran electrical gloves" + supplier = "hephaestus" + description = "These gloves will protect the wearer from electric shock. Made special for Tajaran use." + price = 450 + items = list( + /obj/item/clothing/gloves/yellow/specialt + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/unathielectricalgloves + category = "engineering" + name = "unathi electrical gloves" + supplier = "hephaestus" + description = "These gloves will protect the wearer from electric shock. Made special for Unathi use." + price = 450 + items = list( + /obj/item/clothing/gloves/yellow/specialu + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/packagedantimatterreactorsection + category = "engineering" + name = "packaged antimatter reactor section" + supplier = "eckharts" + description = "A section of antimatter reactor shielding. Do not eat." + price = 1000 + items = list( + /obj/item/device/am_shielding_container + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/debugger + category = "engineering" + name = "Debugger" + supplier = "hephaestus" + description = "Used to debug electronic equipment." + price = 50 + items = list( + /obj/item/device/debugger + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 2 + +/singleton/cargo_item/paintgun + category = "engineering" + name = "paint gun" + supplier = "hephaestus" + description = "Useful for designating areas and pissing off coworkers." + price = 135 + items = list( + /obj/item/device/paint_sprayer + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/particleacceleratorcontrolcomputer + category = "engineering" + name = "Particle Accelerator Control Computer" + supplier = "hephaestus" + description = "This controls the density of the particles." + price = 1500 + items = list( + /obj/machinery/particle_accelerator/control_box + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/particlefocusingemlens + category = "engineering" + name = "Particle Focusing EM Lens" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/power_box + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/portableladder + category = "engineering" + name = "portable ladder" + supplier = "hephaestus" + description = "A lightweight deployable ladder, which you can use to move up or down. Or alternatively, you can bash some faces in." + price = 200 + items = list( + /obj/item/ladder_mobile + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/radiationhood + category = "engineering" + name = "radiation Hood" + supplier = "hephaestus" + description = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation." + price = 375 + items = list( + /obj/item/clothing/head/radiation + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/radiationsuit + category = "engineering" + name = "radiation suit" + supplier = "hephaestus" + description = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." + price = 675 + items = list( + /obj/item/clothing/suit/radiation + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/researchshuttleconsoleboard + category = "engineering" + name = "research shuttle console board" + supplier = "hephaestus" + description = "A replacement board for the research shuttle console, in case the original console is destroyed." + price = 500 + items = list( + /obj/item/circuitboard/research_shuttle + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/singularitygenerator + category = "engineering" + name = "singularity generator" + supplier = "hephaestus" + description = "Used to generate a Singularity. It is not adviced to use this on the asteroid." + price = 20000 + items = list( + /obj/machinery/the_singularitygen + ) + access = ACCESS_HEADS + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/superconductivemagneticcoil + category = "engineering" + name = "superconductive magnetic coil" + supplier = "hephaestus" + description = "Standard superconductive magnetic coil with average capacity and I/O rating." + price = 1800 + items = list( + /obj/item/smes_coil + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/supermattercore + category = "engineering" + name = "supermatter crystal" + supplier = "hephaestus" + description = "An unstable, radioactive crystal that forms the power source of several experimental ships and stations. Extremely dangerous." + price = 30000 + items = list( + /obj/machinery/power/supermatter + ) + access = ACCESS_HEADS + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/thermoelectricgenerator + category = "engineering" + name = "thermoelectric generator kit" + supplier = "hephaestus" + description = "A kit that comes with a thermoelectric generator and two circulators that attach to it. For usage in high-power energy generation." + price = 7500 + items = list( + /obj/machinery/power/generator, + /obj/machinery/atmospherics/binary/circulator, + /obj/machinery/atmospherics/binary/circulator + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/solarpanelassembly + category = "engineering" + name = "solar panel assembly" + supplier = "hephaestus" + description = "A solar panel assembly kit, allows constructions of a solar panel, or with a tracking circuit board, a solar tracker." + price = 1020 + items = list( + /obj/item/solar_assembly + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/trackerelectronics + category = "engineering" + name = "tracker electronics" + supplier = "hephaestus" + description = "Electronic guidance systems for a solar array." + price = 225 + items = list( + /obj/item/tracker_electronics + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/watertank + category = "engineering" + name = "watertank" + supplier = "hephaestus" + description = "A tank filled with water." + price = 45 + items = list( + /obj/structure/reagent_dispensers/watertank + ) + access = ACCESS_ENGINE + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/weldinghelmet + category = "engineering" + name = "welding helmet" + supplier = "hephaestus" + description = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." + price = 225 + items = list( + /obj/item/clothing/head/welding + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/antimattercontainmentjar + category = "engineering" + name = "antimatter containment jar" + supplier = "eckharts" + description = "Holds antimatter. Warranty void if exposed to matter." + price = 1000 + items = list( + /obj/item/am_containment + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/antimattercontrolunit + category = "engineering" + name = "antimatter control unit" + supplier = "eckharts" + description = "The control unit for an antimatter reactor. Probably safe." + price = 5500 + items = list( + /obj/machinery/power/am_control_unit + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/alphaparticlegenerationarray + category = "engineering" + name = "Alpha Particle Generation Array" + supplier = "hephaestus" + description = "Part of a Particle Accelerator." + price = 3000 + items = list( + /obj/structure/particle_accelerator/end_cap + ) + access = ACCESS_CE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/hospitality.dm b/code/modules/cargo/items/hospitality.dm new file mode 100644 index 00000000000..0b121d60c14 --- /dev/null +++ b/code/modules/cargo/items/hospitality.dm @@ -0,0 +1,732 @@ +/singleton/cargo_item/meat + category = "hospitality" + name = "meat (x5)" + supplier = "getmore" + description = "Slabs of real meat, from real animals. Freshly frozen and extremely not-vegan." + price = 160 + items = list( + /obj/item/reagent_containers/food/snacks/meat + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/synthmeat + category = "hospitality" + name = "synthetic meat (x5)" + supplier = "getmore" + description = "Slabs of synthetic meat, grown in a factory. More or less identical to the real thing, but without the animal sacrifice." + price = 140 + items = list( + /obj/item/reagent_containers/food/snacks/meat/syntiflesh + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/adhomianmeat + category = "hospitality" + name = "adhomian meat (x5)" + supplier = "zharkov" + description = "A handful of meat slices from Adhomian animals. Freshly frozen." + price = 200 + items = list( + /obj/item/reagent_containers/food/snacks/meat/adhomai + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/fishfillet + category = "hospitality" + name = "fish fillet (x5)" + supplier = "getmore" + description = "Raw fish fillets, sourced from an aquaponics farm. Freshly frozen." + price = 130 + items = list( + /obj/item/reagent_containers/food/snacks/fish/fishfillet + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/moghresianmeat + category = "hospitality" + name = "moghresian meat (x5)" + supplier = "arizi" + description = "Slabs of meat from animals native to Moghes. Freshly frozen." + price = 200 + items = list( + /obj/item/reagent_containers/food/snacks/meat/moghes + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/squidmeat + category = "hospitality" + name = "squid meat (x5)" + supplier = "getmore" + description = "Squid meat, meat from squid. Makes for some tasty calamari." + price = 150 + items = list( + /obj/item/reagent_containers/food/snacks/squidmeat + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/wormfillet + category = "hospitality" + name = "worm fillet (x5)" + supplier = "nanotrasen" + description = "Meat from a Cavern Dweller. Mildly toxic if prepared improperly." + price = 350 + items = list( + /obj/item/reagent_containers/food/snacks/dwellermeat + ) + access = ACCESS_KITCHEN + container_type = "freezer" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/roesack + category = "hospitality" + name = "roe sack (x5)" + supplier = "getmore" + description = "A fleshy organ filled with fish eggs." + price = 160 + items = list( + /obj/item/reagent_containers/food/snacks/fish/roe + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/crablegs_box + category = "hospitality" + name = "box of Silversun crab legs" + supplier = "idris" + description = "A box filled with high-quality crab legs from Silversun. Shipped by popular demand!" + price = 200 + items = list( + /obj/item/storage/box/crabmeat + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/rasvalclams_box + category = "hospitality" + name = "box of Ras'val clams" + supplier = "zharkov" + description = "A box filled with clams from the Ras'val sea, imported from Adhomai." + price = 200 + items = list( + /obj/item/storage/box/clams + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/peppermill + category = "hospitality" + name = "pepper mill" + supplier = "getmore" + description = "Often used to flavor food or make people sneeze." + price = 20 + items = list( + /obj/item/reagent_containers/food/condiment/shaker/peppermill + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/saltshaker + category = "hospitality" + name = "salt shaker" + supplier = "getmore" + description = "Salt. From space oceans, presumably." + price = 10 + items = list( + /obj/item/reagent_containers/food/condiment/shaker/salt + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/barbecuesauce + category = "hospitality" + name = "barbecue sauce" + supplier = "getmore" + description = "A bottle of tangy barbecue sauce." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/barbecue + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hotsauce + category = "hospitality" + name = "hot sauce" + supplier = "getmore" + description = "A bottle of spicy hot sauce." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/hot_sauce + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/garlicsauce + category = "hospitality" + name = "garlic sauce" + supplier = "getmore" + description = "A bottle of pungent garlic sauce." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/garlicsauce + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/honey + category = "hospitality" + name = "honey" + supplier = "vysoka" + description = "A premium bottle of bee honey." + price = 200 + items = list( + /obj/item/reagent_containers/food/condiment/honey + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/soy_sauce + category = "hospitality" + name = "soy sauce" + supplier = "getmore" + description = "Savory, savory soy sauce." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/soysauce + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ketchup + category = "hospitality" + name = "ketchup" + supplier = "getmore" + description = "Tomato ketchup. The condiment that needs no introduction." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/ketchup + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/mayonnaise + category = "hospitality" + name = "mayonnaise" + supplier = "getmore" + description = "A bottle of creamy mayonnaise." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/mayonnaise + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/NTella_jar + category = "hospitality" + name = "NTella jar" + supplier = "getmore" + description = "A jar of popular NTella-brand hazelnut chocolate spread." + price = 40 + items = list( + /obj/item/reagent_containers/food/condiment/ntella + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/peanutbutterjar + category = "hospitality" + name = "peanut butter jar" + supplier = "getmore" + description = "Simultaneously smooth and chunky." + price = 40 + items = list( + /obj/item/reagent_containers/food/condiment/peanut_butter + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cherryjellyjar + category = "hospitality" + name = "cherry jelly jar" + supplier = "getmore" + description = "A cherry jelly jar." + price = 40 + items = list( + /obj/item/reagent_containers/food/condiment/cherry_jelly + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/grapejellyjar + category = "hospitality" + name = "grape jelly jar" + supplier = "getmore" + description = "A grape jelly jar." + price = 40 + items = list( + /obj/item/reagent_containers/food/condiment/grape_jelly + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/triglyceridebottle + category = "hospitality" + name = "triglyceride bottle" + supplier = "virgo" + description = "A small bottle. Contains triglyceride." + price = 50 + items = list( + /obj/item/reagent_containers/glass/bottle/triglyceride + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/drinkingglasses_box + category = "hospitality" + name = "box of drinking glasses" + supplier = "virgo" + description = "A box of drinking glasses, for drinking purposes." + price = 21 + items = list( + /obj/item/storage/box/drinkingglasses + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/eggcarton + category = "hospitality" + name = "egg carton" + supplier = "vysoka" + description = "Eggs from mostly chicken." + price = 40 + items = list( + /obj/item/storage/box/fancy/egg_box + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/floursack + category = "hospitality" + name = "flour sack" + supplier = "getmore" + description = "A big bag of flour. Good for baking!" + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/flour + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sugarsack + category = "hospitality" + name = "sugar sack" + supplier = "getmore" + description = "A big bag of sugar. Highly addictive." + price = 40 + items = list( + /obj/item/reagent_containers/food/condiment/sugar + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ricesack + category = "hospitality" + name = "rice sack" + supplier = "vysoka" + description = "A big bag of rice. For all your rice needs." + price = 50 + items = list( + /obj/item/reagent_containers/food/condiment/rice + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/universalenzyme + category = "hospitality" + name = "universal enzyme" + supplier = "getmore" + description = "Used in cooking various dishes." + price = 30 + items = list( + /obj/item/reagent_containers/food/condiment/enzyme + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/milk + category = "hospitality" + name = "milk carton" + supplier = "getmore" + description = "It's milk. White and nutritious goodness!" + price = 10 + items = list( + /obj/item/reagent_containers/food/drinks/carton/milk + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/soymilk + category = "hospitality" + name = "soymilk carton" + supplier = "getmore" + description = "It's soy milk. White and nutritious vegan goodness!" + price = 15 + items = list( + /obj/item/reagent_containers/food/drinks/carton/soymilk + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chipmultipackcrate + category = "hospitality" + name = "chip multipack crate" + supplier = "getmore" + description = "A Getmore supply crate of multipack chip bags." + price = 400 + items = list( + /obj/item/storage/box/fancy/chips, + /obj/item/storage/box/fancy/chips/cucumber, + /obj/item/storage/box/fancy/chips/chicken, + /obj/item/storage/box/fancy/chips/dirtberry, + /obj/item/storage/box/fancy/chips/phoron, + /obj/item/storage/box/fancy/chips/variety + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/dryrag + category = "hospitality" + name = "dry rags (x5)" + supplier = "blam" + description = "For cleaning up messes, you suppose." + price = 20 + items = list( + /obj/item/reagent_containers/glass/rag, + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/flask + category = "hospitality" + name = "flask" + supplier = "virgo" + description = "For those who can't be bothered to hang out at the bar to drink." + price = 55 + items = list( + /obj/item/reagent_containers/food/drinks/flask/barflask + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/goldschlager + category = "hospitality" + name = "Goldschlager" + supplier = "zharkov" + description = "A gold laced drink imported from noble houses within S'rand'marr." + price = 460 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/goldschlager + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/burszi_ale + category = "hospitality" + name = "Burszi-ale" + supplier = "getmore" + description = "A half-dozen crate of Burszi-ale bottles, for cracking open a cold one." + price = 220 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/small/ale + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 6 + +/singleton/cargo_item/beer + category = "hospitality" + name = "Virklunder beer (x6)" + supplier = "getmore" + description = "A half-dozen crate of Virklunder beers, for cracking open a cold one." + price = 220 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/small/beer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 6 + +/singleton/cargo_item/champagne + category = "hospitality" + name = "Silverport champagne" + supplier = "idris" + description = "A rather fancy bottle of champagne, fit for collecting and storing in a cellar for decades." + price = 450 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/champagne + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/wrappartistepatron + category = "hospitality" + name = "Wrapp Artiste patron" + supplier = "idris" + description = "Silver laced tequilla, served in space night clubs across the galaxy." + price = 510 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/patron + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sarezhiwine + category = "hospitality" + name = "Sarezhi Wine" + supplier = "arizi" + description = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years." + price = 360 + items = list( + /obj/item/reagent_containers/food/drinks/bottle/sarezhiwine + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/shaker + category = "hospitality" + name = "shaker" + supplier = "virgo" + description = "A metal shaker to mix drinks in." + price = 85 + items = list( + /obj/item/reagent_containers/food/drinks/shaker + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_margherita + category = "hospitality" + name = "pizza box, margherita" + supplier = "orion" + description = "Classic Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 50 + items = list( + /obj/item/pizzabox/margherita + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_meat + category = "hospitality" + name = "pizza box, meat" + supplier = "orion" + description = "Meaty Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 50 + items = list( + /obj/item/pizzabox/meat + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_mushroom + category = "hospitality" + name = "pizza box, mushroom" + supplier = "orion" + description = "Earthy Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 50 + items = list( + /obj/item/pizzabox/mushroom + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_pineapple + category = "hospitality" + name = "pizza box, pineapple" + supplier = "orion" + description = "Tropical Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 50 + items = list( + /obj/item/pizzabox/pineapple + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_random + category = "hospitality" + name = "pizza box, random" + supplier = "orion" + description = "Mysterious Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 40 + items = list( + /obj/random/pizzabox + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pizzabox_vegetable + category = "hospitality" + name = "pizza box, vegetable" + supplier = "orion" + description = "Vegetarian Orion Express Pizza, delivered across the galaxy piping hot and ready to eat." + price = 50 + items = list( + /obj/item/pizzabox/vegetable + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/redlipstick + category = "hospitality" + name = "red lipstick" + supplier = "nanotrasen" + description = "A generic brand of lipstick." + price = 8 + items = list( + /obj/item/lipstick/random + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/xuizijuicekeg + category = "hospitality" + name = "xuizi juice keg" + supplier = "virgo" + description = "A keg full of Xuizi juice, blended flower buds from the Moghean Xuizi cactus. The export stamp of the Arizi Guild is imprinted on the side." + price = 200 + items = list( + /obj/structure/reagent_dispensers/keg/xuizikeg + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/beerkeg + category = "hospitality" + name = "beer keg" + supplier = "virgo" + description = "A keg of refreshing, intoxicating beer." + price = 500 + items = list( + /obj/structure/reagent_dispensers/keg/beerkeg + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/meadbarrel + category = "hospitality" + name = "mead barrel" + supplier = "virgo" + description = "A wooden mead barrel." + price = 650 + items = list( + /obj/structure/reagent_dispensers/keg/mead + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/hydroponics.dm b/code/modules/cargo/items/hydroponics.dm new file mode 100644 index 00000000000..7cb8d4e0ae3 --- /dev/null +++ b/code/modules/cargo/items/hydroponics.dm @@ -0,0 +1,434 @@ +/singleton/cargo_item/ammoniabottle + category = "hydroponics" + name = "ammonia bottle" + supplier = "getmore" + description = "A small bottle." + price = 90 + items = list( + /obj/item/reagent_containers/glass/bottle/ammonia + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/apron + category = "hydroponics" + name = "apron" + supplier = "getmore" + description = "A basic blue apron." + price = 25 + items = list( + /obj/item/clothing/accessory/apron/blue + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/beenet + category = "hydroponics" + name = "bee net" + supplier = "vysoka" + description = "A needed tool to maintain bee imprisonment." + price = 55 + items = list( + /obj/item/bee_net + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/beesmoker + category = "hydroponics" + name = "bee smoker" + supplier = "vysoka" + description = "For when you need to show those bees whos boss." + price = 120 + items = list( + /obj/item/bee_smoker + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/beehiveassembly + category = "hydroponics" + name = "beehive assembly" + supplier = "vysoka" + description = "Beehive frame, some assembly required." + price = 75 + items = list( + /obj/item/beehive_assembly + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 2 + +/singleton/cargo_item/cat + category = "hydroponics" + name = "cat" + supplier = "molinaris" + description = "A domesticated, feline pet. Has a tendency to adopt crewmembers." + price = 300 + items = list( + /mob/living/simple_animal/cat + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/chicken + category = "hydroponics" + name = "chicken" + supplier = "molinaris" + description = "Adorable! They make such a racket though." + price = 150 + items = list( + /mob/living/simple_animal/chick + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/corgi + category = "hydroponics" + name = "corgi" + supplier = "molinaris" + description = "Studies have shown corgis are the most well adapted canines in space, for some reason." + price = 400 + items = list( + /obj/structure/largecrate/animal/corgi + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cow + category = "hydroponics" + name = "cow" + supplier = "molinaris" + description = "Known for their milk, just don't tip them over." + price = 500 + items = list( + /mob/living/simple_animal/cow + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/schlorrgoegg + category = "hydroponics" + name = "schlorrgo egg" + supplier = "zharkov" + description = "A large egg that will eventually grow into a Schlorrgo." + price = 700 + items = list( + /obj/item/reagent_containers/food/snacks/egg/schlorrgo + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fatshouter + category = "hydroponics" + name = "fatshouter" + supplier = "zharkov" + description = "A crate containing a fatshouter, an Adhomian animal." + price = 500 + items = list( + /obj/structure/largecrate/animal/adhomai/fatshouter + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/floradiskbox + category = "hydroponics" + name = "flora disk box" + supplier = "nanotrasen" + description = "A box of flora data disks, apparently." + price = 660 + items = list( + /obj/item/storage/box/botanydisk + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/goat + category = "hydroponics" + name = "goat" + supplier = "molinaris" + description = "Not known for their pleasant disposition." + price = 400 + items = list( + /mob/living/simple_animal/hostile/retaliate/goat + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/hakhma + category = "hydroponics" + name = "hakhma" + supplier = "molinaris" + description = "An oversized insect breed by Scarab colony ships, known for their milk." + price = 600 + items = list( + /mob/living/simple_animal/hakhma + ) + access = 0 + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/honeyextractor + category = "hydroponics" + name = "honey extractor" + supplier = "vysoka" + description = "Needed equipment to extract sweet liquid gold." + price = 300 + items = list( + /obj/machinery/honey_extractor + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/hydroponicstray + category = "hydroponics" + name = "hydroponics tray" + supplier = "nanotrasen" + description = "A safe space to raise your plants." + price = 45 + items = list( + /obj/machinery/portable_atmospherics/hydroponics + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/icetunneler + category = "hydroponics" + name = "ice tunneler" + supplier = "zharkov" + description = "A crate containing a ice tunneler." + price = 300 + items = list( + /obj/structure/largecrate/animal/adhomai + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/leathergloves + category = "hydroponics" + name = "leather gloves" + supplier = "getmore" + description = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." + price = 9 + items = list( + /obj/item/clothing/gloves/botanic_leather + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/packetofdionanodes + category = "hydroponics" + name = "packet of diona nodes" + supplier = "nanotrasen" + description = "It has a picture of diona pods on the front." + price = 15 + items = list( + /obj/item/seeds/replicapod + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/packetofkudzuseeds + category = "hydroponics" + name = "packet of kudzu seeds" + supplier = "vysoka" + description = "It has a picture of kudzu vines on the front." + price = 15 + items = list( + /obj/item/seeds/kudzuseed + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/packetofstrangeplantnodes + category = "hydroponics" + name = "packet of strange plant nodes" + supplier = "zeng_hu" + description = "It has a picture of strange plants on the front." + price = 15 + items = list( + /obj/item/seeds/random + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/plantanalyzer + category = "hydroponics" + name = "plant analyzer" + supplier = "getmore" + description = "A hand-held environmental scanner which reports current gas levels." + price = 135 + items = list( + /obj/item/device/analyzer/plant_analyzer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/plant_b_gone + category = "hydroponics" + name = "Plant-B-Gone" + supplier = "blam" + description = "Kills those pesky weeds!" + price = 200 + items = list( + /obj/item/reagent_containers/spray/plantbgone + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/queenbeepack + category = "hydroponics" + name = "queen bee pack" + supplier = "vysoka" + description = "Contains one queen bee, bee kingdom not included." + price = 150 + items = list( + /obj/item/bee_pack + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sampleoflibertycapspores + category = "hydroponics" + name = "sample of liberty cap spores" + supplier = "vysoka" + description = "It's labelled as coming from liberty cap mushrooms." + price = 15 + items = list( + /obj/item/seeds/libertymycelium + ) + access = ACCESS_HYDROPONICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sampleofreishispores + category = "hydroponics" + name = "sample of reishi spores" + supplier = "vysoka" + description = "It's labelled as coming from reishi." + price = 15 + items = list( + /obj/item/seeds/reishimycelium + ) + access = ACCESS_HYDROPONICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/wulumunushaseed + category = "hydroponics" + name = "wulumunusha seed" + supplier = "zeng_hu" + description = "A Skrellian plant used in religious ceremonies and drinks." + price = 100 + items = list( + /obj/item/seeds/wulumunushaseed + ) + access = ACCESS_HYDROPONICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chainsaw + category = "hydroponics" + name = "chainsaw" + supplier = "nanotrasen" + description = "A portable mechanical saw commonly used to fell trees." + price = 600 + items = list( + /obj/item/material/twohanded/chainsaw + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/steelhatchet + category = "hydroponics" + name = "steel hatchet" + supplier = "nanotrasen" + description = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." + price = 36 + items = list( + /obj/item/material/hatchet + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/steelminihoe + category = "hydroponics" + name = "steel mini hoe" + supplier = "nanotrasen" + description = "It's used for removing weeds or scratching your back." + price = 15 + items = list( + /obj/item/material/minihoe + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/weedkillergrenade + category = "hydroponics" + name = "weedkiller grenade" + supplier = "blam" + description = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." + price = 225 + items = list( + /obj/item/grenade/chem_grenade/antiweed + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + diff --git a/code/modules/cargo/items/medical.dm b/code/modules/cargo/items/medical.dm new file mode 100644 index 00000000000..22b89742914 --- /dev/null +++ b/code/modules/cargo/items/medical.dm @@ -0,0 +1,677 @@ +/singleton/cargo_item/medicalaidset + category = "medical" + name = "medical aid set" + supplier = "iac" + description = "A set of medical first aid kits." + price = 2000 + items = list( + /obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/fire, + /obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/o2, + /obj/item/storage/firstaid/adv + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/firstaidkit + category = "medical" + name = "first-aid kit" + supplier = "nanotrasen" + description = "A basic medical kit for those boo-boos." + price = 250 + items = list( + /obj/item/storage/firstaid/regular + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/advancedfirstaidkit + category = "medical" + name = "advanced first-aid kit" + supplier = "nanotrasen" + description = "An emergency medical kit for general severe injuries." + price = 500 + items = list( + /obj/item/storage/firstaid/adv + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/advancedfirstaidkit + category = "medical" + name = "advanced first-aid kit" + supplier = "nanotrasen" + description = "A large emergency medical kit for many general severe injuries." + price = 900 + items = list( + /obj/item/storage/firstaid/large/adv + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/firefirstaidkit + category = "medical" + name = "fire first-aid kit" + supplier = "nanotrasen" + description = "An emergency medical kit for serious burns, either chemical or temperature." + price = 450 + items = list( + /obj/item/storage/firstaid/fire + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/oxygendeprivationfirstaid + category = "medical" + name = "oxygen deprivation first aid" + supplier = "nanotrasen" + description = "An emergency medical kit for oxygen deprivation, including cardiac arrest." + price = 450 + items = list( + /obj/item/storage/firstaid/o2 + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/toxinfirstaid + category = "medical" + name = "toxin first aid" + supplier = "nanotrasen" + description = "An emergency medical kit for toxin exposure." + price = 450 + items = list( + /obj/item/storage/firstaid/toxin + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/radfirstaid + category = "medical" + name = "radiation first aid" + supplier = "nanotrasen" + description = "An emergency medical kit for severe radiation exposure." + price = 450 + items = list( + /obj/item/storage/firstaid/radiation + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bloodpack_ominus + category = "medical" + name = "O- blood pack (x1)" + supplier = "zeng_hu" + description = "A blood pack filled with O- Blood." + price = 300 + items = list( + /obj/item/reagent_containers/blood/OMinus + ) + access = ACCESS_MEDICAL + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bloodpack_sbs + category = "medical" + name = "SBS blood pack (x1)" + supplier = "zeng_hu" + description = "A blood pack filled with Synthetic Blood Substitute. WARNING: Not compatible with organic blood!" + price = 270 + items = list( + /obj/item/reagent_containers/blood/sbs + ) + access = ACCESS_MEDICAL + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bloodpacksbags + category = "medical" + name = "empty IV bags" + supplier = "nanotrasen" + description = "This box contains empty IV bags." + price = 85 + items = list( + /obj/item/storage/box/bloodpacks + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/butazoline_autoinjector + category = "medical" + name = "butazoline autoinjector" + supplier = "nanotrasen" + description = "An autoinjector designed to treat severe physical trauma." + price = 150 + items = list( + /obj/item/reagent_containers/hypospray/autoinjector/trauma + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/dermaline_autoinjector + category = "medical" + name = "dermaline autoinjector" + supplier = "nanotrasen" + description = "An autoinjector designed to treat severe burns." + price = 150 + items = list( + /obj/item/reagent_containers/hypospray/autoinjector/burn + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/dexplus_autoinjector + category = "medical" + name = "dexalin plus autoinjector" + supplier = "nanotrasen" + description = "An autoinjector designed to treat oxygen deprivation." + price = 350 + items = list( + /obj/item/reagent_containers/hypospray/autoinjector/oxygen + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/peridaxonautoinjector + category = "medical" + name = "peridaxon autoinjector" + supplier = "nanotrasen" + description = "An autoinjector designed to treat minor organ damage." + price = 800 + items = list( + /obj/item/reagent_containers/hypospray/autoinjector/peridaxon + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bodybags + category = "medical" + name = "body bags" + supplier = "nanotrasen" + description = "This box contains body bags." + price = 255 + items = list( + /obj/item/storage/box/bodybags + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/injectors_box + category = "medical" + name = "box of empty autoinjectors" + supplier = "nanotrasen" + description = "Contains empty autoinjectors." + price = 500 + items = list( + /obj/item/storage/box/autoinjectors + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sterilegloves_box + category = "medical" + name = "box of sterile gloves" + supplier = "zeng_hu" + description = "Contains sterile gloves." + price = 98 + items = list( + /obj/item/storage/box/gloves + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sterilemasks_box + category = "medical" + name = "box of sterile masks" + supplier = "zeng_hu" + description = "This box contains masks of sterility." + price = 98 + items = list( + /obj/item/storage/box/masks + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/syringes_box + category = "medical" + name = "box of syringes" + supplier = "nanotrasen" + description = "A box full of syringes." + price = 200 + items = list( + /obj/item/storage/box/syringes + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/dylovenebottle + category = "medical" + name = "dylovene bottle" + supplier = "nanotrasen" + description = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug." + price = 20 + items = list( + /obj/item/reagent_containers/glass/bottle/antitoxin + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hyronalinbottle + category = "medical" + name = "hyronalin bottle" + supplier = "nanotrasen" + description = "A small bottle. Contains hyronalin - used to treat radiation poisoning." + price = 1000 + items = list( + /obj/item/reagent_containers/glass/bottle/hyronalin + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/inaprovalinebottle + category = "medical" + name = "inaprovaline bottle" + supplier = "nanotrasen" + description = "A small bottle. Contains inaprovaline - used to stabilize patients." + price = 25 + items = list( + /obj/item/reagent_containers/glass/bottle/inaprovaline + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/soporificbottle + category = "medical" + name = "soporific bottle" + supplier = "nanotrasen" + description = "A small bottle of soporific. Just the fumes make you sleepy." + price = 55 + items = list( + /obj/item/reagent_containers/glass/bottle/stoxin + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalbelt + category = "medical" + name = "medical belt" + supplier = "nanotrasen" + description = "Can hold various medical equipment." + price = 75 + items = list( + /obj/item/storage/belt/medical + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalmask + category = "medical" + name = "medical mask" + supplier = "nanotrasen" + description = "A close-fitting sterile mask that can be connected to an air supply." + price = 105 + items = list( + /obj/item/clothing/mask/breath/medical + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/surgicalcap + category = "medical" + name = "surgical cap" + supplier = "nanotrasen" + description = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." + price = 200 + items = list( + /obj/item/clothing/head/surgery + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalscrubs + category = "medical" + name = "medical scrubs" + supplier = "nanotrasen" + description = "It's made of a special fiber that provides minor protection against biohazards." + price = 200 + items = list( + /obj/item/clothing/under/rank/medical/surgeon + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalgown + category = "medical" + name = "medical gown" + supplier = "nanotrasen" + description = "A loose-fitting gown for medical patients." + price = 60 + items = list( + /obj/item/clothing/under/medical_gown + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalvoidsuit + category = "medical" + name = "medical voidsuit" + supplier = "nanotrasen" + description = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding." + price = 4200 + items = list( + /obj/item/clothing/suit/space/void/medical + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medicalvoidsuithelmet + category = "medical" + name = "medical voidsuit helmet" + supplier = "nanotrasen" + description = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding." + price = 2850 + items = list( + /obj/item/clothing/head/helmet/space/void/medical + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/nanopaste + category = "medical" + name = "nanopaste" + supplier = "zeng_hu" + description = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." + price = 2000 + items = list( + /obj/item/stack/nanopaste + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pillbottles + category = "medical" + name = "pill bottles" + supplier = "nanotrasen" + description = "A storage box containing pill bottles." + price = 155 + items = list( + /obj/item/storage/pill_bottle + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/stasisbag + category = "medical" + name = "stasis bag" + supplier = "zeng_hu" + description = "A folded, non-reusable bag designed to keep patients in stasis for transport." + price = 900 + items = list( + /obj/item/bodybag/cryobag + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/stabilizer_harness + category = "medical" + name = "stabilizer harness" + supplier = "nanotrasen" + description = "A specialized medical harness that gives regular compressions to the patient's ribcage for cases of urgent heart issues, and functions as an emergency artificial respirator for cases of urgent lung issues." + price = 300 + items = list( + /obj/item/auto_cpr + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +//Surgery stuff + +/singleton/cargo_item/surgerykit + category = "medical" + name = "surgery kit" + supplier = "zeng_hu" + description = "A kit containing surgical tools, either for resupply or for use on-the-go." + price = 2000 + items = list( + /obj/item/storage/firstaid/surgery + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/anesthetictank + category = "medical" + name = "anesthetic tank" + supplier = "nanotrasen" + description = "A tank with an N2O/O2 gas mix." + price = 200 + items = list( + /obj/item/tank/anesthetic + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/scalpel + category = "medical" + name = "scalpel" + supplier = "zeng_hu" + description = "Cut, cut, and once more cut." + price = 100 + items = list( + /obj/item/surgery/scalpel + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/retractor + category = "medical" + name = "retractor" + supplier = "zeng_hu" + description = "Retracts stuff." + price = 115 + items = list( + /obj/item/surgery/retractor + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hemostat + category = "medical" + name = "hemostat" + supplier = "zeng_hu" + description = "You think you have seen this before." + price = 135 + items = list( + /obj/item/surgery/hemostat + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/circularsaw + category = "medical" + name = "circular saw" + supplier = "zeng_hu" + description = "For heavy duty cutting." + price = 195 + items = list( + /obj/item/surgery/circular_saw + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fix_o_vein + category = "medical" + name = "vascular recoupler" + supplier = "zeng_hu" + description = "An advanced automatic surgical instrument that operates with extreme finesse." + price = 495 + items = list( + /obj/item/surgery/fix_o_vein + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cautery + category = "medical" + name = "cautery" + supplier = "zeng_hu" + description = "This stops bleeding." + price = 165 + items = list( + /obj/item/surgery/cautery + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/surgicaldrill + category = "medical" + name = "surgical drill" + supplier = "zeng_hu" + description = "You can drill using this item. You dig?" + price = 195 + items = list( + /obj/item/surgery/surgicaldrill + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bonegel + category = "medical" + name = "bone gel" + supplier = "zeng_hu" + description = "A bottle-and-nozzle applicator containing a specialized gel. When applied to bone tissue, it can reinforce and repair breakages and act as a glue to keep bones in place while they heal." + price = 495 + items = list( + /obj/item/surgery/bone_gel + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bonesetter + category = "medical" + name = "bone setter" + supplier = "zeng_hu" + description = "Sets bones into place." + price = 225 + items = list( + /obj/item/surgery/bonesetter + ) + access = ACCESS_SURGERY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tajaranlatexgloves + category = "medical" + name = "tajaran latex gloves" + supplier = "zharkov" + description = "Sterile latex gloves. Designed for Tajara use." + price = 8 + items = list( + /obj/item/clothing/gloves/latex/tajara + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/unathilatexgloves + category = "medical" + name = "unathi latex gloves" + supplier = "arizi" + description = "Sterile latex gloves. Designed for Unathi use." + price = 8 + items = list( + /obj/item/clothing/gloves/latex/unathi + ) + access = ACCESS_MEDICAL + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/mining.dm b/code/modules/cargo/items/mining.dm new file mode 100644 index 00000000000..5d610bf50d0 --- /dev/null +++ b/code/modules/cargo/items/mining.dm @@ -0,0 +1,127 @@ +/singleton/cargo_item/miningvoidsuit + category = "mining" + name = "mining voidsuit" + supplier = "nanotrasen" + description = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating." + price = 4200 + items = list( + /obj/item/clothing/suit/space/void/mining + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/miningvoidsuithelmet + category = "mining" + name = "mining voidsuit helmet" + supplier = "nanotrasen" + description = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating." + price = 2850 + items = list( + /obj/item/clothing/head/helmet/space/void/mining + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/classakineticaccelerator + category = "mining" + name = "Class A Kinetic Accelerator" + supplier = "hephaestus" + description = "Contains a tactical KA frame, an experimental core KA power converter, a recoil reloading KA cell, and a upgrade chip - damage increase." + price = 7999 + items = list( + /obj/item/gun/custom_ka/frame05/prebuilt + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/classbkineticaccelerator + category = "mining" + name = "Class B Kinetic Accelerator" + supplier = "hephaestus" + description = "Contains a heavy KA frame, a planet core KA power converter, a uranium recharging KA cell, and a upgrade chip - efficiency increase." + price = 5599 + items = list( + /obj/item/gun/custom_ka/frame04/prebuilt + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/classckineticaccelerator + category = "mining" + name = "Class C Kinetic Accelerator" + supplier = "hephaestus" + description = "Contains a medium KA frame, a meteor core KA power converter, a kinetic KA cell, and a upgrade chip - focusing." + price = 3299 + items = list( + /obj/item/gun/custom_ka/frame03/prebuilt + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/classdkineticaccelerator + category = "mining" + name = "Class D Kinetic Accelerator" + supplier = "hephaestus" + description = "Contains a light KA frame, a professional core KA power converter, an advanced pump recharging KA cell, and a upgrade chip - firedelay increase." + price = 2299 + items = list( + /obj/item/gun/custom_ka/frame02/prebuilt + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/classekineticaccelerator + category = "mining" + name = "Class E Kinetic Accelerator" + supplier = "hephaestus" + description = "Contains a compact KA frame, a standard core KA power converter, a pump recharging KA cell, and a upgrade chip - focusing." + price = 1499 + items = list( + /obj/item/gun/custom_ka/frame01/prebuilt + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/industrialminingdrill + category = "mining" + name = "mining drill" + supplier = "hephaestus" + description = "A large industrial drill. Its bore does not penetrate deep enough to access the sublevels." + price = 4000 + items = list( + /obj/machinery/mining/drill, + /obj/machinery/mining/brace, + /obj/machinery/mining/brace + ) + access = ACCESS_MINING + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/orebox + category = "mining" + name = "ore box" + supplier = "hephaestus" + description = "Contains a box for storing ore." + price = 250 + items = list( + /obj/structure/ore_box + ) + access = 0 + container_type = "box" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/miscellaneous.dm b/code/modules/cargo/items/miscellaneous.dm new file mode 100644 index 00000000000..653e268b166 --- /dev/null +++ b/code/modules/cargo/items/miscellaneous.dm @@ -0,0 +1,42 @@ +/singleton/cargo_item/auto_chisel + category = "miscellaneous" + name = "auto-chisel" + supplier = "nanotrasen" + description = "With an integrated AI chip and hair-trigger precision, this baby makes sculpting almost automatic!" + price = 500 + items = list( + /obj/item/autochisel + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/sculptingblock + category = "miscellaneous" + name = "sculpting block" + supplier = "nanotrasen" + description = "A finely chiselled sculpting block, it is ready to be your canvas." + price = 200 + items = list( + /obj/structure/sculpting_block + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/spaceac + category = "miscellaneous" + name = "space air conditioner" + supplier = "nanotrasen" + description = "Made by Space Amish using traditional space techniques, this A/C unit can heat or cool a room to your liking." + price = 200 + items = list( + /obj/machinery/space_heater + ) + access = 0 + container_type = "box" + groupable = TRUE + spawn_amount = 1 + diff --git a/code/modules/cargo/items/operations.dm b/code/modules/cargo/items/operations.dm new file mode 100644 index 00000000000..6afa3c32577 --- /dev/null +++ b/code/modules/cargo/items/operations.dm @@ -0,0 +1,625 @@ +/singleton/cargo_item/autakhlimbs + category = "operations" + name = "autakh limbs" + supplier = "hephaestus" + description = "A box with various autakh limbs." + price = 3000 + items = list( + /obj/item/organ/external/hand/right/autakh/tool, + /obj/item/organ/external/hand/right/autakh/tool/mining, + /obj/item/organ/external/hand/right/autakh/medical + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 2 + +/singleton/cargo_item/battlemonstersresupplycanister + category = "operations" + name = "battlemonsters resupply canister" + supplier = "nanotrasen" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/battlemonsters + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/blackpaint + category = "operations" + name = "black paint" + supplier = "hephaestus" + description = "Black paint, the color of space." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/black + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bluepaint + category = "operations" + name = "blue paint" + supplier = "hephaestus" + description = "Blue paint, for when you're on a mission from god." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/blue + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/boozeresupplycanister + category = "operations" + name = "booze resupply canister" + supplier = "orion" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/booze + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/camera + category = "operations" + name = "camera" + supplier = "nanotrasen" + description = "A polaroid camera. 10 photos left." + price = 80 + items = list( + /obj/item/device/camera + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cargotraintrolley + category = "operations" + name = "cargo train trolley" + supplier = "orion" + description = "A cargo trolley for carrying cargo, NOT people." + price = 1500 + items = list( + /obj/vehicle/train/cargo/trolley + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cargotraintug + category = "operations" + name = "cargo train tug" + supplier = "orion" + description = "A ridable electric car designed for pulling cargo trolleys." + price = 500 + items = list( + /obj/vehicle/train/cargo/engine + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/coathanger + category = "operations" + name = "Coat Hanger" + supplier = "nanotrasen" + description = "To hang your coat." + price = 150 + items = list( + /obj/structure/coatrack + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/coffeeresupplycanister + category = "operations" + name = "coffee resupply canister" + supplier = "getmore" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/coffee + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/colaresupplycanister + category = "operations" + name = "cola resupply canister" + supplier = "idris" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/cola + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cutleryresupplycanister + category = "operations" + name = "cutlery resupply canister" + supplier = "nanotrasen" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/cutlery + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/eftposscanner + category = "operations" + name = "EFTPOS scanner" + supplier = "orion" + description = "Swipe your ID card to make purchases electronically." + price = 45 + items = list( + /obj/item/device/eftpos + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/emptyspraybottle + category = "operations" + name = "empty spray bottle" + supplier = "blam" + description = "A empty spray bottle." + price = 50 + items = list( + /obj/item/reagent_containers/spray + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/faxmachine + category = "operations" + name = "fax machine" + supplier = "nanotrasen" + description = "Needed office equipment for any space based corporation to function." + price = 300 + items = list( + /obj/machinery/photocopier/faxmachine + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/filmcartridge + category = "operations" + name = "film cartridge" + supplier = "nanotrasen" + description = "A camera film cartridge. Insert it into a camera to reload it." + price = 15 + items = list( + /obj/item/device/camera_film + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/flare + category = "operations" + name = "flare" + supplier = "hephaestus" + description = "Good for illuminating dark areas or burning someones face off." + price = 80 + items = list( + /obj/item/device/flashlight/flare + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/formalwearcrate + category = "operations" + name = "formal wear crate" + supplier = "nanotrasen" + description = "Formalwear for the best occasions." + price = 800 + items = list( + /obj/item/clothing/head/bowler, + /obj/item/clothing/head/that, + /obj/item/clothing/under/suit_jacket, + /obj/item/clothing/under/suit_jacket/really_black, + /obj/item/clothing/under/suit_jacket/red, + /obj/item/clothing/under/suit_jacket/navy, + /obj/item/clothing/under/suit_jacket/burgundy, + /obj/item/clothing/shoes/sneakers/black, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/grey, + /obj/item/clothing/suit/wcoat + ) + access = 0 + container_type = "crate" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/giftwrappingpaper + category = "operations" + name = "gift wrapping paper" + supplier = "orion" + description = "You can use this to wrap items in." + price = 8 + items = list( + /obj/item/stack/wrapping_paper + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/greenpaint + category = "operations" + name = "green paint" + supplier = "orion" + description = "Green paint, a aesthetic replacement for grass." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/green + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hmatrrafillet + category = "operations" + name = "Hma'trra fillet" + supplier = "zharkov" + description = "A fillet of glacier worm meat." + price = 45 + items = list( + /obj/item/reagent_containers/food/snacks/hmatrrameat + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hydroresupplycanister + category = "operations" + name = "hydro resupply canister" + supplier = "nanotrasen" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/hydro + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/janitorialresupplyset + category = "operations" + name = "janitorial resupply set" + supplier = "blam" + description = "A set of items to restock the janitors closet." + price = 2000 + items = list( + /obj/structure/janitorialcart, + /obj/structure/mopbucket, + /obj/item/mop, + /obj/item/storage/bag/trash, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/reagent_containers/glass/rag, + /obj/item/clothing/suit/caution, + /obj/item/clothing/suit/caution, + /obj/item/clothing/suit/caution, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/soap/nanotrasen + ) + access = 0 + container_type = "crate" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/loadbearingequipment + category = "operations" + name = "load bearing equipment" + supplier = "orion" + description = "Used to hold things when you don't have enough hands." + price = 83 + items = list( + /obj/item/clothing/accessory/storage + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/medsresupplycanister + category = "operations" + name = "meds resupply canister" + supplier = "zeng_hu" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/meds + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/packagewrapper + category = "operations" + name = "package wrapper" + supplier = "orion" + description = "A roll of paper used to enclose an object for delivery." + price = 8 + items = list( + /obj/item/stack/packageWrap + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pda + category = "operations" + name = "PDA" + supplier = "nanotrasen" + description = "The latest in portable microcomputer solutions from Thinktronic Systems, LTD." + price = 90 + items = list( + /obj/item/modular_computer/handheld/pda + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/photoalbum + category = "operations" + name = "Photo album" + supplier = "nanotrasen" + description = "A place to store fond memories you made in space." + price = 45 + items = list( + /obj/item/storage/photo_album + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/photocopier + category = "operations" + name = "photo copier" + supplier = "nanotrasen" + description = "When you're too lazy to write a copy yourself." + price = 300 + items = list( + /obj/machinery/photocopier + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/purplepaint + category = "operations" + name = "purple paint" + supplier = "orion" + description = "Purple paint, it makes you feel like royalty." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/purple + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/redpaint + category = "operations" + name = "red paint" + supplier = "orion" + description = "Red paint, its not blood we promise." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/red + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/robotoolsresupplycanister + category = "operations" + name = "robo-tools resupply canister" + supplier = "blam" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/robo + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/poster19 + category = "operations" + name = "rolled-up poster - No. 19" + supplier = "orion" + description = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface." + price = 38 + items = list( + /obj/item/contraband/poster + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/securityresupplycanister + category = "operations" + name = "security resupply canister" + supplier = "blam" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/robust + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/shoulderholster + category = "operations" + name = "shoulder holster" + supplier = "zavodskoi" + description = "A handgun holster." + price = 23 + items = list( + /obj/item/clothing/accessory/holster + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/smokesresupplycanister + category = "operations" + name = "smokes resupply canister" + supplier = "getmore" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/smokes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/snacksresupplycanister + category = "operations" + name = "snacks resupply canister" + supplier = "getmore" + description = "A vending machine restock cart." + price = 967 + items = list( + /obj/item/device/vending_refill/snack + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/space_bike + category = "operations" + name = "space-bike" + supplier = "zharkov" + description = "Space wheelies! Woo!" + price = 1200 + items = list( + /obj/vehicle/bike + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/toolsresupplycanister + category = "operations" + name = "tools resupply canister" + supplier = "hephaestus" + description = "A vending machine restock cart." + price = 500 + items = list( + /obj/item/device/vending_refill/tools + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/webbing + category = "operations" + name = "webbing" + supplier = "nanotrasen" + description = "Sturdy mess of synthcotton belts and buckles, ready to share your burden." + price = 83 + items = list( + /obj/item/clothing/accessory/storage/webbing + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/whitepaint + category = "operations" + name = "white paint" + supplier = "nanotrasen" + description = "White paint, perfect for sterile boring lab environments." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/white + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/yellowpaint + category = "operations" + name = "yellow paint" + supplier = "orion" + description = "Yellow paint, for when you need to make eyes sore." + price = 10 + items = list( + /obj/item/reagent_containers/glass/paint/yellow + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/zorasodaresupplycanister + category = "operations" + name = "zora soda resupply canister" + supplier = "zora" + description = "A vending machine restock cart." + price = 800 + items = list( + /obj/item/device/vending_refill/zora + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/recreation.dm b/code/modules/cargo/items/recreation.dm new file mode 100644 index 00000000000..f36a1d7eaad --- /dev/null +++ b/code/modules/cargo/items/recreation.dm @@ -0,0 +1,356 @@ +/singleton/cargo_item/crayonbox + category = "recreation" + name = "box of crayons" + supplier = "getmore" + description = "Nontoxic crayons! For drawing, writing, painting. Warranty void if consumed." + price = 30 + items = list( + /obj/item/storage/box/fancy/crayons + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/painting_kit + category = "recreation" + name = "painting kit" + supplier = "virgo" + description = "A painter's kit containing an easel, a small canvas, and some paints. Additional canvases sold separately." + price = 350 + items = list( + /obj/structure/easel, + /obj/item/canvas, + /obj/item/storage/box/fancy/crayons, + /obj/item/reagent_containers/glass/rag, + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/canvas_small + category = "recreation" + name = "small canvas" + supplier = "virgo" + description = "A painting canvas. Does not include the tools required to use it." + price = 50 + items = list( + /obj/item/canvas + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/canvas_medium + category = "recreation" + name = "medium canvas" + supplier = "virgo" + description = "A painting canvas. Does not include the tools required to use it." + price = 80 + items = list( + /obj/item/canvas/nineteen_nineteen + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/canvas_large + category = "recreation" + name = "large canvas" + supplier = "virgo" + description = "A painting canvas. Does not include the tools required to use it." + price = 100 + items = list( + /obj/item/canvas/twentythree_twentythree + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/trumpet + category = "recreation" + name = "trumpet" + supplier = "virgo" + description = "A trumpet for those triumphant tooting sessions." + price = 300 + items = list( + /obj/item/device/synthesized_instrument/trumpet + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/guitar + category = "recreation" + name = "guitar" + supplier = "virgo" + description = "An acoustic guitar for those balcony serenades." + price = 190 + items = list( + /obj/item/device/synthesized_instrument/guitar + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/violin + category = "recreation" + name = "violin" + supplier = "virgo" + description = "A wooden musical instrument with four strings and a bow." + price = 250 + items = list( + /obj/item/device/synthesized_instrument/violin + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/polyguitar + category = "recreation" + name = "polyguitar" + supplier = "virgo" + description = "An electric polyguitar. 100% digital audio." + price = 250 + items = list( + /obj/item/device/synthesized_instrument/guitar/multi + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/piano + category = "recreation" + name = "piano" + supplier = "virgo" + description = "Like a regular piano, but always in tune! Even if the musician isn't." + price = 1200 + items = list( + /obj/structure/synthesized_instrument/synthesizer/piano + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/pianosoundsynthesizer + category = "recreation" + name = "synthesizer 3.0" + supplier = "virgo" + description = "An expensive sound synthesizer. Great for those orchestra-of-one performances." + price = 1900 + items = list( + /obj/structure/synthesized_instrument/synthesizer + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/jukebox + category = "recreation" + name = "juke box" + supplier = "nanotrasen" + description = "A common sight in any modern space bar, this jukebox has all the space classics." + price = 500 + items = list( + /obj/machinery/media/jukebox + ) + access = 0 + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/adhomian_phonograph + category = "recreation" + name = "adhomian phonograph" + supplier = "zharkov" + description = "An Adhomian record player." + price = 700 + items = list( + /obj/machinery/media/jukebox/phonograph + ) + access = 0 + container_type = "box" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/waterballoons + category = "recreation" + name = "water balloons (x10)" + supplier = "nanotrasen" + description = "Ten empty water balloons." + price = 100 + items = list( + /obj/item/toy/balloon + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 10 + +/singleton/cargo_item/toysword + category = "recreation" + name = "toy sword" + supplier = "nanotrasen" + description = "A cheap, plastic replica of a blue energy sword. Realistic sounds and colors! Ages 8 and up." + price = 200 + items = list( + /obj/item/toy/sword + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/replicakatana + category = "recreation" + name = "replica katana" + supplier = "nanotrasen" + description = "A cheap plastic katana that luckily isn't sharp enough to accidentally cut your floor length braid. Woefully underpowered in D20." + price = 200 + items = list( + /obj/item/toy/katana + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/electronicblinktoygame + category = "recreation" + name = "electronic blink toy game" + supplier = "nanotrasen" + description = "Blink. Blink. Blink. Ages 8 and up." + price = 55 + items = list( + /obj/item/toy/blink + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/foamdart + category = "recreation" + name = "foam darts (x5)" + supplier = "nanotrasen" + description = "It's some foam darts, for use in foam weaponry. Ages 8 and up." + price = 20 + items = list( + /obj/item/toy/ammo/crossbow + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/foamdartcrossbow + category = "recreation" + name = "foam dart crossbow" + supplier = "nanotrasen" + description = "A weapon favored by many overactive children. Ages 8 and up." + price = 200 + items = list( + /obj/item/toy/crossbow + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/gravitationalsingularitytoy + category = "recreation" + name = "gravitational singularity toy" + supplier = "getmore" + description = "'Singulo' brand spinning toy." + price = 100 + items = list( + /obj/item/toy/spinningtoy + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/randomplushies + category = "recreation" + name = "random plushies (x4)" + supplier = "nanotrasen" + description = "Four random plushies. Barely used." + price = 400 + items = list( + /obj/random/plushie + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 4 + +/singleton/cargo_item/therapydoll + category = "recreation" + name = "therapy doll" + supplier = "virgo" + description = "A toy for therapeutic and recreational purposes." + price = 120 + items = list( + /obj/item/toy/plushie/therapy + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/snappop + category = "recreation" + name = "snap pop (x5)" + supplier = "nanotrasen" + description = "A number of snap pops." + price = 200 + items = list( + /obj/item/toy/snappop + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/redlasertagequipmentset + category = "recreation" + name = "red laser tag equipment set" + supplier = "nanotrasen" + description = "A two-player set of red laser tag equipment consisting of helmet, armor and gun." + price = 200 + items = list( + /obj/item/clothing/head/helmet/riot/laser_tag, + /obj/item/clothing/suit/armor/riot/laser_tag, + /obj/item/gun/energy/lasertag/red + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 2 + +/singleton/cargo_item/bluelasertagequipmentset + category = "recreation" + name = "blue laser tag equipment set" + supplier = "nanotrasen" + description = "A two-player set of blue-team laser blue equipment consisting of helmet, armor and gun." + price = 200 + items = list( + /obj/item/clothing/head/helmet/riot/laser_tag/blue, + /obj/item/clothing/suit/armor/riot/laser_tag/blue, + /obj/item/gun/energy/lasertag/blue + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 2 diff --git a/code/modules/cargo/items/robotics.dm b/code/modules/cargo/items/robotics.dm new file mode 100644 index 00000000000..fc54fb60097 --- /dev/null +++ b/code/modules/cargo/items/robotics.dm @@ -0,0 +1,126 @@ +/singleton/cargo_item/positronicbrain + category = "robotics" + name = "positronic brain" + supplier = "hephaestus" + description = "An IPC-grade inactivated positronic brain fresh off the factory line. These sentient, enigmatic computers are the brains of synthetics across the galaxy." + price = 7500 + items = list( + /obj/item/device/mmi/digital/posibrain + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_baseline + category = "robotics" + name = "Torso - Baseline" + supplier = "hephaestus" + description = "A torso for a baseline frame IPC." + price = 3200 + items = list( + /obj/item/robot_parts/chest/ipc + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + + +/singleton/cargo_item/torso_bishop + category = "robotics" + name = "Torso - Bishop Cybernetics" + supplier = "bishop" + description = "A bishop cybernetics torso." + price = 4000 + items = list( + /obj/item/robot_parts/chest/bishop + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_g1 + category = "robotics" + name = "Torso - Hephaestus G1 Industrial Frame" + supplier = "hephaestus" + description = "A torso for a Hephaestus G1 Industrial Frame." + price = 3500 + items = list( + /obj/item/robot_parts/chest/industrial + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_g2 + category = "robotics" + name = "Torso - Hephaestus G2 Industrial Frame" + supplier = "hephaestus" + description = "A torso for a Hephaestus G2 Industrial Frame." + price = 5000 + items = list( + /obj/item/robot_parts/chest/hephaestus + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_heph + category = "robotics" + name = "Torso - Hephaestus Integrated" + supplier = "hephaestus" + description = "A torso for a Hephaestus Integrated Frame." + price = 3000 + items = list( + /obj/item/robot_parts/chest/ipc + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_synthskin + category = "robotics" + name = "Torso - Synthskin" + supplier = "zeng_hu" + description = "A synthskin torso." + price = 9000 + items = list( + /obj/item/robot_parts/chest/synthskin + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_xion + category = "robotics" + name = "Torso - Xion Manufacturing" + supplier = "xion" + description = "A Xion Manufacturing torso." + price = 4500 + items = list( + /obj/item/robot_parts/chest/xion + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/torso_zenghu + category = "robotics" + name = "Torso - Zeng - Hu Pharmaceuticals" + supplier = "zeng_hu" + description = "A Zeng - Hu Pharmaceuticals torso." + price = 3000 + items = list( + /obj/item/robot_parts/chest/zenghu + ) + access = ACCESS_ROBOTICS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/science.dm b/code/modules/cargo/items/science.dm new file mode 100644 index 00000000000..1d327a862ab --- /dev/null +++ b/code/modules/cargo/items/science.dm @@ -0,0 +1,236 @@ +/singleton/cargo_item/stokcubebox + category = "science" + name = "stok cube box" + supplier = "nanotrasen" + description = "Drymate brand stok cubes, shipped from Moghes. Just add water!" + price = 60 + items = list( + /obj/item/storage/box/monkeycubes/stokcubes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/vkrexicubebox + category = "science" + name = "vkrexi cube box" + supplier = "nanotrasen" + description = "Drymate brand vkrexi cubes. Just add water!" + price = 60 + items = list( + /obj/item/storage/box/monkeycubes/vkrexicubes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/farwacubebox + category = "science" + name = "farwa cube box" + supplier = "nanotrasen" + description = "Drymate brand farwa cubes, shipped from Adhomai. Just add water!" + price = 55 + items = list( + /obj/item/storage/box/monkeycubes/farwacubes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/monkeycubebox + category = "science" + name = "monkey cube box" + supplier = "nanotrasen" + description = "Drymate brand monkey cubes. Just add water!" + price = 60 + items = list( + /obj/item/storage/box/monkeycubes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/neaeracubebox + category = "science" + name = "neaera cube box" + supplier = "nanotrasen" + description = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" + price = 65 + items = list( + /obj/item/storage/box/monkeycubes/neaeracubes + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 +/singleton/cargo_item/hazmathood + category = "science" + name = "hazmat hood" + supplier = "nanotrasen" + description = "This hood protects against biological hazards." + price = 105 + items = list( + /obj/item/clothing/head/hazmat/general + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/hazmatsuit + category = "science" + name = "hazmat suit" + supplier = "nanotrasen" + description = "This suit protects against biological hazards." + price = 105 + items = list( + /obj/item/clothing/suit/hazmat/general + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/igniter + category = "science" + name = "igniter" + supplier = "nanotrasen" + description = "A small electronic device able to ignite combustable substances." + price = 23 + items = list( + /obj/item/device/assembly/igniter + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/mindshieldfiringpin + category = "science" + name = "mindshield firing pin" + supplier = "nanotrasen" + description = "This implant - locked firing pin authorizes the weapon for only loyalty - implanted users." + price = 2000 + items = list( + /obj/item/device/firing_pin/implant/loyalty + ) + access = ACCESS_HEADS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/protohuman + category = "science" + name = "Proto-Human" + supplier = "zavodskoi" + description = "A human body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting." + price = 2000 + items = list( + /mob/living/carbon/human + ) + access = ACCESS_RESEARCH + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/proto_skrell + category = "science" + name = "Proto-Skrell" + supplier = "zeng_hu" + description = "A Skrell body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting." + price = 2000 + items = list( + /mob/living/carbon/human/skrell + ) + access = ACCESS_RESEARCH + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/proto_tajara + category = "science" + name = "Proto-Tajara" + supplier = "zeng_hu" + description = "A Tajara body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting." + price = 2000 + items = list( + /mob/living/carbon/human/tajaran + ) + access = ACCESS_RESEARCH + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/proto_unathi + category = "science" + name = "Proto-Unathi" + supplier = "zavodskoi" + description = "An Unathi body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting." + price = 2000 + items = list( + /mob/living/carbon/human/unathi + ) + access = ACCESS_RESEARCH + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/blankvaurcadrone + category = "science" + name = "Blank Vaurca Drone" + supplier = "zora" + description = "A surplus Vaurca drone body. Thousands of these are thrown at the wayside every day. The everyman's relatively-ethical solution to organ harvesting." + price = 300 + items = list( + /mob/living/carbon/human/type_a/cargo + ) + access = ACCESS_RESEARCH + container_type = "box" + groupable = FALSE + spawn_amount = 1 + +/singleton/cargo_item/proximitysensor + category = "science" + name = "proximity sensor" + supplier = "nanotrasen" + description = "Used for scanning and alerting when someone enters a certain proximity." + price = 75 + items = list( + /obj/item/device/assembly/prox_sensor + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/testrange_firingpin + category = "science" + name = "test - range firing pin" + supplier = "nanotrasen" + description = "This safety firing pin allows weapons to be fired within proximity to a firing range." + price = 500 + items = list( + /obj/item/device/firing_pin/test_range + ) + access = ACCESS_RESEARCH + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/timer + category = "science" + name = "timer" + supplier = "nanotrasen" + description = "Used to time things. Works well with contraptions which has to count down. Tick tock." + price = 75 + items = list( + /obj/item/device/assembly/timer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/security.dm b/code/modules/cargo/items/security.dm new file mode 100644 index 00000000000..0391783665c --- /dev/null +++ b/code/modules/cargo/items/security.dm @@ -0,0 +1,564 @@ +//Basic sec items + +/singleton/cargo_item/stunbaton + category = "security" + name = "stunbaton" + supplier = "nanotrasen" + description = "A stun baton for incapacitating people with." + price = 320 + items = list( + /obj/item/melee/baton + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/flash + category = "security" + name = "flash" + supplier = "nanotrasen" + description = "Used for blinding and being an asshole." + price = 235 + items = list( + /obj/item/device/flash + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/uvlight + category = "security" + name = "UV light" + supplier = "nanotrasen" + description = "A small handheld black light." + price = 115 + items = list( + /obj/item/device/uv_light + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ipcimplanter + category = "security" + name = "IPC tag implanter" + supplier = "nanotrasen" + description = "A special implanter used for implanting synthetics with a special tag." + price = 400 + items = list( + /obj/item/implanter/ipc_tag + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/maglight + category = "security" + name = "maglight" + supplier = "nanotrasen" + description = "A heavy flashlight designed for security personnel." + price = 150 + items = list( + /obj/item/device/flashlight/maglight + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/doorlock_security + category = "security" + name = "magnetic door lock - security" + supplier = "nanotrasen" + description = "A large, ID locked device used for completely locking down airlocks. It is painted with Security colors." + price = 135 + items = list( + /obj/item/device/magnetic_lock/security + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/handcuffs_box + category = "security" + name = "box of handcuffs" + supplier = "nanotrasen" + description = "A box full of handcuffs." + price = 345 + items = list( + /obj/item/storage/box/handcuffs + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/zipties_box + category = "security" + name = "box of zipties" + supplier = "nanotrasen" + description = "A box full of zipties." + price = 145 + items = list( + /obj/item/storage/box/zipties + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/shieldgenerator + category = "security" + name = "Shield Generator" + supplier = "nanotrasen" + description = "A shield generator." + price = 1500 + items = list( + /obj/machinery/shieldwallgen + ) + access = ACCESS_ENGINE + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pepperspraygrenades_box + category = "security" + name = "box of pepperspray grenades" + supplier = "zavodskoi" + description = "A box containing 7 tear gas grenades. A gas mask is printed on the label. WARNING: Exposure carries risk of serious injuries." + price = 750 + items = list( + /obj/item/storage/box/teargas + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/flashbangs_box + category = "security" + name = "box of flashbangs" + supplier = "zavodskoi" + description = "A box containing 7 antipersonnel flashbang grenades. WARNING: Can cause permanent vision or hearing loss. Use with caution." + price = 520 + items = list( + /obj/item/storage/box/flashbangs + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/empgrenades_box + category = "security" + name = "box of EMP grenades" + supplier = "zavodskoi" + description = "A box containing 5 military grade EMP grenades. WARNING: Do not use near unshielded electronics or biomechanical augmentations." + price = 4395 + items = list( + /obj/item/storage/box/emps + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/deployablebarrier + category = "security" + name = "deployable barrier" + supplier = "zavodskoi" + description = "A deployable barrier. Swipe your ID card to lock/unlock it." + price = 750 + items = list( + /obj/machinery/deployable/barrier + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +//Armor and clothing + +/singleton/cargo_item/armor + category = "security" + name = "armored vest" + supplier = "zavodskoi" + description = "An armored vest that protects against some damage." + price = 250 + items = list( + /obj/item/clothing/suit/armor/vest + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tacticalhelmet + category = "security" + name = "standard helmet" + supplier = "zavodskoi" + description = "An armored helmet, for keeping that head of yours intact." + price = 380 + items = list( + /obj/item/clothing/head/helmet + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tacticalarmor + category = "security" + name = "standard plate carrier" + supplier = "zavodskoi" + description = "A plate carrier with basic accessories and an armor plate." + price = 1100 + items = list( + /obj/item/clothing/suit/armor/carrier/officer + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ablativehelmet + category = "security" + name = "ablative helmet" + supplier = "zavodskoi" + description = "A helmet made from advanced materials which protects against concentrated energy weapons." + price = 550 + items = list( + /obj/item/clothing/head/helmet/ablative + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/platecarrier_ablative + category = "security" + name = "plate carrier - ablative" + supplier = "zavodskoi" + description = "A plate carrier equipped with ablative armor plates." + price = 1550 + items = list( + /obj/item/clothing/suit/armor/carrier/ablative + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ballistichelmet + category = "security" + name = "ballistic helmet" + supplier = "zavodskoi" + description = "A helmet with reinforced plating to protect against ballistic projectiles." + price = 550 + items = list( + /obj/item/clothing/head/helmet/ballistic + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/platecarrier_ballistic + category = "security" + name = "plate carrier - ballistic" + supplier = "zavodskoi" + description = "A plate carrier equipped with ballistic armor plates." + price = 1450 + items = list( + /obj/item/clothing/suit/armor/carrier/ballistic + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/riothelmet + category = "security" + name = "riot helmet" + supplier = "zavodskoi" + description = "It's a helmet specifically designed to protect against close range attacks." + price = 750 + items = list( + /obj/item/clothing/head/helmet/riot + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/platecarrier_riot + category = "security" + name = "plate carrier - riot" + supplier = "zavodskoi" + description = "A plate carrier equipped with riot armor plates." + price = 1050 + items = list( + /obj/item/clothing/suit/armor/carrier/riot + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/riotshield + category = "security" + name = "riot shield" + supplier = "zavodskoi" + description = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." + price = 225 + items = list( + /obj/item/shield/riot + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/securityvoidsuit + category = "security" + name = "security voidsuit" + supplier = "zavodskoi" + description = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor." + price = 4500 + items = list( + /obj/item/clothing/suit/space/void/security + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/securityvoidsuithelmet + category = "security" + name = "security voidsuit helmet" + supplier = "zavodskoi" + description = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." + price = 3000 + items = list( + /obj/item/clothing/head/helmet/space/void/security + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tacticalhud + category = "security" + name = "tactical hud" + supplier = "zharkov" + description = "A tactical hud for tactical operations that ensures they proceed tactically." + price = 200 + items = list( + /obj/item/clothing/glasses/sunglasses/sechud/tactical + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 +/singleton/cargo_item/blackgloves + category = "security" + name = "black gloves" + supplier = "nanotrasen" + description = "Black gloves that are somewhat fire resistant." + price = 70 + items = list( + /obj/item/clothing/gloves/black + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bandolier + category = "security" + name = "bandolier" + supplier = "zharkov" + description = "A pocketed belt designated to hold shotgun shells." + price = 300 + items = list( + /obj/item/clothing/accessory/storage/bandolier + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/combatbelt + category = "security" + name = "combat belt" + supplier = "zharkov" + description = "The only utility belt you will ever need." + price = 300 + items = list( + /obj/item/storage/belt/security/tactical + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tacticaljumpsuit + category = "security" + name = "tactical jumpsuit" + supplier = "zharkov" + description = "Tactical fatigues guaranteed to bring out the space marine in you." + price = 200 + items = list( + /obj/item/clothing/under/tactical + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/jackboots + category = "security" + name = "jack boots" + supplier = "zavodskoi" + description = "Classic law enforcement footwear, comes with handy knife holder for when you need to enforce law up close." + price = 100 + items = list( + /obj/item/clothing/shoes/jackboots + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bayonet + category = "security" + name = "bayonet" + supplier = "zharkov" + description = "A sharp military knife, can be attached to a rifle." + price = 300 + items = list( + /obj/item/clothing/accessory/storage/bayonet + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/electronicfiringpin + category = "security" + name = "electronic firing pin" + supplier = "nanotrasen" + description = "A small authentication device, to be inserted into a firearm receiver to allow operation." + price = 2000 + items = list( + /obj/item/device/firing_pin + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/holographicammodisplay + category = "security" + name = "holographic ammo display" + supplier = "nanotrasen" + description = "A device that can be attached to most firearms, providing a holographic display of the remaining ammunition to the user." + price = 200 + items = list( + /obj/item/ammo_display + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +//Forensics + +/singleton/cargo_item/crimescenekit + category = "security" + name = "empty crime scene kit" + supplier = "nanotrasen" + description = "A stainless steel-plated carrycase for all of your forensic needs. This one is empty." + price = 145 + items = list( + /obj/item/storage/briefcase/crimekit + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/luminolbottle + category = "security" + name = "luminol bottle" + supplier = "nanotrasen" + description = "A bottle containing an odourless, colorless liquid." + price = 115 + items = list( + /obj/item/reagent_containers/spray/luminol + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/microscopeslidebox + category = "security" + name = "microscope slide box" + supplier = "nanotrasen" + description = "It's just an ordinary box." + price = 35 + items = list( + /obj/item/storage/box/slides + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fibercollectionkit + category = "security" + name = "fiber collection kit" + supplier = "nanotrasen" + description = "A magnifying glass and tweezers. Used to lift suit fibers." + price = 115 + items = list( + /obj/item/forensics/sample_kit + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/fingerprintpowder + category = "security" + name = "fingerprint powder" + supplier = "nanotrasen" + description = "A jar containing aluminum powder and a specialized brush." + price = 75 + items = list( + /obj/item/forensics/sample_kit/powder + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/swabkits_box + category = "security" + name = "box of swab kits" + supplier = "nanotrasen" + description = "Sterilized equipment within. Do not contaminate." + price = 25 + items = list( + /obj/item/storage/box/swabs + ) + access = ACCESS_FORENSICS_LOCKERS + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/supply.dm b/code/modules/cargo/items/supply.dm new file mode 100644 index 00000000000..b32eb652d78 --- /dev/null +++ b/code/modules/cargo/items/supply.dm @@ -0,0 +1,377 @@ +/singleton/cargo_item/box + category = "supply" + name = "boxes (x5)" + supplier = "orion" + description = "Versatile cardboard boxes." + price = 45 + items = list( + /obj/item/storage/box + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 5 + +/singleton/cargo_item/replacementlights_box + category = "supply" + name = "box of replacement lights" + supplier = "blam" + description = "This box is shaped on the inside so that only light tubes and bulbs fit." + price = 100 + items = list( + /obj/item/storage/box/lights/mixed + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bucket + category = "supply" + name = "bucket" + supplier = "blam" + description = "It's a bucket." + price = 10 + items = list( + /obj/item/reagent_containers/glass/bucket + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chestdrawer + category = "supply" + name = "chest drawer" + supplier = "orion" + description = "A large cabinet with drawers." + price = 45 + items = list( + /obj/structure/filingcabinet/chestdrawer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cleanergrenade + category = "supply" + name = "cleaner grenade" + supplier = "blam" + description = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." + price = 225 + items = list( + /obj/item/grenade/chem_grenade/cleaner + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/clipboard + category = "supply" + name = "clipboard" + supplier = "orion" + description = "The timeless prop for looking like your working." + price = 23 + items = list( + /obj/item/clipboard + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/folderblue + category = "supply" + name = "blue folder" + supplier = "orion" + description = "A blue folder." + price = 8 + items = list( + /obj/item/folder/blue + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/folderyellow + category = "supply" + name = "yellow folder" + supplier = "orion" + description = "A yellow folder." + price = 8 + items = list( + /obj/item/folder/yellow + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/folderred + category = "supply" + name = "red folder" + supplier = "orion" + description = "A red folder." + price = 8 + items = list( + /obj/item/folder/red + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/folderwhite + category = "supply" + name = "white folder" + supplier = "orion" + description = "A white folder." + price = 8 + items = list( + /obj/item/folder/white + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/handlabeler + category = "supply" + name = "hand labeler" + supplier = "nanotrasen" + description = "Yes, it has your name on it!" + price = 8 + items = list( + /obj/item/device/hand_labeler + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/inflatableduck + category = "supply" + name = "inflatable duck" + supplier = "nanotrasen" + description = "No bother to sink or swim when you can just float!" + price = 200 + items = list( + /obj/item/inflatable_duck + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/lightreplacer + category = "supply" + name = "light replacer" + supplier = "blam" + description = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass." + price = 135 + items = list( + /obj/item/device/lightreplacer + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/mop + category = "supply" + name = "mop" + supplier = "blam" + description = "The world of janitalia wouldn't be complete without a mop." + price = 8 + items = list( + /obj/item/mop + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/mopbucket + category = "supply" + name = "mop bucket" + supplier = "blam" + description = "Fits onto a standard janitorial cart. Fill it with water, but don't forget a mop!" + price = 40 + items = list( + /obj/structure/mopbucket + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/paperbin + category = "supply" + name = "paper bin" + supplier = "nanotrasen" + description = "A bin filled with paper - a paper bin!" + price = 12 + items = list( + /obj/item/paper_bin + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pen + category = "supply" + name = "pen" + supplier = "nanotrasen" + description = "It's a normal black ink ballpen." + price = 8 + items = list( + /obj/item/pen + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/penblue + category = "supply" + name = "blue pen" + supplier = "nanotrasen" + description = "It's a normal blue ink ballpen." + price = 8 + items = list( + /obj/item/pen/blue + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/penred + category = "supply" + name = "pen red" + supplier = "nanotrasen" + description = "It's a normal red ink ballpen." + price = 8 + items = list( + /obj/item/pen/red + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/penfountain + category = "supply" + name = "pen red" + supplier = "nanotrasen" + description = "It's an expensive fountain pen." + price = 15 + items = list( + /obj/item/pen/fountain + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/producebox + category = "supply" + name = "produce box" + supplier = "nanotrasen" + description = "A large box of random, leftover produce." + price = 50 + items = list( + /obj/item/storage/box/produce + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/spacecleaner + category = "supply" + name = "space cleaner" + supplier = "blam" + description = "BLAM!-brand non-foaming space cleaner!" + price = 297 + items = list( + /obj/item/reagent_containers/spray/cleaner + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/spacespices + category = "supply" + name = "space spices" + supplier = "getmore" + description = "An exotic blend of spices for cooking. It must flow." + price = 60 + items = list( + /obj/item/reagent_containers/food/condiment/shaker/spacespice + ) + access = 0 + container_type = "freezer" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/taperoll + category = "supply" + name = "tape roll" + supplier = "nanotrasen" + description = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" + price = 8 + items = list( + /obj/item/tape_roll + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tonercartridge + category = "supply" + name = "toner cartridge" + supplier = "nanotrasen" + description = "Toner is the back bone of any space based litigation." + price = 135 + items = list( + /obj/item/device/toner + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 2 + +/singleton/cargo_item/trashbag + category = "supply" + name = "trash bag" + supplier = "blam" + description = "It's the heavy-duty black polymer kind. Time to take out the trash!" + price = 20 + items = list( + /obj/item/storage/bag/trash + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/wetfloorsign + category = "supply" + name = "wet floor sign" + supplier = "blam" + description = "Caution! Wet Floor!" + price = 15 + items = list( + /obj/item/clothing/suit/caution + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cargo/items/weaponry.dm b/code/modules/cargo/items/weaponry.dm new file mode 100644 index 00000000000..7f1d52e928b --- /dev/null +++ b/code/modules/cargo/items/weaponry.dm @@ -0,0 +1,645 @@ +//Weapons// + +/singleton/cargo_item/disruptorpistol + category = "weaponry" + name = "disruptor pistol" + supplier = "nanotrasen" + description = "A nanotrasen designed blaster pistol with two settings: stun and lethal." + price = 500 + items = list( + /obj/item/gun/energy/disruptorpistol + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 +/singleton/cargo_item/tasergun + category = "weaponry" + name = "taser gun" + supplier = "nanotrasen" + description = "The NT Mk30 NL is a small, low capacity gun used for non-lethal takedowns." + price = 150 + items = list( + /obj/item/gun/energy/taser + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/pistol45 + category = "weaponry" + name = ".45 pistol" + supplier = "nanotrasen" + description = "The NanoTrasen Mk58 .45-caliber pistol. Inexpensive, reliable, and ubiquitous among security forces galaxy-wide." + price = 1100 + items = list( + /obj/item/gun/projectile/sec + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/machinepistol + category = "weaponry" + name = "machine pistol" + supplier = "zavodskoi" + description = "The ZI 550 Saber is a cheap self-defense weapon, mass-produced by Zavodskoi Interstellar for paramilitary and private use." + price = 1600 + items = list( + /obj/item/gun/projectile/automatic/wt550 + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ballisticcarbine + category = "weaponry" + name = "ballistic carbine" + supplier = "virgo" + description = "A durable, rugged looking semi-automatic weapon of a make popular on the frontier worlds. Uses 5.56mm rounds." + price = 4700 + items = list( + /obj/item/gun/projectile/automatic/rifle/carbine + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/bullpupassaultcarbine + category = "weaponry" + name = "Z8 bullpup assault carbine" + supplier = "zavodskoi" + description = "The ZI Bulldog 5.56mm bullpup assault carbine, Zavodskoi Industries' answer to any problem that can be solved by an assault rifle." + price = 5650 + items = list( + /obj/item/gun/projectile/automatic/rifle/z8 + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/combatshotgun + category = "weaponry" + name = "combat shotgun" + supplier = "hephaestus" + description = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders." + price = 5250 + items = list( + /obj/item/gun/projectile/shotgun/pump/combat + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/energycarbine + category = "weaponry" + name = "energy carbine" + supplier = "nanotrasen" + description = "An energy-based carbine with two settings: Stun and kill." + price = 3200 + items = list( + /obj/item/gun/energy/gun + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/energypistol + category = "weaponry" + name = "energy pistol" + supplier = "nanotrasen" + description = "A basic energy-based pistol gun with two settings: Stun and kill." + price = 2200 + items = list( + /obj/item/gun/energy/pistol + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ionrifle + category = "weaponry" + name = "ion rifle" + supplier = "nanotrasen" + description = "The NT Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats." + price = 4500 + items = list( + /obj/item/gun/energy/rifle/ionrifle + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 +/singleton/cargo_item/marksmanenergyrifle + category = "weaponry" + name = "marksman energy rifle" + supplier = "hephaestus" + description = "The HI L.W.A.P. is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful ionized bolts." + price = 6600 + items = list( + /obj/item/gun/energy/sniperrifle + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/laserrifle + category = "weaponry" + name = "laser rifle" + supplier = "nanotrasen" + description = "A common laser weapon, designed to kill with concentrated energy blasts." + price = 5200 + items = list( + /obj/item/gun/energy/rifle/laser + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/peac + category = "weaponry" + name = "point entry anti-materiel cannon" + supplier = "nanotrasen" + description = "An SCC-designed, man-portable cannon meant to neutralize mechanized threats. Spectacularly effective, though equally spectacularly unwieldy." + price = 7200 + items = list( + /obj/item/gun/projectile/peac + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/adhomianrecoillessrifle + category = "weaponry" + name = "adhomian recoilless rifle" + supplier = "zharkov" + description = "Shoulder-fired man-portable anti-tank recoilless rifle with a single shot. Relatively inexpensive and does its job." + price = 2200 + items = list( + /obj/item/gun/projectile/recoilless_rifle + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/boltactionrifle + category = "weaponry" + name = "bolt action rifle" + supplier = "zharkov" + description = "An Adhomian bolt-action rifle." + price = 1850 + items = list( + /obj/item/gun/projectile/shotgun/pump/rifle + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/derringer + category = "weaponry" + name = "derringer" + supplier = "zharkov" + description = "A blast from the past that can fit in your pocket." + price = 1250 + items = list( + /obj/item/gun/projectile/revolver/derringer + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/silencedpistol + category = "weaponry" + name = "silenced pistol" + supplier = "zharkov" + description = "Internally silenced for stealthy operations." + price = 2950 + items = list( + /obj/item/gun/projectile/silenced + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +//Ammunition + +/singleton/cargo_item/ammunitionbox_beanbag + category = "weaponry" + name = "shotgun ammunition box (beanbag shells)" + supplier = "zavodskoi" + description = "A box of less-lethal beanbag shells." + price = 45 + items = list( + /obj/item/storage/box/beanbags + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ammunitionbox_haywire + category = "weaponry" + name = "shotgun ammunition box (haywire shells)" + supplier = "zavodskoi" + description = "A box of EMP-inducing 'haywire' shotgun shells." + price = 600 + items = list( + /obj/item/storage/box/haywireshells + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ammunitionbox_incendiary + category = "weaponry" + name = "shotgun ammunition box (incendiary shells)" + supplier = "zavodskoi" + description = "A box of incendiary shotgun shells." + price = 100 + items = list( + /obj/item/storage/box/incendiaryshells + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ammunitionbox_shells + category = "weaponry" + name = "shotgun ammunition box (buckshot)" + supplier = "zavodskoi" + description = "A box of shotgun buckshot shells." + price = 450 + items = list( + /obj/item/storage/box/shotgunshells + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/ammunitionbox_slugs + category = "weaponry" + name = "shotgun ammunition box (slug)" + supplier = "zavodskoi" + description = "A box of shotgun slugs." + price = 500 + items = list( + /obj/item/storage/box/shotgunammo + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/illuminationshells_box + category = "weaponry" + name = "shotgun ammunition box (illumination)" + supplier = "zavodskoi" + description = "A box of illuminating shotgun shells." + price = 97 + items = list( + /obj/item/storage/box/flashshells + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/anti_materiel_cannon_cartridge + category = "weaponry" + name = "anti-materiel cannon cartridge" + supplier = "zavodskoi" + description = "A single use cartridge for a point-entry anti-materiel cannon." + price = 300 + items = list( + /obj/item/ammo_casing/peac + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/apcarbinemagazine_556 + category = "weaponry" + name = "AP carbine magazine (5.56mm)" + supplier = "zavodskoi" + description = "An AP 5.56 ammo magazine fit for a carbine, not an assault rifle." + price = 450 + items = list( + /obj/item/ammo_magazine/a556/carbine/ap + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/carbinemagazine_556 + category = "weaponry" + name = "carbine magazine (5.56mm)" + supplier = "zavodskoi" + description = "A 5.56 ammo magazine fit for a carbine, not an assault rifle." + price = 250 + items = list( + /obj/item/ammo_magazine/a556/carbine + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/magazine_556 + category = "weaponry" + name = "rifle magazine (5.56mm)" + supplier = "nanotrasen" + description = "A 5.56 ammo magazine for assault rifles." + price = 65 + items = list( + /obj/item/ammo_magazine/a556 + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/magazine_762 + category = "weaponry" + name = "rifle magazine (7.62mm)" + supplier = "zharkov" + description = "A 7.62mm rifle magazine." + price = 70 + items = list( + /obj/item/ammo_magazine/d762 + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/magazine_9 + category = "weaponry" + name = "pistol magazine (9mm)" + supplier = "zharkov" + description = "A 9mm pistol magazine." + price = 40 + items = list( + /obj/item/ammo_magazine/mc9mm + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/magazine_45 + category = "weaponry" + name = "pistol magazine (.45)" + supplier = "nanotrasen" + description = "A .45-caliber pistol magazine." + price = 200 + items = list( + /obj/item/ammo_magazine/c45m + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/magazine_45flash + category = "weaponry" + name = "pistol magazine (.45 flash)" + supplier = "nanotrasen" + description = "A .45-caliber less-lethal flash magazine." + price = 10 + items = list( + /obj/item/ammo_magazine/c45m/flash + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/topmounted_9mm + category = "weaponry" + name = "top mounted magazine (9mm)" + supplier = "zavodskoi" + description = "A top-mounted 9mm magazine designed for the ZI 550 machine pistol. Contains lethal rounds." + price = 25 + items = list( + /obj/item/ammo_magazine/mc9mmt + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/topmounted_9mmrubber + category = "weaponry" + name = "top mounted magazine (9mm rubber)" + supplier = "zavodskoi" + description = "A top-mounted 9mm magazine designed for the ZI 550 machine pistol. Contains less-lethal rubber rounds." + price = 25 + items = list( + /obj/item/ammo_magazine/mc9mmt/rubber + ) + access = ACCESS_SECURITY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/tranquilizerdarts_50cal_pps + category = "security" + name = "tranquilizer darts (.50 cal PPS)" + supplier = "nanotrasen" + description = "A magazine for some kind of gun." + price = 45 + items = list( + /obj/item/storage/box/tranquilizer + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/compacttungstenslug + category = "weaponry" + name = "compact tungsten slug" + supplier = "virgo" + description = "A box with several compact tungsten slugs, aimed for use in gauss carbines." + price = 500 + items = list( + /obj/item/storage/box/tungstenslugs + ) + access = ACCESS_ARMORY + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/franciscaapammo + category = "weaponry" + name = "francisca rotary cannon AP ammunition box" + supplier = "zavodskoi" + description = "A box of 40mm AP ammo for the francisca rotary cannon." + price = 1200 + items = list( + /obj/item/ship_ammunition/grauwolf_bundle/ap + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/franciscafmjammo + category = "weaponry" + name = "francisca rotary cannon FMJ ammunition box" + supplier = "zavodskoi" + description = "A box of 40mm FMJ ammo for the francisca rotary cannon." + price = 1000 + items = list( + /obj/item/ship_ammunition/grauwolf_bundle + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/grauwolfapflak + category = "weaponry" + name = "grauwolf AP flak" + supplier = "zavodskoi" + description = "Armor-Piercing shells for a flak battery." + price = 2500 + items = list( + /obj/item/ship_ammunition/grauwolf_bundle/ap + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/grauwolfheflak + category = "weaponry" + name = "grauwolf HE flak" + supplier = "zavodskoi" + description = "High-explosive shells for a flak battery." + price = 2000 + items = list( + /obj/item/ship_ammunition/grauwolf_bundle + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/longbowcasing + category = "weaponry" + name = "longbow casing" + supplier = "zavodskoi" + description = "A casing for a 406mm warhead." + price = 2000 + items = list( + /obj/item/ship_ammunition/longbow + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/longbowapwarhead + category = "weaponry" + name = "longbow AP warhead" + supplier = "zavodskoi" + description = "An armor-piercing 406mm warhead." + price = 3500 + items = list( + /obj/item/warhead/longbow/ap + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/longbowepwarhead + category = "weaponry" + name = "longbow EP warhead" + supplier = "zavodskoi" + description = "A bunker-buster 406mm warhead." + price = 3500 + items = list( + /obj/item/warhead/longbow/bunker + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/longbowhewarhead + category = "weaponry" + name = "longbow HE warhead" + supplier = "zavodskoi" + description = "A high-explosive 406mm warhead." + price = 3000 + items = list( + /obj/item/warhead/longbow + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/highpowerlongbowprimer + category = "weaponry" + name = "high-power longbow primer" + supplier = "zavodskoi" + description = "A high-power primer for a 406mm warhead." + price = 2000 + items = list( + /obj/item/primer/high + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/longbowwarheadprimer + category = "weaponry" + name = "longbow warhead primer" + supplier = "zavodskoi" + description = "A standard primer for a 406mm warhead." + price = 1200 + items = list( + /obj/item/primer + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/lowpowerlongbowprimer + category = "weaponry" + name = "low-power longbow primer" + supplier = "zavodskoi" + description = "A low-power primer for a 406mm warhead." + price = 800 + items = list( + /obj/item/primer/low + ) + access = ACCESS_CARGO + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm index edf73d94938..a4a32ced214 100644 --- a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm +++ b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm @@ -12,7 +12,7 @@ ui_auto_update = FALSE var/page = "main" //main - Main Menu, order - Order Page, item_details - Item Details Page, tracking - Tracking Page - var/selected_category = "" // Category that is currently selected + var/selected_category = null // Category that is currently selected var/selected_item = "" // Path of the currently selected item var/datum/cargo_order/co var/status_message //Status Message to be displayed to the user @@ -34,6 +34,9 @@ data["order_value"] = co.get_value(0) data["order_item_count"] = co.get_item_count() + if(!selected_category) + selected_category = SScargo.get_default_category() + //Pass Data for Main page if(page == "main") //Pass all available categories and the selected category @@ -105,7 +108,7 @@ //Add item to the order list if("add_item") var/datum/cargo_order_item/coi = new - var/datum/cargo_item/ci = SScargo.cargo_items[params["add_item"]] + var/singleton/cargo_item/ci = SScargo.cargo_items[params["add_item"]] if(ci) coi.ci = ci coi.calculate_price() diff --git a/code/modules/world_api/commands/server_management.dm b/code/modules/world_api/commands/server_management.dm index 1aed9b97f9a..515045901b2 100644 --- a/code/modules/world_api/commands/server_management.dm +++ b/code/modules/world_api/commands/server_management.dm @@ -8,14 +8,15 @@ /datum/topic_command/cargo_reload/run_command(queryparams) var/force = text2num(queryparams["force"]) - if(!SScargo.get_order_count()) - SScargo.load_from_sql() + if(!SScargo.load_cargo_files()) + SScargo.load_cargo_files() message_admins("Cargo has been reloaded via the API.") statuscode = 200 response = "Cargo Reloaded from SQL." + else if(force) - SScargo.load_from_sql() + SScargo.load_cargo_files() message_admins("Cargo has been force-reloaded via the API. All current orders have been purged.") statuscode = 200 response = "Cargo Force-Reloaded from SQL." diff --git a/config/example/cargo.json b/config/example/cargo.json deleted file mode 100644 index fad765dd7ce..00000000000 --- a/config/example/cargo.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "categories": { - "security": { - "name": "security", - "display_name": "Security", - "description": "Security Items", - "icon": "person", - "price_modifier": 1 - }, - "engineering": { - "name": "engineering", - "display_name": "Engineering", - "description": "Engineering Items", - "icon": "wrench", - "price_modifier": 1 - } - }, - "suppliers": { - "nanotrasen": { - "name": "Nano Trasen", - "description": "Your default supplier.", - "tag_line": "For all your station supplies.", - "shuttle_time": 100, - "shuttle_price": 500, - "available": 1, - "price_modifier": 1 - }, - "einsteinengines": { - "name": "Einstein Engies", - "description": "Manufacturer of high tech engineering equipment.", - "tag_line": "Everything your engineers need and more.", - "shuttle_time": 200, - "shuttle_price": 200, - "available": 1, - "price_modifier": 1 - }, - "weaponsco": { - "name": "Weapons Co", - "description": "Mass producing weapons. Nothing too fancy, but cheap.", - "tag_line": "Need to shoot stuff badly ? - We got you covered.", - "shuttle_time": 300, - "shuttle_price": 300, - "available": 1, - "price_modifier": 1 - } - }, - "items": { - ".45 Pistol": { - "name": ".45 Pistol", - "supplier": "weaponsco", - "description": "A standard sidearm, found pretty much everywhere humans are. Uses .45 rounds.", - "categories": ["medical", "security", "engineering", "civilian"], - "price": 100, - "items": { - ".45 Pistol": { - "path": "/obj/item/gun/projectile/sec", - "vars": [] - } - }, - "access": 3, - "container_type": "crate", - "groupable": 1, - "item_mul": 1 - }, - "/obj/item/clothing/gloves/yellow": { - "name": "Insulated Gloves", - "supplier": "einsteinengines", - "description": "Rubber Insulated Gloves", - "categories": ["engineering"], - "price": 20, - "items": { - "Insulated Gloves": { - "path": "/obj/item/clothing/gloves/yellow", - "vars": [] - } - }, - "access": 10, - "container_type": "crate", - "groupable": 1, - "item_mul": 2 - } - } -} \ No newline at end of file diff --git a/html/changelogs/nauticall-cargo_code.yml b/html/changelogs/nauticall-cargo_code.yml new file mode 100644 index 00000000000..7ed0f2df5d0 --- /dev/null +++ b/html/changelogs/nauticall-cargo_code.yml @@ -0,0 +1,62 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: nauticall + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - refactor: "Moves the data containing cargo items (i.e. the ones you order from ops and get in the cargo shuttle) from the online database to the codebase." + - refactor: "Refactors cargo items to use singletons instead of datums for cargo_supplier, cargo_category, and cargo_item. Multiple-instnace things like cargo_orders, etc. still use datums." + - bugfix: "Fixed a bunch of strange discrepancies in categories, suppliers, and pricing for various cargo items." + - bugfix: "Clicking the 'Details' button on the Cargo Order app now actually gives you details instead of bluescreening." + - qol: "Added some UI elements to the Cargo Order app to make it prettier and show tooltips on suppliers. Also now has search functionality." diff --git a/tgui/packages/tgui/interfaces/CargoOrder.tsx b/tgui/packages/tgui/interfaces/CargoOrder.tsx index bab3002e6d0..515400727de 100644 --- a/tgui/packages/tgui/interfaces/CargoOrder.tsx +++ b/tgui/packages/tgui/interfaces/CargoOrder.tsx @@ -1,6 +1,6 @@ import { BooleanLike } from '../../common/react'; import { useBackend, useLocalState } from '../backend'; -import { Box, Button, Icon, LabeledList, Section, Table, Tabs } from '../components'; +import { Box, Button, Icon, LabeledList, Section, Table, Tabs, Tooltip, Stack, Input } from '../components'; import { NtosWindow } from '../layouts'; import { sanitizeText } from '../sanitize'; @@ -34,6 +34,7 @@ type Item = { id: number; supplier: string; supplier_data: Supplier; + access: string; }; type Supplier = { @@ -83,9 +84,9 @@ export const CargoOrder = (props, context) => { const { act, data } = useBackend(context); return ( - + - + act('page', { page: 'main' })} selected={data.page === 'main'}> @@ -110,85 +111,137 @@ export const MainPage = (props, context) => { 'details', false ); + const [searchTerm, setSearchTerm] = useLocalState( + context, + `searchTerm`, + `` + ); return ( -
+
- - Order - - - - {data.order_item_count} - - - {data.order_value} 电 - - {data.status_message && ( - - {data.status_message} - - )} - - -
-
- - {data.cargo_categories.map((category) => ( - - act('select_category', { select_category: category.name }) - }> - {category.display_name} - - ))} - - {data.category_items.map((item) => ( -
act('add_item', { add_item: item.id.toString() }) // don't ask why this is the way it is - } - /> - }> - {item.description} + + + Your Basket + + - - {item.supplier_data.name} + + {data.order_item_count} + + + {data.order_value} 电 + {data.status_message && ( + + {data.status_message} + + )} -
- ))} + + +
-
+
{ + setSearchTerm(value); + }} + value={searchTerm} + /> + } + /> + + {/* Left Side: Tabs Section */} + + + {data.cargo_categories.map((category) => ( + + act('select_category', { select_category: category.name }) + }> + {category.display_name} + + ))} + + + + {/* Right Side: Content Section */} + + {data.category_items + .filter( + (c) => + c.name?.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1 + ) + .map((item) => ( +
+ act('add_item', { add_item: item.name.toString() }) + } + /> + }> + + {item.description} + + + + + {item.supplier_data.name} + + + + {item.access !== 'none' ? ( + + {item.access} + + ) : ( + <>None + )} + + + + +
+ ))} +
+
+ ); };