Nanotrasen Fleet Command Expansion (#7418)

* A

* Update centcom_computers.dm

* a

* Update CommandReportConsole.js

* commandreporter

* Update command_report_computer.dm

* a

* FEET COMMAND

* a

* e

* e

* Update departments.dm

* F

* a

* a

* Update new_player.dm

* Update new_player.dm

* AAAAAA

* Update zombie.dm

* Update zombie.dm

* aaaaaaa

* 0

* a

* Update CentCom_skyrat.dmm

* aa

* Update nsstitan.dmm

* A

* Update station_goal_computer.dm

* Update station_goal_computer.dm

* Update bridge_officer.dm

* Update CentCom_skyrat.dmm

* Update pda.dm

* Revert "Update pda.dm"

This reverts commit fbe1823726f9edb7f7c3ba03c2d34b08b46ae294.

* logic

* cargo system

* 0

* Update import_console.dm

* Update cargo_skyrat.dmm

* noob coder

* Update cargo_shuttle_console.dm

* a

* Update deck_crew.dm

* Update export_console.dm

* Update deck_crew.dm

* 0

* Update CentCom_skyrat_z2.dmm

* AAAA

* 0

* Update CentCom_skyrat_z2.dmm

* Update cargo_shuttle_console.dm

* Update CentCom_skyrat_z2.dmm

* a

* SELLING CREW IS BAD.

* a

* Update supply.dm

* Update CentCom_skyrat_z2.dmm

* Update supply.dm

* A

* a

* a

* Update zombie.dm

* Update modular_skyrat/modules/central_command_module/code/jobs/fleetmaster.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
This commit is contained in:
Gandalf
2021-08-17 18:43:19 +01:00
committed by GitHub
parent 4a569fced1
commit a43b8c5fc4
49 changed files with 13707 additions and 3161 deletions

View File

@@ -10,7 +10,7 @@
"space_ruin_levels": 0, "space_ruin_levels": 0,
"space_empty_levels": 0, "space_empty_levels": 0,
"shuttles": { "shuttles": {
"cargo": "cargo_box", "cargo": "cargo_skyrat",
"ferry": "ferry_fancy", "ferry": "ferry_fancy",
"whiteship": "whiteship_box", "whiteship": "whiteship_box",
"emergency": "emergency_box" "emergency": "emergency_box"

View File

@@ -3602,14 +3602,10 @@
/area/tdome/tdomeobserve) /area/tdome/tdomeobserve)
"apS" = ( "apS" = (
/obj/structure/chair/office, /obj/structure/chair/office,
/obj/effect/landmark/ert_spawn,
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 1 dir = 1
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 8 dir = 8
}, },
@@ -8111,7 +8107,6 @@
/area/centcom/ferry) /area/centcom/ferry)
"aDQ" = ( "aDQ" = (
/obj/structure/chair/office, /obj/structure/chair/office,
/obj/effect/landmark/ert_spawn,
/turf/open/floor/iron/dark, /turf/open/floor/iron/dark,
/area/centcom/ferry) /area/centcom/ferry)
"aDR" = ( "aDR" = (
@@ -9013,7 +9008,6 @@
/obj/structure/chair/office{ /obj/structure/chair/office{
dir = 1 dir = 1
}, },
/obj/effect/landmark/ert_spawn,
/obj/structure/cable, /obj/structure/cable,
/turf/open/floor/iron/dark, /turf/open/floor/iron/dark,
/area/centcom/ferry) /area/centcom/ferry)
@@ -9109,14 +9103,10 @@
/obj/structure/chair/office{ /obj/structure/chair/office{
dir = 8 dir = 8
}, },
/obj/effect/landmark/ert_spawn,
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 1 dir = 1
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 8 dir = 8
}, },
@@ -9462,14 +9452,10 @@
/obj/structure/chair/office{ /obj/structure/chair/office{
dir = 1 dir = 1
}, },
/obj/effect/landmark/ert_spawn,
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 1 dir = 1
}, },
/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{ /obj/effect/turf_decal/tile/neutral{
dir = 8 dir = 8
}, },
@@ -9806,7 +9792,6 @@
/area/centcom/control) /area/centcom/control)
"aJB" = ( "aJB" = (
/obj/structure/chair/office, /obj/structure/chair/office,
/obj/effect/landmark/ert_spawn,
/obj/structure/cable, /obj/structure/cable,
/turf/open/floor/iron/dark, /turf/open/floor/iron/dark,
/area/centcom/ferry) /area/centcom/ferry)
@@ -12133,7 +12118,6 @@
/obj/structure/chair/office{ /obj/structure/chair/office{
dir = 8 dir = 8
}, },
/obj/effect/landmark/ert_spawn,
/obj/structure/cable, /obj/structure/cable,
/turf/open/floor/iron/dark, /turf/open/floor/iron/dark,
/area/centcom/ferry) /area/centcom/ferry)
@@ -13240,18 +13224,6 @@
}, },
/turf/open/floor/iron/dark, /turf/open/floor/iron/dark,
/area/centcom/control) /area/centcom/control)
"aUX" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 8;
height = 7;
id = "supply_away";
json_key = "cargo";
name = "CentCom";
width = 20
},
/turf/open/space,
/area/space)
"aUZ" = ( "aUZ" = (
/obj/machinery/door/airlock{ /obj/machinery/door/airlock{
icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
@@ -14960,20 +14932,6 @@
}, },
/turf/open/floor/iron, /turf/open/floor/iron,
/area/tdome/arena_source) /area/tdome/arena_source)
"mAO" = (
/obj/docking_port/stationary{
dheight = 3;
dir = 8;
dwidth = 8;
height = 11;
id = "ferry_away";
json_key = null;
name = "CentCom Ferry Dock";
roundstart_template = /datum/map_template/shuttle/ferry;
width = 20
},
/turf/open/space,
/area/space)
"mNq" = ( "mNq" = (
/obj/machinery/igniter/on, /obj/machinery/igniter/on,
/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery,
@@ -15000,6 +14958,20 @@
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/turf/open/floor/carpet/black, /turf/open/floor/carpet/black,
/area/centcom/holding) /area/centcom/holding)
"nmb" = (
/obj/docking_port/stationary{
dheight = 3;
dir = 8;
dwidth = 8;
height = 11;
id = "ferry_away";
json_key = null;
name = "CentCom Ferry Dock";
roundstart_template = /datum/map_template/shuttle/ferry;
width = 20
},
/turf/open/space/basic,
/area/space)
"nmH" = ( "nmH" = (
/obj/effect/landmark/start/new_player, /obj/effect/landmark/start/new_player,
/turf/open/floor/plating, /turf/open/floor/plating,
@@ -15163,10 +15135,6 @@
/obj/item/clothing/under/costume/roman, /obj/item/clothing/under/costume/roman,
/turf/open/floor/wood, /turf/open/floor/wood,
/area/centcom/holding) /area/centcom/holding)
"tLr" = (
/obj/effect/landmark/start/nanotrasen_admiral,
/turf/open/floor/iron/grimy,
/area/centcom/ferry)
"tOv" = ( "tOv" = (
/turf/open/floor/circuit/green, /turf/open/floor/circuit/green,
/area/tdome/arena_source) /area/tdome/arena_source)
@@ -48035,8 +48003,8 @@ aaa
aaa aaa
aaa aaa
aaa aaa
aaa nmb
mAO nDB
aaa aaa
aaa aaa
aaa aaa
@@ -54178,7 +54146,7 @@ aaa
aaa aaa
aaa aaa
aaa aaa
aUX nDB
aaa aaa
aaa aaa
aaa aaa
@@ -54707,7 +54675,7 @@ aTW
aWA aWA
amD amD
asP asP
tLr aEr
aEr aEr
aVe aVe
aQt aQt

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
"map_path": "map_files/MetaStation", "map_path": "map_files/MetaStation",
"map_file": "MetaStation_skyrat.dmm", "map_file": "MetaStation_skyrat.dmm",
"shuttles": { "shuttles": {
"cargo": "cargo_box", "cargo": "cargo_skyrat",
"ferry": "ferry_fancy", "ferry": "ferry_fancy",
"whiteship": "whiteship_meta", "whiteship": "whiteship_meta",
"emergency": "emergency_meta" "emergency": "emergency_meta"

View File

@@ -6,7 +6,7 @@
"shuttles": { "shuttles": {
"emergency": "emergency_box", "emergency": "emergency_box",
"ferry": "ferry_fancy", "ferry": "ferry_fancy",
"cargo": "cargo_box", "cargo": "cargo_skyrat",
"whiteship": "whiteship_box" "whiteship": "whiteship_box"
}, },
"job_changes": { "job_changes": {

View File

@@ -0,0 +1,236 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"c" = (
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark/blue/side{
dir = 5
},
/area/shuttle/supply/cockpit)
"d" = (
/obj/machinery/light/directional/west,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply)
"e" = (
/obj/machinery/light/directional/west,
/obj/machinery/computer/cargo_shuttle_console,
/turf/open/floor/iron/dark/blue/side{
dir = 9
},
/area/shuttle/supply/cockpit)
"f" = (
/obj/machinery/light/directional/north,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply)
"h" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/iron/dark/blue/side{
dir = 6
},
/area/shuttle/supply/cockpit)
"i" = (
/obj/structure/shuttle/engine/propulsion/burst/right,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"l" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/shuttle/engine/heater,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"m" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/supply/cockpit)
"q" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply)
"r" = (
/obj/machinery/button/door/directional/east{
id = "QMLoaddoor2";
name = "Loading Doors";
pixel_y = 8
},
/obj/machinery/button/door/directional/east{
id = "QMLoaddoor";
name = "Loading Doors";
pixel_y = -8
},
/obj/machinery/light/directional/east,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply)
"t" = (
/obj/structure/shuttle/engine/propulsion,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"u" = (
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply)
"w" = (
/obj/machinery/door/airlock/titanium{
name = "Supply Shuttle Airlock";
req_access_txt = "31"
},
/obj/docking_port/mobile/supply,
/turf/open/floor/plating,
/area/shuttle/supply)
"z" = (
/obj/structure/shuttle/engine/propulsion/burst/left,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"C" = (
/obj/machinery/door/airlock/grunge{
name = "cockpit";
req_access_txt = "101"
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply/cockpit)
"G" = (
/obj/machinery/door/airlock/titanium{
name = "Supply Shuttle Airlock";
req_access_txt = "31"
},
/turf/open/floor/plating,
/area/shuttle/supply)
"K" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/obj/structure/closet/emcloset/wall{
pixel_x = -28
},
/turf/open/floor/iron/dark/blue/side{
dir = 10
},
/area/shuttle/supply/cockpit)
"S" = (
/obj/machinery/conveyor{
dir = 8;
id = "QMLoad"
},
/obj/machinery/door/poddoor{
id = "QMLoaddoor";
name = "supply dock loading door"
},
/turf/open/floor/plating,
/area/shuttle/supply)
"T" = (
/turf/closed/wall/mineral/titanium/interior,
/area/shuttle/supply)
"U" = (
/obj/machinery/conveyor{
dir = 4;
id = "QMLoad2"
},
/obj/machinery/door/poddoor{
id = "QMLoaddoor2";
name = "supply dock loading door"
},
/turf/open/floor/plating,
/area/shuttle/supply)
"Z" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply/cockpit)
(1,1,1) = {"
Z
Z
Z
Z
q
q
q
q
q
q
q
a
"}
(2,1,1) = {"
m
e
K
Z
u
d
u
u
u
T
q
z
"}
(3,1,1) = {"
m
c
h
Z
u
u
u
u
u
u
l
t
"}
(4,1,1) = {"
Z
Z
C
Z
u
u
u
u
u
u
l
t
"}
(5,1,1) = {"
a
q
f
u
u
u
u
u
u
u
l
t
"}
(6,1,1) = {"
a
q
u
u
u
r
u
u
u
T
q
i
"}
(7,1,1) = {"
a
q
q
U
G
q
w
S
q
q
q
a
"}

5979
_maps/shuttles/nsstitan.dmm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
"map_path": "map_files/tramstation", "map_path": "map_files/tramstation",
"map_file": "tramstation_skyrat.dmm", "map_file": "tramstation_skyrat.dmm",
"shuttles": { "shuttles": {
"cargo": "cargo_box", "cargo": "cargo_skyrat",
"ferry": "ferry_fancy", "ferry": "ferry_fancy",
"whiteship": "whiteship_tram", "whiteship": "whiteship_tram",
"emergency": "emergency_tram" "emergency": "emergency_tram"

View File

@@ -14,7 +14,7 @@
#define PAYCHECK_MEDIUM 100 //SKYRAT EDIT ORIGINAL = (75) - Pay Raise #define PAYCHECK_MEDIUM 100 //SKYRAT EDIT ORIGINAL = (75) - Pay Raise
#define PAYCHECK_HARD 125 //SKYRAT EDIT ORIGINAL = (100) - Pay Raise #define PAYCHECK_HARD 125 //SKYRAT EDIT ORIGINAL = (100) - Pay Raise
#define PAYCHECK_COMMAND 200 #define PAYCHECK_COMMAND 200
#define PAYCHECK_CENTRAL_COMMAND 600 //SKYRAT EDIT ADDITION #define PAYCHECK_NANOTRASEN_FLEET_COMMAND 600 //SKYRAT EDIT ADDITION
#define STATION_TARGET_BUFFER 40 #define STATION_TARGET_BUFFER 40

View File

@@ -51,9 +51,12 @@
#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_PRISONER 39 #define JOB_DISPLAY_ORDER_PRISONER 39
#define JOB_DISPLAY_ORDER_BRIGOFF 40 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_BRIGOFF 40 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_NANOTRASEN_ADMIRAL 41 //SKYRAT EDIT ADDITON - CENTRAL ROLES BELOW HERE! #define JOB_DISPLAY_ORDER_FLEETMASTER 41 //SKYRAT EDIT ADDITON - CENTRAL ROLES BELOW HERE!
#define JOB_DISPLAY_ORDER_NANOTRASEN_REPRESENTATIVE 42 #define JOB_DISPLAY_ORDER_BRIDGE_OFFICER 42
#define JOB_DISPLAY_ORDER_BLUESHIELD 43 #define JOB_DISPLAY_ORDER_OPERATIONS_INSPECTOR 43
#define JOB_DISPLAY_ORDER_DECK_CREW 44
#define JOB_DISPLAY_ORDER_NANOTRASEN_REPRESENTATIVE 45
#define JOB_DISPLAY_ORDER_BLUESHIELD 46
#define DEPARTMENT_UNASSIGNED "No department assigned" #define DEPARTMENT_UNASSIGNED "No department assigned"
@@ -73,8 +76,8 @@
#define DEPARTMENT_MEDICAL "Medical" #define DEPARTMENT_MEDICAL "Medical"
#define DEPARTMENT_BITFLAG_SILICON (1<<7) #define DEPARTMENT_BITFLAG_SILICON (1<<7)
#define DEPARTMENT_SILICON "Silicon" #define DEPARTMENT_SILICON "Silicon"
#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<8) //SKYRAT EDIT CHANGE #define DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND (1<<8) //SKYRAT EDIT CHANGE
#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //SKYRAT EDIT CHANGE #define DEPARTMENT_NANOTRASEN_FLEET_COMMAND "Nanotrasen Fleet Command" //SKYRAT EDIT CHANGE
/* Job datum job_flags */ /* Job datum job_flags */
/// Whether the mob is announced on arrival. /// Whether the mob is announced on arrival.

View File

@@ -73,7 +73,7 @@
// Playtime tracking system, see jobs_exp.dm // Playtime tracking system, see jobs_exp.dm
#define EXP_TYPE_LIVING "Living" #define EXP_TYPE_LIVING "Living"
#define EXP_TYPE_CREW "Crew" #define EXP_TYPE_CREW "Crew"
#define EXP_TYPE_CENTRAL_COMMAND "Central Command" #define EXP_TYPE_NANOTRASEN_FLEET_COMMAND "Nanotrasen Fleet Command"
#define EXP_TYPE_COMMAND "Command" #define EXP_TYPE_COMMAND "Command"
#define EXP_TYPE_ENGINEERING "Engineering" #define EXP_TYPE_ENGINEERING "Engineering"
#define EXP_TYPE_MEDICAL "Medical" #define EXP_TYPE_MEDICAL "Medical"

View File

@@ -276,7 +276,7 @@ SUBSYSTEM_DEF(job)
continue continue
//SKYRAT EDIT ADDITION //SKYRAT EDIT ADDITION
if(job.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND) //If you want a CC position, select it! if(job.departments_bitflags & DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND) //If you want a CC position, select it!
continue continue
//SKYRAT EDIT END //SKYRAT EDIT END

View File

@@ -26,7 +26,7 @@
var/allow_custom_shuttles = TRUE var/allow_custom_shuttles = TRUE
var/shuttles = list( var/shuttles = list(
"cargo" = "cargo_box", "cargo" = "cargo_skyrat",
"ferry" = "ferry_fancy", "ferry" = "ferry_fancy",
"whiteship" = "whiteship_box", "whiteship" = "whiteship_box",
"emergency" = "emergency_skyrat") //SKYRAT EDIT CHANGE "emergency" = "emergency_skyrat") //SKYRAT EDIT CHANGE

View File

@@ -111,12 +111,12 @@
suffix = "skyrat" //SKYRAT EDIT CHANGE suffix = "skyrat" //SKYRAT EDIT CHANGE
name = "Base Shuttle Template (Emergency)" name = "Base Shuttle Template (Emergency)"
/* //SKYRAT EDIT REMOVAL - MOVED TO MODULAR
/datum/map_template/shuttle/cargo /datum/map_template/shuttle/cargo
port_id = "cargo" port_id = "cargo"
name = "Base Shuttle Template (Cargo)" name = "Base Shuttle Template (Cargo)"
who_can_purchase = null who_can_purchase = null
/* //SKYRAT EDIT REMOVAL - MOVED TO MODULAR
/datum/map_template/shuttle/ferry /datum/map_template/shuttle/ferry
port_id = "ferry" port_id = "ferry"
name = "Base Shuttle Template (Ferry)" name = "Base Shuttle Template (Ferry)"
@@ -451,7 +451,7 @@
description = "A large shuttle with a center biodome that is flourishing with life. Frolick with the monkeys! (Extra monkeys are stored on the bridge.)" description = "A large shuttle with a center biodome that is flourishing with life. Frolick with the monkeys! (Extra monkeys are stored on the bridge.)"
admin_notes = "Pretty freakin' large, almost as big as Raven or Cere. Excercise caution with it." admin_notes = "Pretty freakin' large, almost as big as Raven or Cere. Excercise caution with it."
credit_cost = CARGO_CRATE_VALUE * 16 credit_cost = CARGO_CRATE_VALUE * 16
/datum/map_template/shuttle/emergency/casino /datum/map_template/shuttle/emergency/casino
suffix = "casino" suffix = "casino"
name = "Lucky Jackpot Casino Shuttle" name = "Lucky Jackpot Casino Shuttle"

View File

@@ -142,7 +142,7 @@
area_flags = NONE //Set this so it doesn't inherit NO_ALERTS area_flags = NONE //Set this so it doesn't inherit NO_ALERTS
/area/shuttle/supply /area/shuttle/supply
name = "Supply Shuttle" name = "NLV Consign" //SKYRAT EDIT CHANGE
area_flags = NOTELEPORT area_flags = NOTELEPORT
/area/shuttle/escape /area/shuttle/escape

View File

@@ -49,7 +49,7 @@
) )
query_round_game_mode.Execute() query_round_game_mode.Execute()
qdel(query_round_game_mode) qdel(query_round_game_mode)
generate_station_goals() //generate_station_goals() SKYRAT EDIT REMOVAL
return TRUE return TRUE

View File

@@ -219,7 +219,7 @@
/obj/item/banner/command/Initialize() /obj/item/banner/command/Initialize()
. = ..() . = ..()
job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //SKYRAT EDIT ADDITION job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND //SKYRAT EDIT ADDITION
/obj/item/banner/command/mundane /obj/item/banner/command/mundane
inspiration_available = FALSE inspiration_available = FALSE

View File

@@ -22,7 +22,7 @@
/datum/antagonist/rev/can_be_owned(datum/mind/new_owner) /datum/antagonist/rev/can_be_owned(datum/mind/new_owner)
. = ..() . = ..()
if(.) if(.)
if(new_owner.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND))//SKYRAT EDIT CHANGE if(new_owner.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND))//SKYRAT EDIT CHANGE
return FALSE return FALSE
if(new_owner.unconvertable) if(new_owner.unconvertable)
return FALSE return FALSE
@@ -424,7 +424,7 @@
if (isnull(mind)) if (isnull(mind))
continue continue
if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND)))//SKYRAT EDIT CHANGE if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND)))//SKYRAT EDIT CHANGE
continue continue
if (mind in ex_revs + ex_headrevs) if (mind in ex_revs + ex_headrevs)
@@ -443,7 +443,7 @@
mind.announce_objectives() mind.announce_objectives()
for(var/datum/job/job as anything in SSjob.joinable_occupations) for(var/datum/job/job as anything in SSjob.joinable_occupations)
if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_CENTRAL_COMMAND)))//SKYRAT EDIT CHANGE if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND|DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND)))//SKYRAT EDIT CHANGE
continue continue
job.allow_bureaucratic_error = FALSE job.allow_bureaucratic_error = FALSE
job.total_positions = 0 job.total_positions = 0

View File

@@ -165,6 +165,11 @@
return return
switch(action) switch(action)
if("send") if("send")
//SKYRAT EDIT CHANGE
if(SSshuttle.supply.manual_operation)
say("The supply shuttle is currently being manually operated.")
return
//SKYRAT EDIT END
if(!SSshuttle.supply.canMove()) if(!SSshuttle.supply.canMove())
say(safety_warning) say(safety_warning)
return return
@@ -268,6 +273,10 @@
if(requestonly && message_cooldown < world.time) if(requestonly && message_cooldown < world.time)
radio.talk_into(src, "A new order has been requested.", RADIO_CHANNEL_SUPPLY) radio.talk_into(src, "A new order has been requested.", RADIO_CHANNEL_SUPPLY)
message_cooldown = world.time + 30 SECONDS message_cooldown = world.time + 30 SECONDS
//SKYRAT EDIT ADDITION
for(var/obj/machinery/computer/cargo_control_console/iterating_console in GLOB.cargo_control_consoles)
iterating_console.notify_order(SO)
//SKYRAT EDIT END
. = TRUE . = TRUE
if("remove") if("remove")
var/id = text2num(params["id"]) var/id = text2num(params["id"])

View File

@@ -842,7 +842,7 @@
name = "Bluespace Artillery Parts" name = "Bluespace Artillery Parts"
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. " 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 = CARGO_CRATE_VALUE * 30 cost = CARGO_CRATE_VALUE * 30
special = FALSE //SKYRAT EDIT CHANGE special = TRUE
access_view = ACCESS_HEADS access_view = ACCESS_HEADS
contains = list(/obj/item/circuitboard/machine/bsa/front, contains = list(/obj/item/circuitboard/machine/bsa/front,
/obj/item/circuitboard/machine/bsa/middle, /obj/item/circuitboard/machine/bsa/middle,

View File

@@ -57,5 +57,8 @@
/mob/living/simple_animal/hostile/zombie/drop_loot() /mob/living/simple_animal/hostile/zombie/drop_loot()
. = ..() . = ..()
corpse.forceMove(drop_location()) if(!no_corpse) //SKYRAT EDIT CHANGE
corpse.create() corpse.forceMove(drop_location())
corpse.create()
else //SKYRAT EDIT CHANGE
new /obj/effect/gibspawner/human(loc) //SKYRAT EDIT CHANGE

View File

@@ -3,7 +3,7 @@
desc = "A console that controls the transport ferry." desc = "A console that controls the transport ferry."
circuit = /obj/item/circuitboard/computer/ferry circuit = /obj/item/circuitboard/computer/ferry
shuttleId = "ferry" shuttleId = "ferry"
possible_destinations = "ferry_home;ferry_away" possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE
req_access = list(ACCESS_CENT_GENERAL) req_access = list(ACCESS_CENT_GENERAL)
var/allow_silicons = FALSE var/allow_silicons = FALSE
var/allow_emag = FALSE var/allow_emag = FALSE
@@ -23,6 +23,6 @@
/obj/machinery/computer/shuttle/ferry/request /obj/machinery/computer/shuttle/ferry/request
name = "ferry console" name = "ferry console"
circuit = /obj/item/circuitboard/computer/ferry/request circuit = /obj/item/circuitboard/computer/ferry/request
possible_destinations = "ferry_home;ferry_away" possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE
req_access = list(ACCESS_CENT_GENERAL) req_access = list(ACCESS_CENT_GENERAL)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF

View File

@@ -1,3 +1,4 @@
/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR
GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
/mob/living, /mob/living,
/obj/structure/blob, /obj/structure/blob,
@@ -261,3 +262,4 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
#undef GOODY_FREE_SHIPPING_MAX #undef GOODY_FREE_SHIPPING_MAX
#undef CRATE_TAX #undef CRATE_TAX
*/

View File

@@ -1,4 +1,4 @@
/datum/action/chameleon_slowdown/ /datum/action/chameleon_slowdown
name = "Toggle Chameleon Slowdown" name = "Toggle Chameleon Slowdown"
button_icon_state = "chameleon_outfit" button_icon_state = "chameleon_outfit"
var/savedslowdown = 0 var/savedslowdown = 0
@@ -14,7 +14,7 @@
savedslowdown = slow savedslowdown = slow
owner.update_equipment_speed_mods() owner.update_equipment_speed_mods()
/datum/action/item_action/chameleon/change/ /datum/action/item_action/chameleon/change
var/datum/action/chameleon_slowdown/slowtoggle var/datum/action/chameleon_slowdown/slowtoggle
/datum/action/item_action/chameleon/change/update_look(mob/user, obj/item/picked_item) /datum/action/item_action/chameleon/change/update_look(mob/user, obj/item/picked_item)

View File

@@ -309,4 +309,8 @@
/obj/item/clothing/suit/armor/riot/knight/greyscale /obj/item/clothing/suit/armor/riot/knight/greyscale
mutant_variants = NONE mutant_variants = NONE
/obj/item/clothing/suit/toggle/armor/vest/centcom_formal
mutant_variants = NONE
//FEET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //FEET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

View File

@@ -1,8 +1,8 @@
/datum/job_department/central_command /datum/job_department/nanotrasen_fleet_command
department_name = DEPARTMENT_CENTRAL_COMMAND department_name = DEPARTMENT_NANOTRASEN_FLEET_COMMAND
department_bitflags = DEPARTMENT_BITFLAG_CENTRAL_COMMAND department_bitflags = DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND
department_head = /datum/job/captain department_head = /datum/job/fleetmaster
department_experience_type = EXP_TYPE_CENTRAL_COMMAND department_experience_type = EXP_TYPE_NANOTRASEN_FLEET_COMMAND
display_order = 1 display_order = 1
label_class = "command" label_class = "command"
latejoin_color = "#ccccff" latejoin_color = "#86ff82"

View File

@@ -488,7 +488,7 @@
continue continue
var/jobline = "" var/jobline = ""
var/command_bold = "" var/command_bold = ""
if((job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) || (job_datum.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND)) if((job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) || (job_datum.departments_bitflags & DEPARTMENT_BITFLAG_NANOTRASEN_FLEET_COMMAND))
command_bold = " command" command_bold = " command"
if(job_datum in SSjob.prioritized_jobs) if(job_datum in SSjob.prioritized_jobs)
jobline = "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>" jobline = "<a class='job[command_bold]' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'><span class='priority'>[job_datum.title] ([job_datum.current_positions])</span></a>"
@@ -508,7 +508,7 @@
dat += "</td><td valign='top'>" dat += "</td><td valign='top'>"
dat += "</td></tr></table></center>" dat += "</td></tr></table></center>"
dat += "</div></div>" dat += "</div></div>"
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580) var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 1080, 680)
popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
popup.set_content(jointext(dat, "")) popup.set_content(jointext(dat, ""))
popup.open(FALSE) // 0 is passed to open so that it doesn't use the onclose() proc popup.open(FALSE) // 0 is passed to open so that it doesn't use the onclose() proc

View File

@@ -1,12 +1,29 @@
/mob/living/simple_animal/hostile/zombie
var/no_corpse = FALSE
var/list/possible_jobs = list(
"Assistant",
"Station Engineer",
"Cook",
"Bartender",
"Chemist",
"Medical Doctor",
"Virologist",
"Clown",
"Mime",
"Scientist",
"Cargo Technician",
"Security Officer",
"Security Medic",
"Geneticist",
"Botanist",
)
/mob/living/simple_animal/hostile/zombie/nocorpse
no_corpse = TRUE
/mob/living/simple_animal/hostile/zombie/proc/setup_visuals() /mob/living/simple_animal/hostile/zombie/proc/setup_visuals()
var/list/jobs_to_pick = list() var/picked_job = pick(possible_jobs)
for(var/datum/job/job as anything in shuffle(SSjob.joinable_occupations)) var/datum/job/J = SSjob.GetJob(picked_job)
if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
continue
if(job.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND)
continue
jobs_to_pick += job
var/datum/job/J = pick(jobs_to_pick)
var/datum/outfit/O var/datum/outfit/O
if(J.outfit) if(J.outfit)
O = new J.outfit O = new J.outfit
@@ -14,9 +31,10 @@
O.r_hand = null O.r_hand = null
O.l_hand = null O.l_hand = null
var/icon/P = get_flat_human_icon_skyrat(null, J, /datum/species/zombie, SPECIES_ZOMBIE_HALLOWEEN, outfit_override = O) var/icon/P = get_flat_human_icon_skyrat("zombie_[picked_job]", J, /datum/species/zombie/infectious, SPECIES_ZOMBIE_HALLOWEEN, "zombie", outfit_override = O)
icon = P icon = P
corpse = new(src) if(!no_corpse)
corpse.outfit = O corpse = new(src)
corpse.mob_species = /datum/species/zombie corpse.outfit = O
corpse.mob_name = name corpse.mob_species = /datum/species/zombie
corpse.mob_name = name

View File

@@ -0,0 +1,272 @@
GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
/obj/structure/blob,
/obj/effect/rune,
/obj/structure/spider/spiderling,
/obj/item/disk/nuclear,
/obj/machinery/nuclearbomb,
/obj/item/beacon,
/obj/narsie,
/obj/tear_in_reality,
/obj/machinery/teleport/station,
/obj/machinery/teleport/hub,
/obj/machinery/quantumpad,
/obj/effect/mob_spawn,
/obj/effect/hierophant,
/obj/structure/receiving_pad,
/obj/item/warp_cube,
/obj/machinery/rnd/production, //print tracking beacons, send shuttle
/obj/machinery/autolathe, //same
/obj/projectile/beam/wormhole,
/obj/effect/portal,
/obj/item/shared_storage,
/obj/structure/extraction_point,
/obj/machinery/syndicatebomb,
/obj/item/hilbertshotel,
/obj/item/swapper,
/obj/docking_port,
/obj/machinery/launchpad,
/obj/machinery/disposal,
/obj/structure/disposalpipe,
/obj/item/mail,
/obj/item/hilbertshotel,
/obj/machinery/camera,
/obj/item/gps,
/obj/structure/checkoutmachine
)))
/// How many goody orders we can fit in a lockbox before we upgrade to a crate
#define GOODY_FREE_SHIPPING_MAX 5
/// How much to charge oversized goody orders
#define CRATE_TAX 700
/obj/docking_port/mobile/supply
name = "supply shuttle"
id = "supply"
callTime = 600
dir = WEST
port_direction = EAST
width = 12
dwidth = 5
height = 7
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0)
//Export categories for this run, this is set by console sending the shuttle.
var/export_categories = EXPORT_CARGO
var/manual_operation = FALSE
/obj/docking_port/mobile/supply/register()
. = ..()
SSshuttle.supply = src
/obj/docking_port/mobile/supply/canMove()
if(is_station_level(z))
return check_blacklist(shuttle_areas)
return ..()
/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances)
for(var/place in areaInstances)
var/area/shuttle/shuttle_area = place
for(var/turf/shuttle_turf in shuttle_area)
for(var/atom/passenger in shuttle_turf.GetAllContents())
if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port))
return FALSE
return TRUE
/obj/docking_port/mobile/supply/request(obj/docking_port/stationary/S)
if(mode != SHUTTLE_IDLE)
return 2
return ..()
/obj/docking_port/mobile/supply/initiate_docking()
if(getDockedId() == "supply_away" && !manual_operation) // Buy when we leave home.
buy()
create_mail()
. = ..() // Fly/enter transit.
if(. != DOCKING_SUCCESS)
return
if(getDockedId() == "supply_away" && !manual_operation) // Sell when we get home
sell()
/obj/docking_port/mobile/supply/proc/buy()
var/list/obj/miscboxes = list() //miscboxes are combo boxes that contain all goody orders grouped
var/list/misc_order_num = list() //list of strings of order numbers, so that the manifest can show all orders in a box
var/list/misc_contents = list() //list of lists of items that each box will contain
var/list/misc_costs = list() //list of overall costs sustained by each buyer.
var/list/empty_turfs = list()
for(var/place in shuttle_areas)
if(istype(place, /area/shuttle/supply/cockpit))
continue
var/area/shuttle/shuttle_area = place
for(var/turf/open/floor/T in shuttle_area)
if(T.is_blocked_turf())
continue
empty_turfs += T
//quickly and greedily handle chef's grocery runs first, there are a few reasons why this isn't attached to the rest of cargo...
//but the biggest reason is that the chef requires produce to cook and do their job, and if they are using this system they
//already got let down by the botanists. So to open a new chance for cargo to also screw them over any more than is necessary is bad.
if(SSshuttle.chef_groceries.len)
var/obj/structure/closet/crate/freezer/grocery_crate = new(pick_n_take(empty_turfs))
grocery_crate.name = "kitchen produce freezer"
investigate_log("Chef's [SSshuttle.chef_groceries.len] sized produce order arrived. Cost was deducted from orderer, not cargo.", INVESTIGATE_CARGO)
for(var/datum/orderable_item/item as anything in SSshuttle.chef_groceries)//every order
for(var/amt in 1 to SSshuttle.chef_groceries[item])//every order amount
new item.item_instance.type(grocery_crate)
SSshuttle.chef_groceries.Cut() //This lets the console know it can order another round.
if(!SSshuttle.shoppinglist.len)
return
var/value = 0
var/purchases = 0
var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(!empty_turfs.len)
break
var/price = SO.pack.get_cost()
if(SO.applied_coupon)
price *= (1 - SO.applied_coupon.discount_pct_off)
var/datum/bank_account/D
if(SO.paying_account) //Someone paid out of pocket
D = SO.paying_account
var/list/current_buyer_orders = goodies_by_buyer[SO.paying_account] // so we can access the length a few lines down
if(!SO.pack.goody)
price *= 1.1 //TODO make this customizable by the quartermaster
// note this is before we increment, so this is the GOODY_FREE_SHIPPING_MAX + 1th goody to ship. also note we only increment off this step if they successfully pay the fee, so there's no way around it
else if(LAZYLEN(current_buyer_orders) == GOODY_FREE_SHIPPING_MAX)
price += CRATE_TAX
D.bank_card_talk("Goody order size exceeds free shipping limit: Assessing [CRATE_TAX] credit S&H fee.")
else
D = SSeconomy.get_dep_account(ACCOUNT_CAR)
if(D)
if(!D.adjust_money(-price))
if(SO.paying_account)
D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]")
continue
if(SO.paying_account)
if(SO.pack.goody)
LAZYADD(goodies_by_buyer[SO.paying_account], SO)
D.bank_card_talk("Cargo order #[SO.id] has shipped. [price] credits have been charged to your bank account.")
var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR)
cargo.adjust_money(price - SO.pack.get_cost()) //Cargo gets the handling fee
value += SO.pack.get_cost()
SSshuttle.shoppinglist -= SO
SSshuttle.orderhistory += SO
QDEL_NULL(SO.applied_coupon)
if(!SO.pack.goody) //we handle goody crates below
SO.generate(pick_n_take(empty_turfs))
SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.get_cost()]", "[SO.pack.name]"))
investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]), paid by [D.account_holder] has shipped.", INVESTIGATE_CARGO)
if(SO.pack.dangerous)
message_admins("\A [SO.pack.name] ordered by [ADMIN_LOOKUPFLW(SO.orderer_ckey)], paid by [D.account_holder] has shipped.")
purchases++
// we handle packing all the goodies last, since the type of crate we use depends on how many goodies they ordered. If it's more than GOODY_FREE_SHIPPING_MAX
// then we send it in a crate (including the CRATE_TAX cost), otherwise send it in a free shipping case
for(var/D in goodies_by_buyer)
var/list/buying_account_orders = goodies_by_buyer[D]
var/datum/bank_account/buying_account = D
var/buyer = buying_account.account_holder
if(buying_account_orders.len > GOODY_FREE_SHIPPING_MAX) // no free shipping, send a crate
var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs))
our_crate.buyer_account = buying_account
our_crate.name = "goody crate - purchased by [buyer]"
miscboxes[buyer] = our_crate
else //free shipping in a case
miscboxes[buyer] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs))
var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer]
our_case.buyer_account = buying_account
miscboxes[buyer].name = "goody case - purchased by [buyer]"
misc_contents[buyer] = list()
for(var/O in buying_account_orders)
var/datum/supply_order/our_order = O
for (var/item in our_order.pack.contains)
misc_contents[buyer] += item
misc_costs[buyer] += our_order.pack.cost
misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] "
for(var/I in miscboxes)
var/datum/supply_order/SO = new/datum/supply_order()
SO.id = misc_order_num[I]
SO.generateCombo(miscboxes[I], I, misc_contents[I], misc_costs[I])
qdel(SO)
SSeconomy.import_total += value
var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR)
investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO)
/obj/docking_port/mobile/supply/proc/sell()
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
var/presale_points = D.account_balance
if(!GLOB.exports_list.len) // No exports list? Generate it!
setupExports()
var/msg = ""
var/datum/export_report/ex = new
for(var/place in shuttle_areas)
var/area/shuttle/shuttle_area = place
if(istype(place, /area/shuttle/supply/cockpit))
continue
for(var/atom/movable/AM in shuttle_area)
if(iscameramob(AM))
continue
if(isliving(AM))
continue
if(!AM.anchored || istype(AM, /obj/vehicle/sealed/mecha))
export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex)
if(ex.exported_atoms)
ex.exported_atoms += "." //ugh
for(var/datum/export/E in ex.total_amount)
var/export_text = E.total_printout(ex)
if(!export_text)
continue
msg += export_text + "\n"
D.adjust_money(ex.total_value[E])
SSeconomy.export_total += (D.account_balance - presale_points)
SSshuttle.centcom_message = msg
investigate_log("Shuttle contents sold for [D.account_balance - presale_points] credits. Contents: [ex.exported_atoms ? ex.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO)
/*
Generates a box of mail depending on our exports and imports.
Applied in the cargo shuttle sending/arriving, by building the crate if the round is ready to introduce mail based on the economy subsystem.
Then, fills the mail crate with mail, by picking applicable crew who can recieve mail at the time to sending.
*/
/obj/docking_port/mobile/supply/proc/create_mail()
//Early return if there's no mail waiting to prevent taking up a slot. We also don't send mails on sundays or holidays.
if(!SSeconomy.mail_waiting || SSeconomy.mail_blocked)
return
//spawn crate
var/list/empty_turfs = list()
for(var/place as anything in shuttle_areas)
if(istype(place, /area/shuttle/supply/cockpit))
continue
var/area/shuttle/shuttle_area = place
for(var/turf/open/floor/shuttle_floor in shuttle_area)
if(shuttle_floor.is_blocked_turf())
continue
empty_turfs += shuttle_floor
new /obj/structure/closet/crate/mail/economy(pick(empty_turfs))
#undef GOODY_FREE_SHIPPING_MAX
#undef CRATE_TAX

View File

@@ -1,6 +1,18 @@
/area/centcom/interlink /area/centcom/interlink
name = "The Interlink" name = "The Interlink"
/area/centcom/ncvtitan
name = "NCV Titan"
/area/centcom/ncvtitan/import_bay
name = "NCV Titan Import Bay"
/area/centcom/ncvtitan/export_bay
name = "NCV Titan Export Bay"
/area/shuttle/supply/cockpit
name = "NLV Consign Cockpit"
/area/shuttle/escape/no_light /area/shuttle/escape/no_light
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
@@ -15,3 +27,4 @@
/area/shuttle/transport/no_light /area/shuttle/transport/no_light
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED dynamic_lighting = DYNAMIC_LIGHTING_DISABLED

View File

@@ -1,11 +1,18 @@
/datum/map_template/shuttle/ferry /datum/map_template/shuttle/ferry
name = "centcom ferry" name = "NAV Monarch"
port_id = "ferry" port_id = "ferry"
suffix = "skyrat" suffix = "skyrat"
who_can_purchase = null who_can_purchase = null
/datum/map_template/shuttle/cargo
name = "NLV Consign"
port_id = "cargo"
suffix = "skyrat"
name = "NLV Consign (Cargo)"
who_can_purchase = null
/obj/docking_port/mobile/arrivals_skyrat /obj/docking_port/mobile/arrivals_skyrat
name = "arrivals interlink shuttle" name = "NTV Relay"
id = "arrivals_shuttle" id = "arrivals_shuttle"
dwidth = 1 dwidth = 1
width = 5 width = 5

View File

@@ -21,7 +21,7 @@
display_order = JOB_DISPLAY_ORDER_BLUESHIELD display_order = JOB_DISPLAY_ORDER_BLUESHIELD
bounty_types = CIV_JOB_SEC bounty_types = CIV_JOB_SEC
departments_list = list( departments_list = list(
/datum/job_department/central_command, /datum/job_department/nanotrasen_fleet_command,
/datum/job_department/command, /datum/job_department/command,
) )
liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM) liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM)

