There were two large holes in the existing offline server handling:
1. It didn't include IPs, so scripts that used IPs instead of hostnames
would get exceptions thrown for "server not found."
2. Coverage was very low for non-Darknet APIs. Maybe most of them don't
need to be covered, but many obvious ones like "ps", "killall" and
"hasRootAccess" were missing. IMO the only reliable answer is one
that enforces *all* are covered via the type system.
To accomplish the second part, helpers.getServer() was changed to return
null when a server is offline. This intentionally breaks a lot of its
utility, which was to return a server unconditionally. To compensate,
its utility was increased - it now also does unknown argument
processing, allowing it to subsume a common line that all callers were
repeating.
Some callers switched to ctx.workerScript.getServer(), because they
didn't actually need to be using helpers.getServer(). Similarly, a few
callsites switched to GetServerOrThrow(), for the cases where it should
be guaranteed that the server is valid. The rest are returning a
default/failure response when the server is offline. (Except for
contracts, which threw on failure already anyway.)
There was duplicated code, and more importantly, were were handling
certain things subtly differently in exec() and scp() as a result. This
notably causes a behavior change in exec() and scp() where failure to
authenticate now returns failure instead of throwing, which I believe is
the proper response.
This also makes it easier to see in the code exactly which functions
require what (auth, session, etc.)
This moves the implementation entirely into the PortHandle class, which
makes the code a bit more streamlined and will allow for other port
implementations in the future.
* Convert purchased server functions to cloud API
- Create `ns.cloud`
- Change `bitnode multipliers` and `server constants` wording for consistency
- change `server`, `ram` and `getting started` docs for consistency
- Added changes to 3.0.0 API Break and `setRemovedFunctions` in NetscriptFunctions.js
Tested by
- running tutorial `purchase-server-8gb.js`, and a more typical player one
- buying manually using vendor (Alpha Ent in Sector 12)
- deleting them all using script, and checked all deleted functions gave correct error
- Imported completed save to ensure auto-transfer of function work
* Revision in line with comments
- changed more `purchased` to `cloud` references
- Added BN mults auto-conversion
* Update getting_started.md
- Corrected function names for new `cloud API`
* Don't show `cloud API` warning
v3.0.0 API break auto-replaces `cloud` functions, not warning suggested.
* API Break correction
- `cloud` affected API break replacement changed to be more descriptive and functional
* Fix typo and add empty lines
* Update many things (check commit's description)
- Comments
- Terminal message
- UI Text
- TSDoc
- md docs
- Improve error messages in src\NetscriptFunctions\Cloud.ts
* Adjusted error message to include information about making sure scripts are not running when trying to use mv on them.
* nom run format
* Added behaviour info to NetscriptDefinitions.d.ts
* `npm run doc`
* un-nested/inversed the check
* `npm run format`
ramOverride currently prevents you from actually using exactly all of a server's memory due to a bug in the ram check. Simply replace ">=" with ">" to allow the new ram to equal the max ram.
Test script:
```js
/** @param {NS} ns */
export async function main(ns) {
ns.tprint(ns.ramOverride(8));
}
```
Expected output (on fresh save):
```js
8
```
Output before this commit:
```js
1.6
```
* DOCUMENTATION: Clarify getOwnedSourceFiles when player overrides active levels of SFs
* Return Player.activeSourceFiles instead of Player.sourceFiles
* Get rid of zeroes in the map
* added utility info
* moved info to running script
* fix for RAM cost
* description changes
Co-authored-by: David Walker <d0sboots@gmail.com>
* fixed wrong formatting
* Added parent to ignored fields
---------
Co-authored-by: David Walker <d0sboots@gmail.com>
The current implementation was naive; disableLog("ALL") was storing a
key for every function, and iterating over a different object to do it
(when iterating over objects is quite slow).
The common cases of Bitburner (and especially batching, where efficiency
matters most) are either never disabling anything, or disabling "ALL".
This optimizes for these two cases, at the expense of slightly more
complicated code to deal with the less-common edge cases.