mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-19 14:13:48 +01:00
Merge pull request #317 from kopelli/get-server-cost
Add "getPurchasedServerCost" NS function
This commit is contained in:
commit
1c9b54c0a3
@ -670,6 +670,21 @@ purchaseHacknetNode
|
|||||||
end of the Hacknet Node's name (e.g The Hacknet Node named 'hacknet-node-4' will have an index of 4). If the player cannot afford
|
end of the Hacknet Node's name (e.g The Hacknet Node named 'hacknet-node-4' will have an index of 4). If the player cannot afford
|
||||||
to purchase a new Hacknet Node then the function will return false.
|
to purchase a new Hacknet Node then the function will return false.
|
||||||
|
|
||||||
|
getPurchasedServerCost
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. js:function:: getPurchasedServerCost(ram)
|
||||||
|
|
||||||
|
:param number ram: Amount of RAM of a potential purchased server. Must be a power of 2 (2, 4, 8, 16, etc.). Maximum value of 1048576 (2^20)
|
||||||
|
|
||||||
|
Returns the cost to purchase a server with the specified amount of *ram*.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
|
||||||
|
for (i = 1; i <= 20; i++) {
|
||||||
|
tprint(i + " -- " + getPurchasedServerCost(Math.pow(2, i)));
|
||||||
|
}
|
||||||
|
|
||||||
purchaseServer
|
purchaseServer
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -72,6 +72,7 @@ let NetscriptFunctions =
|
|||||||
"serverExists|fileExists|isRunning|" +
|
"serverExists|fileExists|isRunning|" +
|
||||||
"deleteServer|getPurchasedServers|" +
|
"deleteServer|getPurchasedServers|" +
|
||||||
"getPurchasedServerLimit|getPurchasedServerMaxRam|" +
|
"getPurchasedServerLimit|getPurchasedServerMaxRam|" +
|
||||||
|
"getPurchasedServerCost|" +
|
||||||
"purchaseServer|round|write|read|peek|clear|rm|getPortHandle|" +
|
"purchaseServer|round|write|read|peek|clear|rm|getPortHandle|" +
|
||||||
"scriptRunning|scriptKill|getScriptName|getScriptRam|" +
|
"scriptRunning|scriptKill|getScriptName|getScriptRam|" +
|
||||||
"getHackTime|getGrowTime|getWeakenTime|getScriptIncome|getScriptExpGain|" +
|
"getHackTime|getGrowTime|getWeakenTime|getScriptIncome|getScriptExpGain|" +
|
||||||
|
@ -70,6 +70,7 @@ let CONSTANTS = {
|
|||||||
ScriptHNUpgCoreRamCost: 0.8,
|
ScriptHNUpgCoreRamCost: 0.8,
|
||||||
ScriptGetStockRamCost: 2.0,
|
ScriptGetStockRamCost: 2.0,
|
||||||
ScriptBuySellStockRamCost: 2.5,
|
ScriptBuySellStockRamCost: 2.5,
|
||||||
|
ScriptGetPurchaseServerRamCost: 0.25,
|
||||||
ScriptPurchaseServerRamCost: 2.25,
|
ScriptPurchaseServerRamCost: 2.25,
|
||||||
ScriptGetPurchasedServerLimit: 0.05,
|
ScriptGetPurchasedServerLimit: 0.05,
|
||||||
ScriptGetPurchasedServerMaxRam: 0.05,
|
ScriptGetPurchasedServerMaxRam: 0.05,
|
||||||
|
@ -178,8 +178,26 @@ function NetscriptFunctions(workerScript) {
|
|||||||
throw makeRuntimeRejectMsg(workerScript, "Index specified for Hacknet Node is out-of-bounds: " + i);
|
throw makeRuntimeRejectMsg(workerScript, "Index specified for Hacknet Node is out-of-bounds: " + i);
|
||||||
}
|
}
|
||||||
return Player.hacknetNodes[i];
|
return Player.hacknetNodes[i];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} ram The amount of server RAM to calculate cost of.
|
||||||
|
* @exception {Error} If the value passed in is not numeric, out of range, or too large of a value.
|
||||||
|
* @returns {number} The cost of
|
||||||
|
*/
|
||||||
|
const getPurchaseServerRamCostGuard = (ram) => {
|
||||||
|
const guardedRam = Math.round(ram);
|
||||||
|
if (isNaN(guardedRam) || !powerOfTwo(guardedRam)) {
|
||||||
|
throw Error("failed due to invalid ram argument. Must be numeric and a power of 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (guardedRam > CONSTANTS.PurchasedServerMaxRam) {
|
||||||
|
throw Error("failed because specified RAM was too high. Maximum RAM on a purchased server is " + CONSTANTS.PurchasedServerMaxRam + "GB");
|
||||||
|
}
|
||||||
|
|
||||||
|
return guardedRam * CONSTANTS.BaseCostFor1GBOfRamServer;
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hacknet : {
|
hacknet : {
|
||||||
numNodes : function() {
|
numNodes : function() {
|
||||||
@ -1597,6 +1615,22 @@ function NetscriptFunctions(workerScript) {
|
|||||||
|
|
||||||
return CONSTANTS.PurchasedServerMaxRam;
|
return CONSTANTS.PurchasedServerMaxRam;
|
||||||
},
|
},
|
||||||
|
getPurchasedServerCost: function(ram) {
|
||||||
|
if (workerScript.checkingRam) {
|
||||||
|
return updateStaticRam("getPurchasedServerCost", CONSTANTS.ScriptGetPurchaseServerRamCost);
|
||||||
|
}
|
||||||
|
updateDynamicRam("getPurchasedServerCost", CONSTANTS.ScriptGetPurchaseServerRamCost);
|
||||||
|
|
||||||
|
let cost = 0;
|
||||||
|
try {
|
||||||
|
cost = getPurchaseServerRamCostGuard(ram);
|
||||||
|
} catch (e) {
|
||||||
|
workerScript.scriptRef.log("ERROR: 'getPurchasedServerCost()' " + e.message);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return cost;
|
||||||
|
},
|
||||||
purchaseServer : function(hostname, ram) {
|
purchaseServer : function(hostname, ram) {
|
||||||
if (workerScript.checkingRam) {
|
if (workerScript.checkingRam) {
|
||||||
return updateStaticRam("purchaseServer", CONSTANTS.ScriptPurchaseServerRamCost);
|
return updateStaticRam("purchaseServer", CONSTANTS.ScriptPurchaseServerRamCost);
|
||||||
@ -1615,18 +1649,14 @@ function NetscriptFunctions(workerScript) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
ram = Math.round(ram);
|
let cost = 0;
|
||||||
if (isNaN(ram) || !isPowerOfTwo(ram)) {
|
try {
|
||||||
workerScript.scriptRef.log("ERROR: purchaseServer() failed due to invalid ram argument. Must be numeric and a power of 2");
|
cost = getPurchaseServerRamCostGuard(ram);
|
||||||
|
} catch (e) {
|
||||||
|
workerScript.scriptRef.log("ERROR: 'purchaseServer()' " + e.message);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ram > CONSTANTS.PurchasedServerMaxRam) {
|
|
||||||
workerScript.scriptRef.log("ERROR: purchasedServer() failed because specified RAM was too high. Maximum RAM on a purchased server is " + CONSTANTS.PurchasedServerMaxRam + "GB");
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
var cost = ram * CONSTANTS.BaseCostFor1GBOfRamServer;
|
|
||||||
if (Player.money.lt(cost)) {
|
if (Player.money.lt(cost)) {
|
||||||
workerScript.scriptRef.log("ERROR: Not enough money to purchase server. Need $" + formatNumber(cost, 2));
|
workerScript.scriptRef.log("ERROR: Not enough money to purchase server. Need $" + formatNumber(cost, 2));
|
||||||
return "";
|
return "";
|
||||||
|
Loading…
Reference in New Issue
Block a user