View File

@@ -22,6 +22,11 @@
Base parts are available for shipping via cargo. Base parts are available for shipping via cargo.
-Nanotrasen Naval Command"} -Nanotrasen Naval Command"}
/datum/station_goal/bluespace_cannon/on_report()
//Unlock BSA parts
var/datum/supply_pack/engineering/bsa/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/bsa]
P.special_enabled = TRUE
/datum/station_goal/bluespace_cannon/check_completion() /datum/station_goal/bluespace_cannon/check_completion()
if(..()) if(..())
return TRUE return TRUE

View File

@@ -0,0 +1,111 @@
/obj/machinery/computer/cargo_shuttle_console
name = "NLV Consign Flight Console"
desc = "A console used for controlling the NLV Consign."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/cargo_shuttle_console
light_color = LIGHT_COLOR_BLUE
///The name of the shuttle template being used as the cargo shuttle. 'supply' is default and contains critical code. Don't change this unless you know what you're doing.
var/cargo_shuttle = "supply"
///The docking port called when returning to the station.
var/docking_home = "supply_home"
///The docking port called when leaving the station.
var/docking_away = "supply_away"
var/safety_warning = "For safety and ethical reasons, the automated supply shuttle \
cannot transport human remains, classified nuclear weaponry, mail \
homing beacons, unstable eigenstates or machinery housing any form of artificial intelligence."
var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible."
var/export_categories = EXPORT_CARGO | EXPORT_CONTRABAND | EXPORT_EMAG
var/last_autopilot_change = 0
/// radio used by the console to send messages on supply channel
var/obj/item/radio/headset/radio
/obj/machinery/computer/cargo_shuttle_console/Initialize()
. = ..()
radio = new /obj/item/radio/headset/headset_cargo(src)
/obj/item/circuitboard/computer/cargo_shuttle_console
name = "Flight Control (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/cargo_shuttle_console
/obj/machinery/computer/cargo_shuttle_console/ui_interact(mob/user)
var/list/dat = list("<b>SHUTTLE CONTROL SYSTEMS</b>")
var/manual_operation = SSshuttle.supply.manual_operation
dat += "<b>STATUS:</b> [SSshuttle.supply.getStatusText()]"
if(manual_operation)
dat += "<font color='#ff0000'><b>AUTOPILOT OFFLINE</b></font> - <a href='byond://?src=[REF(src)];function=autopilot'>SWITCH TO AUTOPILOT</a>"
dat += "<b>Flight control:</b>"
if(SSshuttle.supply.getDockedId() == docking_away)
dat += "<a href='byond://?src=[REF(src)];function=takeoff'>Navigate to [station_name()]</a>"
else
dat += "<a href='byond://?src=[REF(src)];function=takeoff'>Navigate to NCV Titan</a>"
dat += "<a href='byond://?src=[REF(src)];function=lockdoors'>Bolt doors</a>"
dat += "<a href='byond://?src=[REF(src)];function=unlockdoors'>Unbolt doors</a>"
else
dat += "<font color='#00ff15'>AUTOPILOT ONLINE</font> - <a href='byond://?src=[REF(src)];function=autopilot'>SWITCH TO MANUAL OPERATION</a>"
var/datum/browser/popup = new(user, "flight_control","FLIGHT CONTROL", 400, 400, src)
popup.set_content(dat.Join("<br>"))
popup.open()
onclose(user, "flight_control")
/obj/machinery/computer/cargo_shuttle_console/Topic(href, href_list)
if(..())
return
if(machine_stat & (NOPOWER|BROKEN|MAINT))
return
usr.set_machine(src)
var/function = href_list["function"]
if(href_list["close"])
usr << browse(null, "window=flight_control")
return
switch(function)
if("autopilot")
if((last_autopilot_change + 1 MINUTES) > world.time)
say("Autopilot system in cooldown.")
return
SSshuttle.supply.manual_operation = !SSshuttle.supply.manual_operation
say("Autopilot [SSshuttle.supply.manual_operation ? "disengaged" : "engaged"].")
minor_announce("Cargo shuttle is now in [SSshuttle.supply.manual_operation ? "manual" : "automatic"] operation.", "Cargo Shuttle")
last_autopilot_change = world.time
if("takeoff")
if(!SSshuttle.supply.canMove())
say(safety_warning)
return
if(SSshuttle.supplyBlocked)
say(blockade_warning)
return
if(SSshuttle.supply.getDockedId() == docking_home)
SSshuttle.supply.export_categories = export_categories
SSshuttle.moveShuttle(cargo_shuttle, docking_away, TRUE)
say("Shuttle departing, ETA [SSshuttle.supply.timeLeft(600)] minutes.")
radio.talk_into(src, "NLV Consign departing the station.", RADIO_CHANNEL_SUPPLY)
investigate_log("[key_name(usr)] sent the supply shuttle away.", INVESTIGATE_CARGO)
else
investigate_log("[key_name(usr)] called the supply shuttle.", INVESTIGATE_CARGO)
radio.talk_into(src, "NLV Consign departing towards the station, ETA: [SSshuttle.supply.timeLeft(600)] minutes.", RADIO_CHANNEL_SUPPLY)
say("Shuttle departing, ETA [SSshuttle.supply.timeLeft(600)] minutes.")
SSshuttle.moveShuttle(cargo_shuttle, docking_home, TRUE)
if("lockdoors")
for(var/area/place in SSshuttle.supply.shuttle_areas)
for(var/obj/machinery/door/airlock/iterating_airlock in place)
iterating_airlock.close()
iterating_airlock.bolt()
if("unlockdoors")
for(var/area/place in SSshuttle.supply.shuttle_areas)
for(var/obj/machinery/door/airlock/iterating_airlock in place)
iterating_airlock.unbolt()
updateUsrDialog()

