mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-20 05:05:47 +01:00
Updated Netscript documentation for new Hacknet Node 'API'. Adde game options
This commit is contained in:
parent
8cd9e8954d
commit
bfba6a3d5b
@ -286,7 +286,7 @@
|
||||
color: #66ff33;
|
||||
}
|
||||
|
||||
#trave-l-box-text {
|
||||
#travel-box-text {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
@ -314,3 +314,51 @@
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Game Options */
|
||||
#game-options-container {
|
||||
display: none; /* Hidden by default */
|
||||
position: fixed; /* Stay in place */
|
||||
z-index: 1; /* Sit on top */
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
width: 100%; /* Full width */
|
||||
height: 100%; /* Full height */
|
||||
overflow: auto; /* Enable scroll if needed */
|
||||
background-color: black; /* Fallback color */
|
||||
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
|
||||
transition: opacity 400ms ease-in;
|
||||
}
|
||||
|
||||
#game-options-content {
|
||||
background-color: black;
|
||||
margin: 15% auto; /* 15% from the top and centered */
|
||||
padding: 10px;
|
||||
border: 5px solid #FFFFFF;
|
||||
width: 50%; /* Could be more or less, depending on screen size */
|
||||
color: #66ff33;
|
||||
}
|
||||
|
||||
#game-options-close-button {
|
||||
color: #aaa;
|
||||
float: right;
|
||||
margin: 4px;
|
||||
padding: 4px;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
-webkit-border-radius: 12px;
|
||||
-moz-border-radius: 12px;
|
||||
border-radius: 12px white;
|
||||
-moz-box-shadow: 1px 1px 3px #000;
|
||||
-webkit-box-shadow: 1px 1px 3px #000;
|
||||
box-shadow: 1px 1px 3px #000;
|
||||
}
|
||||
|
||||
#game-options-close-button:hover,
|
||||
#game-options-close-button:focus {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
@ -241,7 +241,7 @@ tr:focus {
|
||||
position: absolute; /* Stay in place */
|
||||
right: 0;
|
||||
top: 0;
|
||||
height: 150px; /* Full height */
|
||||
height: 175px; /* Full height */
|
||||
/*margin: 50% auto;*/
|
||||
padding: 5px;
|
||||
border: 2px solid #66ff33;
|
||||
@ -257,3 +257,22 @@ tr:focus {
|
||||
color: white;
|
||||
background-color: #444;
|
||||
}
|
||||
|
||||
#character-overview-save-button {
|
||||
color: #aaa;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
-webkit-border-radius: 12px;
|
||||
-moz-border-radius: 12px;
|
||||
border-radius: 12px;
|
||||
-moz-box-shadow: 1px 1px 3px #000;
|
||||
-webkit-box-shadow: 1px 1px 3px #000;
|
||||
box-shadow: 1px 1px 3px #000;
|
||||
}
|
||||
|
||||
#character-overview-save-button:hover,
|
||||
#character-overview-save-button:focus {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
27
index.html
27
index.html
@ -24,6 +24,7 @@
|
||||
<script src="utils/PurchaseAugmentationBox.js"></script>
|
||||
<script src="utils/TravelBox.js"></script>
|
||||
<script src="utils/PurchaseRamForHomeBox.js"></script>
|
||||
<script src="utils/GameOptions.js"></script>
|
||||
|
||||
<!-- Netscript -->
|
||||
<script src="src/NetscriptWorker.js"></script>
|
||||
@ -106,18 +107,9 @@
|
||||
<a href="#" id="tutorial-menu-link"> Tutorial </a>
|
||||
</li>
|
||||
|
||||
<li class="save-game-tab">
|
||||
<a href="#" id="save-game-link"> Save Game </a>
|
||||
<li class="options-tab">
|
||||
<a id="options-menu-link"> Options </a>
|
||||
</li>
|
||||
|
||||
<li class="delete-game-tab">
|
||||
<a href="#" id="delete-game-link"> Delete Game </a>
|
||||
</li>
|
||||
|
||||
<li class="debug-delete-scripts-tab">
|
||||
<a href="#" id="debug-delete-scripts-link"> (DEBUG) Delete Active Scripts </a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -739,6 +731,7 @@
|
||||
<div id="character-overview-wrapper">
|
||||
<div id="character-overview-container">
|
||||
<p id="character-overview-text"> </p>
|
||||
<span id="character-overview-save-button"> Save Game </span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -747,5 +740,17 @@
|
||||
<p id="status-text">Test </p>
|
||||
</div>
|
||||
|
||||
<!-- Game Options -->
|
||||
<div id="game-options-container">
|
||||
<div id="game-options-content" class="game-options-box">
|
||||
<span id="game-options-close-button">×</span>
|
||||
<h1> Game Options </h1>
|
||||
<br>
|
||||
<a id="save-game-link" class="a-link-button" style="display:block;"> Save Game </a>
|
||||
<a id="delete-game-link" class="a-link-button" style="display:block;"> Delete Game </a>
|
||||
<a id="debug-delete-scripts-link" class="a-link-button" style="display:block;"> (DEBUG) Delete Active Scripts </a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -286,20 +286,49 @@ CONSTANTS = {
|
||||
"<i>getHackingLevel() </i><br> Returns the Player's current hacking level. Does NOT work while offline <br><br> " +
|
||||
"<i>getServerMoneyAvailable(hostname/ip)</i><br> Returns the amount of money available on a server. The argument passed in must be a string with either the " +
|
||||
"hostname or IP of the target server. Does NOT work while offline <br> Example: getServerMoneyAvailable('foodnstuff');<br><br>" +
|
||||
"<i>purchaseHacknetNode()</i><br> Purchases a new Hacknet Node. Returns a string with the name of the new Hacknet Node. If the player cannot afford to purchase " +
|
||||
"a new hacknet node then the function will return an empty string. Does NOT work offline<br><br>" +
|
||||
"<i>upgradeHacknetNode(name)</i><br> Upgrades the level of a Hacknet Node. The argument passed in must be a string with the name of the Hacknet Node to upgrade. " +
|
||||
"If the Hacknet Node is successfully upgraded the function will return true. It will return false otherwise. Does NOT work offline. Example: <br>" +
|
||||
"node = purchaseHacknetNode();<br>" +
|
||||
"if (node != '') {<br>" +
|
||||
" i = 0;<br>" +
|
||||
" while(i < 10) {<br>" +
|
||||
" if (upgradeHacknetNode(node)) {i = i + 1;}<br>" +
|
||||
" }; <br>" +
|
||||
"<i>purchaseHacknetNode()</i><br> Purchases a new Hacknet Node. Returns a number with the index of the Hacknet Node. This index is equivalent to the number " +
|
||||
"at the 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. Does NOT work offline<br><br>" +
|
||||
"<u><h1>Hacknet Nodes API</h1></u><br>" +
|
||||
"Netscript provides the following API for accessing and upgrading your Hacknet Nodes through scripts. This API does NOT work offline.<br><br>" +
|
||||
"<i>hacknetnodes</i><br> A special variable. This is an array that maps to the Player's Hacknet Nodes. The Hacknet Nodes are accessed through " +
|
||||
"indexes. These indexes correspond to the number at the end of the name of the Hacknet Node. For example, the first Hacknet Node you purchase " +
|
||||
"will have the same 'hacknet-node-0' and can be accessed with hacknetnodes[0]. The fourth Hacknet Node you purchase will have the name " +
|
||||
"'hacknet-node-3' and can be accessed with hacknetnodes[3]. <br><br>" +
|
||||
"<i>hacknetnodes.length</i><br> Returns the number of Hacknet Nodes that the player owns<br><br>" +
|
||||
"<i>hacknetnodes[i].level</i><br> Returns the level of the corresponding Hacknet Node<br><br>" +
|
||||
"<i>hacknetnodes[i].ram</i><br> Returns the amount of RAM on the corresponding Hacknet Node<br><br>" +
|
||||
"<i>hacknetnodes[i].cores</i><br> Returns the number of cores on the corresponding Hacknet Node<br><br>" +
|
||||
"<i>hacknetnodes[i].upgradeLevel(n)</i><br> Tries to upgrade the level of the corresponding Hacknet Node n times. The argument n must be a " +
|
||||
"positive integer. Returns true if the Hacknet Node's level is successfully upgraded n times, and false otherwise.<br><br>" +
|
||||
"<i>hacknetnodes[i].upgradeRam()</i><br> Tries to upgrade the amount of RAM on the corresponding Hacknet Node. Returns true if the " +
|
||||
"RAM is successfully upgraded, and false otherwise. <br><br>" +
|
||||
"<i>hacknetnodes[i].upgradeCore()</i><br> Attempts to purchase an additional core for the corresponding Hacknet Node. Returns true if the " +
|
||||
"additional core is successfully purchase, and false otherwise. <br><br>" +
|
||||
"Example: The following is an example of one way a script can be used to automate the purchasing and upgrading of Hacknet Nodes. " +
|
||||
"This script purchases new Hacknet Nodes until the player has four. Then, it iteratively upgrades each of those four Hacknet Nodes " +
|
||||
"to a level of at least 75, RAM to at least 8GB, and number of cores to at least 2.<br><br>" +
|
||||
"while(hacknetnodes.length < 4) {<br>" +
|
||||
" purchaseHacknetNode();<br>" +
|
||||
"};<br>" +
|
||||
"for (i = 0; i < 4; i = i+1) {<br>" +
|
||||
" while (hacknetnodes[i].level <= 75) {<br>" +
|
||||
" hacknetnodes[i].upgradeLevel(5);<br>" +
|
||||
" sleep(10000);<br>" +
|
||||
" };<br>" +
|
||||
"};<br>" +
|
||||
"for (i = 0; i < 4; i = i+1) {<br>" +
|
||||
" while (hacknetnodes[i].ram < 8) {<br>" +
|
||||
" hacknetnodes[i].upgradeRam();<br>" +
|
||||
" sleep(10000);<br>" +
|
||||
" };<br>" +
|
||||
"};<br>" +
|
||||
"for (i = 0; i < 4; i = i+1) {<br>" +
|
||||
" while (hacknetnodes[i].cores < 2) {<br>" +
|
||||
" hacknetnodes[i].upgradeCore();<br>" +
|
||||
" sleep(10000);<br>" +
|
||||
" };<br>" +
|
||||
"};<br><br>" +
|
||||
"The example code above will attempt to purchase a new Hacknet Node. If the Hacknet Node is purchased, then it will " +
|
||||
"continuously try to level it up until it is leveled up 10 times. <br><br>" +
|
||||
"<i>getNumHacknetNodes()</i><br> returns the number of Hacknet Nodes that the Player owns. Does NOT work while offline<br><br>" +
|
||||
"<u><h1>While loops </h1></u><br>" +
|
||||
"A while loop is a control flow statement that repeatedly executes code as long as a condition is met. <br><br> " +
|
||||
"<i>while (<i>[cond]</i>) {<br> <i>[code]</i><br>}</i><br><br>" +
|
||||
|
@ -995,13 +995,13 @@ function evaluateHacknetNode(exp, workerScript) {
|
||||
if (exp.op.args.length == 1) {
|
||||
var argPromise = evaluate(exp.op.args[0], workerScript);
|
||||
argPromise.then(function(arg) {
|
||||
if (isNaN(arg)) {
|
||||
reject(makeRuntimeRejectMsg(workerScript, "Argument passed into upgradeLevel() is not numeric"));
|
||||
if (isNaN(arg) || arg < 0) {
|
||||
reject(makeRuntimeRejectMsg(workerScript, "Invalid argument passed into upgradeLevel()"));
|
||||
return;
|
||||
}
|
||||
var res = nodeObj.purchaseLevelUpgrade(arg);
|
||||
if (res) {
|
||||
workerScript.scriptRef.log("Upgraded " + nodeObj.name + arg + " times to level " + nodeObj.level);
|
||||
workerScript.scriptRef.log("Upgraded " + nodeObj.name + " " + arg + " times to level " + nodeObj.level);
|
||||
}
|
||||
resolve(res);
|
||||
}, function(e) {
|
||||
|
@ -31,7 +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);
|
||||
//console.log(ast);
|
||||
} catch (e) {
|
||||
dialogBoxCreate("Syntax ERROR in " + workerScripts[i].name + ":", e, "", "");
|
||||
workerScripts[i].env.stopFlag = true;
|
||||
|
@ -988,6 +988,12 @@ var Engine = {
|
||||
return false;
|
||||
});
|
||||
|
||||
//Character Overview Save button
|
||||
var charOverviewSaveButton = document.getElementById("character-overview-save-button");
|
||||
charOverviewSaveButton.addEventListener("click", function() {
|
||||
saveObject.saveGame();
|
||||
return false;
|
||||
});
|
||||
|
||||
//Script Editor Netscript documentation button
|
||||
var netscriptDocButton = document.getElementById("script-editor-netscript-doc-button");
|
||||
|
43
utils/GameOptions.js
Normal file
43
utils/GameOptions.js
Normal file
@ -0,0 +1,43 @@
|
||||
/* GameOptions.js */
|
||||
|
||||
//Close box when clicking outside
|
||||
$(document).click(function(event) {
|
||||
if (gameOptionsOpened) {
|
||||
if ( $(event.target).closest(".game-options-box").get(0) == null ) {
|
||||
gameOptionsBoxClose();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var gameOptionsOpened = false;
|
||||
function gameOptionsBoxInit() {
|
||||
//Menu link button
|
||||
document.getElementById("options-menu-link").addEventListener("click", function() {
|
||||
gameOptionsBoxOpen();
|
||||
return false;
|
||||
});
|
||||
|
||||
//Close button
|
||||
var closeButton = document.getElementById("game-options-close-button");
|
||||
closeButton.addEventListener("click", function() {
|
||||
gameOptionsBoxClose();
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
document.addEventListener("DOMContentLoaded", gameOptionsBoxInit, false);
|
||||
|
||||
gameOptionsBoxClose = function() {
|
||||
gameOptionsOpened = false;
|
||||
var box = document.getElementById("game-options-container");
|
||||
box.style.display = "none";
|
||||
}
|
||||
|
||||
gameOptionsBoxOpen = function() {
|
||||
var box = document.getElementById("game-options-container");
|
||||
box.style.display = "block";
|
||||
setTimeout(function() {
|
||||
gameOptionsOpened = true;
|
||||
}, 500);
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user