@@ -365,7 +371,7 @@ type NoteData = {
type RetryActionType = (retrying?: boolean) => void;
export const NtosNotepad = (props) => {
- const { act, data, config } = useBackend
();
+ const { act, data } = useBackend();
const { note } = data;
const [documentName, setDocumentName] = useState(DEFAULT_DOCUMENT_NAME);
const [originalText, setOriginalText] = useState(note);
@@ -479,7 +485,7 @@ export const NtosNotepad = (props) => {
/>
)}
{activeDialog === Dialogs.ABOUT && (
-
+
)}
);
diff --git a/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx b/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx
index c363f81743222..3bb87d7dce240 100644
--- a/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx
+++ b/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx
@@ -21,7 +21,7 @@ import { Window } from '../layouts';
export const OreRedemptionMachine = (props) => {
const { act, data } = useBackend();
const { disconnected, unclaimedPoints, materials, user } = data;
- const [tab, setTab] = useSharedState('tab', 1);
+ const [tab, setTab] = useSharedState('tab', 'material');
const [searchItem, setSearchItem] = useState('');
const [compact, setCompact] = useState(false);
const search = createSearch(searchItem, (materials) => materials.name);
diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
index 16420503071e3..a48e7032b9d1b 100644
--- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
+++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
@@ -140,6 +140,7 @@ type Recipe = {
structures: string[];
steps: string[];
foodtypes: string[];
+ has_food_effect: BooleanLike;
};
type Diet = {
@@ -787,10 +788,16 @@ const RecipeContent = ({ item, craftable, busy, mode, diet }) => {
-
+
{item.name}
{item.desc && {item.desc}}
+ {!!item.has_food_effect && (
+
+
+ Special effect on consumption.
+
+ )}
{item.reqs && (
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/paraplegic.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/paraplegic.tsx
new file mode 100644
index 0000000000000..73c8f325bab5e
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/paraplegic.tsx
@@ -0,0 +1,7 @@
+import { FeatureChoiced } from '../base';
+import { FeatureDropdownInput } from '../dropdowns';
+
+export const paraplegic: FeatureChoiced = {
+ name: 'Paraplegic',
+ component: FeatureDropdownInput,
+};
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
index 8cd5b5e41df30..5cb81cfde84ca 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
@@ -102,8 +102,9 @@ const CrimeDisplay = ({ item }: { item: Crime }) => {
const { crew_ref } = foundRecord;
const { act, data } = useBackend();
const { current_user, higher_access } = data;
- const { author, crime_ref, details, fine, name, paid, time, valid } = item;
- const showFine = !!fine && fine > 0 ? `: ${fine} cr` : '';
+ const { author, crime_ref, details, fine, name, paid, time, valid, voider } =
+ item;
+ const showFine = !!fine && fine > 0 ? `: ${fine} cr` : ': PAID OFF';
let collapsibleColor = '';
if (!valid) {
@@ -113,7 +114,7 @@ const CrimeDisplay = ({ item }: { item: Crime }) => {
}
let displayTitle = name;
- if (fine && fine > 0) {
+ if (fine !== undefined) {
displayTitle = name.slice(0, 18) + showFine;
}
@@ -128,7 +129,15 @@ const CrimeDisplay = ({ item }: { item: Crime }) => {
{!valid ? 'Void' : 'Active'}
- {fine && (
+ {!valid && (
+
+ {!voider ? 'Automation' : voider}
+
+ )}
+ {!!fine && fine > 0 && (
<>
{fine}cr
@@ -155,7 +164,7 @@ const CrimeDisplay = ({ item }: { item: Crime }) => {
act('invalidate_crime', {
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
index ded95918c90a3..1ea40aefd67bb 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
@@ -42,6 +42,7 @@ export type Crime = {
paid: number;
time: number;
valid: BooleanLike;
+ voider: string;
};
export enum SECURETAB {
diff --git a/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss
index eb69502917973..c8b665278284e 100644
--- a/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss
+++ b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss
@@ -28,7 +28,6 @@ $background-color: base.$color-bg !default;
.NtosNotepad__textarea {
background-color: base.$color-bg-section;
height: 100%;
- overflow-y: scroll;
}
.NtosNotepad__StatusBar {