View File

@@ -0,0 +1,86 @@
#define ANNOUNCEMENT_COOLDOWN (10 MINUTES)
/obj/machinery/computer/centcom_announcement
name = "fleet announcement console"
desc = "A console used for making priority Nanotrasen Command Reports."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/communications
light_color = LIGHT_COLOR_BLUE
/// The name of central command that will accompany our report
var/command_name = "Nanotrasen Fleet Command Update"
/// The actual contents of the report we're going to send.
var/command_report_content
/// The title of our report, if anything.
var/command_report_title
/// Whether the report's contents are announced.
var/announce_contents = TRUE
/// The error we encountered while trying to send a report.
var/error = ""
/// Cooldown for sending messages
COOLDOWN_DECLARE(static/announcement_cooldown)
/obj/machinery/computer/centcom_announcement/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "CommandReportConsole")
ui.open()
/obj/machinery/computer/centcom_announcement/ui_data(mob/user)
var/list/data = list()
data["command_report_content"] = command_report_content
data["announce_contents"] = announce_contents
data["error"] = error
data["command_report_title"] = command_report_title
return data
/obj/machinery/computer/centcom_announcement/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
switch(action)
if("update_report_contents")
command_report_content = params["updated_contents"]
if("update_report_title")
command_report_title = params["updated_title"]
if("toggle_announce")
announce_contents = !announce_contents
if("submit_report")
error = ""
if(!command_report_content)
error = "ERROR, NO CONTENTS"
return
if (!COOLDOWN_FINISHED(src, announcement_cooldown))
error = "ERROR, SYSTEM IS RECHARGING, ETA: [announcement_cooldown - world.time]"
return
send_announcement()
return TRUE
/*
* The actual proc that sends the priority announcement and reports
*/
/obj/machinery/computer/centcom_announcement/proc/send_announcement()
if (!COOLDOWN_FINISHED(src, announcement_cooldown))
return
/// The sound we're going to play on report.
var/report_sound = SSstation.announcer.get_rand_report_sound()
if(announce_contents)
priority_announce(command_report_content, command_report_title, report_sound, sender_override = command_name, has_important_message = TRUE)
print_command_report(command_report_content, "[announce_contents ? "" : "Classified "][command_name] Update", !announce_contents)
log_admin("[key_name(usr)] has created a command report: \"[command_report_content]\", sent from \"[command_name]\".")
message_admins("[key_name_admin(usr)] has created a command report, sent from \"[command_name]\".")
COOLDOWN_START(src, announcement_cooldown, ANNOUNCEMENT_COOLDOWN)
/obj/item/circuitboard/computer/centcom_announcement
name = "Fleet Announcement (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/centcom_announcement
#undef ANNOUNCEMENT_COOLDOWN

