mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2025-03-07 11:04:36 +01:00
Refactored the hacking progress code into an action progress code so that it can be reused for analyze and anything else that requires an animated progress bar. Implemented analyze
This commit is contained in:
@ -55,8 +55,8 @@ var Player = {
|
|||||||
|
|
||||||
|
|
||||||
//Flag to let the engine know the player is starting a hack
|
//Flag to let the engine know the player is starting a hack
|
||||||
startHack: false,
|
startAction: false,
|
||||||
hackingTime: 0,
|
actionTime: 0,
|
||||||
|
|
||||||
|
|
||||||
init: function() {
|
init: function() {
|
||||||
@ -126,15 +126,19 @@ var Player = {
|
|||||||
return Math.round(Player.currentServer.hackDifficulty * Player.currentServer.requiredHackingSkill * Player.hacking_exp_mult);
|
return Math.round(Player.currentServer.hackDifficulty * Player.currentServer.requiredHackingSkill * Player.hacking_exp_mult);
|
||||||
},
|
},
|
||||||
|
|
||||||
//Hack a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for
|
//Hack/Analyze a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for
|
||||||
//This assumes that the server being hacked is not purchased by the player, that the player's hacking skill is greater than the
|
//This assumes that the server being hacked is not purchased by the player, that the player's hacking skill is greater than the
|
||||||
//required hacking skill and that the player has admin rights.
|
//required hacking skill and that the player has admin rights.
|
||||||
hack: function() {
|
hack: function() {
|
||||||
Player.hackingTime = Player.calculateHackingTime();
|
Player.actionTime = Player.calculateHackingTime();
|
||||||
console.log("Hacking time: " + Player.hackingTime);
|
console.log("Hacking time: " + Player.actionTime);
|
||||||
//Set the startHack flag so the engine starts the hacking process
|
//Set the startHack flag so the engine starts the hacking process
|
||||||
Player.startHack = true;
|
Player.startAction = true;
|
||||||
|
},
|
||||||
|
|
||||||
return Player.hackingTime;
|
analyze: function() {
|
||||||
|
//TODO Analyze only takes 5 seconds for now..maybe change this in the future?
|
||||||
|
Player.actionTime = 5;
|
||||||
|
Player.startAction = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -1,6 +1,6 @@
|
|||||||
//Terminal
|
//Terminal
|
||||||
var post = function(input) {
|
var post = function(input) {
|
||||||
$("#terminal-input").before('<tr class="posted"><td style="color: #66ff33;">' + input + '</td></tr>');
|
$("#terminal-input").before('<tr class="posted"><td style="color: #66ff33;">' + input.replace( / /g, " " ) + '</td></tr>');
|
||||||
window.scrollTo(0, document.body.scrollHeight);
|
window.scrollTo(0, document.body.scrollHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +34,19 @@ $(document).keyup(function(event) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var Terminal = {
|
var Terminal = {
|
||||||
|
//Flags to determine whether the player is currently running a hack or an analyze
|
||||||
|
hackFlag: false,
|
||||||
|
analyzeFlag: false,
|
||||||
|
|
||||||
|
finishAction: function() {
|
||||||
|
if (Terminal.hackFlag) {
|
||||||
|
Terminal.finishHack();
|
||||||
|
} else if (Terminal.analyzeFlag) {
|
||||||
|
Terminal.finishAnalyze();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
//Complete the hack/analyze command
|
||||||
finishHack: function() {
|
finishHack: function() {
|
||||||
console.log("Hack done. Determining success/failure of hack. Re-enabling terminal and changing the id of the hack progress bar");
|
console.log("Hack done. Determining success/failure of hack. Re-enabling terminal and changing the id of the hack progress bar");
|
||||||
|
|
||||||
@ -59,10 +72,53 @@ var Terminal = {
|
|||||||
post("Failed to hack " + Player.currentServer.hostname + ". Gained " + expGainedOnFailure + " hacking EXP");
|
post("Failed to hack " + Player.currentServer.hostname + ". Gained " + expGainedOnFailure + " hacking EXP");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Rename the progress bar so that the next hacks dont trigger it. Re-enable terminal
|
||||||
$("#hack-progress-bar").attr('id', "old-hack-progress-bar");
|
$("#hack-progress-bar").attr('id', "old-hack-progress-bar");
|
||||||
$("#hack-progress").attr('id', "old-hack-progress");
|
$("#hack-progress").attr('id', "old-hack-progress");
|
||||||
document.getElementById("terminal-input-td").innerHTML = '$ <input type="text" class="terminal-input"/>';
|
document.getElementById("terminal-input-td").innerHTML = '$ <input type="text" class="terminal-input"/>';
|
||||||
$('input[class=terminal-input]').prop('disabled', false);
|
$('input[class=terminal-input]').prop('disabled', false);
|
||||||
|
|
||||||
|
Terminal.hackFlag = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
finishAnalyze: function() {
|
||||||
|
post(Player.currentServer.hostname + ": ");
|
||||||
|
post("Required hacking skill: " + Player.currentServer.requiredHackingSkill);
|
||||||
|
//TODO Make these actual estimates by adding a random offset to result?
|
||||||
|
//TODO Change the text to sound better
|
||||||
|
post("Estimated chance to hack: " + Math.round(Player.calculateHackingChance() * 100) + "%");
|
||||||
|
post("Estimated time to hack: " + Math.round(Player.calculateHackingTime()) + " seconds");
|
||||||
|
post("Required number of open ports for PortHack: " +Player.currentServer.numOpenPortsRequired);
|
||||||
|
if (Player.currentServer.sshPortOpen) {
|
||||||
|
post("SSH port: Open")
|
||||||
|
} else {
|
||||||
|
post("SSH port: Closed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Player.currentServer.ftpPortOpen) {
|
||||||
|
post("FTP port: Open")
|
||||||
|
} else {
|
||||||
|
post("FTP port: Closed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Player.currentServer.smtpPortOpen) {
|
||||||
|
post("SMTP port: Open")
|
||||||
|
} else {
|
||||||
|
post("SMTP port: Closed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Player.currentServer.httpPortOpen) {
|
||||||
|
post("HTTP port: Open")
|
||||||
|
} else {
|
||||||
|
post("HTTP port: Closed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Player.currentServer.sqlPortOpen) {
|
||||||
|
post("SQL port: Open")
|
||||||
|
} else {
|
||||||
|
post("SQL port: Closed")
|
||||||
|
}
|
||||||
|
Terminal.analyzeFlag = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
executeCommand: function(command) {
|
executeCommand: function(command) {
|
||||||
@ -74,7 +130,18 @@ var Terminal = {
|
|||||||
|
|
||||||
switch (commandArray[0]) {
|
switch (commandArray[0]) {
|
||||||
case "analyze":
|
case "analyze":
|
||||||
//TODO Analyze the system for ports
|
//Analyze the current server for information
|
||||||
|
console.log("analyze terminal command called");
|
||||||
|
Terminal.analyzeFlag = true;
|
||||||
|
post("Analyzing system...");
|
||||||
|
hackProgressPost("Time left:");
|
||||||
|
hackProgressBarPost("[");
|
||||||
|
Player.analyze();
|
||||||
|
|
||||||
|
//Disable terminal
|
||||||
|
console.log("Disabling terminal");
|
||||||
|
document.getElementById("terminal-input-td").innerHTML = '<input type="text" class="terminal-input"/>';
|
||||||
|
$('input[class=terminal-input]').prop('disabled', true);
|
||||||
break;
|
break;
|
||||||
case "clear":
|
case "clear":
|
||||||
case "cls":
|
case "cls":
|
||||||
@ -119,9 +186,10 @@ var Terminal = {
|
|||||||
} else if (Player.currentServer.requiredHackingSkill > Player.hacking_skill) {
|
} else if (Player.currentServer.requiredHackingSkill > Player.hacking_skill) {
|
||||||
post("Your hacking skill is not high enough to attempt hacking this machine. Try analyzing the machine to determine the required hacking skill");
|
post("Your hacking skill is not high enough to attempt hacking this machine. Try analyzing the machine to determine the required hacking skill");
|
||||||
} else {
|
} else {
|
||||||
|
Terminal.hackFlag = true;
|
||||||
hackProgressPost("Time left:");
|
hackProgressPost("Time left:");
|
||||||
hackProgressBarPost("[");
|
hackProgressBarPost("[");
|
||||||
var timeToHack = Player.hack();
|
Player.hack();
|
||||||
|
|
||||||
//Disable terminal
|
//Disable terminal
|
||||||
console.log("Disabling terminal");
|
console.log("Disabling terminal");
|
||||||
@ -170,9 +238,29 @@ var Terminal = {
|
|||||||
}
|
}
|
||||||
//Displays available network connections using TCP
|
//Displays available network connections using TCP
|
||||||
console.log("netstat/scan terminal command called");
|
console.log("netstat/scan terminal command called");
|
||||||
post("Hostname IP");
|
post("Hostname IP Root Access");
|
||||||
for (var i = 0; i < Player.currentServer.serversOnNetwork.length; i++) {
|
for (var i = 0; i < Player.currentServer.serversOnNetwork.length; i++) {
|
||||||
post(Player.currentServer.serversOnNetwork[i].hostname + " " + Player.currentServer.serversOnNetwork[i].ip);
|
//Add hostname
|
||||||
|
var entry = Player.currentServer.serversOnNetwork[i].hostname;
|
||||||
|
|
||||||
|
//Calculate padding and add IP
|
||||||
|
var numSpaces = 21 - entry.length;
|
||||||
|
var spaces = Array(numSpaces+1).join(" ");
|
||||||
|
entry += spaces;
|
||||||
|
entry += Player.currentServer.serversOnNetwork[i].ip;
|
||||||
|
|
||||||
|
//Calculate padding and add root access info
|
||||||
|
var hasRoot;
|
||||||
|
if (Player.currentServer.serversOnNetwork[i].hasAdminRights) {
|
||||||
|
hasRoot = 'Y';
|
||||||
|
} else {
|
||||||
|
hasRoot = 'N';
|
||||||
|
}
|
||||||
|
numSpaces = 21 - Player.currentServer.serversOnNetwork[i].ip.length;
|
||||||
|
spaces = Array(numSpaces+1).join(" ");
|
||||||
|
entry += spaces;
|
||||||
|
entry += hasRoot;
|
||||||
|
post(entry);
|
||||||
}
|
}
|
||||||
case "ps":
|
case "ps":
|
||||||
//TODO
|
//TODO
|
||||||
|
@ -113,7 +113,8 @@ var Engine = {
|
|||||||
'Defense: ' + Player.defense + '<br><br>' +
|
'Defense: ' + Player.defense + '<br><br>' +
|
||||||
'Dexterity: ' + Player.dexterity + '<br><br>' +
|
'Dexterity: ' + Player.dexterity + '<br><br>' +
|
||||||
'Agility: ' + Player.agility + '<br><br>' +
|
'Agility: ' + Player.agility + '<br><br>' +
|
||||||
'Servers owned: ' + Player.purchasedServers.length + '<br><br>';
|
'Servers owned: ' + Player.purchasedServers.length + '<br><br>' +
|
||||||
|
'Hacking Experience: ' + Player.hacking_exp + '<br><br>';
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Main Event Loop */
|
/* Main Event Loop */
|
||||||
@ -135,14 +136,14 @@ var Engine = {
|
|||||||
var idleTime = Engine._idleSpeed - timeDifference;
|
var idleTime = Engine._idleSpeed - timeDifference;
|
||||||
|
|
||||||
//Manual hack
|
//Manual hack
|
||||||
if (Player.startHack == true) {
|
if (Player.startAction == true) {
|
||||||
Engine._totalHackTime = Player.hackingTime;
|
Engine._totalActionTime = Player.actionTime;
|
||||||
Engine._hackTimeLeft = Player.hackingTime;
|
Engine._actionTimeLeft = Player.actionTime;
|
||||||
Engine._manualHackInProgress = true;
|
Engine._actionInProgress = true;
|
||||||
Engine._hackProgressBarCount = 1;
|
Engine._actionProgressBarCount = 1;
|
||||||
Engine._hackProgressStr = "[ ]";
|
Engine._actionProgressStr = "[ ]";
|
||||||
Engine._hackTimeStr = "Time left: ";
|
Engine._actionTimeStr = "Time left: ";
|
||||||
Player.startHack = false;
|
Player.startAction = false;
|
||||||
|
|
||||||
//document.getElementById("hack-progress-bar").style.whiteSpace = "pre";
|
//document.getElementById("hack-progress-bar").style.whiteSpace = "pre";
|
||||||
}
|
}
|
||||||
@ -157,36 +158,36 @@ var Engine = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* Calculates the hack progress for a manual (non-scripted) hack and updates the progress bar/time accordingly */
|
/* Calculates the hack progress for a manual (non-scripted) hack and updates the progress bar/time accordingly */
|
||||||
_totalHackTime: 0,
|
_totalActionTime: 0,
|
||||||
_hackTimeLeft: 0,
|
_actionTimeLeft: 0,
|
||||||
_hackTimeStr: "Time left: ",
|
_actionTimeStr: "Time left: ",
|
||||||
_hackProgressStr: "[ ]",
|
_actionProgressStr: "[ ]",
|
||||||
_hackProgressBarCount: 1,
|
_actionProgressBarCount: 1,
|
||||||
_manualHackInProgress: false,
|
_actionInProgress: false,
|
||||||
updateHackProgress: function() {
|
updateHackProgress: function() {
|
||||||
if (Engine._manualHackInProgress == true) {
|
if (Engine._actionInProgress == true) {
|
||||||
Engine._hackTimeLeft -= (Engine._idleSpeed/ 1000); //Substract idle speed (ms)
|
Engine._actionTimeLeft -= (Engine._idleSpeed/ 1000); //Substract idle speed (ms)
|
||||||
|
|
||||||
//Calculate percent filled
|
//Calculate percent filled
|
||||||
var percent = Math.round((1 - Engine._hackTimeLeft / Engine._totalHackTime) * 100);
|
var percent = Math.round((1 - Engine._actionTimeLeft / Engine._totalActionTime) * 100);
|
||||||
|
|
||||||
//Update progress bar
|
//Update progress bar
|
||||||
while (Engine._hackProgressBarCount * 2 <= percent) {
|
while (Engine._actionProgressBarCount * 2 <= percent) {
|
||||||
Engine._hackProgressStr = Engine._hackProgressStr.replaceAt(Engine._hackProgressBarCount, "|");
|
Engine._actionProgressStr = Engine._actionProgressStr.replaceAt(Engine._actionProgressBarCount, "|");
|
||||||
Engine._hackProgressBarCount += 1;
|
Engine._actionProgressBarCount += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Update hack time remaining
|
//Update hack time remaining
|
||||||
Engine._hackTimeStr = "Time left: " + Math.max(0, Math.round(Engine._hackTimeLeft)).toString() + "s";
|
Engine._actionTimeStr = "Time left: " + Math.max(0, Math.round(Engine._actionTimeLeft)).toString() + "s";
|
||||||
document.getElementById("hack-progress").innerHTML = Engine._hackTimeStr;
|
document.getElementById("hack-progress").innerHTML = Engine._actionTimeStr;
|
||||||
|
|
||||||
//Dynamically update progress bar
|
//Dynamically update progress bar
|
||||||
document.getElementById("hack-progress-bar").innerHTML = Engine._hackProgressStr.replace( / /g, " " );
|
document.getElementById("hack-progress-bar").innerHTML = Engine._actionProgressStr.replace( / /g, " " );
|
||||||
|
|
||||||
//Once percent is 100, the hack is completed
|
//Once percent is 100, the hack is completed
|
||||||
if (percent >= 100) {
|
if (percent >= 100) {
|
||||||
Engine._manualHackInProgress = false;
|
Engine._actionInProgress = false;
|
||||||
Terminal.finishHack();
|
Terminal.finishAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user