mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-29 02:51:41 +00:00
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:
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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"
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
236
_maps/shuttles/cargo_skyrat.dmm
Normal file
236
_maps/shuttles/cargo_skyrat.dmm
Normal 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
5979
_maps/shuttles/nsstitan.dmm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"])
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
*/
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
272
modular_skyrat/master_files/code/modules/shuttle/supply.dm
Normal file
272
modular_skyrat/master_files/code/modules/shuttle/supply.dm
Normal 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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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)
|
||||||
@@ -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))
|
||||||
@@ -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()
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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 |
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
68
tgui/packages/tgui/interfaces/CommandReportConsole.js
Normal file
68
tgui/packages/tgui/interfaces/CommandReportConsole.js
Normal 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>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user