View File

@@ -0,0 +1,15 @@
/obj/machinery/computer/ert_control
name = "fleet asset control console"
desc = "A console used for redeploying Nanotrasen Emergency Response assets."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/communications
light_color = LIGHT_COLOR_BLUE
/obj/item/circuitboard/computer/ert_control
name = "Fleet Control (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/ert_control

View File

@@ -0,0 +1,124 @@
/obj/machinery/computer/market_link
name = "Nanotrasen Market Link"
desc = "A console used for selling items to the space market."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/market_link
light_color = LIGHT_COLOR_BLUE
/// radio used by the console to send messages on supply channel
var/obj/item/radio/headset/radio
var/list/bay_items = list()
var/list/possible_areas = list()
//Export categories for this run, this is set by console sending the shuttle.
var/export_categories = EXPORT_CARGO
/obj/machinery/computer/market_link/Initialize()
. = ..()
radio = new /obj/item/radio/headset/headset_cargo(src)
for(var/area/centcom/ncvtitan/export_bay/iterating_export_bay in world)
possible_areas += iterating_export_bay
/obj/item/circuitboard/computer/market_link
name = "Market Link (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/market_link
/obj/machinery/computer/market_link/ui_interact(mob/user)
var/list/dat = list("<b>Nanotrasen Market Link</b>")
var/manual_operation = SSshuttle.supply.manual_operation
if(manual_operation)
dat += "<a href='byond://?src=[REF(src)];function=scan'>Scan Loading Area</a>"
dat += "CARGO SELLING AREA:"
if(bay_items.len)
dat += "<select name='requested_items' size='number_of_options' multiple='multiple'>"
for(var/atom/iterating_atom in bay_items)
dat += "<option value='[iterating_atom.name]'>[iterating_atom.name]</option>"
dat += "</select>"
dat += "<a href='byond://?src=[REF(src)];function=sell'>EXPORT ITEMS</a>"
else
dat += "NOTHING"
else
dat += "MANUAL SHUTTLE OPERATION IS REQUIRED TO USE THIS TERMINAL."
var/datum/browser/popup = new(user, "export_console","Export Console", 600, 800, src)
popup.set_content(dat.Join("<br>"))
popup.open()
onclose(user, "export_console")
/obj/machinery/computer/market_link/Topic(href, href_list)
if(..())
return
if(machine_stat & (NOPOWER|BROKEN|MAINT))
return
usr.set_machine(src)
var/function = href_list["function"]
if(href_list["close"])
usr << browse(null, "window=export_console")
return
switch(function)
if("scan")
if(!SSshuttle.supply.manual_operation)
say("Manual shuttle operation required.")
return
bay_items.Cut()
for(var/place in possible_areas)
var/area/centcom/ncvtitan/export_bay/exporting_bay = place
for(var/atom/movable/moveable_atom in exporting_bay)
bay_items += moveable_atom
say("Area scanned.")
if("sell")
if(!SSshuttle.supply.manual_operation)
say("Manual shuttle operation required.")
return
sell()
say("Export complete.")
radio.talk_into(src, "NCV Titan has exported your recieved items and credited you accordingly.", RADIO_CHANNEL_SUPPLY)
updateUsrDialog()
/obj/machinery/computer/market_link/proc/sell()
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
var/presale_points = D.account_balance
if(!GLOB.exports_list.len) // No exports list? Generate it!
setupExports()
var/msg = ""
var/datum/export_report/ex = new
for(var/place in possible_areas)
var/area/centcom/ncvtitan/export_bay/exporting_bay = place
for(var/atom/movable/AM in exporting_bay)
if(isliving(AM))
say("Biological material detected in export area. Halting.")
return
if(iscameramob(AM))
continue
if(!AM.anchored || istype(AM, /obj/vehicle/sealed/mecha))
bay_items -= AM
export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex)
if(ex.exported_atoms)
ex.exported_atoms += "." //ugh
for(var/datum/export/E in ex.total_amount)
var/export_text = E.total_printout(ex)
if(!export_text)
continue
msg += export_text + "\n"
D.adjust_money(ex.total_value[E])
SSeconomy.export_total += (D.account_balance - presale_points)
SSshuttle.centcom_message = msg
investigate_log("Shuttle contents sold for [D.account_balance - presale_points] credits. Contents: [ex.exported_atoms ? ex.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO)

View File

@@ -0,0 +1,217 @@
GLOBAL_LIST_EMPTY(cargo_control_consoles)
/obj/machinery/computer/cargo_control_console
name = "NCV Titan Cargo Console"
desc = "A console used for processing requests from the staton."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/cargo_control_console
light_color = LIGHT_COLOR_BLUE
/// radio used by the console to send messages on supply channel
var/obj/item/radio/headset/radio
var/list/possible_floors = list()
/obj/machinery/computer/cargo_control_console/Initialize()
. = ..()
radio = new /obj/item/radio/headset/headset_cargo(src)
GLOB.cargo_control_consoles += src
for(var/area/centcom/ncvtitan/import_bay/iterating_import_bay in world)
for(var/turf/open/floor/iterating_floor in iterating_import_bay)
possible_floors += iterating_floor
/obj/item/circuitboard/computer/cargo_control_console
name = "Cargo Console (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/cargo_control_console
/obj/machinery/computer/cargo_control_console/ui_interact(mob/user)
var/list/dat = list("<b>CARGOSYS 3000</b>")
var/manual_operation = SSshuttle.supply.manual_operation
if(manual_operation)
dat += "REQUESTED ITEMS:"
if(SSshuttle.requestlist.len)
dat += "<select name='requested_items' size='number_of_options' multiple='multiple'>"
for(var/datum/supply_order/SO in SSshuttle.requestlist)
dat += "<option value='[SO.pack.id]'>[SO.pack.name] requested by [SO.orderer]</option>"
dat += "</select>"
else
dat += " - NONE"
dat += "PURCHASED ITEMS:"
if(SSshuttle.shoppinglist.len)
dat += "<select name='purchased_items' size='number_of_options' multiple='multiple'>"
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
dat += "<option value='[SO.pack.id]'>[SO.pack.name] purchased by [SO.orderer]</option>"
dat += "</select>"
dat += "<a href='byond://?src=[REF(src)];function=purchase'>PROCESS PURCHASE LIST</a>"
else
dat += " - NONE"
else
dat += "MANUAL SHUTTLE OPERATION IS REQUIRED TO USE THIS TERMINAL."
var/datum/browser/popup = new(user, "cargo_console","Cargo Console", 600, 400, src)
popup.set_content(dat.Join("<br>"))
popup.open()
onclose(user, "cargo_console")
/obj/machinery/computer/cargo_control_console/Topic(href, href_list)
if(..())
return
if(machine_stat & (NOPOWER|BROKEN|MAINT))
return
usr.set_machine(src)
var/function = href_list["function"]
if(href_list["close"])
usr << browse(null, "window=cargo_console")
return
switch(function)
if("purchase")
if(!SSshuttle.supply.manual_operation)
say("Manual shuttle operation required.")
return
buy()
create_mail()
radio.talk_into(src, "NCV Titan has processed your purchase list, they will deliver it shortly.", RADIO_CHANNEL_SUPPLY)
updateUsrDialog()
/obj/machinery/computer/cargo_control_console/proc/create_mail()
//Early return if there's no mail waiting to prevent taking up a slot. We also don't send mails on sundays or holidays.
if(!SSeconomy.mail_waiting || SSeconomy.mail_blocked)
return
//spawn crate
var/list/empty_turfs = list()
for(var/turf/open/floor/iterating_floor in possible_floors)
if(iterating_floor.is_blocked_turf())
continue
empty_turfs += iterating_floor
new /obj/structure/closet/crate/mail/economy(pick(empty_turfs))
/obj/machinery/computer/cargo_control_console/proc/buy()
var/list/obj/miscboxes = list() //miscboxes are combo boxes that contain all goody orders grouped
var/list/misc_order_num = list() //list of strings of order numbers, so that the manifest can show all orders in a box
var/list/misc_contents = list() //list of lists of items that each box will contain
var/list/misc_costs = list() //list of overall costs sustained by each buyer.
var/list/empty_turfs = list()
for(var/turf/open/floor/iterating_floor in possible_floors)
if(iterating_floor.is_blocked_turf())
continue
empty_turfs += iterating_floor
//quickly and greedily handle chef's grocery runs first, there are a few reasons why this isn't attached to the rest of cargo...
//but the biggest reason is that the chef requires produce to cook and do their job, and if they are using this system they
//already got let down by the botanists. So to open a new chance for cargo to also screw them over any more than is necessary is bad.
if(SSshuttle.chef_groceries.len)
var/obj/structure/closet/crate/freezer/grocery_crate = new(pick_n_take(empty_turfs))
grocery_crate.name = "kitchen produce freezer"
investigate_log("Chef's [SSshuttle.chef_groceries.len] sized produce order arrived. Cost was deducted from orderer, not cargo.", INVESTIGATE_CARGO)
for(var/datum/orderable_item/item as anything in SSshuttle.chef_groceries)//every order
for(var/amt in 1 to SSshuttle.chef_groceries[item])//every order amount
new item.item_instance.type(grocery_crate)
SSshuttle.chef_groceries.Cut() //This lets the console know it can order another round.
if(!SSshuttle.shoppinglist.len)
return
var/value = 0
var/purchases = 0
var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(!empty_turfs.len)
break
var/price = SO.pack.get_cost()
if(SO.applied_coupon)
price *= (1 - SO.applied_coupon.discount_pct_off)
var/datum/bank_account/D
if(SO.paying_account) //Someone paid out of pocket
D = SO.paying_account
var/list/current_buyer_orders = goodies_by_buyer[SO.paying_account] // so we can access the length a few lines down
if(!SO.pack.goody)
price *= 1.1 //TODO make this customizable by the quartermaster
// note this is before we increment, so this is the GOODY_FREE_SHIPPING_MAX + 1th goody to ship. also note we only increment off this step if they successfully pay the fee, so there's no way around it
else if(LAZYLEN(current_buyer_orders) == 5)
price += 700
D.bank_card_talk("Goody order size exceeds free shipping limit: Assessing [700] credit S&H fee.")
else
D = SSeconomy.get_dep_account(ACCOUNT_CAR)
if(D)
if(!D.adjust_money(-price))
if(SO.paying_account)
D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]")
continue
if(SO.paying_account)
if(SO.pack.goody)
LAZYADD(goodies_by_buyer[SO.paying_account], SO)
D.bank_card_talk("Cargo order #[SO.id] has shipped. [price] credits have been charged to your bank account.")
var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR)
cargo.adjust_money(price - SO.pack.get_cost()) //Cargo gets the handling fee
value += SO.pack.get_cost()
SSshuttle.shoppinglist -= SO
SSshuttle.orderhistory += SO
QDEL_NULL(SO.applied_coupon)
if(!SO.pack.goody) //we handle goody crates below
SO.generate(pick_n_take(empty_turfs))
SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.get_cost()]", "[SO.pack.name]"))
investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]), paid by [D.account_holder] has shipped.", INVESTIGATE_CARGO)
if(SO.pack.dangerous)
message_admins("\A [SO.pack.name] ordered by [ADMIN_LOOKUPFLW(SO.orderer_ckey)], paid by [D.account_holder] has shipped.")
purchases++
// we handle packing all the goodies last, since the type of crate we use depends on how many goodies they ordered. If it's more than GOODY_FREE_SHIPPING_MAX
// then we send it in a crate (including the CRATE_TAX cost), otherwise send it in a free shipping case
for(var/D in goodies_by_buyer)
var/list/buying_account_orders = goodies_by_buyer[D]
var/datum/bank_account/buying_account = D
var/buyer = buying_account.account_holder
if(buying_account_orders.len > 5) // no free shipping, send a crate
var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs))
our_crate.buyer_account = buying_account
our_crate.name = "goody crate - purchased by [buyer]"
miscboxes[buyer] = our_crate
else //free shipping in a case
miscboxes[buyer] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs))
var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer]
our_case.buyer_account = buying_account
miscboxes[buyer].name = "goody case - purchased by [buyer]"
misc_contents[buyer] = list()
for(var/O in buying_account_orders)
var/datum/supply_order/our_order = O
for (var/item in our_order.pack.contains)
misc_contents[buyer] += item
misc_costs[buyer] += our_order.pack.cost
misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] "
for(var/I in miscboxes)
var/datum/supply_order/SO = new/datum/supply_order()
SO.id = misc_order_num[I]
SO.generateCombo(miscboxes[I], I, misc_contents[I], misc_costs[I])
qdel(SO)
SSeconomy.import_total += value
var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR)
investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO)
/obj/machinery/computer/cargo_control_console/proc/notify_order(datum/supply_order/SO)
say("New order recieved!")
playsound(src, 'sound/machines/ping.ogg')
SO.generateRequisition(get_turf(src))

