mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 14:28:36 +02:00
Compare commits
383 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db2bf79e3b | ||
|
|
6f330efc44 | ||
|
|
708c73fa0f | ||
|
|
c7febd5551 | ||
|
|
ddbdf66d00 | ||
|
|
e572c6dad8 | ||
|
|
ff097db1e2 | ||
|
|
ad12f0e551 | ||
|
|
93f8785ec6 | ||
|
|
69124e7146 | ||
|
|
8a42f6e49c | ||
|
|
2ac4cd41bb | ||
|
|
28584c8461 | ||
|
|
1eddddd14f | ||
|
|
42e9a368b4 | ||
|
|
40713a4112 | ||
|
|
8e79658e67 | ||
|
|
6efc3ec75e | ||
|
|
9840e1f4eb | ||
|
|
7cdca5e813 | ||
|
|
d170693da4 | ||
|
|
31a9c041b4 | ||
|
|
ce7c2c309c | ||
|
|
29abffd464 | ||
|
|
ae4b8228f7 | ||
|
|
04bc2bebdd | ||
|
|
8f30e60d08 | ||
|
|
e8aa1851c5 | ||
|
|
7232a786ed | ||
|
|
2507899762 | ||
|
|
26149d5a01 | ||
|
|
670394ca2f | ||
|
|
e0745d7757 | ||
|
|
dc79f7a940 | ||
|
|
bf4d841f88 | ||
|
|
4c30f107e3 | ||
|
|
c9fe8d9b65 | ||
|
|
29ea1281e0 | ||
|
|
3ec54bcdd8 | ||
|
|
4892f0bd79 | ||
|
|
62c571ef3a | ||
|
|
6c57d548ec | ||
|
|
6c0b5b3ed9 | ||
|
|
f288d982db | ||
|
|
101834fcaf | ||
|
|
642c7a107a | ||
|
|
63da8d709a | ||
|
|
31e9f65f06 | ||
|
|
4ce7981cc0 | ||
|
|
d6016f490c | ||
|
|
9ccdd7f4e5 | ||
|
|
def3846b72 | ||
|
|
c76110b575 | ||
|
|
3db440fd95 | ||
|
|
1df0af0fa4 | ||
|
|
f8d65b9240 | ||
|
|
a4fe6d80d6 | ||
|
|
3a31ebdce3 | ||
|
|
8b812b92cc | ||
|
|
753a1f1193 | ||
|
|
2ce6ff2041 | ||
|
|
726c36f276 | ||
|
|
a00c253dcb | ||
|
|
640795dbe9 | ||
|
|
123628ec0b | ||
|
|
cae28e2d25 | ||
|
|
486d025572 | ||
|
|
d4816ad0c4 | ||
|
|
e7dbc08e18 | ||
|
|
0483c809ff | ||
|
|
cd972dabe3 | ||
|
|
e2a353fc8a | ||
|
|
1b8214b6fa | ||
|
|
af584e8c87 | ||
|
|
250841df66 | ||
|
|
d9aef91ea3 | ||
|
|
c285d494b9 | ||
|
|
316a1aa475 | ||
|
|
56a3660d38 | ||
|
|
e1aec379c1 | ||
|
|
381ea915f7 | ||
|
|
619db14622 | ||
|
|
84423e6309 | ||
|
|
1d2136da4b | ||
|
|
802f28082d | ||
|
|
56441b8e34 | ||
|
|
5106315128 | ||
|
|
6ca7f10faf | ||
|
|
56802fc85e | ||
|
|
700583a739 | ||
|
|
a290b0bef5 | ||
|
|
79a06dd91c | ||
|
|
6cd6f28820 | ||
|
|
dabb5016fc | ||
|
|
58e38faad6 | ||
|
|
31e8ca8c8d | ||
|
|
c72519e3ea | ||
|
|
58333c1b46 | ||
|
|
f0ad090cdc | ||
|
|
4bd1fce1f6 | ||
|
|
b35e25e5dc | ||
|
|
a8bb345c88 | ||
|
|
bbe4f9c286 | ||
|
|
f9dcefd6ea | ||
|
|
44c2bab557 | ||
|
|
fbca5a4d8f | ||
|
|
c2ceaa9bdd | ||
|
|
dc402bef68 | ||
|
|
64272c99fb | ||
|
|
c8377c0bb3 | ||
|
|
4145ddad39 | ||
|
|
e9dfe3c389 | ||
|
|
f9162e4d30 | ||
|
|
b97fab2bf4 | ||
|
|
3c9ebb75fe | ||
|
|
434a522429 | ||
|
|
49fa63971b | ||
|
|
8dfc563c86 | ||
|
|
dded9103cb | ||
|
|
741f57e9e2 | ||
|
|
59cf1d5baf | ||
|
|
916ef06913 | ||
|
|
91ee65a101 | ||
|
|
042f926700 | ||
|
|
c0432359c3 | ||
|
|
fbf5545708 | ||
|
|
6ae7b0136c | ||
|
|
200ccd3ad0 | ||
|
|
31f97f74fd | ||
|
|
4cabd2e4ed | ||
|
|
8be7fa9157 | ||
|
|
8ddf7dfbd4 | ||
|
|
571ddb109a | ||
|
|
b2772bbfc1 | ||
|
|
57815ac6a0 | ||
|
|
758f329d14 | ||
|
|
096f984d6b | ||
|
|
06cd584f10 | ||
|
|
4f2f75762c | ||
|
|
d94516f39b | ||
|
|
b479a3570e | ||
|
|
ac49b8074f | ||
|
|
7a49a5b3e8 | ||
|
|
6d9e6e6466 | ||
|
|
2d179199ed | ||
|
|
dc928828e2 | ||
|
|
658df9fb01 | ||
|
|
44bf3cb101 | ||
|
|
b82d7c12af | ||
|
|
4476d6b258 | ||
|
|
433b399de9 | ||
|
|
58d04c0cbb | ||
|
|
e3a74f23a1 | ||
|
|
3a374de210 | ||
|
|
4cc6437408 | ||
|
|
821725cf4d | ||
|
|
931de230ae | ||
|
|
7301946236 | ||
|
|
a15041da75 | ||
|
|
00f8c0a51f | ||
|
|
63483837bc | ||
|
|
dc5f4e6694 | ||
|
|
35f8a5115a | ||
|
|
8398fd47f0 | ||
|
|
9d7c869c0a | ||
|
|
74587f269e | ||
|
|
6a3ffff3ad | ||
|
|
2f8eac07ee | ||
|
|
3eaefa01f9 | ||
|
|
b250af913d | ||
|
|
0b4968d148 | ||
|
|
8817d179c6 | ||
|
|
e5e3fec1a9 | ||
|
|
eecb0c0f01 | ||
|
|
d45689c7df | ||
|
|
2201dfc371 | ||
|
|
3ef9042051 | ||
|
|
1236ad252b | ||
|
|
65331ab22e | ||
|
|
c485fdfa87 | ||
|
|
6effda29a9 | ||
|
|
7035154454 | ||
|
|
d7f3ab9177 | ||
|
|
3660dde75f | ||
|
|
99688b78c7 | ||
|
|
6841f24932 | ||
|
|
9f94d0838a | ||
|
|
086fc67ecc | ||
|
|
a2551f98c2 | ||
|
|
95c928afc9 | ||
|
|
8a00e6e532 | ||
|
|
287a97aea6 | ||
|
|
664267bff0 | ||
|
|
2597b33f81 | ||
|
|
9442b348e6 | ||
|
|
3b7f9c9fb0 | ||
|
|
20ca7533b0 | ||
|
|
15a324a946 | ||
|
|
94175877d7 | ||
|
|
c1ec3c5eba | ||
|
|
42804b0cd3 | ||
|
|
b1248521f3 | ||
|
|
b744997c72 | ||
|
|
2d37409392 | ||
|
|
bd02e724e5 | ||
|
|
fef7aaba8f | ||
|
|
1775ea86ff | ||
|
|
b0918d7bd3 | ||
|
|
29e0ce5f96 | ||
|
|
44c26165f4 | ||
|
|
9dd68947f1 | ||
|
|
db5fdb1fcb | ||
|
|
74e72854d8 | ||
|
|
ece246b391 | ||
|
|
cdb5dfec62 | ||
|
|
8a5b6f6cbc | ||
|
|
585e1ac7aa | ||
|
|
8726946d4a | ||
|
|
064008d200 | ||
|
|
d955280f90 | ||
|
|
580a7fac24 | ||
|
|
9df054dd0c | ||
|
|
8fa7b112e1 | ||
|
|
dd9df0a18c | ||
|
|
3a601a015d | ||
|
|
87b4698d5b | ||
|
|
67632ced09 | ||
|
|
d7fb335815 | ||
|
|
4809a21e38 | ||
|
|
6b3646e981 | ||
|
|
0c64bf470a | ||
|
|
99e034921e | ||
|
|
7a3a3de7d1 | ||
|
|
f91c5bd7b9 | ||
|
|
bcb198220d | ||
|
|
bf1af6a68c | ||
|
|
3dd2975c61 | ||
|
|
33f1e0cb3c | ||
|
|
7514f63dcd | ||
|
|
b6ff73391d | ||
|
|
369ea8d381 | ||
|
|
a7296c512c | ||
|
|
8f70817c10 | ||
|
|
7417fb6ef8 | ||
|
|
d044739f1c | ||
|
|
3d1684f825 | ||
|
|
f6af9e94ab | ||
|
|
215cf59e0b | ||
|
|
0d14cd6e7e | ||
|
|
98a04e4932 | ||
|
|
8d33c5b571 | ||
|
|
221b81d802 | ||
|
|
df89cc5002 | ||
|
|
3b6b37f8a6 | ||
|
|
cf2acb8844 | ||
|
|
2e9b028174 | ||
|
|
c56645c794 | ||
|
|
3ce2e83dd8 | ||
|
|
3241945452 | ||
|
|
fb857642e8 | ||
|
|
cc0e6548ff | ||
|
|
6c3c569a44 | ||
|
|
b5ebbba43d | ||
|
|
bf9b837e31 | ||
|
|
7f88ade30e | ||
|
|
36499ae9f2 | ||
|
|
4b95ba9ed1 | ||
|
|
804e4c23e3 | ||
|
|
b6b6d8e9fa | ||
|
|
c566c838be | ||
|
|
51d9274626 | ||
|
|
c8b478c208 | ||
|
|
18a3f061b4 | ||
|
|
3f8b9e4a32 | ||
|
|
e63ad76701 | ||
|
|
cb66ad9628 | ||
|
|
971bfbada4 | ||
|
|
b646c15521 | ||
|
|
92f7d12c0e | ||
|
|
7172f4e527 | ||
|
|
5592a8bc96 | ||
|
|
c4cb7daac5 | ||
|
|
75bc34208c | ||
|
|
83fc4d81b2 | ||
|
|
3cf18f100a | ||
|
|
8fbb072596 | ||
|
|
ea7f0752cb | ||
|
|
0f8f572519 | ||
|
|
52b6defebd | ||
|
|
34d749809a | ||
|
|
2ce4af2498 | ||
|
|
227bcf146e | ||
|
|
139a5add20 | ||
|
|
3a61a5cfa1 | ||
|
|
29c5c9b99d | ||
|
|
49dc9b7cb0 | ||
|
|
856d02a129 | ||
|
|
9542879f86 | ||
|
|
1034f7cac5 | ||
|
|
9a7061503a | ||
|
|
449605d330 | ||
|
|
3556d6a1ff | ||
|
|
4858dabe99 | ||
|
|
d54439be8b | ||
|
|
31e703d126 | ||
|
|
2754a644ae | ||
|
|
b7170e4ded | ||
|
|
4df6638444 | ||
|
|
d4c72474cb | ||
|
|
1c0201534b | ||
|
|
fa14bb5362 | ||
|
|
f88c585714 | ||
|
|
8514104560 | ||
|
|
5b7743967e | ||
|
|
2e9fe02023 | ||
|
|
b8bdf0da82 | ||
|
|
1f639c6a3a | ||
|
|
035cdb8b0d | ||
|
|
2ba7ac82eb | ||
|
|
96db360a36 | ||
|
|
77571543f2 | ||
|
|
3f312d0ce6 | ||
|
|
4bdb34bc7b | ||
|
|
f7fd3c859f | ||
|
|
dfd7aa2d2e | ||
|
|
0df437ef35 | ||
|
|
bedd615c0e | ||
|
|
1f4f6bd179 | ||
|
|
d75ff5d95b | ||
|
|
c3bc6a0c28 | ||
|
|
066ccf343a | ||
|
|
c973663dc2 | ||
|
|
08136524be | ||
|
|
261abdea78 | ||
|
|
b132efbded | ||
|
|
f8f4299ed5 | ||
|
|
9f715020df | ||
|
|
060e0f7bfc | ||
|
|
8df7f8de4b | ||
|
|
e6c5ff7ab7 | ||
|
|
a28fe7ab9f | ||
|
|
c3ecc189fd | ||
|
|
b4057fcb26 | ||
|
|
8470f307ac | ||
|
|
8eecb1539c | ||
|
|
5230837dad | ||
|
|
da97c1b4b9 | ||
|
|
963cb0039d | ||
|
|
3e10f5de6d | ||
|
|
6969a8f92c | ||
|
|
2198bfd962 | ||
|
|
d4d5202cbd | ||
|
|
cde2c9e615 | ||
|
|
59018d9902 | ||
|
|
c378400a10 | ||
|
|
58062bf421 | ||
|
|
f3dbdad011 | ||
|
|
d9ee715bc7 | ||
|
|
bd13234f06 | ||
|
|
fa4e98d06c | ||
|
|
cca32923e3 | ||
|
|
f2b4ae8692 | ||
|
|
a22bfb5015 | ||
|
|
18d8b2ecd4 | ||
|
|
9879d07d7c | ||
|
|
d54e39c9c6 | ||
|
|
67d083772a | ||
|
|
e6a3794849 | ||
|
|
d9c818777b | ||
|
|
473f0f1447 | ||
|
|
e1b8a23f1e | ||
|
|
8e4c7beb1a | ||
|
|
af3323a111 | ||
|
|
31ed986b8f | ||
|
|
1d07ca4ffb | ||
|
|
ddfae56e34 | ||
|
|
b0ba3b2ea4 | ||
|
|
a277810095 | ||
|
|
78c631751e | ||
|
|
610b644fb1 | ||
|
|
b26568bf7d | ||
|
|
29075acffe | ||
|
|
3d76390c2c |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -3,6 +3,6 @@ Netburner.txt
|
||||
/doc/build
|
||||
/node_modules
|
||||
/dist/*.map
|
||||
/tests/*.map
|
||||
/tests/*.bundle.*
|
||||
/tests/*.css
|
||||
/test/*.map
|
||||
/test/*.bundle.*
|
||||
/test/*.css
|
||||
|
||||
14
README.md
14
README.md
@@ -1,11 +1,12 @@
|
||||
# Bitburner
|
||||
Bitburner is a cyberpunk hacking-themed incremental game. The game can be
|
||||
played at https://danielyxie.github.io/bitburner.
|
||||
Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wiki/Incremental_game)
|
||||
that revolves around hacking and cyberpunk themes.
|
||||
The game can be played at https://danielyxie.github.io/bitburner.
|
||||
|
||||
# Documentation
|
||||
The game's official documentation can be found on [Read The
|
||||
Docs](http://bitburner.readthedocs.io/). Please note that this is still a
|
||||
work-in-progress and is in its early stages.
|
||||
work-in-progress.
|
||||
|
||||
The documentation is created using [Sphinx](http://www.sphinx-doc.org).
|
||||
|
||||
@@ -14,11 +15,6 @@ files](/doc/source) and then making a pull request with your contributions.
|
||||
For further guidance, please refer to the "As A Documentor" section of
|
||||
[CONTRIBUTING](CONTRIBUTING.md).
|
||||
|
||||
# Wiki
|
||||
The game's wiki can be found on [Wikia](http://bitburner.wikia.com/). Please
|
||||
note that the wiki is in the process of being deprecated. Eventually all of
|
||||
the wiki content will be moved into the Read The Docs documentation.
|
||||
|
||||
# Contribution
|
||||
There are many ways to contribute to the game. It can be as simple as fixing
|
||||
a typo, correcting a bug, or improving the UI. For guidance on doing so,
|
||||
@@ -32,4 +28,4 @@ publish, and distribute your contributions to the project. A formal
|
||||
Contributor's License Agreement will be drawn up in the future.
|
||||
|
||||
If you would like to make significant contributions to the project as a
|
||||
collaborator, please reach out to @danielyxie to help coordinate the effort.
|
||||
collaborator, please reach out to @danielyxie to help coordinate the effort.
|
||||
|
||||
10
README_contribution.md
Normal file
10
README_contribution.md
Normal file
@@ -0,0 +1,10 @@
|
||||
Deploying a new version
|
||||
-----------------------
|
||||
|
||||
Update the following
|
||||
- `src/Constants.ts` `Version` and `LatestUpdate`
|
||||
- `package.json` `version`
|
||||
- `doc/source/conf.py` `version` and `release`
|
||||
- `doc/source/changelog.rst`
|
||||
- post to discord
|
||||
- post to reddit.com/r/Bitburner
|
||||
126
css/activescripts.scss
Normal file
126
css/activescripts.scss
Normal file
@@ -0,0 +1,126 @@
|
||||
@import "theme";
|
||||
|
||||
.active-scripts-list {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#active-scripts-container {
|
||||
position: fixed;
|
||||
padding-top: 10px;
|
||||
|
||||
> p {
|
||||
width: 70%;
|
||||
margin: 6px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.accordion-header {
|
||||
> pre {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-server-header {
|
||||
background-color: #444;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
color: #fff;
|
||||
margin: 6px 6px 0 6px;
|
||||
padding: 6px;
|
||||
cursor: pointer;
|
||||
width: 60%;
|
||||
text-align: left;
|
||||
border: none;
|
||||
outline: none;
|
||||
|
||||
&:after {
|
||||
content: '\02795'; /* "plus" sign (+) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
color: #fff;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
&.active, &:hover {
|
||||
background-color: #555;
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-server-header.active {
|
||||
&:after {
|
||||
content: "\2796"; /* "minus" sign (-) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
color: #fff;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-server-panel {
|
||||
margin: 0 6px 6px 6px;
|
||||
padding: 0 6px 6px 6px;
|
||||
width: 55%;
|
||||
margin-left: 5%;
|
||||
display: none;
|
||||
|
||||
div, ul, ul > li {
|
||||
background-color: #555;
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-script-header {
|
||||
background-color: #555;
|
||||
border: none;
|
||||
color: var(--my-font-color);
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
outline: none;
|
||||
padding: 4px 25px 4px 10px;
|
||||
position: relative;
|
||||
text-align: left;
|
||||
width: auto;
|
||||
|
||||
&:after {
|
||||
content: '\02795'; /* "plus" sign (+) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
color: transparent;
|
||||
text-shadow: 0 0 0 var(--my-font-color);
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
}
|
||||
|
||||
&.active:after {
|
||||
content: "\2796"; /* "minus" sign (-) */
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&.active:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: #555;
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-script-panel {
|
||||
background-color: #555;
|
||||
display: none;
|
||||
font-size: 14px;
|
||||
margin-bottom: 6px;
|
||||
padding: 0 18px;
|
||||
width: auto;
|
||||
|
||||
pre, h2, ul, li {
|
||||
background-color: #555;
|
||||
width: auto;
|
||||
color: #fff;
|
||||
margin-left: 5%;
|
||||
}
|
||||
}
|
||||
31
css/augmentations.scss
Normal file
31
css/augmentations.scss
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Styling for the Augmentations UI. This is the page that displays all of the
|
||||
* player's owned and purchased Augmentations and Source-Files. It also allows
|
||||
* the player to install Augmentations
|
||||
*/
|
||||
@import "theme";
|
||||
|
||||
#augmentations-container {
|
||||
position: fixed;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#augmentations-content {
|
||||
> p {
|
||||
font-size: $defaultFontSize * 0.875;
|
||||
width: 70%;
|
||||
}
|
||||
}
|
||||
|
||||
.augmentations-list {
|
||||
button,
|
||||
div {
|
||||
color: var(--my-font-color);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -51,6 +51,44 @@
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Checkbox for (de)selecting autoleveling */
|
||||
.bbcheckbox {
|
||||
position: relative;
|
||||
display: inline;
|
||||
label {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: black;
|
||||
border-width: 1px;
|
||||
border-color: white;
|
||||
border-style: solid;
|
||||
&:after {
|
||||
content: '';
|
||||
width: 9px;
|
||||
height: 5px;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
border: 3px solid white;
|
||||
border-top: none;
|
||||
border-right: none;
|
||||
opacity: 0;
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
}
|
||||
input[type=checkbox] {
|
||||
margin: 3px;
|
||||
visibility: hidden;
|
||||
&:checked + label:after {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Bladeburner Console */
|
||||
.bladeburner-console-div {
|
||||
display: inline-block;
|
||||
|
||||
@@ -38,6 +38,7 @@ button {
|
||||
}
|
||||
|
||||
.a-link-button-inactive,
|
||||
.std-button-disabled,
|
||||
.std-button:disabled {
|
||||
text-decoration: none;
|
||||
background-color: #333;
|
||||
@@ -47,6 +48,11 @@ button {
|
||||
border: 1px solid #333;
|
||||
cursor: default;
|
||||
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
|
||||
&:hover {
|
||||
.tooltiptext,
|
||||
.tooltiptexthigh,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
@import "theme";
|
||||
|
||||
/**
|
||||
* Styling for the Character Overview Panel (top-right)
|
||||
* Styling for the Character Overview Panel (top-right panel)
|
||||
*/
|
||||
|
||||
#character-overview-wrapper {
|
||||
@@ -59,10 +59,16 @@
|
||||
}
|
||||
|
||||
#character-hp-wrapper { color: $my-stat-hp-color; }
|
||||
.character-hp-cell { color: $my-stat-hp-color; }
|
||||
#character-money-wrapper { color: $my-stat-money-color; }
|
||||
.character-money-cell { color: $my-stat-money-color; }
|
||||
#character-hack-wrapper { color: $my-stat-hack-color; }
|
||||
.character-hack-cell { color: $my-stat-hack-color; }
|
||||
#character-cha-wrapper { color: $my-stat-cha-color; }
|
||||
.character-cha-cell { color: $my-stat-cha-color; }
|
||||
#character-int-wrapper { color: $my-stat-int-color; }
|
||||
.character-int-cell { color: $my-stat-int-color; }
|
||||
.character-combat-cell { color: $my-stat-physical; }
|
||||
|
||||
.character-overview-btn {
|
||||
@include borderRadius(12px);
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|
||||
#cmpy-mgmt-container p,
|
||||
#cmpy-mgmt-container a,
|
||||
#cmpy-mgmt-container div {
|
||||
#cmpy-mgmt-container div,
|
||||
#cmpy-mgmt-container br {
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
}
|
||||
|
||||
@@ -56,29 +57,33 @@
|
||||
.cmpy-mgmt-industry-left-panel,
|
||||
.cmpy-mgmt-industry-right-panel {
|
||||
display: inline-block;
|
||||
width: 45%;
|
||||
height: 100%;
|
||||
top: 10px;
|
||||
overflow-y: auto;
|
||||
overflow-x: auto;
|
||||
overflow: visible;
|
||||
top: 10px;
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
.cmpy-mgmt-industry-overview-panel {
|
||||
border: 1px solid #fff;
|
||||
color: var(--my-font-color);
|
||||
display: inline-block;
|
||||
padding: 3px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cmpy-mgmt-employee-panel {
|
||||
border: 1px solid #fff;
|
||||
display: block;
|
||||
padding: 3px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cmpy-mgmt-warehouse-panel {
|
||||
border: 1px solid #fff;
|
||||
display: inline-block;
|
||||
padding: 3px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -115,13 +120,18 @@
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
/* Upgrades */
|
||||
/* Corporation Upgrades */
|
||||
.cmpy-mgmt-upgrade-container {
|
||||
border: 1px solid #fff;
|
||||
width: 60%;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
.cmpy-mgmt-upgrade-header {
|
||||
margin: 6px;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.cmpy-mgmt-upgrade-div {
|
||||
display: inline-block;
|
||||
border: 1px solid #fff;
|
||||
@@ -136,10 +146,20 @@
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
/* Industry Upgrades */
|
||||
.industry-purchases-and-upgrades-header {
|
||||
font-size: 14px;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/* Advertising */
|
||||
.cmpy-mgmt-advertising-info {
|
||||
font-size: $defaultFontSize * 0.75;
|
||||
}
|
||||
|
||||
/* Research */
|
||||
#corporation-research-popup-box-content {
|
||||
overflow-x: visible !important;
|
||||
overflow-x: auto !important;
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
|
||||
36
css/dev-menu.css
Normal file
36
css/dev-menu.css
Normal file
@@ -0,0 +1,36 @@
|
||||
.add-exp-button {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.remove-exp-button {
|
||||
margin-left:0px;
|
||||
}
|
||||
|
||||
.exp-input {
|
||||
margin-right: 0px;
|
||||
margin-left:0px;
|
||||
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.touch-right {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.touch-left {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.touch-sides {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
6
css/grid.min.css
vendored
Normal file
6
css/grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
75
css/hacknetnodes.scss
Normal file
75
css/hacknetnodes.scss
Normal file
@@ -0,0 +1,75 @@
|
||||
@import "mixins";
|
||||
@import "theme";
|
||||
|
||||
/**
|
||||
* Styling for the Hacknet Nodes UI Page
|
||||
*/
|
||||
|
||||
#hacknet-nodes-container {
|
||||
position: fixed;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.hacknet-general-info {
|
||||
margin: 10px;
|
||||
width: 70vw;
|
||||
}
|
||||
|
||||
#hacknet-nodes-container li {
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
|
||||
&.hacknet-node {
|
||||
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
||||
@include boxShadow($boxShadowArgs);
|
||||
|
||||
margin: 6px;
|
||||
padding: 7px;
|
||||
width: 35vw;
|
||||
border: 2px solid var(--my-highlight-color);
|
||||
}
|
||||
}
|
||||
|
||||
#hacknet-nodes-list {
|
||||
list-style: none;
|
||||
width: 82vw;
|
||||
}
|
||||
|
||||
#hacknet-nodes-money {
|
||||
margin: 10px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#hacknet-nodes-money-multipliers-div {
|
||||
display: inline-block;
|
||||
width: 70vw;
|
||||
}
|
||||
|
||||
#hacknet-nodes-multipliers {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#hacknet-nodes-purchase-button {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.hacknet-node-container {
|
||||
display: inline-table;
|
||||
|
||||
.row {
|
||||
display: table-row;
|
||||
height: 30px;
|
||||
|
||||
p {
|
||||
display: table-cell;
|
||||
}
|
||||
}
|
||||
|
||||
.upgradable-info {
|
||||
display: inline-block;
|
||||
margin: 0 4px; /* Don't want the vertical margin/padding, just left & right */
|
||||
padding: 0 4px;
|
||||
width: $defaultFontSize * 4;
|
||||
}
|
||||
}
|
||||
@@ -18,201 +18,6 @@
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
/* Active scripts */
|
||||
.active-scripts-list {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#active-scripts-container {
|
||||
position: fixed;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#active-scripts-text,
|
||||
#active-scripts-total-prod {
|
||||
width: 70%;
|
||||
margin: 6px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.active-scripts-server-header {
|
||||
background-color: #444;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
color: #fff;
|
||||
margin: 6px 6px 0 6px;
|
||||
padding: 6px;
|
||||
cursor: pointer;
|
||||
width: 60%;
|
||||
text-align: left;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.active-scripts-server-header.active,
|
||||
.active-scripts-server-header:hover {
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
.active-scripts-server-header.active:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
.active-scripts-server-header:after {
|
||||
content: '\02795'; /* "plus" sign (+) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
color: #fff;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.active-scripts-server-header.active:after {
|
||||
content: "\2796"; /* "minus" sign (-) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
color: #fff;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.active-scripts-server-panel {
|
||||
margin: 0 6px 6px 6px;
|
||||
padding: 0 6px 6px 6px;
|
||||
width: 55%;
|
||||
margin-left: 5%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.active-scripts-server-panel div,
|
||||
.active-scripts-server-panel ul,
|
||||
.active-scripts-server-panel ul > li {
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
.active-scripts-script-header {
|
||||
background-color: #555;
|
||||
color: var(--my-font-color);
|
||||
padding: 4px 25px 4px 10px;
|
||||
cursor: pointer;
|
||||
width: auto;
|
||||
text-align: left;
|
||||
border: none;
|
||||
outline: none;
|
||||
position: relative;
|
||||
|
||||
&:after {
|
||||
content: '\02795'; /* "plus" sign (+) */
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
color: transparent;
|
||||
text-shadow: 0 0 0 var(--my-font-color);
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
}
|
||||
|
||||
&.active:after {
|
||||
content: "\2796"; /* "minus" sign (-) */
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&.active:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: #555;
|
||||
}
|
||||
}
|
||||
|
||||
.active-scripts-script-panel {
|
||||
padding: 0 18px;
|
||||
background-color: #555;
|
||||
width: auto;
|
||||
display: none;
|
||||
margin-bottom: 6px;
|
||||
|
||||
p, h2, ul, li {
|
||||
background-color: #555;
|
||||
width: auto;
|
||||
color: #fff;
|
||||
margin-left: 5%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hacknet Nodes */
|
||||
#hacknet-nodes-container {
|
||||
position: fixed;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#hacknet-nodes-text,
|
||||
#hacknet-nodes-container li {
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#hacknet-nodes-container li {
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
|
||||
&.hacknet-node {
|
||||
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
||||
@include boxShadow($boxShadowArgs);
|
||||
|
||||
margin: 6px;
|
||||
padding: 7px;
|
||||
width: 35vw;
|
||||
border: 2px solid var(--my-highlight-color);
|
||||
}
|
||||
}
|
||||
|
||||
#hacknet-nodes-list {
|
||||
list-style: none;
|
||||
width: 82vw;
|
||||
}
|
||||
|
||||
#hacknet-nodes-money {
|
||||
margin: 10px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#hacknet-nodes-money-multipliers-div {
|
||||
display: inline-block;
|
||||
width: 70vw;
|
||||
}
|
||||
|
||||
#hacknet-nodes-multipliers {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#hacknet-nodes-purchase-button {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.hacknet-node-container {
|
||||
display: inline-table;
|
||||
|
||||
.row {
|
||||
display: table-row;
|
||||
height: 30px;
|
||||
|
||||
p {
|
||||
display: table-cell;
|
||||
}
|
||||
}
|
||||
|
||||
.upgradable-info {
|
||||
display: inline-block;
|
||||
margin: 0 4px; /* Don't want the vertical margin/padding, just left & right */
|
||||
padding: 0 4px;
|
||||
width: $defaultFontSize * 4;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-page-text {
|
||||
width: 70vw;
|
||||
}
|
||||
|
||||
/* World */
|
||||
#world-container {
|
||||
position: fixed;
|
||||
@@ -260,19 +65,6 @@
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#faction-donate-amount-txt,
|
||||
#faction-donate-input {
|
||||
padding: 6px;
|
||||
margin: 6px;
|
||||
display: inline-block;
|
||||
color: var(--my-font-color);
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
#faction-donate-amount-txt {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#faction-container p,
|
||||
#faction-container pre {
|
||||
padding: 4px 6px;
|
||||
@@ -288,45 +80,12 @@
|
||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||
}
|
||||
|
||||
/* Faction Augmentations */
|
||||
#faction-augmentations-container {
|
||||
position: fixed;
|
||||
padding-top: 10px;
|
||||
|
||||
p, a, ul, h1 {
|
||||
margin: 8px;
|
||||
padding: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
/* World */
|
||||
#world-container li {
|
||||
margin: 0 0 15px 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/* Augmentations */
|
||||
#augmentations-container {
|
||||
position: fixed;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.augmentations-list {
|
||||
button,
|
||||
div {
|
||||
color: var(--my-font-color);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
div {
|
||||
padding: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tutorial */
|
||||
#tutorial-container {
|
||||
position: fixed;
|
||||
@@ -425,5 +184,4 @@
|
||||
|
||||
#infiltration-buttons .a-link-button {
|
||||
display: inline;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
/* Pop-up boxes */
|
||||
.popup-box-container {
|
||||
display: none; /* Hidden by default */
|
||||
display: none; /* Initially hidden */
|
||||
position: fixed; /* Stay in place */
|
||||
z-index: 10; /* Sit on top */
|
||||
left: 0;
|
||||
|
||||
@@ -7,16 +7,28 @@
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
|
||||
.bitnode {
|
||||
color: #00f;
|
||||
}
|
||||
&.level-0 {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.bitnode-destroyed {
|
||||
color: #f00;
|
||||
}
|
||||
&.level-1 {
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
.bitnode:hover,
|
||||
.bitnode-destroyed:hover {
|
||||
color: #fff;
|
||||
&.level-2 {
|
||||
color: #48D1CC;
|
||||
}
|
||||
|
||||
&.level-3 {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
&.unimplemented {
|
||||
color: gray;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,13 +68,14 @@
|
||||
@include boxShadow($boxShadowArgs);
|
||||
|
||||
background-color: #555;
|
||||
border: 2px solid var(--my-highlight-color);
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
float: center;
|
||||
resize: none;
|
||||
color: #fff;
|
||||
margin: 4px;
|
||||
padding: 2px;
|
||||
border: 2px solid var(--my-highlight-color);
|
||||
resize: none;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
#script-editor-status {
|
||||
|
||||
@@ -7,35 +7,45 @@
|
||||
p {
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: $defaultFontSize * 0.875;
|
||||
}
|
||||
h2 {
|
||||
}
|
||||
|
||||
.stock-market-info-and-purchases {
|
||||
> h2 {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
> p {
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
> a, > button {
|
||||
margin: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
#stock-market-list li {
|
||||
button {
|
||||
font-size: $defaultFontSize;
|
||||
#stock-market-list {
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
button {
|
||||
font-size: $defaultFontSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#stock-market-container p {
|
||||
padding: 6px;
|
||||
margin: 6px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#stock-market-container a {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
#stock-market-watchlist-filter {
|
||||
display: block;
|
||||
margin: 5px 5px 5px 10px;
|
||||
padding: 4px;
|
||||
width: 50%;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.stock-market-input {
|
||||
@@ -47,14 +57,36 @@
|
||||
color: var(--my-font-color);
|
||||
}
|
||||
|
||||
.stock-market-price-movement-warning {
|
||||
border: 1px solid white;
|
||||
color: red;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.stock-market-position-text {
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
display: block;
|
||||
|
||||
p {
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.stock-market-order-list {
|
||||
overflow-y: auto;
|
||||
max-height: 100px;
|
||||
|
||||
li {
|
||||
color: #fff;
|
||||
padding: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.stock-market-order-cancel-btn {
|
||||
|
||||
@@ -17,7 +17,8 @@ body {
|
||||
p,
|
||||
pre,
|
||||
h2,
|
||||
.text {
|
||||
.text,
|
||||
td {
|
||||
color: var(--my-font-color);
|
||||
}
|
||||
|
||||
@@ -62,6 +63,9 @@ a:visited {
|
||||
.text-input {
|
||||
color: #fff;
|
||||
background-color: #000;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: white;
|
||||
}
|
||||
|
||||
/* Notification icon (for create program right now only) */
|
||||
@@ -76,6 +80,28 @@ a:visited {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#factions-tab {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#factions-notification {
|
||||
font-size: $defaultFontSize * 0.625;
|
||||
position: absolute; /* Position the badge within the relatively positioned button */
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#augmentations-tab {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#augmentations-notification {
|
||||
font-size: $defaultFontSize * 0.625;
|
||||
position: absolute; /* Position the badge within the relatively positioned button */
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.notification-on {
|
||||
background-color: #fa3e3e;
|
||||
color: #fff;
|
||||
@@ -203,7 +229,6 @@ a:visited {
|
||||
|
||||
.status-text {
|
||||
display: inline-block;
|
||||
height: 15%;
|
||||
position: fixed;
|
||||
z-index: 2;
|
||||
-webkit-animation: status-text 3s 1;
|
||||
@@ -215,10 +240,12 @@ a:visited {
|
||||
|
||||
#status-text {
|
||||
background-color: transparent;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
bottom: 0;
|
||||
color: #fff;
|
||||
display: none;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
margin-right: 14px;
|
||||
opacity: 0;
|
||||
padding: 4px;
|
||||
right: 0;
|
||||
top: 0;
|
||||
@@ -239,8 +266,8 @@ a:visited {
|
||||
/* Accordion menus (Header with collapsible panel) */
|
||||
.accordion-header {
|
||||
background-color: #444;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
color: #fff;
|
||||
font-size: $defaultFontSize * 1.25;
|
||||
margin: 6px 6px 0 6px;
|
||||
padding: 4px 6px;
|
||||
cursor: pointer;
|
||||
@@ -329,6 +356,68 @@ a:visited {
|
||||
color: $my-stat-cha-color;
|
||||
}
|
||||
|
||||
.reputation {
|
||||
color: $light-yellow;
|
||||
}
|
||||
|
||||
.smallfont {
|
||||
font-size: $defaultFontSize * 0.8125;
|
||||
}
|
||||
|
||||
.samefont {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.noscrollbar {
|
||||
-ms-overflow-style: none; /* IE and Edge */
|
||||
scrollbar-width: none; /* Firefox */
|
||||
}
|
||||
|
||||
.noscrollbar::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
filter: invert(1) sepia(1) hue-rotate(41deg) brightness(100%) saturate(10);
|
||||
}
|
||||
|
||||
.optionCheckbox {
|
||||
margin: 5px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.optionRange {
|
||||
-webkit-appearance: none;
|
||||
background: #777;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
height: 10px;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
|
||||
.optionRange::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background: var(--my-font-color);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.optionRange::-moz-range-thumb {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background: var(--my-font-color);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.noselect {
|
||||
-moz-user-select: -moz-none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
@@ -85,3 +85,45 @@
|
||||
.tooltip:hover .tooltiptextlow {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.copy_tooltip {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.copy_tooltip_copied {
|
||||
color: #fff;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
|
||||
.copy_tooltip .copy_tooltip_text {
|
||||
visibility: hidden;
|
||||
font-size: 15px;
|
||||
padding: 5px;
|
||||
background-color: var(--my-background-color);
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 120%;
|
||||
left: 5%;
|
||||
opacity: 0;
|
||||
border: 2px solid var(--my-highlight-color);
|
||||
}
|
||||
|
||||
.copy_tooltip .copy_tooltip_text::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
left: 50%;
|
||||
margin-left: -6px;
|
||||
border-width: 8px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent white transparent;
|
||||
}
|
||||
|
||||
.copy_tooltip .copy_tooltip_text_visible {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
20
dist/engine.bundle.js
vendored
20
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
2305
dist/engine.css
vendored
2305
dist/engine.css
vendored
File diff suppressed because it is too large
Load Diff
2
dist/engineStyle.bundle.js
vendored
Normal file
2
dist/engineStyle.bundle.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
!function(n){function t(t){for(var e,i,f=t[0],c=t[1],l=t[2],p=0,s=[];p<f.length;p++)i=f[p],u[i]&&s.push(u[i][0]),u[i]=0;for(e in c)Object.prototype.hasOwnProperty.call(c,e)&&(n[e]=c[e]);for(a&&a(t);s.length;)s.shift()();return r.push.apply(r,l||[]),o()}function o(){for(var n,t=0;t<r.length;t++){for(var o=r[t],e=!0,f=1;f<o.length;f++){var c=o[f];0!==u[c]&&(e=!1)}e&&(r.splice(t--,1),n=i(i.s=o[0]))}return n}var e={},u={1:0},r=[];function i(t){if(e[t])return e[t].exports;var o=e[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=n,i.c=e,i.d=function(n,t,o){i.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:o})},i.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.t=function(n,t){if(1&t&&(n=i(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var e in n)i.d(o,e,function(t){return n[t]}.bind(null,e));return o},i.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return i.d(t,"a",t),t},i.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},i.p="";var f=window.webpackJsonp=window.webpackJsonp||[],c=f.push.bind(f);f.push=t,f=f.slice();for(var l=0;l<f.length;l++)t(f[l]);var a=c;r.push([396,0]),o()}({339:function(n,t,o){},341:function(n,t,o){},343:function(n,t,o){},345:function(n,t,o){},347:function(n,t,o){},349:function(n,t,o){},351:function(n,t,o){},353:function(n,t,o){},355:function(n,t,o){},357:function(n,t,o){},359:function(n,t,o){},361:function(n,t,o){},363:function(n,t,o){},365:function(n,t,o){},367:function(n,t,o){},369:function(n,t,o){},371:function(n,t,o){},373:function(n,t,o){},375:function(n,t,o){},377:function(n,t,o){},379:function(n,t,o){},381:function(n,t,o){},383:function(n,t,o){},385:function(n,t,o){},387:function(n,t,o){},389:function(n,t,o){},391:function(n,t,o){},393:function(n,t,o){},396:function(n,t,o){"use strict";o.r(t);o(395),o(393),o(391),o(389),o(387),o(385),o(383),o(381),o(379),o(377),o(375),o(373),o(371),o(369),o(367),o(365),o(363),o(361),o(359),o(357),o(355),o(353),o(351),o(349),o(347),o(345),o(343),o(341),o(339)}});
|
||||
//# sourceMappingURL=engineStyle.bundle.js.map
|
||||
5010
dist/engineStyle.css
vendored
Normal file
5010
dist/engineStyle.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
627
dist/vendor.bundle.js
vendored
627
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
@@ -14,6 +14,8 @@ Sleeve technology unlocks two different gameplay features:
|
||||
|
||||
Sleeve technology is unlocked in :ref:`BitNode-10 <gameplay_bitnodes>`.
|
||||
|
||||
.. _gameplay_duplicatesleeves:
|
||||
|
||||
Duplicate Sleeves
|
||||
^^^^^^^^^^^^^^^^^
|
||||
Duplicate Sleeves are MK-V Synthoids (synthetic androids) into which your consciuosness
|
||||
@@ -28,6 +30,19 @@ Sleeves are their own individuals, which means they each have their own experien
|
||||
When a sleeve earns experience, it earns experience for itself, the player's
|
||||
original consciousness, as well as all of the player's other sleeves.
|
||||
|
||||
Duplicate Sleeves are **not** reset when installing Augmentations, but they are reset
|
||||
when switching BitNodes.
|
||||
|
||||
Obtaining Duplicate Sleeves
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
There are two methods of obtaining Duplicate Sleeves:
|
||||
|
||||
1. Destroy BitNode-10. Each completion give you one additional Duplicate Sleeve
|
||||
2. Purchase Duplicate Sleeves from :ref:`the faction The Covenant <gameplay_factions>`.
|
||||
This is only available in BitNodes-10 and above, and is only available after defeating
|
||||
BitNode-10 at least once. Sleeves purchased this way are **permanent** (they persist
|
||||
through BitNodes). You can purchase up to 5 Duplicate Sleeves from The Covenant.
|
||||
|
||||
Synchronization
|
||||
~~~~~~~~~~~~~~~
|
||||
Synchronization is a measure of how aligned your consciousness is with that of your
|
||||
@@ -50,6 +65,34 @@ no shock. Shock affects the amount of experience earned by the sleeve.
|
||||
Sleeve shock slowly decreases over time. You can further increase the rate at which
|
||||
it decreases by assigning sleeves to the 'Shock Recovery' task.
|
||||
|
||||
Augmentations
|
||||
~~~~~~~~~~~~~
|
||||
You can purchase :ref:`Augmentations <gameplay_augmentations>` for your Duplicate
|
||||
Sleeves. In order to do this, the Sleeve's Shock must be at 0. Any Augmentation
|
||||
that is currently available to you through a faction is also available for your
|
||||
Duplicate Sleeves. There are a few Augmentations, such as NeuroFlux Governor and
|
||||
Bladeburner-specific ones, that cannot be purchased for a Duplicate Sleeve.
|
||||
|
||||
When you purchase an Augmentation for a Duplicate Sleeve, it is instantly installed.
|
||||
When this happens, the Sleeve's stats are instantly reset back to 0, similar to
|
||||
when you normally install Augmentations.
|
||||
|
||||
The cost of purchasing an Augmentation for a Duplicate Sleeve is **not** affected
|
||||
by how many Augmentations you have purchased for yourself, and vice versa.
|
||||
|
||||
Memory
|
||||
~~~~~~
|
||||
Sleeve memory dictates what a sleeve's synchronization will be when its reset by
|
||||
switching BitNodes. For example, if a sleeve has a memory of 10, then when you
|
||||
switch BitNodes its synchronization will initially be set to 10, rather than 1.
|
||||
|
||||
Memory can only be increased by purchasing upgrades from The Covenant. Just like
|
||||
the ability to purchase additional sleeves, this is only available in BitNodes-10
|
||||
and above, and is only available after defeating BitNode-10 at least once.
|
||||
|
||||
Memory is a persistent stat, meaning it never gets reset back to 1.
|
||||
The maximum possible value for a sleeve's memory is 100.
|
||||
|
||||
Re-sleeving
|
||||
^^^^^^^^^^^
|
||||
Re-sleeving is the process of digitizing and transferring your consciousness into a
|
||||
@@ -64,4 +107,4 @@ Note that resleeving **REMOVES** all of your currently-installed Augmentations,
|
||||
and replaces them with the ones provided by the purchased sleeve. However,
|
||||
Augmentations that are purchased but not installed will **not** be removed. If you have purchased
|
||||
an Augmentation and then re-sleeve into a body which already has that Augmentation,
|
||||
it will be removed since you cannot have duplicate Augmentations.
|
||||
it will be removed since you cannot have duplicate Augmentations.
|
||||
|
||||
@@ -48,6 +48,7 @@ List of all Source-Files
|
||||
| BitNode-9: Coming Soon | |
|
||||
+------------------------------------+-------------------------------------------------------------------------------------+
|
||||
| BitNode-10: Digital Carbon | * Each level of this grants a Duplicate Sleeve |
|
||||
| | * Allows the player to access the :ref:`netscript_sleeveapi` in other BitNodes |
|
||||
+------------------------------------+-------------------------------------------------------------------------------------+
|
||||
| BitNode-11: The Big Crash | * Company favor increases both the player's salary and reputation gain at that |
|
||||
| | company by 1% per favor (rather than just the reputation gain) |
|
||||
|
||||
@@ -23,6 +23,8 @@ enough reputation in it, you will be able to purchase its Augmentations.
|
||||
Different Factions offer different Augmentations. Augmentations must be
|
||||
purchased in order to be installed, and they are fairly expensive.
|
||||
|
||||
.. _gameplay_augmentations_installing:
|
||||
|
||||
Installing Augmentations
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
You will not gain the benefits of your purchased Augmentations until you
|
||||
@@ -57,6 +59,8 @@ Here is everything you will KEEP when you install an Augmentation:
|
||||
* RAM Upgrades on your home computer
|
||||
* World Stock Exchange account and TIX API Access
|
||||
|
||||
.. _gameplay_augmentations_purchasingmultiple:
|
||||
|
||||
Purchasing Multiple Augmentations
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
You do not have to install an Augmentation right after you purchase it.
|
||||
|
||||
@@ -40,7 +40,7 @@ solutions. Some may be numbers, others may be strings or arrays.
|
||||
If a contract asks for a specific solution format, then
|
||||
use that. Otherwise, follow these rules when submitting solutions:
|
||||
|
||||
* String-type solutions should not have quotation marks surrounding
|
||||
* String-type solutions should **not** have quotation marks surrounding
|
||||
the string (unless specifically asked for). Only quotation
|
||||
marks that are part of the actual string solution should be included.
|
||||
* Array-type solutions should be submitted with each element
|
||||
@@ -204,8 +204,8 @@ The list contains the name of (i.e. the value returned by
|
||||
| | | the string, the result should be an array with only an empty string. |
|
||||
| | | |
|
||||
| | | Examples: |
|
||||
| | | ()())() -> ["()()()", "(())()"] |
|
||||
| | | (a)())() -> ["(a)()()", "(a())()"] |
|
||||
| | | ()())() -> [()()(), (())()] |
|
||||
| | | (a)())() -> [(a)()(), (a())()] |
|
||||
| | | )( -> [""] |
|
||||
+------------------------------------+------------------------------------------------------------------------------------------+
|
||||
| Find All Valid Math Expressions | | You are given a string which contains only digits between 0 and 9 as well as a target |
|
||||
@@ -214,10 +214,12 @@ The list contains the name of (i.e. the value returned by
|
||||
| | | |
|
||||
| | | The answer should be provided as an array of strings containing the valid expressions. |
|
||||
| | | |
|
||||
| | | NOTE: Numbers in an expression cannot have leading 0's |
|
||||
| | | |
|
||||
| | | Examples: |
|
||||
| | | Input: digits = "123", target = 6 |
|
||||
| | | Output: ["1+2+3", "1*2*3"] |
|
||||
| | | Output: [1+2+3, 1*2*3] |
|
||||
| | | |
|
||||
| | | Input: digits = "105", target = 5 |
|
||||
| | | Output: ["1*0+5", "10-5"] |
|
||||
| | | Output: [1*0+5, 10-5] |
|
||||
+------------------------------------+------------------------------------------------------------------------------------------+
|
||||
|
||||
@@ -49,6 +49,8 @@ on a server in order to successfully NUKE it:**
|
||||
Once you have enough ports opened on a server and have ran the NUKE virus
|
||||
to gain root access, you will be able to hack it.
|
||||
|
||||
.. _gameplay_hacking_generalhackingmechanics:
|
||||
|
||||
General Hacking Mechanics
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
When you execute the hack command, either manually through the terminal
|
||||
@@ -73,6 +75,8 @@ in your hacking (since you are only hacking a certain percentage).
|
||||
You can increase the amount of money on a server using a script and
|
||||
the :js:func:`grow` function in Netscript.
|
||||
|
||||
.. _gameplay_hacking_serversecurity:
|
||||
|
||||
Server Security
|
||||
^^^^^^^^^^^^^^^
|
||||
Each server has a security level, typically between 1 and 100.
|
||||
|
||||
@@ -37,6 +37,8 @@ name and the arguments that it was run with.**
|
||||
The arguments must be an **exact** match. This means that both
|
||||
the order and type of the arguments matter.
|
||||
|
||||
.. _gameplay_scripts_multithreadingscripts:
|
||||
|
||||
Multithreading scripts
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
A script can be run with multiple threads. This is also called multithreading.
|
||||
|
||||
@@ -7,6 +7,15 @@ buy and sell stocks in order to make money.
|
||||
|
||||
The WSE can be found in the 'City' tab, and is accessible in every city.
|
||||
|
||||
Fundamentals
|
||||
------------
|
||||
The Stock Market is not as simple as "buy at price X and sell at price Y". The following
|
||||
are several fundamental concepts you need to understand about the stock market.
|
||||
|
||||
.. note:: For those that have experience with finance/trading/investing, please be aware
|
||||
that the game's stock market does not function exactly like it does in the real
|
||||
world. So these concepts below should seem similar, but won't be exactly the same.
|
||||
|
||||
Positions: Long vs Short
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
When making a transaction on the stock market, there are two types of positions:
|
||||
@@ -16,16 +25,73 @@ is the exact opposite. In a Short position you purchase shares of a stock and
|
||||
earn a profit if the price of that stock decreases. This is also called 'shorting'
|
||||
a stock.
|
||||
|
||||
NOTE: Shorting stocks is not available immediately, and must be unlocked later in the
|
||||
game.
|
||||
.. note:: Shorting stocks is not available immediately, and must be unlocked later in the
|
||||
game.
|
||||
|
||||
Forecast & Second-Order Forecast
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
A stock's forecast is its likelihood of increasing or decreasing in value. The
|
||||
forecast is typically represented by its probability of increasing in either
|
||||
a decimal or percentage form. For example, a forecast of 70% means the stock
|
||||
has a 70% chance of increasing and a 30% chance of decreasing.
|
||||
|
||||
A stock's second-order forecast is the target value that its forecast trends towards.
|
||||
For example, if a stock has a forecast of 60% and a second-order forecast of 70%,
|
||||
then the stock's forecast should slowly trend towards 70% over time. However, this is
|
||||
determined by RNG so there is a chance that it may never reach 70%.
|
||||
|
||||
Both the forecast and the second-order forecast change over time.
|
||||
|
||||
A stock's forecast can be viewed after purchasing Four Sigma (4S) Market Data
|
||||
access. This lets you see the forecast info on the Stock Market UI. If you also
|
||||
purchase access to the 4S Market Data TIX API, then you can view a stock's forecast
|
||||
using the :js:func:`getStockForecast` function.
|
||||
|
||||
A stock's second-order forecast is always hidden.
|
||||
|
||||
.. _gameplay_stock_market_spread:
|
||||
|
||||
Spread (Bid Price & Ask Price)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
The **bid price** is the maximum price at which someone will buy a stock on the
|
||||
stock market.
|
||||
|
||||
The **ask price** is the minimum price that a seller is willing to receive for a stock
|
||||
on the stock market
|
||||
|
||||
The ask price will always be higher than the bid price (This is because if a seller
|
||||
is willing to receive less than the bid price, that transaction is guaranteed to
|
||||
happen). The difference between the bid and ask price is known as the **spread**.
|
||||
A stock's "price" will be the average of the bid and ask price.
|
||||
|
||||
The bid and ask price are important because these are the prices at which a
|
||||
transaction actually occurs. If you purchase a stock in the long position, the cost
|
||||
of your purchase depends on that stock's ask price. If you then try to sell that
|
||||
stock (still in the long position), the price at which you sell is the stock's
|
||||
bid price. Note that this is reversed for a short position. Purchasing a stock
|
||||
in the short position will occur at the stock's bid price, and selling a stock
|
||||
in the short position will occur at the stock's ask price.
|
||||
|
||||
Transactions Influencing Stock Forecast
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Buying or selling a large number of shares
|
||||
of a stock will influence that stock's forecast & second-order forecast.
|
||||
The forecast is the likelihood that the stock will increase or decrease in price.
|
||||
The magnitude of this effect depends on the number of shares being transacted.
|
||||
More shares will have a bigger effect.
|
||||
|
||||
The effect that transactions have on a stock's second-order forecast is
|
||||
significantly smaller than the effect on its forecast.
|
||||
|
||||
.. _gameplay_stock_market_order_types:
|
||||
|
||||
Order Types
|
||||
^^^^^^^^^^^
|
||||
There are three different types of orders you can make to buy or sell stocks on the exchange:
|
||||
Market Order, Limit Order, and Stop Order.
|
||||
|
||||
Note that Limit Orders and Stop Orders are not available immediately, and must be unlocked
|
||||
later in the game.
|
||||
.. note:: Limit Orders and Stop Orders are not available immediately, and must be unlocked
|
||||
later in the game.
|
||||
|
||||
When you place a Market Order to buy or sell a stock, the order executes immediately at
|
||||
whatever the current price of the stock is. For example if you choose to short a stock
|
||||
@@ -66,3 +132,77 @@ A Limit Order to sell will execute if the stock's price <= order's price
|
||||
A Stop Order to buy will execute if the stock's price <= order's price
|
||||
|
||||
A Stop Order to sell will execute if the stock's price >= order's price.
|
||||
|
||||
.. _gameplay_stock_market_player_actions_influencing_stock:
|
||||
|
||||
Player Actions Influencing Stocks
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
It is possible for your actions elsewhere in the game to influence the stock market.
|
||||
|
||||
Hacking
|
||||
If a server has a corresponding stock (e.g. *foodnstuff* server -> FoodNStuff
|
||||
stock), then hacking that server can decrease the stock's second-order
|
||||
forecast. This causes the corresponding stock's forecast to trend downwards in value
|
||||
over time.
|
||||
|
||||
This effect only occurs if you set the *stock* option to
|
||||
true when calling the :js:func:`hack` function. The chance that hacking a
|
||||
server will cause this effect is based on what percentage of the
|
||||
server's total money you steal.
|
||||
|
||||
A single hack will have a minor
|
||||
effect, but continuously hacking a server for lots of money over time
|
||||
will have a noticeable effect in making the stock's forecast trend downwards.
|
||||
|
||||
Growing
|
||||
If a server has a corresponding stock (e.g. *foodnstuff* server -> FoodNStuff
|
||||
stock), then growing that server's money can increase the stock's
|
||||
second-order forecast. This causes the corresponding stock's
|
||||
forecast to trend upwards in value over time.
|
||||
|
||||
This effect only occurs if you set the *stock* option to true when calling the
|
||||
:js:func:`grow` function. The chance that growing a server will cause this
|
||||
effect is based on what percentage of the server's total money to add to it.
|
||||
|
||||
A single grow operation will have a minor effect, but continuously growing
|
||||
a server for lots of money over time will have a noticeable effect in making
|
||||
the stock's forecast trend upwards.
|
||||
|
||||
Working for a Company
|
||||
If a company has a corresponding stock, then working for that company will
|
||||
increase the corresponding stock's second-order forecast. This will
|
||||
cause the stock's forecast to (slowly) trend upwards in value
|
||||
over time.
|
||||
|
||||
The potency of this effect is based on how "effective" you are when you work
|
||||
(i.e. its based on your stats and multipliers).
|
||||
|
||||
Automating the Stock Market
|
||||
---------------------------
|
||||
You can write scripts to perform automatic and algorithmic trading on the Stock Market.
|
||||
See :ref:`netscript_tixapi` for more details.
|
||||
|
||||
Under the Hood
|
||||
--------------
|
||||
Stock prices are updated every ~6 seconds.
|
||||
|
||||
Whether a stock's price moves up or down is determined by RNG. However,
|
||||
stocks have properties that can influence the way their price moves. These properties
|
||||
are hidden, although some of them can be made visible by purchasing the
|
||||
Four Sigma (4S) Market Data upgrade. Some examples of these properties are:
|
||||
|
||||
* Volatility
|
||||
* Likelihood of increasing or decreasing (i.e. the stock's forecast)
|
||||
* Likelihood of forecast increasing or decreasing (i.e. the stock's second-order forecast)
|
||||
* How easily a stock's price/forecast is influenced by transactions
|
||||
* Spread percentage
|
||||
* Maximum price (not a real maximum, more of a "soft cap")
|
||||
|
||||
Each stock has its own unique values for these properties.
|
||||
|
||||
Offline Progression
|
||||
-------------------
|
||||
The Stock Market does not change or process anything while the game has closed.
|
||||
However, it does accumulate time when offline. This accumulated time allows
|
||||
the stock market to run 50% faster when the game is opened again. This means
|
||||
that stock prices will update every ~4 seconds instead of 6.
|
||||
|
||||
@@ -16,6 +16,85 @@ the terminal and enter::
|
||||
|
||||
nano .fconf
|
||||
|
||||
|
||||
.. _terminal_filesystem:
|
||||
|
||||
Filesystem (Directories)
|
||||
------------------------
|
||||
The Terminal contains a **very** basic filesystem that allows you to store and
|
||||
organize your files into different directories. Note that this is **not** a true
|
||||
filesystem implementation. Instead, it is done almost entirely using string manipulation.
|
||||
For this reason, many of the nice & useful features you'd find in a real
|
||||
filesystem do not exist.
|
||||
|
||||
Here are the Terminal commands you'll commonly use when dealing with the filesystem.
|
||||
|
||||
* :ref:`ls_terminal_command`
|
||||
* :ref:`cd_terminal_command`
|
||||
* :ref:`mv_terminal_command`
|
||||
|
||||
Directories
|
||||
^^^^^^^^^^^
|
||||
In order to create a directory, simply name a file using a full absolute Linux-style path::
|
||||
|
||||
/scripts/myScript.js
|
||||
|
||||
This will automatically create a "directory" called :code:`scripts`. This will also work
|
||||
for subdirectories::
|
||||
|
||||
/scripts/hacking/helpers/myHelperScripts.script
|
||||
|
||||
Files in the root directory do not need to begin with a forward slash::
|
||||
|
||||
thisIsAFileInTheRootDirectory.txt
|
||||
|
||||
Note that there is no way to manually create or remove directories. The creation and
|
||||
deletion of directories is automatically handled as you name/rename/delete
|
||||
files.
|
||||
|
||||
Absolute vs Relative Paths
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Many Terminal commands accept absolute both absolute and relative paths for specifying a
|
||||
file.
|
||||
|
||||
An absolute path specifies the location of the file from the root directory (/).
|
||||
Any path that begins with the forward slash is an absolute path::
|
||||
|
||||
$ nano /scripts/myScript.js
|
||||
$ cat /serverList.txt
|
||||
|
||||
A relative path specifies the location of the file relative to the current working directory.
|
||||
Any path that does **not** begin with a forward slash is a relative path. Note that the
|
||||
Linux-style dot symbols will work for relative paths::
|
||||
|
||||
. (a single dot) - represents the current directory
|
||||
.. (two dots) - represents the parent directory
|
||||
|
||||
$ cd ..
|
||||
$ nano ../scripts/myScript.js
|
||||
$ nano ../../helper.js
|
||||
|
||||
Netscript
|
||||
^^^^^^^^^
|
||||
Note that in order to reference a file, :ref:`netscript` functions require the
|
||||
**full** absolute file path. For example
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
run("/scripts/hacking/helpers.myHelperScripts.script");
|
||||
rm("/logs/myHackingLogs.txt");
|
||||
rm("thisIsAFileInTheRootDirectory.txt");
|
||||
|
||||
.. note:: A full file path **must** begin with a forward slash (/) if that file
|
||||
is not in the root directory.
|
||||
|
||||
Missing Features
|
||||
^^^^^^^^^^^^^^^^
|
||||
These features that are typically in Linux filesystems have not yet been added to the game:
|
||||
|
||||
* Tab autocompletion does not work with relative paths
|
||||
* :code:`mv` only accepts full filepaths for the destination argument. It does not accept directories
|
||||
|
||||
Commands
|
||||
--------
|
||||
|
||||
@@ -98,6 +177,25 @@ Display a message (.msg), literature (.lit), or text (.txt) file::
|
||||
$ cat foo.lit
|
||||
$ cat servers.txt
|
||||
|
||||
.. _cd_terminal_command:
|
||||
|
||||
cd
|
||||
^^
|
||||
|
||||
$ cd [dir]
|
||||
|
||||
Change to the specified directory.
|
||||
|
||||
See :ref:`terminal_filesystem` for details on directories.
|
||||
|
||||
Note that this command works even for directories that don't exist. If you change
|
||||
to a directory that doesn't exist, it will not be created. A directory is only created
|
||||
once there is a file in it::
|
||||
|
||||
$ cd scripts/hacking
|
||||
$ cd /logs
|
||||
$ cd ..
|
||||
|
||||
check
|
||||
^^^^^
|
||||
|
||||
@@ -126,6 +224,8 @@ Both 'clear' and 'cls' do the same thing::
|
||||
$ clear
|
||||
$ cls
|
||||
|
||||
.. _connect_terminal_command:
|
||||
|
||||
connect
|
||||
^^^^^^^
|
||||
|
||||
@@ -165,8 +265,6 @@ Examples::
|
||||
$ expr 3 ** 3
|
||||
|
||||
|
||||
Evalutes a
|
||||
|
||||
free
|
||||
^^^^
|
||||
|
||||
@@ -193,6 +291,7 @@ detailed information about the Terminal command. Examples::
|
||||
$ help alias
|
||||
$ help scan-analyze
|
||||
|
||||
.. _home_terminal_command:
|
||||
|
||||
home
|
||||
^^^^
|
||||
@@ -213,9 +312,12 @@ kill
|
||||
^^^^
|
||||
|
||||
$ kill [script name] [args...]
|
||||
$ kill [pid]
|
||||
|
||||
Kill the script specified by the script name and arguments. Each argument must
|
||||
be separated by a space. Remember that a running script is uniquely identified
|
||||
Kill the script specified by the script filename and arguments OR by its PID.
|
||||
|
||||
If you are killing the script using its filename and arguments, then each argument
|
||||
must be separated by a space. Remember that a running script is uniquely identified
|
||||
by both its name and the arguments that are used to start it. So, if a script
|
||||
was ran with the following arguments::
|
||||
|
||||
@@ -225,35 +327,42 @@ Then to kill this script the same arguments would have to be used::
|
||||
|
||||
$ kill foo.script 50e3 sigma-cosmetics
|
||||
|
||||
Note that after issuing the 'kill' command for a script, it may take a few seconds for
|
||||
the script to actually stop running.
|
||||
If you are killing the script using its PID, then the PID argument must be numeric.
|
||||
|
||||
killall
|
||||
^^^^^^^
|
||||
|
||||
Kills all scripts on the current server.
|
||||
|
||||
.. _ls_terminal_command:
|
||||
|
||||
ls
|
||||
^^
|
||||
|
||||
$ ls [| grep pattern]
|
||||
$ ls [dir] [| grep pattern]
|
||||
|
||||
Prints files on the current server to the Terminal screen.
|
||||
Prints files and directories on the current server to the Terminal screen.
|
||||
|
||||
If this command is run with no arguments, then it prints all files on the current
|
||||
server to the Terminal screen. The files will be displayed in alphabetical
|
||||
order.
|
||||
If this command is run with no arguments, then it prints all files and directories on the current
|
||||
server to the Terminal screen. Directories will be printed first in alphabetical order,
|
||||
followed by the files (also in alphabetical order).
|
||||
|
||||
The '| grep pattern' is an optional parameter that can be used to only display files
|
||||
whose filenames match the specified pattern. For example, if you wanted to only display
|
||||
files with the .script extension, you could use::
|
||||
The :code:`dir` optional parameter allows you to specify the directory for which to display
|
||||
files.
|
||||
|
||||
The :code:`| grep pattern` optional parameter allows you to only display files and directories
|
||||
with a certain pattern in their names.
|
||||
|
||||
Examples::
|
||||
|
||||
// List files/directories with the '.script' extension in the current directory
|
||||
$ ls | grep .script
|
||||
|
||||
Alternatively, if you wanted to display all files with the word *purchase* in the filename,
|
||||
you could use::
|
||||
// List files/directories with the '.js' extension in the root directory
|
||||
$ ls / | grep .js
|
||||
|
||||
$ ls | grep purchase
|
||||
// List files/directories with the word 'purchase' in the name, in the :code:`scripts` directory
|
||||
$ ls scripts | grep purchase
|
||||
|
||||
|
||||
lscpu
|
||||
@@ -281,6 +390,28 @@ The first example above will print the amount of RAM needed to run 'foo.script'
|
||||
with a single thread. The second example above will print the amount of RAM needed
|
||||
to run 'foo.script' with 50 threads.
|
||||
|
||||
.. _mv_terminal_command:
|
||||
|
||||
mv
|
||||
^^
|
||||
|
||||
$ mv [source] [destination]
|
||||
|
||||
Move the source file to the specified destination in the filesystem.
|
||||
See :ref:`terminal_filesystem` for more details about the Terminal's filesystem.
|
||||
This command only works for scripts and text files (.txt). It cannot, however, be used
|
||||
to convert from script to text file, or vice versa.
|
||||
|
||||
This function can also be used to rename files.
|
||||
|
||||
.. note:: Unlike the Linux :code:`mv` command, the *destination* argument must be the
|
||||
full filepath. It cannot be a directory.
|
||||
|
||||
Examples::
|
||||
|
||||
$ mv hacking.script scripts/hacking.script
|
||||
$ mv myScript.js myOldScript.js
|
||||
|
||||
nano
|
||||
^^^^
|
||||
|
||||
@@ -346,6 +477,9 @@ scan
|
||||
Prints all immediately-available network connections. This will print a list
|
||||
of all servers that you can currently connect to using the 'connect' Terminal command.
|
||||
|
||||
|
||||
.. _scan_analyze_terminal_command:
|
||||
|
||||
scan-analyze
|
||||
^^^^^^^^^^^^
|
||||
|
||||
@@ -364,6 +498,8 @@ The information 'scan-analyze' displays about each server includes whether or
|
||||
not you have root access to it, its required hacking level, the number of open
|
||||
ports required to run NUKE.exe on it, and how much RAM it has.
|
||||
|
||||
.. _scp_terminal_command:
|
||||
|
||||
scp
|
||||
^^^
|
||||
|
||||
@@ -377,6 +513,8 @@ sudov
|
||||
|
||||
Prints whether or not you have root access to the current server.
|
||||
|
||||
.. _tail_terminal_command:
|
||||
|
||||
tail
|
||||
^^^^
|
||||
|
||||
@@ -450,7 +588,7 @@ The data can only be downloaded to a script (.script, .ns, .js) or a text file
|
||||
(.txt). If the target file already exists, it will be overwritten by this command.
|
||||
|
||||
Note that will not be possible to download data from many websites because they
|
||||
do not allow cross-origin origin sharing (CORS). This includes websites such
|
||||
do not allow cross-origin resource sharing (CORS). This includes websites such
|
||||
as gist and pastebin. One notable site it will work on is rawgithub. Example::
|
||||
|
||||
$ wget https://raw.githubusercontent.com/danielyxie/bitburner/master/README.md game_readme.txt
|
||||
|
||||
@@ -3,25 +3,442 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
v0.51.1 - 2021-04-06 Bugfixes because the author of the last patch sucks (it's hydroflame)
|
||||
------------------------------------------------------------------------------------------
|
||||
|
||||
**Netscript**
|
||||
* 'getPlayer' returns players faction and tor
|
||||
* 'hospitalization' is a new singularity function.
|
||||
* 'gang.getMemberInformation' now returns more information.
|
||||
* 'hacknet.hashCapacity' is a new hacknet function that returns the maximum hash capacity.
|
||||
|
||||
**Hospitalization**
|
||||
* Now only cost at most 10% of your money.
|
||||
|
||||
**Bugfix**
|
||||
* confirmation dialog box no longer use previous text
|
||||
|
||||
**Accessibility**
|
||||
* The game is a little easier to handle for screen readers (yes, there's an
|
||||
absolute legend playing this game with a screen reader)
|
||||
* Infiltration use buttons instead of a-links
|
||||
* New option to disable ASCII art. This will make the metro map and world
|
||||
map display as a list of buttons.
|
||||
|
||||
**Misc.**
|
||||
* 'fl1ght.exe' will no longer suggest the combat path. Related faction
|
||||
requirements unchanged.
|
||||
|
||||
v0.51.0 - 2021-03-31 Formulas (hydroflame)
|
||||
------------------------------------------
|
||||
|
||||
**Formulas API**
|
||||
|
||||
* A new API is introduced, this gives players access to various formulas used in the game.
|
||||
It'll help you make more informed decisions.
|
||||
|
||||
**Netscript**
|
||||
|
||||
* 'getServer' is a new function meant to be used with the formulas API.
|
||||
* 'getPlayer' is a new function meant to be used with the formulas API.
|
||||
* 'getStats' and 'getCharacterInformation' are deprecated in favor of 'getPlayer'
|
||||
* 'getCurrentServer' is a new function that returns the server the player is currently connected.
|
||||
|
||||
**Display**
|
||||
|
||||
* All money should now consistently be orange.
|
||||
* All rep should now consistently be light-yellow.
|
||||
* Most numbers should display consistently now (aka all money is formatted the same).
|
||||
|
||||
**Click to copy**
|
||||
|
||||
* Certain UI elements are now 'click-to-copy'
|
||||
|
||||
v0.50.2 - 2021-03-25 Everyone asked for this one. (hydroflame)
|
||||
--------------------------------------------------------------
|
||||
|
||||
**BitNodeMultipliers**
|
||||
|
||||
* 'GangKarmaRequirements': a new multipler that influences how much karma is required to make a gang different bitnodes.
|
||||
|
||||
**Netscript**
|
||||
|
||||
* 'connect': a new singularity function that connects you to a server. (like the terminal command)
|
||||
* 'manualHack': a new singularity function that performs a manual hack on the players current server.
|
||||
* ns2 stack trace works on Firefox now.
|
||||
|
||||
**Misc.**
|
||||
|
||||
* New shortcut, Alt + b, brings you to bladeburner
|
||||
* New shortcut, Alt + g, brings you to gang
|
||||
|
||||
v0.50.1 - 2021-03-22 (hydroflame)
|
||||
---------------------------------
|
||||
**Netscript**
|
||||
|
||||
* getTaskStats works
|
||||
|
||||
**Source-File -1**
|
||||
|
||||
* Added a new Exploit
|
||||
|
||||
**Factions**
|
||||
|
||||
* Augmentations offered by a Faction but already bought are in a separate list at the bottom of the page.
|
||||
|
||||
**Bug fixed**
|
||||
|
||||
* Fixed a bug where completing a maxed non-repeatable BitNode would make its color on the BitVerse like level 1.
|
||||
|
||||
**Misc.**
|
||||
|
||||
* Minor spacing in stats tables.
|
||||
|
||||
v0.50.0 - 2021-03-20 Intelligence (hydroflame)
|
||||
----------------------------------------------
|
||||
|
||||
**Intelligence**
|
||||
|
||||
* int exp gain and effect has been reworked. It is now much more easy to
|
||||
acquire and far more powerful. The goal here is to feel like players have
|
||||
another tool in their arsenal.
|
||||
|
||||
**Factions**
|
||||
|
||||
* Hacking factions no longer have hacking level requirements since their associated servers do.
|
||||
|
||||
**Misc.**
|
||||
|
||||
* Sleeve styling.
|
||||
* number formatting
|
||||
* remove wiki button in Hacking Missions.
|
||||
* Fix NaN displayed when very very large numbers are reached.
|
||||
|
||||
v0.49.2 - 2021-03-13 (hydroflame)
|
||||
---------------------------------
|
||||
|
||||
**BN8**
|
||||
|
||||
* A new bitnode multipler has been added, it lets you reduce money from a
|
||||
server without gaining actually any money. This is important for BN8 where
|
||||
hack/grow can influence the stock market. No money can be gained from
|
||||
hacking but server money can still be reduced.
|
||||
|
||||
**Documentation**
|
||||
|
||||
* readthedocs should now be more consistent and many examples were added.
|
||||
|
||||
**Netscript**
|
||||
|
||||
* Ace editor will now correctly highlight all functions.
|
||||
* 'tFormat' is a new netscript function that returns a human readable
|
||||
representation of milliseconds. eg. "2 hours 15 minute 43 seconds"
|
||||
|
||||
**Gang**
|
||||
|
||||
* style improvements
|
||||
|
||||
**Bladeburner**
|
||||
|
||||
* style improvements
|
||||
* fix bug where 'skill list SKILL' would crash if skill is level 0.
|
||||
|
||||
**Sleeve**
|
||||
|
||||
* karma gain now scales with sync.
|
||||
|
||||
**Misc.**
|
||||
|
||||
* Fix issue where the effective stats under Character>Stats were being calculated.
|
||||
|
||||
v0.49.0 - 2021-03-11 Source-File -1 (hydroflame)
|
||||
------------------------------------------------
|
||||
|
||||
**Source-File -1**
|
||||
|
||||
* For advanced players: The game now embraces exploits and will reward
|
||||
players for doing so.
|
||||
|
||||
**Gang**
|
||||
|
||||
* ascension is less effective as the ascension multiplier goes up.
|
||||
* territory gain scales with power difference.
|
||||
|
||||
**Netscript**
|
||||
|
||||
* 'gang.getEquipmentStats' returns the stats of the equipment.
|
||||
* 'gang.getTaskStats' returns the stats of a task.
|
||||
* 'getCrimeStats' returns the stats of a crime.
|
||||
* Crashes should now print the ns stack trace.
|
||||
* Log messages are now more consistent.
|
||||
* 'softReset' now accepts a callback script like 'installAugmentations'
|
||||
|
||||
**Misc.**
|
||||
|
||||
* Minor formatting under Hacking>Active Scripts
|
||||
* option menu colors now match the rest of the game, kinda.
|
||||
|
||||
|
||||
v0.48.0 - ASCII - 2021-03-07 (hydroflame)
|
||||
-----------------------------------------
|
||||
|
||||
**ASCII**
|
||||
|
||||
* Travel Agency now displays a world map
|
||||
* Cities are now top view of metro station maps
|
||||
|
||||
**Netscript**
|
||||
|
||||
* 'softReset' is a new netscript function that performs a soft reset
|
||||
regardless of if the player has bought augmentations or not.
|
||||
* 'getAugmentationStats' is a new netscript function that returns the stats of
|
||||
an augmentation.
|
||||
* getCharacterInformation now additionally returns exp
|
||||
* pid resets back to 1 when installing or destroying a BitNode.
|
||||
* New '.ns' scripts start with a main function.
|
||||
* 'hacknet.maxNumNodes' returns the maximum number of hacknet nodes.
|
||||
|
||||
**Bladeburner**
|
||||
|
||||
* Current stamina will scale as max stamina increases, this prevents players
|
||||
from having very high penalty when they gain huge amount of exp at the
|
||||
start of a reset.
|
||||
|
||||
**Misc.**
|
||||
|
||||
* Fixed an issue where SF3 was listed as infinitly repeatable and SF12 as
|
||||
having a limit of 3.
|
||||
* Fixed an issue where the gang equipment screen would freeze the game if a
|
||||
script installed augmentations while it is open.
|
||||
* All BonusTime now displays in the 'H M S' format.
|
||||
* Donation textbox style updated to match the rest of the game.
|
||||
* Corporation name style updated to match the rest of the game.
|
||||
* minor formatting under Hacking>Active Scripts
|
||||
* typo in BN12 description
|
||||
* BN12 now reduces contract money
|
||||
* Character>Stats percentages are aligned, server and hacknet limit are
|
||||
displayed, if the player has SF5 the reduces stats are shown.
|
||||
* Character>Augmentations now displays by how much the player stats will
|
||||
increase.
|
||||
* Character>Augmentations has a badge indicating how many augs the player
|
||||
has bought but not installed
|
||||
* Character>Factions has a badge indicating how many factions have pending
|
||||
invites.
|
||||
|
||||
v0.47.2 - 7/15/2019
|
||||
-------------------
|
||||
|
||||
**Netscript Changes**
|
||||
|
||||
* Added tail() Netscript function
|
||||
* hacknet.getNodeStats() function now returns an additional property for Hacknet Servers: hashCapacity
|
||||
* When writing to a file, the write() function now casts the data being written to a string (using String())
|
||||
* BitNode-selection page now shows what Source-File level you have for each BitNode
|
||||
* Overloaded kill() function so that you can kill a script by its PID
|
||||
* spawn() now only takes 10 seconds to run (decreased from 20 seconds)
|
||||
* run() and exec() now return the PID of the newly-executed scripts, rather than a boolean
|
||||
* (A PID is just a positive integer)
|
||||
* run(), exec(), and spawn() no longer need to be await-ed in NetscriptJS
|
||||
* Script parsing and RAM calculations now support ES9
|
||||
* installAugmentations() no longer has a return value since it causes all scripts to die
|
||||
* isBusy() now returns true if you are in a Hacking Mission
|
||||
* Bug fix: workForFaction() function now properly accounts for disabled logs
|
||||
* Bug fix: RAM should now be properly calculated when running a callback script with installAugmentations()
|
||||
* Bug fix: Fixed bug that caused scripts killed by exit()/spawn() to "clean up" twice
|
||||
|
||||
**Misc Changes**
|
||||
|
||||
* The 'kill' Terminal command can now kill a script by its PID
|
||||
* Added 'Solarized Dark' theme to CodeMirror editor
|
||||
* After Infiltration, you will now return to the company page rather than the city page
|
||||
* Bug fix: Stock Market UI should no longer crash for certain locale settings
|
||||
* Bug fix: You can now properly remove unfinished programs (the `*.exe-N%-INC` files)
|
||||
* Bug fix: Fixed an issue that allowed you to increase money on servers with a 'maxMoney' of 0 (like CSEC)
|
||||
* Bug fix: Scripts no longer persist if they were started with syntax/import errors
|
||||
* Bug fix: 'hack' and 'analyze' Terminal commands are now blocking
|
||||
* Bug fix: Exp earned by duplicate sleeves at universities/gyms now takes hash upgrades into account
|
||||
|
||||
v0.47.1 - 6/27/2019
|
||||
-------------------
|
||||
* Stock Market changes:
|
||||
* Transactions no longer influence stock prices (but they still influence forecast)
|
||||
* Changed the way stocks behave, particularly with regard to how the stock forecast occasionally "flips"
|
||||
* Hacking & growing a server can potentially affect the way the corresponding stock's forecast changes
|
||||
* Working for a company positively affects the way the corresponding stock's forecast changes
|
||||
|
||||
* Scripts now start/stop instantly
|
||||
* Improved performance when starting up many copies of a new NetscriptJS script (by Ornedan)
|
||||
* Improved performance when killing scripts
|
||||
* Dialog boxes can now be closed with the ESC key (by jaguilar)
|
||||
* NetscriptJS scripts should now be "re-compiled" if their dependencies change (by jaguilar)
|
||||
* write() function should now properly cause NetscriptJS scripts to "re-compile" (by jaguilar)
|
||||
|
||||
v0.47.0 - 5/17/2019
|
||||
-------------------
|
||||
* Stock Market changes:
|
||||
* Implemented spread. Stock's now have bid and ask prices at which transactions occur
|
||||
* Large transactions will now influence a stock's price and forecast
|
||||
* This "influencing" can take effect in the middle of a transaction
|
||||
* See documentation for more details on these changes
|
||||
* Added getStockAskPrice(), getStockBidPrice() Netscript functions to the TIX API
|
||||
* Added getStockPurchaseCost(), getStockSaleGain() Netscript functions to the TIX API
|
||||
|
||||
* Re-sleeves can no longer have the NeuroFlux Governor augmentation
|
||||
* This is just a temporary patch until the mechanic gets re-worked
|
||||
|
||||
* hack(), grow(), and weaken() functions now take optional arguments for number of threads to use (by MasonD)
|
||||
* codingcontract.attempt() now takes an optional argument that allows you to configure the function to return a contract's reward
|
||||
* Adjusted RAM costs of Netscript Singularity functions (mostly increased)
|
||||
* Adjusted RAM cost of codingcontract.getNumTriesRemaining() Netscript function
|
||||
* Netscript Singularity functions no longer cost extra RAM outside of BitNode-4
|
||||
* Corporation employees no longer have an "age" stat
|
||||
* Gang Wanted level gain rate capped at 100 (per employee)
|
||||
* Script startup/kill is now processed every 3 seconds, instead of 6 seconds
|
||||
* getHackTime(), getGrowTime(), and getWeakenTime() now return Infinity if called on a Hacknet Server
|
||||
* Money/Income tracker now displays money lost from hospitalizations
|
||||
* Exported saves now have a unique filename based on current BitNode and timestamp
|
||||
* Maximum number of Hacknet Servers decreased from 25 to 20
|
||||
* Bug Fix: Corporation employees stats should no longer become negative
|
||||
* Bug Fix: Fixed sleeve.getInformation() throwing error in certain scenarios
|
||||
* Bug Fix: Coding contracts should no longer generate on the w0r1d_d43m0n server
|
||||
* Bug Fix: Duplicate Sleeves now properly have access to all Augmentations if you have a gang
|
||||
* Bug Fix: getAugmentationsFromFaction() & purchaseAugmentation() functions should now work properly if you have a gang
|
||||
* Bug Fix: Fixed issue that caused messages (.msg) to be sent when refreshing/reloading the game
|
||||
* Bug Fix: Purchasing hash upgrades for Bladeburner/Corporation when you don't actually have access to those mechanics no longer gives hashes
|
||||
* Bug Fix: run(), exec(), and spawn() Netscript functions now throw if called with 0 threads
|
||||
* Bug Fix: Faction UI should now automatically update reputation
|
||||
* Bug Fix: Fixed purchase4SMarketData()
|
||||
* Bug Fix: Netscript1.0 now works properly for multiple 'namespace' imports (import * as namespace from "script")
|
||||
* Bug Fix: Terminal 'wget' command now correctly evaluates directory paths
|
||||
* Bug Fix: wget(), write(), and scp() Netscript functions now fail if an invalid filepath is passed in
|
||||
* Bug Fix: Having Corporation warehouses at full capacity should no longer freeze game in certain conditions
|
||||
* Bug Fix: Prevented an exploit that allows you to buy multiple copies of an Augmentation by holding the 'Enter' button
|
||||
* Bug Fix: gang.getOtherGangInformation() now properly returns a deep copy
|
||||
* Bug Fix: Fixed getScriptIncome() returning an undefined value
|
||||
* Bug Fix: Fixed an issue with Hacknet Server hash rate not always updating
|
||||
|
||||
v0.46.3 - 4/20/2019
|
||||
-------------------
|
||||
* Added a new Augmentation: The Shadow's Simulacrum
|
||||
* Improved tab autocompletion feature in Terminal so that it works better with directories
|
||||
* Bug Fix: Tech vendor location UI now properly refreshed when purchasing a TOR router
|
||||
* Bug Fix: Fixed UI issue with faction donations
|
||||
* Bug Fix: The money statistics & breakdown should now properly track money earned from Hacknet Server (hashes -> money)
|
||||
* Bug Fix: Fixed issue with changing input in 'Minimum Path Sum in a Triangle' coding contract problem
|
||||
* Fixed several typos in various places
|
||||
|
||||
v0.46.2 - 4/14/2019
|
||||
-------------------
|
||||
* Source-File 2 now allows you to form gangs in other BitNodes when your karma reaches a very large negative value
|
||||
* (Karma is a hidden stat and is lowered by committing crimes)
|
||||
|
||||
* Gang changes:
|
||||
* Bug Fix: Gangs can no longer clash with themselve
|
||||
* Bug Fix: Winning against another gang should properly reduce their power
|
||||
|
||||
* Bug Fix: Terminal 'wget' command now works properly
|
||||
* Bug Fix: Hacknet Server Hash upgrades now properly reset upon installing Augs/switching BitNodes
|
||||
* Bug Fix: Fixed button for creating Corporations
|
||||
|
||||
v0.46.1 - 4/12/2019
|
||||
-------------------
|
||||
* Added a very rudimentary directory system to the Terminal
|
||||
* Details here: https://bitburner.readthedocs.io/en/latest/basicgameplay/terminal.html#filesystem-directories
|
||||
|
||||
* Added numHashes(), hashCost(), and spendHashes() functions to the Netscript Hacknet Node API
|
||||
* 'Generate Coding Contract' hash upgrade is now more expensive
|
||||
* 'Generate Coding Contract' hash upgrade now generates the contract randomly on the server, rather than on home computer
|
||||
* The cost of selling hashes for money no longer increases each time
|
||||
* Selling hashes for money now costs 4 hashes (in exchange for $1m)
|
||||
* Bug Fix: Hacknet Node earnings should work properly when game is inactive/offline
|
||||
* Bug Fix: Duplicate Sleeve augmentations are now properly reset when switching to a new BitNode
|
||||
|
||||
v0.46.0 - 4/3/2019
|
||||
------------------
|
||||
* Added BitNode-9: Hacktocracy
|
||||
* Changed BitNode-11's multipliers to make it slightly harder overall
|
||||
* Source-File 11 is now slightly stronger
|
||||
* Added several functions to Netscript Sleeve API for buying Sleeve augmentations (by hydroflame)
|
||||
* Added a new stat for Duplicate Sleeves: Memory
|
||||
* Increase baseline experience earned from Infiltration, but it now gives diminishing returns (on exp) as you get to higher difficulties/levels
|
||||
* In Bladeburner, stamina gained from Hyperbolic Regeneration Chamber is now a percentage of your max stamina
|
||||
|
||||
* Corporation Changes:
|
||||
* 'Demand' value of products decreases more slowly
|
||||
* Bug Fix: Fixed a Corporation issue that broke the Market-TA2 Research
|
||||
* Bug Fix: Issuing New Shares now works properly
|
||||
|
||||
* Bug Fix: Money Statistics tracker was incorrectly recording profits when selling stocks manually
|
||||
* Bug Fix: Fixed an issue with the job requirement tooltip for security jobs
|
||||
|
||||
v0.45.1 - 3/23/2019
|
||||
-------------------
|
||||
* Added two new Corporation Researches
|
||||
* General UI improvements (by hydroflame and koriar)
|
||||
* Bug Fix: Sleeve Netscript API should no longer cause Dynamic RAM errors
|
||||
* Bug Fix: sleeve.getSleeveStats() should now work properly
|
||||
|
||||
v0.45.0 - 3/22/2019
|
||||
-------------------
|
||||
* Corporation changes:
|
||||
* Decreased the time of a full market cycle from 15 seconds to 10 seconds.
|
||||
* This means that each Corporation 'state' will now only take 2 seconds, rather than 3
|
||||
* Increased initial salaries for newly-hired employees
|
||||
* Increased the cost multiplier for upgrading office size (the cost will increase faster)
|
||||
* The stats of your employees now has a slightly larger effect on production & sales
|
||||
* Added several new Research upgrades
|
||||
* Market-TA research now allows you to automatically set sale price at optimal values
|
||||
* Market-TA research now works for Products (not just Materials)
|
||||
* Reduced the amount of Scientific Research needed to unlock the Hi-Tech R&D Laboratory from 10k to 5k
|
||||
* Energy Material requirement of the Software industry reduced from 1 to 0.5
|
||||
* It is now slightly easier to increase the Software industry's production multiplier
|
||||
* Industries now have a maximum number of allowed products, starting at 3. This can be increased through research.
|
||||
* You can now see an approximation of how each material affects an industry's production multiplier by clicking the "?" help tip next to it
|
||||
* Significantly changed the effects of the different employee positions. See updated descriptions
|
||||
* Reduced the amount of money you gain from private investors
|
||||
* Training employees is now 3x more effective
|
||||
* Bug Fix: An industry's products are now properly separated between different cities
|
||||
|
||||
* The QLink Augemntation is now significantly stronger, but also significantly more expensive (by hydroflame)
|
||||
* Added a Netscript API for Duplicate Sleeves (by hydroflame)
|
||||
* Modified the multipliers of BitNode-3 and BitNode-8 to make them slightly harder
|
||||
* After installing Augmentations, Duplicate Sleeves will now default to Synchronize if their Shock is 0
|
||||
* Bug Fix: Bladeburner's Hyperbolic Regeneration Chamber should no longer instantly refill all stamina
|
||||
* Bug Fix: growthAnalyze() function now properly accounts for BitNode multipliers
|
||||
* Bug Fix: The cost of purchasing Augmentations for Duplicate Sleeves no longer scales with how many Augs you've purchased for yourself
|
||||
|
||||
v0.44.1 - 3/4/2019
|
||||
------------------
|
||||
* Duplicate Sleeve changes:
|
||||
* You can now purchase Augmentations for your Duplicate Sleeves
|
||||
* Sleeves are now assigned to Shock Recovery task by default
|
||||
* Shock Recovery and Synchronize tasks are now twice as effective
|
||||
|
||||
* Changed documentation so that Netscript functions are own their own pages. Sorry if this is annoying, it was necessary for properly cross-referencing
|
||||
* Officially deprecated the Wiki (the fandom site). Use the 'readthedocs' Documentation instead
|
||||
* Bug Fix: 'rm' Terminal and Netscript commands now work on non-program files that have '.exe' in the name (by Github user MasonD)
|
||||
* Bug Fix: The 'Find All Valid Math Expressions' Coding Contract should now properly ignore whitespace in answers
|
||||
* Bug Fix: The 'Merge Overlapping Intervals' Coding Contract should now properly accept 2D arrays when being attempted through Netscript
|
||||
|
||||
v0.44.0 - 2/26/2019
|
||||
-------------------
|
||||
* Bladeburner Changes:
|
||||
** Reduced the amount of rank needed to earn a skill point
|
||||
** Reduced the effects of the "Reaper" and "Evasive System" skills
|
||||
** Increased the effect of the "Hyperdrive" and "Hands of Midas" skills
|
||||
** Slightly increased the rate which the skill point cost rises for almost all skills
|
||||
** The "Overlock" Skill now has a maximum level of 90 instead of 95
|
||||
** Money earned from Contracts increased by 400%
|
||||
** Changed the way population affects success rate. Extreme populations now have less dramatic effects
|
||||
** Added two new General Actions: Diplomacy and Hyperbolic Regeneration Chamber
|
||||
** Lowered the rep and money cost of the "Blade's Simulacrum" augmentation
|
||||
** Significantly decreased the initial amount of Contracts/Operations (the "Contracts/Operations remaining" value)
|
||||
** Decreased the rate at which the amount of Contracts/Operations increases over time
|
||||
** Decreased the number of successes you need to increase the max level of a Contract/Operation
|
||||
** Increased the average number of Synthoid communities each city has
|
||||
** Reduced the amount by which a successful raid will decrease the population of a city
|
||||
** The "riots" event will now increase the chaos of a city by a greater amount
|
||||
** Significantly increased the effect that Agility and Dexterity have on action time
|
||||
* Reduced the amount of rank needed to earn a skill point
|
||||
* Reduced the effects of the "Reaper" and "Evasive System" skills
|
||||
* Increased the effect of the "Hyperdrive" and "Hands of Midas" skills
|
||||
* Slightly increased the rate which the skill point cost rises for almost all skills
|
||||
* The "Overlock" Skill now has a maximum level of 90 instead of 95
|
||||
* Money earned from Contracts increased by 400%
|
||||
* Changed the way population affects success rate. Extreme populations now have less dramatic effects
|
||||
* Added two new General Actions: Diplomacy and Hyperbolic Regeneration Chamber
|
||||
* Lowered the rep and money cost of the "Blade's Simulacrum" augmentation
|
||||
* Significantly decreased the initial amount of Contracts/Operations (the "Contracts/Operations remaining" value)
|
||||
* Decreased the rate at which the amount of Contracts/Operations increases over time
|
||||
* Decreased the number of successes you need to increase the max level of a Contract/Operation
|
||||
* Increased the average number of Synthoid communities each city has
|
||||
* Reduced the amount by which a successful raid will decrease the population of a city
|
||||
* The "riots" event will now increase the chaos of a city by a greater amount
|
||||
* Significantly increased the effect that Agility and Dexterity have on action time
|
||||
* Added new BitNode multipliers:
|
||||
* HomeComputerRamCost - Affects how much it costs to upgrade home computer's RAM
|
||||
* DaedalusAugsRequirement - Affects how many Augmentations you need in order to get invited to Daedalus
|
||||
|
||||
@@ -64,9 +64,9 @@ documentation_title = '{0} Documentation'.format(project)
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.43'
|
||||
version = '0.51'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.43.0'
|
||||
release = '0.51.1'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
Guides & Tips
|
||||
=============
|
||||
|
||||
Getting Started Guide for Intermediate Programmers
|
||||
|
||||
Beginners FAQ
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
|
||||
Getting Started Guide for Beginner Programmers
|
||||
Getting Started Guide for Intermediate Programmers
|
||||
What BitNode should I do?
|
||||
Getting Started Guide for Beginner Programmers <guidesandtips/gettingstartedguideforbeginnerprogrammers>
|
||||
What BitNode should I do?<guidesandtips/recommendedbitnodeorder>
|
||||
|
||||
@@ -0,0 +1,877 @@
|
||||
Getting Started Guide for Beginner Programmers
|
||||
==============================================
|
||||
|
||||
.. note:: Note that the scripts and strategies given in this guide aren't necessarily
|
||||
optimal. They're just meant to introduce you to the game and help you get
|
||||
started.
|
||||
|
||||
This is an introductory guide to getting started with Bitburner. It is not meant to be a
|
||||
comprehensive guide for the entire game, only the early stages. If you are confused
|
||||
or overwhelmed by the game, especially the programming and scripting aspects, this
|
||||
guide is perfect for you!
|
||||
|
||||
Note that this guide is tailored towards those with minimal programming experience.
|
||||
|
||||
Introduction
|
||||
------------
|
||||
Bitburner is a cyberpunk-themed incremental RPG. The player progresses by raising
|
||||
their :ref:`gameplay_stats`, earning money, and :ref:`climbing the corporate ladder <gameplay_companies>`.
|
||||
Eventually, after reaching certain criteria, the player will begin receiving invitations
|
||||
from :ref:`gameplay_factions`. Joining these factions and working for them will unlock
|
||||
:ref:`gameplay_augmentations`. Purchasing and installing Augmentations provide persistent
|
||||
upgrades and are necessary for progressing in the game.
|
||||
|
||||
The game has a minimal story/quest-line that can be followed to reach the end of the game.
|
||||
Since this guide is only about getting started with Bitburner, it will not cover the
|
||||
entire "quest-line".
|
||||
|
||||
First Steps
|
||||
-----------
|
||||
I'm going to assume you followed the introductory tutorial when you first began the game.
|
||||
In this introductory tutorial you created a script called :code:`foodnstuff.script` and ran it
|
||||
on the :code:`foodnstuff` server. Right now, we'll kill this script. There are two ways
|
||||
to do this:
|
||||
|
||||
1. You can go to the Terminal and enter::
|
||||
|
||||
$ kill foodnstuff.script
|
||||
|
||||
2. You can go to the :code:`Active Scripts` page (|Keyboard shortcut| Alt + s) and
|
||||
press the "Kill Script" button for :code:`foodnstuff.script`.
|
||||
|
||||
If you skipped the introductory tutorial, then ignore the part above. Instead, go to the
|
||||
:code:`Hacknet Nodes` page (|Keyboard shortcut| Alt + h) and purchase a
|
||||
Hacknet Node to start generating some passive income.
|
||||
|
||||
Creating our First Script
|
||||
-------------------------
|
||||
Now, we'll create a generic hacking script that can be used early on in the game (or throughout the
|
||||
entire game, if you want).
|
||||
|
||||
Before we write the script, here are some things you'll want to familiarize yourself with:
|
||||
|
||||
* :ref:`gameplay_hacking_generalhackingmechanics`
|
||||
* :ref:`gameplay_hacking_serversecurity`
|
||||
* :js:func:`hack`
|
||||
* :js:func:`grow`
|
||||
* :js:func:`weaken`
|
||||
* :js:func:`brutessh`
|
||||
* :js:func:`nuke`
|
||||
|
||||
To briefly summarize the information from the links above: Each server has a
|
||||
security level that affects how difficult it is to hack. Each server also has a
|
||||
certain amount of money, as well as a maximum amount of money it can hold. Hacking a
|
||||
server steals a percentage of that server's money. The :js:func:`hack` Netscript function
|
||||
is used to hack server. The :js:func:`grow` Netscript function is used to increase
|
||||
the amount of money available on a server. The :js:func:`weaken` Netscript function is
|
||||
used to decrease a server's security level.
|
||||
|
||||
Now let's move on to actually creating the script.
|
||||
Go to your home computer and then create a script called :code:`early-hack-template.script` by
|
||||
going to Terminal and entering the following two commands::
|
||||
|
||||
$ home
|
||||
$ nano early-hack-template.script
|
||||
|
||||
This will take you to the script editor, which you can use to code and create
|
||||
:ref:`gameplay_scripts`. It will be helpful to consult the :ref:`netscript` documentation.
|
||||
Specifically, you'll want to take a look at :ref:`netscriptfunctions`.
|
||||
|
||||
Enter the following code in the script editor:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
// Defines the "target server", which is the server
|
||||
// that we're going to hack. In this case, it's "foodnstuff"
|
||||
var target = "foodnstuff";
|
||||
|
||||
// Defines how much money a server should have before we hack it
|
||||
// In this case, it is set to 75% of the server's max money
|
||||
var moneyThresh = getServerMaxMoney(target) * 0.75;
|
||||
|
||||
// Defines the maximum security level the target server can
|
||||
// have. If the target's security level is higher than this,
|
||||
// we'll weaken it before doing anything else
|
||||
var securityThresh = getServerMinSecurityLevel(target) + 5;
|
||||
|
||||
// If we have the BruteSSH.exe program, use it to open the SSH Port
|
||||
// on the target server
|
||||
if (fileExists("BruteSSH.exe", "home")) {
|
||||
brutessh(target);
|
||||
}
|
||||
|
||||
// Get root access to target server
|
||||
nuke(target);
|
||||
|
||||
// Infinite loop that continously hacks/grows/weakens the target server
|
||||
while(true) {
|
||||
if (getServerSecurityLevel(target) > securityThresh) {
|
||||
// If the server's security level is above our threshold, weaken it
|
||||
weaken(target);
|
||||
} else if (getServerMoneyAvailable(target) < moneyThresh) {
|
||||
// If the server's money is less than our threshold, grow it
|
||||
grow(target);
|
||||
} else {
|
||||
// Otherwise, hack it
|
||||
hack(target);
|
||||
}
|
||||
}
|
||||
|
||||
The script above contains comments that document what it does, but let's go through it
|
||||
step-by-step anyways.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var target = "foodnstuff";
|
||||
|
||||
This first command defines a string which contains our target server. That's the server
|
||||
that we're going to hack. For now, it's set to `foodnstuff` because that's the only
|
||||
server with a required hacking level of 1. If you want to hack a different server,
|
||||
simply change this
|
||||
variable to be the hostname of another server.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var moneyThresh = getServerMaxMoney(target) * 0.75;
|
||||
|
||||
This second command defines a numerical value representing the minimum
|
||||
amount of money that must be available on the target server in order for our script
|
||||
to hack it. If the money available on the target server is less than this value,
|
||||
then our script will :js:func:`grow` the server rather than hacking it.
|
||||
It is set to 75% of the maximum amount of money that can be available on the server.
|
||||
The :js:func:`getServerMaxMoney` Netscript function is used to find this value
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var securityThresh = getServerMinSecurityLevel(target) + 5;
|
||||
|
||||
This third command defines a numerical value representing the maximum security level
|
||||
the target server can have. If the target server's security level is higher than
|
||||
this value, then our script will :js:func:`weaken` the script before doing anything else.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
if (fileExists("BruteSSH.exe", "home")) {
|
||||
brutessh(target);
|
||||
}
|
||||
|
||||
nuke(target);
|
||||
|
||||
This section of code is used to gain root access on the target server. This is
|
||||
necessary for hacking. See :ref:`here for more details <gameplay_hacking>`.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
while (true) {
|
||||
if (getServerSecurityLevel(target) > securityThresh) {
|
||||
// If the server's security level is above our threshold, weaken it
|
||||
weaken(target);
|
||||
} else if (getServerMoneyAvailable(target) < moneyThresh) {
|
||||
// Otherwise, if the server's money is less than our threshold, grow it
|
||||
grow(target);
|
||||
} else {
|
||||
// Otherwise, hack it
|
||||
hack(target);
|
||||
}
|
||||
}
|
||||
|
||||
This is the main section that drives our script. It dictates the script's logic
|
||||
and carries out the hacking operations. The `while (true)` creates an infinite loop
|
||||
that will continuously run the hacking logic until the the script is killed.
|
||||
|
||||
Running our Scripts
|
||||
-------------------
|
||||
Now we want to start running our hacking script so that it can start earning us
|
||||
money and experience. Our home computer only has 8GB of RAM and we'll be using it for
|
||||
something else later. So instead, we'll take advantage of the RAM on other machines.
|
||||
|
||||
Go to |Terminal| and enter the following command::
|
||||
|
||||
$ scan-analyze 2
|
||||
|
||||
This will show detailed information about some servers on the network. The
|
||||
**network is randomized so it will be different for every person**.
|
||||
Here's what mine showed at the time I made this::
|
||||
|
||||
[home ~]> scan-analyze 2
|
||||
~~~~~~~~~~ Beginning scan-analyze ~~~~~~~~~~
|
||||
|
||||
>foodnstuff
|
||||
--Root Access: NO, Required hacking skill: 1
|
||||
--Number of open ports required to NUKE: 0
|
||||
--RAM: 16
|
||||
|
||||
>sigma-cosmetics
|
||||
--Root Access: NO, Required hacking skill: 5
|
||||
--Number of open ports required to NUKE: 0
|
||||
--RAM: 16
|
||||
|
||||
>joesguns
|
||||
--Root Access: NO, Required hacking skill: 10
|
||||
--Number of open ports required to NUKE: 0
|
||||
--RAM: 16
|
||||
|
||||
---->max-hardware
|
||||
------Root Access: NO, Required hacking skill: 80
|
||||
------Number of open ports required to NUKE: 1
|
||||
------RAM: 32
|
||||
|
||||
>hong-fang-tea
|
||||
--Root Access: NO, Required hacking skill: 30
|
||||
--Number of open ports required to NUKE: 0
|
||||
--RAM: 16
|
||||
|
||||
---->nectar-net
|
||||
------Root Access: NO, Required hacking skill: 20
|
||||
------Number of open ports required to NUKE: 0
|
||||
------RAM: 16
|
||||
|
||||
>harakiri-sushi
|
||||
--Root Access: NO, Required hacking skill: 40
|
||||
--Number of open ports required to NUKE: 0
|
||||
--RAM: 16
|
||||
|
||||
>iron-gym
|
||||
--Root Access: NO, Required hacking skill: 100
|
||||
--Number of open ports required to NUKE: 1
|
||||
--RAM: 32
|
||||
|
||||
---->zer0
|
||||
------Root Access: NO, Required hacking skill: 75
|
||||
------Number of open ports required to NUKE: 1
|
||||
------RAM: 32
|
||||
|
||||
---->CSEC
|
||||
------Root Access: NO, Required hacking skill: 54
|
||||
------Number of open ports required to NUKE: 1
|
||||
------RAM: 8
|
||||
|
||||
Take note of the following servers:
|
||||
|
||||
* |foodnstuff|
|
||||
* |sigma-cosmetics|
|
||||
* |joesguns|
|
||||
* |nectar-net|
|
||||
* |hong-fang-tea|
|
||||
* |harakiri-sushi|
|
||||
|
||||
All of these servers have 16GB of RAM. Furthermore, all of these servers do not require
|
||||
any open ports in order to NUKE. In other words, we can gain root access to all of these
|
||||
servers and then run scripts on them.
|
||||
|
||||
First, let's determine how many threads of our hacking script we can run.
|
||||
:ref:`Read more about multithreading scripts here <gameplay_scripts_multithreadingscripts>`
|
||||
The script we wrote
|
||||
uses 2.6GB of RAM. You can check this using the following |Terminal| command::
|
||||
|
||||
$ mem early-hack-template.script
|
||||
|
||||
This means we can run 6 threads on a 16GB server. Now, to run our scripts on all of these
|
||||
servers, we have to do the following:
|
||||
|
||||
1. Use the :ref:`scp_terminal_command` |Terminal| command to copy our script to each server.
|
||||
2. Use the :ref:`connect_terminal_command` |Terminal| command to connect to a server.
|
||||
3. Use the :ref:`run_terminal_command` |Terminal| command to run the `NUKE.exe` program and
|
||||
gain root access.
|
||||
4. Use the :ref:`run_terminal_command` |Terminal| command again to run our script.
|
||||
5. Repeat steps 2-4 for each server.
|
||||
|
||||
Here's the sequence of |Terminal| commands I used in order to achieve this::
|
||||
|
||||
$ home
|
||||
$ scp early-hack-template.script foodnstuff
|
||||
$ scp early-hack-template.script sigma-cosmetics
|
||||
$ scp early-hack-template.script joesguns
|
||||
$ scp early-hack-template.script nectar-net
|
||||
$ scp early-hack-template.script hong-fang-tea
|
||||
$ scp early-hack-template.script harakiri-sushi
|
||||
$ connect foodnstuff
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
$ home
|
||||
$ connect sigma-cosmetics
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
$ home
|
||||
$ connect joesguns
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
$ home
|
||||
$ connect hong-fang-tea
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
$ home
|
||||
$ connect harakiri-sushi
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
$ home
|
||||
$ connect hong-fang-tea
|
||||
$ connect nectar-net
|
||||
$ run NUKE.exe
|
||||
$ run early-hack-template.script -t 6
|
||||
|
||||
.. note::
|
||||
|
||||
Pressing the :code:`Tab` key in the middle of a Terminal command will attempt to
|
||||
auto-complete the command. For example, if you type in :code:`scp ea` and then
|
||||
hit :code:`Tab`, the rest of the script's name should automatically be filled in.
|
||||
This works for most commands in the game!
|
||||
|
||||
The :ref:`home_terminal_command` |Terminal| command is used to connect to the home
|
||||
computer. When running our scripts with the :code:`run early-hack-template.script -t 6`
|
||||
command, the :code:`-t 6` specifies that the script should be run with 6 threads.
|
||||
|
||||
Note that the |nectar-net| server isn't in the home computer's immediate network.
|
||||
This means you can't directly connect to it from home. You will have to search for it
|
||||
inside the network. The results of the `scan-analyze 2` command we ran before
|
||||
will show where it is. In my case, I could connect to it by going from
|
||||
`hong-fang-tea -> nectar-net`. However, this will probably be different for you.
|
||||
|
||||
After running all of these |Terminal| commands, our scripts are now up and running.
|
||||
These will earn money and hacking experience over time. These gains will be
|
||||
really slow right now, but they will increase once our hacking skill rises and
|
||||
we start running more scripts.
|
||||
|
||||
Increasing Hacking Level
|
||||
------------------------
|
||||
There are many servers besides |foodnstuff| that can be hacked, but they have
|
||||
higher required hacking levels. Therefore, we should raise our hacking level. Not only
|
||||
will this let us hack more servers, but it will also increase the effectiveness of our hacking
|
||||
against |foodnstuff|.
|
||||
|
||||
The easiest way to train your hacking level is to visit Rothman University. You can do this by
|
||||
clicking the `City` tab on the left-hand navigation menu, or you can use the
|
||||
:ref:`keyboard shortcut <shortcuts>` Alt + w. Rothman University should be one of the buttons
|
||||
near the top. Click the button to go to the location.
|
||||
|
||||
Once you go to Rothman University, you should see a screen with several options. These
|
||||
options describe different courses you can take. You should click the first button, which
|
||||
says: "Study Computer Science (free)".
|
||||
|
||||
After you click the button, you will start studying and earning hacking experience. While you
|
||||
are doing this, you cannot interact with any other part of the game until you click the button
|
||||
that says "Stop taking course".
|
||||
|
||||
Right now, we want a hacking level of 10. You need approximately 174 hacking experience to reach
|
||||
level 10. You can check how much hacking experience you have by clicking the `Stats` tab
|
||||
on the left-hand navigation menu, or by using |Keyboard shortcut| Alt + c.
|
||||
Since studying at Rothman University earns you 1 experience per second, this will take
|
||||
174 seconds, or approximately 3 minutes. Feel free to do something in the meantime!
|
||||
|
||||
Editing our Hacking Script
|
||||
--------------------------
|
||||
Now that we have a hacking level of 10, we can hack the :code:`joesguns` server. This server
|
||||
will be slightly more profitable than :code:`foodnstuff`. Therefore, we want to change our hacking
|
||||
script to target :code:`joesguns` instead of :code:`foodnstuff`.
|
||||
|
||||
Go to |Terminal| and edit the hacking script by entering::
|
||||
|
||||
$ home
|
||||
$ nano early-hack-template.script
|
||||
|
||||
At the top of the script, change the `target` variable to be `joesguns`:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var target = "joesguns";
|
||||
|
||||
Note that this will **NOT** affect any instances of the script that are already running.
|
||||
This will only affect instances of the script that are ran from this point forward.
|
||||
|
||||
Creating a New Script to Purchase New Servers
|
||||
---------------------------------------------
|
||||
Next, we're going to create a script that automatically purchases additional servers. These
|
||||
servers will be used to run many scripts. Running this script will initially be very
|
||||
expensive since purchasing a server costs money, but it will pay off in the long run.
|
||||
|
||||
In order to create this script, you should familiarize yourself with the following
|
||||
Netscript functions:
|
||||
|
||||
* :js:func:`purchaseServer`
|
||||
* :js:func:`getPurchasedServerCost`
|
||||
* :js:func:`getPurchasedServerLimit`
|
||||
* :js:func:`getServerMoneyAvailable`
|
||||
* :js:func:`scp`
|
||||
* :js:func:`exec`
|
||||
|
||||
Create the script by going to |Terminal| and typing::
|
||||
|
||||
$ home
|
||||
$ nano purchase-server-8gb.script
|
||||
|
||||
Paste the following code into the script editor:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
// How much RAM each purchased server will have. In this case, it'll
|
||||
// be 8GB.
|
||||
var ram = 8;
|
||||
|
||||
// Iterator we'll use for our loop
|
||||
var i = 0;
|
||||
|
||||
// Continuously try to purchase servers until we've reached the maximum
|
||||
// amount of servers
|
||||
while (i < getPurchasedServerLimit()) {
|
||||
// Check if we have enough money to purchase a server
|
||||
if (getServerMoneyAvailable("home") > getPurchasedServerCost(ram)) {
|
||||
// If we have enough money, then:
|
||||
// 1. Purchase the server
|
||||
// 2. Copy our hacking script onto the newly-purchased server
|
||||
// 3. Run our hacking script on the newly-purchased server with 3 threads
|
||||
// 4. Increment our iterator to indicate that we've bought a new server
|
||||
var hostname = purchaseServer("pserv-" + i, ram);
|
||||
scp("early-hack-template.script", hostname);
|
||||
exec("early-hack-template.script", hostname, 3);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
This code uses a while loop to purchase the maximum amount of servers using the
|
||||
:js:func:`purchaseServer` Netscript function. Each of these servers will have
|
||||
8GB of RAM, as defined in the :code:`ram` variable. Note that the script uses the command
|
||||
:code:`getServerMoneyAvailable("home")` to get the amount of money you currently have.
|
||||
This is then used to check if you can afford to purchase a server.
|
||||
|
||||
Whenever the script purchases a new server, it uses the :js:func:`scp` function to copy
|
||||
our script onto that new server, and then it uses the :js:func:`exec` function to
|
||||
execute it on that server.
|
||||
|
||||
To run this script, go to |Terminal| and type::
|
||||
|
||||
$ run purchase-server-8gb.script
|
||||
|
||||
This purchase will continuously run until it has purchased the maximum number of servers.
|
||||
When this happens, it'll mean that you have a bunch of new servers that are all running
|
||||
hacking scripts against the :code:`joesguns` server!
|
||||
|
||||
.. note::
|
||||
|
||||
The reason we're using so many scripts to hack :code:`joesguns` instead of targeting other
|
||||
servers is because it's more effective. This early in the game, we don't have enough RAM
|
||||
to efficiently hack multiple targets, and trying to do so would be slow as we'd be spread
|
||||
too thin. You should definitely do this later on, though!
|
||||
|
||||
Note that purchasing a server is fairly expensive, and purchasing the maximum amount of
|
||||
servers even more so. At the time of writing this guide, the script above requires
|
||||
$11 million in order to finish purchasing all of the 8GB servers.
|
||||
Therefore, we need to find additional ways to make money to speed
|
||||
up the process! These are covered in the next section.
|
||||
|
||||
Additional Sources of Income
|
||||
----------------------------
|
||||
There are other ways to gain money in this game besides scripts & hacking.
|
||||
|
||||
Hacknet Nodes
|
||||
^^^^^^^^^^^^^
|
||||
If you completed the introductory tutorial, you were already introduced to this method: Hacknet Nodes.
|
||||
Once you have enough money, you can start upgrading your Hacknet Nodes in order to increase
|
||||
your passive income stream. This is completely optional. Since each Hacknet Node upgrade
|
||||
takes a certain amount of time to "pay itself off", it may not necessarily be in your best
|
||||
interest to use these.
|
||||
|
||||
Nonetheless, Hacknet Nodes are a good source of income early in the game, although
|
||||
their effectiveness tapers off later on. If you do wind up purchasing and upgrading Hacknet Nodes,
|
||||
I would suggest only upgrading their levels for now. I wouldn't bother with RAM and Core
|
||||
upgrades until later on.
|
||||
|
||||
Crime
|
||||
^^^^^
|
||||
The best source of income right now is from :ref:`committing crimes <gameplay_crimes>`.
|
||||
This is because it not only gives you a large amount of money, but it also raises your
|
||||
hacking level. To commit crimes, click on the :code:`City` tab on the left-hand
|
||||
navigation menu or use the |Keyboard shortcut| Alt + w.
|
||||
Then, click on the link that says :code:`The Slums`.
|
||||
|
||||
In the Slums, you can attempt to commit a variety of crimes, each of which gives certain
|
||||
types of experience and money if successful. See :ref:`gameplay_crimes` for more details.
|
||||
|
||||
.. note::
|
||||
|
||||
You are not always successful when you attempt to commit a crime. Nothing bad happens
|
||||
if you fail a crime, but you won't earn any money and the experience gained will be
|
||||
reduced. Raising your stats improves your chance of successfully committing a crime.
|
||||
|
||||
Right now, the best option is the :code:`Rob Store` crime. This takes 60 seconds to attempt
|
||||
and gives $400k if successful. I suggest this crime because you don't have to click or check
|
||||
in too often since it takes a whole minute to attempt. Furthermore, it gives hacking experience,
|
||||
which is very important right now.
|
||||
|
||||
Alternatively, you can also use the :code:`Shoplift` crime. This takes 2 seconds to attempt
|
||||
and gives $15k if successful. This crime is slightly easier and is more profitable
|
||||
than :code:`Rob Store`, but it requires constant clicking and it doesn't give
|
||||
hacking experience.
|
||||
|
||||
Work for a Company
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
If you don't want to constantly check in on the game to commit crimes, there's another option
|
||||
that's much more passive: working for a :ref:`company <gameplay_companies>`.
|
||||
This will not be nearly as profitable as crimes, but it's completely passive.
|
||||
|
||||
Go to the :code:`City` tab on the left-hand navigation menu and then go to
|
||||
:code:`Joe's Guns`. At :code:`Joe's Guns`, there will be an option that says
|
||||
:code:`Apply to be an Employee`. Click this to get the job. Then, a new option
|
||||
will appear that simply says :code:`Work`. Click this to start working.
|
||||
Working at :code:`Joe's Guns` earns $110 per second and also grants some experience
|
||||
for every stat except hacking.
|
||||
|
||||
Working for a company is completely passive. However, you will not be able to do anything
|
||||
else in the game while you work. You can cancel working at any time. You'll notice that
|
||||
cancelling your work early causes you to lose out on some reputation gains, but
|
||||
you shouldn't worry about this. Company reputation isn't important right now.
|
||||
|
||||
Once your hacking hits level 75, you can visit :code:`Carmichael Security` in the city
|
||||
and get a software job there. This job offers higher pay and also earns you
|
||||
hacking experience.
|
||||
|
||||
There are many more companies in the |City tab| that offer more pay and also more gameplay
|
||||
features. Feel free to explore!
|
||||
|
||||
After you Purchase your New Servers
|
||||
-----------------------------------
|
||||
After you've made a total of $11 million, your automatic server-purchasing script should
|
||||
finish running. This will free up some RAM on your home computer. We don't want this RAM
|
||||
to go to waste, so we'll make use of it. Go to |Terminal| and enter the following commands::
|
||||
|
||||
$ home
|
||||
$ run early-hack-template.script -t 3
|
||||
|
||||
Reaching a Hacking Level of 50
|
||||
------------------------------
|
||||
Once you reach a hacking level of 50, two new important parts of the game open up.
|
||||
|
||||
Creating your first program: BruteSSH.exe
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
On the left-hand navigation menu you will notice a :code:`Create Programs` tab with a
|
||||
red notification icon. This indicates that there are programs available to be created.
|
||||
Click on that tab (or use |Keyboard shortcut| Alt + p) and you'll see a
|
||||
list of all the programs you can currently create. Hovering over a program will give a
|
||||
brief description of its function. Simply click on a program to start creating it.
|
||||
|
||||
Right now, the program we want to create is :code:`BruteSSH.exe`. This program is used
|
||||
to open up SSH ports on servers. This will allow you to hack more servers,
|
||||
as many servers in the game require a certain number of opened ports in order for
|
||||
:code:`NUKE.exe` to gain root access.
|
||||
|
||||
When you are creating a program, you cannot interact with any other part of the game.
|
||||
Feel free to cancel your work on creating a program at any time, as your progress will
|
||||
be saved and can be picked back up later. :code:`BruteSSH.exe` takes about
|
||||
10 minutes to complete.
|
||||
|
||||
Optional: Create AutoLink.exe
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
On the :code:`Create Programs` page, you will notice another program you can create
|
||||
called :code:`AutoLink.exe`. If you don't mind waiting another 10-15 minutes, you should
|
||||
go ahead and create this program. It makes it much less tedious to connect to other servers,
|
||||
but it's not necessary for progressing.
|
||||
|
||||
Joining your first faction: CyberSec
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Shortly after you reached level 50 hacking, you should have received a message that
|
||||
said this::
|
||||
|
||||
Message received from unknown sender:
|
||||
|
||||
We've been watching you. Your skills are very impressive. But you're wasting
|
||||
your talents. If you join us, you can put your skills to good use and change
|
||||
the world for the better. If you join us, we can unlock your full potential.
|
||||
But first, you must pass our test. Find and hack our server using the Terminal.
|
||||
|
||||
-CyberSec
|
||||
|
||||
This message was saved as csec-test.msg onto your home computer.
|
||||
|
||||
If you didn't, or if you accidentally closed it, that's okay! Messages get saved onto
|
||||
your home computer. Enter the following |Terminal| commands to view the message::
|
||||
|
||||
$ home
|
||||
$ cat csec-test.msg
|
||||
|
||||
This message is part of the game's main "quest-line". It is a message from the
|
||||
|CyberSec faction| that is asking you to pass their test.
|
||||
Passing their test is simple, you just have to find their server and hack it through
|
||||
the |Terminal|. Their server is called :code:`CSEC`.
|
||||
To do this, we'll use the :ref:`scan_analyze_terminal_command`
|
||||
Terminal command, just like we did before::
|
||||
|
||||
$ home
|
||||
$ scan-analyze 2
|
||||
|
||||
This will show you the network for all servers that are up to 2 "nodes" away from
|
||||
your home computer. Remember that the network is randomly generated so it'll look
|
||||
different for everyone. Here's the relevant part of my :code:`scan-analyze` results::
|
||||
|
||||
>iron-gym
|
||||
--Root Access: NO, Required hacking skill: 100
|
||||
--Number of open ports required to NUKE: 1
|
||||
--RAM: 32
|
||||
|
||||
---->zer0
|
||||
------Root Access: NO, Required hacking skill: 75
|
||||
------Number of open ports required to NUKE: 1
|
||||
------RAM: 32
|
||||
|
||||
---->CSEC
|
||||
------Root Access: NO, Required hacking skill: 54
|
||||
------Number of open ports required to NUKE: 1
|
||||
------RAM: 8
|
||||
|
||||
This tells me that I can reach :code:`CSEC` by going through :code:`iron-gym`::
|
||||
|
||||
$ connect iron-gym
|
||||
$ connect CSEC
|
||||
|
||||
.. note::
|
||||
|
||||
If you created the :code:`AutoLink.exe` program earlier, then there is an easier
|
||||
method of connecting to :code:`CSEC`. You'll notice that in the :code:`scan-analyze`
|
||||
results, all of the server hostnames are white and underlined. You can simply
|
||||
click one of the server hostnames in order to connect to it. So, simply click
|
||||
:code:`CSEC`!
|
||||
|
||||
.. note::
|
||||
|
||||
Make sure you notice the required hacking skill for the :code:`CSEC` server.
|
||||
This is a random value between 51 and 60. Although you receive the message
|
||||
from CSEC once you hit 50 hacking, you cannot actually pass their test
|
||||
until your hacking is high enough to hack their server.
|
||||
|
||||
After you are connected to the :code:`CSEC` server, you can hack it. Note that this
|
||||
server requires one open port in order to gain root access. We can open the SSH port
|
||||
using the :code:`BruteSSH.exe` program we created earlier. In |Terminal|::
|
||||
|
||||
$ run BruteSSH.exe
|
||||
$ run NUKE.exe
|
||||
$ hack
|
||||
|
||||
Keep hacking the server until you are successful. After you successfully hack it, you should
|
||||
receive a faction invitation from |CyberSec| shortly afterwards. Accept it. If you accidentally
|
||||
reject the invitation, that's okay. Just go to the :code:`Factions` tab
|
||||
(|Keyboard shortcut| Alt + f) and you should see an option that lets you
|
||||
accept the invitation.
|
||||
|
||||
Congrats! You just joined your first faction. Don't worry about doing anything
|
||||
with this faction yet, we can come back to it later.
|
||||
|
||||
Using Additional Servers to Hack Joesguns
|
||||
-----------------------------------------
|
||||
Once you have the |BruteSSH| program, you will be able to gain root access
|
||||
to several additional servers. These servers have more RAM that you can use to
|
||||
run scripts. We'll use the RAM on these servers to run more scripts that target
|
||||
:code:`joesguns`.
|
||||
|
||||
Copying our Scripts
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
The server's we'll be using to run our scripts are:
|
||||
|
||||
* :code:`neo-net`
|
||||
* :code:`zer0`
|
||||
* :code:`max-hardware`
|
||||
* :code:`iron-gym`
|
||||
|
||||
All of these servers have 32GB of RAM. You can use the |Terminal| command
|
||||
:code:`scan-analyze 3` to see for yourself. To copy our hacking scripts onto these servers,
|
||||
go to |Terminal| and run::
|
||||
|
||||
$ home
|
||||
$ scp early-hack-template.script neo-net
|
||||
$ scp early-hack-template.script zer0
|
||||
$ scp early-hack-template.script max-hardware
|
||||
$ scp early-hack-template.script iron-gym
|
||||
|
||||
Since each of these servers has 32GB of RAM, we can run our hacking script with 12 threads
|
||||
on each server. By now, you should know how to connect to servers. So find and connect to
|
||||
each of the servers above using the :code:`scan-analyze 3` |Terminal| command. Then, use
|
||||
following |Terminal| command to run our hacking
|
||||
script with 12 threads::
|
||||
|
||||
$ run early-hack-template.script -t 12
|
||||
|
||||
Remember that if you have the |AutoLink| program, you can simply click on the hostname of a server
|
||||
after running :ref:`scan_analyze_terminal_command` to connect to it.
|
||||
|
||||
Profiting from Scripts & Gaining Reputation with CyberSec
|
||||
---------------------------------------------------------
|
||||
Now it's time to play the waiting game. It will take some time for your scripts to start
|
||||
earning money. Remember that most of your scripts are targeting |joesguns|. It will take a
|
||||
bit for them to :js:func:`grow` and :js:func:`weaken` the server to the appropriate values
|
||||
before they start hacking it. Once they do, however, the scripts will be very profitable.
|
||||
|
||||
.. note::
|
||||
|
||||
For reference, in about two hours after starting my first script, my scripts had a
|
||||
production rate of $20k per second and had earned a total of $70 million.
|
||||
(You can see these stats on the :code:`Active Scripts` tab).
|
||||
|
||||
After another 15 minutes, the production rate had increased to $25k per second
|
||||
and the scripts had made an additional $55 million.
|
||||
|
||||
Your results will vary based on how fast you earned money from crime/working/hacknet nodes,
|
||||
but this will hopefully give you a good indication of how much the scripts can earn.
|
||||
|
||||
In the meantime, we are going to be gaining reputation with the |CyberSec faction|.
|
||||
Go to the |Factions tab| on the left-hand
|
||||
navigation menu, and from there select |CyberSec|. In the middle of
|
||||
the page there should be a button for :code:`Hacking Contracts`.
|
||||
Click it to start earning reputation for the |CyberSec| faction (as well
|
||||
as some hacking experience). The higher your hacking level, the more reputation you
|
||||
will gain. Note that while you are working for a faction, you cannot interact with
|
||||
the rest of the game in any way. You can cancel your faction work at any time
|
||||
with no penalty.
|
||||
|
||||
Purchasing Upgrades and Augmentations
|
||||
-------------------------------------
|
||||
As I mentioned before, within 1-2 hours I had earned over $200 million. Now, it's time
|
||||
to spend all of this money on some persistent upgrades to help progress!
|
||||
|
||||
Upgrading RAM on Home computer
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
The most important thing to upgrade right now is the RAM on your home computer. This
|
||||
will allow you to run more scripts.
|
||||
|
||||
To upgrade your RAM, go to the |City tab| and visit the company |Alpha Enterprises|.
|
||||
There will be an option that says :code:`Purchase additional RAM for Home Computer`.
|
||||
Click it and follow the dialog box to upgrade your RAM.
|
||||
|
||||
I recommend getting your home computer's RAM to *at least* 128GB. Getting it even
|
||||
higher would be better.
|
||||
|
||||
Purchasing your First Augmentations
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Once you get ~1000 reputation with the |CyberSec faction|, you can purchase
|
||||
your first :ref:`Augmentation <gameplay_augmentations>` from them.
|
||||
|
||||
To do this, go to the |Factions tab| on the left-hand navigation menu
|
||||
(|Keyboard shortcut| Alt + f) and select |CyberSec|. There is an button
|
||||
near the bottom that says :code:`Purchase Augmentations`. This will bring up a
|
||||
page that displays all of the Augmentations available from |CyberSec|. Some of them
|
||||
may be locked right now. To unlock these, you will need to earn more
|
||||
reputation with |CyberSec|.
|
||||
|
||||
Augmentations give persistent upgrades in the form of multipliers. These aren't very
|
||||
powerful early in the game because the multipliers are small. However, the effects
|
||||
of Augmentations stack multiplicatively **with each other**, so as you continue to install
|
||||
many Augmentations their effects will increase significantly.
|
||||
|
||||
Because of this, I would recommend investing more in RAM upgrades for your home computer rather
|
||||
than Augmentations early on. Having enough RAM to run many scripts will allow you to make
|
||||
much more money, and then you can come back later on and get all these Augmentations.
|
||||
|
||||
Right now, I suggest purchasing at the very least the :code:`Neurotrainer I` Augmentation from
|
||||
|CyberSec|. If you have the money to spare, I would also suggest getting :code:`BitWire` and
|
||||
several levels of the :code:`NeuroFlux Governor` Augmentations. Note that each time
|
||||
you purchase an Augmentation,
|
||||
:ref:`the price of purchasing another increases by 90% <gameplay_augmentations_purchasingmultiple>`,
|
||||
so make sure you buy the most expensive Augmentation first. Don't worry, once you choose to
|
||||
install Augmentations, their prices will reset back to their original values.
|
||||
|
||||
Next Steps
|
||||
----------
|
||||
That's the end of the walkthrough portion of this guide! You should continue to explore
|
||||
what the game has to offer. There's quite a few features that aren't covered or mentioned
|
||||
in this guide, and even more that get unlocked as you continue to play!
|
||||
|
||||
Also, check out the :ref:`netscript` documentation to see what it has to offer. Writing
|
||||
scripts to perform and automate various tasks is where most of the fun in the game comes
|
||||
from (in my opinion)!
|
||||
|
||||
The following are a few things you may want to consider doing in the near future.
|
||||
|
||||
Installing Augmentations (and Resetting)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
If you've purchased any :ref:`gameplay_augmentations`, you'll need to install them before you
|
||||
actually gain their effects. Installing Augmentations is the game's "soft-reset" or "prestige"
|
||||
mechanic. You can :ref:`read more details about it here <gameplay_augmentations_installing>`.
|
||||
|
||||
To install your Augmentations, click the |Augmentations tab| on the left-hand navigation
|
||||
menu (|Keyboard shortcut| Alt + a). You will see a list of all of the Augmentations
|
||||
you have purchased. Below that, you will see a button that says :code:`Install Augmentations`.
|
||||
Be warned, after clicking this there is no way to undo it (unless you load an earlier save).
|
||||
|
||||
Automating the Script Startup Process
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Whenever you install Augmentations, all of your scripts are killed and you'll have to
|
||||
re-run them. Doing this every time you install Augmentations would be very tedious and annoying,
|
||||
so you should write a script to automate the process. Here's a simple example for a
|
||||
startup script. Feel free to adjust it to your liking.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
// Array of all servers that don't need any ports opened
|
||||
// to gain root access. These have 16 GB of RAM
|
||||
var servers0Port = ["foodnstuff",
|
||||
"sigma-cosmetics",
|
||||
"joesguns",
|
||||
"nectar-net",
|
||||
"hong-fang-tea",
|
||||
"harakiri-sushi"];
|
||||
|
||||
// Array of all servers that only need 1 port opened
|
||||
// to gain root access. These have 32 GB of RAM
|
||||
var servers1Port = ["neo-net",
|
||||
"zer0",
|
||||
"max-hardware",
|
||||
"iron-gym"];
|
||||
|
||||
// Copy our scripts onto each server that requires 0 ports
|
||||
// to gain root access. Then use nuke() to gain admin access and
|
||||
// run the scripts.
|
||||
for (var i = 0; i < servers0Port.length; ++i) {
|
||||
var serv = servers0Port[i];
|
||||
|
||||
scp("early-hack-template.script", serv);
|
||||
nuke(serv);
|
||||
exec("early-hack-template.script", serv, 6);
|
||||
}
|
||||
|
||||
// Wait until we acquire the "BruteSSH.exe" program
|
||||
while (!fileExists("BruteSSH.exe")) {
|
||||
sleep(60000);
|
||||
}
|
||||
|
||||
// Copy our scripts onto each server that requires 1 port
|
||||
// to gain root access. Then use brutessh() and nuke()
|
||||
// to gain admin access and run the scripts.
|
||||
for (var i = 0; i < servers1Port.length; ++i) {
|
||||
var serv = servers1Port[i];
|
||||
|
||||
scp("early-hack-template.script", serv);
|
||||
brutessh(serv);
|
||||
nuke(serv);
|
||||
exec("early-hack-template.script", serv, 12);
|
||||
}
|
||||
|
||||
Random Tips
|
||||
-----------
|
||||
* Early on in the game, it's better to spend your money on upgrading RAM and purchasing
|
||||
new servers rather than spending it on Augmentations
|
||||
* The more money available on a server, the more effective the :js:func:`hack` and
|
||||
:js:func:`grow` Netscript functions will be. This is because both of these functions
|
||||
use percentages rather than flat values. :js:func:`hack` steals a percentage of a server's
|
||||
total available money, and :js:func:`grow` increases a server's money by X%.
|
||||
* There is a limit to how much money can exist on a server. This value is different for each
|
||||
server. The :js:func:`getServerMaxMoney` function will tell you this maximum value.
|
||||
* At this stage in the game, your combat stats (strength, defense, etc.) are not nearly
|
||||
as useful as your hacking stat. Do not invest too much time or money into gaining combat
|
||||
stat exp.
|
||||
|
||||
|
||||
|
||||
.. Substitution definitions
|
||||
.. |Alpha Enterprises| replace:: :code:`Alpha Enterprises`
|
||||
.. |Augmentations tab| replace:: :code:`Augmentations` tab
|
||||
.. |AutoLink| replace:: :code:`AutoLink.exe`
|
||||
.. |BruteSSH| replace:: :code:`BruteSSH.exe`
|
||||
.. |City tab| replace:: :code:`City` tab
|
||||
.. |CyberSec| replace:: :code:`CyberSec`
|
||||
.. |CyberSec faction| replace:: :code:`CyberSec` :ref:`faction <gameplay_factions>`
|
||||
.. |Factions tab| replace:: :code:`Factions` tab
|
||||
.. |Keyboard shortcut| replace:: :ref:`Keyboard shortcut <shortcuts>`
|
||||
.. |NUKE| replace:: :code:`NUKE.exe`
|
||||
.. |Terminal| replace:: :code:`Terminal`
|
||||
.. |foodnstuff| replace:: :code:`foodnstuff`
|
||||
.. |harakiri-sushi| replace:: :code:`harakiri-sushi`
|
||||
.. |hong-fang-tea| replace:: :code:`hong-fang-tea`
|
||||
.. |joesguns| replace:: :code:`joesguns`
|
||||
.. |nectar-net| replace:: :code:`nectar-net`
|
||||
.. |sigma-cosmetics| replace:: :code:`sigma-cosmetics`
|
||||
490
doc/source/guidesandtips/recommendedbitnodeorder.rst
Normal file
490
doc/source/guidesandtips/recommendedbitnodeorder.rst
Normal file
@@ -0,0 +1,490 @@
|
||||
What BitNode should I do?
|
||||
=========================
|
||||
|
||||
.. warning:: This page contains spoilers regarding the game's story/plot-line.
|
||||
|
||||
After destroying their first :ref:`BitNode <gameplay_bitnodes>`, many players
|
||||
wonder which BitNode they should tackle next. This guide hopefully helps answer
|
||||
that question.
|
||||
|
||||
Overview of each BitNode
|
||||
------------------------
|
||||
|
||||
BitNode-1: Source Genesis
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
The first BitNode created by the Enders to imprison the minds of humans. It became
|
||||
the prototype and testing-grounds for all of the BitNodes that followed.
|
||||
This is the first BitNode that you play through. It has no special
|
||||
modifications or mechanics.
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File lets the player start with 32GB of RAM on his/her home computer when
|
||||
entering a new BitNode, and also increases all of the player's multipliers by:
|
||||
|
||||
* Level 1: 16%
|
||||
* Level 2: 24%
|
||||
* Level 3: 28%
|
||||
|
||||
Difficulty
|
||||
The easiest BitNode
|
||||
|
||||
BitNode-2: Rise of the Underworld
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
Organized crime groups quickly filled the void of power left behind from the collapse of
|
||||
Western government in the 2050s. As society and civlization broke down, people quickly
|
||||
succumbed to the innate human impulse of evil and savagery. The organized crime
|
||||
factions quickly rose to the top of the modern world.
|
||||
|
||||
In this BitNode:
|
||||
|
||||
* Your hacking level is reduced by 20%
|
||||
* The growth rate and maximum amount of money available on servers are significantly decreased
|
||||
* The amount of money gained from crimes and Infiltration is tripled
|
||||
* Certain Factions (Slum Snakes, Tetrads, The Syndicate, The Dark Army, Speakers for the Dead,
|
||||
NiteSec, The Black Hand) give the player the ability to form and manage their own gangs. These gangs
|
||||
will earn the player money and reputation with the corresponding Faction
|
||||
* Every Augmentation in the game will be available through the Factions listed above
|
||||
* For every Faction NOT listed above, reputation gains are halved
|
||||
* You will no longer gain passive reputation with Factions
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File allows you to form gangs in other BitNodes once your karma decreases to a certain value.
|
||||
It also increases the player's crime success rate, crime money, and charisma multipliers by:
|
||||
|
||||
* Level 1: 24%
|
||||
* Level 2: 36%
|
||||
* Level 3: 42%
|
||||
|
||||
Difficulty
|
||||
Fairly easy, as hacking is still very profitable and the costs of various purchases/upgrades
|
||||
is not increased. The gang mechanic may seem strange as its very different from anything
|
||||
else, but it can be very powerful once you get the hang of it.
|
||||
|
||||
BitNode-3: Corporatocracy
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
Our greatest illusion is that a healthy society can revolve around a
|
||||
single-minded pursuit of wealth.
|
||||
Sometime in the early 21st century economic and political globalization turned
|
||||
the world into a corporatocracy, and it never looked back. Now, the privileged
|
||||
elite will happily bankrupt their own countrymen, decimate their own community,
|
||||
and evict their neighbors from houses in their desperate bid to increase their wealth.
|
||||
In this BitNode you can create and manage your own corporation. Running a successful corporation
|
||||
has the potential of generating massive profits. All other forms of income are reduced by 75%. Furthermore:
|
||||
|
||||
* The price and reputation cost of all Augmentations is tripled
|
||||
* The starting and maximum amount of money on servers is reduced by 75%
|
||||
* Server growth rate is reduced by 80%
|
||||
* You now only need 75 favour with a faction in order to donate to it, rather than 150
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File lets you create corporations on other BitNodes (although
|
||||
some BitNodes will disable this mechanic). This Source-File also increases your
|
||||
charisma and company salary multipliers by:
|
||||
|
||||
* Level 1: 8%
|
||||
* Level 2: 12%
|
||||
* Level 3: 14%
|
||||
|
||||
Difficulty
|
||||
Somewhat-steep learning curve as you learn how to use and manage Corporations. Afterwards,
|
||||
however, the BitNode is easy as Corporations can be very profitable.
|
||||
|
||||
BitNode-4: The Singularity
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
The Singularity has arrived. The human race is gone, replaced by artificially superintelligent
|
||||
beings that are more machine than man.
|
||||
|
||||
In this BitNode, progressing is significantly harder:
|
||||
|
||||
* Experience gain rates for all stats are reduced.
|
||||
* Most methods of earning money will now give significantly less.
|
||||
|
||||
In this BitNode you will gain access to a new set of Netscript Functions known as Singularity Functions.
|
||||
These functions allow you to control most aspects of the game through scripts, including
|
||||
working for factions/companies, purchasing/installing Augmentations, and creating programs.
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File lets you access and use the Singularity Functions in other BitNodes.
|
||||
Each level of this Source-File will open up more Singularity Functions that you can use.
|
||||
|
||||
Difficulty:
|
||||
Depending on what Source-Files you have unlocked before attempting this BitNode,
|
||||
it can range from easy to moderate.
|
||||
|
||||
BitNode-5: Artificial Intelligence
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
They said it couldn't be done. They said the human brain,
|
||||
along with its consciousness and intelligence, couldn't be replicated. They said the complexity
|
||||
of the brain results from unpredictable, nonlinear interactions that couldn't be modeled
|
||||
by 1's and 0's. They were wrong.
|
||||
|
||||
In this BitNode:
|
||||
|
||||
* The base security level of servers is doubled
|
||||
* The starting money on servers is halved, but the maximum money remains the same
|
||||
* Most methods of earning money now give significantly less
|
||||
* Infiltration gives 50% more reputation and money
|
||||
* Corporations have 50% lower valuations and are therefore less profitable
|
||||
* Augmentations are more expensive
|
||||
* Hacking experience gain rates are reduced
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File grants you a special new stat called Intelligence.
|
||||
|
||||
Intelligence is unique because it is permanent and persistent (it never gets reset back to 1). However
|
||||
gaining Intelligence experience is much slower than other stats, and it is also hidden (you won't know
|
||||
when you gain experience and how much). Higher Intelligence levels will boost your production for many actions
|
||||
in the game.
|
||||
|
||||
In addition, this Source-File will unlock the :js:func:`getBitNodeMultipliers()` Netscript function,
|
||||
and will also raise all of your hacking-related multipliers by:
|
||||
|
||||
* Level 1: 8%
|
||||
* Level 2: 12%
|
||||
* Level 3: 14%
|
||||
|
||||
Difficulty
|
||||
Depending on what Source-Files you have unlocked before attempting this BitNode, it
|
||||
can range from easy to moderate.
|
||||
|
||||
BitNode-6: Bladeburners
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
In the middle of the 21st century, OmniTek Incorporated began designing and manufacturing advanced synthetic
|
||||
androids, or Synthoids for short. They achieved a major technological breakthrough in the sixth generation
|
||||
of their Synthoid design, called MK-VI, by developing a hyperintelligent AI. Many argue that this was
|
||||
the first sentient AI ever created. This resulted in Synthoid models that were stronger, faster, and more intelligent
|
||||
than the humans that had created them.
|
||||
|
||||
In this BitNode you will be able to access the Bladeburner Division at the NSA, which provides
|
||||
a new mechanic for progression. Furthermore:
|
||||
|
||||
* Hacking and Hacknet Nodes will be less profitable
|
||||
* Your hacking level is reduced by 65%
|
||||
* Hacking experience gain from scripts is reduced by 75%
|
||||
* Corporations have 80% lower valuations and are therefore less profitable
|
||||
* Working for companies is 50% less profitable
|
||||
* Crimes and Infiltration are 25% less profitable
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File allows you to access the NSA's Bladeburner Division in other
|
||||
BitNodes. In addition, this Source-File will raise both the level and experience
|
||||
gain rate of all your combat stats by:
|
||||
|
||||
* Level 1: 8%
|
||||
* Level 2: 12%
|
||||
* Level 3: 14%
|
||||
|
||||
Difficulty
|
||||
Initially difficult due to the fact that hacking is no longer profitable and you have
|
||||
to learn a new mechanic. After you get the hang of the Bladeburner mechanic, however,
|
||||
it becomes moderately easy.
|
||||
|
||||
BitNode-7: Bladeburners 2079
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
In the middle of the 21st century, you were doing cutting-edge work at OmniTek Incorporated
|
||||
as part of the AI design team for advanced synthetic androids, or Synthoids for short. You helped
|
||||
achieve a major technological breakthrough in the sixth generation of the company's Synthoid
|
||||
design, called MK-VI, by developing a hyperintelligent AI. Many argue that this was the first
|
||||
sentient AI ever created. This resulted in Synthoid models that were stronger, faster,
|
||||
and more intelligent than the humans that had created them.
|
||||
|
||||
In this BitNode you will be able to access the Bladeburner API, which allows you to access
|
||||
Bladeburner functionality through Netscript. Furthermore:
|
||||
|
||||
* The rank you gain from Bladeburner contracts/operations is reduced by 40%
|
||||
* Bladeburner skills cost twice as many skill points
|
||||
* Augmentations are 3x more expensive
|
||||
* Hacking and Hacknet Nodes will be significantly less profitable
|
||||
* Your hacking level is reduced by 65%
|
||||
* Hacking experience gain from scripts is reduced by 75%
|
||||
* Corporations have 80% lower valuations and are therefore less profitable
|
||||
* Working for companies is 50% less profitable
|
||||
* Crimes and Infiltration are 25% less profitable
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File allows you to access the Bladeburner Netscript API in other
|
||||
BitNodes. In addition, this Source-File will increase all of your Bladeburner multipliers by:
|
||||
|
||||
* Level 1: 8%
|
||||
* Level 2: 12%
|
||||
* Level 3: 14%
|
||||
|
||||
Difficulty
|
||||
Slightly more difficult than BitNode-6. However, you will be able to automate more
|
||||
aspects of the Bladeburner feature, which means it will be more passive.
|
||||
|
||||
BitNode-8: Ghost of Wall Street
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
You are trying to make a name for yourself as an up-and-coming hedge fund manager on Wall Street.
|
||||
|
||||
In this BitNode:
|
||||
|
||||
* You start with $250 million
|
||||
* The only way to earn money is by trading on the stock market
|
||||
* You start with a WSE membership and access to the TIX API
|
||||
* You are able to short stocks and place different types of orders (limit/stop)
|
||||
* You can immediately donate to factions to gain reputation
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File grants the following benefits:
|
||||
|
||||
* Level 1: Permanent access to WSE and TIX API
|
||||
* Level 2: Ability to short stocks in other BitNodes
|
||||
* Level 3: Ability to use limit/stop orders in other BitNodes
|
||||
|
||||
This Source-File also increases your hacking growth multipliers by:
|
||||
|
||||
* Level 1: 12%
|
||||
* Level 2: 18%
|
||||
* Level 3: 21%
|
||||
|
||||
Difficulty
|
||||
Very difficult until you unlock the Four Sigma (4S) Market Data API. After you
|
||||
unlock the API however, it becomes moderately easy.
|
||||
|
||||
BitNode-9: Hacktocracy
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
When Fulcrum Technologies released their open-source Linux distro Chapeau, it quickly
|
||||
became the OS of choice for the underground hacking community. Chapeau became especially
|
||||
notorious for powering the Hacknet, a global, decentralized network used for nefarious
|
||||
purposes. Fulcrum quickly abandoned the project and dissociated themselves from it.
|
||||
|
||||
This BitNode unlocks the Hacknet Server, an upgraded version of the Hacknet Node. Hacknet Servers generate
|
||||
hashes, which can be spent on a variety of different upgrades.
|
||||
|
||||
In this BitNode:
|
||||
* Your stats are significantly decreased
|
||||
* You cannnot purchase additional servers
|
||||
* Hacking is significantly less profitable
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File grants the following benefits:
|
||||
|
||||
* Level 1: Permanently unlocks the Hacknet Server in other BitNodes
|
||||
* Level 2: You start with 128GB of RAM on your home computer when entering a new BitNode
|
||||
* Level 3: Grants a highly-upgraded Hacknet Server when entering a new BitNode
|
||||
|
||||
(Note that the Level 3 effect of this Source-File only applies when entering a new BitNode, NOT
|
||||
when installing Augmentation
|
||||
|
||||
Difficulty
|
||||
Hard
|
||||
|
||||
BitNode-10: Digital Carbon
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
In 2084, VitaLife unveiled to the world the Persona Core, a technology that allowed people
|
||||
to digitize their consciousness. Their consciousness could then be transferred into Synthoids
|
||||
or other bodies by trasmitting the digitized data. Human bodies became nothing more than 'sleeves'
|
||||
for the human consciousness. Mankind had finally achieved immortality - at least for those
|
||||
that could afford it.
|
||||
|
||||
This BitNode unlocks Sleeve technology. Sleeve technology allows you to:
|
||||
|
||||
1. Re-sleeve: Purchase and transfer your consciousness into a new body
|
||||
2. Duplicate Sleeves: Duplicate your consciousness into Synthoids, allowing you to perform different tasks synchronously
|
||||
|
||||
In this BitNode:
|
||||
* Your stats are significantly decreased
|
||||
* All methods of gaining money are half as profitable (except Stock Market)
|
||||
* Purchased servers are more expensive, have less max RAM, and a lower maximum limit
|
||||
* Augmentations are 5x as expensive and require twice as much reputation
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
This Source-File unlocks Sleeve technology in other BitNodes.
|
||||
Each level of this Source-File also grants you a Duplicate Sleeve
|
||||
|
||||
Difficulty
|
||||
Hard
|
||||
|
||||
BitNode-11: The Big Crash
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
The 2050s was defined by the massive amounts of violent civil unrest and anarchic rebellion that rose all around the world. It was this period
|
||||
of disorder that eventually lead to the governmental reformation of many global superpowers, most notably
|
||||
the USA and China. But just as the world was slowly beginning to recover from these dark times, financial catastrophe hit.
|
||||
In many countries, the high cost of trying to deal with the civil disorder bankrupted the governments. In all of this chaos and confusion, hackers
|
||||
were able to steal billions of dollars from the world's largest electronic banks, prompting an international banking crisis as
|
||||
governments were unable to bail out insolvent banks. Now, the world is slowly crumbling in the middle of the biggest economic crisis of all time.
|
||||
|
||||
In this BitNode:
|
||||
|
||||
* Your hacking stat and experience gain are halved
|
||||
* The starting and maximum amount of money available on servers is significantly decreased
|
||||
* The growth rate of servers is significantly reduced
|
||||
* Weakening a server is twice as effective
|
||||
* Company wages are decreased by 50%
|
||||
* Corporation valuations are 99% lower and are therefore significantly less profitable
|
||||
* Hacknet Node production is significantly decreased
|
||||
* Crime and Infiltration are more lucrative
|
||||
* Augmentations are twice as expensive
|
||||
|
||||
Source-File
|
||||
:Max Level: 3
|
||||
|
||||
Destroying this BitNode will give you Source-File 11, or if you already have this Source-File it will
|
||||
upgrade its level up to a maximum of 3. This Source-File makes it so that company favor increases BOTH
|
||||
the player's salary and reputation gain rate at that company by 1% per favor (rather than just the reputation gain).
|
||||
This Source-File also increases the player's company salary and reputation gain multipliers by:
|
||||
|
||||
* Level 1: 32%
|
||||
* Level 2: 48%
|
||||
* Level 3: 56%
|
||||
|
||||
Difficulty
|
||||
Hard
|
||||
|
||||
BitNode-12: The Recursion
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Description
|
||||
Every time this BitNode is destroyed, it becomes slightly harder.
|
||||
|
||||
Source-File
|
||||
:Max Level: Infinity
|
||||
|
||||
Each level of Source-File 12 will increase all of your multipliers by 1%. This effect
|
||||
is multiplicative with itself. In other words, level N of this Source-File will result
|
||||
in a multiplier of 1.01^N (or 0.99^N for multipliers that decrease)
|
||||
|
||||
Difficulty
|
||||
Initially very easy, but then it (obviously) becomes harder as you continue to do it.
|
||||
|
||||
Recommended BitNodes
|
||||
--------------------
|
||||
As a player, you are not forced to tackle the BitNodes in any particular order. You are
|
||||
free to choose whichever ones you want. The "best" order can vary between players,
|
||||
depending on what you like to do any what kind of player you are. In general, here
|
||||
are the recommended BitNodes for different things:
|
||||
|
||||
For fast progression
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
.. note:: This does not recommend the absolute fastest path, as I don't know what
|
||||
exactly the fastest path is. But it does recommend the BitNodes that are
|
||||
commonly considered to be optimal by players.
|
||||
|
||||
1. Repeat **BitNode-1: Source Genesis** until you max out its Source-File. Its Source-File
|
||||
is extremely powerful, as it raises all multipliers by a significant amount.
|
||||
|
||||
2. Repeat **BitNode-12: The Recursion** several times. This BitNode will be extremely easy the
|
||||
first few times you tackle it, and its Source-File raises all multipliers. Furthermore,
|
||||
its effect stacks multiplicatively with itself and other Source-Files/Augmentations,
|
||||
which gets better as time goes on
|
||||
|
||||
3. Do **BitNode-5: Artificial Intelligence** once or twice. The intelligence stat it unlocks
|
||||
will gradually build up as you continue to play the game, and will be helpful
|
||||
in the future. The Source-File also provides hacking multipliers, which are
|
||||
strong because hacking is typically one of the best ways of earning money.
|
||||
|
||||
4. (Optional) Consider doing **BitNode-4: The Singularity**. Its Source-File does not directly make you
|
||||
more powerful in any way, but it does unlock :ref:`netscript_singularityfunctions` which
|
||||
let you automate significantly more aspects of the game.
|
||||
|
||||
5. Do **BitNode-3: Corporatocracy** once to unlock the Corporation mechanic. This mechanic
|
||||
has high profit potential.
|
||||
|
||||
6. Do **BitNode-6: Bladeburners** once to unlock the Bladeburners mechanic. The Bladeburner
|
||||
mechanic is useful for some of the future BitNodes (such as 9 and 10).
|
||||
|
||||
7. Do **BitNode-9: Hacktocracy** to unlock the Hacknet Server mechanic. You can
|
||||
consider repeating it as well, as its Level 2 and 3 effects are pretty helpful as well.
|
||||
|
||||
.. todo:: To be continued as more BitNodes get added
|
||||
|
||||
For the strongest Source-Files
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Note that the strongest Source-Files are typically rewarded by the hardest BitNodes.
|
||||
|
||||
The strongest Source-File is that from **BitNode-1: Source Genesis**, as it raises
|
||||
all multipliers by a significant amount.
|
||||
|
||||
Similarly, the Source-File from **BitNode-12: The Recursion** is also very strong
|
||||
because it raises all multipliers. Each level of Source-File 12 is fairly weak,
|
||||
but its effectiveness gets better over time since the effects of Source-Files and
|
||||
Augmentations are multiplicative with each other.
|
||||
|
||||
The Source-File from **BitNode-9: Hacktocracy** is good because it unlocks the Hacknet
|
||||
Server mechanic. The Hacknet Server mechanic causes Hacknet Nodes to produce a new
|
||||
currency called *hashes*, rather than money. *Hashes* can be spent on powerful upgrades
|
||||
that benefit your hacking, Corporation, Bladeburner, etc.
|
||||
|
||||
The Duplicate Sleeves granted by the Source-File from **BitNode-10: Digital Carbon**
|
||||
are strong, but only after you have several of them and have spent some time/money upgrading
|
||||
them.
|
||||
|
||||
For more scripting/hacking
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
**BitNode-4: The Singularity** unlocks the :ref:`netscript_singularityfunctions`, which
|
||||
can be used to automate many different aspects of the game, including working for factions/companies,
|
||||
purchasing & installing Augmentations, and creating programs
|
||||
|
||||
**BitNode-6** and **BitNode-7** unlock Bladeburner and its corresponding
|
||||
:ref:`Netscript API <netscript_bladeburnerapi>`. This allows you to automate an entire
|
||||
new mechanic.
|
||||
|
||||
**BitNode-2: Rise of the Underworld** also unlocks a new mechanic and Netscript API for automating
|
||||
it (the Gang mechanic). However, it is not as interesting as Bladeburner (in my opinion)
|
||||
|
||||
**BitNode-9: Hacktocracy** unlocks the Hacknet Server mechanic and several new
|
||||
functions in the :ref:`Hacknet Node API <netscript_hacknetnodeapi>` for using it.
|
||||
|
||||
For new mechanics
|
||||
^^^^^^^^^^^^^^^^^
|
||||
**BitNode-2: Rise of the Underworld** unlocks a new mechanic in which you can
|
||||
manage a gang. Gangs earn you money and can be very profitable once they get large
|
||||
and powerful. The biggest benefit of gangs, however, is that they make all
|
||||
Augmentations available to you through their corresponding faction.
|
||||
|
||||
**BitNode-3: Corporatocracy** unlocks a new mechanic in which you can manage a
|
||||
corporation. You can earn money through Corporations by selling your stocks, or by
|
||||
configuring your corporation to pay dividends to shareholders. If your Corporation
|
||||
gets big enough, it can also bribe factions in exchange for faction reputation.
|
||||
|
||||
**BitNode-6: Bladeburners** unlocks a new mechanic that centers around combat rather
|
||||
than hacking. The main benefit of the Bladeburner mechanic is that it offers a new
|
||||
method of destroying a BitNode.
|
||||
|
||||
**BitNode-9: Hacktocracy** unlocks the Hacknet Server, which is an upgraded version of a
|
||||
Hacknet Node. The Hacknet Server generates a computational unit called a *hash*. *Hashes*
|
||||
can be spent on a variety of different upgrades that can benefit your hacking,
|
||||
Corporation, Bladeburner progress, and more. It transforms the Hacknet Node from a
|
||||
simple money-generator to a more interesting mechanic.
|
||||
|
||||
**BitNode-10: Digital Carbon** unlocks two new mechanics: Re-Sleeving and
|
||||
Duplicate Sleeves.
|
||||
|
||||
For a Challenge
|
||||
^^^^^^^^^^^^^^^
|
||||
In general, the higher BitNodes are more difficult than the lower ones.
|
||||
**BitNode-12: The Recursion** is an obvious exception as it gets progressively harder.
|
||||
|
||||
**BitNode-8: Ghost of Wall Street** provides a unique challenge as the only method
|
||||
of earning money in that BitNode is through trading at the stock market.
|
||||
@@ -5,8 +5,9 @@
|
||||
|
||||
Welcome to Bitburner's documentation!
|
||||
=====================================
|
||||
Bitburner is a cyberpunk-themed `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_ that is currently in the
|
||||
early beta stage of development. The game `can be played here <https://danielyxie.github.io/bitburner/>`_.
|
||||
Bitburner is a programming-based `incremental game <https://en.wikipedia.org/wiki/Incremental_game>`_
|
||||
that revolves around hacking and cyberpunk themes. The game is currently in the
|
||||
early beta stage of development. It `can be played here <https://danielyxie.github.io/bitburner/>`_.
|
||||
|
||||
What is Bitburner?
|
||||
------------------
|
||||
@@ -26,6 +27,7 @@ secrets that you've been searching for.
|
||||
Script Editors <scripteditors>
|
||||
Game Frozen or Stuck? <gamefrozen>
|
||||
Guides & Tips <guidesandtips>
|
||||
Tools & Resources <toolsandresources>
|
||||
Changelog <changelog>
|
||||
Donate <https://paypal.me/danielyxie>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Netscript
|
||||
Netscript is the programming language used in the world of Bitburner.
|
||||
|
||||
When you write scripts in Bitburner, they are written in the Netscript language.
|
||||
Netscript is simply a subset of `JavaScript <https://developer.mozilla.org/en-US/docs/Web/JavaScript>`_,.
|
||||
Netscript is simply a subset of `JavaScript <https://developer.mozilla.org/en-US/docs/Web/JavaScript>`_.
|
||||
This means that Netscript's syntax is
|
||||
identical to that of JavaScript, but it does not implement some of the features
|
||||
that JavaScript has.
|
||||
@@ -29,4 +29,6 @@ to reach out to the developer!
|
||||
Bladeburner API <netscript/netscriptbladeburnerapi>
|
||||
Gang API <netscript/netscriptgangapi>
|
||||
Coding Contract API <netscript/netscriptcodingcontractapi>
|
||||
Sleeve API <netscript/netscriptsleeveapi>
|
||||
Formulas API <netscript/netscriptformulasapi>
|
||||
Miscellaneous <netscript/netscriptmisc>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
getBitNodeMultipliers() Netscript Function
|
||||
==========================================
|
||||
|
||||
.. js:function:: getBitNodeMultipliers()
|
||||
|
||||
:RAM cost: 4 GB
|
||||
|
||||
Returns an object containing the current BitNode multipliers. This function
|
||||
requires Source-File 5 in order to run. The multipliers are returned in
|
||||
decimal forms (e.g. 1.5 instead of 150%). The multipliers represent the
|
||||
difference between the current BitNode and the original BitNode (BitNode-1).
|
||||
For example, if the *CrimeMoney* multiplier has a value of 0.1, then that
|
||||
means that committing crimes in the current BitNode will only give 10% of
|
||||
the money you would have received in BitNode-1.
|
||||
|
||||
The structure of the returned object is subject to change as BitNode
|
||||
multipliers get added to the game. Refer to the `source code here
|
||||
<https://github.com/danielyxie/bitburner/blob/master/src/BitNode/BitNodeMultipliers.ts>`_
|
||||
to see the name of the BitNode multipliers.
|
||||
|
||||
Example::
|
||||
|
||||
mults = getBitNodeMultipliers();
|
||||
print(mults.ServerMaxMoney);
|
||||
print(mults.HackExpGain);
|
||||
39
doc/source/netscript/advancedfunctions/getServer.rst
Normal file
39
doc/source/netscript/advancedfunctions/getServer.rst
Normal file
@@ -0,0 +1,39 @@
|
||||
getServer() Netscript Function
|
||||
==========================================
|
||||
|
||||
.. js:function:: getServer()
|
||||
|
||||
:RAM cost: 4 GB
|
||||
|
||||
If you are not in BitNode-5, then you must have Source-File 5-1 in order to run this function.
|
||||
|
||||
This function is meant to be used in conjunction with the :doc:`formulas API<../netscriptformulasapi>`.
|
||||
|
||||
Returns an object with the Server's stats. The object has the following properties::
|
||||
|
||||
{
|
||||
cpuCores
|
||||
ftpPortOpen
|
||||
hasAdminRights
|
||||
hostname
|
||||
httpPortOpen
|
||||
ip
|
||||
isConnectedTo
|
||||
maxRam
|
||||
organizationName
|
||||
ramUsed
|
||||
smtpPortOpen
|
||||
sqlPortOpen
|
||||
sshPortOpen
|
||||
baseDifficulty
|
||||
hackDifficulty
|
||||
manuallyHacked
|
||||
minDifficulty
|
||||
moneyAvailable
|
||||
moneyMax
|
||||
numOpenPortsRequired
|
||||
openPortCount
|
||||
purchasedByPlayer
|
||||
requiredHackingSkill
|
||||
serverGrowth
|
||||
}
|
||||
17
doc/source/netscript/basicfunctions/brutessh.rst
Normal file
17
doc/source/netscript/basicfunctions/brutessh.rst
Normal file
@@ -0,0 +1,17 @@
|
||||
brutessh() Netscript Function
|
||||
=============================
|
||||
|
||||
.. js:function:: brutessh(hostname)
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
|
||||
:param string hostname: Hostname of the target server.
|
||||
|
||||
Runs the BruteSSH.exe program on the target server. BruteSSH.exe must exist
|
||||
on your home computer.
|
||||
|
||||
Examples:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
brutessh("foodnstuff");
|
||||
16
doc/source/netscript/basicfunctions/clear.rst
Normal file
16
doc/source/netscript/basicfunctions/clear.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
clear() Netscript Function
|
||||
==========================
|
||||
|
||||
.. js:function:: clear(portOrFilename)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
|
||||
:param string/number portOrFilename: Port or text file to clear.
|
||||
|
||||
This function is used to clear data in a :ref:`Netscript Port <netscript_ports>` or a text file.
|
||||
|
||||
If the ``portOrFilename`` argument is a number between 1 and 20, then it
|
||||
specifies a port and will clear it (deleting all data from the underlying queue).
|
||||
|
||||
If the ``portOrFilename`` argument is a string, then it specifies the name
|
||||
of a text file (.txt) and will delete all data from that text file.
|
||||
17
doc/source/netscript/basicfunctions/clearLog.rst
Normal file
17
doc/source/netscript/basicfunctions/clearLog.rst
Normal file
@@ -0,0 +1,17 @@
|
||||
clearLog() Netscript Function
|
||||
=============================
|
||||
|
||||
.. js:function:: clearLog()
|
||||
|
||||
:RAM cost: 0 GB
|
||||
|
||||
Clears the script's logs. Useful when making monitoring scripts.
|
||||
|
||||
Examples:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
while(true) {
|
||||
clearLog();
|
||||
print(getServerMoneyAvailable('foodnstuff'));
|
||||
}
|
||||
14
doc/source/netscript/basicfunctions/deleteServer.rst
Normal file
14
doc/source/netscript/basicfunctions/deleteServer.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
deleteServer() Netscript Function
|
||||
=================================
|
||||
|
||||
.. js:function:: deleteServer(hostname)
|
||||
|
||||
:RAM cost: 2.25 GB
|
||||
:param string hostname: Hostname of the server to delete.
|
||||
:returns: ``true`` if successful, ``false`` otherwise.
|
||||
|
||||
Deletes the specified purchased server.
|
||||
|
||||
The ``hostname`` argument can be any data type, but it will be converted to
|
||||
a string. Whitespace is automatically removed from the string. This function
|
||||
will not delete a server that still has scripts running on it.
|
||||
17
doc/source/netscript/basicfunctions/disableLog.rst
Normal file
17
doc/source/netscript/basicfunctions/disableLog.rst
Normal file
@@ -0,0 +1,17 @@
|
||||
disableLog() Netscript Function
|
||||
===============================
|
||||
|
||||
.. js:function:: disableLog(functionName)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
|
||||
:param string functionName: Name of function for which to disable logging.
|
||||
|
||||
Disables logging for the given function. Logging can be disabled for
|
||||
all functions by passing 'ALL' as the argument.
|
||||
|
||||
Note that this does not completely remove all logging functionality.
|
||||
This only stops a function from logging when the function is successful. If
|
||||
the function fails, it will still log the reason for failure.
|
||||
|
||||
Notable functions that cannot have their logs disabled: run, exec, exit
|
||||
12
doc/source/netscript/basicfunctions/enableLog.rst
Normal file
12
doc/source/netscript/basicfunctions/enableLog.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
enableLog() Netscript Function
|
||||
==============================
|
||||
|
||||
.. js:function:: enableLog(functionName)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
|
||||
:param string functionName: Name of function for which to enable logging.
|
||||
|
||||
Re-enables logging for the given function. If 'ALL' is passed into this
|
||||
function as an argument, then it will revert the effects of
|
||||
``disableLog('ALL')``
|
||||
41
doc/source/netscript/basicfunctions/exec.rst
Normal file
41
doc/source/netscript/basicfunctions/exec.rst
Normal file
@@ -0,0 +1,41 @@
|
||||
exec() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: exec(script, hostname[, numThreads=1[, args...]])
|
||||
|
||||
:RAM cost: 1.3 GB
|
||||
|
||||
:param string script: Filename of script to execute.
|
||||
:param string hostname: Hostname of the target server on which to execute the script.
|
||||
:param number numThreads: Optional thread count for new script. Set to 1 by
|
||||
default. Will be rounded to nearest integer
|
||||
:param args...: Additional arguments to pass into the new script that is
|
||||
being run. Note that if any arguments are being
|
||||
passed into the new script, then the third argument ``numThreads`` must
|
||||
be filled in with a value.
|
||||
:returns: Newly created process id on success, 0 on failure.
|
||||
|
||||
Run a script as a separate process on a specified server. This is similar to
|
||||
the :doc:`run<run>` function except that it can be used to run a script on any
|
||||
server, instead of just the current server.
|
||||
|
||||
.. warning:: Running this function with a ``numThreads`` argument of 0 will return 0 without
|
||||
running the script. However, running this function with a negative *numThreads*
|
||||
argument will cause a runtime error.
|
||||
|
||||
The simplest way to use the :doc:`exec<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`` on the ``foodnstuff`` server::
|
||||
|
||||
exec("generic-hack.script", "foodnstuff");
|
||||
|
||||
The following example will try to run the script ``generic-hack.script`` on
|
||||
the ``joesguns`` server with 10 threads::
|
||||
|
||||
exec("generic-hack.script", "joesguns", 10);
|
||||
|
||||
This last 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 to the script::
|
||||
|
||||
exec("foo.script", "foodnstuff", 5, 1, "test");
|
||||
8
doc/source/netscript/basicfunctions/exit.rst
Normal file
8
doc/source/netscript/basicfunctions/exit.rst
Normal file
@@ -0,0 +1,8 @@
|
||||
exit() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: exit()
|
||||
|
||||
:RAM cost: 0 GB
|
||||
|
||||
Terminates the current script immediately.
|
||||
29
doc/source/netscript/basicfunctions/fileExists.rst
Normal file
29
doc/source/netscript/basicfunctions/fileExists.rst
Normal file
@@ -0,0 +1,29 @@
|
||||
fileExists() Netscript Function
|
||||
===============================
|
||||
|
||||
.. js:function:: fileExists(filename[, hostname])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
|
||||
:param string filename: Filename of file to check.
|
||||
:param string hostname:
|
||||
Hostname of target server. This is optional. If it is not specified then
|
||||
the function will use the current server as the target server.
|
||||
:returns: ``true`` if the file exists, ``false`` if it doesn't.
|
||||
|
||||
The filename for scripts is case-sensitive, but for other types of files it
|
||||
is not. For example, ``fileExists("brutessh.exe")`` will work fine, even
|
||||
though the actual program is named ``BruteSSH.exe``.
|
||||
|
||||
If the ``hostname`` argument is omitted, then the function will search
|
||||
through the server running the script that calls this function for the file.
|
||||
|
||||
Examples:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
fileExists("foo.script", "foodnstuff"); // returns: false
|
||||
fileExists("ftpcrack.exe"); // returns: true
|
||||
|
||||
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 return true if the current server contains the ``FTPCrack.exe`` program, and false otherwise.
|
||||
18
doc/source/netscript/basicfunctions/ftpcrack.rst
Normal file
18
doc/source/netscript/basicfunctions/ftpcrack.rst
Normal file
@@ -0,0 +1,18 @@
|
||||
ftpcrack() Netscript Function
|
||||
=============================
|
||||
|
||||
.. js:function:: ftpcrack(hostname)
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
|
||||
:param string hostname: Hostname of the target server.
|
||||
|
||||
Runs the ``FTPCrack.exe`` program on the target server. ``FTPCrack.exe``
|
||||
must exist on your home computer.
|
||||
|
||||
|
||||
Examples:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
ftpcrack("foodnstuff");
|
||||
13
doc/source/netscript/basicfunctions/getFavorToDonate.rst
Normal file
13
doc/source/netscript/basicfunctions/getFavorToDonate.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
getFavorToDonate() Netscript Function
|
||||
=====================================
|
||||
|
||||
.. js:function:: getFavorToDonate()
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:returns: Amount of faction favor required to unlock donation.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getFavorToDonate() // returns: 150
|
||||
24
doc/source/netscript/basicfunctions/getGrowTime.rst
Normal file
24
doc/source/netscript/basicfunctions/getGrowTime.rst
Normal file
@@ -0,0 +1,24 @@
|
||||
getGrowTime() Netscript Function
|
||||
================================
|
||||
|
||||
.. js:function:: getGrowTime(hostname[, hackLvl=current level])
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
|
||||
:param string hostname: Hostname of target server.
|
||||
:param number hackLvl: Optional hacking level for the calculation. Defaults
|
||||
to player's current hacking level.
|
||||
:returns: seconds it takes to execute :doc:`grow<grow>` on that server.
|
||||
|
||||
The function takes in an optional ``hackLvl`` parameter that can be
|
||||
specified to see what the grow time would be at different hacking levels.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getGrowTime("foodnstuff"); // returns: 53.4
|
||||
|
||||
.. note:: For Hacknet Servers (the upgraded version of a Hacknet Node), this function will
|
||||
return ``Infinity``.
|
||||
22
doc/source/netscript/basicfunctions/getHackTime.rst
Normal file
22
doc/source/netscript/basicfunctions/getHackTime.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
getHackTime() Netscript Function
|
||||
================================
|
||||
|
||||
.. js:function:: getHackTime(hostname[, hackLvl=current level])
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:param number hackLvl: Optional hacking level for the calculation. Defaults
|
||||
to player's current hacking level.
|
||||
:returns: seconds it takes to execute :doc:`hack<hack>` on that server.
|
||||
|
||||
The function takes in an optional ``hackLvl`` parameter that can be
|
||||
specified to see what the hack time would be at different hacking levels.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getHackTime("foodnstuff"); // returns: 53.4
|
||||
|
||||
.. note:: For Hacknet Servers (the upgraded version of a Hacknet Node), this function will
|
||||
return :code:`Infinity`.
|
||||
13
doc/source/netscript/basicfunctions/getHackingLevel.rst
Normal file
13
doc/source/netscript/basicfunctions/getHackingLevel.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
getHackingLevel() Netscript Function
|
||||
====================================
|
||||
|
||||
.. js:function:: getHackingLevel()
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:returns: The player's current hacking level.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getHackingLevel(); // returns: 124
|
||||
@@ -0,0 +1,26 @@
|
||||
getHackingMultipliers() Netscript Function
|
||||
==========================================
|
||||
|
||||
.. js:function:: getHackingMultipliers()
|
||||
|
||||
:RAM cost: 4 GB
|
||||
:returns: object containing the player's hacking multipliers. These
|
||||
multipliers are returned in decimal forms, not percentages (e.g. 1.5
|
||||
instead of 150%).
|
||||
|
||||
Structure::
|
||||
|
||||
{
|
||||
chance: Player's hacking chance multiplier,
|
||||
speed: Player's hacking speed multiplier,
|
||||
money: Player's hacking money stolen multiplier,
|
||||
growth: Player's hacking growth multiplier
|
||||
}
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
mults = getHackingMultipliers();
|
||||
print(mults.chance);
|
||||
print(mults.growth);
|
||||
@@ -0,0 +1,27 @@
|
||||
getHacknetMultipliers() Netscript Function
|
||||
==========================================
|
||||
|
||||
.. js:function:: getHacknetMultipliers()
|
||||
|
||||
:RAM cost: 4 GB
|
||||
:returns: object containing the player's hacknet multipliers. These
|
||||
multipliers are returned in decimal forms, not percentages (e.g. 1.5
|
||||
instead of 150%).
|
||||
|
||||
Structure::
|
||||
|
||||
{
|
||||
production: Player's hacknet production multiplier,
|
||||
purchaseCost: Player's hacknet purchase cost multiplier,
|
||||
ramCost: Player's hacknet ram cost multiplier,
|
||||
coreCost: Player's hacknet core cost multiplier,
|
||||
levelCost: Player's hacknet level cost multiplier
|
||||
}
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
mults = getHacknetMultipliers();
|
||||
print(mults.production);
|
||||
print(mults.purchaseCost);
|
||||
14
doc/source/netscript/basicfunctions/getHostname.rst
Normal file
14
doc/source/netscript/basicfunctions/getHostname.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
getHostname() Netscript Function
|
||||
================================
|
||||
|
||||
.. js:function:: getHostname()
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:returns: Hostname of the server this script is running on.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getHostname(); // returns: "foodnstuff"
|
||||
|
||||
11
doc/source/netscript/basicfunctions/getPortHandle.rst
Normal file
11
doc/source/netscript/basicfunctions/getPortHandle.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
getPortHandle() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: getPortHandle(port)
|
||||
|
||||
:RAM cost: 10 GB
|
||||
|
||||
:param number port: Port number
|
||||
:returns: portHandle object. See :ref:`netscript_ports`
|
||||
|
||||
**WARNING:** Port Handles only work in :ref:`netscriptjs`. They will not work in :ref:`netscript1`.
|
||||
@@ -0,0 +1,15 @@
|
||||
getPurchasedServerCost() Netscript Function
|
||||
===========================================
|
||||
|
||||
.. js:function:: getPurchasedServerCost(ram)
|
||||
|
||||
:RAM cost: 0.25 GB
|
||||
|
||||
:param number ram: Amount of RAM of a potential purchased server. Must be a power of 2 (2, 4, 8, 16, etc.). Maximum value of 1048576 (2^20)
|
||||
:returns: Cost to purchase a server with the specified amount of ``ram``.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getPurchasedServerCost(8192); // returns: 450560000
|
||||
@@ -0,0 +1,13 @@
|
||||
getPurchasedServerLimit() Netscript Function
|
||||
============================================
|
||||
|
||||
.. js:function:: getPurchasedServerLimit()
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:returns: The maximum number of servers you can purchase.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getPurchasedServerLimit() // returns: 25
|
||||
@@ -0,0 +1,13 @@
|
||||
getPurchasedServerMaxRam() Netscript Function
|
||||
=============================================
|
||||
|
||||
.. js:function:: getPurchasedServerMaxRam()
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:returns: The maximum RAM that a purchased server can have.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getPurchasedServerMaxRam(); // returns: 1048576
|
||||
13
doc/source/netscript/basicfunctions/getPurchasedServers.rst
Normal file
13
doc/source/netscript/basicfunctions/getPurchasedServers.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
getPurchasedServers() Netscript Function
|
||||
========================================
|
||||
|
||||
.. js:function:: getPurchasedServers()
|
||||
|
||||
:RAM cost: 2.25 GB
|
||||
:returns: String array of hostnames of all of the servers you have purchased.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getPurchasedServers(); // returns: ['grow-server-0', 'grow-server-1', 'weaken-server-0']
|
||||
18
doc/source/netscript/basicfunctions/getScriptExpGain.rst
Normal file
18
doc/source/netscript/basicfunctions/getScriptExpGain.rst
Normal file
@@ -0,0 +1,18 @@
|
||||
getScriptExpGain() Netscript Function
|
||||
=====================================
|
||||
|
||||
.. js:function:: getScriptExpGain([scriptname[, hostname[, args...]]])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string scriptname: Filename of script.
|
||||
:param string hostname: Server on which script is running.
|
||||
:param args...: Arguments that the script is running with.
|
||||
:returns: The amount of hacking experience the specified script generates
|
||||
while online.
|
||||
|
||||
This function can also return the total experience gain rate of all of your
|
||||
active scripts by running the function with no arguments.
|
||||
|
||||
.. note:: A script is uniquely identified by both its name and its
|
||||
arguments.
|
||||
|
||||
19
doc/source/netscript/basicfunctions/getScriptIncome.rst
Normal file
19
doc/source/netscript/basicfunctions/getScriptIncome.rst
Normal file
@@ -0,0 +1,19 @@
|
||||
getScriptIncome() Netscript Function
|
||||
====================================
|
||||
|
||||
.. js:function:: getScriptIncome([scriptname[, hostname/ip[, [args...]]])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string scriptname: Filename of script
|
||||
:param string hostname/ip: Server on which script is running
|
||||
:param args...: Arguments that the script is running with
|
||||
:returns: Amount of income the specified script generates while online.
|
||||
|
||||
If called with no arguments this function will return an array of two
|
||||
values. The first value is the total income ($ / second) of all of your
|
||||
active scripts (scripts that are currently running on any server). The
|
||||
second value is the total income ($ / second) that you've earned from
|
||||
scripts since you last installed Augmentations.
|
||||
|
||||
.. note:: A script is uniquely identified by both its name and its
|
||||
arguments.
|
||||
33
doc/source/netscript/basicfunctions/getScriptLogs.rst
Normal file
33
doc/source/netscript/basicfunctions/getScriptLogs.rst
Normal file
@@ -0,0 +1,33 @@
|
||||
getScriptLogs() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: getScriptLogs([filename[, hostname=current hostname[, args...]]])
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:param string filename: Optional. Filename of script to get logs from.
|
||||
:param string hostname: Optional. Hostname of the server running the script.
|
||||
:param args...: Arguments to identify which scripts to get logs for
|
||||
:returns: Array of string, each line being a logged line. Chronological.
|
||||
|
||||
.. note:: There is a maximum number of lines that a script stores in its logs.
|
||||
This is configurable in the game's options.
|
||||
|
||||
If the function is called with no arguments, it will return the current
|
||||
script's logs.
|
||||
|
||||
Otherwise, the ``filename``, ``hostname``, and ``args...`` arguments can be
|
||||
used to get the logs from another script. Remember that scripts are uniquely
|
||||
identified by both their names and arguments.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
// Get logs from foo.script on the current server that was run with no args
|
||||
getScriptLogs("foo.script");
|
||||
|
||||
// Get logs from foo.script on the foodnstuff server that was run with no args
|
||||
getScriptLogs("foo.script", "foodnstuff");
|
||||
|
||||
// Get logs from foo.script on the foodnstuff server that was run with the arguments [1, "test"]
|
||||
getScriptLogs("foo.script", "foodnstuff", 1, "test");
|
||||
13
doc/source/netscript/basicfunctions/getScriptName.rst
Normal file
13
doc/source/netscript/basicfunctions/getScriptName.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
getScriptName() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: getScriptName()
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:returns: Current script name.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getScriptName(); // returns: "example.script"
|
||||
16
doc/source/netscript/basicfunctions/getScriptRam.rst
Normal file
16
doc/source/netscript/basicfunctions/getScriptRam.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
getScriptRam() Netscript Function
|
||||
=================================
|
||||
|
||||
.. js:function:: getScriptRam(filename[, hostname])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string filename: Filename of script.
|
||||
:param string hostname: Hostname of target server the script is located on.
|
||||
Default to the server this script is running on.
|
||||
:returns: Amount of RAM required to run the script, 0 if it does not exist.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getScriptRam("grow.script"); // returns: 1.75
|
||||
@@ -0,0 +1,28 @@
|
||||
getServerBaseSecurityLevel() Netscript Function
|
||||
===============================================
|
||||
|
||||
.. js:function:: getServerBaseSecurityLevel(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: Base security level of target server.
|
||||
|
||||
The base security level is the security level that the server starts out with.
|
||||
|
||||
This function isn't particularly useful.
|
||||
:doc:`getServerSecurityLevel<getServerSecurityLevel>` and
|
||||
:doc:`getServerMinSecurityLevel<getServerMinSecurityLevel>` are more often
|
||||
used.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerBaseSecurityLevel('foodnstuff'); // returns: 9
|
||||
|
||||
.. note:: This is different than :doc:`getServerSecurityLevel<getServerSecurityLevel>`
|
||||
because :doc:`getServerSecurityLevel<getServerSecurityLevel>` returns the current
|
||||
security level of a server, which can constantly change due to
|
||||
:doc:`hack<hack>`, :doc:`grow<grow>`, and :doc:`weaken<weaken>` calls on
|
||||
that server. The base security level will stay the same until you reset
|
||||
by installing augmentation(s).
|
||||
19
doc/source/netscript/basicfunctions/getServerGrowth.rst
Normal file
19
doc/source/netscript/basicfunctions/getServerGrowth.rst
Normal file
@@ -0,0 +1,19 @@
|
||||
getServerGrowth() Netscript Function
|
||||
====================================
|
||||
|
||||
.. js:function:: getServerGrowth(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: Server growth parameter.
|
||||
|
||||
The growth parameter is a number between 1 and 100 affects the percentage by
|
||||
which the server's money is increased when using the :doc:`grow<grow>`
|
||||
function. A higher growth parameter will result in a higher percentage
|
||||
increase.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerGrowth('foodnstuff'); // returns: 5
|
||||
14
doc/source/netscript/basicfunctions/getServerMaxMoney.rst
Normal file
14
doc/source/netscript/basicfunctions/getServerMaxMoney.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
getServerMaxMoney() Netscript Function
|
||||
======================================
|
||||
|
||||
.. js:function:: getServerMaxMoney(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: Maximum amount of money that can be available on a server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerMaxMoney('foodnstuff'); // returns: 4000000
|
||||
@@ -0,0 +1,14 @@
|
||||
getServerMinSecurityLevel() Netscript Function
|
||||
==============================================
|
||||
|
||||
.. js:function:: getServerMinSecurityLevel(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The minimum security level of the target server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerMinSecurityLevel('foodnstuff'); // returns: 3
|
||||
@@ -0,0 +1,19 @@
|
||||
getServerMoneyAvailable() Netscript Function
|
||||
============================================
|
||||
|
||||
.. js:function:: getServerMoneyAvailable(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: Money available on that server.
|
||||
|
||||
.. note::
|
||||
|
||||
Running this function on the home computer will return the player's money.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerMoneyAvailable("foodnstuff"); // returns: 120000
|
||||
getServerMoneyAvailable("home"); // returns: 1000
|
||||
@@ -0,0 +1,15 @@
|
||||
getServerNumPortsRequired() Netscript Function
|
||||
==============================================
|
||||
|
||||
.. js:function:: getServerNumPortsRequired(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The number of open ports required to successfully run NUKE.exe on
|
||||
the specified server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerNumPortsRequired("unitalife"); // returns: 4
|
||||
21
doc/source/netscript/basicfunctions/getServerRam.rst
Normal file
21
doc/source/netscript/basicfunctions/getServerRam.rst
Normal file
@@ -0,0 +1,21 @@
|
||||
getServerRam() Netscript Function
|
||||
=================================
|
||||
|
||||
.. js:function:: getServerRam(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: An array of 2 number, first number is the total RAM, second the
|
||||
used RAM.
|
||||
|
||||
Returns an array with two elements that gives information about a server's memory (RAM). The first
|
||||
element in the array is the amount of RAM that the server has total (in GB). The second element in
|
||||
the array is the amount of RAM that is currently being used on the server (in GB).
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
res = getServerRam("helios"); // returns: [5, 10]
|
||||
totalRam = res[0];
|
||||
ramUsed = res[1];
|
||||
@@ -0,0 +1,14 @@
|
||||
getServerRequiredHackingLevel() Netscript Function
|
||||
==================================================
|
||||
|
||||
.. js:function:: getServerRequiredHackingLevel(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The required hacking level of target server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerRequiredHackingLevel("foodnstuff"); // returns: 5
|
||||
@@ -0,0 +1,14 @@
|
||||
getServerSecurityLevel() Netscript Function
|
||||
===========================================
|
||||
|
||||
.. js:function:: getServerSecurityLevel(hostname)
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The security level of the target server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getServerSecurityLevel("foodnstuff"); // returns: 3.45
|
||||
13
doc/source/netscript/basicfunctions/getTimeSinceLastAug.rst
Normal file
13
doc/source/netscript/basicfunctions/getTimeSinceLastAug.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
getTimeSinceLastAug() Netscript Function
|
||||
========================================
|
||||
|
||||
.. js:function:: getTimeSinceLastAug()
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:returns: Milliseconds since you last installed augmentations.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getTimeSinceLastAug(); // returns: 13912400
|
||||
23
doc/source/netscript/basicfunctions/getWeakenTime.rst
Normal file
23
doc/source/netscript/basicfunctions/getWeakenTime.rst
Normal file
@@ -0,0 +1,23 @@
|
||||
getWeakenTime() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: getWeakenTime(hostname[, hackLvl=current level])
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:param number hackLvl: Optional hacking level for the calculation. Defaults
|
||||
to player's current hacking level.
|
||||
:returns: seconds it takes to execute the :doc:`weaken<weaken>` Netscript
|
||||
function on the target server.
|
||||
|
||||
The function takes in an optional *hackLvl* parameter that can be specified
|
||||
to see what the weaken time would be at different hacking levels.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
getWeakenTime("foodnstuff"); // returns: 34.5
|
||||
|
||||
.. note:: For Hacknet Servers (the upgraded version of a Hacknet Node), this function will
|
||||
return :code:`Infinity`.
|
||||
37
doc/source/netscript/basicfunctions/grow.rst
Normal file
37
doc/source/netscript/basicfunctions/grow.rst
Normal file
@@ -0,0 +1,37 @@
|
||||
grow() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: grow(hostname[, opts={}])
|
||||
|
||||
:RAM cost: 0.15 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
:param object opts: Optional parameters for configuring function behavior. Properties:
|
||||
|
||||
* threads (*number*) - Number of threads to use for this function.
|
||||
Must be less than or equal to the number of threads the script is running with.
|
||||
* stock (*boolean*) - If true, the function can affect the stock market. See
|
||||
:ref:`gameplay_stock_market_player_actions_influencing_stock`
|
||||
|
||||
:returns: The number by which the money on the server was multiplied for the growth
|
||||
|
||||
Increase the amount of money available on a server. The time it takes to
|
||||
execute depends on your hacking level and the target server's security
|
||||
level. When :doc:`grow<grow>` completes, the money available on a target
|
||||
server will be increased by a certain, fixed percentage. This percentage is
|
||||
determined by the target server's growth rate (which varies between servers)
|
||||
and security level. Generally, higher-level servers have higher growth
|
||||
rates. The :doc:`getServerGrowth<getServerGrowth>` function can be used to
|
||||
obtain a server's growth rate.
|
||||
|
||||
Like :doc:`hack<hack>`, :doc:`grow<grow>` can be called on any server, from
|
||||
any server. The :doc:`grow<grow>` command requires root access to the target
|
||||
server, but there is no required hacking level to run the command. It also
|
||||
raises the security level of the target server by 0.004 per thread.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
while(true) {
|
||||
grow("foodnstuff");
|
||||
}
|
||||
23
doc/source/netscript/basicfunctions/growthAnalyze.rst
Normal file
23
doc/source/netscript/basicfunctions/growthAnalyze.rst
Normal file
@@ -0,0 +1,23 @@
|
||||
growthAnalyze() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: growthAnalyze(hostname, growthAmount)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
:param string hostname: Hostname of server to analyze.
|
||||
:param number growthAmount: Multiplicative factor by which the server is
|
||||
grown. Decimal form. Must be >= 1.
|
||||
:returns: The amount of :doc:`grow<grow>` threads needed to grow the specified
|
||||
server by the specified amount.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
// How many grow threads are needed to double the current money on 'foodnstuff'
|
||||
growthAnalyze("foodnstuff", 2); // returns: 5124
|
||||
|
||||
If this returns 5124, then this means you need to call :doc:`grow<grow>`
|
||||
5124 times in order to double the money (or once with 5124 threads).
|
||||
|
||||
**Warning**: The value returned by this function isn't necessarily a whole number.
|
||||
36
doc/source/netscript/basicfunctions/hack.rst
Normal file
36
doc/source/netscript/basicfunctions/hack.rst
Normal file
@@ -0,0 +1,36 @@
|
||||
hack() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: hack(hostname[, opts={}])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
:param object opts: Optional parameters for configuring function behavior. Properties:
|
||||
|
||||
* threads (*number*) - Number of threads to use for this function.
|
||||
Must be less than or equal to the number of threads the script is running with.
|
||||
* stock (*boolean*) - If true, the function can affect the stock market. See
|
||||
:ref:`gameplay_stock_market_player_actions_influencing_stock`
|
||||
:returns: The amount of money stolen if the hack is successful, and zero otherwise
|
||||
|
||||
Function that is used to try and hack servers to steal money and gain
|
||||
hacking experience. The runtime for this command depends on your hacking
|
||||
level and the target server's security level. In order to hack a server you
|
||||
must first gain root access to that server and also have the required
|
||||
hacking level.
|
||||
|
||||
A script can hack a server from anywhere. It does not need to be running on
|
||||
the same server to hack that server. For example, you can create a script
|
||||
that hacks the 'foodnstuff' server and run that script on any server in the
|
||||
game.
|
||||
|
||||
A successful :doc:`hack<hack>` on a server will raise that server's security
|
||||
level by 0.002.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
hack("foodnstuff");
|
||||
hack("10.1.2.3");
|
||||
hack("foodnstuff", { threads: 5 }); // Only use 5 threads to hack
|
||||
22
doc/source/netscript/basicfunctions/hackAnalyzePercent.rst
Normal file
22
doc/source/netscript/basicfunctions/hackAnalyzePercent.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
hackAnalyzePercent() Netscript Function
|
||||
=======================================
|
||||
|
||||
.. js:function:: hackAnalyzePercent(hostname)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The percentage of money you will steal from the target server with
|
||||
a single hack.
|
||||
|
||||
Returns the percentage of the specified server's money you will steal with a
|
||||
single hack. This value is returned in percentage form, not decimal.
|
||||
|
||||
For example, assume the following returns 1:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
hackAnalyzePercent("foodnstuff"); // returns: 1
|
||||
|
||||
This means that if hack the 'foodnstuff' server, then you will steal 1% of its
|
||||
total money. If you :doc:`hack<hack>` using N threads, then you will steal N% of its total
|
||||
money.
|
||||
37
doc/source/netscript/basicfunctions/hackAnalyzeThreads.rst
Normal file
37
doc/source/netscript/basicfunctions/hackAnalyzeThreads.rst
Normal file
@@ -0,0 +1,37 @@
|
||||
hackAnalyzeThreads() Netscript Function
|
||||
=======================================
|
||||
|
||||
.. js:function:: hackAnalyzeThreads(hostname, hackAmount)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
:param string hostname: Hostname of server to analyze.
|
||||
:param number hackAmount: Amount of money you want to hack from the server.
|
||||
:returns: The number of threads needed to :doc:`hack<hack>` the server for
|
||||
``hackAmount`` money.
|
||||
|
||||
This function returns the number of script threads you need when running
|
||||
the :doc:`hack<hack>` command to steal the specified amount of money from
|
||||
the target server.
|
||||
|
||||
If ``hackAmount`` is less than zero or greater than the amount of money
|
||||
available on the server, then this function returns -1.
|
||||
|
||||
For example, let's say the 'foodnstuff' server has $10m and you run:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
hackAnalyzeThreads("foodnstuff", 1e6);
|
||||
|
||||
If this function returns 50, this means that if your next :doc:`hack<hack>` call
|
||||
is run on a script with 50 threads, it will steal $1m from the `foodnstuff` server.
|
||||
|
||||
.. warning:: The value returned by this function isn't necessarily a whole number.
|
||||
.. warning:: It is possible for this function to return :code:`Infinity` or :code:`NaN` in
|
||||
certain uncommon scenarios. This is because in JavaScript:
|
||||
|
||||
* :code:`0 / 0 = NaN`
|
||||
* :code:`N / 0 = Infinity` for 0 < N < Infinity.
|
||||
|
||||
For example, if a server has no money available and you want to hack some positive
|
||||
amount from it, then the function would return :code:`Infinity` because
|
||||
this would be impossible.
|
||||
16
doc/source/netscript/basicfunctions/hackChance.rst
Normal file
16
doc/source/netscript/basicfunctions/hackChance.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
hackChance() Netscript Function
|
||||
===============================
|
||||
|
||||
.. js:function:: hackChance(hostname)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
:param string hostname: Hostname of target server.
|
||||
:returns: The chance you have of successfully hacking the target server.
|
||||
in decimal form.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
hackChance("foodnstuff"); // returns: .5
|
||||
// So 50% chance to hack "foodnstuff"
|
||||
16
doc/source/netscript/basicfunctions/hasRootAccess.rst
Normal file
16
doc/source/netscript/basicfunctions/hasRootAccess.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
hasRootAccess() Netscript Function
|
||||
==================================
|
||||
|
||||
.. js:function:: hasRootAccess(hostname)
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
:returns: ``true`` if you have root access on the target server.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
if (hasRootAccess("foodnstuff") == false) {
|
||||
nuke("foodnstuff");
|
||||
}
|
||||
16
doc/source/netscript/basicfunctions/httpworm.rst
Normal file
16
doc/source/netscript/basicfunctions/httpworm.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
httpworm() Netscript Function
|
||||
=============================
|
||||
|
||||
.. js:function:: httpworm(hostname)
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
|
||||
Runs the HTTPWorm.exe program on the target server. HTTPWorm.exe must exist
|
||||
on your home computer.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
httpworm("foodnstuff");
|
||||
14
doc/source/netscript/basicfunctions/isLogEnabled.rst
Normal file
14
doc/source/netscript/basicfunctions/isLogEnabled.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
isLogEnabled() Netscript Function
|
||||
=================================
|
||||
|
||||
.. js:function:: isLogEnabled(functionName)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:param string functionName: Name of function to check.
|
||||
:returns: ``true`` is logs are enabled for this function or for 'ALL'
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
isLogEnabled('hack'); // returns: true
|
||||
40
doc/source/netscript/basicfunctions/isRunning.rst
Normal file
40
doc/source/netscript/basicfunctions/isRunning.rst
Normal file
@@ -0,0 +1,40 @@
|
||||
isRunning() Netscript Function
|
||||
==============================
|
||||
|
||||
.. js:function:: isRunning(filename, hostname, [args...])
|
||||
|
||||
:RAM cost: 0.1 GB
|
||||
:param string filename: Filename of script to check. case-sensitive.
|
||||
:param string hostname: Hostname of target server.
|
||||
:param args...: Arguments to specify/identify which scripts to search for
|
||||
:returns: ``true`` if that script with those args is running on that server.
|
||||
|
||||
.. note::
|
||||
|
||||
Remember that a script is uniquely identified by both its name and its arguments.
|
||||
|
||||
**Examples:**
|
||||
|
||||
In this first example below, the function call will return true if there is
|
||||
a script named ``foo.script`` with no arguments running on the
|
||||
``foodnstuff`` server, and false otherwise:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
isRunning("foo.script", "foodnstuff");
|
||||
|
||||
In this second example below, the function call will return true if there is
|
||||
a script named ``foo.script`` with no arguments running on the current
|
||||
server, and false otherwise:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
isRunning("foo.script", getHostname());
|
||||
|
||||
In this next example below, the function call will return true if there is a
|
||||
script named ``foo.script`` running with the arguments 1, 5, and "test" (in
|
||||
that order) on the ``joesguns`` server, and false otherwise:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
isRunning("foo.script", "joesguns", 1, 5, "test");
|
||||
58
doc/source/netscript/basicfunctions/kill.rst
Normal file
58
doc/source/netscript/basicfunctions/kill.rst
Normal file
@@ -0,0 +1,58 @@
|
||||
kill() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: kill(script, hostname, [args...])
|
||||
|
||||
:RAM cost: 0.5 GB
|
||||
:param string script: Filename of the script to kill.
|
||||
:param string hostname: Hostname of the server on which to kill the script.
|
||||
:param args...: Arguments to identify which script to kill.
|
||||
:returns: ``true`` is that script was killed.
|
||||
|
||||
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.
|
||||
|
||||
Examples:
|
||||
|
||||
The following example will try to kill a script named ``foo.script`` on the
|
||||
``foodnstuff`` server that was ran with no arguments:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
kill("foo.script", "foodnstuff");
|
||||
|
||||
The following will try to kill a script named ``foo.script`` on the current
|
||||
server that was ran with no arguments:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
kill("foo.script", getHostname());
|
||||
|
||||
The following will try to kill a script named ``foo.script`` on the current
|
||||
server that was ran with the arguments 1 and "foodnstuff":
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
kill("foo.script", getHostname(), 1, "foodnstuff");
|
||||
|
||||
.. js:function:: kill(scriptPid)
|
||||
|
||||
:RAM cost: 0.5 GB
|
||||
:param number scriptPid: PID of the script to kill
|
||||
:returns: ``true`` that script was killed.
|
||||
|
||||
Kills the script with the specified PID. Killing a script by its PID will
|
||||
typically have better performance, especially if you have many scripts
|
||||
running.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
if (kill(10)) {
|
||||
print("Killed script with PID 10!");
|
||||
}
|
||||
17
doc/source/netscript/basicfunctions/killall.rst
Normal file
17
doc/source/netscript/basicfunctions/killall.rst
Normal file
@@ -0,0 +1,17 @@
|
||||
killall() Netscript Function
|
||||
============================
|
||||
|
||||
.. js:function:: killall(hostname)
|
||||
|
||||
:RAM cost: 0.5 GB
|
||||
:param string hostname: Hostname of the server on which to kill all scripts.
|
||||
:returns: ``true`` if scripts were killed on target server.
|
||||
|
||||
Kills all running scripts on the specified server.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
killall('foodnstuff'); // returns: true
|
||||
15
doc/source/netscript/basicfunctions/ls.rst
Normal file
15
doc/source/netscript/basicfunctions/ls.rst
Normal file
@@ -0,0 +1,15 @@
|
||||
ls() Netscript Function
|
||||
=======================
|
||||
|
||||
.. js:function:: ls(hostname[, grep])
|
||||
|
||||
:RAM cost: 0.2 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
:param string grep: a substring to search for in the filename.
|
||||
:returns: String array of all files in alphabetical order.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
ls("home"); // returns: ["demo.script", "msg1.txt"]
|
||||
22
doc/source/netscript/basicfunctions/nFormat.rst
Normal file
22
doc/source/netscript/basicfunctions/nFormat.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
nFormat() Netscript Function
|
||||
============================
|
||||
|
||||
.. js:function:: nFormat(n, format)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:param number n: number to format
|
||||
:param string format: The format to use.
|
||||
|
||||
Converts a number into a string with the specified format. This uses the
|
||||
`numeraljs <http://numeraljs.com/>`_ library, so the formatters must be
|
||||
compatible with that.
|
||||
|
||||
The game uses the ``$0.000a`` format to display money.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
nFormat(1.23e9, "$0.000a"); // returns: "$1.230b"
|
||||
nFormat(12345.678, "0,0"); // returns: "12,346"
|
||||
nFormat(0.84, "0.0%"); // returns: "84.0%"
|
||||
16
doc/source/netscript/basicfunctions/nuke.rst
Normal file
16
doc/source/netscript/basicfunctions/nuke.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
nuke() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: nuke(hostname)
|
||||
|
||||
:RAM cost: 0.05 GB
|
||||
:param string hostname: Hostname of the target server.
|
||||
|
||||
Runs the NUKE.exe program on the target server. NUKE.exe must exist on your home computer.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
nuke("foodnstuff");
|
||||
14
doc/source/netscript/basicfunctions/peek.rst
Normal file
14
doc/source/netscript/basicfunctions/peek.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
peek() Netscript Function
|
||||
=========================
|
||||
|
||||
.. js:function:: peek(port)
|
||||
|
||||
:RAM cost: 1 GB
|
||||
:param number port: Port to peek. Must be an integer between 1 and 20.
|
||||
:returns: First element on that port.
|
||||
|
||||
This function is used to peek at the data from a port. It returns the first
|
||||
element in the specified port without removing that element. If the port is
|
||||
empty, the string "NULL PORT DATA" will be returned.
|
||||
|
||||
Read about how :ref:`netscript_ports` work here
|
||||
15
doc/source/netscript/basicfunctions/print.rst
Normal file
15
doc/source/netscript/basicfunctions/print.rst
Normal file
@@ -0,0 +1,15 @@
|
||||
print() Netscript Function
|
||||
===========================
|
||||
|
||||
.. js:function:: print(x)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:param x: Value to be printed.
|
||||
|
||||
Prints a value or a variable to the script's logs.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
print("Hello world!"); // Prints "Hello world!" in the logs.
|
||||
23
doc/source/netscript/basicfunctions/prompt.rst
Normal file
23
doc/source/netscript/basicfunctions/prompt.rst
Normal file
@@ -0,0 +1,23 @@
|
||||
prompt() Netscript Function
|
||||
===========================
|
||||
|
||||
.. js:function:: prompt(txt)
|
||||
|
||||
:RAM cost: 0 GB
|
||||
:param string txt: Text to appear in the prompt dialog box.
|
||||
:returns: ``true`` if the player clicks "Yes".
|
||||
|
||||
Prompts the player with a dialog box with two options: "Yes" and "No". This
|
||||
function will return true if the player click "Yes" and false if the player
|
||||
clicks "No". The script's execution is halted until the player selects one
|
||||
of the options.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
cost = getPurchasedServerCost(8192);
|
||||
answer = prompt("Buy a server for $"+cost);
|
||||
if(answer) {
|
||||
purchaseServer("my server", 8192);
|
||||
}
|
||||
29
doc/source/netscript/basicfunctions/ps.rst
Normal file
29
doc/source/netscript/basicfunctions/ps.rst
Normal file
@@ -0,0 +1,29 @@
|
||||
ps() Netscript Function
|
||||
=======================
|
||||
|
||||
.. js:function:: ps([hostname=current hostname])
|
||||
|
||||
:RAM cost: 0.2 GB
|
||||
:param string hostname: Hostname address of the target server.
|
||||
If not specified, it will be the current server's IP by default.
|
||||
:returns: array of object
|
||||
|
||||
Returns an array with general information about all scripts running on the
|
||||
specified target server. The information for each server is given in an
|
||||
object with the following structure::
|
||||
|
||||
{
|
||||
filename: Script name,
|
||||
threads: Number of threads script is running with,
|
||||
args: Script's arguments
|
||||
}
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
processes = ps("home");
|
||||
for (let i = 0; i < ps.length; ++i) {
|
||||
tprint(ps[i].filename + ' ' + ps[i].threads);
|
||||
tprint(ps[i].args);
|
||||
}
|
||||
34
doc/source/netscript/basicfunctions/purchaseServer.rst
Normal file
34
doc/source/netscript/basicfunctions/purchaseServer.rst
Normal file
@@ -0,0 +1,34 @@
|
||||
purchaseServer() Netscript Function
|
||||
===================================
|
||||
|
||||
.. js:function:: purchaseServer(hostname, ram)
|
||||
|
||||
:RAM cost: 2.25 GB
|
||||
:param string hostname: Hostname of the purchased server.
|
||||
:param number ram: Amount of RAM of the purchased server. Must be a power of
|
||||
2. Maximum value of :doc:`getPurchasedServerMaxRam<getPurchasedServerMaxRam>`
|
||||
:returns: The hostname of the newly purchased server.
|
||||
|
||||
Purchased a server with the specified hostname and amount of RAM.
|
||||
|
||||
The ``hostname`` argument can be any data type, but it will be converted to
|
||||
a string and have whitespace removed. Anything that resolves to an empty
|
||||
string will cause the function to fail. If there is already a server with
|
||||
the specified hostname, then the function will automatically append a number
|
||||
at the end of the ``hostname`` argument value until it finds a unique
|
||||
hostname. For example, if the script calls ``purchaseServer("foo", 4)`` but
|
||||
a server named "foo" already exists, the it will automatically change the
|
||||
hostname to "foo-0". If there is already a server with the hostname "foo-0",
|
||||
then it will change the hostname to "foo-1", and so on.
|
||||
|
||||
Note that there is a maximum limit to the amount of servers you can purchase.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
ram = 64;
|
||||
hn = "pserv-";
|
||||
for (i = 0; i < 5; ++i) {
|
||||
purchaseServer(hn + i, ram);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user