mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Port s NIRN/bounty board, tweaks budgets, and other small modular computer things (#15019)
* nirn, bounty board, and other things * oops * oops x2
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#define PAYCHECK_COMMAND 100
|
||||
|
||||
#define STARTING_SEC_BUDGET 14000
|
||||
#define STARTING_CAR_BUDGET 5000
|
||||
|
||||
#define MAX_GRANT_CIV 2500
|
||||
#define MAX_GRANT_ENG 3000
|
||||
|
||||
@@ -78,9 +78,11 @@
|
||||
#define PROGRAM_STATE_BACKGROUND 1
|
||||
#define PROGRAM_STATE_ACTIVE 2
|
||||
//Program categories
|
||||
#define PROGRAM_CATEGORY_CREW "Crew"
|
||||
#define PROGRAM_CATEGORY_CMD "Command"
|
||||
#define PROGRAM_CATEGORY_SEC "Security"
|
||||
#define PROGRAM_CATEGORY_ENGI "Engineering"
|
||||
#define PROGRAM_CATEGORY_ROBO "Robotics"
|
||||
#define PROGRAM_CATEGORY_SCI "Science"
|
||||
#define PROGRAM_CATEGORY_MED "Medical"
|
||||
#define PROGRAM_CATEGORY_SUPL "Supply"
|
||||
#define PROGRAM_CATEGORY_MISC "Other"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ SUBSYSTEM_DEF(economy)
|
||||
init_order = INIT_ORDER_ECONOMY
|
||||
runlevels = RUNLEVEL_GAME
|
||||
var/roundstart_paychecks = 5
|
||||
var/budget_pool = 35000
|
||||
var/budget_starting_amt = 500
|
||||
var/list/department_accounts = list(ACCOUNT_CIV = ACCOUNT_CIV_NAME,
|
||||
ACCOUNT_ENG = ACCOUNT_ENG_NAME,
|
||||
ACCOUNT_SCI = ACCOUNT_SCI_NAME,
|
||||
@@ -18,35 +18,35 @@ SUBSYSTEM_DEF(economy)
|
||||
var/full_ancap = FALSE // Enables extra money charges for things that normally would be free, such as sleepers/cryo/cloning.
|
||||
//Take care when enabling, as players will NOT respond well if the economy is set up for low cash flows.
|
||||
var/datum/station_state/engineering_check = new /datum/station_state()
|
||||
var/alive_humans_bounty = 100
|
||||
var/alive_humans_bounty = 1
|
||||
var/crew_safety_bounty = 1500
|
||||
var/mood_bounty = 100
|
||||
var/mood_bounty = 1
|
||||
var/techweb_bounty = 25 // yogs start - nerf insane rd budget
|
||||
var/slime_bounty = list("grey" = 10,
|
||||
var/slime_bounty = list("grey" = 0,
|
||||
// tier 1
|
||||
"orange" = 75,
|
||||
"metal" = 75,
|
||||
"blue" = 75,
|
||||
"purple" = 75,
|
||||
"orange" = 1,
|
||||
"metal" = 1,
|
||||
"blue" = 1,
|
||||
"purple" = 1,
|
||||
// tier 2
|
||||
"dark purple" = 200,
|
||||
"dark blue" = 200,
|
||||
"green" = 200,
|
||||
"silver" = 200,
|
||||
"gold" = 200,
|
||||
"yellow" = 200,
|
||||
"red" = 200,
|
||||
"pink" = 200,
|
||||
"dark purple" = 2,
|
||||
"dark blue" = 2,
|
||||
"green" = 2,
|
||||
"silver" = 2,
|
||||
"gold" = 2,
|
||||
"yellow" = 2,
|
||||
"red" = 2,
|
||||
"pink" = 2,
|
||||
// tier 3
|
||||
"cerulean" = 350,
|
||||
"sepia" = 350,
|
||||
"bluespace" = 350,
|
||||
"pyrite" = 350,
|
||||
"light pink" = 350,
|
||||
"oil" = 350,
|
||||
"adamantine" = 350, // yogs end
|
||||
"cerulean" = 3,
|
||||
"sepia" = 3,
|
||||
"bluespace" = 3,
|
||||
"pyrite" = 3,
|
||||
"light pink" = 3,
|
||||
"oil" = 3,
|
||||
"adamantine" = 3, // yogs end
|
||||
// tier 4
|
||||
"rainbow" = 1000)
|
||||
"rainbow" = 10)
|
||||
var/list/bank_accounts = list() //List of normal accounts (not department accounts)
|
||||
var/list/dep_cards = list()
|
||||
///ref to moneysink. Only one should exist on the map. Has its payout() proc called every budget cycle
|
||||
@@ -57,12 +57,16 @@ SUBSYSTEM_DEF(economy)
|
||||
var/pack_price_modifier = 1
|
||||
|
||||
/datum/controller/subsystem/economy/Initialize(timeofday)
|
||||
var/budget_to_hand_out = round(budget_pool / department_accounts.len)
|
||||
for(var/A in department_accounts)
|
||||
if(A == ACCOUNT_SEC)
|
||||
new /datum/bank_account/department(A, STARTING_SEC_BUDGET)
|
||||
continue
|
||||
new /datum/bank_account/department(A, budget_to_hand_out)
|
||||
switch(A)
|
||||
if(ACCOUNT_SEC)
|
||||
new /datum/bank_account/department(A, STARTING_SEC_BUDGET)
|
||||
continue
|
||||
if(ACCOUNT_CAR)
|
||||
new /datum/bank_account/department(A, STARTING_CAR_BUDGET)
|
||||
continue
|
||||
else
|
||||
new /datum/bank_account/department(A, budget_starting_amt)
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/economy/fire(resumed = 0)
|
||||
|
||||
@@ -79,8 +79,14 @@
|
||||
name = "private crate"
|
||||
desc = "A crate cover designed to only open for who purchased its contents."
|
||||
icon_state = "privatecrate"
|
||||
///Account of the person buying the crate if private purchasing.
|
||||
var/datum/bank_account/buyer_account
|
||||
///Department of the person buying the crate if buying via the NIRN app.
|
||||
var/datum/bank_account/department/department_account
|
||||
///Is the secure crate opened or closed?
|
||||
var/privacy_lock = TRUE
|
||||
///Is the crate being bought by a person, or a budget card?
|
||||
var/department_purchase = FALSE
|
||||
|
||||
/obj/structure/closet/crate/secure/owned/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -89,22 +95,31 @@
|
||||
/obj/structure/closet/crate/secure/owned/Initialize(mapload, datum/bank_account/_buyer_account)
|
||||
. = ..()
|
||||
buyer_account = _buyer_account
|
||||
if(istype(buyer_account, /datum/bank_account/department))
|
||||
department_purchase = TRUE
|
||||
department_account = buyer_account
|
||||
|
||||
/obj/structure/closet/crate/secure/owned/togglelock(mob/living/user, silent)
|
||||
if(secure && !broken)
|
||||
if(allowed(user))
|
||||
if(privacy_lock)
|
||||
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
|
||||
if(!id_card || !id_card.registered_account || (id_card.registered_account != buyer_account))
|
||||
to_chat(user, span_notice("Bank account does not match with buyer!"))
|
||||
return
|
||||
if(iscarbon(user))
|
||||
add_fingerprint(user)
|
||||
locked = !locked
|
||||
user.visible_message(span_notice("[user] [locked ? null : "un"]locks [src]."),
|
||||
span_notice("You [locked ? null : "un"]lock [src]."))
|
||||
update_icon()
|
||||
else if(!silent)
|
||||
to_chat(user, span_notice("Access Denied"))
|
||||
else if(secure && broken)
|
||||
if(!secure)
|
||||
return
|
||||
if(broken)
|
||||
to_chat(user, span_warning("\The [src] is broken!"))
|
||||
return
|
||||
if(!allowed(user))
|
||||
if(!silent)
|
||||
to_chat(user, span_notice("Access Denied"))
|
||||
return
|
||||
if(privacy_lock)
|
||||
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
|
||||
if(!id_card || !id_card.registered_account)
|
||||
to_chat(user, span_notice("No bank account found!"))
|
||||
return
|
||||
if((id_card.registered_account != buyer_account) && !(department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id)))
|
||||
to_chat(user, span_notice("Bank account does not match with buyer!"))
|
||||
return
|
||||
if(iscarbon(user))
|
||||
add_fingerprint(user)
|
||||
locked = !locked
|
||||
user.visible_message(span_notice("[user] [locked ? null : "un"]locks [src]."),
|
||||
span_notice("You [locked ? null : "un"]lock [src]."))
|
||||
update_icon()
|
||||
|
||||
@@ -3,7 +3,13 @@
|
||||
desc = "Used to order supplies, approve requests, and control the shuttle."
|
||||
icon_screen = "supply"
|
||||
circuit = /obj/item/circuitboard/computer/cargo
|
||||
light_color = "#E2853D"//orange
|
||||
///Can the supply console send the shuttle back and forth? Used in the UI backend.
|
||||
var/can_send = TRUE
|
||||
///Can this console only send requests?
|
||||
var/requestonly = FALSE
|
||||
///Can you approve requests placed for cargo? Works differently between the app and the computer.
|
||||
var/can_approve_requests = TRUE
|
||||
var/contraband = FALSE
|
||||
var/safety_warning = "For safety reasons, the automated supply shuttle \
|
||||
cannot transport live organisms, human remains, classified nuclear weaponry \
|
||||
@@ -11,14 +17,14 @@
|
||||
var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible."
|
||||
var/self_paid = FALSE
|
||||
|
||||
light_color = "#E2853D"//orange
|
||||
|
||||
/obj/machinery/computer/cargo/request
|
||||
name = "supply request console"
|
||||
desc = "Used to request supplies from cargo."
|
||||
icon_screen = "request"
|
||||
circuit = /obj/item/circuitboard/computer/cargo/request
|
||||
requestonly = TRUE
|
||||
can_send = FALSE
|
||||
can_approve_requests = FALSE
|
||||
|
||||
/obj/machinery/computer/cargo/Initialize()
|
||||
. = ..()
|
||||
@@ -68,6 +74,7 @@
|
||||
data["docked"] = SSshuttle.supply.mode == SHUTTLE_IDLE
|
||||
data["loan"] = !!SSshuttle.shuttle_loan
|
||||
data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched
|
||||
data["can_send"] = can_send
|
||||
var/message = "Remember to stamp and send back the supply manifests."
|
||||
if(SSshuttle.centcom_message)
|
||||
message = SSshuttle.centcom_message
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
var/contraband = FALSE
|
||||
var/cost = 700 // Minimum cost, or infinite points are possible.
|
||||
var/access = FALSE
|
||||
var/access_view = FALSE
|
||||
var/access_any = FALSE
|
||||
var/list/contains = null
|
||||
var/crate_name = "crate"
|
||||
@@ -261,6 +262,7 @@
|
||||
name = "Ammo Crate"
|
||||
desc = "Contains two 20-round magazines for the WT-550 Auto Rifle, three boxes of buckshot ammo, three boxes of rubber ammo, and special .38 speedloaders. Requires Security access to open."
|
||||
cost = 2500
|
||||
access_view = ACCESS_ARMORY
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/storage/box/lethalshot,
|
||||
@@ -278,6 +280,7 @@
|
||||
name = "Armor Crate"
|
||||
desc = "Three vests of well-rounded, decently-protective armor. Requires Security access to open."
|
||||
cost = 1000
|
||||
access_view = ACCESS_SECURITY
|
||||
contains = list(/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/suit/armor/vest)
|
||||
@@ -285,7 +288,7 @@
|
||||
|
||||
/datum/supply_pack/security/stormtrooper
|
||||
name = "Stormtrooper Crate"
|
||||
desc = "Three Sets of standard issue Stormtrooper Armor, Should help you defeat light wielding wizards . Requires Security access to open."
|
||||
desc = "Three Sets of standard issue Stormtrooper Armor, Should help you defeat light wielding wizards. Requires Security access to open."
|
||||
cost = 10000
|
||||
contains = list(/obj/item/clothing/suit/armor/stormtrooper,
|
||||
/obj/item/clothing/suit/armor/stormtrooper,
|
||||
@@ -299,6 +302,7 @@
|
||||
name = "Disabler Crate"
|
||||
desc = "Three stamina-draining disabler weapons. Requires Security access to open."
|
||||
cost = 1500
|
||||
access_view = ACCESS_SECURITY
|
||||
contains = list(/obj/item/gun/energy/disabler,
|
||||
/obj/item/gun/energy/disabler,
|
||||
/obj/item/gun/energy/disabler)
|
||||
@@ -308,6 +312,7 @@
|
||||
name = "Forensics Crate"
|
||||
desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials(tm). Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, and of course, a fedora. Requires Security access to open."
|
||||
cost = 2000
|
||||
access_view = ACCESS_MORGUE
|
||||
contains = list(/obj/item/detective_scanner,
|
||||
/obj/item/storage/box/evidence,
|
||||
/obj/item/camera,
|
||||
@@ -329,6 +334,7 @@
|
||||
name = "Lasers Crate"
|
||||
desc = "Contains three lethal, high-energy laser guns. Requires Security access to open."
|
||||
cost = 2000
|
||||
access_view = ACCESS_ARMORY
|
||||
contains = list(/obj/item/gun/energy/laser,
|
||||
/obj/item/gun/energy/laser,
|
||||
/obj/item/gun/energy/laser)
|
||||
@@ -337,17 +343,19 @@
|
||||
/datum/supply_pack/security/securitybarriers
|
||||
name = "Security Barrier Grenades"
|
||||
desc = "Stem the tide with four Security Barrier grenades. Requires Security access to open."
|
||||
cost = 2000
|
||||
access_view = ACCESS_BRIG
|
||||
contains = list(/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier,
|
||||
/obj/item/grenade/barrier)
|
||||
cost = 2000
|
||||
crate_name = "security barriers crate"
|
||||
|
||||
/datum/supply_pack/security/securityclothes
|
||||
name = "Security Clothing Crate"
|
||||
desc = "Contains appropriate outfits for the station's private security force. Contains outfits for the Warden, Head of Security, and two Security Officers. Each outfit comes with a rank-appropriate jumpsuit, suit, and beret. Requires Security access to open."
|
||||
cost = 3000
|
||||
access_view = ACCESS_SECURITY
|
||||
contains = list(/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/suit/security/officer,
|
||||
@@ -366,6 +374,7 @@
|
||||
name = "Security Supplies Crate"
|
||||
desc = "Contains seven flashbangs, seven teargas grenades, six flashes, and seven handcuffs. Requires Security access to open."
|
||||
cost = 1000
|
||||
access_view = ACCESS_ARMORY
|
||||
contains = list(/obj/item/storage/box/flashbangs,
|
||||
/obj/item/storage/box/teargas,
|
||||
/obj/item/storage/box/flashes,
|
||||
@@ -391,6 +400,7 @@
|
||||
name = "Standard Firing Pins Crate"
|
||||
desc = "Upgrade your arsenal with 10 standard firing pins. Requires Security access to open."
|
||||
cost = 2000
|
||||
access_view = ACCESS_ARMORY
|
||||
contains = list(/obj/item/storage/box/firingpins,
|
||||
/obj/item/storage/box/firingpins)
|
||||
crate_name = "firing pins crate"
|
||||
@@ -408,6 +418,7 @@
|
||||
name = "Stun Batons Crate"
|
||||
desc = "Arm the Civil Protection Forces with three stun batons. Batteries included. Requires Security access to open."
|
||||
cost = 1000
|
||||
access_view = ACCESS_SECURITY
|
||||
contains = list(/obj/item/melee/baton/loaded,
|
||||
/obj/item/melee/baton/loaded,
|
||||
/obj/item/melee/baton/loaded)
|
||||
@@ -430,6 +441,7 @@
|
||||
/datum/supply_pack/security/armory
|
||||
group = "Armory"
|
||||
access = ACCESS_ARMORY
|
||||
access_view = ACCESS_ARMORY
|
||||
crate_type = /obj/structure/closet/crate/secure/weapon
|
||||
|
||||
/datum/supply_pack/security/armory/bulletarmor
|
||||
@@ -725,6 +737,7 @@
|
||||
name = "Anti-breach Shield Projector Crate"
|
||||
desc = "Hull breaches again? Say no more with the Nanotrasen Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains two shield projectors."
|
||||
cost = 2500
|
||||
access_view = ACCESS_ENGINE_EQUIP
|
||||
contains = list(/obj/machinery/shieldgen,
|
||||
/obj/machinery/shieldgen)
|
||||
crate_name = "anti-breach shield projector crate"
|
||||
@@ -733,6 +746,7 @@
|
||||
name = "APLU MK-I Crate"
|
||||
desc = "A do-it-yourself kit for building an ALPU MK-I \"Ripley\", designed for lifting and carrying heavy equipment, and other station tasks. Batteries not included."
|
||||
cost = 2000
|
||||
access_view = ACCESS_ROBOTICS
|
||||
contains = list(/obj/item/mecha_parts/chassis/ripley,
|
||||
/obj/item/mecha_parts/part/ripley_torso,
|
||||
/obj/item/mecha_parts/part/ripley_right_arm,
|
||||
@@ -774,6 +788,7 @@
|
||||
name = "Engineering Gear Crate"
|
||||
desc = "Gear up with three toolbelts, high-visibility vests, welding goggles, hardhats, and two pairs of meson goggles!"
|
||||
cost = 1300
|
||||
access_view = ACCESS_ENGINE
|
||||
contains = list(/obj/item/storage/belt/utility,
|
||||
/obj/item/storage/belt/utility,
|
||||
/obj/item/storage/belt/utility,
|
||||
@@ -794,6 +809,7 @@
|
||||
name = "Insulated Gloves Single-Pack"
|
||||
desc = "The backbone of modern society. Barely ever ordered for actual engineering. Single Order."
|
||||
cost = 800
|
||||
access_view = ACCESS_ENGINE_EQUIP
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/clothing/gloves/color/yellow)
|
||||
|
||||
@@ -823,6 +839,7 @@
|
||||
name = "P.A.C.M.A.N Generator Crate"
|
||||
desc = "Engineers can't set up the engine? Not an issue for you, once you get your hands on this P.A.C.M.A.N. Generator! Takes in plasma and spits out sweet sweet energy."
|
||||
cost = 2500
|
||||
access_view = ACCESS_ENGINE
|
||||
contains = list(/obj/machinery/power/port_gen/pacman)
|
||||
crate_name = "PACMAN generator crate"
|
||||
crate_type = /obj/structure/closet/crate/engineering/electrical
|
||||
@@ -842,6 +859,7 @@
|
||||
desc = "Through advanced bluespace-shenanigans, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open."
|
||||
cost = 5000
|
||||
access = ACCESS_CE
|
||||
access_view = ACCESS_CE
|
||||
contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo)
|
||||
crate_name = "shuttle engine crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
@@ -850,13 +868,14 @@
|
||||
/datum/supply_pack/engineering/tools
|
||||
name = "Toolbox Crate"
|
||||
desc = "Any robust spaceman is never far from their trusty toolbox. Contains three electrical toolboxes and three mechanical toolboxes."
|
||||
cost = 1000
|
||||
access_view = ACCESS_ENGINE_EQUIP
|
||||
contains = list(/obj/item/storage/toolbox/electrical,
|
||||
/obj/item/storage/toolbox/electrical,
|
||||
/obj/item/storage/toolbox/electrical,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/storage/toolbox/mechanical)
|
||||
cost = 1000
|
||||
crate_name = "toolbox crate"
|
||||
|
||||
/datum/supply_pack/service/vending/engivend
|
||||
@@ -871,6 +890,7 @@
|
||||
desc = "The pride of Nanotrasen Naval Command. The legendary Bluespace Artillery Cannon is a devastating feat of human engineering and testament to wartime determination. Highly advanced research is required for proper construction. "
|
||||
cost = 15000
|
||||
special = TRUE
|
||||
access_view = ACCESS_HEADS
|
||||
contains = list(/obj/item/circuitboard/machine/bsa/front,
|
||||
/obj/item/circuitboard/machine/bsa/middle,
|
||||
/obj/item/circuitboard/machine/bsa/back,
|
||||
@@ -883,6 +903,7 @@
|
||||
desc = "Secure the longevity of the current state of humanity within this massive library of scientific knowledge, capable of granting superhuman powers and abilities. Highly advanced research is required for proper construction. Also contains five DNA probes."
|
||||
cost = 12000
|
||||
special = TRUE
|
||||
access_view = ACCESS_HEADS
|
||||
contains = list(
|
||||
/obj/item/circuitboard/machine/dna_vault,
|
||||
/obj/item/dna_probe,
|
||||
@@ -898,6 +919,7 @@
|
||||
desc = "Contains five DNA probes for use in the DNA vault."
|
||||
cost = 3000
|
||||
special = TRUE
|
||||
access_view = ACCESS_HEADS
|
||||
contains = list(/obj/item/dna_probe,
|
||||
/obj/item/dna_probe,
|
||||
/obj/item/dna_probe,
|
||||
@@ -912,6 +934,7 @@
|
||||
desc = "Protect the very existence of this station with these Anti-Meteor defenses. Contains three Shield Generator Satellites."
|
||||
cost = 3000
|
||||
special = TRUE
|
||||
access_view = ACCESS_HEADS
|
||||
contains = list(
|
||||
/obj/machinery/satellite/meteor_shield,
|
||||
/obj/machinery/satellite/meteor_shield,
|
||||
@@ -925,6 +948,7 @@
|
||||
desc = "A control system for the Shield Generator Satellite system."
|
||||
cost = 5000
|
||||
special = TRUE
|
||||
access_view = ACCESS_HEADS
|
||||
contains = list(/obj/item/circuitboard/computer/sat_control)
|
||||
crate_name= "shield control board crate"
|
||||
|
||||
@@ -935,6 +959,7 @@
|
||||
|
||||
/datum/supply_pack/engine
|
||||
group = "Engine Construction"
|
||||
access_view = ACCESS_ENGINE
|
||||
crate_type = /obj/structure/closet/crate/engineering
|
||||
|
||||
/datum/supply_pack/engine/emitter
|
||||
@@ -1055,6 +1080,7 @@
|
||||
name = "50 Empty License Plates"
|
||||
desc = "'Put those prisoners to work' - Jedi Yoda probably"
|
||||
cost = 1000 // 50 * 25 - 1000 = 250 credits profit
|
||||
access_view = ACCESS_SEC_DOORS
|
||||
contains = list(/obj/item/stack/license_plates/empty/fifty)
|
||||
crate_name = "empty license plate crate"
|
||||
|
||||
@@ -1112,6 +1138,7 @@
|
||||
desc = "Contains a canister of BZ. Requires Toxins access to open."
|
||||
cost = 8000
|
||||
access = ACCESS_TOX_STORAGE
|
||||
access_view = ACCESS_ATMOSPHERICS
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/bz)
|
||||
crate_name = "BZ canister crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/science
|
||||
@@ -1120,6 +1147,7 @@
|
||||
name = "Carbon Dioxide Canister"
|
||||
desc = "Contains a canister of Carbon Dioxide."
|
||||
cost = 3000
|
||||
access_view = ACCESS_ATMOSPHERICS
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
|
||||
crate_name = "carbon dioxide canister crate"
|
||||
crate_type = /obj/structure/closet/crate/large
|
||||
@@ -1161,6 +1189,7 @@
|
||||
desc = "Contains a canister of Nitrous Oxide. Requires Atmospherics access to open."
|
||||
cost = 3000
|
||||
access = ACCESS_ATMOSPHERICS
|
||||
access_view = ACCESS_ATMOSPHERICS
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide)
|
||||
crate_name = "nitrous oxide canister crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
@@ -1195,6 +1224,7 @@
|
||||
|
||||
/datum/supply_pack/medical
|
||||
group = "Medical"
|
||||
access_view = ACCESS_MEDICAL
|
||||
crate_type = /obj/structure/closet/crate/medical
|
||||
|
||||
/datum/supply_pack/medical/bloodpacks
|
||||
@@ -1439,6 +1469,7 @@
|
||||
desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
|
||||
cost = 2500
|
||||
access = ACCESS_CMO
|
||||
access_view = ACCESS_VIROLOGY
|
||||
contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion,
|
||||
/obj/item/reagent_containers/glass/bottle/cold,
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus,
|
||||
@@ -1473,6 +1504,7 @@
|
||||
|
||||
/datum/supply_pack/science
|
||||
group = "Science"
|
||||
access_view = ACCESS_RESEARCH
|
||||
crate_type = /obj/structure/closet/crate/science
|
||||
|
||||
/datum/supply_pack/science/plasma
|
||||
@@ -1480,6 +1512,7 @@
|
||||
desc = "Everything you need to burn something to the ground, this contains three plasma assembly sets. Each set contains a plasma tank, igniter, proximity sensor, and timer! Warranty void if exposed to high temperatures. Requires Toxins access to open."
|
||||
cost = 1000
|
||||
access = ACCESS_TOX_STORAGE
|
||||
access_view = ACCESS_TOX_STORAGE
|
||||
contains = list(/obj/item/tank/internals/plasma,
|
||||
/obj/item/tank/internals/plasma,
|
||||
/obj/item/tank/internals/plasma,
|
||||
@@ -1500,6 +1533,7 @@
|
||||
desc = "The tools you need to replace those finicky humans with a loyal robot army! Contains four proximity sensors, two empty first aid kits, two health analyzers, two red hardhats, two mechanical toolboxes, and two cleanbot assemblies! Requires Robotics access to open."
|
||||
cost = 1500
|
||||
access = ACCESS_ROBOTICS
|
||||
access_view = ACCESS_ROBOTICS
|
||||
contains = list(/obj/item/assembly/prox_sensor,
|
||||
/obj/item/assembly/prox_sensor,
|
||||
/obj/item/assembly/prox_sensor,
|
||||
@@ -1521,6 +1555,7 @@
|
||||
name = "RPED crate"
|
||||
desc = "Need to rebuild the ORM but science got annihialted after a bomb test? Buy this for the most advanced parts NT can give you."
|
||||
cost = 1500
|
||||
access_view = FALSE
|
||||
contains = list(/obj/item/storage/part_replacer/cargo)
|
||||
crate_name = "\improper RPED crate"
|
||||
|
||||
@@ -1529,6 +1564,7 @@
|
||||
desc = "These high powered Shield Wall Generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Contains four shield wall generators. Requires Teleporter access to open."
|
||||
cost = 2000
|
||||
access = ACCESS_TELEPORTER
|
||||
access_view = ACCESS_TELEPORTER
|
||||
contains = list(/obj/machinery/shieldwallgen,
|
||||
/obj/machinery/shieldwallgen,
|
||||
/obj/machinery/shieldwallgen,
|
||||
@@ -1584,6 +1620,7 @@
|
||||
name = "High-traction Floor Tiles"
|
||||
desc = "Make slipping a thing of the past with thirty industrial-grade anti-slip floortiles!"
|
||||
cost = 2000
|
||||
access_view = ACCESS_JANITOR
|
||||
contains = list(/obj/item/stack/tile/noslip/thirty)
|
||||
crate_name = "high-traction floor tiles crate"
|
||||
|
||||
@@ -1591,6 +1628,7 @@
|
||||
name = "Janitorial Supplies Crate"
|
||||
desc = "Fight back against dirt and grime with Nanotrasen's Janitorial Essentials(tm)! Contains three buckets, caution signs, and cleaner grenades. Also has a single mop, spray cleaner, rag, and trash bag."
|
||||
cost = 1000
|
||||
access_view = ACCESS_JANITOR
|
||||
contains = list(/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
@@ -1707,6 +1745,7 @@
|
||||
desc = "All the miners died too fast? Assistant wants to get a taste of life off-station? Either way, this kit is the best way to turn a regular crewman into an ore-producing, monster-slaying machine. Contains meson goggles, a pickaxe, advanced mining scanner, cargo headset, ore bag, gasmask, an explorer suit and a miner ID upgrade. Requires QM access to open."
|
||||
cost = 2500
|
||||
access = ACCESS_QM
|
||||
access_view = ACCESS_MINING_STATION
|
||||
contains = list(/obj/item/storage/backpack/duffelbag/mining_conscript)
|
||||
crate_name = "shaft miner starter kit"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
@@ -1835,6 +1874,9 @@
|
||||
group = "Food & Hydroponics"
|
||||
crate_type = /obj/structure/closet/crate/freezer
|
||||
|
||||
/datum/supply_pack/organic/hydroponics
|
||||
access_view = ACCESS_HYDROPONICS
|
||||
|
||||
/datum/supply_pack/organic/hydroponics/beekeeping_suits
|
||||
name = "Beekeeper Suit Crate"
|
||||
desc = "Bee business booming? Better be benevolent and boost botany by bestowing bi-Beekeeper-suits! Contains two beekeeper suits and matching headwear."
|
||||
@@ -1899,6 +1941,7 @@
|
||||
name = "Exotic Seeds Crate"
|
||||
desc = "Any entrepreneuring botanist's dream. Contains fourteen different seeds, including three replica-pod seeds and two mystery seeds!"
|
||||
cost = 1500
|
||||
access_view = ACCESS_HYDROPONICS
|
||||
contains = list(/obj/item/seeds/nettle,
|
||||
/obj/item/seeds/replicapod,
|
||||
/obj/item/seeds/replicapod,
|
||||
@@ -2621,6 +2664,7 @@
|
||||
name = "Book Crate"
|
||||
desc = "Surplus from the Nanotrasen Archives, these five books are sure to be good reads."
|
||||
cost = 1500
|
||||
access_view = ACCESS_LIBRARY
|
||||
contains = list(/obj/item/book/codex_gigas,
|
||||
/obj/item/book/manual/random/,
|
||||
/obj/item/book/manual/random/,
|
||||
@@ -2675,6 +2719,7 @@
|
||||
name = "Funeral Supply crate"
|
||||
desc = "At the end of the day, someone's gonna want someone dead. Give them a proper send-off with these funeral supplies! Contains a coffin with burial garmets and flowers."
|
||||
cost = 600 //doesn't sell for 500 credits like a normal crate so its fine
|
||||
access_view = ACCESS_CHAPEL_OFFICE
|
||||
contains = list(/obj/item/clothing/under/burial,
|
||||
/obj/item/reagent_containers/food/snacks/grown/harebell,
|
||||
/obj/item/reagent_containers/food/snacks/grown/poppy/geranium)
|
||||
@@ -2685,6 +2730,7 @@
|
||||
name = "Religious Supplies Crate"
|
||||
desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets."
|
||||
cost = 4000 // it costs so much because the Space Church is ran by Space Jews
|
||||
access_view = ACCESS_CHAPEL_OFFICE
|
||||
contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/holywater,
|
||||
/obj/item/storage/book/bible/booze,
|
||||
@@ -2723,56 +2769,42 @@
|
||||
|
||||
/datum/supply_pack/misc/pda
|
||||
name = "Modular Personal Digital Assistant Crate"
|
||||
desc = "A create containing five modular PDAs, enough for an entire department."
|
||||
cost = 500
|
||||
contains = list(/obj/item/modular_computer/tablet/pda/preset/basic,
|
||||
/obj/item/modular_computer/tablet/pda/preset/basic,
|
||||
/obj/item/modular_computer/tablet/pda/preset/basic,
|
||||
/obj/item/modular_computer/tablet/pda/preset/basic,
|
||||
/obj/item/modular_computer/tablet/pda/preset/basic)
|
||||
desc = "A create containing a modular PDA."
|
||||
cost = 100
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/modular_computer/tablet/pda/preset/basic)
|
||||
crate_name = "pda crate"
|
||||
|
||||
/datum/supply_pack/misc/laptop
|
||||
name = "Modular Laptop Crate"
|
||||
desc = "A create containing five modular laptop computers, enough for an entire department."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/modular_computer/laptop/preset,
|
||||
/obj/item/modular_computer/laptop/preset,
|
||||
/obj/item/modular_computer/laptop/preset,
|
||||
/obj/item/modular_computer/laptop/preset,
|
||||
/obj/item/modular_computer/laptop/preset)
|
||||
desc = "A create a modular laptop computer."
|
||||
cost = 200
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/modular_computer/laptop/preset)
|
||||
crate_name = "laptop crate"
|
||||
|
||||
/datum/supply_pack/misc/tablet
|
||||
name = "Modular Tablet Crate"
|
||||
desc = "A create containing five modular tablet computers, enough for an entire department."
|
||||
cost = 3000
|
||||
contains = list(/obj/item/modular_computer/tablet/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/preset/cheap)
|
||||
desc = "A create a modular tablet computer."
|
||||
cost = 600
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/modular_computer/tablet/preset/cheap)
|
||||
crate_name = "tablet crate"
|
||||
|
||||
/datum/supply_pack/misc/phone
|
||||
name = "Modular Phone Crate"
|
||||
desc = "A create containing five modular phone computers, enough for an entire department. Does not include games."
|
||||
cost = 4000
|
||||
contains = list(/obj/item/modular_computer/tablet/phone/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/phone/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/phone/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/phone/preset/cheap,
|
||||
/obj/item/modular_computer/tablet/phone/preset/cheap)
|
||||
desc = "A create containing a modular phone computer. Does not include games."
|
||||
cost = 800
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/modular_computer/tablet/phone/preset/cheap)
|
||||
crate_name = "phone crate"
|
||||
|
||||
/datum/supply_pack/misc/telescreen
|
||||
name = "Modular Telescreen Crate"
|
||||
desc = "A create containing four modular telescreens, featuring the latest in Nanotrasen digital displaying technology."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/wallframe/telescreen/preset,
|
||||
/obj/item/wallframe/telescreen/preset,
|
||||
/obj/item/wallframe/telescreen/preset,
|
||||
/obj/item/wallframe/telescreen/preset)
|
||||
cost = 250
|
||||
small_item = TRUE
|
||||
contains = list(/obj/item/wallframe/telescreen/preset)
|
||||
crate_name = "telescreen crate"
|
||||
|
||||
/datum/supply_pack/critter/mothroach
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command
|
||||
head = /obj/item/clothing/head/caphat
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1, /obj/item/gun/energy/e_gun=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - adds egun/removes civ budget
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1, /obj/item/gun/energy/e_gun=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/cap=1) //yogs - adds egun/removes civ budget
|
||||
|
||||
backpack = /obj/item/storage/backpack/captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command
|
||||
head = /obj/item/clothing/head/hardhat/white
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/atmos=1) //yogs - removes eng budget
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/ce=1) //yogs - removes eng budget
|
||||
glasses = /obj/item/clothing/glasses/meson/sunglasses
|
||||
|
||||
backpack = /obj/item/storage/backpack/industrial
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
l_hand = /obj/item/storage/firstaid/medical
|
||||
suit_store = /obj/item/flashlight/pen/paramedic
|
||||
glasses = /obj/item/clothing/glasses/hud/health/sunglasses
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removes med budget
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/cmo=1) //yogs - removes med budget
|
||||
|
||||
backpack = /obj/item/storage/backpack/medic
|
||||
satchel = /obj/item/storage/backpack/satchel/med
|
||||
|
||||
@@ -53,6 +53,6 @@
|
||||
digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command
|
||||
head = /obj/item/clothing/head/hopcap
|
||||
backpack_contents = list(/obj/item/storage/box/ids=1,\
|
||||
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removes serv budget
|
||||
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/hop=1) //yogs - removes serv budget
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
head = /obj/item/clothing/head/HoS/beret
|
||||
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
suit_store = /obj/item/gun/energy/e_gun
|
||||
backpack_contents = list(/obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removed departmental budget ID //come here often?
|
||||
backpack_contents = list(/obj/item/modular_computer/tablet/phone/preset/advanced/command/hos=1) //yogs - removed departmental budget ID //come here often?
|
||||
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
satchel = /obj/item/storage/backpack/satchel/sec
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat
|
||||
l_hand = /obj/item/clipboard
|
||||
l_pocket = /obj/item/laser_pointer
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removes sci budget
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/rd=1) //yogs - removes sci budget
|
||||
|
||||
backpack = /obj/item/storage/backpack/science
|
||||
satchel = /obj/item/storage/backpack/satchel/tox
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
|
||||
/obj/item/stock_parts/cell/computer,
|
||||
/obj/item/computer_hardware/hard_drive,
|
||||
/obj/item/computer_hardware/network_card)
|
||||
/obj/item/computer_hardware/network_card,
|
||||
/obj/item/computer_hardware/card_slot)
|
||||
|
||||
/obj/item/modular_computer/laptop/preset/civillian
|
||||
desc = "A low-end laptop often used for personal recreation."
|
||||
@@ -10,4 +11,4 @@
|
||||
|
||||
/obj/item/modular_computer/laptop/preset/brig_physician
|
||||
desc = "A low-end laptop often used by brig physicians."
|
||||
starting_files = list(new /datum/computer_file/program/secureye)
|
||||
starting_files = list(new /datum/computer_file/program/secureye)
|
||||
@@ -11,3 +11,8 @@
|
||||
max_bays = 1
|
||||
steel_sheet_cost = 1
|
||||
slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
|
||||
|
||||
/obj/item/modular_computer/tablet/pda/update_icon()
|
||||
if(!isnull(variants) && !finish_color && prob(0.1)) // Very rare chance to get a rare skin for PDAs untill I can make them donor only
|
||||
finish_color = pick(list("pipboy", "glass", "rainbow"))
|
||||
..()
|
||||
@@ -4,7 +4,8 @@
|
||||
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
|
||||
/obj/item/stock_parts/cell/computer/micro,
|
||||
/obj/item/computer_hardware/hard_drive/small,
|
||||
/obj/item/computer_hardware/network_card)
|
||||
/obj/item/computer_hardware/network_card,
|
||||
/obj/item/computer_hardware/card_slot)
|
||||
|
||||
// Alternative version, an average one, for higher ranked positions mostly
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced
|
||||
@@ -31,6 +32,9 @@
|
||||
/obj/item/computer_hardware/sensorpackage)
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod)
|
||||
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
|
||||
/obj/item/stock_parts/cell/computer,
|
||||
/obj/item/computer_hardware/hard_drive/small,
|
||||
@@ -38,7 +42,20 @@
|
||||
/obj/item/computer_hardware/card_slot,
|
||||
/obj/item/computer_hardware/card_slot/secondary)
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/atmos
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cap
|
||||
finish_color = "yellow"
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/hop
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/cargobounty)
|
||||
finish_color = "brown"
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/hos
|
||||
finish_color = "red"
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/ce
|
||||
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
|
||||
/obj/item/stock_parts/cell/computer,
|
||||
/obj/item/computer_hardware/hard_drive/small,
|
||||
@@ -46,3 +63,23 @@
|
||||
/obj/item/computer_hardware/card_slot,
|
||||
/obj/item/computer_hardware/card_slot/secondary,
|
||||
/obj/item/computer_hardware/sensorpackage)
|
||||
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/alarm_monitor)
|
||||
finish_color = "orange"
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/rd
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/robocontrol)
|
||||
finish_color = "purple"
|
||||
|
||||
/obj/item/modular_computer/tablet/phone/preset/advanced/command/cmo
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/crew_monitor)
|
||||
finish_color = "white"
|
||||
@@ -17,7 +17,7 @@
|
||||
comp_light_luminosity = 2.3 //Same as the PDA
|
||||
interact_sounds = list('sound/machines/computers/pda_click.ogg')
|
||||
|
||||
var/list/variants = list("red","blue","brown","green","black")
|
||||
var/list/variants = list("red","green","yellow","blue","black","purple","white","brown","orange")
|
||||
var/finish_color = null
|
||||
|
||||
/obj/item/modular_computer/tablet/update_icon()
|
||||
@@ -45,7 +45,7 @@
|
||||
/// Given to Nuke Ops members.
|
||||
/obj/item/modular_computer/tablet/nukeops
|
||||
comp_light_luminosity = 6.3
|
||||
finish_color = "red"
|
||||
finish_color = "crimson"
|
||||
device_theme = "syndicate"
|
||||
light_color = COLOR_RED
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
starting_components = list( /obj/item/computer_hardware/processor_unit/small,
|
||||
/obj/item/stock_parts/cell/computer/micro,
|
||||
/obj/item/computer_hardware/hard_drive/small,
|
||||
/obj/item/computer_hardware/network_card)
|
||||
/obj/item/computer_hardware/network_card,
|
||||
/obj/item/computer_hardware/card_slot)
|
||||
|
||||
// Alternative version, an average one, for higher ranked positions mostly
|
||||
/obj/item/modular_computer/tablet/preset/advanced
|
||||
@@ -49,7 +50,7 @@
|
||||
/obj/item/computer_hardware/network_card/advanced,
|
||||
/obj/item/computer_hardware/card_slot,
|
||||
/obj/item/computer_hardware/printer/mini)
|
||||
finish_color = "red"
|
||||
finish_color = "crimson"
|
||||
|
||||
/// Given by the syndicate as part of the contract uplink bundle - loads in the Contractor Uplink.
|
||||
/obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink
|
||||
@@ -15,6 +15,14 @@
|
||||
starting_files = list( new /datum/computer_file/program/secureye)
|
||||
initial_program = /datum/computer_file/program/secureye
|
||||
|
||||
// ===== WARDEN CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/security
|
||||
name = "brig console"
|
||||
desc = "A stationary computer. This one comes preloaded with security and other brig management programs."
|
||||
starting_files = list( new /datum/computer_file/program/secureye,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/crew_monitor)
|
||||
|
||||
// ===== ENGINEERING CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/engineering
|
||||
console_department = "Engineering"
|
||||
@@ -55,12 +63,20 @@
|
||||
console_department = "Supply"
|
||||
name = "cargo console"
|
||||
desc = "A stationary computer. This one comes preloaded with programs to keep the station stocked."
|
||||
starting_files = list( new /datum/computer_file/program/bounty_board)
|
||||
initial_program = /datum/computer_file/program/bounty_board
|
||||
starting_components = list( /obj/item/computer_hardware/network_card/wired,
|
||||
/obj/item/computer_hardware/recharger/APC,
|
||||
/obj/item/computer_hardware/hard_drive/super,
|
||||
/obj/item/computer_hardware/processor_unit,
|
||||
/obj/item/computer_hardware/card_slot,
|
||||
/obj/item/computer_hardware/printer)
|
||||
|
||||
starting_files = list( new /datum/computer_file/program/bounty_board,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/cargobounty)
|
||||
initial_program = /datum/computer_file/program/cargobounty
|
||||
|
||||
// ===== QUARTERMASTER CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/cargo/qm
|
||||
console_department = "Supply"
|
||||
name = "quartermaster's console"
|
||||
desc = "A stationary computer. This one comes preloaded with programs to keep the station stocked and monitor the lavaland mining opperation."
|
||||
starting_files = list( new /datum/computer_file/program/bounty_board,
|
||||
@@ -74,6 +90,13 @@
|
||||
starting_files = list( new /datum/computer_file/program/secureye/mining)
|
||||
initial_program = /datum/computer_file/program/secureye/mining
|
||||
|
||||
// ===== MINING MEDIC CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/mining/medical
|
||||
name = "mining medic console"
|
||||
desc = "A stationary computer. This one comes preloaded with programs to monitor the vitals of the lavaland miners."
|
||||
starting_files = list( new /datum/computer_file/program/secureye/mining,
|
||||
new /datum/computer_file/program/crew_monitor)
|
||||
|
||||
// ===== COMMAND CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/command
|
||||
console_department = "Command"
|
||||
@@ -88,6 +111,7 @@
|
||||
/obj/item/computer_hardware/card_slot/secondary)
|
||||
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod)
|
||||
|
||||
// ===== HoP =====
|
||||
@@ -95,10 +119,12 @@
|
||||
name = "head of personnel's console"
|
||||
desc = "A stationary computer. This one comes preloaded with bureaucratic programs."
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/job_management,
|
||||
new /datum/computer_file/program/crew_manifest,
|
||||
new /datum/computer_file/program/bounty_board,
|
||||
new /datum/computer_file/program/cargobounty,
|
||||
new /datum/computer_file/program/secureye/mining)
|
||||
|
||||
// ===== HoS =====
|
||||
@@ -106,6 +132,7 @@
|
||||
name = "head of security's console"
|
||||
desc = "A stationary computer. This one comes preloaded with security programs."
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/secureye)
|
||||
|
||||
@@ -113,7 +140,8 @@
|
||||
/obj/machinery/modular_computer/console/preset/command/ce
|
||||
name = "chief engineer's console"
|
||||
desc = "A stationary computer. This one comes preloaded with engineering programs."
|
||||
starting_files = list(new /datum/computer_file/program/chatclient,
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/power_monitor,
|
||||
new /datum/computer_file/program/alarm_monitor,
|
||||
@@ -134,6 +162,7 @@
|
||||
/obj/item/computer_hardware/ai_slot)
|
||||
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/ntnetmonitor,
|
||||
new /datum/computer_file/program/aidiag,
|
||||
@@ -144,6 +173,7 @@
|
||||
name = "chief medical officer's console"
|
||||
desc = "A stationary computer. This one comes preloaded with medical programs."
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/card_mod,
|
||||
new /datum/computer_file/program/crew_monitor)
|
||||
|
||||
@@ -154,6 +184,7 @@
|
||||
name = "civilian console"
|
||||
desc = "A stationary computer. This one comes preloaded with generic programs."
|
||||
starting_files = list( new /datum/computer_file/program/chatclient,
|
||||
new /datum/computer_file/program/budgetorders,
|
||||
new /datum/computer_file/program/arcade)
|
||||
|
||||
// ===== CURATOR =====
|
||||
@@ -22,6 +22,12 @@
|
||||
starting_files = list( new /datum/computer_file/program/crew_monitor)
|
||||
initial_program = /datum/computer_file/program/crew_monitor
|
||||
|
||||
// ===== CARGO TELESCREEN =====
|
||||
/obj/machinery/modular_computer/telescreen/preset/medical
|
||||
|
||||
starting_files = list( new /datum/computer_file/program/crew_monitor)
|
||||
initial_program = /datum/computer_file/program/crew_monitor
|
||||
|
||||
|
||||
////////////////
|
||||
// Wallframes //
|
||||
@@ -9,7 +9,7 @@
|
||||
/datum/computer_file/program/card_mod
|
||||
filename = "cardmod"
|
||||
filedesc = "ID Card Modification"
|
||||
category = PROGRAM_CATEGORY_CREW
|
||||
category = PROGRAM_CATEGORY_CMD
|
||||
program_icon_state = "id"
|
||||
extended_desc = "Program for programming employee ID cards to access parts of the station."
|
||||
transfer_access = ACCESS_HEADS
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/computer_file/program/crew_manifest
|
||||
filename = "crewmani"
|
||||
filedesc = "Crew Manifest"
|
||||
category = PROGRAM_CATEGORY_CREW
|
||||
category = PROGRAM_CATEGORY_CMD
|
||||
program_icon_state = "id"
|
||||
extended_desc = "Program for viewing and printing the current crew manifest"
|
||||
transfer_access = ACCESS_HEADS
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/computer_file/program/job_management
|
||||
filename = "job_manage"
|
||||
filedesc = "Job Manager"
|
||||
category = PROGRAM_CATEGORY_CREW
|
||||
category = PROGRAM_CATEGORY_CMD
|
||||
program_icon_state = "id"
|
||||
extended_desc = "Program for viewing and changing job slot avalibility."
|
||||
transfer_access = ACCESS_HEADS
|
||||
@@ -2,7 +2,7 @@
|
||||
filename = "crewmon"
|
||||
filedesc = "Crew Suit Sensor Monitor"
|
||||
extended_desc = "This program allows for viewing of crew members vitals via their suit sensors."
|
||||
category = PROGRAM_CATEGORY_CREW
|
||||
category = PROGRAM_CATEGORY_MED
|
||||
ui_header = "health_green.gif"
|
||||
program_icon_state = "crew"
|
||||
requires_ntnet = TRUE
|
||||
@@ -25,9 +25,11 @@
|
||||
var/list/antag_repo
|
||||
|
||||
var/list/show_categories = list(
|
||||
PROGRAM_CATEGORY_CREW,
|
||||
PROGRAM_CATEGORY_CMD,
|
||||
PROGRAM_CATEGORY_SEC,
|
||||
PROGRAM_CATEGORY_ENGI,
|
||||
PROGRAM_CATEGORY_ROBO,
|
||||
PROGRAM_CATEGORY_SCI,
|
||||
PROGRAM_CATEGORY_MED,
|
||||
PROGRAM_CATEGORY_SUPL,
|
||||
PROGRAM_CATEGORY_MISC,
|
||||
)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/computer_file/program/radar //generic parent that handles most of the process
|
||||
filename = "genericfinder"
|
||||
filedesc = "debug_finder"
|
||||
category = PROGRAM_CATEGORY_CREW
|
||||
ui_header = "borg_mon.gif" //DEBUG -- new icon before PR
|
||||
program_icon_state = "radarntos"
|
||||
requires_ntnet = TRUE
|
||||
@@ -220,6 +219,7 @@
|
||||
requires_ntnet = TRUE
|
||||
transfer_access = ACCESS_MEDICAL
|
||||
available_on_ntnet = TRUE
|
||||
category = PROGRAM_CATEGORY_MED
|
||||
program_icon = "street-view"
|
||||
|
||||
/datum/computer_file/program/radar/lifeline/find_atom()
|
||||
@@ -312,6 +312,7 @@
|
||||
/datum/computer_file/program/radar/implant
|
||||
filename = "implanttracker"
|
||||
filedesc = "Implant Tracker"
|
||||
category = PROGRAM_CATEGORY_SEC
|
||||
extended_desc = "This program allows for tracking those implanted with tracking implants."
|
||||
requires_ntnet = TRUE
|
||||
transfer_access = ACCESS_BRIG
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/computer_file/program/aidiag
|
||||
filename = "aidiag"
|
||||
filedesc = "AI Integrity Restorer"
|
||||
category = PROGRAM_CATEGORY_ROBO
|
||||
category = PROGRAM_CATEGORY_SCI
|
||||
program_icon_state = "generic"
|
||||
extended_desc = "This program is capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot."
|
||||
size = 12
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/computer_file/program/borg_monitor
|
||||
filename = "cyborgmonitor"
|
||||
filedesc = "Cyborg Remote Monitoring"
|
||||
category = PROGRAM_CATEGORY_ROBO
|
||||
category = PROGRAM_CATEGORY_SCI
|
||||
ui_header = "borg_mon.gif"
|
||||
program_icon_state = "generic"
|
||||
extended_desc = "This program allows for remote monitoring of station cyborgs."
|
||||
@@ -164,7 +164,7 @@
|
||||
/datum/computer_file/program/borg_monitor/syndicate
|
||||
filename = "scyborgmonitor"
|
||||
filedesc = "Mission-Specific Cyborg Remote Monitoring"
|
||||
category = PROGRAM_CATEGORY_ROBO
|
||||
category = PROGRAM_CATEGORY_SCI
|
||||
ui_header = "borg_mon.gif"
|
||||
program_icon_state = "generic"
|
||||
extended_desc = "This program allows for remote monitoring of mission-assigned cyborgs."
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/computer_file/program/robocontrol
|
||||
filename = "robocontrol"
|
||||
filedesc = "Bot Remote Controller"
|
||||
category = PROGRAM_CATEGORY_ROBO
|
||||
category = PROGRAM_CATEGORY_SCI
|
||||
program_icon_state = "robot"
|
||||
extended_desc = "A remote controller used for giving basic commands to non-sentient robots."
|
||||
transfer_access = ACCESS_ROBOTICS
|
||||
@@ -3,6 +3,7 @@
|
||||
/datum/computer_file/program/secureye
|
||||
filename = "secureye"
|
||||
filedesc = "SecurEye"
|
||||
category = PROGRAM_CATEGORY_SEC
|
||||
ui_header = "borg_mon.gif"
|
||||
program_icon_state = "generic"
|
||||
extended_desc = "This program allows access to standard security camera networks."
|
||||
@@ -192,6 +193,7 @@
|
||||
/datum/computer_file/program/secureye/mining
|
||||
filename = "overwatch"
|
||||
filedesc = "OverWatch"
|
||||
category = PROGRAM_CATEGORY_SUPL
|
||||
extended_desc = "This program allows access to the mining base camera network."
|
||||
transfer_access = ACCESS_MINING
|
||||
size = 5
|
||||
@@ -0,0 +1,282 @@
|
||||
/datum/computer_file/program/budgetorders
|
||||
filename = "orderapp"
|
||||
filedesc = "NT IRN"
|
||||
category = PROGRAM_CATEGORY_SUPL
|
||||
program_icon_state = "bountyboard"
|
||||
extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account."
|
||||
requires_ntnet = TRUE
|
||||
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_PHONE | PROGRAM_TELESCREEN
|
||||
size = 20
|
||||
tgui_id = "NtosCargo"
|
||||
program_icon = "store"
|
||||
///Are you actually placing orders with it?
|
||||
var/requestonly = TRUE
|
||||
///Can the tablet see or buy illegal stuff?
|
||||
var/contraband = FALSE
|
||||
///Is it being bought from a personal account, or is it being done via a budget/cargo?
|
||||
var/self_paid = FALSE
|
||||
///Can this console approve purchase requests?
|
||||
var/can_approve_requests = FALSE
|
||||
///Can this console see contraband items?
|
||||
var/emagged = FALSE
|
||||
///What do we say when the shuttle moves with living beings on it.
|
||||
var/safety_warning = "For safety reasons, the automated supply shuttle \
|
||||
cannot transport live organisms, human remains, classified nuclear weaponry, \
|
||||
homing beacons or machinery housing any form of artificial intelligence."
|
||||
///If you're being raided by pirates, what do you tell the crew?
|
||||
var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible."
|
||||
|
||||
/datum/computer_file/program/budgetorders/proc/get_export_categories()
|
||||
. = EXPORT_CARGO
|
||||
|
||||
/datum/computer_file/program/budgetorders/proc/is_visible_pack(mob/user, paccess_to_check, var/list/access, var/contraband)
|
||||
if(issilicon(user)) //Borgs can't buy things.
|
||||
return FALSE
|
||||
if(emagged)
|
||||
return TRUE
|
||||
else if(contraband) //Hide contrband when non-emagged.
|
||||
return FALSE
|
||||
if(!paccess_to_check) // No required_access, allow it.
|
||||
return TRUE
|
||||
|
||||
//Aquire access from the inserted ID card.
|
||||
if(!length(access))
|
||||
var/obj/item/card/id/D
|
||||
var/obj/item/computer_hardware/card_slot/card_slot
|
||||
if(computer)
|
||||
card_slot = computer.all_components[MC_CARD]
|
||||
D = card_slot?.GetID()
|
||||
if(!D)
|
||||
return FALSE
|
||||
access = D.GetAccess()
|
||||
|
||||
if(paccess_to_check in access)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/datum/computer_file/program/budgetorders/run_emag()
|
||||
if(emagged)
|
||||
return FALSE
|
||||
emagged = TRUE
|
||||
return TRUE
|
||||
|
||||
/datum/computer_file/program/budgetorders/ui_data()
|
||||
. = ..()
|
||||
var/list/data = get_header_data()
|
||||
data["location"] = SSshuttle.supply.getStatusText()
|
||||
var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
|
||||
var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
|
||||
var/obj/item/card/id/id_card = card_slot?.GetID()
|
||||
if(id_card?.registered_account)
|
||||
if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
|
||||
requestonly = FALSE
|
||||
if(id_card?.registered_account?.account_job?.paycheck_department)
|
||||
buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
|
||||
can_approve_requests = TRUE
|
||||
else
|
||||
requestonly = TRUE
|
||||
can_approve_requests = FALSE
|
||||
else
|
||||
requestonly = TRUE
|
||||
if(buyer)
|
||||
data["points"] = buyer.account_balance
|
||||
|
||||
//Otherwise static data, that is being applied in ui_data as the crates visible and buyable are not static, and are determined by inserted ID.
|
||||
data["requestonly"] = requestonly
|
||||
data["supplies"] = list()
|
||||
for(var/pack in SSshuttle.supply_packs)
|
||||
var/datum/supply_pack/P = SSshuttle.supply_packs[pack]
|
||||
if(!is_visible_pack(usr, P.access_view , null, P.contraband) || P.hidden)
|
||||
continue
|
||||
if(!data["supplies"][P.group])
|
||||
data["supplies"][P.group] = list(
|
||||
"name" = P.group,
|
||||
"packs" = list()
|
||||
)
|
||||
if((P.hidden && (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly))
|
||||
continue
|
||||
data["supplies"][P.group]["packs"] += list(list(
|
||||
"name" = P.name,
|
||||
"cost" = P.cost,
|
||||
"id" = pack,
|
||||
"desc" = P.desc || P.name, // If there is a description, use it. Otherwise use the pack's name.
|
||||
"access" = P.access
|
||||
))
|
||||
|
||||
//Data regarding the User's capability to buy things.
|
||||
data["has_id"] = id_card
|
||||
data["away"] = SSshuttle.supply.getDockedId() == "supply_away"
|
||||
data["self_paid"] = self_paid
|
||||
data["docked"] = SSshuttle.supply.mode == SHUTTLE_IDLE
|
||||
data["loan"] = !!SSshuttle.shuttle_loan
|
||||
data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched
|
||||
data["can_send"] = FALSE //There is no situation where I want the app to be able to send the shuttle AWAY from the station, but conversely is fine.
|
||||
data["can_approve_requests"] = can_approve_requests
|
||||
data["app_cost"] = TRUE
|
||||
var/message = "Remember to stamp and send back the supply manifests."
|
||||
if(SSshuttle.centcom_message)
|
||||
message = SSshuttle.centcom_message
|
||||
if(SSshuttle.supplyBlocked)
|
||||
message = blockade_warning
|
||||
data["message"] = message
|
||||
data["cart"] = list()
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
data["cart"] += list(list(
|
||||
"object" = SO.pack.name,
|
||||
"cost" = SO.pack.cost,
|
||||
"id" = SO.id,
|
||||
"orderer" = SO.orderer,
|
||||
"paid" = !isnull(SO.paying_account) //paid by requester
|
||||
))
|
||||
|
||||
data["requests"] = list()
|
||||
for(var/datum/supply_order/SO in SSshuttle.requestlist)
|
||||
data["requests"] += list(list(
|
||||
"object" = SO.pack.name,
|
||||
"cost" = SO.pack.cost,
|
||||
"orderer" = SO.orderer,
|
||||
"reason" = SO.reason,
|
||||
"id" = SO.id
|
||||
))
|
||||
|
||||
return data
|
||||
|
||||
/datum/computer_file/program/budgetorders/ui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return
|
||||
var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
|
||||
switch(action)
|
||||
if("send")
|
||||
if(!SSshuttle.supply.canMove())
|
||||
computer.say(safety_warning)
|
||||
return
|
||||
if(SSshuttle.supplyBlocked)
|
||||
computer.say(blockade_warning)
|
||||
return
|
||||
if(SSshuttle.supply.getDockedId() == "supply_home")
|
||||
SSshuttle.supply.export_categories = get_export_categories()
|
||||
SSshuttle.moveShuttle("supply", "supply_away", TRUE)
|
||||
computer.say("The supply shuttle is departing.")
|
||||
computer.investigate_log("[key_name(usr)] sent the supply shuttle away.", INVESTIGATE_CARGO)
|
||||
else
|
||||
computer.investigate_log("[key_name(usr)] called the supply shuttle.", INVESTIGATE_CARGO)
|
||||
computer.say("The supply shuttle has been called and will arrive in [SSshuttle.supply.timeLeft(600)] minutes.")
|
||||
SSshuttle.moveShuttle("supply", "supply_home", TRUE)
|
||||
. = TRUE
|
||||
if("loan")
|
||||
if(!SSshuttle.shuttle_loan)
|
||||
return
|
||||
if(SSshuttle.supplyBlocked)
|
||||
computer.say(blockade_warning)
|
||||
return
|
||||
else if(SSshuttle.supply.mode != SHUTTLE_IDLE)
|
||||
return
|
||||
else if(SSshuttle.supply.getDockedId() != "supply_away")
|
||||
return
|
||||
else
|
||||
SSshuttle.shuttle_loan.loan_shuttle()
|
||||
computer.say("The supply shuttle has been loaned to CentCom.")
|
||||
computer.investigate_log("[key_name(usr)] accepted a shuttle loan event.", INVESTIGATE_CARGO)
|
||||
log_game("[key_name(usr)] accepted a shuttle loan event.")
|
||||
. = TRUE
|
||||
if("add")
|
||||
var/id = text2path(params["id"])
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
|
||||
if(!istype(pack))
|
||||
return
|
||||
if((pack.hidden && (pack.contraband && !contraband) || pack.DropPodOnly))
|
||||
return
|
||||
|
||||
var/name = "*None Provided*"
|
||||
var/rank = "*None Provided*"
|
||||
var/ckey = usr.ckey
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
name = H.get_authentification_name()
|
||||
rank = H.get_assignment(hand_first = TRUE)
|
||||
else if(issilicon(usr))
|
||||
name = usr.real_name
|
||||
rank = "Silicon"
|
||||
|
||||
var/datum/bank_account/account
|
||||
if(self_paid && ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
var/obj/item/card/id/id_card = H.get_idcard(TRUE)
|
||||
if(!istype(id_card))
|
||||
computer.say("No ID card detected.")
|
||||
return
|
||||
if(istype(id_card, /obj/item/card/id/departmental_budget))
|
||||
computer.say("The [src] rejects [id_card].")
|
||||
return
|
||||
account = id_card.registered_account
|
||||
if(!istype(account))
|
||||
computer.say("Invalid bank account.")
|
||||
return
|
||||
|
||||
var/reason = ""
|
||||
if((requestonly && !self_paid) || !(card_slot?.GetID()))
|
||||
reason = stripped_input("Reason:", name, "")
|
||||
if(isnull(reason) || ..())
|
||||
return
|
||||
|
||||
if(!self_paid && ishuman(usr) && !account)
|
||||
var/obj/item/card/id/id_card = card_slot?.GetID()
|
||||
account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account)
|
||||
SO.generateRequisition(T)
|
||||
if((requestonly && !self_paid) || !(card_slot?.GetID()))
|
||||
SSshuttle.requestlist += SO
|
||||
else
|
||||
SSshuttle.shoppinglist += SO
|
||||
if(self_paid)
|
||||
computer.say("Order processed. The price will be charged to [account.account_holder]'s bank account on delivery.")
|
||||
. = TRUE
|
||||
if("remove")
|
||||
var/id = text2num(params["id"])
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
if(SO.id == id)
|
||||
SSshuttle.shoppinglist -= SO
|
||||
. = TRUE
|
||||
break
|
||||
if("clear")
|
||||
SSshuttle.shoppinglist.Cut()
|
||||
. = TRUE
|
||||
if("approve")
|
||||
var/id = text2num(params["id"])
|
||||
for(var/datum/supply_order/SO in SSshuttle.requestlist)
|
||||
if(SO.id == id)
|
||||
var/obj/item/card/id/id_card = card_slot?.GetID()
|
||||
if(id_card && id_card?.registered_account)
|
||||
SO.paying_account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department)
|
||||
SSshuttle.requestlist -= SO
|
||||
SSshuttle.shoppinglist += SO
|
||||
. = TRUE
|
||||
break
|
||||
if("deny")
|
||||
var/id = text2num(params["id"])
|
||||
for(var/datum/supply_order/SO in SSshuttle.requestlist)
|
||||
if(SO.id == id)
|
||||
SSshuttle.requestlist -= SO
|
||||
. = TRUE
|
||||
break
|
||||
if("denyall")
|
||||
SSshuttle.requestlist.Cut()
|
||||
. = TRUE
|
||||
if("toggleprivate")
|
||||
self_paid = !self_paid
|
||||
. = TRUE
|
||||
if(.)
|
||||
post_signal("supply")
|
||||
|
||||
/datum/computer_file/program/budgetorders/proc/post_signal(command)
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
|
||||
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/status_signal = new(list("command" = command))
|
||||
frequency.post_signal(src, status_signal)
|
||||
@@ -0,0 +1,54 @@
|
||||
/datum/computer_file/program/cargobounty
|
||||
filename = "bounty"
|
||||
filedesc = "Nanotrasen Bounty Hunter"
|
||||
category = PROGRAM_CATEGORY_SUPL
|
||||
program_icon_state = "bountyboard"
|
||||
extended_desc = "A basic interface for supply personnel to check and claim bounties."
|
||||
requires_ntnet = TRUE
|
||||
transfer_access = ACCESS_CARGO
|
||||
network_destination = "cargo claims interface"
|
||||
size = 10
|
||||
tgui_id = "NtosBountyConsole"
|
||||
program_icon = "file-invoice-dollar"
|
||||
///cooldown var for printing paper sheets.
|
||||
var/printer_ready = 0
|
||||
///The cargo account for grabbing the cargo account's credits.
|
||||
var/static/datum/bank_account/cargocash
|
||||
|
||||
/datum/computer_file/program/cargobounty/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state)
|
||||
if(!GLOB.bounties_list.len)
|
||||
setup_bounties()
|
||||
printer_ready = world.time + PRINTER_TIMEOUT
|
||||
cargocash = SSeconomy.get_dep_account(ACCOUNT_CAR)
|
||||
. = ..()
|
||||
|
||||
/datum/computer_file/program/cargobounty/ui_data(mob/user)
|
||||
var/list/data = get_header_data()
|
||||
var/list/bountyinfo = list()
|
||||
for(var/datum/bounty/B in GLOB.bounties_list)
|
||||
bountyinfo += list(list("name" = B.name, "description" = B.description, "reward_string" = B.reward_string(), "completion_string" = B.completion_string() , "claimed" = B.claimed, "can_claim" = B.can_claim(), "priority" = B.high_priority, "bounty_ref" = REF(B)))
|
||||
data["stored_cash"] = cargocash.account_balance
|
||||
data["bountydata"] = bountyinfo
|
||||
return data
|
||||
|
||||
/datum/computer_file/program/cargobounty/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
var/obj/item/computer_hardware/printer/printer
|
||||
if(computer)
|
||||
printer = computer.all_components[MC_PRINT]
|
||||
|
||||
switch(action)
|
||||
if("ClaimBounty")
|
||||
var/datum/bounty/cashmoney = locate(params["bounty"]) in GLOB.bounties_list
|
||||
if(cashmoney)
|
||||
cashmoney.claim()
|
||||
return TRUE
|
||||
if("Print")
|
||||
if(!printer)
|
||||
to_chat(usr, span_notice("Hardware error: No printer detected."))
|
||||
return
|
||||
if(!printer.print_type(/obj/item/paper/bounty_printout))
|
||||
to_chat(usr, span_notice("Hardware error: Printer was unable to print the file. It may be out of paper."))
|
||||
return
|
||||
@@ -43,6 +43,21 @@
|
||||
P = null
|
||||
return TRUE
|
||||
|
||||
/obj/item/computer_hardware/printer/proc/print_type(paper_type)
|
||||
if(!stored_paper || !check_functionality() || !ispath(paper_type))
|
||||
return FALSE
|
||||
|
||||
var/obj/item/paper/P = new paper_type(holder.drop_location())
|
||||
|
||||
// Damaged printer causes the resulting paper to be somewhat harder to read.
|
||||
if(damage > damage_malfunction)
|
||||
P.info = stars(P.info, 100-malfunction_probability)
|
||||
P.update_icon()
|
||||
P.reload_fields()
|
||||
stored_paper--
|
||||
P = null
|
||||
return TRUE
|
||||
|
||||
/obj/item/computer_hardware/printer/try_insert(obj/item/I, mob/living/user = null)
|
||||
if(istype(I, /obj/item/paper))
|
||||
if(stored_paper >= max_paper)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -6,6 +6,19 @@ import { formatMoney } from '../format';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const Cargo = (props, context) => {
|
||||
return (
|
||||
<Window
|
||||
width={780}
|
||||
height={750}
|
||||
resizable>
|
||||
<Window.Content scrollable>
|
||||
<CargoContent />
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
export const CargoContent = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [tab, setTab] = useSharedState(context, 'tab', 'catalog');
|
||||
const {
|
||||
@@ -14,53 +27,48 @@ export const Cargo = (props, context) => {
|
||||
const cart = data.cart || [];
|
||||
const requests = data.requests || [];
|
||||
return (
|
||||
<Window
|
||||
width={780}
|
||||
height={750}
|
||||
resizable>
|
||||
<Window.Content scrollable>
|
||||
<CargoStatus />
|
||||
<Section fitted>
|
||||
<Tabs>
|
||||
<Box>
|
||||
<CargoStatus />
|
||||
<Section fitted>
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
icon="list"
|
||||
selected={tab === 'catalog'}
|
||||
onClick={() => setTab('catalog')}>
|
||||
Catalog
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
icon="envelope"
|
||||
textColor={tab !== 'requests'
|
||||
&& requests.length > 0
|
||||
&& 'yellow'}
|
||||
selected={tab === 'requests'}
|
||||
onClick={() => setTab('requests')}>
|
||||
Requests ({requests.length})
|
||||
</Tabs.Tab>
|
||||
{!requestonly && (
|
||||
<Tabs.Tab
|
||||
icon="list"
|
||||
selected={tab === 'catalog'}
|
||||
onClick={() => setTab('catalog')}>
|
||||
Catalog
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
icon="envelope"
|
||||
textColor={tab !== 'requests'
|
||||
&& requests.length > 0
|
||||
icon="shopping-cart"
|
||||
textColor={tab !== 'cart'
|
||||
&& cart.length > 0
|
||||
&& 'yellow'}
|
||||
selected={tab === 'requests'}
|
||||
onClick={() => setTab('requests')}>
|
||||
Requests ({requests.length})
|
||||
selected={tab === 'cart'}
|
||||
onClick={() => setTab('cart')}>
|
||||
Checkout ({cart.length})
|
||||
</Tabs.Tab>
|
||||
{!requestonly && (
|
||||
<Tabs.Tab
|
||||
icon="shopping-cart"
|
||||
textColor={tab !== 'cart'
|
||||
&& cart.length > 0
|
||||
&& 'yellow'}
|
||||
selected={tab === 'cart'}
|
||||
onClick={() => setTab('cart')}>
|
||||
Checkout ({cart.length})
|
||||
</Tabs.Tab>
|
||||
)}
|
||||
</Tabs>
|
||||
</Section>
|
||||
{tab === 'catalog' && (
|
||||
<CargoCatalog />
|
||||
)}
|
||||
{tab === 'requests' && (
|
||||
<CargoRequests />
|
||||
)}
|
||||
{tab === 'cart' && (
|
||||
<CargoCart />
|
||||
)}
|
||||
</Window.Content>
|
||||
</Window>
|
||||
)}
|
||||
</Tabs>
|
||||
</Section>
|
||||
{tab === 'catalog' && (
|
||||
<CargoCatalog />
|
||||
)}
|
||||
{tab === 'requests' && (
|
||||
<CargoRequests />
|
||||
)}
|
||||
{tab === 'cart' && (
|
||||
<CargoCart />
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -75,6 +83,7 @@ const CargoStatus = (props, context) => {
|
||||
message,
|
||||
points,
|
||||
requestonly,
|
||||
can_send,
|
||||
} = data;
|
||||
return (
|
||||
<Section
|
||||
@@ -89,7 +98,7 @@ const CargoStatus = (props, context) => {
|
||||
)}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Shuttle">
|
||||
{docked && !requestonly && (
|
||||
{docked && !requestonly && can_send &&(
|
||||
<Button
|
||||
content={location}
|
||||
onClick={() => act('send')} />
|
||||
@@ -122,6 +131,7 @@ export const CargoCatalog = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
self_paid,
|
||||
app_cost,
|
||||
} = data;
|
||||
const supplies = toArray(data.supplies);
|
||||
const [
|
||||
@@ -191,7 +201,7 @@ export const CargoCatalog = (props, context) => {
|
||||
id: pack.id,
|
||||
self_paid: self_paid,
|
||||
})}>
|
||||
{formatMoney(self_paid && !pack.goody
|
||||
{formatMoney((self_paid && !pack.goody) || app_cost
|
||||
? Math.round(pack.cost * 1.1)
|
||||
: pack.cost)}
|
||||
{' cr'}
|
||||
@@ -211,6 +221,8 @@ const CargoRequests = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
requestonly,
|
||||
can_send,
|
||||
can_approve_requests,
|
||||
} = data;
|
||||
const requests = data.requests || [];
|
||||
// Labeled list reimplementation to squeeze extra columns out of it
|
||||
@@ -250,7 +262,7 @@ const CargoRequests = (props, context) => {
|
||||
<Table.Cell collapsing textAlign="right">
|
||||
{formatMoney(request.cost)} cr
|
||||
</Table.Cell>
|
||||
{!requestonly && (
|
||||
{(!requestonly || can_send)&& can_approve_requests &&(
|
||||
<Table.Cell collapsing>
|
||||
<Button
|
||||
icon="check"
|
||||
@@ -278,10 +290,12 @@ const CargoCartButtons = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
requestonly,
|
||||
can_send,
|
||||
can_approve_requests,
|
||||
} = data;
|
||||
const cart = data.cart || [];
|
||||
const total = cart.reduce((total, entry) => total + (entry.paid ? entry.cost : 0), 0);
|
||||
if (requestonly) {
|
||||
if (requestonly|| !can_send || !can_approve_requests) {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
@@ -309,6 +323,7 @@ const CargoCart = (props, context) => {
|
||||
away,
|
||||
docked,
|
||||
location,
|
||||
can_send,
|
||||
} = data;
|
||||
const cart = data.cart || [];
|
||||
return (
|
||||
@@ -343,11 +358,13 @@ const CargoCart = (props, context) => {
|
||||
{formatMoney(entry.paid ? Math.round(entry.cost * 1.1) : entry.cost)} cr
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing>
|
||||
<Button
|
||||
icon="minus"
|
||||
onClick={() => act('remove', {
|
||||
id: entry.id,
|
||||
})} />
|
||||
{can_send &&(
|
||||
<Button
|
||||
icon="minus"
|
||||
onClick={() => act('remove', {
|
||||
id: entry.id,
|
||||
})} />
|
||||
)}
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
|
||||
@@ -2631,52 +2631,54 @@
|
||||
#include "code\modules\modular_computers\computers\item\computer_damage.dm"
|
||||
#include "code\modules\modular_computers\computers\item\computer_power.dm"
|
||||
#include "code\modules\modular_computers\computers\item\computer_ui.dm"
|
||||
#include "code\modules\modular_computers\computers\item\integrated_tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\item\integrated_tablet_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\laptop.dm"
|
||||
#include "code\modules\modular_computers\computers\item\laptop_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\pda.dm"
|
||||
#include "code\modules\modular_computers\computers\item\pda_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\phone.dm"
|
||||
#include "code\modules\modular_computers\computers\item\phone_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\processor.dm"
|
||||
#include "code\modules\modular_computers\computers\item\tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\item\tablet_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\console_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\integrated_tablet\integrated_tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\item\integrated_tablet\integrated_tablet_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\laptop\laptop.dm"
|
||||
#include "code\modules\modular_computers\computers\item\laptop\laptop_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\pda\pda.dm"
|
||||
#include "code\modules\modular_computers\computers\item\pda\pda_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\phone\phone.dm"
|
||||
#include "code\modules\modular_computers\computers\item\phone\phone_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\item\tablet\tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\item\tablet\tablet_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\modular_computer.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\modular_console.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\telescreen.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\telescreen_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\console\console_presets.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\console\modular_console.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\telescreen\telescreen.dm"
|
||||
#include "code\modules\modular_computers\computers\machinery\telescreen\telescreen_presets.dm"
|
||||
#include "code\modules\modular_computers\file_system\computer_file.dm"
|
||||
#include "code\modules\modular_computers\file_system\data.dm"
|
||||
#include "code\modules\modular_computers\file_system\program.dm"
|
||||
#include "code\modules\modular_computers\file_system\program_events.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\airestorer.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\alarm.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\arcade.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\atmosscan.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\borg_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\bounty_board.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\card.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\configurator.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\crew_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\crewmanifest.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\energyharvestercontrol.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\file_browser.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\jobmanagement.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\ntdownloader.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\portrait_printer.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\powermonitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\radar.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\robocontrol.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\robotact.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\secureye.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\antagonist\contract_uplink.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\command\card.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\command\crewmanifest.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\command\jobmanagement.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\alarm.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\atmosscan.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\energyharvestercontrol.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\powermonitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\sm_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\medical\crew_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\science\airestorer.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\science\borg_monitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\science\robocontrol.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\security\secureye.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\supply\bounty_board.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\supply\budgetordering.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\supply\cargobounty.dm"
|
||||
#include "code\modules\modular_computers\hardware\_hardware.dm"
|
||||
#include "code\modules\modular_computers\hardware\ai_slot.dm"
|
||||
#include "code\modules\modular_computers\hardware\battery_module.dm"
|
||||
|
||||
Reference in New Issue
Block a user