View File

@@ -0,0 +1,64 @@
/obj/machinery/computer/station_goal
name = "station goal console"
desc = "A console used for setting the stations goal."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(ACCESS_CENT_CAPTAIN)
circuit = /obj/item/circuitboard/computer/station_goal
light_color = LIGHT_COLOR_BLUE
var/list/station_goal_cache = list()
var/goal_assigned = FALSE
/obj/item/circuitboard/computer/station_goal
name = "Station Goal (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/station_goal
/obj/machinery/computer/station_goal/Initialize()
. = ..()
station_goal_cache = subtypesof(/datum/station_goal)
/obj/machinery/computer/station_goal/ui_interact(mob/user)
var/list/dat = list("<b>STATION GOAL SELECTION - OFFICIAL USE ONLY</b>")
if(!goal_assigned)
dat += "Please select ONE goal to assign to [station_name()]"
for(var/datum/station_goal/iterating_goal as anything in station_goal_cache)
dat += "<b><a href='byond://?src=[REF(src)];selected_goal=[initial(iterating_goal.name)]'>[initial(iterating_goal.name)]</a></b>"
dat += "Once you select a goal, it will be assigned to the station."
else
dat += "<b>GOAL HAS BEEN ASSIGNED.</b>"
var/datum/browser/popup = new(user, "station_goals","Station Goals", 400, 400, src)
popup.set_content(dat.Join("<br>"))
popup.open()
onclose(user, "station_goals")
/obj/machinery/computer/station_goal/Topic(href, href_list)
if(..())
return
if(goal_assigned)
return
if(machine_stat & (NOPOWER|BROKEN|MAINT))
return
usr.set_machine(src)
var/selected_goal = href_list["selected_goal"]
if(href_list["close"])
usr << browse(null, "window=station_goals")
return
for(var/datum/station_goal/iterating_goal as anything in station_goal_cache)
if(initial(iterating_goal.name) == selected_goal)
var/datum/station_goal/goal_to_set = new iterating_goal()
goal_to_set.send_report()
GLOB.station_goals += goal_to_set
goal_assigned = TRUE
break
updateUsrDialog()

