API: Move and rename purchased server functions to cloud API (#2367)

* 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
This commit is contained in:
gmcew
2025-11-07 20:10:33 +00:00
committed by GitHub
parent d1a4ec8337
commit 7c0286222c
58 changed files with 1301 additions and 1045 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ export function PurchaseServerModal(props: IProps): React.ReactElement {
return (
<Modal open={props.open} onClose={props.onClose}>
<Typography>
Would you like to purchase a new server with {formatRam(props.ram)} of RAM for{" "}
Would you like to purchase a new cloud server with {formatRam(props.ram)} of RAM for{" "}
<Money money={props.cost} forPurchase={true} />?
</Typography>
<br />
+6 -6
View File
@@ -12,7 +12,7 @@ import { RamButton } from "./RamButton";
import { TorButton } from "./TorButton";
import { CoresButton } from "./CoresButton";
import { getPurchaseServerCost, getPurchaseServerLimit, getPurchaseServerMaxRam } from "../../Server/ServerPurchases";
import { getCloudServerCost, getCloudServerLimit, getCloudServerMaxRam } from "../../Server/ServerPurchases";
import { Money } from "../../ui/React/Money";
import { Player } from "@player";
@@ -23,12 +23,12 @@ import { useCycleRerender } from "../../ui/React/hooks";
function ServerButton(props: { ram: number }): React.ReactElement {
const [open, setOpen] = useState(false);
const cost = getPurchaseServerCost(props.ram);
const reachLimitOfPrivateServer = Player.purchasedServers.length >= getPurchaseServerLimit();
const cost = getCloudServerCost(props.ram);
const reachLimitOfPrivateServer = Player.purchasedServers.length >= getCloudServerLimit();
return (
<>
<Button onClick={() => setOpen(true)} disabled={!Player.canAfford(cost) || reachLimitOfPrivateServer}>
Purchase {formatRam(props.ram)} Server -&nbsp;
Purchase {formatRam(props.ram)} Cloud Server -&nbsp;
{reachLimitOfPrivateServer ? "Max" : <Money money={cost} forPurchase={true} />}
</Button>
<PurchaseServerModal open={open} onClose={() => setOpen(false)} ram={props.ram} cost={cost} />
@@ -41,7 +41,7 @@ export function TechVendorLocation(props: { loc: Location }): React.ReactElement
const purchaseServerButtons: React.ReactNode[] = [];
for (let ram = props.loc.techVendorMinRam; ram <= props.loc.techVendorMaxRam; ram *= 2) {
if (ram > getPurchaseServerMaxRam()) {
if (ram > getCloudServerMaxRam()) {
break;
}
purchaseServerButtons.push(<ServerButton key={ram} ram={ram} />);
@@ -53,7 +53,7 @@ export function TechVendorLocation(props: { loc: Location }): React.ReactElement
<Box sx={{ display: "grid", width: "fit-content" }}>{purchaseServerButtons}</Box>
<br />
<Typography>
<i>"You can order bigger servers via scripts. We don't take custom orders in person."</i>
<i>"You can order bigger cloud servers via scripts. We don't take custom orders in person."</i>
</Typography>
<br />
<TorButton rerender={rerender} />