added bladeburner functions related to action levels

This commit is contained in:
Olivier Gagnon 2018-07-20 00:06:59 -04:00
parent 5845fa8702
commit 54c0d97048
3 changed files with 206 additions and 0 deletions

@ -158,6 +158,54 @@ getActionCountRemaining
Note that this is meant to be used for Contracts and Operations. Note that this is meant to be used for Contracts and Operations.
This function will return 'Infinity' for actions such as Training and Field Analysis. This function will return 'Infinity' for actions such as Training and Field Analysis.
getActionMaxLevel
-----------------
.. js:function:: getActionMaxLevel(type, name)
:param string type: Type of action. See :ref:`bladeburner_action_types`
:param string name: Name of action. Must be an exact match
Return the maximum level for this action.
getActionCurrentLevel
---------------------
.. js:function:: getActionCurrentLevel(type, name)
:param string type: Type of action. See :ref:`bladeburner_action_types`
:param string name: Name of action. Must be an exact match
Return the current level of this action.
getActionAutolevel
------------------
.. js:function:: getActionAutolevel(type, name)
:param string type: Type of action. See :ref:`bladeburner_action_types`
:param string name: Name of action. Must be an exact match
Return wether of not this action is currently autoleveling.
setActionAutolevel
------------------
.. js:function:: setActionAutolevel(type, name, autoLevel)
:param string type: Type of action. See :ref:`bladeburner_action_types`
:param string name: Name of action. Must be an exact match
:param boolean autoLevel: wether or not to autolevel this action
setActionLevel
--------------
.. js:function:: setActionLevel(type, name, level)
:param string type: Type of action. See :ref:`bladeburner_action_types`
:param string name: Name of action. Must be an exact match
:param level int: the level to set this action to
getRank getRank
------- -------

@ -0,0 +1,27 @@
import {Player} from "./Player";
import {Bladeburner} from "./Bladeburner";
import {makeRuntimeRejectMsg} from "./NetscriptEvaluator";
function unknownBladeburnerActionErrorMessage(functionName, actionType, actionName) {
return `ERROR: bladeburner.${functionName}() failed due to an invalid action specified. ` +
`Type: ${actionType}, Name: ${actionName}. Note that for contracts and operations, the ` +
`name of the operation is case-sensitive.`;
}
function unknownBladeburnerExceptionMessage(functionName, err) {
return `Bladeburner.${functionName}() failed with exception: ` + err;
}
function checkBladeburnerAccess(workerScript, functionName) {
const accessDenied = `${functionName}() failed because you do not` +
" currently have access to the Bladeburner API. This is either" +
" because you are not currently employed at the Bladeburner division" +
" or because you do not have Source-File 7";
console.log(Player.sourceFiles);
const hasAccess = Player.bladeburner instanceof Bladeburner && (Player.bitNodeN === 7 || Player.sourceFiles.some(a=>{return a.n === 7}));
if(!hasAccess) {
throw makeRuntimeRejectMsg(workerScript, accessDenied);
}
}
export {unknownBladeburnerActionErrorMessage, unknownBladeburnerExceptionMessage, checkBladeburnerAccess};