View File

@@ -0,0 +1,83 @@
/datum/job/bridge_officer
title = "Bridge Officer"
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Fleetmaster")
faction = FACTION_STATION
total_positions = 3
spawn_positions = 3
supervisors = "Fleetmaster"
selection_color = "#6969f8"
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 6000
exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_NANOTRASEN_FLEET_COMMAND
outfit = /datum/outfit/job/bridge_officer
plasmaman_outfit = /datum/outfit/plasmaman/centcom_official
paycheck = PAYCHECK_NANOTRASEN_FLEET_COMMAND
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_BRIDGE_OFFICER
departments_list = list(
/datum/job_department/nanotrasen_fleet_command,
)
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
mail_goodies = list(
/obj/item/clothing/mask/cigarette/cigar/havana = 20,
/obj/item/storage/fancy/cigarettes/cigars/havana = 15,
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10
)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
veteran_only = TRUE
/datum/outfit/job/bridge_officer
name = "Bridge Officer"
jobtype = /datum/job/bridge_officer
implants = list(/obj/item/implant/mindshield)
id = /obj/item/card/id/advanced/centcom
belt = /obj/item/pda/nanotrasen_representative
glasses = /obj/item/clothing/glasses/sunglasses
ears = /obj/item/radio/headset/headset_cent/alt_with_Key
gloves = /obj/item/clothing/gloves/color/black
uniform = /obj/item/clothing/under/rank/centcom/officer
suit = /obj/item/clothing/suit/armor/vest
suit_store = /obj/item/gun/energy/e_gun/cfa_phalanx
shoes = /obj/item/clothing/shoes/combat/swat
head = /obj/item/clothing/head/soft/enclaveo
back = /obj/item/storage/backpack/satchel/leather
chameleon_extras = list(/obj/item/gun/energy/e_gun)
id_trim = /datum/id_trim/centcom/bridge_officer
/datum/id_trim/centcom/bridge_officer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS)
assignment = "Bridge Officer"
/obj/item/radio/headset/headset_cent/alt_with_Key
name = "\improper CentCom bowman headset"
desc = "A headset especially for emergency response personnel. Protects ears from flashbangs."
icon_state = "cent_headset_alt"
inhand_icon_state = "cent_headset_alt"
/obj/item/radio/headset/headset_cent/alt_with_Key/ComponentInitialize()
. = ..()
AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
/obj/effect/landmark/start/bridge_officer
name = "Bridge Officer"
icon_state = "Captain"
delete_after_roundstart = FALSE
jobspawn_override = TRUE

