UI Improvements. Added two new Netscript functions to purchase Hacknet Nodes

This commit is contained in:
Daniel Xie
2017-05-20 04:27:42 -05:00
parent c454e3729b
commit 4d0ee212be
7 changed files with 102 additions and 8 deletions

@ -225,6 +225,7 @@ tr:focus {
/* Character Overview */
#character-overview-container {
display: none;
position: fixed; /* Stay in place */
right: 0;
top: 0;

@ -1307,8 +1307,8 @@ initAugmentations = function() {
"the user's organic arms. <br><br>" +
"This augmentation increases the user's strength and dexterity by 50%");
BionicArms.setRequirements(25000, 45000000);
BionicArms.addTofactions(["Tetrads"]);
if (augmetationExists(AugmentationNames.BionicArms)) {
BionicArms.addToFactions(["Tetrads"]);
if (augmentationExists(AugmentationNames.BionicArms)) {
BionicArms.owned = Augmentations[AugmentationNames.BionicArms].owned;
delete Augmentations[AugmentationNames.BionicArms];
}

@ -1,5 +1,5 @@
CONSTANTS = {
Version: "0.10",
Version: "0.11",
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then

@ -415,9 +415,11 @@ updateHacknetNodeDomElement = function(nodeObj) {
}
processAllHacknetNodeEarnings = function(numCycles) {
var total = 0;
for (var i = 0; i < Player.hacknetNodes.length; ++i) {
processSingleHacknetNodeEarnings(numCycles, Player.hacknetNodes[i]);
total += processSingleHacknetNodeEarnings(numCycles, Player.hacknetNodes[i]);
}
return total;
}
processSingleHacknetNodeEarnings = function(numCycles, nodeObj) {
@ -428,4 +430,14 @@ processSingleHacknetNodeEarnings = function(numCycles, nodeObj) {
nodeObj.totalMoneyGenerated += totalEarnings;
nodeObj.onlineTimeSeconds += (numCycles * (Engine._idleSpeed / 1000));
Player.gainMoney(totalEarnings);
return totalEarnings;
}
getHacknetNode = function(name) {
for (var i = 0; i < Player.hacknetNodes.length; ++i) {
if (Player.hacknetNodes[i].name == name) {
return player.hacknetNodes[i];
}
}
return null;
}

@ -690,6 +690,7 @@ function evaluate(exp, workerScript) {
} else if (exp.func.value == "getServerMoneyAvailable") {
if (exp.args.length != 1) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|getServerMoneyAvailable() call has incorrect number of arguments. Takes 1 arguments");
return;
}
var ipPromise = evaluate(exp.args[0], workerScript);
ipPromise.then(function(ip) {
@ -706,6 +707,69 @@ function evaluate(exp, workerScript) {
}, function(e) {
reject(e);
});
} else if (exp.func.value == "purchaseHacknetNode") {
if (exp.args.length != 0) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|purchaseHacknetNode() call has incorrect number of arguments. Takes 0 arguments");
return;
}
setTimeout(function() {
var cost = getCostOfNextHacknetNode();
if (isNaN(cost)) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|Could not calculate cost in purchaseHacknetNode(). This is a bug please report to game dev");
return;
}
if (cost > Player.money) {
workerScript.scriptRef.log("Could not afford to purchase new Hacknet Node");
resolve(-1);
}
//Auto generate a name for the node for now...TODO
var numOwned = Player.hacknetNodes.length;
var name = "hacknet-node-" + numOwned;
var node = new HacknetNode(name);
node.updateMoneyGainRate();
Player.loseMoney(cost);
Player.hacknetNodes.push(node);
workerScript.scriptRef.log("Purchased new Hacknet Node with name: " + name);
resolve(numOwned);
}, CONSTANTS.CodeInstructionRunTime);
} else if (exp.func.value == "upgradeHacknetNode") {
if (exp.args.length != 1) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|upgradeHacknetNode() call has incorrect number of arguments. Takes 1 argument");
return;
}
var namePromise = evaluate(exp.args[0], workerScript);
namePromise.then(function(name) {
var node = getHacknetNode(name);
if (node == null) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|Invalid Hacknet Node name passed into upgradeHacknetNode()");
return;
}
var cost = node.calculateLevelUpgradeCost(1);
if (isNaN(cost)) {
reject("|"+workerScript.serverIp+"|"+workerScript.name+"|Could not calculate cost in upgradeHacknetNode(). This is a bug please report to game dev");
return;
}
if (cost > Player.money) {
workerScript.scriptRef.log("Could not afford to upgrade Hacknet Node: " + name);
resolve(false);
return;
}
if (node.level >= CONSTANTS.HacknetNodeMaxLevel) {
workerScript.scriptRef.log("Hacknet Node " + name + " already at max level");
node.level = CONSTANTS.HacknetNodeMaxLevel;
resolve(false);
return;
}
Player.loseMoney(cost);
node.level += 1;
node.updateMoneyGainRate();
workerScript.scriptRef.log("Hacknet node " + name + " upgraded to level " + node.level + "!");
resolve(true);
}, function(e) {
reject(e);
});
}
}, CONSTANTS.CodeInstructionRunTime);
});