@ -38,6 +38,9 @@ import {StockMarket, StockSymbols, SymbolToStockMap, initStockSymbols,
import {post} from "./Terminal"; import {post} from "./Terminal";
import {TextFile, getTextFile, createTextFile} from "./TextFile"; import {TextFile, getTextFile, createTextFile} from "./TextFile";
import {unknownBladeburnerActionErrorMessage,
unknownBladeburnerExceptionMessage,
checkBladeburnerAccess} from "./NetscriptBladeburner.js";
import {WorkerScript, workerScripts, import {WorkerScript, workerScripts,
killWorkerScript, NetscriptPorts} from "./NetscriptWorker"; killWorkerScript, NetscriptPorts} from "./NetscriptWorker";
import {makeRuntimeRejectMsg, netscriptDelay, runScriptFromScript, import {makeRuntimeRejectMsg, netscriptDelay, runScriptFromScript,
@ -3356,6 +3359,134 @@ function NetscriptFunctions(workerScript) {
throw makeRuntimeRejectMsg(workerScript, "getActionCountRemaining() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " + throw makeRuntimeRejectMsg(workerScript, "getActionCountRemaining() failed because you do not currently have access to the Bladeburner API. This is either because you are not currently employed " +
"at the Bladeburner division or because you do not have Source-File 7"); "at the Bladeburner division or because you do not have Source-File 7");
}, },
getActionMaxLevel: function(type="", name="") {
if (workerScript.checkingRam) {
return updateStaticRam("getActionMaxLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
}
updateDynamicRam("getActionMaxLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
checkBladeburnerAccess(workerScript, "getActionMaxLevel");
try {
var errorLogText = unknownBladeburnerActionErrorMessage("getActionMaxLevel", type, name);
const actionId = Player.bladeburner.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
workerScript.log(errorLogText);
return -1;
}
const actionObj = Player.bladeburner.getActionObject(actionId);
if (actionObj == null) {
workerScript.log(errorLogText);
return -1;
}
return actionObj.maxLevel;
} catch(err) {
throw makeRuntimeRejectMsg(workerScript, unknownBladeburnerExceptionMessage("getActionMaxLevel", err));
}
},
getActionCurrentLevel: function(type="", name="") {
if (workerScript.checkingRam) {
return updateStaticRam("getActionCurrentLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
}
updateDynamicRam("getActionCurrentLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
checkBladeburnerAccess(workerScript, "getActionCurrentLevel");
try {
var errorLogText = unknownBladeburnerActionErrorMessage("getActionCurrentLevel", type, name);
const actionId = Player.bladeburner.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
workerScript.log(errorLogText);
return -1;
}
const actionObj = Player.bladeburner.getActionObject(actionId);
if (actionObj == null) {
workerScript.log(errorLogText);
return -1;
}
return actionObj.level;
} catch(err) {
throw makeRuntimeRejectMsg(workerScript, unknownBladeburnerExceptionMessage("getActionCurrentLevel", err));
}
},
getActionAutolevel: function(type="", name="") {
if (workerScript.checkingRam) {
return updateStaticRam("getActionAutolevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
}
updateDynamicRam("getActionAutolevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
checkBladeburnerAccess(workerScript, "getActionAutolevel");
try {
var errorLogText = unknownBladeburnerActionErrorMessage("getActionAutolevel", type, name);
const actionId = Player.bladeburner.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
workerScript.log(errorLogText);
return false;
}
const actionObj = Player.bladeburner.getActionObject(actionId);
if (actionObj == null) {
workerScript.log(errorLogText);
return false;
}
return actionObj.autoLevel;
} catch(err) {
throw makeRuntimeRejectMsg(workerScript, unknownBladeburnerExceptionMessage("getActionAutolevel", err));
}
},
setActionAutolevel: function(type="", name="", autoLevel=true) {
if (workerScript.checkingRam) {
return updateStaticRam("setActionAutolevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
}
updateDynamicRam("setActionAutolevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
checkBladeburnerAccess(workerScript, "setActionAutolevel");
try {
var errorLogText = unknownBladeburnerActionErrorMessage("setActionAutolevel", type, name);
const actionId = Player.bladeburner.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
workerScript.log(errorLogText);
return;
}
const actionObj = Player.bladeburner.getActionObject(actionId);
if (actionObj == null) {
workerScript.log(errorLogText);
return;
}
actionObj.autoLevel = autoLevel;
} catch(err) {
throw makeRuntimeRejectMsg(workerScript, unknownBladeburnerExceptionMessage("setActionAutolevel", err));
}
},
setActionLevel: function(type="", name="", level=1) {
if (workerScript.checkingRam) {
return updateStaticRam("setActionLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
}
updateDynamicRam("setActionLevel", CONSTANTS.ScriptBladeburnerApiBaseRamCost);
checkBladeburnerAccess(workerScript, "setActionLevel");
try {
var errorLogText = unknownBladeburnerActionErrorMessage("setActionLevel", type, name);
const actionId = Player.bladeburner.getActionIdFromTypeAndName(type, name);
if (actionId == null) {
workerScript.log(errorLogText);
return;
}
const actionObj = Player.bladeburner.getActionObject(actionId);
if (actionObj == null) {
workerScript.log(errorLogText);
return;
}
if(level > actionObj.maxLevel) {
workerScript.log(`ERROR: bladeburner.${setActionLevel}() failed because level exceeds max level for given action.`);
return;
}
if(level < 1) {
workerScript.log(`ERROR: bladeburner.${setActionLevel}() failed because level is below 1.`);
return;
}
actionObj.level = level;
} catch(err) {
throw makeRuntimeRejectMsg(workerScript, unknownBladeburnerExceptionMessage("setActionLevel", err));
}
},
getRank : function() { getRank : function() {
if (workerScript.checkingRam) { if (workerScript.checkingRam) {
return updateStaticRam("getRank", CONSTANTS.ScriptBladeburnerApiBaseRamCost); return updateStaticRam("getRank", CONSTANTS.ScriptBladeburnerApiBaseRamCost);