View File

@@ -0,0 +1,80 @@
/datum/job/deck_crew
title = "Deck Crewman"
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Fleetmaster", "Bridge Officer")
faction = FACTION_STATION
total_positions = 5
spawn_positions = 5
supervisors = "Fleetmaster"
selection_color = "#6969f8"
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 600
exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_NANOTRASEN_FLEET_COMMAND
outfit = /datum/outfit/job/deck_crew
plasmaman_outfit = /datum/outfit/plasmaman/centcom_official
paycheck = PAYCHECK_NANOTRASEN_FLEET_COMMAND
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_DECK_CREW
departments_list = list(
/datum/job_department/nanotrasen_fleet_command,
)
family_heirlooms = list(/obj/item/wrench)
mail_goodies = list(
/obj/item/wrench/combat,
)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
/datum/outfit/job/deck_crew
name = "Deck Crewman"
jobtype = /datum/job/deck_crew
implants = list(/obj/item/implant/mindshield)
id = /obj/item/card/id/advanced/centcom
belt = /obj/item/pda/nanotrasen_representative
glasses = /obj/item/clothing/glasses/sunglasses
ears = /obj/item/radio/headset/headset_cent/alt_with_Key/cargo
gloves = /obj/item/clothing/gloves/color/black
uniform = /obj/item/clothing/under/utility/cargo
shoes = /obj/item/clothing/shoes/jackboots
head = /obj/item/clothing/head/soft/enclave
back = /obj/item/storage/backpack/satchel/leather
implants = list(/obj/item/implant/mindshield)
id_trim = /datum/id_trim/centcom/deck_crew
/datum/id_trim/centcom/deck_crew
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS, ACCESS_CARGO, ACCESS_MAILSORTING)
assignment = "Deck Crewman"
/obj/item/radio/headset/headset_cent/alt_with_Key/cargo
keyslot = new /obj/item/encryptionkey/headset_cargo
/obj/effect/landmark/start/deck_crew
name = "Deck Crewman"
icon_state = "Captain"
delete_after_roundstart = FALSE
jobspawn_override = TRUE
/obj/structure/closet/pilot
name = "Pilots closet"
desc = "For the deck crewman that decides to take up piloting."
/obj/structure/closet/pilot/PopulateContents()
new /obj/item/clothing/head/helmet/alt
new /obj/item/clothing/suit/armor/vest

View File

@@ -1,5 +1,5 @@
/datum/job/admiral /datum/job/fleetmaster
title = "Nanotrasen Admiral" title = "Fleetmaster"
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
department_head = list("Nanotrasen Fleet Command") department_head = list("Nanotrasen Fleet Command")
faction = FACTION_STATION faction = FACTION_STATION
@@ -9,23 +9,23 @@
selection_color = "#6969f8" selection_color = "#6969f8"
req_admin_notify = 1 req_admin_notify = 1
minimal_player_age = 14 minimal_player_age = 14
exp_requirements = 60000000 exp_requirements = 6000
exp_required_type = EXP_TYPE_CREW exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_CENTRAL_COMMAND exp_required_type_department = EXP_TYPE_NANOTRASEN_FLEET_COMMAND
exp_granted_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/admiral outfit = /datum/outfit/job/fleetmaster
plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander
paycheck = PAYCHECK_CENTRAL_COMMAND paycheck = PAYCHECK_NANOTRASEN_FLEET_COMMAND
paycheck_department = ACCOUNT_SEC paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM) liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_NANOTRASEN_ADMIRAL display_order = JOB_DISPLAY_ORDER_FLEETMASTER
departments_list = list( departments_list = list(
/datum/job_department/command, /datum/job_department/command,
/datum/job_department/central_command, /datum/job_department/nanotrasen_fleet_command,
) )
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold) family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
@@ -36,20 +36,20 @@
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10 /obj/item/reagent_containers/food/drinks/bottle/champagne = 10
) )
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
voice_of_god_power = 1.4 //Command staff has authority voice_of_god_power = 1.4 //Command staff has authority
veteran_only = TRUE veteran_only = TRUE
/datum/job/captain/get_captaincy_announcement(mob/living/captain) /datum/job/fleetmaster/get_captaincy_announcement(mob/living/captain)
return "Admiral [captain.real_name] on deck!" return "Fleetmaster [captain.real_name] on deck!"
/datum/outfit/job/admiral /datum/outfit/job/fleetmaster
name = "Nanotrasen Admiral" name = "Fleetmaster"
jobtype = /datum/job/admiral jobtype = /datum/job/fleetmaster
implants = list(/obj/item/implant/mindshield) implants = list(/obj/item/implant/mindshield)
@@ -74,14 +74,19 @@
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/centcom) chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/centcom)
id_trim = /datum/id_trim/centcom/admiral id_trim = /datum/id_trim/centcom/fleetmaster
/datum/id_trim/centcom/admiral/New() /datum/id_trim/centcom/fleetmaster
assignment = "Fleetmaster"
/datum/id_trim/centcom/fleetmaster/New()
. = ..() . = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION)) access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/obj/effect/landmark/start/nanotrasen_admiral /obj/effect/landmark/start/fleetmaster
name = "Nanotrasen Admiral" name = "Fleetmaster"
icon_state = "Captain" icon_state = "Captain"
delete_after_roundstart = FALSE
jobspawn_override = TRUE

