diff --git a/src/Locations/ui/SpecialLocation.tsx b/src/Locations/ui/SpecialLocation.tsx
index d158b22cf..0d2b1cd83 100644
--- a/src/Locations/ui/SpecialLocation.tsx
+++ b/src/Locations/ui/SpecialLocation.tsx
@@ -86,7 +86,7 @@ export function SpecialLocation(props: IProps): React.ReactElement {
function renderNoodleBar(): React.ReactElement {
function EatNoodles(): void {
- SnackbarEvents.emit("You ate some delicious noodles and feel refreshed", "success");
+ SnackbarEvents.emit("You ate some delicious noodles and feel refreshed", "success", 2000);
N00dles(); // This is the true power of the noodles.
if (player.sourceFiles.length > 0) player.giveExploit(Exploit.N00dles);
if (player.sourceFileLvl(5) > 0 || player.bitNodeN === 5) {
diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index ab0344c2e..89aef6a1a 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -2134,12 +2134,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
message = argsToString([message]);
dialogBoxCreate(message);
},
- toast: function (message: any, variant: any = "success"): void {
+ toast: function (message: any, variant: any = "success", duration: any = 2000): void {
if (!["success", "info", "warning", "error"].includes(variant))
throw new Error(`variant must be one of "success", "info", "warning", or "error"`);
message = argsToString([message]);
- SnackbarEvents.emit(message, variant);
+ SnackbarEvents.emit(message, variant, duration);
},
prompt: function (txt: any): any {
if (!isString(txt)) {
diff --git a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
index 604fe7a16..b85dee8e7 100644
--- a/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
+++ b/src/PersonObjects/Player/PlayerObjectGeneralMethods.tsx
@@ -26,7 +26,11 @@ import { Locations } from "../../Locations/Locations";
import { CityName } from "../../Locations/data/CityNames";
import { LocationName } from "../../Locations/data/LocationNames";
import { Sleeve } from "../../PersonObjects/Sleeve/Sleeve";
-import { calculateSkill as calculateSkillF, calculateSkillProgress as calculateSkillProgressF, ISkillProgress } from "../formulas/skill";
+import {
+ calculateSkill as calculateSkillF,
+ calculateSkillProgress as calculateSkillProgressF,
+ ISkillProgress,
+} from "../formulas/skill";
import { calculateIntelligenceBonus } from "../formulas/intelligence";
import {
getHackingWorkRepGain,
@@ -1648,7 +1652,7 @@ export function regenerateHp(this: IPlayer, amt: number): void {
export function hospitalize(this: IPlayer): number {
const cost = getHospitalizationCost(this);
- SnackbarEvents.emit(`You've been Hospitalized for ${numeralWrapper.formatMoney(cost)}`, "warning");
+ SnackbarEvents.emit(`You've been Hospitalized for ${numeralWrapper.formatMoney(cost)}`, "warning", 2000);
this.loseMoney(cost, "hospitalization");
this.hp = this.max_hp;
@@ -2591,7 +2595,7 @@ export function canAccessResleeving(this: IPlayer): boolean {
export function giveExploit(this: IPlayer, exploit: Exploit): void {
if (!this.exploits.includes(exploit)) {
this.exploits.push(exploit);
- SnackbarEvents.emit("SF -1 acquired!", "success");
+ SnackbarEvents.emit("SF -1 acquired!", "success", 2000);
}
}
diff --git a/src/SaveObject.tsx b/src/SaveObject.tsx
index 8e9cd4737..1e0457a72 100755
--- a/src/SaveObject.tsx
+++ b/src/SaveObject.tsx
@@ -69,7 +69,7 @@ class BitburnerSaveObject {
save(saveString)
.then(() => {
if (!Settings.SuppressSavedGameToast) {
- SnackbarEvents.emit("Game Saved!", "info")
+ SnackbarEvents.emit("Game Saved!", "info", 2000);
}
})
.catch((err) => console.error(err));
diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts
index f1602a461..e825e73cf 100644
--- a/src/ScriptEditor/NetscriptDefinitions.d.ts
+++ b/src/ScriptEditor/NetscriptDefinitions.d.ts
@@ -5296,8 +5296,9 @@ export interface NS extends Singularity {
* Queue a toast (bottom-right notification).
* @param msg - Message in the toast.
* @param variant - Type of toast, must be one of success, info, warning, error. Defaults to success.
+ * @param duration - Duration of toast in ms, defaults to 2000
*/
- toast(msg: any, variant?: string): void;
+ toast(msg: any, variant?: string, duration?: number): void;
/**
* Download a file from the internet.
diff --git a/src/ui/React/Snackbar.tsx b/src/ui/React/Snackbar.tsx
index d70e28af9..30f59b2bd 100644
--- a/src/ui/React/Snackbar.tsx
+++ b/src/ui/React/Snackbar.tsx
@@ -16,16 +16,17 @@ export function SnackbarProvider(props: IProps): React.ReactElement {
);
}
-export const SnackbarEvents = new EventEmitter<[string, "success" | "warning" | "error" | "info"]>();
+export const SnackbarEvents = new EventEmitter<[string, "success" | "warning" | "error" | "info", number]>();
export function Snackbar(): React.ReactElement {
const { enqueueSnackbar } = useSnackbar();
useEffect(() =>
- SnackbarEvents.subscribe((s, variant) =>
+ SnackbarEvents.subscribe((s, variant, duration) =>
enqueueSnackbar({s}, {
content: (k, m) => {m},
variant: variant,
+ autoHideDuration: duration,
}),
),
);