From d6ee16cdb32521f57fb796f165dd0c502ae11ca6 Mon Sep 17 00:00:00 2001
From: catloversg <152669316+catloversg@users.noreply.github.com>
Date: Sun, 2 Feb 2025 12:43:56 +0700
Subject: [PATCH] API: Move tail-related APIs to another namespace (#1935)
* API: Move tail-related APIs to another namespace
* Add missing RAM cost config
* Remove setTailFontSize from NS namespace
---
markdown/bitburner.ns.closetail.md | 7 +-
markdown/bitburner.ns.md | 12 +-
markdown/bitburner.ns.movetail.md | 7 +-
markdown/bitburner.ns.resizetail.md | 7 +-
markdown/bitburner.ns.settitle.md | 7 +-
markdown/bitburner.ns.tail.md | 7 +-
markdown/bitburner.userinterface.closetail.md | 34 ++++
markdown/bitburner.userinterface.md | 7 +
markdown/bitburner.userinterface.movetail.md | 32 +++
markdown/bitburner.userinterface.opentail.md | 50 +++++
... => bitburner.userinterface.rendertail.md} | 4 +-
.../bitburner.userinterface.resizetail.md | 32 +++
...itburner.userinterface.settailfontsize.md} | 4 +-
.../bitburner.userinterface.settailtitle.md | 39 ++++
src/Netscript/RamCostGenerator.ts | 9 +-
src/NetscriptFunctions.ts | 71 +------
src/NetscriptFunctions/UserInterface.ts | 91 ++++++++-
src/ScriptEditor/NetscriptDefinitions.d.ts | 188 ++++++++++++++----
18 files changed, 493 insertions(+), 115 deletions(-)
create mode 100644 markdown/bitburner.userinterface.closetail.md
create mode 100644 markdown/bitburner.userinterface.movetail.md
create mode 100644 markdown/bitburner.userinterface.opentail.md
rename markdown/{bitburner.ns.rendertail.md => bitburner.userinterface.rendertail.md} (73%)
create mode 100644 markdown/bitburner.userinterface.resizetail.md
rename markdown/{bitburner.ns.settailfontsize.md => bitburner.userinterface.settailfontsize.md} (86%)
create mode 100644 markdown/bitburner.userinterface.settailtitle.md
diff --git a/markdown/bitburner.ns.closetail.md b/markdown/bitburner.ns.closetail.md
index 9e013acac..55e183488 100644
--- a/markdown/bitburner.ns.closetail.md
+++ b/markdown/bitburner.ns.closetail.md
@@ -4,7 +4,12 @@
## NS.closeTail() method
-Close the tail window of a script.
+> Warning: This API is now obsolete.
+>
+> Use [ns.ui.closeTail](./bitburner.userinterface.closetail.md) instead.
+>
+
+Close the tail window of a script. This function is deprecated and will be removed in a later version.
**Signature:**
diff --git a/markdown/bitburner.ns.md b/markdown/bitburner.ns.md
index 3a8a1f6b1..f55a87174 100644
--- a/markdown/bitburner.ns.md
+++ b/markdown/bitburner.ns.md
@@ -61,7 +61,7 @@ export async function main(ns) {
| [clear(handle)](./bitburner.ns.clear.md) | Clear data from a file. |
| [clearLog()](./bitburner.ns.clearlog.md) | Clears the script’s logs. |
| [clearPort(portNumber)](./bitburner.ns.clearport.md) | Clear data from a port. |
-| [closeTail(pid)](./bitburner.ns.closetail.md) | Close the tail window of a script. |
+| [closeTail(pid)](./bitburner.ns.closetail.md) | Close the tail window of a script. This function is deprecated and will be removed in a later version. |
| [deleteServer(host)](./bitburner.ns.deleteserver.md) | Delete a purchased server. |
| [disableLog(fn)](./bitburner.ns.disablelog.md) | Disables logging for the given NS function. |
| [enableLog(fn)](./bitburner.ns.enablelog.md) | Enables logging for the given NS function. |
@@ -131,7 +131,7 @@ export async function main(ns) {
| [kill(filename, hostname, args)](./bitburner.ns.kill_1.md) | Terminate the script(s) with the provided filename, hostname, and script arguments. |
| [killall(host, safetyGuard)](./bitburner.ns.killall.md) | Terminate all scripts on a server. |
| [ls(host, substring)](./bitburner.ns.ls.md) | List files on a server. |
-| [moveTail(x, y, pid)](./bitburner.ns.movetail.md) | Move a tail window. |
+| [moveTail(x, y, pid)](./bitburner.ns.movetail.md) | Move a tail window. This function is deprecated and will be removed in a later version. |
| [mv(host, source, destination)](./bitburner.ns.mv.md) | Move a file on the target server. |
| [nextPortWrite(port)](./bitburner.ns.nextportwrite.md) | Listen for a port write. |
| [nFormat(n, format)](./bitburner.ns.nformat.md) | Format a number using the numeral library. This function is deprecated and will be removed in a later version. |
@@ -148,8 +148,7 @@ export async function main(ns) {
| [readPort(portNumber)](./bitburner.ns.readport.md) | Read data from a port. |
| [relaysmtp(host)](./bitburner.ns.relaysmtp.md) | Runs relaySMTP.exe on a server. |
| [renamePurchasedServer(hostname, newName)](./bitburner.ns.renamepurchasedserver.md) | Rename a purchased server. |
-| [renderTail(pid)](./bitburner.ns.rendertail.md) | Render a tail window. |
-| [resizeTail(width, height, pid)](./bitburner.ns.resizetail.md) | Resize a tail window. |
+| [resizeTail(width, height, pid)](./bitburner.ns.resizetail.md) | Resize a tail window. This function is deprecated and will be removed in a later version. |
| [rm(name, host)](./bitburner.ns.rm.md) | Delete a file. |
| [run(script, threadOrOptions, args)](./bitburner.ns.run.md) | Start another script on the current server. |
| [scan(host)](./bitburner.ns.scan.md) | Get the list of servers connected to a server. |
@@ -158,14 +157,13 @@ export async function main(ns) {
| [scriptRunning(script, host)](./bitburner.ns.scriptrunning.md) | Check if any script with a filename is running. |
| [self()](./bitburner.ns.self.md) | Returns the currently running script. |
| [serverExists(host)](./bitburner.ns.serverexists.md) | Returns a boolean denoting whether or not the specified server exists. |
-| [setTailFontSize(pixel, fn, host, args)](./bitburner.ns.settailfontsize.md) | Set the font size of the tail window of a script. |
-| [setTitle(title, pid)](./bitburner.ns.settitle.md) | Set the title of the tail window of a script. |
+| [setTitle(title, pid)](./bitburner.ns.settitle.md) | Set the title of the tail window of a script. This function is deprecated and will be removed in a later version. |
| [share()](./bitburner.ns.share.md) | Share the server's ram with your factions. |
| [sleep(millis)](./bitburner.ns.sleep.md) | Suspends the script for n milliseconds. |
| [spawn(script, threadOrOptions, args)](./bitburner.ns.spawn.md) | Terminate current script and start another in a defined number of milliseconds. |
| [sprintf(format, args)](./bitburner.ns.sprintf.md) | Format a string. |
| [sqlinject(host)](./bitburner.ns.sqlinject.md) | Runs SQLInject.exe on a server. |
-| [tail(fn, host, args)](./bitburner.ns.tail.md) | Open the tail window of a script. |
+| [tail(fn, host, args)](./bitburner.ns.tail.md) | Open the tail window of a script. This function is deprecated and will be removed in a later version. |
| [tFormat(milliseconds, milliPrecision)](./bitburner.ns.tformat.md) | Format time to a readable string. |
| [toast(msg, variant, duration)](./bitburner.ns.toast.md) | Queue a toast (bottom-right notification). |
| [tprint(args)](./bitburner.ns.tprint.md) | Prints one or more values or variables to the Terminal. |
diff --git a/markdown/bitburner.ns.movetail.md b/markdown/bitburner.ns.movetail.md
index 3bf8aa478..a706c49e3 100644
--- a/markdown/bitburner.ns.movetail.md
+++ b/markdown/bitburner.ns.movetail.md
@@ -4,7 +4,12 @@
## NS.moveTail() method
-Move a tail window.
+> Warning: This API is now obsolete.
+>
+> Use [ns.ui.moveTail](./bitburner.userinterface.movetail.md) instead.
+>
+
+Move a tail window. This function is deprecated and will be removed in a later version.
**Signature:**
diff --git a/markdown/bitburner.ns.resizetail.md b/markdown/bitburner.ns.resizetail.md
index e0f47959a..806c4a4f7 100644
--- a/markdown/bitburner.ns.resizetail.md
+++ b/markdown/bitburner.ns.resizetail.md
@@ -4,7 +4,12 @@
## NS.resizeTail() method
-Resize a tail window.
+> Warning: This API is now obsolete.
+>
+> Use [ns.ui.resizeTail](./bitburner.userinterface.resizetail.md) instead.
+>
+
+Resize a tail window. This function is deprecated and will be removed in a later version.
**Signature:**
diff --git a/markdown/bitburner.ns.settitle.md b/markdown/bitburner.ns.settitle.md
index f1618f796..b7cfdce4a 100644
--- a/markdown/bitburner.ns.settitle.md
+++ b/markdown/bitburner.ns.settitle.md
@@ -4,7 +4,12 @@
## NS.setTitle() method
-Set the title of the tail window of a script.
+> Warning: This API is now obsolete.
+>
+> Use [ns.ui.setTailTitle](./bitburner.userinterface.settailtitle.md) instead.
+>
+
+Set the title of the tail window of a script. This function is deprecated and will be removed in a later version.
**Signature:**
diff --git a/markdown/bitburner.ns.tail.md b/markdown/bitburner.ns.tail.md
index ccc523286..5ccd962e6 100644
--- a/markdown/bitburner.ns.tail.md
+++ b/markdown/bitburner.ns.tail.md
@@ -4,7 +4,12 @@
## NS.tail() method
-Open the tail window of a script.
+> Warning: This API is now obsolete.
+>
+> Use [ns.ui.openTail](./bitburner.userinterface.opentail.md) instead.
+>
+
+Open the tail window of a script. This function is deprecated and will be removed in a later version.
**Signature:**
diff --git a/markdown/bitburner.userinterface.closetail.md b/markdown/bitburner.userinterface.closetail.md
new file mode 100644
index 000000000..ff65dc588
--- /dev/null
+++ b/markdown/bitburner.userinterface.closetail.md
@@ -0,0 +1,34 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [closeTail](./bitburner.userinterface.closetail.md)
+
+## UserInterface.closeTail() method
+
+Close the tail window of a script.
+
+**Signature:**
+
+```typescript
+closeTail(pid?: number): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| pid | number | _(Optional)_ Optional. PID of the script having its tail closed. If omitted, the current script is used. |
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+Closes a script’s logs. This is functionally the same as pressing the "Close" button on the tail window.
+
+If the function is called with no arguments, it will close the current script’s logs.
+
+Otherwise, the pid argument can be used to close the logs from another script.
+
diff --git a/markdown/bitburner.userinterface.md b/markdown/bitburner.userinterface.md
index 44c170a99..92cf02799 100644
--- a/markdown/bitburner.userinterface.md
+++ b/markdown/bitburner.userinterface.md
@@ -17,12 +17,19 @@ interface UserInterface
| Method | Description |
| --- | --- |
| [clearTerminal()](./bitburner.userinterface.clearterminal.md) | Clear the Terminal window, as if the player ran clear in the terminal |
+| [closeTail(pid)](./bitburner.userinterface.closetail.md) | Close the tail window of a script. |
| [getGameInfo()](./bitburner.userinterface.getgameinfo.md) | Gets the current game information (version, commit, ...) |
| [getStyles()](./bitburner.userinterface.getstyles.md) | Get the current styles |
| [getTheme()](./bitburner.userinterface.gettheme.md) | Get the current theme |
+| [moveTail(x, y, pid)](./bitburner.userinterface.movetail.md) | Move a tail window. |
+| [openTail(fn, host, args)](./bitburner.userinterface.opentail.md) | Open the tail window of a script. |
+| [renderTail(pid)](./bitburner.userinterface.rendertail.md) | Render a tail window. |
| [resetStyles()](./bitburner.userinterface.resetstyles.md) | Resets the player's styles to the default values |
| [resetTheme()](./bitburner.userinterface.resettheme.md) | Resets the player's theme to the default values |
+| [resizeTail(width, height, pid)](./bitburner.userinterface.resizetail.md) | Resize a tail window. |
| [setStyles(newStyles)](./bitburner.userinterface.setstyles.md) | Sets the current styles |
+| [setTailFontSize(pixel, fn, host, args)](./bitburner.userinterface.settailfontsize.md) | Set the font size of the tail window of a script. |
+| [setTailTitle(title, pid)](./bitburner.userinterface.settailtitle.md) | Set the title of the tail window of a script. |
| [setTheme(newTheme)](./bitburner.userinterface.settheme.md) | Sets the current theme |
| [windowSize()](./bitburner.userinterface.windowsize.md) | Get the current window size |
diff --git a/markdown/bitburner.userinterface.movetail.md b/markdown/bitburner.userinterface.movetail.md
new file mode 100644
index 000000000..c4cb4b934
--- /dev/null
+++ b/markdown/bitburner.userinterface.movetail.md
@@ -0,0 +1,32 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [moveTail](./bitburner.userinterface.movetail.md)
+
+## UserInterface.moveTail() method
+
+Move a tail window.
+
+**Signature:**
+
+```typescript
+moveTail(x: number, y: number, pid?: number): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| x | number | x coordinate. |
+| y | number | y coordinate. |
+| pid | number | _(Optional)_ Optional. PID of the script having its tail moved. If omitted, the current script is used. |
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+Moves a tail window. Coordinates are in screen space pixels (top left is 0,0).
+
diff --git a/markdown/bitburner.userinterface.opentail.md b/markdown/bitburner.userinterface.opentail.md
new file mode 100644
index 000000000..db6bb2d59
--- /dev/null
+++ b/markdown/bitburner.userinterface.opentail.md
@@ -0,0 +1,50 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [openTail](./bitburner.userinterface.opentail.md)
+
+## UserInterface.openTail() method
+
+Open the tail window of a script.
+
+**Signature:**
+
+```typescript
+openTail(fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| fn | [FilenameOrPID](./bitburner.filenameorpid.md) | _(Optional)_ Optional. Filename or PID of the script being tailed. If omitted, the current script is tailed. |
+| host | string | _(Optional)_ Optional. Hostname of the script being tailed. Defaults to the server this script is running on. If args are specified, this is not optional. |
+| args | [ScriptArg](./bitburner.scriptarg.md)\[\] | Arguments for the script being tailed. |
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+Opens a script’s logs. This is functionally the same as the tail Terminal command.
+
+If the function is called with no arguments, it will open the current script’s logs.
+
+Otherwise, the PID or filename, hostname/ip, and args… arguments can be used to get the logs from another script. Remember that scripts are uniquely identified by both their names and arguments.
+
+## Example
+
+
+```js
+//Open logs from foo.js on the current server that was run with no args
+ns.tail("foo.js");
+
+//Get logs from foo.js on the foodnstuff server that was run with no args
+ns.tail("foo.js", "foodnstuff");
+
+//Get logs from foo.js on the foodnstuff server that was run with the arguments [1, "test"]
+ns.tail("foo.js", "foodnstuff", 1, "test");
+```
+
diff --git a/markdown/bitburner.ns.rendertail.md b/markdown/bitburner.userinterface.rendertail.md
similarity index 73%
rename from markdown/bitburner.ns.rendertail.md
rename to markdown/bitburner.userinterface.rendertail.md
index 8aa9430a2..5c7dd58f9 100644
--- a/markdown/bitburner.ns.rendertail.md
+++ b/markdown/bitburner.userinterface.rendertail.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [bitburner](./bitburner.md) > [NS](./bitburner.ns.md) > [renderTail](./bitburner.ns.rendertail.md)
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [renderTail](./bitburner.userinterface.rendertail.md)
-## NS.renderTail() method
+## UserInterface.renderTail() method
Render a tail window.
diff --git a/markdown/bitburner.userinterface.resizetail.md b/markdown/bitburner.userinterface.resizetail.md
new file mode 100644
index 000000000..1fb65f92d
--- /dev/null
+++ b/markdown/bitburner.userinterface.resizetail.md
@@ -0,0 +1,32 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [resizeTail](./bitburner.userinterface.resizetail.md)
+
+## UserInterface.resizeTail() method
+
+Resize a tail window.
+
+**Signature:**
+
+```typescript
+resizeTail(width: number, height: number, pid?: number): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| width | number | Width of the window. |
+| height | number | Height of the window. |
+| pid | number | _(Optional)_ Optional. PID of the script having its tail resized. If omitted, the current script is used. |
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+Resize a tail window. Size are in pixel.
+
diff --git a/markdown/bitburner.ns.settailfontsize.md b/markdown/bitburner.userinterface.settailfontsize.md
similarity index 86%
rename from markdown/bitburner.ns.settailfontsize.md
rename to markdown/bitburner.userinterface.settailfontsize.md
index d03adade7..25be1e1ce 100644
--- a/markdown/bitburner.ns.settailfontsize.md
+++ b/markdown/bitburner.userinterface.settailfontsize.md
@@ -1,8 +1,8 @@
-[Home](./index.md) > [bitburner](./bitburner.md) > [NS](./bitburner.ns.md) > [setTailFontSize](./bitburner.ns.settailfontsize.md)
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [setTailFontSize](./bitburner.userinterface.settailfontsize.md)
-## NS.setTailFontSize() method
+## UserInterface.setTailFontSize() method
Set the font size of the tail window of a script.
diff --git a/markdown/bitburner.userinterface.settailtitle.md b/markdown/bitburner.userinterface.settailtitle.md
new file mode 100644
index 000000000..c4a67e8cd
--- /dev/null
+++ b/markdown/bitburner.userinterface.settailtitle.md
@@ -0,0 +1,39 @@
+
+
+[Home](./index.md) > [bitburner](./bitburner.md) > [UserInterface](./bitburner.userinterface.md) > [setTailTitle](./bitburner.userinterface.settailtitle.md)
+
+## UserInterface.setTailTitle() method
+
+Set the title of the tail window of a script.
+
+**Signature:**
+
+```typescript
+setTailTitle(title: string | ReactNode, pid?: number): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| title | string \| [ReactNode](./bitburner.reactnode.md) | The new title for the tail window. |
+| pid | number | _(Optional)_ Optional. PID of the script having its tail closed. If omitted, the current script is used. |
+
+**Returns:**
+
+void
+
+## Remarks
+
+RAM cost: 0 GB
+
+This sets the title to the given string, and also forces an update of the tail window's contents.
+
+The title is saved across restarts, but only if it is a simple string.
+
+If the pid is unspecified, it will modify the current script’s logs.
+
+Otherwise, the pid argument can be used to change the logs from another script.
+
+It is possible to pass any React Node instead of a string. See [ReactElement](./bitburner.reactelement.md) and [ReactNode](./bitburner.reactnode.md) types for additional info.
+
diff --git a/src/Netscript/RamCostGenerator.ts b/src/Netscript/RamCostGenerator.ts
index 7d61faefc..fd14942fb 100644
--- a/src/Netscript/RamCostGenerator.ts
+++ b/src/Netscript/RamCostGenerator.ts
@@ -380,6 +380,13 @@ const stanek = {
// UI API
const ui = {
+ openTail: 0,
+ renderTail: 0,
+ moveTail: 0,
+ resizeTail: 0,
+ closeTail: 0,
+ setTailTitle: 0,
+ setTailFontSize: 0,
getTheme: 0,
setTheme: 0,
resetTheme: 0,
@@ -601,11 +608,9 @@ export const RamCosts: RamCostTree = {
tail: 0,
toast: 0,
moveTail: 0,
- renderTail: 0,
resizeTail: 0,
closeTail: 0,
setTitle: 0,
- setTailFontSize: 0,
clearPort: 0,
openDevMenu: 0,
alert: 0,
diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index 59062fc96..2f746cbe3 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -66,7 +66,6 @@ import {
} from "./ui/formatNumber";
import { convertTimeMsToTimeElapsedString } from "./utils/StringHelperFunctions";
import { roundToTwo } from "./utils/helpers/roundToTwo";
-import { LogBoxEvents, LogBoxCloserEvents } from "./ui/React/LogBoxManager";
import { arrayToString } from "./utils/helpers/ArrayHelpers";
import { NetscriptGang } from "./NetscriptFunctions/Gang";
import { NetscriptGo } from "./NetscriptFunctions/Go";
@@ -561,82 +560,32 @@ export const ns: InternalAPI = {
tail:
(ctx) =>
(scriptID, hostname, ...scriptArgs) => {
- const ident = helpers.scriptIdentifier(ctx, scriptID, hostname, scriptArgs);
- const runningScriptObj = helpers.getRunningScript(ctx, ident);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(ident));
- return;
- }
-
- LogBoxEvents.emit(runningScriptObj);
- },
- renderTail:
- (ctx) =>
- (_pid = ctx.workerScript.scriptRef.pid) => {
- const pid = helpers.number(ctx, "pid", _pid);
- const runningScriptObj = helpers.getRunningScript(ctx, pid);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
- return;
- }
- runningScriptObj.tailProps?.rerender();
+ deprecationWarning("ns.tail", "Use ns.ui.openTail instead.");
+ ns.ui.openTail(ctx)(scriptID, hostname, ...scriptArgs);
},
moveTail:
(ctx) =>
(_x, _y, _pid = ctx.workerScript.scriptRef.pid) => {
- const x = helpers.number(ctx, "x", _x);
- const y = helpers.number(ctx, "y", _y);
- const pid = helpers.number(ctx, "pid", _pid);
- const runningScriptObj = helpers.getRunningScript(ctx, pid);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
- return;
- }
- runningScriptObj.tailProps?.setPosition(x, y);
+ deprecationWarning("ns.moveTail", "Use ns.ui.moveTail instead.");
+ ns.ui.moveTail(ctx)(_x, _y, _pid);
},
resizeTail:
(ctx) =>
(_w, _h, _pid = ctx.workerScript.scriptRef.pid) => {
- const w = helpers.number(ctx, "w", _w);
- const h = helpers.number(ctx, "h", _h);
- const pid = helpers.number(ctx, "pid", _pid);
- const runningScriptObj = helpers.getRunningScript(ctx, pid);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
- return;
- }
- runningScriptObj.tailProps?.setSize(w, h);
+ deprecationWarning("ns.resizeTail", "Use ns.ui.resizeTail instead.");
+ ns.ui.resizeTail(ctx)(_w, _h, _pid);
},
closeTail:
(ctx) =>
(_pid = ctx.workerScript.scriptRef.pid) => {
- const pid = helpers.number(ctx, "pid", _pid);
- //Emit an event to tell the game to close the tail window if it exists
- LogBoxCloserEvents.emit(pid);
+ deprecationWarning("ns.closeTail", "Use ns.ui.closeTail instead.");
+ ns.ui.closeTail(ctx)(_pid);
},
setTitle:
(ctx) =>
(title, _pid = ctx.workerScript.scriptRef.pid) => {
- const pid = helpers.number(ctx, "pid", _pid);
- const runningScriptObj = helpers.getRunningScript(ctx, pid);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
- return;
- }
- runningScriptObj.title = typeof title === "string" ? title : wrapUserNode(title);
- runningScriptObj.tailProps?.rerender();
- },
- setTailFontSize:
- (ctx) =>
- (_pixel, scriptID, hostname, ...scriptArgs) => {
- const ident = helpers.scriptIdentifier(ctx, scriptID, hostname, scriptArgs);
- const runningScriptObj = helpers.getRunningScript(ctx, ident);
- if (runningScriptObj == null) {
- helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(ident));
- return;
- }
- if (_pixel === undefined) runningScriptObj.tailProps?.setFontSize(undefined);
- else runningScriptObj.tailProps?.setFontSize(helpers.number(ctx, "pixel", _pixel));
+ deprecationWarning("ns.setTitle", "Use ns.ui.setTailTitle instead.");
+ ns.ui.setTailTitle(ctx)(title, _pid);
},
nuke: (ctx) => (_hostname) => {
const hostname = helpers.string(ctx, "hostname", _hostname);
diff --git a/src/NetscriptFunctions/UserInterface.ts b/src/NetscriptFunctions/UserInterface.ts
index 2abe5b58a..aac53d881 100644
--- a/src/NetscriptFunctions/UserInterface.ts
+++ b/src/NetscriptFunctions/UserInterface.ts
@@ -7,14 +7,103 @@ import { CONSTANTS } from "../Constants";
import { commitHash } from "../utils/helpers/commitHash";
import { InternalAPI } from "../Netscript/APIWrapper";
import { Terminal } from "../../src/Terminal";
-import { helpers } from "../Netscript/NetscriptHelpers";
+import { helpers, wrapUserNode } from "../Netscript/NetscriptHelpers";
import { assertAndSanitizeMainTheme, assertAndSanitizeStyles } from "../JsonSchema/JSONSchemaAssertion";
+import { LogBoxCloserEvents, LogBoxEvents } from "../ui/React/LogBoxManager";
export function NetscriptUserInterface(): InternalAPI {
return {
+ openTail:
+ (ctx) =>
+ (scriptID, hostname, ...scriptArgs) => {
+ const ident = helpers.scriptIdentifier(ctx, scriptID, hostname, scriptArgs);
+ const runningScriptObj = helpers.getRunningScript(ctx, ident);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(ident));
+ return;
+ }
+
+ LogBoxEvents.emit(runningScriptObj);
+ },
+
+ renderTail:
+ (ctx) =>
+ (_pid = ctx.workerScript.scriptRef.pid) => {
+ const pid = helpers.number(ctx, "pid", _pid);
+ const runningScriptObj = helpers.getRunningScript(ctx, pid);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
+ return;
+ }
+ runningScriptObj.tailProps?.rerender();
+ },
+
+ moveTail:
+ (ctx) =>
+ (_x, _y, _pid = ctx.workerScript.scriptRef.pid) => {
+ const x = helpers.number(ctx, "x", _x);
+ const y = helpers.number(ctx, "y", _y);
+ const pid = helpers.number(ctx, "pid", _pid);
+ const runningScriptObj = helpers.getRunningScript(ctx, pid);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
+ return;
+ }
+ runningScriptObj.tailProps?.setPosition(x, y);
+ },
+
+ resizeTail:
+ (ctx) =>
+ (_w, _h, _pid = ctx.workerScript.scriptRef.pid) => {
+ const w = helpers.number(ctx, "w", _w);
+ const h = helpers.number(ctx, "h", _h);
+ const pid = helpers.number(ctx, "pid", _pid);
+ const runningScriptObj = helpers.getRunningScript(ctx, pid);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
+ return;
+ }
+ runningScriptObj.tailProps?.setSize(w, h);
+ },
+
+ closeTail:
+ (ctx) =>
+ (_pid = ctx.workerScript.scriptRef.pid) => {
+ const pid = helpers.number(ctx, "pid", _pid);
+ //Emit an event to tell the game to close the tail window if it exists
+ LogBoxCloserEvents.emit(pid);
+ },
+
+ setTailTitle:
+ (ctx) =>
+ (title, _pid = ctx.workerScript.scriptRef.pid) => {
+ const pid = helpers.number(ctx, "pid", _pid);
+ const runningScriptObj = helpers.getRunningScript(ctx, pid);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(pid));
+ return;
+ }
+ runningScriptObj.title = typeof title === "string" ? title : wrapUserNode(title);
+ runningScriptObj.tailProps?.rerender();
+ },
+
+ setTailFontSize:
+ (ctx) =>
+ (_pixel, scriptID, hostname, ...scriptArgs) => {
+ const ident = helpers.scriptIdentifier(ctx, scriptID, hostname, scriptArgs);
+ const runningScriptObj = helpers.getRunningScript(ctx, ident);
+ if (runningScriptObj == null) {
+ helpers.log(ctx, () => helpers.getCannotFindRunningScriptErrorMessage(ident));
+ return;
+ }
+ if (_pixel === undefined) runningScriptObj.tailProps?.setFontSize(undefined);
+ else runningScriptObj.tailProps?.setFontSize(helpers.number(ctx, "pixel", _pixel));
+ },
+
windowSize: () => () => {
return [window.innerWidth, window.innerHeight];
},
+
getTheme: () => () => {
return { ...Settings.theme };
},
diff --git a/src/ScriptEditor/NetscriptDefinitions.d.ts b/src/ScriptEditor/NetscriptDefinitions.d.ts
index ea35dd170..c80fb167d 100644
--- a/src/ScriptEditor/NetscriptDefinitions.d.ts
+++ b/src/ScriptEditor/NetscriptDefinitions.d.ts
@@ -5675,6 +5675,136 @@ interface Infiltration {
* @public
*/
interface UserInterface {
+ /**
+ * Open the tail window of a script.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Opens a script’s logs. This is functionally the same as the tail Terminal command.
+ *
+ * If the function is called with no arguments, it will open the current script’s logs.
+ *
+ * Otherwise, the PID or filename, hostname/ip, and args… arguments can be used to get the logs from another script.
+ * Remember that scripts are uniquely identified by both their names and arguments.
+ *
+ * @example
+ * ```js
+ * //Open logs from foo.js on the current server that was run with no args
+ * ns.tail("foo.js");
+ *
+ * //Get logs from foo.js on the foodnstuff server that was run with no args
+ * ns.tail("foo.js", "foodnstuff");
+ *
+ * //Get logs from foo.js on the foodnstuff server that was run with the arguments [1, "test"]
+ * ns.tail("foo.js", "foodnstuff", 1, "test");
+ * ```
+ * @param fn - Optional. Filename or PID of the script being tailed. If omitted, the current script is tailed.
+ * @param host - Optional. Hostname of the script being tailed. Defaults to the server this script is running on. If args are specified, this is not optional.
+ * @param args - Arguments for the script being tailed.
+ */
+ openTail(fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
+
+ /**
+ * Render a tail window.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Tail windows are rendered at an interval defined in game settings. This function renders the tail window of the
+ * specified script immediately.
+ *
+ * @param pid - Optional. PID of the script having its tail rendered. If omitted, the current script is used.
+ */
+ renderTail(pid?: number): void;
+
+ /**
+ * Move a tail window.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Moves a tail window. Coordinates are in screen space pixels (top left is 0,0).
+ *
+ * @param x - x coordinate.
+ * @param y - y coordinate.
+ * @param pid - Optional. PID of the script having its tail moved. If omitted, the current script is used.
+ */
+ moveTail(x: number, y: number, pid?: number): void;
+
+ /**
+ * Resize a tail window.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Resize a tail window. Size are in pixel.
+ *
+ * @param width - Width of the window.
+ * @param height - Height of the window.
+ * @param pid - Optional. PID of the script having its tail resized. If omitted, the current script is used.
+ */
+ resizeTail(width: number, height: number, pid?: number): void;
+
+ /**
+ * Close the tail window of a script.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * Closes a script’s logs. This is functionally the same as pressing the "Close" button on the tail window.
+ *
+ * If the function is called with no arguments, it will close the current script’s logs.
+ *
+ * Otherwise, the pid argument can be used to close the logs from another script.
+ *
+ * @param pid - Optional. PID of the script having its tail closed. If omitted, the current script is used.
+ */
+ closeTail(pid?: number): void;
+
+ /**
+ * Set the title of the tail window of a script.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * This sets the title to the given string, and also forces an update of the
+ * tail window's contents.
+ *
+ * The title is saved across restarts, but only if it is a simple string.
+ *
+ * If the pid is unspecified, it will modify the current script’s logs.
+ *
+ * Otherwise, the pid argument can be used to change the logs from another script.
+ *
+ * It is possible to pass any React Node instead of a string.
+ * See {@link ReactElement} and {@link ReactNode} types for additional info.
+ *
+ * @param title - The new title for the tail window.
+ * @param pid - Optional. PID of the script having its tail closed. If omitted, the current script is used.
+ */
+ setTailTitle(title: string | ReactNode, pid?: number): void;
+
+ /**
+ * Set the font size of the tail window of a script.
+ *
+ * @remarks
+ * RAM cost: 0 GB
+ *
+ * This overwrites the tail font size and forces an update of the tail window's contents.
+ *
+ * If ran without a filename or pid, this will affect the current script's tail window.
+ *
+ * Otherwise, the PID or filename, hostname/ip, and args… arguments can be used to target the tail window from another script.
+ * Remember that scripts are uniquely identified by both their names and arguments.
+ *
+ * @param pixel - Optional. The new font size in pixels. If omitted, the default tail font size is used.
+ * @param fn - Optional. Filename or PID of the target script. If omitted, the current script is used.
+ * @param host - Optional. Hostname of the target script. Defaults to the server this script is running on. If args are specified, this is not optional.
+ * @param args - Arguments for the target script.
+ */
+ setTailFontSize(pixel?: number, fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
+
/**
* Get the current window size
* @remarks
@@ -6405,7 +6535,11 @@ export interface NS {
getRecentScripts(): RecentScript[];
/**
- * Open the tail window of a script.
+ * Open the tail window of a script. This function is deprecated and will be removed in a later version.
+ *
+ * @deprecated
+ * Use {@link UserInterface.openTail | ns.ui.openTail} instead.
+ *
* @remarks
* RAM cost: 0 GB
*
@@ -6434,20 +6568,11 @@ export interface NS {
tail(fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
/**
- * Render a tail window.
+ * Move a tail window. This function is deprecated and will be removed in a later version.
*
- * @remarks
- * RAM cost: 0 GB
+ * @deprecated
+ * Use {@link UserInterface.moveTail | ns.ui.moveTail} instead.
*
- * Tail windows are rendered at an interval defined in game settings. This function renders the tail window of the
- * specified script immediately.
- *
- * @param pid - Optional. PID of the script having its tail rendered. If omitted, the current script is used.
- */
- renderTail(pid?: number): void;
-
- /**
- * Move a tail window.
* @remarks
* RAM cost: 0 GB
*
@@ -6460,7 +6585,11 @@ export interface NS {
moveTail(x: number, y: number, pid?: number): void;
/**
- * Resize a tail window.
+ * Resize a tail window. This function is deprecated and will be removed in a later version.
+ *
+ * @deprecated
+ * Use {@link UserInterface.resizeTail | ns.ui.resizeTail} instead.
+ *
* @remarks
* RAM cost: 0 GB
*
@@ -6473,7 +6602,11 @@ export interface NS {
resizeTail(width: number, height: number, pid?: number): void;
/**
- * Close the tail window of a script.
+ * Close the tail window of a script. This function is deprecated and will be removed in a later version.
+ *
+ * @deprecated
+ * Use {@link UserInterface.closeTail | ns.ui.closeTail} instead.
+ *
* @remarks
* RAM cost: 0 GB
*
@@ -6488,7 +6621,11 @@ export interface NS {
closeTail(pid?: number): void;
/**
- * Set the title of the tail window of a script.
+ * Set the title of the tail window of a script. This function is deprecated and will be removed in a later version.
+ *
+ * @deprecated
+ * Use {@link UserInterface.setTailTitle | ns.ui.setTailTitle} instead.
+ *
* @remarks
* RAM cost: 0 GB
*
@@ -6509,25 +6646,6 @@ export interface NS {
*/
setTitle(title: string | ReactNode, pid?: number): void;
- /**
- * Set the font size of the tail window of a script.
- * @remarks
- * RAM cost: 0 GB
- *
- * This overwrites the tail font size and forces an update of the tail window's contents.
- *
- * If ran without a filename or pid, this will affect the current script's tail window.
- *
- * Otherwise, the PID or filename, hostname/ip, and args… arguments can be used to target the tail window from another script.
- * Remember that scripts are uniquely identified by both their names and arguments.
- *
- * @param pixel - Optional. The new font size in pixels. If omitted, the default tail font size is used.
- * @param fn - Optional. Filename or PID of the target script. If omitted, the current script is used.
- * @param host - Optional. Hostname of the target script. Defaults to the server this script is running on. If args are specified, this is not optional.
- * @param args - Arguments for the target script.
- */
- setTailFontSize(pixel?: number, fn?: FilenameOrPID, host?: string, ...args: ScriptArg[]): void;
-
/**
* Get the list of servers connected to a server.
* @remarks