View File

@@ -0,0 +1,71 @@
/datum/job/operations_inspector
title = "Operations Inspector"
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Fleetmaster")
faction = FACTION_STATION
total_positions = 1
spawn_positions = 1
supervisors = "Fleetmaster"
selection_color = "#6969f8"
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 6000
exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_COMMAND
exp_granted_type = EXP_TYPE_NANOTRASEN_FLEET_COMMAND
outfit = /datum/outfit/job/operations_inspector
plasmaman_outfit = /datum/outfit/plasmaman/centcom_official
paycheck = PAYCHECK_NANOTRASEN_FLEET_COMMAND
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_OPERATIONS_INSPECTOR
departments_list = list(
/datum/job_department/nanotrasen_fleet_command,
)
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
mail_goodies = list(
/obj/item/clothing/mask/cigarette/cigar/havana = 20,
/obj/item/storage/fancy/cigarettes/cigars/havana = 15,
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10
)
job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
veteran_only = TRUE
/datum/outfit/job/operations_inspector
name = "Operations Inspector"
jobtype = /datum/job/operations_inspector
implants = list(/obj/item/implant/mindshield)
id = /obj/item/card/id/advanced/centcom
belt = /obj/item/pda/nanotrasen_representative
glasses = /obj/item/clothing/glasses/sunglasses
ears = /obj/item/radio/headset/headset_cent/alt_with_Key
gloves = /obj/item/clothing/gloves/color/black
uniform = /obj/item/clothing/under/rank/centcom/officer
suit = /obj/item/clothing/suit/toggle/
shoes = /obj/item/clothing/shoes/combat/swat
back = /obj/item/storage/backpack/satchel/leather
chameleon_extras = list(/obj/item/gun/energy/e_gun)
id_trim = /datum/id_trim/centcom/operations_inspector
/datum/id_trim/centcom/operations_inspector
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS)
assignment = "Operations Inspector"
/obj/effect/landmark/start/operations_inspector
name = "Operations Inspector"
icon_state = "Captain"
delete_after_roundstart = FALSE
jobspawn_override = TRUE

View File

@@ -29,10 +29,10 @@
// Similar to the HoS's laser. Fires a bouncing non-lethal, lethal and knockdown projectile. // Similar to the HoS's laser. Fires a bouncing non-lethal, lethal and knockdown projectile.
/obj/item/gun/energy/e_gun/cfa_phalanx /obj/item/gun/energy/e_gun/cfa_phalanx
name = "\improper Mk.II Phalanx Plasma Carbine" name = "\improper Mk.II Phalanx Plasma Blaster"
desc = "Fires a disabling and lethal bouncing projectile, as well as a special muscle-seizing projectile that knocks targets down. It has <b><span style='color:purple'>Cantalan Federal Arms</span></b> etched into the grip." desc = "Fires a disabling and lethal bouncing projectile, as well as a special muscle-seizing projectile that knocks targets down. It has <b><span style='color:purple'>Cantalan Federal Arms</span></b> etched into the grip."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi' icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi'
icon_state = "phalanx" icon_state = "phalanx1"
w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_NORMAL
force = 10 force = 10
ammo_type = list(/obj/item/ammo_casing/energy/disabler/bounce, /obj/item/ammo_casing/energy/laser/bounce, /obj/item/ammo_casing/energy/electrode/knockdown) ammo_type = list(/obj/item/ammo_casing/energy/disabler/bounce, /obj/item/ammo_casing/energy/laser/bounce, /obj/item/ammo_casing/energy/electrode/knockdown)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -14,7 +14,7 @@
departments_list = list( departments_list = list(
/datum/job_department/command, /datum/job_department/command,
/datum/job_department/central_command /datum/job_department/nanotrasen_fleet_command
) )
outfit = /datum/outfit/job/nanotrasen_representative outfit = /datum/outfit/job/nanotrasen_representative

View File

@@ -85,3 +85,21 @@
/obj/item/storage/box/ammo_box/PopulateContents() /obj/item/storage/box/ammo_box/PopulateContents()
new /obj/item/storage/bag/ammo(src) new /obj/item/storage/bag/ammo(src)
new /obj/item/gun_maintenance_supplies(src) new /obj/item/gun_maintenance_supplies(src)
/obj/effect/spawner/armory_spawn/centcom_rifles
icon_state = "random_rifle"
gun_count = 2
guns = list(
/obj/item/gun/ballistic/automatic/ar,
/obj/item/gun/ballistic/automatic/assault_rifle/m16,
/obj/item/gun/ballistic/automatic/cfa_rifle,
)
/obj/effect/spawner/armory_spawn/centcom_lasers
gun_count = 2
guns = list(
/obj/item/gun/energy/laser,
/obj/item/gun/energy/laser/cfa_paladin,
/obj/item/gun/energy/e_gun,
)

View File

@@ -3874,7 +3874,6 @@
#include "modular_skyrat\master_files\code\modules\events\spider_infestation.dm" #include "modular_skyrat\master_files\code\modules\events\spider_infestation.dm"
#include "modular_skyrat\master_files\code\modules\jobs\departments\departments.dm" #include "modular_skyrat\master_files\code\modules\jobs\departments\departments.dm"
#include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm" #include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm"
#include "modular_skyrat\master_files\code\modules\jobs\job_types\nanotrasen_admiral.dm"
#include "modular_skyrat\master_files\code\modules\language\language_holders.dm" #include "modular_skyrat\master_files\code\modules\language\language_holders.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm" #include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_say.dm" #include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_say.dm"
@@ -3892,6 +3891,7 @@
#include "modular_skyrat\master_files\code\modules\reagents\withdrawal\generic_addictions.dm" #include "modular_skyrat\master_files\code\modules\reagents\withdrawal\generic_addictions.dm"
#include "modular_skyrat\master_files\code\modules\research\designs\misc_designs.dm" #include "modular_skyrat\master_files\code\modules\research\designs\misc_designs.dm"
#include "modular_skyrat\master_files\code\modules\shuttle\shuttle.dm" #include "modular_skyrat\master_files\code\modules\shuttle\shuttle.dm"
#include "modular_skyrat\master_files\code\modules\shuttle\supply.dm"
#include "modular_skyrat\master_files\code\modules\spells\wizard.dm" #include "modular_skyrat\master_files\code\modules\spells\wizard.dm"
#include "modular_skyrat\master_files\code\modules\uplink\uplink_items.dm" #include "modular_skyrat\master_files\code\modules\uplink\uplink_items.dm"
#include "modular_skyrat\modules\3516\code\3516.dm" #include "modular_skyrat\modules\3516\code\3516.dm"
@@ -4085,6 +4085,16 @@
#include "modular_skyrat\modules\cargo\code\packs.dm" #include "modular_skyrat\modules\cargo\code\packs.dm"
#include "modular_skyrat\modules\cell_component\code\cell_component.dm" #include "modular_skyrat\modules\cell_component\code\cell_component.dm"
#include "modular_skyrat\modules\cell_component\code\flashlight.dm" #include "modular_skyrat\modules\cell_component\code\flashlight.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\cargo_shuttle_console.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\command_report_computer.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\ert_control_computer.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\export_console.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\import_console.dm"
#include "modular_skyrat\modules\central_command_module\code\computers\station_goal_computer.dm"
#include "modular_skyrat\modules\central_command_module\code\jobs\bridge_officer.dm"
#include "modular_skyrat\modules\central_command_module\code\jobs\deck_crew.dm"
#include "modular_skyrat\modules\central_command_module\code\jobs\fleetmaster.dm"
#include "modular_skyrat\modules\central_command_module\code\jobs\operations_inspector.dm"
#include "modular_skyrat\modules\chaplain\code\game\objects\items\implants\mortis.dm" #include "modular_skyrat\modules\chaplain\code\game\objects\items\implants\mortis.dm"
#include "modular_skyrat\modules\cme\code\_cme_defines.dm" #include "modular_skyrat\modules\cme\code\_cme_defines.dm"
#include "modular_skyrat\modules\cme\code\cme.dm" #include "modular_skyrat\modules\cme\code\cme.dm"

View File

@@ -0,0 +1,68 @@
import { useBackend } from '../backend';
import { Button, NoticeBox, Input, Section, Stack, TextArea } from '../components';
import { Window } from '../layouts';
export const CommandReportConsole = (props, context) => {
const { act, data } = useBackend(context);
const {
command_report_content,
command_report_title,
announce_contents,
error,
} = data;
return (
<Window
title="Create Fleet Report"
width={325}
height={525}>
<Window.Content>
{!!error && (
<NoticeBox textAlign="center" color="red">
{error}
</NoticeBox>
)}
<Stack vertical>
<Stack.Item>
<Section title="Set report title:" textAlign="center">
<Input
width="100%"
mt={1}
value={command_report_title}
onChange={(e, value) => act("update_report_title", {
updated_title: value,
})} />
</Section>
<Section title="Set report text:" textAlign="center">
<TextArea
height="200px"
mb={1}
value={command_report_content}
onChange={(e, value) => act("update_report_contents", {
updated_contents: value,
})} />
<Stack vertical>
<Stack.Item>
<Button.Checkbox
fluid
checked={announce_contents}
onClick={() => act("toggle_announce")}>
Announce Contents
</Button.Checkbox>
</Stack.Item>
<Stack.Item>
<Button.Confirm
fluid
icon="check"
color="good"
textAlign="center"
content="Submit Report"
onClick={() => act("submit_report")} />
</Stack.Item>
</Stack>
</Section>
</Stack.Item>
</Stack>
</Window.Content>
</Window>
);
};