"Here are some Terminal commands that are useful when working with scripts: <br><br>"+
"<i>check [script] [args...]</i><br>Prints the logs of the script specified by the name and arguments to Terminal. Arguments should be separated "+
"by a space. Note that scripts are uniquely "+
"identified by their arguments as well as their name. For example, if you ran a script 'foo.script' with the argument 'foodnstuff' then in order to 'check' it you must "+
"also add the 'foodnstuff' argument to the check command as so: <br>check foo.script foodnstuff<br><br>"+
"<i>free</i><br>Shows the current server's RAM usage and availability <br><br>"+
"<i>kill [script] [args...]</i><br>Stops a script that is running with the specified script name and arguments. "+
"Arguments should be separated by a space. Note that "+
"scripts are uniquely identified by their arguments as well as their name. For example, if you ran a script 'foo.script' with the "+
"argument 1 and 2, then just typing 'kill foo.script' will not work. You have to use 'kill foo.script 1 2'. <br><br>"+
"<i>mem [script] [-t] [n]</i><br>Check how much RAM a script requires to run with n threads<br><br>"+
"<i>nano [script]</i><br>Create/Edit a script. The name of the script must end with the '.script' extension <br><br>"+
"<i>ps</i><br>Displays all scripts that are actively running on the current server<br><br>"+
"<i>rm [script]</i><br>Delete a script<br><br>"+
"<i>run [script] [-t] [n] [args...]</i><br>Run a script with n threads and the specified arguments. Each argument should be separated by a space. "+
"Both the arguments and thread specification are optional. If neither are specified, then the script will be run single-threaded with no arguments.<br>"+
"Examples:<br>run foo.script<br>The command above will run 'foo.script' single-threaded with no arguments."+
"<br>run foo.script -t 10<br>The command above will run 'foo.script' with 10 threads and no arguments."+
"<br>run foo.script foodnstuff sigma-cosmetics 10<br>The command above will run 'foo.script' single-threaded with three arguments: [foodnstuff, sigma-cosmetics, 10]"+
"<br>run foo.script -t 50 foodnstuff<br>The command above will run 'foo.script' with 50 threads and a single argument: [foodnstuff]<br><br>"+
"<i>tail [script] [args...]</i><br>Displays the logs of the script specified by the name and arguments. Note that scripts are uniquely "+
"identified by their arguments as well as their name. For example, if you ran a script 'foo.script' with the argument 'foodnstuff' then in order to 'tail' it you must "+
"also add the 'foodnstuff' argument to the tail command as so: <br>tail foo.script foodnstuff<br><br>"+
"<i>top</i><br>Displays all active scripts and their RAM usage <br><br>"+
"<i>push(e)</i><br>Adds the element e to the end of the array.<br>"+
"The example below will create an array holding one element: the number 1. It will then push the number 2 onto the array. The result "+
"is that 'arr' will be an array of size 2 with arr[0] == 1 and arr[1] == 2<br><br>"+
"arr = Array[1];<br>arr.push(2);<br><br>"+
"<i>insert(e)</i><br>Inserts an element e into an array at a specified index. Every element in the array that is at or after "+
"the specified index is shifted down. The array must be indexed with the [] operator when using this function.<br>"+
"The following example will insert the number 2 into index 1 of the array. The result afterwards is that 'arr' will hold the values [1, 2, 3, 4].<br><br>"+
"For example, let's say we want to make a generic script 'generic-run.script' and we plan to pass two arguments into that script. The first argument will be the name of "+
"another script, and the second argument will be a number. This generic script will run the script specified in the first argument "+
"with the amount of threads specified in the second element. The code would look like:<br><br>"+
"run(args[0], args[1]);<br><br>"+
"It is also possible to get the number of arguments that was passed into a script using:<br><br>"+
"args.length<br><br>"+
"Note that none of the other functions that typically work with arrays, such as remove(), insert(), clear(), etc., will work on the "+
"<i>hack(hostname/ip)</i><br>Core function that is used to try and hack servers to steal money and gain hacking experience. The argument passed in must be a string with "+
"either the IP or hostname of the server you want to hack. The runtime for this command depends on your hacking level and the target server's security level. "+
" A script can hack a server from anywhere. It does not need to be running on the same server to hack that server. "+
"must be a string with either the IP or hostname of the target server. The runtime for this command depends on your hacking level and the target server's security level. "+
"<i>nuke(hostname/ip)</i><br>Run NUKE.exe on the target server. NUKE.exe must exist on your home computer. Does NOT work while offline <br> Example: nuke('foodnstuff'); <br><br>"+
"<i>brutessh(hostname/ip)</i><br>Run BruteSSH.exe on the target server. BruteSSH.exe must exist on your home computer. Does NOT work while offline <br> Example: brutessh('foodnstuff');<br><br>"+
"<i>ftpcrack(hostname/ip)</i><br>Run FTPCrack.exe on the target server. FTPCrack.exe must exist on your home computer. Does NOT work while offline <br> Example: ftpcrack('foodnstuff');<br><br>"+
"<i>relaysmtp(hostname/ip)</i><br>Run relaySMTP.exe on the target server. relaySMTP.exe must exist on your home computer. Does NOT work while offline <br> Example: relaysmtp('foodnstuff');<br><br>"+
"<i>httpworm(hostname/ip)</i><br>Run HTTPWorm.exe on the target server. HTTPWorm.exe must exist on your home computer. Does NOT work while offline <br> Example: httpworm('foodnstuff');<br><br>"+
"<i>sqlinject(hostname/ip)</i><br>Run SQLInject.exe on the target server. SQLInject.exe must exist on your home computer. Does NOT work while offline <br> Example: sqlinject('foodnstuff');<br><br>"+
"<i>run(script, [numThreads], [args...])</i> <br> Run a script as a separate process. The first argument that is passed in is the name of the script as a string. This function can only "+
"is optional, and it specifies how many threads to run the script with. This argument must be a number greater than 0. If it is omitted, then the script will be run single-threaded. Any additional arguments will specify "+
"arguments to pass into the new script that is being run. If arguments are specified for the new script, then the second argument numThreads argument must be filled in with a value.<br><br>"+
"of RAM to run this command. Does NOT work while offline <br><br>"+
"The simplest way to use the run command is to call it with just the script name. The following example will run 'foo.script' single-threaded with no arguments:<br><br>"+
"run('foo.script');<br><br>"+
"The following example will run 'foo.script' but with 5 threads instead of single-threaded:<br><br>"+
"run('foo.script', 5);<br><br>"+
"The following example will run 'foo.script' single-threaded, and will pass the string 'foodnstuff' into the script as an argument:<br><br>"+
"run('foo.script', 1, 'foodnstuff');<br><br>"+
"<i>exec(script, hostname/ip, [numThreads], [args...])</i><br>Run a script as a separate process on another server. The first argument is the name of the script as a string. The "+
"second argument is a string with the hostname or IP of the 'target server' on which to run the script. The specified script must exist on the target server. "+
"The third argument is optional, and it specifies how many threads to run the script with. If it is omitted, then the script will be run single-threaded. "+
"This argument must be a number that is greater than 0. Any additional arguments will specify arguments to pass into the new script that is being run. If "+
"true if the script is successfully started, and false otherwise. Does NOT work while offline<br><br> "+
"The simplest way to use the exec command is to call it with just the script name and the target server. The following example will try to run 'generic-hack.script' "+
"The following example will try to run the script 'foo.script' on the 'foodnstuff' server with 5 threads. It will also pass the number 1 and the string 'test' in as arguments "+
"<i>kill(script, hostname/ip, [args...])</i><br> Kills the script on the target server specified by the script's name and arguments. Remember that "+
"scripts are uniquely identified by both their name and arguments. For example, if 'foo.script' is run with the argument 1, then this is not the "+
"same as 'foo.script' run with the argument 2, even though they have the same code. <br><br>"+
"The first argument must be a string with the name of the script. The name is case-sensitive. "+
"The second argument must be a string with the hostname or IP of the target server. Any additional arguments to the function will specify the arguments passed "+
"into the script that should be killed. <br><br>The function will try to kill the specified script on the target server. "+
"If the script is found on the specified server and is running, then it will be killed and this function "+
"will return true. Otherwise, this function will return false. <br><br>"+
"Examples:<br>"+
"If you are trying to kill a script named 'foo.script' on the 'foodnstuff' server that was ran with no arguments, use this:<br><br>"+
"kill('foo.script', 'foodnstuff');<br><br>"+
"If you are trying to kill a script named 'foo.script' on the current server that was ran with no arguments, use this:<br><br>"+
"kill('foo.script', getHostname());<br><br>"+
"If you are trying to kill a script named 'foo.script' on the current server that was ran with the arguments 1 and 'foodnstuff', use this:<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 "+
"<i>getServerBaseSecurityLevel(hostname/ip)</i><br> Returns the base security level of a server. This is the security level that the server starts out with. "+
"This is different than getServerSecurityLevel() because getServerSecurityLevel() returns the current security level of a server, which can constantly change "+
"due to hack(), grow(), and weaken() calls on that server. The base security level will stay the same until you reset by installing an Augmentation. <br><br>"+
"The argument passed in must be a string with either the hostname or IP of the target server. A server's base security is denoted by a number between 1 and 100. "+
"<i>getServerRequiredHackingLevel(hostname/ip)</i><br> Returns the required hacking level of a server. The argument passed in must be a string with either the "+
"hostname or IP or the target server. Does NOT work while offline <br><br>"+
"<i>fileExists(filename, [hostname/ip])</i><br> Returns a boolean (true or false) indicating whether the specified file exists on a server. "+
"The first argument must be a string with the name of the file. A file can either be a script or a program. A script name is case-sensitive, but a "+
"program is not. For example, fileExists('brutessh.exe') will work fine, even though the actual program is named BruteSSH.exe. <br><br> "+
"The second argument is a string with the hostname or IP of the server on which to search for the program. This second argument is optional. "+
"If it is omitted, then the function will search through the current server (the server running the script that calls this function) for the file. <br> "+
"The first example above will return true if the script named 'foo.script' exists on the 'foodnstuff' server, and false otherwise. The second example above will "+
"<i>isRunning(filename, hostname/ip, [args...])</i><br> Returns a boolean (true or false) indicating whether the specified script is running on a server. "+
"Remember that a script is uniquely identified by both its name and its arguments. <br><br>"+
"The first example above will return true if there is a script named 'foo.script' with no arguments running on the 'foodnstuff' server, and false otherwise. The second "+
"example above will return true if there is a script named 'foo.script' with no arguments running on the current server, and false otherwise. "+
"The third example above will return true if there is a script named 'foo.script' with the arguments 1, 5, and 'test' running on the 'joesguns' server, and "+
"<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 or up to the max level (200), and false otherwise.<br><br>"+
"This while loop above is an infinite loop (continuously runs until the script is manually stopped) that repeatedly runs the 'hack('foodnstuff')' command. "+
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation "+
"purchase, the required hacking level, base security level, and growth factor of these servers will all be slightly different<br>"+
"-Major rebalancing (sorry didn't record specifics. But in general hacking gives more money "+
"and hacknet nodes give less)<br>"+
"-Server growth rate (both natural and manual using grow()) doubled<br>"+
"-Added option to Soft Reset<br>"+
"-Cancelling a full time job early now only results in halved gains for reputation. Exp and money earnings are gained in full<br>"+
"-Added exec() Netscript command, used to run scripts on other servers. <br>"+
"-NEW HACKING MECHANICS: Whenever a server is hacked, its 'security level' is increased by a very small amount. "+
"The security level is denoted by a number between 1-100. A higher security level makes it harder "+
"to hack a server and also decreases the amount of money you steal from it. Two Netscript functions, "+
"weaken() and getServerSecurityLevel() level, were added. The weaken(server) function lowers a server's "+
"security level. See the Netscript documentation for more details<br>"+
"-When donating to factions, the base rate is now $1,000,000 for 1 reputation point. Before, it was "+
"$1,000 for 1 reputation point.<br>"+
"-Monetary costs for all Augmentations increased. They are now about ~3.3 - 3.75 times more expensive than before<br><br>"+
"v0.17.1 <br>"+
"-Fixed issue with purchasing Augmentations that are 'upgrades' and require previous Augmentations to be installed<br>"+
"-Increased the percentage of money stolen from servers when hacking<br><br>"+
"v0.17<br>"+
"-Greatly increased amount of money gained for crimes (by about 400% for most crimes)<br>"+
"-Criminal factions require slightly less negative karma to get invited to<br>"+
"-Increased the percentage of money stolen from servers when hacking<br>"+
"-Increased the starting amount of money available on beginning servers (servers with <50 required hacking))<br>"+
"-Increased the growth rate of servers (both naturally and manually when using the grow() command in a script)<br>"+
"-Added getHostname() command in Netscript that returns the hostname of the server a script is running on<br>"+
"-jQuery preventDefault() called when pressing ctrl+b in script editor<br>"+
"-The Neuroflux Governor augmentation (the one that can be repeatedly leveled up) now increases ALL multipliers by 1%. To balance it out, it's price multiplier when it levels up was increased<br>"+
"-Hacknet Node base production decreased from $1.75/s to $1.65/s<br>"+
"-Fixed issue with nested for loops in Netscript (stupid Javascript references)<br>"+
"-Added 'scp' command to Terminal and Netscript<br>"+
"-Slightly nerfed Hacknet Node Kernel DNI and Hacknet Node Core DNI Augmentations<br>"+
"-Increased TOR Router cost to $200k<br><br>"+
"v0.16<br>"+
"-New Script Editor interface <br>"+
"-Rebalanced hacknet node - Increased base production but halved the multiplier from additional cores. This should boost its early-game production but nerf its late-game production<br>"+
"-Player now starts with 8GB of RAM on home computer<br>"+
"-'scan-analyze' terminal command displays RAM on servers<br>"+
"-Slightly buffed the amount of money the player steals when hacking servers (by about ~8%)<br>"+
"-Time to execute grow() now depends on hacking skill and server security, rather than taking a flat 2 minutes.<br>"+
"-Clicking outside of a pop-up dialog box will now close it<br>"+
"-BruteSSH.exe takes 33% less time to create<br>"+
"-'iron-gym' and 'max-hardware' servers now have 2GB of RAM<br>"+
"-Buffed job salaries across the board<br>"+
"-Updated Tutorial<br>"+
"-Created a Hacknet Node API for Netscript that allows you to access and upgrade your Hacknet Nodes. See the Netscript documentation for more details. WARNING The old upgradeHacknetNode() and getNumHacknetNodes() functions waere removed so any script that has these will no longer work <br><br>"+
"v0.15 <br>"+
"-Slightly reduced production multiplier for Hacknet Node RAM<br>"+
"-Faction pages now scroll<br>"+
"-Slightly increased amount of money gained from hacking<br>"+
"-Added 'alias' command<br>"+
"-Added 'scan-analyze' terminal command - used to get basic hacking info about all immediate network connections<br>"+
"-Fixed bugs with upgradeHacknetNode() and purchaseHacknetNode() commands<br>"+
"-Added getNumHacknetNodes() and hasRootAccess(hostname/ip) commands to Netscript<br>"+
"-Increased Cost of university classes/gym<br>"+
"-You can now see what an Augmentation does and its price even while its locked<br><br>",
"v0.22.0 - Major rebalancing, optimization, and favor system<br>"+
"-Significantly nerfed most augmentations<br>"+
"-Almost every server with a required hacking level of 200 or more now has slightly randomized server parameters. This means that after every Augmentation "+
"purchase, the required hacking level, base security level, and growth factor of these servers will all be slightly different<br>"+
"-The hacking speed multiplier now increases rather than decreases. The hacking time is now divided by your hacking speed "+
"multiplier rather than multiplied. In other words, a higher hacking speed multiplier is better<br>"+
"-Servers now have a minimum server security, which is approximately one third of their starting ('base') server security<br>"+
"-If you do not steal any money from a server, then you gain hacking experience equal to the amount you would have gained "+
"had you failed the hack<br>"+
"-The effects of grow() were increased by 50%<br>"+
"-grow() and weaken() now give hacking experience based on the server's base security level, rather than a flat exp amount<br>"+
"-Slightly reduced amount of exp gained from hack(), weaken(), and grow()<br>"+
"-Rebalanced formulas that determine crime success<br>"+
"-Reduced RAM cost for multithreading a script. The RAM multiplier for each thread was reduced from 1.02 to 1.005<br>"+
"-Optimized Script objects so they take less space in the save file<br>"+