mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2025-03-07 19:14:37 +01:00
If statements in NetScript should work now
This commit is contained in:
@ -122,7 +122,7 @@ AugmentationNames = {
|
||||
initAugmentations = function() {
|
||||
//Combat stat augmentations
|
||||
var Targeting1 = new Augmentation(AugmentationNames.Targeting1);
|
||||
Targeting1.setRequirements(4000, 6000000);
|
||||
Targeting1.setRequirements(3000, 5000000);
|
||||
Targeting1.setInfo("This cranial implant is embedded within the player's inner ear structure and optic nerves. It regulates and enhances the user's " +
|
||||
"balance and hand-eye coordination. It is also capable of augmenting reality by projecting digital information " +
|
||||
"directly onto the retina. These enhancements allow the player to better lock-on and keep track of enemies. <br><br>" +
|
||||
@ -189,7 +189,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(SynfibrilMuscle)
|
||||
|
||||
var CombatRib1 = new Augmentation(AugmentationNames.CombatRib1);
|
||||
CombatRib1.setRequirements(8000, 12000000);
|
||||
CombatRib1.setRequirements(6000, 11000000);
|
||||
CombatRib1.setInfo("The human body's ribs are replaced with artificial ribs that automatically and continuously release cognitive " +
|
||||
"and performance-enhancing drugs into the bloodstream, improving the user's abilities in combat.<br><br>" +
|
||||
"This augmentation increases the player's strength and defense by 10%.");
|
||||
@ -332,7 +332,7 @@ initAugmentations = function() {
|
||||
|
||||
//Labor stat augmentations
|
||||
var SpeechProcessor = new Augmentation(AugmentationNames.SpeechProcessor); //Cochlear imlant?
|
||||
SpeechProcessor.setRequirements(9000, 40000000);
|
||||
SpeechProcessor.setRequirements(7500, 25000000);
|
||||
SpeechProcessor.setInfo("A cochlear implant with an embedded computer that analyzes incoming speech. " +
|
||||
"The embedded computer processes characteristics of incoming speech, such as tone " +
|
||||
"and inflection, to pick up on subtle cues and aid in social interaction.<br><br>" +
|
||||
@ -376,7 +376,7 @@ initAugmentations = function() {
|
||||
|
||||
//Hacking augmentations
|
||||
var BitWire = new Augmentation(AugmentationNames.BitWire);
|
||||
BitWire.setRequirements(3000, 3000000);
|
||||
BitWire.setRequirements(2500, 3000000);
|
||||
BitWire.setInfo("A small brain implant embedded in the cerebrum. This regulates and improves the brain's computing " +
|
||||
"capabilities. <br><br> This augmentation increases the player's hacking skill by 5%");
|
||||
BitWire.addToFactions(["CyberSec", "BitRunners", "NiteSec"]);
|
||||
@ -405,7 +405,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(ArtificialBioNeuralNetwork);
|
||||
|
||||
var ArtificialSynapticPotentiation = new Augmentation(AugmentationNames.ArtificialSynapticPotentiation);
|
||||
ArtificialSynapticPotentiation.setRequirements(5000, 25000000);
|
||||
ArtificialSynapticPotentiation.setRequirements(3000, 15000000);
|
||||
ArtificialSynapticPotentiation.setInfo("The body is injected with a chemical that artificially induces synaptic potentiation, " +
|
||||
"otherwise known as the strengthening of synapses. This results in a enhanced cognitive abilities.<br><br>" +
|
||||
"This augmentation increases the player's hacking speed and hacking chance by 2%.");
|
||||
@ -417,7 +417,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(ArtificialSynapticPotentiation);
|
||||
|
||||
var EnhancedMyelinSheathing = new Augmentation(AugmentationNames.EnhancedMyelinSheathing);
|
||||
EnhancedMyelinSheathing.setRequirements(250000, 850000000);
|
||||
EnhancedMyelinSheathing.setRequirements(100000, 350000000);
|
||||
EnhancedMyelinSheathing.setInfo("Electrical signals are used to induce a new, artificial form of myelinogensis in the human body. " +
|
||||
"This process results in the proliferation of new, synthetic myelin sheaths in the nervous " +
|
||||
"system. These myelin sheaths can propogate neuro-signals much faster than their organic " +
|
||||
@ -434,7 +434,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(EnhancedMyelinSheathing);
|
||||
|
||||
var SynapticEnhancement = new Augmentation(AugmentationNames.SynapticEnhancement);
|
||||
SynapticEnhancement.setRequirements(1500, 1200000);
|
||||
SynapticEnhancement.setRequirements(1000, 1200000);
|
||||
SynapticEnhancement.setInfo("A small cranial implant that continuously uses weak electric signals to stimulate the brain and " +
|
||||
"induce stronger synaptic activity. This improves the user's cognitive abilities.<br><br>" +
|
||||
"This augmentation increases the player's hacking speed by 1%.");
|
||||
@ -471,7 +471,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(DataJack);
|
||||
|
||||
var ENM = new Augmentation(AugmentationNames.ENM);
|
||||
ENM.setRequirements(8000, 100000000);
|
||||
ENM.setRequirements(6000, 40000000);
|
||||
ENM.setInfo("A thin device embedded inside the arm containing a wireless module capable of connecting " +
|
||||
"to nearby networks. Once connected, the Netburner Module is capable of capturing and " +
|
||||
"processing all of the traffic on that network. By itself, the Embedded Netburner Module does " +
|
||||
@ -591,7 +591,7 @@ initAugmentations = function() {
|
||||
|
||||
//Work Augmentations
|
||||
var NuoptimalInjectorImplant = new Augmentation(AugmentationNames.NuoptimalInjectorImplant);
|
||||
NuoptimalInjectorImplant.setRequirements(5000, 12000000);
|
||||
NuoptimalInjectorImplant.setRequirements(5000, 10000000);
|
||||
NuoptimalInjectorImplant.setInfo("This torso implant automatically injects nootropic supplements into " +
|
||||
"the bloodstream to improve memory, increase focus, and provide other " +
|
||||
"cognitive enhancements.<br><br>" +
|
||||
@ -606,7 +606,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(NuoptimalInjectorImplant);
|
||||
|
||||
var SpeechEnhancement = new Augmentation(AugmentationNames.SpeechEnhancement);
|
||||
SpeechEnhancement.setRequirements(2000, 3000000);
|
||||
SpeechEnhancement.setRequirements(2000, 2000000);
|
||||
SpeechEnhancement.setInfo("An advanced neural implant that improves your speaking abilities, making " +
|
||||
"you more convincing and likable in conversations and overall improving your " +
|
||||
"social interactions.<br><br>" +
|
||||
@ -700,7 +700,7 @@ initAugmentations = function() {
|
||||
|
||||
//HacknetNode Augmentations
|
||||
var HacknetNodeCPUUpload = new Augmentation(AugmentationNames.HacknetNodeCPUUpload);
|
||||
HacknetNodeCPUUpload.setRequirements(3000, 5000000);
|
||||
HacknetNodeCPUUpload.setRequirements(3000, 4000000);
|
||||
HacknetNodeCPUUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's CPU into " +
|
||||
"the brain. This allows the user to engineer custom hardware and software " +
|
||||
"for the Hacknet Node that provides better performance.<br><br>" +
|
||||
@ -715,7 +715,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(HacknetNodeCPUUpload);
|
||||
|
||||
var HacknetNodeCacheUpload = new Augmentation(AugmentationNames.HacknetNodeCacheUpload);
|
||||
HacknetNodeCacheUpload.setRequirements(1500, 2500000);
|
||||
HacknetNodeCacheUpload.setRequirements(1500, 2000000);
|
||||
HacknetNodeCacheUpload.setInfo("Uploads the architecture and design details of a Hacknet Node's main-memory cache " +
|
||||
"into the brain. This allows the user to engineer custom cache hardware for the " +
|
||||
"Hacknet Node that offers better performance.<br><br>" +
|
||||
@ -745,7 +745,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(HacknetNodeNICUpload);
|
||||
|
||||
var HacknetNodeKernelDNI = new Augmentation(AugmentationNames.HacknetNodeKernelDNI);
|
||||
HacknetNodeKernelDNI.setRequirements(8000, 30000000);
|
||||
HacknetNodeKernelDNI.setRequirements(5000, 15000000);
|
||||
HacknetNodeKernelDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting to a " +
|
||||
"Hacknet Node. This lets the user access and manipulate the Node's kernel using the mind's " +
|
||||
"electrochemical signals.<br><br>" +
|
||||
@ -758,7 +758,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(HacknetNodeKernelDNI);
|
||||
|
||||
var HacknetNodeCoreDNI = new Augmentation(AugmentationNames.HacknetNodeCoreDNI);
|
||||
HacknetNodeCoreDNI.setRequirements(12000, 50000000);
|
||||
HacknetNodeCoreDNI.setRequirements(10000, 40000000);
|
||||
HacknetNodeCoreDNI.setInfo("Installs a Direct-Neural Interface jack into the arm that is capable of connecting " +
|
||||
"to a Hacknet Node. This lets the user access and manipulate the Node's processing logic using " +
|
||||
"the mind's electrochemical signals.<br><br>" +
|
||||
@ -777,10 +777,10 @@ initAugmentations = function() {
|
||||
NeuroFluxGovernor.owned = oldAug.owned;
|
||||
NeuroFluxGovernor.level = oldAug.level;
|
||||
mult = Math.pow(CONSTANTS.NeuroFluxGovernorLevelMult, NeuroFluxGovernor.level);
|
||||
NeuroFluxGovernor.setRequirements(1000 * mult, 1000000 * mult);
|
||||
NeuroFluxGovernor.setRequirements(500 * mult, 750000 * mult);
|
||||
delete Augmentations[AugmentationNames.NeuroFluxGovernor];
|
||||
} else {
|
||||
NeuroFluxGovernor.setRequirements(750, 1000000);
|
||||
NeuroFluxGovernor.setRequirements(50, 750000);
|
||||
}
|
||||
NeuroFluxGovernor.setInfo("A device that is embedded in the back of the neck. The NeuroFlux Governor " +
|
||||
"monitors and regulates nervous impulses coming to and from the spinal column, " +
|
||||
@ -806,7 +806,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(Neurotrainer1);
|
||||
|
||||
var Neurotrainer2 = new Augmentation(AugmentationNames.Neurotrainer2);
|
||||
Neurotrainer2.setRequirements(4000, 10000000);
|
||||
Neurotrainer2.setRequirements(4000, 8000000);
|
||||
Neurotrainer2.setInfo("A decentralized cranial implant that improves the brain's ability to learn. This " +
|
||||
"is a more powerful version of the Neurotrainer I augmentation, but it does not " +
|
||||
"require Neurotrainer I to be installed as a prerequisite.<br><br>" +
|
||||
@ -819,7 +819,7 @@ initAugmentations = function() {
|
||||
AddToAugmentations(Neurotrainer2);
|
||||
|
||||
var Neurotrainer3 = new Augmentation(AugmentationNames.Neurotrainer3);
|
||||
Neurotrainer3.setRequirements(12000, 50000000);
|
||||
Neurotrainer3.setRequirements(12000, 25000000);
|
||||
Neurotrainer3.setInfo("A decentralized cranial implant that improves the brain's ability to learn. This " +
|
||||
"is a more powerful version of the Neurotrainer I and Neurotrainer II augmentation, " +
|
||||
"but it does not require either of them to be installed as a prerequisite.<br><br>" +
|
||||
|
@ -33,10 +33,11 @@ function evaluate(exp, workerScript) {
|
||||
//Can currently only assign to "var"s
|
||||
case "assign":
|
||||
return new Promise(function(resolve, reject) {
|
||||
console.log("Evaluating assign");
|
||||
if (env.stopFlag) {reject(workerScript);}
|
||||
|
||||
if (exp.left.type != "var")
|
||||
throw new Error("|" + workerScript.serverIp + "|" + workerScript.name + "| Cannot assign to " + JSON.stringify(exp.left));
|
||||
reject("|" + workerScript.serverIp + "|" + workerScript.name + "| Cannot assign to " + JSON.stringify(exp.left));
|
||||
|
||||
var p = new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
@ -53,6 +54,7 @@ function evaluate(exp, workerScript) {
|
||||
try {
|
||||
env.set(exp.left.value, expRight);
|
||||
} catch (e) {
|
||||
console.log("here");
|
||||
throw new Error("|" + workerScript.serverIp + "|" + workerScript.name + "|" + e.toString());
|
||||
}
|
||||
resolve(false); //Return false so this doesnt cause loops/ifs to evaluate
|
||||
@ -106,29 +108,38 @@ function evaluate(exp, workerScript) {
|
||||
//TODO
|
||||
case "if":
|
||||
return new Promise(function(resolve, reject) {
|
||||
console.log("Evaluating if");
|
||||
var numConds = exp.cond.length;
|
||||
var numThens = exp.then.length;
|
||||
if (numConds == 0 || numThens == 0 || numConds != numThens) {
|
||||
console.log("Number of ifs and conds dont match. Rejecting");
|
||||
reject("|" + workerScript.serverIp + "|" + workerScript.name + "|Number of conds and thens in if structure don't match (or there are none)");
|
||||
}
|
||||
|
||||
for (var i = 0; i < numConds; i++) {
|
||||
var cond = evaluate(exp.cond[i], workerScript);
|
||||
cond.then(function(condRes) {
|
||||
if (cond) {
|
||||
return evaluate(exp.then[i], workerScript);
|
||||
}
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//Evaluate else if it exists, snce none of the conditionals
|
||||
//were true
|
||||
if (exp.else) {
|
||||
return evaluate(exp.else, workerScript);
|
||||
}
|
||||
var evalIfPromise = evaluateIf(exp, workerScript, 0);
|
||||
evalIfPromise.then(function(res) {
|
||||
if (res) {
|
||||
//One of the if/elif statements evaluated to true
|
||||
console.log("done with if");
|
||||
resolve("if statement done");
|
||||
} else {
|
||||
//None of the if/elif statements were true. Evaluate else if there is one
|
||||
if (exp.else) {
|
||||
var elseEval = evaluate(exp.else, workerScript);
|
||||
elseEval.then(function(res) {
|
||||
console.log("if statement done with else");
|
||||
resolve("if statement done with else");
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
} else {
|
||||
console.log("no else statement, resolving");
|
||||
resolve("if statement done");
|
||||
}
|
||||
}
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
});
|
||||
break;
|
||||
case "for":
|
||||
@ -635,6 +646,48 @@ function evaluate(exp, workerScript) {
|
||||
}
|
||||
}
|
||||
|
||||
//Returns true if any of the if statements evaluated, false otherwise. Therefore, the else statement
|
||||
//should evaluate if this returns false
|
||||
function evaluateIf(exp, workerScript, i) {
|
||||
var env = workerScript.env;
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (i >= exp.cond.length) {
|
||||
//Catch out of bounds errors
|
||||
resolve(false);
|
||||
} else {
|
||||
console.log("Evaluating cond " + i + " in if");
|
||||
var cond = evaluate(exp.cond[i], workerScript);
|
||||
cond.then(function(condRes) {
|
||||
console.log("cond evaluated to: " + condRes);
|
||||
if (condRes) {
|
||||
console.log("Evaluating then: " + exp.then[i]);
|
||||
var evalThen = evaluate(exp.then[i], workerScript);
|
||||
evalThen.then(function(res) {
|
||||
console.log("If statement done");
|
||||
resolve(true);
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
} else {
|
||||
//If this if statement isnt true, go on the next elif, or recursively resolve
|
||||
if (i == exp.cond.length-1) {
|
||||
resolve(false);
|
||||
} else {
|
||||
var recursiveCall = evaluateIf(exp, workerScript, i+1);
|
||||
recursiveCall.then(function(res) {
|
||||
resolve(res);
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
}
|
||||
}
|
||||
}, function(e) {
|
||||
reject(e);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//Evaluate the looping part of a for loop (Initialization block is NOT done in here)
|
||||
function evaluateFor(exp, workerScript) {
|
||||
var env = workerScript.env;
|
||||
|
@ -31,6 +31,7 @@ function runScriptsLoop() {
|
||||
if (workerScripts[i].running == false && workerScripts[i].env.stopFlag == false) {
|
||||
try {
|
||||
var ast = Parser(Tokenizer(InputStream(workerScripts[i].code)));
|
||||
console.log(ast);
|
||||
} catch (e) {
|
||||
dialogBoxCreate("Syntax ERROR in " + workerScripts[i].name + ":", e, "", "");
|
||||
workerScripts[i].env.stopFlag = true;
|
||||
|
@ -114,9 +114,11 @@ function Parser(input) {
|
||||
|
||||
//Conditional
|
||||
var cond = parse_expression();
|
||||
console.log("cond: " + cond);
|
||||
|
||||
//Body
|
||||
var then = parse_expression();
|
||||
console.log("then: " + then);
|
||||
var ret = {
|
||||
type: "if",
|
||||
cond: [],
|
||||
|
@ -129,6 +129,8 @@ function prestigeAugmentation() {
|
||||
for (var i = 0; i < homeComp.scripts.length; ++i) {
|
||||
var s = homeComp.scripts[i];
|
||||
s.reset();
|
||||
delete s.moneyStolenMap;
|
||||
s.moneyStolenMap = new AllServersToMoneyMap();
|
||||
}
|
||||
|
||||
//Delete all running scripts objects
|
||||
|
@ -136,6 +136,8 @@ Script.prototype.saveScript = function() {
|
||||
this.onlineRunningTime = 0.01; //Seconds
|
||||
this.onlineMoneyMade = 0;
|
||||
this.lastUpdate = 0;
|
||||
|
||||
this.logs = [];
|
||||
}
|
||||
}
|
||||
|
||||
@ -146,9 +148,6 @@ Script.prototype.reset = function() {
|
||||
this.onlineRunningTime = 0.01; //Seconds
|
||||
this.onlineMoneyMade = 0;
|
||||
this.onlineExpGained = 0;
|
||||
|
||||
this.moneyStolenMap = new AllServersToMoneyMap();
|
||||
console.log("Reset moneyStolenMap: " + this.moneyStolenMap);
|
||||
}
|
||||
|
||||
//Calculates the number of instructions, which is just determined by number of semicolons
|
||||
|
Reference in New Issue
Block a user