@ -239,6 +239,7 @@ Reviver.constructors.Script = Script;
//into worker scripts so that they will start running
loadAllRunningScripts = function() {
var count = 0;
var total = 0;
for (var property in AllServers) {
if (AllServers.hasOwnProperty(property)) {
var server = AllServers[property];
@ -254,10 +255,11 @@ loadAllRunningScripts = function() {
addWorkerScript(script, server);
//Offline production
scriptCalculateOfflineProduction(script);
total += scriptCalculateOfflineProduction(script);
}
}
}
return total;
console.log("Loaded " + count.toString() + " running scripts");
}
@ -305,7 +307,7 @@ scriptCalculateOfflineProduction = function(script) {
script.offlineMoneyMade += totalOfflineProduction;
script.offlineRunningTime += timePassed;
script.offlineExpGained += expGain;
return totalOfflineProduction;
//DEBUG
var serverName = AllServers[script.server].hostname;
console.log(script.filename + " from server " + serverName + " generated $" + totalOfflineProduction + " TOTAL while offline");

@ -736,7 +736,7 @@ var Engine = {
/* Process offline progress */
processServerGrowth(numCyclesOffline); //Should be done before offline production for scripts
loadAllRunningScripts(); //This also takes care of offline production for those scripts
var offlineProductionFromScripts = loadAllRunningScripts(); //This also takes care of offline production for those scripts
if (Player.isWorking) {
console.log("work() called in load() for " + numCyclesOffline * Engine._idleSpeed + " milliseconds");
if (Player.workType == CONSTANTS.WorkTypeFaction) {
@ -755,7 +755,7 @@ var Engine = {
}
//Hacknet Nodes offline progress
processAllHacknetNodeEarnings(numCyclesOffline);
var offlineProductionFromHacknetNodes = processAllHacknetNodeEarnings(numCyclesOffline);
//Passive faction rep gain offline
processPassiveFactionRepGain(numCyclesOffline);
@ -767,6 +767,9 @@ var Engine = {
Player.lastUpdate = Engine._lastUpdate;
Engine.start(); //Run main game loop and Scripts loop
dialogBoxCreate("While you were offline, your scripts generated $" +
formatNumber(offlineProductionFromScripts, 2) + " and your Hacknet Nodes generated $" +
formatNumber(offlineProductionFromHacknetNodes, 2));
} else {
//No save found, start new game
console.log("Initializing new game");
@ -1046,6 +1049,18 @@ var Engine = {
Engine.loadWorkInProgressContent();
}
//character overview screen
document.getElementById("character-overview-container").style.display = "block";
//Remove classes from links (they might be set from tutorial)
document.getElementById("terminal-menu-link").removeAttribute("class");
document.getElementById("character-menu-link").removeAttribute("class");
document.getElementById("create-script-menu-link").removeAttribute("class");
document.getElementById("active-scripts-menu-link").removeAttribute("class");
document.getElementById("hacknet-nodes-menu-link").removeAttribute("class");
document.getElementById("world-menu-link").removeAttribute("class");
document.getElementById("tutorial-menu-link").removeAttribute("class");
//DEBUG
document.getElementById("debug-delete-scripts-link").addEventListener("click", function() {
Player.getHomeComputer().runningScripts = [];