mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-17 14:59:16 +02:00
Compare commits
193 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb31954b08 | ||
|
|
7f1d39a298 | ||
|
|
d5c9306395 | ||
|
|
b0fcdb8363 | ||
|
|
ab8937870c | ||
|
|
4e22b880bb | ||
|
|
f77ab4e871 | ||
|
|
0a210555e9 | ||
|
|
3df298e91e | ||
|
|
b7e07bc7f2 | ||
|
|
c97fece747 | ||
|
|
a2aaf6bd2e | ||
|
|
2a13db39c7 | ||
|
|
bada8a5f39 | ||
|
|
6979082be7 | ||
|
|
1c9542d102 | ||
|
|
0d5a302580 | ||
|
|
7bc0764d5d | ||
|
|
bc034bb417 | ||
|
|
ea99166f7f | ||
|
|
82c3362adc | ||
|
|
e7d77b7569 | ||
|
|
c5af4f8177 | ||
|
|
d0cb0e3f5b | ||
|
|
f7adadd671 | ||
|
|
faa6f75027 | ||
|
|
3b0cf6714a | ||
|
|
cd43f25bf5 | ||
|
|
6e670e88e2 | ||
|
|
20062b11b9 | ||
|
|
d0ca2d8c36 | ||
|
|
20e41e8006 | ||
|
|
7ef7fc1b26 | ||
|
|
6352704608 | ||
|
|
072f7693f4 | ||
|
|
fbe70f51c2 | ||
|
|
27e2b2ea65 | ||
|
|
6320189717 | ||
|
|
17da325585 | ||
|
|
5873b5fe19 | ||
|
|
6d8b52c0d6 | ||
|
|
8faa7faf8a | ||
|
|
66a593e06b | ||
|
|
506122f5b8 | ||
|
|
91434b7972 | ||
|
|
ba46262426 | ||
|
|
aa91e8aecc | ||
|
|
2874112946 | ||
|
|
3f8aa2aa9e | ||
|
|
b9acfde363 | ||
|
|
b4c9655782 | ||
|
|
f50b2a9d9f | ||
|
|
a475e6297e | ||
|
|
cfdf23cd11 | ||
|
|
d6aa331310 | ||
|
|
306facc0d1 | ||
|
|
5e11e77282 | ||
|
|
daafdbbddf | ||
|
|
8501c9bb1b | ||
|
|
05f3b1c390 | ||
|
|
7f15a19f12 | ||
|
|
4011542b97 | ||
|
|
858b1e7468 | ||
|
|
cfbdae6def | ||
|
|
05a6f2a20e | ||
|
|
05bab22807 | ||
|
|
a18bdd6afc | ||
|
|
3d7cdb4ef9 | ||
|
|
eed915dbbd | ||
|
|
570e5b17a2 | ||
|
|
4a7fcda86f | ||
|
|
a63178f30c | ||
|
|
2914bbb789 | ||
|
|
1e42f73e2a | ||
|
|
2d322e7a6a | ||
|
|
75d77410ea | ||
|
|
0ad05c7bad | ||
|
|
69ec6f6679 | ||
|
|
c8dd17d573 | ||
|
|
1241cc5128 | ||
|
|
e1c29f25e2 | ||
|
|
c9efa977fb | ||
|
|
6e013e4e6a | ||
|
|
3a943e0e50 | ||
|
|
f2edb42aca | ||
|
|
e1cb0e529c | ||
|
|
008b233c9d | ||
|
|
cc9a07c09f | ||
|
|
2866bfaa70 | ||
|
|
38880f69e1 | ||
|
|
eb01051ad6 | ||
|
|
5dd6145d53 | ||
|
|
a652140224 | ||
|
|
aa929b1837 | ||
|
|
9b501e061a | ||
|
|
6f3db27373 | ||
|
|
454a792f0a | ||
|
|
8d17495e85 | ||
|
|
d3aeda8ad5 | ||
|
|
65158e4db7 | ||
|
|
fd85a00b8f | ||
|
|
a239f0ad58 | ||
|
|
d936f68c7a | ||
|
|
feebdc8ee5 | ||
|
|
0eeb868e25 | ||
|
|
d9c9c30fdd | ||
|
|
294640d27e | ||
|
|
fe25460997 | ||
|
|
f987ff9e2a | ||
|
|
d65cbf07f4 | ||
|
|
2624e13c34 | ||
|
|
7c9c4d3f4d | ||
|
|
a2379b21ec | ||
|
|
68885ceff5 | ||
|
|
1ae17677c0 | ||
|
|
67be13c6d6 | ||
|
|
d4349e85b1 | ||
|
|
a721c49e1d | ||
|
|
2d2c20bfc7 | ||
|
|
ed035a2e89 | ||
|
|
cf72d72bb0 | ||
|
|
3ba04220e1 | ||
|
|
a72d1aa99f | ||
|
|
21008ba65a | ||
|
|
a760ede129 | ||
|
|
717b32b0b4 | ||
|
|
4b6d049da2 | ||
|
|
8bb4e8b7cf | ||
|
|
0d30544a52 | ||
|
|
361ef31fe7 | ||
|
|
0de3deee3f | ||
|
|
94ad7ccf4b | ||
|
|
4b53d6ecf7 | ||
|
|
3d2aeb63a0 | ||
|
|
b621359a9e | ||
|
|
07c0b708d7 | ||
|
|
b372f23b6e | ||
|
|
a8254e7144 | ||
|
|
02a21cf2d9 | ||
|
|
bcb0606900 | ||
|
|
42704d8695 | ||
|
|
e75197dee3 | ||
|
|
9e92df47a5 | ||
|
|
c110c22efb | ||
|
|
c9ab7908a7 | ||
|
|
3ab306f9d7 | ||
|
|
f08aa8924c | ||
|
|
c4914fa54f | ||
|
|
fa5e2f4964 | ||
|
|
77eda1fd75 | ||
|
|
c987c91a11 | ||
|
|
feaa74ed34 | ||
|
|
701fba7ec7 | ||
|
|
51bd626e88 | ||
|
|
ab4863e7df | ||
|
|
1a8bcf66cc | ||
|
|
7bfceb1690 | ||
|
|
27e22814a9 | ||
|
|
ceb4e304fd | ||
|
|
e2d74f9432 | ||
|
|
79345a49b4 | ||
|
|
7066a793a1 | ||
|
|
2a5cf62168 | ||
|
|
6495be5705 | ||
|
|
0d6d05db49 | ||
|
|
5d59620dce | ||
|
|
60d95a90d0 | ||
|
|
51debc60da | ||
|
|
faf625b34d | ||
|
|
1a8b194341 | ||
|
|
386f8a11c5 | ||
|
|
4278191b0e | ||
|
|
4a9bac99d2 | ||
|
|
49cc75a575 | ||
|
|
8289c9fc75 | ||
|
|
6cd7465b82 | ||
|
|
c7125e2e46 | ||
|
|
480d47eece | ||
|
|
9ac75d5bf5 | ||
|
|
1fb5105d0a | ||
|
|
7db3716256 | ||
|
|
aa3ad3164c | ||
|
|
fea25249a8 | ||
|
|
3826de72ef | ||
|
|
5098ef6232 | ||
|
|
27ee65f524 | ||
|
|
1d0f193c34 | ||
|
|
08908c87ea | ||
|
|
3957a517db | ||
|
|
21daab32c1 | ||
|
|
5e2ed7a79e | ||
|
|
d9e60ea124 | ||
|
|
2750eb293a |
3
.browserslistrc
Normal file
3
.browserslistrc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
last 4 versions
|
||||||
|
not dead
|
||||||
|
not ie <= 11
|
||||||
@@ -3,6 +3,4 @@ doc/build/
|
|||||||
dist/
|
dist/
|
||||||
tests/*.bundle.*
|
tests/*.bundle.*
|
||||||
src/ThirdParty/*
|
src/ThirdParty/*
|
||||||
src/ScriptEditor/CodeMirrorNetscriptMode.js
|
|
||||||
src/ScriptEditor/CodeMirrorNetscriptLint.js
|
|
||||||
src/JSInterpreter.js
|
src/JSInterpreter.js
|
||||||
1304
.eslintrc.js
1304
.eslintrc.js
File diff suppressed because it is too large
Load Diff
31
.github/workflows/deploy.yml
vendored
Normal file
31
.github/workflows/deploy.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [dev]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: "14"
|
||||||
|
cache: "npm"
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: npm run test
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: .
|
||||||
25
.github/workflows/test.yml
vendored
Normal file
25
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
|
jobs:
|
||||||
|
# This workflow contains a single job called "build"
|
||||||
|
test:
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: "14"
|
||||||
|
cache: "npm"
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: npm run test
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
.vscode
|
||||||
Changelog.txt
|
Changelog.txt
|
||||||
Netburner.txt
|
Netburner.txt
|
||||||
/doc/build
|
/doc/build
|
||||||
@@ -6,3 +7,7 @@ Netburner.txt
|
|||||||
/test/*.map
|
/test/*.map
|
||||||
/test/*.bundle.*
|
/test/*.bundle.*
|
||||||
/test/*.css
|
/test/*.css
|
||||||
|
.cypress
|
||||||
|
|
||||||
|
# editor files
|
||||||
|
.vscode
|
||||||
|
|||||||
4
.prettierignore
Normal file
4
.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
node_modules
|
||||||
|
package.json
|
||||||
|
dist
|
||||||
|
doc/build/
|
||||||
5
.prettierrc
Normal file
5
.prettierrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"trailingComma": "all",
|
||||||
|
"tabWidth": 2,
|
||||||
|
"printWidth": 120
|
||||||
|
}
|
||||||
130
CONTRIBUTING.md
130
CONTRIBUTING.md
@@ -1,24 +1,27 @@
|
|||||||
# Contributing to Bitburner
|
# Contributing to Bitburner
|
||||||
|
|
||||||
## In General
|
## In General
|
||||||
|
|
||||||
The game is made better because the community as a whole speaks up about
|
The game is made better because the community as a whole speaks up about
|
||||||
ways to improve the game. Here's some of the ways you can make your voice
|
ways to improve the game. Here's some of the ways you can make your voice
|
||||||
heard:
|
heard:
|
||||||
- [Discord](https://discordapp.com)
|
|
||||||
There is a dedicated Discord instance set up for more free-form chats
|
- [Discord](https://discordapp.com)
|
||||||
between all members of the community. Regular players, heavy scripters,
|
There is a dedicated Discord instance set up for more free-form chats
|
||||||
Bitburner contributors, and everyone in between can be found on the
|
between all members of the community. Regular players, heavy scripters,
|
||||||
server.
|
Bitburner contributors, and everyone in between can be found on the
|
||||||
- [Github Issues](https://github.com/danielyxie/bitburner/issues)
|
server.
|
||||||
Although the term "issues" can have a negative connotation, they are a
|
- [Github Issues](https://github.com/danielyxie/bitburner/issues)
|
||||||
means of communicating with the community. A new Issue can be a
|
Although the term "issues" can have a negative connotation, they are a
|
||||||
interesting new feature that you feel would improve the game. It could be
|
means of communicating with the community. A new Issue can be a
|
||||||
an unexpected behavior within the game. Or because the game is about
|
interesting new feature that you feel would improve the game. It could be
|
||||||
scripting perhaps there is something that is conflicting with the
|
an unexpected behavior within the game. Or because the game is about
|
||||||
browser's Javascript interaction. So please do not be afraid to open a
|
scripting perhaps there is something that is conflicting with the
|
||||||
[new issue](https://github.com/danielyxie/bitburner/issues/new).
|
browser's Javascript interaction. So please do not be afraid to open a
|
||||||
|
[new issue](https://github.com/danielyxie/bitburner/issues/new).
|
||||||
|
|
||||||
## Reporting Bugs
|
## Reporting Bugs
|
||||||
|
|
||||||
The recommended method for reporting a bug is by opening a
|
The recommended method for reporting a bug is by opening a
|
||||||
[Github Issue](https://github.com/danielyxie/bitburner/issues).
|
[Github Issue](https://github.com/danielyxie/bitburner/issues).
|
||||||
|
|
||||||
@@ -30,18 +33,19 @@ already been reported as an [Issue](https://github.com/danielyxie/bitburner/issu
|
|||||||
|
|
||||||
#### How to Submit a Good Bug Report
|
#### How to Submit a Good Bug Report
|
||||||
|
|
||||||
* **Use a clear and descriptive title** for the issue
|
- **Use a clear and descriptive title** for the issue
|
||||||
* **State your browser, your browser's version, and your computer's OS**
|
- **State your browser, your browser's version, and your computer's OS**
|
||||||
* **Attach your save file**, if you think it would help solve the issue
|
- **Attach your save file**, if you think it would help solve the issue
|
||||||
* **Provide instructions on how to reproduce the bug** in as much detail
|
- **Provide instructions on how to reproduce the bug** in as much detail
|
||||||
as possible. If you cannot reliably reproduce the bug, then just try
|
as possible. If you cannot reliably reproduce the bug, then just try
|
||||||
your best to explain what was happening when the bug occurred
|
your best to explain what was happening when the bug occurred
|
||||||
* **Provide any scripts** that triggered the bug if the issue is Netscript-related
|
- **Provide any scripts** that triggered the bug if the issue is Netscript-related
|
||||||
* **Open your browser's Dev Console and report any error-related output**
|
- **Open your browser's Dev Console and report any error-related output**
|
||||||
that may be printed there. The Dev Console can be opened on most modern
|
that may be printed there. The Dev Console can be opened on most modern
|
||||||
browsers by pressing F12
|
browsers by pressing F12
|
||||||
|
|
||||||
## As a Developer
|
## As a Developer
|
||||||
|
|
||||||
Anyone is welcome to contribute to Bitburner code. However, please read
|
Anyone is welcome to contribute to Bitburner code. However, please read
|
||||||
the [license](https://github.com/danielyxie/bitburner/blob/dev/license.txt)
|
the [license](https://github.com/danielyxie/bitburner/blob/dev/license.txt)
|
||||||
and the [readme](https://github.com/danielyxie/bitburner/blob/dev/README.md)
|
and the [readme](https://github.com/danielyxie/bitburner/blob/dev/README.md)
|
||||||
@@ -52,64 +56,70 @@ To contribute to Bitburner code, you will need to have
|
|||||||
called `npm` is installed as well.
|
called `npm` is installed as well.
|
||||||
|
|
||||||
#### What are you Allowed to Contribute?
|
#### What are you Allowed to Contribute?
|
||||||
|
|
||||||
Not all code contributions will be accepted. The safest way to ensure
|
Not all code contributions will be accepted. The safest way to ensure
|
||||||
that you don't waste time working on something that gets rejected is to
|
that you don't waste time working on something that gets rejected is to
|
||||||
run your idea(s)/plan(s) past [danielyxie](https://github.com/danielyxie) first.
|
run your idea(s)/plan(s) past [danielyxie](https://github.com/danielyxie) first.
|
||||||
You can contact him through:
|
You can contact him through:
|
||||||
|
|
||||||
* Github
|
- Github
|
||||||
* Discord
|
- Discord
|
||||||
* [Reddit](https://www.reddit.com/user/chapt3r/)
|
- [Reddit](https://www.reddit.com/user/chapt3r/)
|
||||||
|
|
||||||
Otherwise, here are some general guidelines for determining what types of
|
Otherwise, here are some general guidelines for determining what types of
|
||||||
changes are okay to contribute:
|
changes are okay to contribute:
|
||||||
|
|
||||||
##### Contributions that Will Most Likely Be Accepted
|
##### Contributions that Will Most Likely Be Accepted
|
||||||
* Bug Fixes
|
|
||||||
* Quality-of-Life Changes
|
- Bug Fixes
|
||||||
* Adding a new, commonly-requested Netscript function
|
- Quality-of-Life Changes
|
||||||
* Fixing or improving UI elements
|
- Adding a new, commonly-requested Netscript function
|
||||||
* Adding game settings/options
|
- Fixing or improving UI elements
|
||||||
* Adding a new Terminal command
|
- Adding game settings/options
|
||||||
* Code Refactors that conform to good/standard practices
|
- Adding a new Terminal command
|
||||||
|
- Code Refactors that conform to good/standard practices
|
||||||
|
|
||||||
##### Contributions that will not be Accepted without prior approval
|
##### Contributions that will not be Accepted without prior approval
|
||||||
* Changes that directly affect the game's balance
|
|
||||||
* New gameplay mechanics
|
- Changes that directly affect the game's balance
|
||||||
|
- New gameplay mechanics
|
||||||
|
|
||||||
#### Submitting a Pull Request
|
#### Submitting a Pull Request
|
||||||
|
|
||||||
When submitting a pull request with your code contributions, please abide by
|
When submitting a pull request with your code contributions, please abide by
|
||||||
the following rules:
|
the following rules:
|
||||||
|
|
||||||
- Work in a branch forked from `dev` to isolate the new code
|
- Work in a branch forked from `dev` to isolate the new code
|
||||||
- Ensure you have latest from the [game's main
|
- Ensure you have latest from the [game's main
|
||||||
repository](danielyxie/bitburner@dev)
|
repository](danielyxie/bitburner@dev)
|
||||||
- Rebase your branch if necessary
|
- Rebase your branch if necessary
|
||||||
- Run the game locally to test out your changes
|
- Run the game locally to test out your changes
|
||||||
- When submitting the pull request, make sure that the base fork is
|
- When submitting the pull request, make sure that the base fork is
|
||||||
_danielyxie/bitburner_ and the base is _dev_.
|
_danielyxie/bitburner_ and the base is _dev_.
|
||||||
- If your changes affect the game's UI, attach some screenshots or GIFs showing
|
- If your changes affect the game's UI, attach some screenshots or GIFs showing
|
||||||
the changes to the UI
|
the changes to the UI
|
||||||
- If your changes affect Netscript, provide some
|
- If your changes affect Netscript, provide some
|
||||||
scripts that can be used to test the Netscript changes.
|
scripts that can be used to test the Netscript changes.
|
||||||
- Ensure you have run `npm run lint` to make sure your changes conform to the
|
- Ensure you have run `npm run lint` to make sure your changes conform to the
|
||||||
rules enforced across the code base. The command will fail if any of the
|
rules enforced across the code base. The command will fail if any of the
|
||||||
linters find a violation.
|
linters find a violation.
|
||||||
- Do not check in any bundled files (`dist\*.bundle.js`) or the `index.html`
|
- Do not check in any bundled files (`dist\*.bundle.js`) or the `index.html`
|
||||||
in the root of the repository. These will be updated as part of official
|
in the root of the repository. These will be updated as part of official
|
||||||
releases.
|
releases.
|
||||||
|
|
||||||
## As a Documentor
|
## As a Documentor
|
||||||
|
|
||||||
To contribute to and view your changes to the BitBurner documentation, you will
|
To contribute to and view your changes to the BitBurner documentation, you will
|
||||||
need to have Python installed, along with [Sphinx](http://www.sphinx-doc.org).
|
need to have Python installed, along with [Sphinx](http://www.sphinx-doc.org).
|
||||||
|
|
||||||
Before submitting your code for a pull request, please try to follow these
|
Before submitting your code for a pull request, please try to follow these
|
||||||
rules:
|
rules:
|
||||||
- Work in a branch forked from `dev` to isolate the new code
|
|
||||||
- Ensure you have latest from the [game's main
|
- Work in a branch forked from `dev` to isolate the new code
|
||||||
repository](danielyxie/bitburner@dev)
|
- Ensure you have latest from the [game's main
|
||||||
- Rebase your branch if necessary
|
repository](danielyxie/bitburner@dev)
|
||||||
- When submitting the pull request, make sure that the base fork is
|
- Rebase your branch if necessary
|
||||||
_danielyxie/bitburner_ and the base is _dev_.
|
- When submitting the pull request, make sure that the base fork is
|
||||||
- Do not check in any generated files under `doc\`. The documentation is built
|
_danielyxie/bitburner_ and the base is _dev_.
|
||||||
automatically by ReadTheDocs.
|
- Do not check in any generated files under `doc\`. The documentation is built
|
||||||
|
automatically by ReadTheDocs.
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
# Bitburner
|
# Bitburner
|
||||||
|
|
||||||
Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wiki/Incremental_game)
|
Bitburner is a programming-based [incremental game](https://en.wikipedia.org/wiki/Incremental_game)
|
||||||
that revolves around hacking and cyberpunk themes.
|
that revolves around hacking and cyberpunk themes.
|
||||||
The game can be played at https://danielyxie.github.io/bitburner.
|
The game can be played at https://danielyxie.github.io/bitburner.
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
The game's official documentation can be found on [Read The
|
The game's official documentation can be found on [Read The
|
||||||
Docs](http://bitburner.readthedocs.io/). Please note that this is still a
|
Docs](http://bitburner.readthedocs.io/). Please note that this is still a
|
||||||
work-in-progress.
|
work-in-progress.
|
||||||
@@ -16,6 +18,7 @@ For further guidance, please refer to the "As A Documentor" section of
|
|||||||
[CONTRIBUTING](CONTRIBUTING.md).
|
[CONTRIBUTING](CONTRIBUTING.md).
|
||||||
|
|
||||||
# Contribution
|
# Contribution
|
||||||
|
|
||||||
There are many ways to contribute to the game. It can be as simple as fixing
|
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,
|
a typo, correcting a bug, or improving the UI. For guidance on doing so,
|
||||||
please refer to the [CONTRIBUTING](CONTRIBUTING.md) document.
|
please refer to the [CONTRIBUTING](CONTRIBUTING.md) document.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Deploying a new version
|
## Deploying a new version
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Update the following
|
Update the following
|
||||||
|
|
||||||
- `src/Constants.ts` `Version` and `LatestUpdate`
|
- `src/Constants.ts` `Version` and `LatestUpdate`
|
||||||
- `package.json` `version`
|
- `package.json` `version`
|
||||||
- `doc/source/conf.py` `version` and `release`
|
- `doc/source/conf.py` `version` and `release`
|
||||||
@@ -9,15 +9,13 @@ Update the following
|
|||||||
- post to discord
|
- post to discord
|
||||||
- post to reddit.com/r/Bitburner
|
- post to reddit.com/r/Bitburner
|
||||||
|
|
||||||
Deploying `dev` to the Beta Branch
|
## Deploying `dev` to the Beta Branch
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
Development Workflow Best Practices
|
## Development Workflow Best Practices
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
- Work in a new branch forked from the `dev` branch to isolate your new code
|
- Work in a new branch forked from the `dev` branch to isolate your new code
|
||||||
- Keep code-changes on a branch as small as possible. This makes it easier for code review. Each branch should be its own independent feature.
|
- Keep code-changes on a branch as small as possible. This makes it easier for code review. Each branch should be its own independent feature.
|
||||||
- Regularly rebase your branch against `dev` to make sure you have the latest updates pulled.
|
- Regularly rebase your branch against `dev` to make sure you have the latest updates pulled.
|
||||||
- When merging, always merge your branch into `dev`. When releasing a new update, then merge `dev` into `master`
|
- When merging, always merge your branch into `dev`. When releasing a new update, then merge `dev` into `master`
|
||||||
|
|||||||
3
babel.config.js
Normal file
3
babel.config.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: ["@babel/preset-react", "@babel/preset-env", "@babel/preset-typescript"],
|
||||||
|
};
|
||||||
@@ -1,61 +1,61 @@
|
|||||||
@mixin animation($property) {
|
@mixin animation($property) {
|
||||||
-webkit-animation: $property;
|
-webkit-animation: $property;
|
||||||
-moz-animation: $property;
|
-moz-animation: $property;
|
||||||
-ms-animation: $property;
|
-ms-animation: $property;
|
||||||
-o-animation: $property;
|
-o-animation: $property;
|
||||||
animation: $property;
|
animation: $property;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin borderRadius($property) {
|
@mixin borderRadius($property) {
|
||||||
-webkit-border-radius: $property;
|
-webkit-border-radius: $property;
|
||||||
-moz-border-radius: $property;
|
-moz-border-radius: $property;
|
||||||
border-radius: $property;
|
border-radius: $property;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin boxShadow($value) {
|
@mixin boxShadow($value) {
|
||||||
-webkit-box-shadow: $value;
|
-webkit-box-shadow: $value;
|
||||||
-moz-box-shadow: $value;
|
-moz-box-shadow: $value;
|
||||||
box-shadow: $value;
|
box-shadow: $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin keyframes($animationName) {
|
@mixin keyframes($animationName) {
|
||||||
@-webkit-keyframes #{$animationName} {
|
@-webkit-keyframes #{$animationName} {
|
||||||
$browser: '-webkit-' !global;
|
$browser: "-webkit-" !global;
|
||||||
@content;
|
@content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-moz-keyframes #{$animationName} {
|
@-moz-keyframes #{$animationName} {
|
||||||
$browser: '-moz-' !global;
|
$browser: "-moz-" !global;
|
||||||
@content;
|
@content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-ms-keyframes #{$animationName} {
|
@-ms-keyframes #{$animationName} {
|
||||||
$browser: '-ms-' !global;
|
$browser: "-ms-" !global;
|
||||||
@content;
|
@content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-o-keyframes #{$animationName} {
|
@-o-keyframes #{$animationName} {
|
||||||
$browser: '-o-' !global;
|
$browser: "-o-" !global;
|
||||||
@content;
|
@content;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes #{$animationName} {
|
@keyframes #{$animationName} {
|
||||||
$browser: '' !global;
|
$browser: "" !global;
|
||||||
@content;
|
@content;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin transform($property) {
|
@mixin transform($property) {
|
||||||
-webkit-transform: $property;
|
-webkit-transform: $property;
|
||||||
-moz-transform: $property;
|
-moz-transform: $property;
|
||||||
-ms-transform: $property;
|
-ms-transform: $property;
|
||||||
-o-transform: $property;
|
-o-transform: $property;
|
||||||
transform: $property;
|
transform: $property;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin userSelect($value) {
|
@mixin userSelect($value) {
|
||||||
-webkit-user-select: $value;
|
-webkit-user-select: $value;
|
||||||
-moz-user-select: $value;
|
-moz-user-select: $value;
|
||||||
-ms-user-select: $value;
|
-ms-user-select: $value;
|
||||||
user-select: $value;
|
user-select: $value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
* {
|
* {
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
font-family: $fontFamily;
|
font-family: $fontFamily;
|
||||||
}
|
}
|
||||||
|
|
||||||
*,
|
*,
|
||||||
*:before,
|
*:before,
|
||||||
*:after {
|
*:after {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
$fontFamily: 'Lucida Console', 'Lucida Sans Unicode', 'Fira Mono', 'Consolas', 'Courier New', Courier, monospace, 'Times New Roman';
|
$fontFamily: "Lucida Console", "Lucida Sans Unicode", "Fira Mono", "Consolas", "Courier New", Courier, monospace,
|
||||||
|
"Times New Roman";
|
||||||
$defaultFontSize: 16px;
|
$defaultFontSize: 16px;
|
||||||
|
|
||||||
/* COLORS */
|
/* COLORS */
|
||||||
|
|||||||
@@ -1,126 +1,132 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
.active-scripts-list {
|
.active-scripts-list {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#active-scripts-container {
|
#active-scripts-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
|
|
||||||
> p {
|
> p {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.accordion-header {
|
.accordion-header {
|
||||||
> pre {
|
> pre {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-scripts-server-header {
|
.active-scripts-server-header {
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
font-size: $defaultFontSize * 1.25;
|
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;
|
color: #fff;
|
||||||
margin: 6px 6px 0 6px;
|
float: right;
|
||||||
padding: 6px;
|
margin-left: 5px;
|
||||||
cursor: pointer;
|
}
|
||||||
width: 60%;
|
|
||||||
text-align: left;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
|
|
||||||
&:after {
|
&.active,
|
||||||
content: '\02795'; /* "plus" sign (+) */
|
&:hover {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
background-color: #555;
|
||||||
color: #fff;
|
}
|
||||||
float: right;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active, &:hover {
|
|
||||||
background-color: #555;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-scripts-server-header.active {
|
.active-scripts-server-header.active {
|
||||||
&:after {
|
&:after {
|
||||||
content: "\2796"; /* "minus" sign (-) */
|
content: "\2796"; /* "minus" sign (-) */
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-scripts-server-panel {
|
.active-scripts-server-panel {
|
||||||
margin: 0 6px 6px 6px;
|
margin: 0 6px 6px 6px;
|
||||||
padding: 0 6px 6px 6px;
|
padding: 0 6px 6px 6px;
|
||||||
width: 55%;
|
width: 55%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
div, ul, ul > li {
|
div,
|
||||||
background-color: #555;
|
ul,
|
||||||
}
|
ul > li {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-scripts-script-header {
|
.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;
|
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 {
|
.active-scripts-script-panel {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
display: none;
|
display: none;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
padding: 0 18px;
|
padding: 0 18px;
|
||||||
width: auto;
|
width: auto;
|
||||||
|
|
||||||
pre, h2, ul, li {
|
pre,
|
||||||
background-color: #555;
|
h2,
|
||||||
width: auto;
|
ul,
|
||||||
color: #fff;
|
li {
|
||||||
margin-left: 5%;
|
background-color: #555;
|
||||||
}
|
width: auto;
|
||||||
|
color: #fff;
|
||||||
|
margin-left: 5%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,25 +6,25 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
#augmentations-container {
|
#augmentations-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#augmentations-content {
|
#augmentations-content {
|
||||||
> p {
|
> p {
|
||||||
font-size: $defaultFontSize * 0.875;
|
font-size: $defaultFontSize * 0.875;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.augmentations-list {
|
.augmentations-list {
|
||||||
button,
|
button,
|
||||||
div {
|
div {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,135 +1,137 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
#bladeburner-container {
|
#bladeburner-container {
|
||||||
a,
|
position: fixed;
|
||||||
div,
|
padding: 6px;
|
||||||
p,
|
a,
|
||||||
pre,
|
div,
|
||||||
td {
|
p,
|
||||||
font-size: $defaultFontSize * 0.8125;
|
pre,
|
||||||
}
|
td {
|
||||||
|
font-size: $defaultFontSize * 0.8125;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-action {
|
.bladeburner-action {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
margin: 7px;
|
margin: 7px;
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Whatever action is currently active */
|
/* Whatever action is currently active */
|
||||||
.bladeburner-active-action {
|
.bladeburner-active-action {
|
||||||
border: 4px solid #fff;
|
border: 4px solid #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Action & Skills panel navigation button */
|
/* Action & Skills panel navigation button */
|
||||||
%bladeburner-nav-button {
|
%bladeburner-nav-button {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-nav-button {
|
.bladeburner-nav-button {
|
||||||
@extend %bladeburner-nav-button;
|
@extend %bladeburner-nav-button;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #3d4044;
|
background-color: #3d4044;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-nav-button-inactive {
|
.bladeburner-nav-button-inactive {
|
||||||
@extend %bladeburner-nav-button;
|
@extend %bladeburner-nav-button;
|
||||||
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Checkbox for (de)selecting autoleveling */
|
/* Checkbox for (de)selecting autoleveling */
|
||||||
.bbcheckbox {
|
.bbcheckbox {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline;
|
display: inline;
|
||||||
label {
|
label {
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
background: black;
|
background: black;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-color: white;
|
border-color: white;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: "";
|
||||||
width: 9px;
|
width: 9px;
|
||||||
height: 5px;
|
height: 5px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
border: 3px solid white;
|
border: 3px solid white;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
border-right: none;
|
border-right: none;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: rotate(-45deg);
|
transform: rotate(-45deg);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
input[type="checkbox"] {
|
}
|
||||||
margin: 3px;
|
input[type="checkbox"] {
|
||||||
visibility: hidden;
|
margin: 3px;
|
||||||
&:checked + label:after {
|
visibility: hidden;
|
||||||
opacity: 1;
|
&:checked + label:after {
|
||||||
}
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bladeburner Console */
|
/* Bladeburner Console */
|
||||||
.bladeburner-console-div {
|
.bladeburner-console-div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 40%;
|
width: 40%;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-console-table {
|
.bladeburner-console-table {
|
||||||
height: auto;
|
height: auto;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
table-layout: fixed;
|
table-layout: fixed;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-console-input-row {
|
.bladeburner-console-input-row {
|
||||||
transition: height 1s;
|
transition: height 1s;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-console-input-cell {
|
.bladeburner-console-input-cell {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-console-input {
|
.bladeburner-console-input {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
border: 0;
|
border: 0;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
outline: none;
|
outline: none;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bladeburner-console-line {
|
.bladeburner-console-line {
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
-webkit-hyphens: auto;
|
-webkit-hyphens: auto;
|
||||||
-moz-hyphens: auto;
|
-moz-hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|||||||
134
css/buttons.scss
134
css/buttons.scss
@@ -11,80 +11,80 @@
|
|||||||
|
|
||||||
/* Remove default <button> styling */
|
/* Remove default <button> styling */
|
||||||
button {
|
button {
|
||||||
border: none;
|
border: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.a-link-button,
|
.a-link-button,
|
||||||
.std-button {
|
.std-button {
|
||||||
@extend .noselect;
|
@extend .noselect;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 3px 5px;
|
padding: 3px 5px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border: 1px solid #333;
|
border: 1px solid #333;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
@include boxShadow(inset 0 1px 4px rgba(0, 0, 0, 0.6));
|
@include boxShadow(inset 0 1px 4px rgba(0, 0, 0, 0.6));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.a-link-button-inactive,
|
.a-link-button-inactive,
|
||||||
.std-button-disabled,
|
.std-button-disabled,
|
||||||
.std-button:disabled {
|
.std-button:disabled {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 3px 5px;
|
padding: 3px 5px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border: 1px solid #333;
|
border: 1px solid #333;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
|
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
-khtml-user-select: none;
|
-khtml-user-select: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.tooltiptext,
|
.tooltiptext,
|
||||||
.tooltiptexthigh,
|
.tooltiptexthigh,
|
||||||
.tooltiptextleft {
|
.tooltiptextleft {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.a-link-button-bought,
|
.a-link-button-bought,
|
||||||
.std-button-bought {
|
.std-button-bought {
|
||||||
@extend .noselect;
|
@extend .noselect;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: #0a0;
|
background-color: #0a0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 3px 5px;
|
padding: 3px 5px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border: 1px solid #0a0;
|
border: 1px solid #0a0;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.tooltiptext,
|
.tooltiptext,
|
||||||
.tooltiptexthigh,
|
.tooltiptexthigh,
|
||||||
.tooltiptextleft {
|
.tooltiptextleft {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,21 +92,21 @@ button {
|
|||||||
* It has a black background so it does not clash with the default accordion coloring
|
* It has a black background so it does not clash with the default accordion coloring
|
||||||
*/
|
*/
|
||||||
.accordion-button {
|
.accordion-button {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
|
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:active {
|
&:active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
/* TODO focus selector? */
|
/* TODO focus selector? */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
.casino-card {
|
.casino-card {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border: solid 1px #808080;
|
border: solid 1px #808080;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
font-size: 14pt;
|
font-size: 18.5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.casino-card .value {
|
.casino-card .value {
|
||||||
font-size: 15pt;
|
font-size: 20px;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.casino-card.red {
|
.casino-card.red {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.casino-card.black {
|
.casino-card.black {
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,91 +6,117 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#character-overview-wrapper {
|
#character-overview-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#character-overview-container {
|
#character-overview-container {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute; /* Stay in place */
|
position: absolute; /* Stay in place */
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
height: auto; /* Full height */
|
height: auto; /* Full height */
|
||||||
padding: 10px 2px;
|
padding: 10px 2px;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
width: auto;
|
width: auto;
|
||||||
max-width: 280px;
|
max-width: 280px;
|
||||||
overflow: auto; /* Enable scroll if needed */
|
overflow: auto; /* Enable scroll if needed */
|
||||||
background-color: rgba(57, 54, 54, 0.9); /* Fallback color */
|
background-color: rgba(57, 54, 54, 0.9); /* Fallback color */
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#character-overview-text {
|
#character-overview-text {
|
||||||
color: $my-stat-physical;
|
color: $my-stat-physical;
|
||||||
|
|
||||||
table {
|
table {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
td {
|
td {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.character-stat-text {
|
.character-stat-text {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.character-stat-cell {
|
.character-stat-cell {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
#character-str-wrapper td,
|
#character-str-wrapper td,
|
||||||
#character-cha-wrapper td {
|
#character-cha-wrapper td {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.character-divider td {
|
.character-divider td {
|
||||||
border-top: 1px #aaa solid;
|
border-top: 1px #aaa solid;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#character-hp-wrapper { color: $my-stat-hp-color; }
|
#character-hp-wrapper {
|
||||||
.character-hp-cell { color: $my-stat-hp-color; }
|
color: $my-stat-hp-color;
|
||||||
#character-money-wrapper { color: $my-stat-money-color; }
|
}
|
||||||
.character-money-cell { color: $my-stat-money-color; }
|
.character-hp-cell {
|
||||||
#character-hack-wrapper { color: $my-stat-hack-color; }
|
color: $my-stat-hp-color;
|
||||||
.character-hack-cell { color: $my-stat-hack-color; }
|
}
|
||||||
#character-cha-wrapper { color: $my-stat-cha-color; }
|
#character-money-wrapper {
|
||||||
.character-cha-cell { color: $my-stat-cha-color; }
|
color: $my-stat-money-color;
|
||||||
#character-int-wrapper { color: $my-stat-int-color; }
|
}
|
||||||
.character-int-cell { color: $my-stat-int-color; }
|
.character-money-cell {
|
||||||
.character-combat-cell { color: $my-stat-physical; }
|
color: $my-stat-money-color;
|
||||||
#character-work-wrapper { color: $my-stat-hack-color; }
|
}
|
||||||
.character-work-cell { color: $my-stat-hack-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-work-wrapper {
|
||||||
|
color: $my-stat-hack-color;
|
||||||
|
}
|
||||||
|
.character-work-cell {
|
||||||
|
color: $my-stat-hack-color;
|
||||||
|
}
|
||||||
|
|
||||||
.character-overview-btn {
|
.character-overview-btn {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
color: #cecece;
|
color: #cecece;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-size: $defaultFontSize * 0.875;
|
font-size: $defaultFontSize * 0.875;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
height: 25px;
|
height: 25px;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
padding: 5px 8px;
|
padding: 5px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.character-quick-options {
|
.character-quick-options {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.character-overview-btn:hover,
|
.character-overview-btn:hover,
|
||||||
.character-overview-btn:focus {
|
.character-overview-btn:focus {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,45 +5,45 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#codemirror-form-wrapper {
|
#codemirror-form-wrapper {
|
||||||
height: 80%;
|
height: 80%;
|
||||||
margin: 10px 0 0 6px;
|
margin: 10px 0 0 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.CodeMirror {
|
.CodeMirror {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
font-family: $fontFamily;
|
font-family: $fontFamily;
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Highlight matches
|
* Highlight matches
|
||||||
*/
|
*/
|
||||||
.cm-matchhighlight {
|
.cm-matchhighlight {
|
||||||
background-color: #8f908a;
|
background-color: #8f908a;
|
||||||
}
|
}
|
||||||
|
|
||||||
.CodeMirror-selection-highlight-scrollbar {
|
.CodeMirror-selection-highlight-scrollbar {
|
||||||
background-color: #8f908a;
|
background-color: #8f908a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show Invisibles
|
* Show Invisibles
|
||||||
*/
|
*/
|
||||||
.cm-whitespace::before {
|
.cm-whitespace::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
color: #404f7d;
|
color: #404f7d;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Vim command display
|
* Vim command display
|
||||||
*/
|
*/
|
||||||
#codemirror-vim-command-display-wrapper {
|
#codemirror-vim-command-display-wrapper {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,154 +12,154 @@
|
|||||||
#cmpy-mgmt-container a,
|
#cmpy-mgmt-container a,
|
||||||
#cmpy-mgmt-container div,
|
#cmpy-mgmt-container div,
|
||||||
#cmpy-mgmt-container br {
|
#cmpy-mgmt-container br {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header tabs */
|
/* Header tabs */
|
||||||
.cmpy-mgmt-header-tab {
|
.cmpy-mgmt-header-tab {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-header-tab:hover {
|
.cmpy-mgmt-header-tab:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-header-tab.current {
|
.cmpy-mgmt-header-tab.current {
|
||||||
background-color: #777;
|
background-color: #777;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Switch between Cities */
|
/* Switch between Cities */
|
||||||
.cmpy-mgmt-city-tab {
|
.cmpy-mgmt-city-tab {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-city-tab:hover {
|
.cmpy-mgmt-city-tab:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-city-tab.current {
|
.cmpy-mgmt-city-tab.current {
|
||||||
background-color: #777;
|
background-color: #777;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Panels */
|
/* Panels */
|
||||||
#cmpy-mgmt-panel {
|
#cmpy-mgmt-panel {
|
||||||
height: 90%;
|
height: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-industry-left-panel,
|
.cmpy-mgmt-industry-left-panel,
|
||||||
.cmpy-mgmt-industry-right-panel {
|
.cmpy-mgmt-industry-right-panel {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
width: 45%;
|
width: 45%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-industry-overview-panel {
|
.cmpy-mgmt-industry-overview-panel {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-employee-panel {
|
.cmpy-mgmt-employee-panel {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-warehouse-panel {
|
.cmpy-mgmt-warehouse-panel {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hiring new employees */
|
/* Hiring new employees */
|
||||||
.cmpy-mgmt-find-employee-option {
|
.cmpy-mgmt-find-employee-option {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-find-employee-option:hover {
|
.cmpy-mgmt-find-employee-option:hover {
|
||||||
background-color: #3d4044;
|
background-color: #3d4044;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Warehouse */
|
/* Warehouse */
|
||||||
.cmpy-mgmt-warehouse-material-div {
|
.cmpy-mgmt-warehouse-material-div {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-warehouse-product-div {
|
.cmpy-mgmt-warehouse-product-div {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exporting materials/products */
|
/* Exporting materials/products */
|
||||||
.cmpy-mgmt-existing-export {
|
.cmpy-mgmt-existing-export {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
border-radius: 25px;
|
border-radius: 25px;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-existing-export:hover {
|
.cmpy-mgmt-existing-export:hover {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Corporation Upgrades */
|
/* Corporation Upgrades */
|
||||||
.cmpy-mgmt-upgrade-container {
|
.cmpy-mgmt-upgrade-container {
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
width: 60%;
|
width: 60%;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-upgrade-header {
|
.cmpy-mgmt-upgrade-header {
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-upgrade-div {
|
.cmpy-mgmt-upgrade-div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
border-radius: 25px;
|
border-radius: 25px;
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.cmpy-mgmt-upgrade-div:hover {
|
.cmpy-mgmt-upgrade-div:hover {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Industry Upgrades */
|
/* Industry Upgrades */
|
||||||
.industry-purchases-and-upgrades-header {
|
.industry-purchases-and-upgrades-header {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Advertising */
|
/* Advertising */
|
||||||
.cmpy-mgmt-advertising-info {
|
.cmpy-mgmt-advertising-info {
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Research */
|
/* Research */
|
||||||
#corporation-research-popup-box-content {
|
#corporation-research-popup-box-content {
|
||||||
overflow-x: auto !important;
|
overflow-x: auto !important;
|
||||||
overflow-y: auto !important;
|
overflow-y: auto !important;
|
||||||
}
|
}
|
||||||
|
|||||||
4
css/corporation.scss
Normal file
4
css/corporation.scss
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#corporation-container {
|
||||||
|
position: fixed;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
@@ -1,32 +1,32 @@
|
|||||||
.add-exp-button {
|
.add-exp-button {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.remove-exp-button {
|
.remove-exp-button {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.exp-input {
|
.exp-input {
|
||||||
margin: 5px 0 5px 0;
|
margin: 5px 0 5px 0;
|
||||||
|
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-center {
|
.text-center {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.touch-right {
|
.touch-right {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.touch-left {
|
.touch-left {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.touch-sides {
|
.touch-sides {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
#game-options-right-panel {
|
#game-options-right-panel {
|
||||||
a {
|
a {
|
||||||
display: block;
|
display: block;
|
||||||
width: 46%;
|
width: 46%;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 46%;
|
width: 46%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,28 +6,29 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#gang-container {
|
#gang-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
|
|
||||||
p, pre {
|
p,
|
||||||
font-size: $defaultFontSize * 0.9375;
|
pre {
|
||||||
}
|
font-size: $defaultFontSize * 0.9375;
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#gang-management-subpage > p {
|
#gang-management-subpage > p {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gang-member-info-div {
|
.gang-member-info-div {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
display: inline;
|
display: inline;
|
||||||
float: left;
|
float: left;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,14 +36,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
.gang-owned-upgrades-div {
|
.gang-owned-upgrades-div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
width: 75%;
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gang-owned-upgrade {
|
.gang-owned-upgrade {
|
||||||
border: 1px solid white;
|
border: 1px solid white;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin: 1px;
|
margin: 1px;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
}
|
}
|
||||||
|
|||||||
3408
css/grid.min.css
vendored
3408
css/grid.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -6,70 +6,70 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#hacknet-nodes-container {
|
#hacknet-nodes-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hacknet-general-info {
|
.hacknet-general-info {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
width: 70vw;
|
width: 70vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-container li {
|
#hacknet-nodes-container li {
|
||||||
float: left;
|
float: left;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
&.hacknet-node {
|
&.hacknet-node {
|
||||||
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
||||||
@include boxShadow($boxShadowArgs);
|
@include boxShadow($boxShadowArgs);
|
||||||
|
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
width: 35vw;
|
width: 35vw;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-list {
|
#hacknet-nodes-list {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
width: 82vw;
|
width: 82vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-money {
|
#hacknet-nodes-money {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-money-multipliers-div {
|
#hacknet-nodes-money-multipliers-div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 70vw;
|
width: 70vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-multipliers {
|
#hacknet-nodes-multipliers {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacknet-nodes-purchase-button {
|
#hacknet-nodes-purchase-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hacknet-node-container {
|
.hacknet-node-container {
|
||||||
display: inline-table;
|
display: inline-table;
|
||||||
|
|
||||||
.row {
|
.row {
|
||||||
display: table-row;
|
display: table-row;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.upgradable-info {
|
.upgradable-info {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 4px; /* Don't want the vertical margin/padding, just left & right */
|
margin: 0 4px; /* Don't want the vertical margin/padding, just left & right */
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
width: $defaultFontSize * 4;
|
width: $defaultFontSize * 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
.blinking-cursor {
|
.blinking-cursor {
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
color: #2E3D48;
|
color: #2e3d48;
|
||||||
-webkit-animation: 1s cursorblink step-end infinite;
|
-webkit-animation: 1s cursorblink step-end infinite;
|
||||||
-moz-animation: 1s cursorblink step-end infinite;
|
-moz-animation: 1s cursorblink step-end infinite;
|
||||||
-ms-animation: 1s cursorblink step-end infinite;
|
-ms-animation: 1s cursorblink step-end infinite;
|
||||||
@@ -10,8 +10,9 @@
|
|||||||
animation: 1s cursorblink step-end infinite;
|
animation: 1s cursorblink step-end infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes "cursorblink" {
|
@keyframes cursorblink {
|
||||||
from, to {
|
from,
|
||||||
|
to {
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
@@ -20,7 +21,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@-moz-keyframes cursorblink {
|
@-moz-keyframes cursorblink {
|
||||||
from, to {
|
from,
|
||||||
|
to {
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
@@ -28,8 +30,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes "cursorblink" {
|
@-webkit-keyframes cursorblink {
|
||||||
from, to {
|
from,
|
||||||
|
to {
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
@@ -37,8 +40,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-ms-keyframes "cursorblink" {
|
@-ms-keyframes cursorblink {
|
||||||
from, to {
|
from,
|
||||||
|
to {
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
@@ -46,11 +50,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-o-keyframes "cursorblink" {
|
@-o-keyframes cursorblink {
|
||||||
from, to {
|
from,
|
||||||
|
to {
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
color: $hacker-green;
|
color: $hacker-green;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,88 +3,88 @@
|
|||||||
|
|
||||||
/* interactivetutorial.css */
|
/* interactivetutorial.css */
|
||||||
#interactive-tutorial-wrapper {
|
#interactive-tutorial-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-container {
|
#interactive-tutorial-container {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute; /* Stay in place */
|
position: absolute; /* Stay in place */
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
height: 450px;
|
height: 450px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border: 5px solid #fff;
|
border: 5px solid #fff;
|
||||||
width: 23%;
|
width: 23%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background-color: #444; /* Fallback color */
|
background-color: #444; /* Fallback color */
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
||||||
> strong {
|
> strong {
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-text {
|
#interactive-tutorial-text {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
font-size: $defaultFontSize * 0.875;
|
font-size: $defaultFontSize * 0.875;
|
||||||
max-height: 350px;
|
max-height: 350px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-exit,
|
#interactive-tutorial-exit,
|
||||||
#interactive-tutorial-next,
|
#interactive-tutorial-next,
|
||||||
#interactive-tutorial-back {
|
#interactive-tutorial-back {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
|
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: $defaultFontSize * 1.125;
|
font-size: $defaultFontSize * 1.125;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-exit {
|
#interactive-tutorial-exit {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-back {
|
#interactive-tutorial-back {
|
||||||
float: left;
|
float: left;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#interactive-tutorial-next {
|
#interactive-tutorial-next {
|
||||||
float: right;
|
float: right;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.interactive-tutorial-command {
|
.interactive-tutorial-command {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
color: $hacker-green;
|
color: $hacker-green;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.interactive-tutorial-code {
|
.interactive-tutorial-code {
|
||||||
background-color: #272822;
|
background-color: #272822;
|
||||||
color: white;
|
color: white;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.interactive-tutorial-tab {
|
.interactive-tutorial-tab {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
color: #e6e6e6;
|
color: #e6e6e6;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
box-shadow: 0 0 3px #000;
|
box-shadow: 0 0 3px #000;
|
||||||
}
|
}
|
||||||
|
|||||||
162
css/loader.scss
162
css/loader.scss
@@ -3,109 +3,109 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
@include keyframes(LOADERSPINNER) {
|
@include keyframes(LOADERSPINNER) {
|
||||||
0% {
|
0% {
|
||||||
#{$browser}transform: translate(-50%, -50%) rotate(0deg);
|
#{$browser}transform: translate(-50%, -50%) rotate(0deg);
|
||||||
}
|
}
|
||||||
100% {
|
100% {
|
||||||
#{$browser}transform: translate(-50%, -50%) rotate(360deg);
|
#{$browser}transform: translate(-50%, -50%) rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@include keyframes(LOADERLABEL) {
|
@include keyframes(LOADERLABEL) {
|
||||||
0% {
|
0% {
|
||||||
opacity: 1.0;
|
opacity: 1;
|
||||||
#{$browser}transform: translate(-50%, -50%) scale(1.0);
|
#{$browser}transform: translate(-50%, -50%) scale(1);
|
||||||
}
|
}
|
||||||
5% {
|
5% {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
#{$browser}transform: translate(-50%, -50%) scale(0.5);
|
#{$browser}transform: translate(-50%, -50%) scale(0.5);
|
||||||
}
|
}
|
||||||
95% {
|
95% {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
#{$browser}transform: translate(-50%, -50%) scale(0.5);
|
#{$browser}transform: translate(-50%, -50%) scale(0.5);
|
||||||
}
|
}
|
||||||
100% {
|
100% {
|
||||||
opacity: 1.0;
|
opacity: 1;
|
||||||
#{$browser}transform: translate(-50%, -50%) scale(1.0);
|
#{$browser}transform: translate(-50%, -50%) scale(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.loaderoverlay {
|
.loaderoverlay {
|
||||||
$spinnerBoxSize: 200px;
|
$spinnerBoxSize: 200px;
|
||||||
$themeColor: #6f3;
|
$themeColor: #6f3;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #000;
|
||||||
|
color: $themeColor;
|
||||||
|
|
||||||
|
%spinnerBox {
|
||||||
|
border: 20px solid rgba(0, 0, 0, 0);
|
||||||
|
border-top-color: $themeColor;
|
||||||
|
border-bottom-color: $themeColor;
|
||||||
|
border-radius: 1000px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
top: 50%;
|
||||||
height: 100%;
|
left: 50%;
|
||||||
background: #000;
|
}
|
||||||
color: $themeColor;
|
|
||||||
|
|
||||||
%spinnerBox {
|
.loaderspinner:before,
|
||||||
border: 20px solid rgba(0, 0, 0, 0);
|
.loaderspinner:after {
|
||||||
border-top-color: $themeColor;
|
content: "";
|
||||||
border-bottom-color: $themeColor;
|
}
|
||||||
border-radius: 1000px;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loaderspinner:before,
|
.loaderspinner {
|
||||||
.loaderspinner:after {
|
@extend %spinnerBox;
|
||||||
content: "";
|
@include animation(LOADERSPINNER 5s linear infinite);
|
||||||
}
|
|
||||||
|
|
||||||
.loaderspinner {
|
width: $spinnerBoxSize;
|
||||||
@extend %spinnerBox;
|
height: $spinnerBoxSize;
|
||||||
@include animation(LOADERSPINNER 5s linear infinite);
|
}
|
||||||
|
|
||||||
width: $spinnerBoxSize;
|
.loaderspinner:before {
|
||||||
height: $spinnerBoxSize;
|
@extend %spinnerBox;
|
||||||
}
|
@include animation(LOADERSPINNER 10s linear infinite);
|
||||||
|
|
||||||
.loaderspinner:before {
|
width: $spinnerBoxSize * 0.8;
|
||||||
@extend %spinnerBox;
|
height: $spinnerBoxSize * 0.8;
|
||||||
@include animation(LOADERSPINNER 10s linear infinite);
|
}
|
||||||
|
|
||||||
width: $spinnerBoxSize * 0.8;
|
.loaderspinner:after {
|
||||||
height: $spinnerBoxSize * 0.8;
|
@extend %spinnerBox;
|
||||||
}
|
@include animation(LOADERSPINNER 5s linear infinite);
|
||||||
|
|
||||||
.loaderspinner:after {
|
width: $spinnerBoxSize * 0.6;
|
||||||
@extend %spinnerBox;
|
height: $spinnerBoxSize * 0.6;
|
||||||
@include animation(LOADERSPINNER 5s linear infinite);
|
}
|
||||||
|
|
||||||
width: $spinnerBoxSize * 0.6;
|
.loaderlabel {
|
||||||
height: $spinnerBoxSize * 0.6;
|
@include animation(LOADERLABEL 5s linear infinite);
|
||||||
}
|
|
||||||
|
|
||||||
.loaderlabel {
|
text-transform: uppercase;
|
||||||
@include animation(LOADERLABEL 5s linear infinite);
|
font-family: sans-serif;
|
||||||
|
font-size: $defaultFontSize * 1.375;
|
||||||
text-transform: uppercase;
|
font-weight: 700;
|
||||||
font-family: sans-serif;
|
letter-spacing: 2px;
|
||||||
font-size: $defaultFontSize * 1.375;
|
position: absolute;
|
||||||
font-weight: 700;
|
top: 50%;
|
||||||
letter-spacing: 2px;
|
left: 50%;
|
||||||
position: absolute;
|
}
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.killAllMessage {
|
.killAllMessage {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 95%;
|
top: 95%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
-webkit-transform: translateX(-50%);
|
-webkit-transform: translateX(-50%);
|
||||||
-moz-transform: translateX(-50%);
|
-moz-transform: translateX(-50%);
|
||||||
-ms-transform: translateX(-50%);
|
-ms-transform: translateX(-50%);
|
||||||
-o-transform: translateX(-50%);
|
-o-transform: translateX(-50%);
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
.killAllMessageWrapperHidden {
|
.killAllMessageWrapperHidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.killAllMessageWrapperShow {
|
.killAllMessageWrapperShow {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,130 +6,130 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
.mainmenu {
|
.mainmenu {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 10%;
|
width: 10%;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|
||||||
border: 0;
|
border: 0;
|
||||||
border-bottom: 1px solid #000;
|
border-bottom: 1px solid #000;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Default buttons */
|
/* Default buttons */
|
||||||
.mainmenu > li a,
|
.mainmenu > li a,
|
||||||
.mainmenu > li button {
|
.mainmenu > li button {
|
||||||
display: block;
|
display: block;
|
||||||
color: #e6e6e6;
|
color: #e6e6e6;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
padding: 12px 8px;
|
padding: 12px 8px;
|
||||||
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu.classic > li a,
|
.mainmenu.classic > li a,
|
||||||
.mainmenu.classic > li button {
|
.mainmenu.classic > li button {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu.compact > li a,
|
.mainmenu.compact > li a,
|
||||||
.mainmenu.compact > li button {
|
.mainmenu.compact > li button {
|
||||||
display: block;
|
display: block;
|
||||||
color: #e6e6e6;
|
color: #e6e6e6;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hovering makes them lighter */
|
/* Hovering makes them lighter */
|
||||||
.mainmenu > li a:hover,
|
.mainmenu > li a:hover,
|
||||||
.mainmenu > li a:hover:not(.active),
|
.mainmenu > li a:hover:not(.active),
|
||||||
.mainmenu > li a:focus {
|
.mainmenu > li a:focus {
|
||||||
background-color: #777;
|
background-color: #777;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu > li button:hover,
|
.mainmenu > li button:hover,
|
||||||
.mainmenu > li button:hover:not(.active) {
|
.mainmenu > li button:hover:not(.active) {
|
||||||
background-color: #777;
|
background-color: #777;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Panel headers can become active, and they are "lighter" than the rest */
|
/* Panel headers can become active, and they are "lighter" than the rest */
|
||||||
.mainmenu > li a.active,
|
.mainmenu > li a.active,
|
||||||
.mainmenu > li button.active {
|
.mainmenu > li button.active {
|
||||||
background-color: #777;
|
background-color: #777;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu > li a.active:hover,
|
.mainmenu > li a.active:hover,
|
||||||
.mainmenu > li button.active:hover {
|
.mainmenu > li button.active:hover {
|
||||||
background-color: #aaa;
|
background-color: #aaa;
|
||||||
}
|
}
|
||||||
|
|
||||||
#hacking-menu-header-li,
|
#hacking-menu-header-li,
|
||||||
#character-menu-header-li,
|
#character-menu-header-li,
|
||||||
#world-menu-header-li,
|
#world-menu-header-li,
|
||||||
#help-menu-header-li {
|
#help-menu-header-li {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Accordion Outline */
|
/* Accordion Outline */
|
||||||
.mainmenu-accordion-header,
|
.mainmenu-accordion-header,
|
||||||
.mainmenu-accordion-header-compact {
|
.mainmenu-accordion-header-compact {
|
||||||
outline: 2px solid #fff !important;
|
outline: 2px solid #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu-accordion-header-classic {
|
.mainmenu-accordion-header-classic {
|
||||||
border: 2px solid #fff;
|
border: 2px solid #fff;
|
||||||
padding: 16px !important;
|
padding: 16px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Plus and minus signs */
|
/* Plus and minus signs */
|
||||||
.mainmenu-accordion-header:after,
|
.mainmenu-accordion-header:after,
|
||||||
.mainmenu-accordion-header-compact:after {
|
.mainmenu-accordion-header-compact:after {
|
||||||
content: '\02795';
|
content: "\02795";
|
||||||
float: right;
|
float: right;
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 25%;
|
bottom: 25%;
|
||||||
right: 3px;
|
right: 3px;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
text-shadow: 0 0 0 #fff;
|
text-shadow: 0 0 0 #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu-accordion-header-classic:after {
|
.mainmenu-accordion-header-classic:after {
|
||||||
content: '\02795';
|
content: "\02795";
|
||||||
float: right;
|
float: right;
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainmenu-accordion-header.opened,
|
.mainmenu-accordion-header.opened,
|
||||||
.mainmenu-accordion-header-classic.opened,
|
.mainmenu-accordion-header-classic.opened,
|
||||||
.mainmenu-accordion-header-compact.opened {
|
.mainmenu-accordion-header-compact.opened {
|
||||||
background-color: #222 !important;
|
background-color: #222 !important;
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: "\2796";
|
content: "\2796";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Slide down transition */
|
/* Slide down transition */
|
||||||
.mainmenu-accordion-panel {
|
.mainmenu-accordion-panel {
|
||||||
max-height: 0;
|
max-height: 0;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transition: max-height 0.2s ease-out;
|
transition: max-height 0.2s ease-out;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,151 +5,151 @@
|
|||||||
terminal which has its own page) */
|
terminal which has its own page) */
|
||||||
|
|
||||||
.generic-menupage-container {
|
.generic-menupage-container {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
width: 99%;
|
width: 99%;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Character Info */
|
/* Character Info */
|
||||||
#character-container {
|
#character-container {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* World */
|
/* World */
|
||||||
#world-container {
|
#world-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#world-city-name,
|
#world-city-name,
|
||||||
#world-city-desc {
|
#world-city-desc {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create program */
|
/* Create program */
|
||||||
#create-program-container {
|
#create-program-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#create-program-page-text,
|
#create-program-page-text,
|
||||||
#create-program-list {
|
#create-program-list {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Factions and Faction (Single Faction page) */
|
/* Factions and Faction (Single Faction page) */
|
||||||
#factions-container {
|
#factions-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#faction-container {
|
#faction-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.faction-work-div {
|
.faction-work-div {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.faction-work-div-wrapper {
|
.faction-work-div-wrapper {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 2px solid #333;
|
border: 2px solid #333;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#faction-container p,
|
#faction-container p,
|
||||||
#faction-container pre {
|
#faction-container pre {
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
margin: 4px 6px;
|
margin: 4px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#faction-container pre {
|
#faction-container pre {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
white-space: pre-wrap; /* Since CSS 2.1 */
|
white-space: pre-wrap; /* Since CSS 2.1 */
|
||||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||||
white-space: -pre-wrap; /* Opera 4-6 */
|
white-space: -pre-wrap; /* Opera 4-6 */
|
||||||
white-space: -o-pre-wrap; /* Opera 7 */
|
white-space: -o-pre-wrap; /* Opera 7 */
|
||||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* World */
|
/* World */
|
||||||
#world-container li {
|
#world-container li {
|
||||||
margin: 0 0 15px 0;
|
margin: 0 0 15px 0;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tutorial */
|
/* Tutorial */
|
||||||
#tutorial-container {
|
#tutorial-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tutorial-text {
|
#tutorial-text {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tutorial-container a {
|
#tutorial-container a {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dev menu */
|
/* Dev menu */
|
||||||
#dev-menu-container {
|
#dev-menu-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dev-menu-text {
|
#dev-menu-text {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dev-menu-container a {
|
#dev-menu-container a {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Location */
|
/* Location */
|
||||||
#location-container {
|
#location-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-container a {
|
#location-container a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-slums-description {
|
#location-slums-description {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-return-to-world-button {
|
#location-return-to-world-button {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-container > * {
|
#location-container > * {
|
||||||
margin: 10px 5px 10px 5px;
|
margin: 10px 5px 10px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-job-reputation,
|
#location-job-reputation,
|
||||||
#location-company-favor {
|
#location-company-favor {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Infiltration */
|
/* Infiltration */
|
||||||
#infiltration-container {
|
#infiltration-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#milestones-container {
|
#milestones-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
width: 60%;
|
width: 60%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,115 +5,115 @@
|
|||||||
|
|
||||||
/* Hacking missions */
|
/* Hacking missions */
|
||||||
#mission-container {
|
#mission-container {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-grid {
|
.hack-mission-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
||||||
grid-template-rows: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
grid-template-rows: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
||||||
grid-gap: 2.5%;
|
grid-gap: 2.5%;
|
||||||
height: 90%;
|
height: 90%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
|
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-node {
|
.hack-mission-node {
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
background-color: #808080;
|
background-color: #808080;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
justify-self: center;
|
justify-self: center;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@include userSelect(none);
|
@include userSelect(none);
|
||||||
|
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-player-node {
|
.hack-mission-player-node {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #00f;
|
background-color: #00f;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-player-node-active {
|
.hack-mission-player-node-active {
|
||||||
border: 2px solid #fff;
|
border: 2px solid #fff;
|
||||||
background-color: #66f;
|
background-color: #66f;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-enemy-node {
|
.hack-mission-enemy-node {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #f00;
|
background-color: #f00;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-cpu-node {
|
.hack-mission-cpu-node {
|
||||||
@include borderRadius(50%);
|
@include borderRadius(50%);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-firewall-node {
|
.hack-mission-firewall-node {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-database-node {
|
.hack-mission-database-node {
|
||||||
@include transform(skew(20deg));
|
@include transform(skew(20deg));
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 90%;
|
height: 90%;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@include transform(skew(-20deg));
|
@include transform(skew(-20deg));
|
||||||
@include userSelect(none);
|
@include userSelect(none);
|
||||||
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-transfer-node {
|
.hack-mission-transfer-node {
|
||||||
@include transform(skew(-20deg));
|
@include transform(skew(-20deg));
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 90%;
|
height: 90%;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@include transform(skew(20deg));
|
@include transform(skew(20deg));
|
||||||
@include userSelect(none);
|
@include userSelect(none);
|
||||||
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-spam-node,
|
.hack-mission-spam-node,
|
||||||
.hack-mission-shield-node {
|
.hack-mission-shield-node {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Non-map related DOM elements */
|
/* Non-map related DOM elements */
|
||||||
|
|
||||||
/* Element at the top of the Hacking Mission page (intro page, start button, guide buttons, etc.) */
|
/* Element at the top of the Hacking Mission page (intro page, start button, guide buttons, etc.) */
|
||||||
.hack-mission-header-element {
|
.hack-mission-header-element {
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hack-mission-action-buttons-container {
|
.hack-mission-action-buttons-container {
|
||||||
border: 2px solid #fff;
|
border: 2px solid #fff;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,241 +4,241 @@
|
|||||||
|
|
||||||
/* Pop-up boxes */
|
/* Pop-up boxes */
|
||||||
.popup-box-container {
|
.popup-box-container {
|
||||||
display: none; /* Initially hidden */
|
display: none; /* Initially hidden */
|
||||||
position: fixed; /* Stay in place */
|
position: fixed; /* Stay in place */
|
||||||
z-index: 10; /* Sit on top */
|
z-index: 10; /* Sit on top */
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: rbga(var(--my-background-color), 0.4);
|
background-color: rbga(var(--my-background-color), 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.popup-box-content {
|
.popup-box-content {
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
border: 5px solid var(--my-highlight-color);
|
border: 5px solid var(--my-highlight-color);
|
||||||
width: 70%;
|
width: 70%;
|
||||||
max-height: 80%;
|
max-height: 80%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
z-index: 11; /* Sit on top of the container */
|
z-index: 11; /* Sit on top of the container */
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.popup-box-button,
|
.popup-box-button,
|
||||||
.popup-box-button-inactive {
|
.popup-box-button-inactive {
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
float: right;
|
float: right;
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.popup-box-button:hover,
|
.popup-box-button:hover,
|
||||||
.popup-box-button:focus {
|
.popup-box-button:focus {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.popupbox-button-inactive {
|
.popupbox-button-inactive {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
#yes-no-text-input-box-input {
|
#yes-no-text-input-box-input {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-box-container {
|
.dialog-box-container {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
height: auto;
|
height: auto;
|
||||||
max-height: 50%;
|
max-height: 50%;
|
||||||
top: 40%;
|
top: 40%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin: -10% 0 0 -25%;
|
margin: -10% 0 0 -25%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
border: 5px solid var(--my-highlight-color);
|
border: 5px solid var(--my-highlight-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.log-box-container {
|
.log-box-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
background-color: gray;
|
background-color: gray;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
top: 40%;
|
top: 40%;
|
||||||
margin: -10% 0 0 -25%;
|
margin: -10% 0 0 -25%;
|
||||||
height: auto;
|
height: auto;
|
||||||
max-height: 50%;
|
max-height: 50%;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.log-box-header {
|
.log-box-header {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
border: 1px solid var(--my-highlight-color);
|
border: 1px solid var(--my-highlight-color);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: row nowrap;
|
flex: row nowrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.log-box-log-container {
|
.log-box-log-container {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.log-box-button {
|
.log-box-button {
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.log-box-button:hover,
|
.log-box-button:hover,
|
||||||
.log-box-button:focus {
|
.log-box-button:focus {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-box-content {
|
.dialog-box-content {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
p span {
|
p span {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-box-close-button {
|
.dialog-box-close-button {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
@extend .noselect;
|
@extend .noselect;
|
||||||
|
|
||||||
float: right;
|
float: right;
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: $defaultFontSize * 1.25;
|
font-size: $defaultFontSize * 1.25;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#log-box-close {
|
#log-box-close {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 27%;
|
right: 27%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#log-box-kill-script {
|
#log-box-kill-script {
|
||||||
right: 11%;
|
right: 11%;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#log-box-close, #log-box-kill-script {
|
#log-box-close,
|
||||||
float: right;
|
#log-box-kill-script {
|
||||||
display: inline-block;
|
float: right;
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-box-close-button:hover,
|
.dialog-box-close-button:hover,
|
||||||
.dialog-box-close-button:focus,{
|
.dialog-box-close-button:focus {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Faction invitation box */
|
/* Faction invitation box */
|
||||||
#faction-invitation-box-container {
|
#faction-invitation-box-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
#faction-invitation-box-warning {
|
#faction-invitation-box-warning {
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Infiltration-box */
|
/* Infiltration-box */
|
||||||
#infiltration-box-sell,
|
#infiltration-box-sell,
|
||||||
#infiltration-box-faction {
|
#infiltration-box-faction {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#infiltration-box-content span {
|
#infiltration-box-content span {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#infiltration-faction-select {
|
#infiltration-faction-select {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generic Yes No Box */
|
/* Generic Yes No Box */
|
||||||
#yes-no-text-input-box-input {
|
#yes-no-text-input-box-input {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Game Options */
|
/* Game Options */
|
||||||
#game-options-container {
|
#game-options-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#game-options-content {
|
#game-options-content {
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border: 5px solid var(--my-highlight-color);
|
border: 5px solid var(--my-highlight-color);
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
width: 80%;
|
width: 80%;
|
||||||
max-height: 80%;
|
max-height: 80%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#game-options-left-panel,
|
#game-options-left-panel,
|
||||||
#game-options-right-panel {
|
#game-options-right-panel {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 49%;
|
width: 49%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#game-options-close-button {
|
#game-options-close-button {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
|
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
float: right;
|
float: right;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
font-size: $defaultFontSize * 1.25;
|
font-size: $defaultFontSize * 1.25;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#game-options-close-button:hover,
|
#game-options-close-button:hover,
|
||||||
#game-options-close-button:focus {
|
#game-options-close-button:focus {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
#game-options-left-panel fieldset {
|
#game-options-left-panel fieldset {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#import-game-file-selector {
|
#import-game-file-selector {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,31 +4,31 @@
|
|||||||
* Styling for the Red Pill screen (the BitNode selection UI)
|
* Styling for the Red Pill screen (the BitNode selection UI)
|
||||||
*/
|
*/
|
||||||
#red-pill-container {
|
#red-pill-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bitnode {
|
.bitnode {
|
||||||
&.level-0 {
|
&.level-0 {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.level-1 {
|
&.level-1 {
|
||||||
color: yellow;
|
color: yellow;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.level-2 {
|
&.level-2 {
|
||||||
color: #48d1cc;
|
color: #48d1cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.level-3 {
|
&.level-3 {
|
||||||
color: blue;
|
color: blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.unimplemented {
|
&.unimplemented {
|
||||||
color: gray;
|
color: gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,26 +3,31 @@
|
|||||||
*/
|
*/
|
||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
.resleeve-container {
|
#resleeve-container {
|
||||||
border: 1px solid white;
|
position: fixed;
|
||||||
margin: 4px;
|
padding: 6px;
|
||||||
width: 75%;
|
}
|
||||||
|
|
||||||
p {
|
.resleeve-elem {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
border: 1px solid white;
|
||||||
}
|
margin: 4px;
|
||||||
|
width: 75%;
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: $defaultFontSize * 0.8125;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.resleeve-panel {
|
.resleeve-panel {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.resleeve-aug-selector {
|
.resleeve-aug-selector {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
|
|
||||||
option {
|
option {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,102 +6,102 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#script-editor-container {
|
#script-editor-container {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This temp element is used for auto adjusting filename field */
|
/* This temp element is used for auto adjusting filename field */
|
||||||
.tmp-element {
|
.tmp-element {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-container {
|
#script-editor-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-buttons-wrapper {
|
#script-editor-buttons-wrapper {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-wrapper {
|
#script-editor-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-filename-wrapper {
|
#script-editor-filename-wrapper {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-filename-tag {
|
#script-editor-filename-tag {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
float: center;
|
float: center;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-filename {
|
#script-editor-filename {
|
||||||
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
$boxShadowArgs: inset 0 0 8px rgba(0, 0, 0, 0.1), 0 0 16px rgba(0, 0, 0, 0.1);
|
||||||
@include boxShadow($boxShadowArgs);
|
@include boxShadow($boxShadowArgs);
|
||||||
|
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
float: center;
|
float: center;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
resize: none;
|
resize: none;
|
||||||
width: 60%;
|
width: 60%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-status {
|
#script-editor-status {
|
||||||
float: left;
|
float: left;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-options-panel {
|
#script-editor-options-panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 9%;
|
right: 9%;
|
||||||
bottom: 15%;
|
bottom: 15%;
|
||||||
border: 2px solid #fff;
|
border: 2px solid #fff;
|
||||||
width: 19%;
|
width: 19%;
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
max-height: 50%;
|
max-height: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-options-panel fieldset {
|
#script-editor-options-panel fieldset {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
font-size: $defaultFontSize * 0.75;
|
font-size: $defaultFontSize * 0.75;
|
||||||
|
|
||||||
input {
|
input {
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.editor-options-container {
|
.editor-options-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editor-options-line {
|
.editor-options-line {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: row nowrap;
|
flex: row nowrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: start;
|
justify-content: start;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,27 +3,28 @@
|
|||||||
*/
|
*/
|
||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
.sleeve-container {
|
#sleeves-container {
|
||||||
border: 1px solid white;
|
position: fixed;
|
||||||
margin: 4px;
|
padding: 6px;
|
||||||
width: 75%;
|
}
|
||||||
|
|
||||||
p {
|
.sleeve-elem {
|
||||||
font-size: $defaultFontSize * 0.875;
|
border: 1px solid white;
|
||||||
}
|
margin: 4px;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sleeves-page-info {
|
.sleeves-page-info {
|
||||||
display: "block";
|
display: "block";
|
||||||
width: 75%;
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sleeve-panel {
|
.sleeve-panel {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
|
|
||||||
select {
|
select {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,98 +1,99 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
#stock-market-container {
|
#stock-market-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
font-size: $defaultFontSize * 0.875;
|
font-size: $defaultFontSize * 0.875;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-info-and-purchases {
|
.stock-market-info-and-purchases {
|
||||||
> h2 {
|
> h2 {
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
> p {
|
> p {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
> a, > button {
|
> a,
|
||||||
margin: 10px;
|
> button {
|
||||||
}
|
margin: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#stock-market-list {
|
#stock-market-list {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
button {
|
button {
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#stock-market-watchlist-filter {
|
#stock-market-watchlist-filter {
|
||||||
display: block;
|
display: block;
|
||||||
margin: 5px 5px 5px 10px;
|
margin: 5px 5px 5px 10px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-input {
|
.stock-market-input {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-price-movement-warning {
|
.stock-market-price-movement-warning {
|
||||||
border: 1px solid white;
|
border: 1px solid white;
|
||||||
color: red;
|
color: red;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-position-text {
|
.stock-market-position-text {
|
||||||
|
color: #fff;
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
p {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
display: block;
|
display: inline-block;
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
h3 {
|
||||||
color: #fff;
|
margin: 4px;
|
||||||
display: inline-block;
|
}
|
||||||
margin: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin: 4px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-order-list {
|
.stock-market-order-list {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
max-height: 100px;
|
max-height: 100px;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.stock-market-order-cancel-btn {
|
.stock-market-order-cancel-btn {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
511
css/styles.scss
511
css/styles.scss
@@ -4,14 +4,14 @@
|
|||||||
@import "reset";
|
@import "reset";
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--my-font-color: #6f3;
|
--my-font-color: #6f3;
|
||||||
--my-background-color: #000;
|
--my-background-color: #000;
|
||||||
--my-highlight-color: #fff;
|
--my-highlight-color: #fff;
|
||||||
--my-prompt-color: #f92672;
|
--my-prompt-color: #f92672;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
p,
|
p,
|
||||||
@@ -21,29 +21,29 @@ h3,
|
|||||||
h4,
|
h4,
|
||||||
.text,
|
.text,
|
||||||
td {
|
td {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: $defaultFontSize * 1.375;
|
font-size: $defaultFontSize * 1.375;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
br {
|
br {
|
||||||
@extend .noselect;
|
@extend .noselect;
|
||||||
}
|
}
|
||||||
|
|
||||||
#entire-game-container {
|
#entire-game-container {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable border highlight on elements */
|
/* Disable border highlight on elements */
|
||||||
@@ -52,379 +52,452 @@ textarea:focus,
|
|||||||
button:focus,
|
button:focus,
|
||||||
td:focus,
|
td:focus,
|
||||||
tr:focus {
|
tr:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make html links ("a" elements) nice looking buttons with this class */
|
/* Make html links ("a" elements) nice looking buttons with this class */
|
||||||
a:link,
|
a:link,
|
||||||
a:visited {
|
a:visited {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown {
|
.dropdown {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-input {
|
.text-input {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-color: white;
|
border-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Notification icon (for create program right now only) */
|
/* Notification icon (for create program right now only) */
|
||||||
#create-program-tab {
|
#create-program-tab {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#create-program-notification {
|
#create-program-notification {
|
||||||
font-size: $defaultFontSize * 0.625;
|
font-size: $defaultFontSize * 0.625;
|
||||||
position: absolute; /* Position the badge within the relatively positioned button */
|
position: absolute; /* Position the badge within the relatively positioned button */
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#factions-tab {
|
#factions-tab {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#factions-notification {
|
#factions-notification {
|
||||||
font-size: $defaultFontSize * 0.625;
|
font-size: $defaultFontSize * 0.625;
|
||||||
position: absolute; /* Position the badge within the relatively positioned button */
|
position: absolute; /* Position the badge within the relatively positioned button */
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#augmentations-tab {
|
#augmentations-tab {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#augmentations-notification {
|
#augmentations-notification {
|
||||||
font-size: $defaultFontSize * 0.625;
|
font-size: $defaultFontSize * 0.625;
|
||||||
position: absolute; /* Position the badge within the relatively positioned button */
|
position: absolute; /* Position the badge within the relatively positioned button */
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-on {
|
.notification-on {
|
||||||
background-color: #fa3e3e;
|
background-color: #fa3e3e;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
padding: 1px 3px;
|
padding: 1px 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-off {
|
.notification-off {
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
color: #333;
|
color: #333;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* help tip. Question mark that opens popup with info/details */
|
/* help tip. Question mark that opens popup with info/details */
|
||||||
.help-tip {
|
.help-tip {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
content: '?';
|
content: "?";
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.help-tip-big {
|
.help-tip-big {
|
||||||
content: '?';
|
content: "?";
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.help-tip:hover,
|
.help-tip:hover,
|
||||||
.help-tip-big:hover {
|
.help-tip-big:hover {
|
||||||
background-color: #888;
|
background-color: #888;
|
||||||
}
|
}
|
||||||
|
|
||||||
.help-tip:active,
|
.help-tip:active,
|
||||||
.help-tip-big:active {
|
.help-tip-big:active {
|
||||||
@include boxShadow(inset 0 1px 4px rgba(0, 0, 0, 0.6));
|
@include boxShadow(inset 0 1px 4px rgba(0, 0, 0, 0.6));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flashing button (Red) */
|
/* Flashing button (Red) */
|
||||||
@-webkit-keyframes glowing {
|
@-webkit-keyframes glowing {
|
||||||
0% { background-color: #b20000; -webkit-box-shadow: 0 0 3px #b20000; }
|
0% {
|
||||||
50% { background-color: #f00; -webkit-box-shadow: 0 0 40px #f00; }
|
background-color: #b20000;
|
||||||
100% { background-color: #b20000; -webkit-box-shadow: 0 0 3px #b20000; }
|
-webkit-box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #f00;
|
||||||
|
-webkit-box-shadow: 0 0 40px #f00;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #b20000;
|
||||||
|
-webkit-box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-moz-keyframes glowing {
|
@-moz-keyframes glowing {
|
||||||
0% { background-color: #b20000; -moz-box-shadow: 0 0 3px #b20000; }
|
0% {
|
||||||
50% { background-color: #f00; -moz-box-shadow: 0 0 40px #f00; }
|
background-color: #b20000;
|
||||||
100% { background-color: #b20000; -moz-box-shadow: 0 0 3px #b20000; }
|
-moz-box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #f00;
|
||||||
|
-moz-box-shadow: 0 0 40px #f00;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #b20000;
|
||||||
|
-moz-box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-o-keyframes glowing {
|
@-o-keyframes glowing {
|
||||||
0% { background-color: #b20000; box-shadow: 0 0 3px #b20000; }
|
0% {
|
||||||
50% { background-color: #f00; box-shadow: 0 0 40px #f00; }
|
background-color: #b20000;
|
||||||
100% { background-color: #b20000; box-shadow: 0 0 3px #b20000; }
|
box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #f00;
|
||||||
|
box-shadow: 0 0 40px #f00;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #b20000;
|
||||||
|
box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes glowing {
|
@keyframes glowing {
|
||||||
0% { background-color: #b20000; box-shadow: 0 0 3px #b20000; }
|
0% {
|
||||||
50% { background-color: #f00; box-shadow: 0 0 40px #f00; }
|
background-color: #b20000;
|
||||||
100% { background-color: #b20000; box-shadow: 0 0 3px #b20000; }
|
box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #f00;
|
||||||
|
box-shadow: 0 0 40px #f00;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #b20000;
|
||||||
|
box-shadow: 0 0 3px #b20000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.flashing-button {
|
.flashing-button {
|
||||||
-webkit-animation: glowing 1500ms infinite;
|
-webkit-animation: glowing 1500ms infinite;
|
||||||
-moz-animation: glowing 1500ms infinite;
|
-moz-animation: glowing 1500ms infinite;
|
||||||
-o-animation: glowing 1500ms infinite;
|
-o-animation: glowing 1500ms infinite;
|
||||||
animation: glowing 1500ms infinite;
|
animation: glowing 1500ms infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blinking Cursor */
|
/* Blinking Cursor */
|
||||||
/* ----- blinking cursor animation ----- */
|
/* ----- blinking cursor animation ----- */
|
||||||
.typed-cursor {
|
.typed-cursor {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-animation: blink 0.95s infinite;
|
-webkit-animation: blink 0.95s infinite;
|
||||||
-moz-animation: blink 0.95s infinite;
|
-moz-animation: blink 0.95s infinite;
|
||||||
-ms-animation: blink 0.95s infinite;
|
-ms-animation: blink 0.95s infinite;
|
||||||
-o-animation: blink 0.95s infinite;
|
-o-animation: blink 0.95s infinite;
|
||||||
animation: blink 0.95s infinite;
|
animation: blink 0.95s infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-keyframes blink{
|
@-keyframes blink {
|
||||||
0% { opacity: 1; }
|
0% {
|
||||||
50% { opacity: 0; }
|
opacity: 1;
|
||||||
100% { opacity: 1; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@-webkit-keyframes blink{
|
@-webkit-keyframes blink {
|
||||||
0% { opacity: 1; }
|
0% {
|
||||||
50% { opacity: 0; }
|
opacity: 1;
|
||||||
100% { opacity: 1; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@-moz-keyframes blink{
|
@-moz-keyframes blink {
|
||||||
0% { opacity: 1; }
|
0% {
|
||||||
50% { opacity: 0; }
|
opacity: 1;
|
||||||
100% { opacity: 1; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@-ms-keyframes blink{
|
@-ms-keyframes blink {
|
||||||
0% { opacity: 1; }
|
0% {
|
||||||
50% { opacity: 0; }
|
opacity: 1;
|
||||||
100% { opacity: 1; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@-o-keyframes blink{
|
@-o-keyframes blink {
|
||||||
0% { opacity: 1; }
|
0% {
|
||||||
50% { opacity: 0; }
|
opacity: 1;
|
||||||
100% { opacity: 1; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Status text */
|
/* Status text */
|
||||||
@-webkit-keyframes status-text {
|
@-webkit-keyframes status-text {
|
||||||
from {
|
from {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-text {
|
.status-text {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
-webkit-animation: status-text 3s 1;
|
-webkit-animation: status-text 3s 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#status-text-container {
|
#status-text-container {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#status-text {
|
#status-text {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
display: none;
|
display: none;
|
||||||
font-size: $defaultFontSize * 1.25;
|
font-size: $defaultFontSize * 1.25;
|
||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scan analyze links from AutoLink */
|
/* Scan analyze links from AutoLink */
|
||||||
.scan-analyze-link {
|
.scan-analyze-link {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Accordion menus (Header with collapsible panel) */
|
/* Accordion menus (Header with collapsible panel) */
|
||||||
.accordion-header {
|
.accordion-header {
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: $defaultFontSize * 1.25;
|
font-size: $defaultFontSize * 1.25;
|
||||||
margin: 6px 6px 0 6px;
|
margin: 6px 6px 0 6px;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 80%;
|
width: 80%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&.active,
|
&.active,
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active:hover {
|
&.active:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: '\02795'; /* "plus" sign (+) */
|
content: "\02795"; /* "plus" sign (+) */
|
||||||
font-size: $defaultFontSize * 0.875;
|
font-size: $defaultFontSize * 0.875;
|
||||||
float: right;
|
float: right;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
text-shadow: 0 0 0 #fff;
|
text-shadow: 0 0 0 #fff;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 5px;
|
bottom: 5px;
|
||||||
right: 6px;
|
right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active:after {
|
&.active:after {
|
||||||
content: "\2796"; /* "minus" sign (-) */
|
content: "\2796"; /* "minus" sign (-) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.accordion-panel {
|
.accordion-panel {
|
||||||
margin: 0 6px 6px 6px;
|
margin: 0 6px 6px 6px;
|
||||||
padding: 0 6px 6px 6px;
|
padding: 0 6px 6px 6px;
|
||||||
width: 75%;
|
width: 75%;
|
||||||
margin-left: 5%;
|
margin-left: 5%;
|
||||||
display: none;
|
display: none;
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: none;
|
overflow-x: none;
|
||||||
|
|
||||||
div, ul, p, ul > li {
|
div,
|
||||||
background-color: #555;
|
ul,
|
||||||
}
|
p,
|
||||||
|
ul > li {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* override the global <span> styling */
|
/* override the global <span> styling */
|
||||||
#active-scripts-total-production-active,
|
#active-scripts-total-production-active,
|
||||||
#active-scripts-total-prod-aug-total,
|
#active-scripts-total-prod-aug-total,
|
||||||
#active-scripts-total-prod-aug-avg {
|
#active-scripts-total-prod-aug-avg {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper Classes */
|
/* Helper Classes */
|
||||||
.hacker-green {
|
.hacker-green {
|
||||||
color: $hacker-green;
|
color: $hacker-green;
|
||||||
}
|
}
|
||||||
|
|
||||||
.money-gold {
|
.money-gold {
|
||||||
color: $money-gold;
|
color: $money-gold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.light-yellow {
|
.light-yellow {
|
||||||
color: $light-yellow;
|
color: $light-yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.unbuyable {
|
||||||
|
color: #66cfbc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.failure {
|
.failure {
|
||||||
color: $alert-red;
|
color: $alert-red;
|
||||||
text-shadow: 0 0 0 $alert-red;
|
text-shadow: 0 0 0 $alert-red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.success {
|
.success {
|
||||||
color: $success-green;
|
color: $success-green;
|
||||||
text-shadow: 0 0 0 $success-green;
|
text-shadow: 0 0 0 $success-green;
|
||||||
}
|
}
|
||||||
|
|
||||||
.physical-yellow {
|
.physical-yellow {
|
||||||
color: $my-stat-physical;
|
color: $my-stat-physical;
|
||||||
}
|
}
|
||||||
|
|
||||||
.charisma-purple {
|
.charisma-purple {
|
||||||
color: $my-stat-cha-color;
|
color: $my-stat-cha-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reputation {
|
.reputation {
|
||||||
color: $light-yellow;
|
color: $light-yellow;
|
||||||
}
|
}
|
||||||
|
|
||||||
.smallfont {
|
.smallfont {
|
||||||
font-size: $defaultFontSize * 0.8125;
|
font-size: $defaultFontSize * 0.8125;
|
||||||
}
|
}
|
||||||
|
|
||||||
.samefont {
|
.samefont {
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.noscrollbar {
|
.noscrollbar {
|
||||||
-ms-overflow-style: none; /* IE and Edge */
|
-ms-overflow-style: none; /* IE and Edge */
|
||||||
/* stylelint-disable-next-line property-no-unknown */
|
/* stylelint-disable-next-line property-no-unknown */
|
||||||
scrollbar-width: none; /* Firefox https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-width */
|
scrollbar-width: none; /* Firefox https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-width */
|
||||||
}
|
}
|
||||||
|
|
||||||
.noscrollbar::-webkit-scrollbar {
|
.noscrollbar::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="checkbox"] {
|
input[type="checkbox"] {
|
||||||
filter: invert(1) sepia(1) hue-rotate(41deg) brightness(100%) saturate(10);
|
filter: invert(1) sepia(1) hue-rotate(41deg) brightness(100%) saturate(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionCheckbox {
|
.optionCheckbox {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionRange {
|
.optionRange {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
background: #777;
|
background: #777;
|
||||||
outline: none;
|
outline: none;
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
-webkit-transition: 0.2s;
|
-webkit-transition: 0.2s;
|
||||||
transition: opacity 0.2s;
|
transition: opacity 0.2s;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionRange::-webkit-slider-thumb {
|
.optionRange::-webkit-slider-thumb {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
appearance: none;
|
appearance: none;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
background: var(--my-font-color);
|
background: var(--my-font-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optionRange::-moz-range-thumb {
|
.optionRange::-moz-range-thumb {
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
background: var(--my-font-color);
|
background: var(--my-font-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.noselect {
|
.noselect {
|
||||||
-moz-user-select: -moz-none;
|
-moz-user-select: -moz-none;
|
||||||
-khtml-user-select: none;
|
-khtml-user-select: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,72 +1,72 @@
|
|||||||
@import "theme";
|
@import "theme";
|
||||||
|
|
||||||
#terminal-container {
|
#terminal-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 99%;
|
width: 99%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal {
|
#terminal {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
height: auto;
|
height: auto;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
table-layout: fixed;
|
table-layout: fixed;
|
||||||
|
|
||||||
.prompt {
|
.prompt {
|
||||||
color: var(--my-prompt-color);
|
color: var(--my-prompt-color);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal-input {
|
#terminal-input {
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
transition: height 1s;
|
transition: height 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.terminal-input {
|
.terminal-input {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
border: 0;
|
border: 0;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
font-size: $defaultFontSize;
|
font-size: $defaultFontSize;
|
||||||
outline: none;
|
outline: none;
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.terminal-line {
|
.terminal-line {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
-webkit-hyphens: auto;
|
-webkit-hyphens: auto;
|
||||||
-moz-hyphens: auto;
|
-moz-hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal-input-td {
|
#terminal-input-td {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal-input-td textarea {
|
#terminal-input-td textarea {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
resize: none;
|
resize: none;
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal-input-header {
|
#terminal-input-header {
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
|
||||||
#terminal-input-text-box {
|
#terminal-input-text-box {
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,67 +4,10 @@
|
|||||||
|
|
||||||
/* Tool tips (when hovering over an element */
|
/* Tool tips (when hovering over an element */
|
||||||
.tooltip {
|
.tooltip {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.tooltiptext {
|
.tooltiptext {
|
||||||
visibility: hidden;
|
|
||||||
width: 300px;
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
border: 2px solid var(--my-highlight-color);
|
|
||||||
color: #fff;
|
|
||||||
text-align: center;
|
|
||||||
padding: 4px;
|
|
||||||
left: 101%;
|
|
||||||
|
|
||||||
pointer-events: none;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 99;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Positioned to left of element rather than right */
|
|
||||||
.tooltiptextleft {
|
|
||||||
visibility: hidden;
|
|
||||||
width: 300px;
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
border: 2px solid var(--my-highlight-color);
|
|
||||||
color: #fff;
|
|
||||||
text-align: center;
|
|
||||||
padding: 4px;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-100%, -100%);
|
|
||||||
|
|
||||||
/* Backwards compatibility */
|
|
||||||
-webkit-transform: translate(-100%, -100%);
|
|
||||||
-moz-transform: translate(-100%, -100%);
|
|
||||||
-o-transform: translate(-100%, -100%);
|
|
||||||
-ms-transform: translate(-100%, -100%);
|
|
||||||
|
|
||||||
position: absolute;
|
|
||||||
z-index: 99;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tooltip goes below cursor instead of above */
|
|
||||||
.tooltiptextlow {
|
|
||||||
visibility: hidden;
|
|
||||||
width: 300px;
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
border: 2px solid var(--my-highlight-color);
|
|
||||||
color: #fff;
|
|
||||||
text-align: center;
|
|
||||||
padding: 4px;
|
|
||||||
left: 101%;
|
|
||||||
|
|
||||||
pointer-events: none;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 99;
|
|
||||||
bottom: 25%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Same thing as a normal tooltip except its a bit higher */
|
|
||||||
.tooltip .tooltiptexthigh {
|
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
@@ -73,57 +16,114 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
left: 101%;
|
left: 101%;
|
||||||
bottom: -25%;
|
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Positioned to left of element rather than right */
|
||||||
|
.tooltiptextleft {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 300px;
|
||||||
|
background-color: var(--my-background-color);
|
||||||
|
border: 2px solid var(--my-highlight-color);
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 4px;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-100%, -100%);
|
||||||
|
|
||||||
|
/* Backwards compatibility */
|
||||||
|
-webkit-transform: translate(-100%, -100%);
|
||||||
|
-moz-transform: translate(-100%, -100%);
|
||||||
|
-o-transform: translate(-100%, -100%);
|
||||||
|
-ms-transform: translate(-100%, -100%);
|
||||||
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 99;
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tooltip goes below cursor instead of above */
|
||||||
|
.tooltiptextlow {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 300px;
|
||||||
|
background-color: var(--my-background-color);
|
||||||
|
border: 2px solid var(--my-highlight-color);
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 4px;
|
||||||
|
left: 101%;
|
||||||
|
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 99;
|
||||||
|
bottom: 25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Same thing as a normal tooltip except its a bit higher */
|
||||||
|
.tooltip .tooltiptexthigh {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 300px;
|
||||||
|
background-color: var(--my-background-color);
|
||||||
|
border: 2px solid var(--my-highlight-color);
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 4px;
|
||||||
|
left: 101%;
|
||||||
|
bottom: -25%;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
z-index: 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tooltip:hover .tooltiptext,
|
.tooltip:hover .tooltiptext,
|
||||||
.tooltip:hover .tooltiptexthigh,
|
.tooltip:hover .tooltiptexthigh,
|
||||||
.tooltip:hover .tooltiptextleft,
|
.tooltip:hover .tooltiptextleft,
|
||||||
.tooltip:hover .tooltiptextlow {
|
.tooltip:hover .tooltiptextlow {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy_tooltip {
|
.copy_tooltip {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy_tooltip_copied {
|
.copy_tooltip_copied {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
transition: color 0.3s;
|
transition: color 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy_tooltip .copy_tooltip_text {
|
.copy_tooltip .copy_tooltip_text {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
background-color: var(--my-background-color);
|
background-color: var(--my-background-color);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
top: 120%;
|
top: 120%;
|
||||||
left: 5%;
|
left: 5%;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy_tooltip .copy_tooltip_text::after {
|
.copy_tooltip .copy_tooltip_text::after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 100%;
|
bottom: 100%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin-left: -6px;
|
margin-left: -6px;
|
||||||
border-width: 8px;
|
border-width: 8px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: transparent transparent white transparent;
|
border-color: transparent transparent white transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy_tooltip .copy_tooltip_text_visible {
|
.copy_tooltip .copy_tooltip_text_visible {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transition: opacity 0.3s;
|
transition: opacity 0.3s;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,68 @@
|
|||||||
/* required LIB STYLES */
|
/* required LIB STYLES */
|
||||||
/* .Treant se automatski dodaje na svaki chart conatiner */
|
/* .Treant se automatski dodaje na svaki chart conatiner */
|
||||||
.Treant { position: relative; overflow: hidden; padding: 0 !important; }
|
.Treant {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
.Treant > .node,
|
.Treant > .node,
|
||||||
.Treant > .pseudo { position: absolute; display: block; visibility: hidden; }
|
.Treant > .pseudo {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
.Treant.Treant-loaded .node,
|
.Treant.Treant-loaded .node,
|
||||||
.Treant.Treant-loaded .pseudo { visibility: visible; }
|
.Treant.Treant-loaded .pseudo {
|
||||||
.Treant > .pseudo { width: 0; height: 0; border: none; padding: 0; }
|
visibility: visible;
|
||||||
.Treant .collapse-switch { width: 3px; height: 3px; display: block; border: 1px solid black; position: absolute; top: 1px; right: 1px; cursor: pointer; }
|
}
|
||||||
.Treant .collapsed .collapse-switch { background-color: #868dee; }
|
.Treant > .pseudo {
|
||||||
.Treant > .node img { border: none; float: left; }
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.Treant .collapse-switch {
|
||||||
|
width: 3px;
|
||||||
|
height: 3px;
|
||||||
|
display: block;
|
||||||
|
border: 1px solid black;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
right: 1px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.Treant .collapsed .collapse-switch {
|
||||||
|
background-color: #868dee;
|
||||||
|
}
|
||||||
|
.Treant > .node img {
|
||||||
|
border: none;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
.Treant > .node {
|
.Treant > .node {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
min-width: 60px;
|
min-width: 60px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border: 2px solid #e8e8e3;
|
border: 2px solid #e8e8e3;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Treant > .researched {
|
.Treant > .researched {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Treant > .locked > div {
|
.Treant > .locked > div {
|
||||||
color: red;
|
color: red;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Treant > .node > div {
|
.Treant > .node > div {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Treant > .unlocked:hover {
|
.Treant > .unlocked:hover {
|
||||||
background-color: #666;
|
background-color: #666;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,49 +3,49 @@
|
|||||||
|
|
||||||
/* Both Work in progress and BitNode stuff */
|
/* Both Work in progress and BitNode stuff */
|
||||||
.generic-fullscreen-container {
|
.generic-fullscreen-container {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
width: 99%;
|
width: 99%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.generic-fullscreen-container-scroll {
|
.generic-fullscreen-container-scroll {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#work-in-progress-container {
|
#work-in-progress-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
#work-in-progress-text {
|
#work-in-progress-text {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.work-button {
|
.work-button {
|
||||||
@include borderRadius(12px);
|
@include borderRadius(12px);
|
||||||
@include boxShadow(1px 1px 3px #000);
|
@include boxShadow(1px 1px 3px #000);
|
||||||
|
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
float: left;
|
float: left;
|
||||||
font-size: $defaultFontSize * 1.25;
|
font-size: $defaultFontSize * 1.25;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
border: 3px solid #fff;
|
border: 3px solid #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.work-button:hover,
|
.work-button:hover,
|
||||||
.work-button:focus {
|
.work-button:focus {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
#cinematic-text-container {
|
#cinematic-text-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
}
|
}
|
||||||
|
|||||||
8
cypress.json
Normal file
8
cypress.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"baseUrl": "http://localhost:8000",
|
||||||
|
"fixturesFolder": false,
|
||||||
|
"trashAssetsBeforeRuns": true,
|
||||||
|
"screenshotsFolder": ".cypress/screenshots",
|
||||||
|
"videosFolder": ".cypress/videos",
|
||||||
|
"videoUploadOnPasses": false
|
||||||
|
}
|
||||||
51
cypress/integration/netscript.spec.ts
Normal file
51
cypress/integration/netscript.spec.ts
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
export {};
|
||||||
|
|
||||||
|
describe("netscript", () => {
|
||||||
|
it("creates and runs a NetScript 2.0 script", () => {
|
||||||
|
cy.findByRole("button", { name: "Exit Tutorial" }).click();
|
||||||
|
cy.findByText("Got it!").click();
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("connect n00dles{enter}");
|
||||||
|
cy.findByText(/connected to n00dles/i);
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("run NUKE.exe{enter}");
|
||||||
|
cy.findByText(/gained root access/i);
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("home{enter}");
|
||||||
|
cy.findByText(/connected to home/i);
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("nano script.js{enter}");
|
||||||
|
|
||||||
|
// monaco can take a bit
|
||||||
|
cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type(`export const main = async (ns) => {{}
|
||||||
|
while(true) {{}
|
||||||
|
await ns.hack("n00dles");`);
|
||||||
|
|
||||||
|
cy.findByText("RAM: 1.70GB");
|
||||||
|
cy.findByRole("button", { name: /Save & Close/i }).click();
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("run script.js{enter}");
|
||||||
|
cy.findByText(/Running script with 1 thread/);
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("ps{enter}");
|
||||||
|
cy.findByText(/\(PID - 1\) script.js/);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("errors and shows a dialog box when static RAM !== dynamic RAM", () => {
|
||||||
|
cy.findByRole("button", { name: "Exit Tutorial" }).click();
|
||||||
|
cy.findByText("Got it!").click();
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("nano script.js{enter}");
|
||||||
|
|
||||||
|
// monaco can take a bit
|
||||||
|
cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type(`export const main = async (ns) => {{}
|
||||||
|
const command = "hack";
|
||||||
|
ns[command]("n00dles");`);
|
||||||
|
|
||||||
|
cy.findByText("RAM: 1.60GB");
|
||||||
|
cy.findByRole("button", { name: /Save & Close/i }).click();
|
||||||
|
|
||||||
|
cy.findByRole("textbox").type("run script.js{enter}");
|
||||||
|
cy.findByText(/Dynamic RAM usage calculated to be greater than initial RAM usage on fn: hack./i);
|
||||||
|
});
|
||||||
|
});
|
||||||
95
cypress/integration/tutorial.spec.ts
Normal file
95
cypress/integration/tutorial.spec.ts
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
export {};
|
||||||
|
|
||||||
|
describe("tutorial", () => {
|
||||||
|
it("completes the tutorial", () => {
|
||||||
|
cy.findByText(/dark, dystopian future/);
|
||||||
|
cy.findByRole("button", { name: "Next" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/heading to the Stats page/);
|
||||||
|
cy.findByRole("button", { name: "Stats" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/lot of important information/);
|
||||||
|
cy.findByRole("button", { name: "Next" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/head to your computer's terminal/);
|
||||||
|
cy.findByRole("button", { name: "Terminal" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/is used to interface/);
|
||||||
|
cy.findByRole("button", { name: "Next" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/Let's try it out/i);
|
||||||
|
cy.findByRole("textbox").type("help{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/displays a list of all available/i);
|
||||||
|
cy.findByRole("textbox").type("ls{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/is a basic command that shows files/i);
|
||||||
|
cy.findByRole("textbox").type("scan{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/that's great and all/i);
|
||||||
|
cy.findByRole("textbox").type("scan-analyze{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/this command shows more detailed information/i);
|
||||||
|
cy.findByRole("textbox").type("scan-analyze 2{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/now you can see information/i);
|
||||||
|
cy.findByRole("textbox").type("connect n00dles{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/currency has become digital/i);
|
||||||
|
cy.findByRole("textbox").type("analyze{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/For this server, the required hacking skill/i);
|
||||||
|
cy.findByText(/Required number of open ports for NUKE/i);
|
||||||
|
cy.findByRole("textbox").type("run NUKE.exe{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/gained root access to n00dles/i);
|
||||||
|
cy.findByRole("textbox").type("hack{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/now attempting to hack the server/i);
|
||||||
|
cy.findByRole("button", { name: "Next" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/hacking exp/i);
|
||||||
|
cy.findByRole("textbox", { timeout: 15_000 }).should("not.be.disabled").type("nano n00dles.script{enter}");
|
||||||
|
|
||||||
|
// monaco can take a bit
|
||||||
|
cy.findByRole("code", { timeout: 15_000 }).type("{selectall}{del}").type("while(true) {{}{enter}hack('n00dles');");
|
||||||
|
|
||||||
|
cy.findByRole("button", { name: /Save & Close/i }).click();
|
||||||
|
|
||||||
|
cy.findByText(/now we'll run the script/i);
|
||||||
|
cy.findByRole("textbox").type("free{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/We have 4GB of free RAM on this machine/i);
|
||||||
|
cy.findByRole("textbox").type("run n00dles.script{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/Your script is now running/i);
|
||||||
|
cy.findByRole("button", { name: "Active Scripts" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/This page displays information about all of your scripts/i);
|
||||||
|
cy.findByRole("button", { name: "Terminal" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/each active script contains logs/i);
|
||||||
|
cy.findByRole("textbox").type("tail n00dles.script{enter}");
|
||||||
|
|
||||||
|
cy.findByText(/The log for this script won't show much/i);
|
||||||
|
cy.findByRole("button", { name: "Next" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/Hacking is not the only way to earn money/i);
|
||||||
|
cy.findByRole("button", { name: "Hacknet" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/Here you can purchase new Hacknet Nodes/i);
|
||||||
|
cy.findByRole("button", { name: /Purchase Hacknet Node/ }).click();
|
||||||
|
|
||||||
|
cy.findByText(/You just purchased a Hacknet Node!/i);
|
||||||
|
cy.findByRole("button", { name: "City" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/This page lists all of the different locations/i);
|
||||||
|
cy.findByRole("button", { name: "Tutorial" }).click();
|
||||||
|
|
||||||
|
cy.findByText(/a lot of different documentation about the game/i);
|
||||||
|
cy.findByRole("button", { name: "Finish Tutorial" }).click();
|
||||||
|
cy.findByText("Got it!").click();
|
||||||
|
|
||||||
|
cy.findByText(/Tutorial \(AKA Links to Documentation\)/i);
|
||||||
|
});
|
||||||
|
});
|
||||||
22
cypress/plugins/index.js
Normal file
22
cypress/plugins/index.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/// <reference types="cypress" />
|
||||||
|
// ***********************************************************
|
||||||
|
// This example plugins/index.js can be used to load plugins
|
||||||
|
//
|
||||||
|
// You can change the location of this file or turn off loading
|
||||||
|
// the plugins file with the 'pluginsFile' configuration option.
|
||||||
|
//
|
||||||
|
// You can read more here:
|
||||||
|
// https://on.cypress.io/plugins-guide
|
||||||
|
// ***********************************************************
|
||||||
|
|
||||||
|
// This function is called when a project is opened or re-opened (e.g. due to
|
||||||
|
// the project's config changing)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Cypress.PluginConfig}
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
module.exports = (on, config) => {
|
||||||
|
// `on` is used to hook into various events Cypress emits
|
||||||
|
// `config` is the resolved Cypress config
|
||||||
|
};
|
||||||
1
cypress/support/commands.ts
Normal file
1
cypress/support/commands.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
import "@testing-library/cypress/add-commands";
|
||||||
9
cypress/support/globalHooks.ts
Normal file
9
cypress/support/globalHooks.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
export {};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
cy.visit("/");
|
||||||
|
cy.clearLocalStorage();
|
||||||
|
cy.window().then((win) => {
|
||||||
|
win.indexedDB.deleteDatabase("bitburnerSave");
|
||||||
|
});
|
||||||
|
});
|
||||||
21
cypress/support/index.js
Normal file
21
cypress/support/index.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
// ***********************************************************
|
||||||
|
// This example support/index.js is processed and
|
||||||
|
// loaded automatically before your test files.
|
||||||
|
//
|
||||||
|
// This is a great place to put global configuration and
|
||||||
|
// behavior that modifies Cypress.
|
||||||
|
//
|
||||||
|
// You can change the location of this file or turn off
|
||||||
|
// automatically serving support files with the
|
||||||
|
// 'supportFile' configuration option.
|
||||||
|
//
|
||||||
|
// You can read more here:
|
||||||
|
// https://on.cypress.io/configuration
|
||||||
|
// ***********************************************************
|
||||||
|
|
||||||
|
// Import commands.js using ES2015 syntax:
|
||||||
|
import "./globalHooks";
|
||||||
|
import "./commands";
|
||||||
|
|
||||||
|
// Alternatively you can use CommonJS syntax:
|
||||||
|
// require('./commands')
|
||||||
4
dist/engine.bundle.js
vendored
4
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
2
dist/engineStyle.bundle.js
vendored
2
dist/engineStyle.bundle.js
vendored
@@ -1,2 +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([863,0]),o()}({800:function(n,t,o){},802:function(n,t,o){},804:function(n,t,o){},806:function(n,t,o){},808:function(n,t,o){},810:function(n,t,o){},812:function(n,t,o){},814:function(n,t,o){},816:function(n,t,o){},818:function(n,t,o){},820:function(n,t,o){},822:function(n,t,o){},824:function(n,t,o){},826:function(n,t,o){},828:function(n,t,o){},830:function(n,t,o){},832:function(n,t,o){},834:function(n,t,o){},836:function(n,t,o){},838:function(n,t,o){},840:function(n,t,o){},842:function(n,t,o){},844:function(n,t,o){},846:function(n,t,o){},848:function(n,t,o){},850:function(n,t,o){},852:function(n,t,o){},854:function(n,t,o){},856:function(n,t,o){},858:function(n,t,o){},860:function(n,t,o){},863:function(n,t,o){"use strict";o.r(t);o(862),o(860),o(858),o(856),o(854),o(852),o(850),o(848),o(846),o(844),o(842),o(840),o(838),o(836),o(834),o(832),o(830),o(828),o(826),o(824),o(822),o(820),o(818),o(816),o(814),o(812),o(810),o(808),o(806),o(804),o(802),o(800)}});
|
!function(n){function t(t){for(var e,i,f=t[0],c=t[1],l=t[2],a=0,s=[];a<f.length;a++)i=f[a],Object.prototype.hasOwnProperty.call(u,i)&&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(p&&p(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={2: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 p=c;r.push([905,0]),o()}({905:function(n,t,o){"use strict";o.r(t);o(906),o(908),o(910),o(912),o(914),o(916),o(918),o(920),o(922),o(924),o(926),o(928),o(930),o(932),o(934),o(936),o(938),o(940),o(942),o(944),o(946),o(948),o(950),o(952),o(954),o(956),o(958),o(960),o(962),o(964),o(966),o(968),o(970)},908:function(n,t,o){},910:function(n,t,o){},912:function(n,t,o){},914:function(n,t,o){},916:function(n,t,o){},918:function(n,t,o){},920:function(n,t,o){},922:function(n,t,o){},924:function(n,t,o){},926:function(n,t,o){},928:function(n,t,o){},930:function(n,t,o){},932:function(n,t,o){},934:function(n,t,o){},936:function(n,t,o){},938:function(n,t,o){},940:function(n,t,o){},942:function(n,t,o){},944:function(n,t,o){},946:function(n,t,o){},948:function(n,t,o){},950:function(n,t,o){},952:function(n,t,o){},954:function(n,t,o){},956:function(n,t,o){},958:function(n,t,o){},960:function(n,t,o){},962:function(n,t,o){},964:function(n,t,o){},966:function(n,t,o){},968:function(n,t,o){},970:function(n,t,o){}});
|
||||||
//# sourceMappingURL=engineStyle.bundle.js.map
|
//# sourceMappingURL=engineStyle.bundle.js.map
|
||||||
1014
dist/engineStyle.css
vendored
1014
dist/engineStyle.css
vendored
File diff suppressed because it is too large
Load Diff
103
dist/vendor.bundle.js
vendored
103
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
@@ -76,15 +76,15 @@ List of Factions and their Requirements
|
|||||||
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
||||||
| Hacking | NiteSec | * Install a backdoor on the avmnite-02h | |
|
| Hacking | NiteSec | * Install a backdoor on the avmnite-02h | |
|
||||||
| Groups | | server | |
|
| Groups | | server | |
|
||||||
| | | * Home Computer RAM of at least 32GB | |
|
| | | | |
|
||||||
+ +----------------+-----------------------------------------+-------------------------------+
|
+ +----------------+-----------------------------------------+-------------------------------+
|
||||||
| | The Black Hand | * Install a backdoor on the I.I.I.I | |
|
| | The Black Hand | * Install a backdoor on the I.I.I.I | |
|
||||||
| | | server | |
|
| | | server | |
|
||||||
| | | * Home Computer RAM of at least 64GB | |
|
| | | | |
|
||||||
+ +----------------+-----------------------------------------+-------------------------------+
|
+ +----------------+-----------------------------------------+-------------------------------+
|
||||||
| | Bitrunners | * Install a backdoor on the run4theh111z| |
|
| | Bitrunners | * Install a backdoor on the run4theh111z| |
|
||||||
| | | server | |
|
| | | server | |
|
||||||
| | | * Home Computer RAM of at least 128GB | |
|
| | | | |
|
||||||
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
||||||
| Megacorporations | ECorp | * Have 200k reputation with | |
|
| Megacorporations | ECorp | * Have 200k reputation with | |
|
||||||
| | | the Corporation | |
|
| | | the Corporation | |
|
||||||
|
|||||||
@@ -14,29 +14,46 @@ these for money or for faction reputation. To try and infiltrate a company,
|
|||||||
visit a company through the 'World' menu. There will be an option that
|
visit a company through the 'World' menu. There will be an option that
|
||||||
says 'Infiltrate Company'.
|
says 'Infiltrate Company'.
|
||||||
|
|
||||||
When infiltrating a company, you must progress through clearance levels in
|
When infiltrating a company you will be presented with short active challenges.
|
||||||
the facility. Every clearance level has some form of security that
|
None of the challenges use the mouse.
|
||||||
you must get past. There are several forms of security, ranging from
|
|
||||||
high-tech security systems to armed guards. For each form of security,
|
|
||||||
there are a variety of options that you can choose to try and bypass
|
|
||||||
the security. Examples include hacking the security, engaging in combat,
|
|
||||||
assassination, or sneaking past the security. The chance to succeed for
|
|
||||||
each option is determined in part by your stats. So, for example,
|
|
||||||
trying to hack the security system relies on your hacking skill,
|
|
||||||
whereas trying to sneak past the security relies on your agility level.
|
|
||||||
|
|
||||||
The facility has a 'security level' that affects your chance of success
|
The difficulty at the top lowers with better combat stats. It is not recommended
|
||||||
when trying to get past a clearance level. Every time you advance to the
|
to attempt infiltrations above mid-normal.
|
||||||
next clearance level, the facility's security level will increase by a
|
|
||||||
fixed percentage. Furthermore the options you choose and whether you
|
|
||||||
succeed or fail will affect the security level as well. For example,
|
|
||||||
if you try to kill a security guard and fail, the security level will
|
|
||||||
increase by a lot. If you choose to sneak past security and succeed,
|
|
||||||
the security level will not increase at all.
|
|
||||||
|
|
||||||
Every 5 clearance levels, you will steal classified company secrets that
|
* Most use spacebar as "action"
|
||||||
can be sold for money or faction reputation. However, in order to sell
|
* Some use WASD or arrows interchangeably.
|
||||||
these secrets you must successfully escape the facility using the
|
* A few others use the rest of the keyboard.
|
||||||
'Escape' option. Furthermore, companies have a max clearance level.
|
|
||||||
If you reach the max clearance level you will automatically escape the
|
** Slash when his guard is down! **
|
||||||
facility with all of your stolen secrets.
|
|
||||||
|
Press space when the guard is attacking you.
|
||||||
|
|
||||||
|
** Close the brackets **
|
||||||
|
|
||||||
|
Enter all the matching brackets in reverse order.
|
||||||
|
|
||||||
|
** Type it backward **
|
||||||
|
|
||||||
|
Type the words that are written backward.
|
||||||
|
|
||||||
|
** Say something nice about the guard. **
|
||||||
|
|
||||||
|
Use the arrows to find a compliment for the guard.
|
||||||
|
|
||||||
|
** Enter the Code! **
|
||||||
|
|
||||||
|
Match the arrows as they appears.
|
||||||
|
|
||||||
|
** Match the symbols! **
|
||||||
|
|
||||||
|
Move the cursor to the matching symbol and press space to confirm.
|
||||||
|
|
||||||
|
** Remember all the mines! **
|
||||||
|
|
||||||
|
At first the cursor cannot be moved, remember the positions of the X.
|
||||||
|
Then move the cursor and press space to mark the mines on the board.
|
||||||
|
|
||||||
|
** Cut the wires **
|
||||||
|
|
||||||
|
Follow the instructions and press the numbers 1 through 9 to cut the appropriate
|
||||||
|
wires.
|
||||||
@@ -3,7 +3,117 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
v0.52.8 - 2021-07-23 Fixing the previous patch tbh ROUND 2 (hydroflame)
|
v0.53.0 - 2021-09-09 Way too many things. (hydroflame & community)
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
** Dev? **
|
||||||
|
|
||||||
|
* The entire codebase has been run through a code prettifier, hurray for consistency. (@threehams)
|
||||||
|
* Lots of test. (@threehams)
|
||||||
|
* Massive improvements to build speed. (@threehams)
|
||||||
|
* Dev notes: This won't affect any players but is immensely useful for me.
|
||||||
|
|
||||||
|
** Hacknet **
|
||||||
|
|
||||||
|
* Converted to ts/react
|
||||||
|
|
||||||
|
** Resleeving **
|
||||||
|
|
||||||
|
* Converted to ts/react
|
||||||
|
|
||||||
|
** Sleeves **
|
||||||
|
|
||||||
|
* Converted to ts/react. The ui should also have a better feel.
|
||||||
|
* Fixed a bug that allowed players to recover shock much faster than intended.
|
||||||
|
|
||||||
|
** BN10 **
|
||||||
|
|
||||||
|
* You have access to Sleeves right away
|
||||||
|
* In BN10 Sleeves start with 75 shock and 25 sync.
|
||||||
|
|
||||||
|
** MathJax **
|
||||||
|
|
||||||
|
* Several tooltips have been updated to display the relevant formula in Mathjax, e.g. Favor and reputation
|
||||||
|
|
||||||
|
** Corporation **
|
||||||
|
|
||||||
|
* Completely rewritten in React. Paving the way for bigger change.
|
||||||
|
* Smart Supply is now smarter and won't deadlock the warehouse. It is also more configurable.
|
||||||
|
* Several UI fixes.
|
||||||
|
|
||||||
|
** Bladeburner **
|
||||||
|
|
||||||
|
* Action count is no longer decided when joining the Bladeburners. Experiences for all players should be more similar.
|
||||||
|
|
||||||
|
** Factions **
|
||||||
|
|
||||||
|
* No factions have home computer ram requirement. This caused some confusion for new players.
|
||||||
|
|
||||||
|
** Gang **
|
||||||
|
|
||||||
|
* Made it clear when there's a new equipment coming up.
|
||||||
|
|
||||||
|
** Netscript **
|
||||||
|
|
||||||
|
* getActionCountRemaining now returns Infinity for bladeburner general actions. (@brubsy)
|
||||||
|
* getActionEstimatedSuccessChance now returns 100% for Diplomacy and Hyperbolic Regeneration Chamber. (@brubsy)
|
||||||
|
* disableLog('ALL') now disables all logs individually, meaning you can re-enable the ones you want after. (@Cass)
|
||||||
|
* getPlayer returns numPeopleKilled.
|
||||||
|
* Dynamic RAM calculation errors have a better error message.
|
||||||
|
* Hide some functions from autocomplete.
|
||||||
|
* Added getAugmentationPrice, getAugmentationRepReq, deprecated getAugmentationCost. (@TempFound)
|
||||||
|
* Fixed bug where some crime API would return "assassinate" when that's not accepted in other functions.
|
||||||
|
|
||||||
|
** Coding Contract **
|
||||||
|
|
||||||
|
* Spiralize Matrix is easier to read.
|
||||||
|
|
||||||
|
** Misc. **
|
||||||
|
|
||||||
|
* The world map is now used in sleeve travel and bladeburner travel.
|
||||||
|
* noselect a bunch of stuff.
|
||||||
|
* Ascii maps letters are more contrasting
|
||||||
|
* Updated documentation for infiltration.
|
||||||
|
* Most money costs in the game will turn grey/cyan when you don't have enough money.
|
||||||
|
* Donation textbox has better look & feel.
|
||||||
|
* Tech vendors ram & cores buttons have better look and feels.
|
||||||
|
* cores cost modified to be a formula instead of a semi-random array of numbers.
|
||||||
|
* Tech vendors now give a hint about where to get bigger servers.
|
||||||
|
* logboxes now displays whitespaces exactly. (@Cass)
|
||||||
|
* nerf noodle bar
|
||||||
|
|
||||||
|
v0.52.9 - 2021-08-27 Less lag! (hydroflame & community)
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
** Active Scripts page **
|
||||||
|
|
||||||
|
* Now less laggy, has pagination.
|
||||||
|
|
||||||
|
** File diagnostic **
|
||||||
|
|
||||||
|
* Added a popup found under options that shows the files you own and how
|
||||||
|
large they are. This help find bugs and leftover massive logs files.
|
||||||
|
|
||||||
|
** Corporation **
|
||||||
|
|
||||||
|
* Added safeguard against a very specific bug that causes NaN money. I'm
|
||||||
|
still not sure what the root cause is but it should prevent corp from
|
||||||
|
breaking.
|
||||||
|
|
||||||
|
** Netscript **
|
||||||
|
|
||||||
|
* tprintf is a new function that doesn't print the filename.
|
||||||
|
|
||||||
|
** Misc. **
|
||||||
|
|
||||||
|
* Infiltration kills you if you try to automate it. (@threehams)
|
||||||
|
* Fix beautify button not working
|
||||||
|
* Added bladeburner_analysis_mult to getPlayer() (@brubsby)
|
||||||
|
* Fixed joining bladeburner via netscript functions. (@omuretsu)
|
||||||
|
* All bladeburner actions are click-to-copy
|
||||||
|
* nerf noodle bar
|
||||||
|
|
||||||
|
v0.52.8 - 2021-08-23 Fixing the previous patch tbh ROUND 2 (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Script editor **
|
** Script editor **
|
||||||
@@ -23,7 +133,7 @@ v0.52.8 - 2021-07-23 Fixing the previous patch tbh ROUND 2 (hydroflame)
|
|||||||
* Removed some debug console.log
|
* Removed some debug console.log
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.7 - 2021-07-21 Fixing the previous patch tbh (hydroflame)
|
v0.52.7 - 2021-08-21 Fixing the previous patch tbh (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Netscript **
|
** Netscript **
|
||||||
@@ -51,7 +161,7 @@ v0.52.7 - 2021-07-21 Fixing the previous patch tbh (hydroflame)
|
|||||||
* Fix netscript write.
|
* Fix netscript write.
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.6 - 2021-07-21 Logboxes and VS-code (hydroflame)
|
v0.52.6 - 2021-08-21 Logboxes and VS-code (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Text Editor **
|
** Text Editor **
|
||||||
@@ -73,7 +183,7 @@ v0.52.6 - 2021-07-21 Logboxes and VS-code (hydroflame)
|
|||||||
* Remove dollar sign in blade contract UI element
|
* Remove dollar sign in blade contract UI element
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.5 - 2021-07-19 CPU cores are useful!? (hydroflame)
|
v0.52.5 - 2021-08-19 CPU cores are useful!? (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Terminal **
|
** Terminal **
|
||||||
@@ -99,7 +209,7 @@ v0.52.5 - 2021-07-19 CPU cores are useful!? (hydroflame)
|
|||||||
* Fix weird scrolling in the new Bladeburner React console.
|
* Fix weird scrolling in the new Bladeburner React console.
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.4 - 2021-07-19 Bladeburner in React (hydroflame)
|
v0.52.4 - 2021-08-19 Bladeburner in React (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Bladeburner **
|
** Bladeburner **
|
||||||
@@ -121,7 +231,7 @@ v0.52.4 - 2021-07-19 Bladeburner in React (hydroflame)
|
|||||||
* Linting (no one cares except the dev)
|
* Linting (no one cares except the dev)
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.3 - 2021-07-15 Gangs were OP (hydroflame)
|
v0.52.3 - 2021-08-15 Gangs were OP (hydroflame)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Gang **
|
** Gang **
|
||||||
@@ -144,7 +254,7 @@ v0.52.3 - 2021-07-15 Gangs were OP (hydroflame)
|
|||||||
* Factions list screen converted to React.
|
* Factions list screen converted to React.
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.2 - 2021-07-15 Oh yeah, BN11 is a thing (drunk hydroflame tbh)
|
v0.52.2 - 2021-08-15 Oh yeah, BN11 is a thing (drunk hydroflame tbh)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
** Source-Files **
|
** Source-Files **
|
||||||
@@ -162,7 +272,7 @@ v0.52.2 - 2021-07-15 Oh yeah, BN11 is a thing (drunk hydroflame tbh)
|
|||||||
|
|
||||||
* nerf noodle bar
|
* nerf noodle bar
|
||||||
|
|
||||||
v0.52.1 - 2021-07-10 bugfixing (hydroflame & community)
|
v0.52.1 - 2021-08-10 bugfixing (hydroflame & community)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
**Misc.**
|
**Misc.**
|
||||||
|
|||||||
@@ -64,9 +64,9 @@ documentation_title = '{0} Documentation'.format(project)
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '0.52'
|
version = '0.53'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '0.52.8'
|
release = '0.53.0'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ getGrowTime() Netscript Function
|
|||||||
:RAM cost: 0.05 GB
|
:RAM cost: 0.05 GB
|
||||||
|
|
||||||
:param string hostname: Hostname of target server.
|
: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.
|
:returns: seconds it takes to execute :doc:`grow<grow>` on that server.
|
||||||
|
|
||||||
The function takes in an optional ``hackLvl`` parameter that can be
|
The function takes in an optional ``hackLvl`` parameter that can be
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ getHackTime() Netscript Function
|
|||||||
|
|
||||||
:RAM cost: 0.05 GB
|
:RAM cost: 0.05 GB
|
||||||
:param string hostname: Hostname of target server.
|
: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.
|
:returns: seconds it takes to execute :doc:`hack<hack>` on that server.
|
||||||
|
|
||||||
The function takes in an optional ``hackLvl`` parameter that can be
|
The function takes in an optional ``hackLvl`` parameter that can be
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ getWeakenTime() Netscript Function
|
|||||||
|
|
||||||
:RAM cost: 0.05 GB
|
:RAM cost: 0.05 GB
|
||||||
:param string hostname: Hostname of target server.
|
: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
|
:returns: seconds it takes to execute the :doc:`weaken<weaken>` Netscript
|
||||||
function on the target server.
|
function on the target server.
|
||||||
|
|
||||||
|
|||||||
17
doc/source/netscript/basicfunctions/tprintf.rst
Normal file
17
doc/source/netscript/basicfunctions/tprintf.rst
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
tprint() Netscript Function
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. js:function:: tprintf(format, args...)
|
||||||
|
|
||||||
|
:RAM cost: 0 GB
|
||||||
|
:param format: Format of the string to be printed.
|
||||||
|
:param args: Values to be formatted
|
||||||
|
|
||||||
|
Prints a raw formatted string to the terminal.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
tprintf("Hello world!"); // Prints "Hello world!" to the terminal.
|
||||||
|
tprintf("Hello %s", "world!"); // Prints "Hello world!" to the terminal.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
getTrainingMul() Netscript Function
|
getTrainingMult() Netscript Function
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. js:function:: getTrainingMul()
|
.. js:function:: getTrainingMult()
|
||||||
|
|
||||||
:RAM cost: 0 GB
|
:RAM cost: 0 GB
|
||||||
:returns: The multiplier to training that hash upgrades provide to the player.
|
:returns: The multiplier to training that hash upgrades provide to the player.
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ This includes information such as function signatures, what they do, and their r
|
|||||||
sleep() <basicfunctions/sleep>
|
sleep() <basicfunctions/sleep>
|
||||||
print() <basicfunctions/print>
|
print() <basicfunctions/print>
|
||||||
tprint() <basicfunctions/tprint>
|
tprint() <basicfunctions/tprint>
|
||||||
|
tprintf() <basicfunctions/tprint>
|
||||||
clearLog() <basicfunctions/clearLog>
|
clearLog() <basicfunctions/clearLog>
|
||||||
disableLog() <basicfunctions/disableLog>
|
disableLog() <basicfunctions/disableLog>
|
||||||
enableLog() <basicfunctions/enableLog>
|
enableLog() <basicfunctions/enableLog>
|
||||||
|
|||||||
@@ -55,8 +55,10 @@ The player has access to all of these functions while in BitNode-4. Completing B
|
|||||||
getOwnedAugmentations() <singularityfunctions/getOwnedAugmentations>
|
getOwnedAugmentations() <singularityfunctions/getOwnedAugmentations>
|
||||||
getOwnedSourceFiles() <singularityfunctions/getOwnedSourceFiles>
|
getOwnedSourceFiles() <singularityfunctions/getOwnedSourceFiles>
|
||||||
getAugmentationsFromFaction() <singularityfunctions/getAugmentationsFromFaction>
|
getAugmentationsFromFaction() <singularityfunctions/getAugmentationsFromFaction>
|
||||||
getAugmentationPrereq() <singularityfunctions/getAugmentationPrereq>
|
|
||||||
getAugmentationCost() <singularityfunctions/getAugmentationCost>
|
getAugmentationCost() <singularityfunctions/getAugmentationCost>
|
||||||
|
getAugmentationPrereq() <singularityfunctions/getAugmentationPrereq>
|
||||||
|
getAugmentationPrice() <singularityfunctions/getAugmentationPrice>
|
||||||
|
getAugmentationRepReq() <singularityfunctions/getAugmentationRepReq>
|
||||||
getAugmentationStats() <singularityfunctions/getAugmentationStats>
|
getAugmentationStats() <singularityfunctions/getAugmentationStats>
|
||||||
purchaseAugmentation() <singularityfunctions/purchaseAugmentation>
|
purchaseAugmentation() <singularityfunctions/purchaseAugmentation>
|
||||||
installAugmentations() <singularityfunctions/installAugmentations>
|
installAugmentations() <singularityfunctions/installAugmentations>
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ getAugmentationCost() Netscript Function
|
|||||||
|
|
||||||
.. js:function:: getAugmentationCost(augName)
|
.. js:function:: getAugmentationCost(augName)
|
||||||
|
|
||||||
|
.. warning:: This function is deprecated.
|
||||||
|
|
||||||
:RAM cost: 5 GB
|
:RAM cost: 5 GB
|
||||||
:param string augName: Name of Augmentation. case-sensitive.
|
|
||||||
|
:param string augName: Name of Augmentation. CASE-SENSITIVE
|
||||||
|
|
||||||
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
|
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
|
||||||
|
|
||||||
This function returns an array with two elements that gives the cost for the specified Augmentation.
|
This function returns an array with two elements that gives the cost for the specified Augmentation.
|
||||||
The first element in the returned array is the reputation requirement of the Augmentation, and the second element is the money cost.
|
The first element in the returned array is the reputation requirement of the Augmentation, and the second element is the money cost.
|
||||||
|
|
||||||
If an invalid Augmentation name is passed in for the ``augName`` argument, this function will return the array [-1, -1].
|
If an invalid Augmentation name is passed in for the ``augName`` argument, this function will throw a runtime error.
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ getAugmentationPrereq() Netscript Function
|
|||||||
This function returns an array with the names of the prerequisite Augmentation(s) for the specified Augmentation.
|
This function returns an array with the names of the prerequisite Augmentation(s) for the specified Augmentation.
|
||||||
If there are no prerequisites, a blank array is returned.
|
If there are no prerequisites, a blank array is returned.
|
||||||
|
|
||||||
If an invalid Augmentation name is passed in for the *augName* argument, this function will return a blank array.
|
If an invalid Augmentation name is passed in for the *augName* argument, this function will throw a runtime error.
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
getAugmentationPrice() Netscript Function
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
.. js:function:: getAugmentationPrice(augName)
|
||||||
|
|
||||||
|
:RAM cost: 2.5 GB
|
||||||
|
|
||||||
|
:param string augName: Name of Augmentation. CASE-SENSITIVE
|
||||||
|
|
||||||
|
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
|
||||||
|
|
||||||
|
This function returns the money cost for the specified Augmentation.
|
||||||
|
|
||||||
|
If an invalid Augmentation name is passed in for the *augName* argument, this function will throw a runtime error.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
getAugmentationRepReq() Netscript Function
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
.. js:function:: getAugmentationRepReq(augName)
|
||||||
|
|
||||||
|
:RAM cost: 2.5 GB
|
||||||
|
|
||||||
|
:param string augName: Name of Augmentation. CASE-SENSITIVE
|
||||||
|
|
||||||
|
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
|
||||||
|
|
||||||
|
This function returns the reputation requirement for the specified Augmentation.
|
||||||
|
|
||||||
|
If an invalid Augmentation name is passed in for the *augName* argument, this function will throw a runtime error.
|
||||||
@@ -21,10 +21,11 @@ body {
|
|||||||
background-color: #eeeeec;
|
background-color: #eeeeec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Page layout */
|
/* Page layout */
|
||||||
|
|
||||||
div.header, div.content, div.footer {
|
div.header,
|
||||||
|
div.content,
|
||||||
|
div.footer {
|
||||||
width: 70em;
|
width: 70em;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
@@ -35,13 +36,13 @@ div.header-wrapper {
|
|||||||
border-bottom: 3px solid #2e3436;
|
border-bottom: 3px solid #2e3436;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Default body styles */
|
/* Default body styles */
|
||||||
a {
|
a {
|
||||||
color: #ce5c00;
|
color: #ce5c00;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.bodywrapper a, div.footer a {
|
div.bodywrapper a,
|
||||||
|
div.footer a {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,22 +59,25 @@ div.bodywrapper a, div.footer a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.line-block {
|
.line-block {
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.line-block .line-block {
|
.line-block .line-block {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
margin-left: 1.5em;
|
margin-left: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4 {
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4 {
|
||||||
font-family: "Georgia", "Times New Roman", serif;
|
font-family: "Georgia", "Times New Roman", serif;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #3465a4;
|
color: #3465a4;
|
||||||
margin-bottom: .8em;
|
margin-bottom: 0.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
@@ -81,14 +85,14 @@ h1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
padding-bottom: .5em;
|
padding-bottom: 0.5em;
|
||||||
border-bottom: 1px solid #3465a4;
|
border-bottom: 1px solid #3465a4;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.headerlink {
|
a.headerlink {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
color: #dddddd;
|
color: #dddddd;
|
||||||
padding-left: .3em;
|
padding-left: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1:hover > a.headerlink,
|
h1:hover > a.headerlink,
|
||||||
@@ -120,7 +124,8 @@ p.admonition-title {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
dt:target, .highlighted {
|
dt:target,
|
||||||
|
.highlighted {
|
||||||
background-color: #fbe54e;
|
background-color: #fbe54e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,8 +140,8 @@ div.header .headertitle {
|
|||||||
font-family: "Georgia", "Times New Roman", serif;
|
font-family: "Georgia", "Times New Roman", serif;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 180%;
|
font-size: 180%;
|
||||||
letter-spacing: .08em;
|
letter-spacing: 0.08em;
|
||||||
margin-bottom: .8em;
|
margin-bottom: 0.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.header .headertitle a {
|
div.header .headertitle a {
|
||||||
@@ -149,19 +154,18 @@ div.header div.rel {
|
|||||||
|
|
||||||
div.header div.rel a {
|
div.header div.rel a {
|
||||||
color: #fcaf3e;
|
color: #fcaf3e;
|
||||||
letter-spacing: .1em;
|
letter-spacing: 0.1em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.logo {
|
p.logo {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.logo {
|
img.logo {
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Content */
|
/* Content */
|
||||||
div.content-wrapper {
|
div.content-wrapper {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
@@ -190,7 +194,7 @@ div.document ul {
|
|||||||
|
|
||||||
div.document dd {
|
div.document dd {
|
||||||
margin-left: 1.2em;
|
margin-left: 1.2em;
|
||||||
margin-top: .4em;
|
margin-top: 0.4em;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,13 +210,13 @@ div.document div.highlight {
|
|||||||
background-color: #eeeeec;
|
background-color: #eeeeec;
|
||||||
border-top: 2px solid #dddddd;
|
border-top: 2px solid #dddddd;
|
||||||
border-bottom: 2px solid #dddddd;
|
border-bottom: 2px solid #dddddd;
|
||||||
margin-top: .8em;
|
margin-top: 0.8em;
|
||||||
margin-bottom: .8em;
|
margin-bottom: 0.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document div.literal-block-wrapper {
|
div.document div.literal-block-wrapper {
|
||||||
margin-top: .8em;
|
margin-top: 0.8em;
|
||||||
margin-bottom: .8em;
|
margin-bottom: 0.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document div.literal-block-wrapper div.highlight {
|
div.document div.literal-block-wrapper div.highlight {
|
||||||
@@ -220,19 +224,19 @@ div.document div.literal-block-wrapper div.highlight {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.document div.code-block-caption span.caption-number {
|
div.document div.code-block-caption span.caption-number {
|
||||||
padding: 0.1em 0.3em;
|
padding: 0.1em 0.3em;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document div.code-block-caption span.caption-text {
|
div.document div.code-block-caption span.caption-text {
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document h2 {
|
div.document h2 {
|
||||||
margin-top: .7em;
|
margin-top: 0.7em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document p {
|
div.document p {
|
||||||
margin-bottom: .5em;
|
margin-bottom: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document li.toctree-l1 {
|
div.document li.toctree-l1 {
|
||||||
@@ -244,7 +248,7 @@ div.document .descname {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.document .sig-paren {
|
div.document .sig-paren {
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.document .docutils.literal {
|
div.document .docutils.literal {
|
||||||
@@ -265,16 +269,15 @@ div.document ol {
|
|||||||
margin: 1.5em;
|
margin: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Sidebar */
|
/* Sidebar */
|
||||||
|
|
||||||
div.sidebar {
|
div.sidebar {
|
||||||
width: 20em;
|
width: 20em;
|
||||||
position:fixed;
|
position: fixed;
|
||||||
right: 10%;
|
right: 10%;
|
||||||
height:75%;
|
height: 75%;
|
||||||
font-size: .9em;
|
font-size: 0.9em;
|
||||||
overflow-y:auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
div.sidebar {
|
div.sidebar {
|
||||||
@@ -284,11 +287,13 @@ div.sidebar {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
div.sidebar a, div.header a {
|
div.sidebar a,
|
||||||
|
div.header a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.sidebar a:hover, div.header a:hover {
|
div.sidebar a:hover,
|
||||||
|
div.header a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,7 +301,7 @@ div.sidebar h3 {
|
|||||||
color: #2e3436;
|
color: #2e3436;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 130%;
|
font-size: 130%;
|
||||||
letter-spacing: .1em;
|
letter-spacing: 0.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.sidebar ul {
|
div.sidebar ul {
|
||||||
@@ -308,7 +313,7 @@ div.sidebar li.toctree-l1 a {
|
|||||||
padding: 1px;
|
padding: 1px;
|
||||||
border: 1px solid #dddddd;
|
border: 1px solid #dddddd;
|
||||||
background-color: #eeeeec;
|
background-color: #eeeeec;
|
||||||
margin-bottom: .4em;
|
margin-bottom: 0.4em;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
color: #2e3436;
|
color: #2e3436;
|
||||||
}
|
}
|
||||||
@@ -347,7 +352,6 @@ div.sidebar input[type="submit"] {
|
|||||||
width: 30px;
|
width: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Footer */
|
/* Footer */
|
||||||
|
|
||||||
div.footer-wrapper {
|
div.footer-wrapper {
|
||||||
@@ -358,7 +362,8 @@ div.footer-wrapper {
|
|||||||
min-height: 80px;
|
min-height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.footer, div.footer a {
|
div.footer,
|
||||||
|
div.footer a {
|
||||||
color: #888a85;
|
color: #888a85;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,48 +375,53 @@ div.footer .left {
|
|||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Styles copied from basic theme */
|
/* Styles copied from basic theme */
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left {
|
img.align-left,
|
||||||
clear: left;
|
.figure.align-left,
|
||||||
float: left;
|
object.align-left {
|
||||||
margin-right: 1em;
|
clear: left;
|
||||||
|
float: left;
|
||||||
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right {
|
img.align-right,
|
||||||
clear: right;
|
.figure.align-right,
|
||||||
float: right;
|
object.align-right {
|
||||||
margin-left: 1em;
|
clear: right;
|
||||||
|
float: right;
|
||||||
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
img.align-center,
|
||||||
|
.figure.align-center,
|
||||||
|
object.align-center {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-left {
|
.align-left {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-center {
|
.align-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-right {
|
.align-right {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
table caption span.caption-number {
|
table caption span.caption-number {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
table caption span.caption-text {
|
table caption span.caption-text {
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-number {
|
div.figure p.caption span.caption-number {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-text {
|
div.figure p.caption span.caption-text {
|
||||||
@@ -420,122 +430,122 @@ div.figure p.caption span.caption-text {
|
|||||||
/* -- search page ----------------------------------------------------------- */
|
/* -- search page ----------------------------------------------------------- */
|
||||||
|
|
||||||
ul.search {
|
ul.search {
|
||||||
margin: 10px 0 0 20px;
|
margin: 10px 0 0 20px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.search li {
|
ul.search li {
|
||||||
padding: 5px 0 5px 20px;
|
padding: 5px 0 5px 20px;
|
||||||
background-image: url(file.png);
|
background-image: url(file.png);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 0 7px;
|
background-position: 0 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.search li a {
|
ul.search li a {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.search li div.context {
|
ul.search li div.context {
|
||||||
color: #888;
|
color: #888;
|
||||||
margin: 2px 0 0 30px;
|
margin: 2px 0 0 30px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.keywordmatches li.goodmatch a {
|
ul.keywordmatches li.goodmatch a {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- index page ------------------------------------------------------------ */
|
/* -- index page ------------------------------------------------------------ */
|
||||||
|
|
||||||
table.contentstable {
|
table.contentstable {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.contentstable p.biglink {
|
table.contentstable p.biglink {
|
||||||
line-height: 150%;
|
line-height: 150%;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.biglink {
|
a.biglink {
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
span.linkdescr {
|
span.linkdescr {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- general index --------------------------------------------------------- */
|
/* -- general index --------------------------------------------------------- */
|
||||||
|
|
||||||
table.indextable td {
|
table.indextable td {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.indextable ul {
|
table.indextable ul {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.indextable > tbody > tr > td > ul {
|
table.indextable > tbody > tr > td > ul {
|
||||||
padding-left: 0em;
|
padding-left: 0em;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.indextable tr.pcap {
|
table.indextable tr.pcap {
|
||||||
height: 10px;
|
height: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.indextable tr.cap {
|
table.indextable tr.cap {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
background-color: #f2f2f2;
|
background-color: #f2f2f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.toggler {
|
img.toggler {
|
||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- domain module index --------------------------------------------------- */
|
/* -- domain module index --------------------------------------------------- */
|
||||||
|
|
||||||
table.modindextable td {
|
table.modindextable td {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- viewcode extension ---------------------------------------------------- */
|
/* -- viewcode extension ---------------------------------------------------- */
|
||||||
|
|
||||||
.viewcode-link {
|
.viewcode-link {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.viewcode-back {
|
.viewcode-back {
|
||||||
float: right;
|
float: right;
|
||||||
font-family:: "Verdana", Arial, sans-serif;
|
font-family: "Verdana", Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.viewcode-block:target {
|
div.viewcode-block:target {
|
||||||
margin: -1px -3px;
|
margin: -1px -3px;
|
||||||
padding: 0 3px;
|
padding: 0 3px;
|
||||||
background-color: #f4debf;
|
background-color: #f4debf;
|
||||||
border-top: 1px solid #ac9;
|
border-top: 1px solid #ac9;
|
||||||
border-bottom: 1px solid #ac9;
|
border-bottom: 1px solid #ac9;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.code-block-caption {
|
div.code-block-caption {
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
color: #333;
|
color: #333;
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- math display ---------------------------------------------------------- */
|
/* -- math display ---------------------------------------------------------- */
|
||||||
|
|
||||||
div.body div.math p {
|
div.body div.math p {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
span.eqno {
|
span.eqno {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
.wy-nav-content {
|
.wy-nav-content {
|
||||||
max-width: none;
|
max-width: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
version: "3.4"
|
version: "3.4"
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
image: bitburner:dev
|
image: bitburner:dev
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
target: dev
|
target: dev
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./src:/app/src
|
- ./src:/app/src
|
||||||
- ./css:/app/css
|
- ./css:/app/css
|
||||||
- ./utils:/app/utils
|
- ./utils:/app/utils
|
||||||
- ./test:/app/test
|
- ./test:/app/test
|
||||||
|
|||||||
1018
index.html
1018
index.html
File diff suppressed because it is too large
Load Diff
9
jest.config.js
Normal file
9
jest.config.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
module.exports = {
|
||||||
|
setupFiles: ["./jest.setup.js"],
|
||||||
|
moduleFileExtensions: ["ts", "tsx", "js", "jsx"],
|
||||||
|
transform: {
|
||||||
|
"^.+\\.(js|jsx|ts|tsx)$": "babel-jest",
|
||||||
|
},
|
||||||
|
// testMatch: ["**/?(*.)+(test).[jt]s?(x)"],
|
||||||
|
testEnvironment: "jsdom",
|
||||||
|
};
|
||||||
2
jest.setup.js
Normal file
2
jest.setup.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import "regenerator-runtime/runtime";
|
||||||
|
global.$ = require("jquery");
|
||||||
26035
package-lock.json
generated
26035
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
50
package.json
50
package.json
@@ -12,8 +12,8 @@
|
|||||||
"@types/numeral": "0.0.25",
|
"@types/numeral": "0.0.25",
|
||||||
"@types/react": "^16.8.6",
|
"@types/react": "^16.8.6",
|
||||||
"@types/react-dom": "^16.8.2",
|
"@types/react-dom": "^16.8.2",
|
||||||
"acorn": "^6.4.1",
|
"acorn": "^8.4.1",
|
||||||
"acorn-walk": "^6.2.0",
|
"acorn-walk": "^8.1.1",
|
||||||
"ajv": "^5.1.5",
|
"ajv": "^5.1.5",
|
||||||
"ajv-keywords": "^2.0.0",
|
"ajv-keywords": "^2.0.0",
|
||||||
"arg": "^5.0.0",
|
"arg": "^5.0.0",
|
||||||
@@ -31,9 +31,11 @@
|
|||||||
"jshint": "^2.10.2",
|
"jshint": "^2.10.2",
|
||||||
"json-loader": "^0.5.4",
|
"json-loader": "^0.5.4",
|
||||||
"jsplumb": "^2.6.8",
|
"jsplumb": "^2.6.8",
|
||||||
"jszip": "^3.1.5",
|
"jszip": "^3.7.0",
|
||||||
"loader-runner": "^2.3.0",
|
"loader-runner": "^2.3.0",
|
||||||
"loader-utils": "^1.1.0",
|
"loader-utils": "^1.1.0",
|
||||||
|
"mathjax-full": "^3.2.0",
|
||||||
|
"mathjax-react": "^1.0.6",
|
||||||
"memory-fs": "~0.4.1",
|
"memory-fs": "~0.4.1",
|
||||||
"monaco-editor": "^0.27.0",
|
"monaco-editor": "^0.27.0",
|
||||||
"node-sass": "^6.0.1",
|
"node-sass": "^6.0.1",
|
||||||
@@ -44,31 +46,38 @@
|
|||||||
"react-modal": "^3.12.1",
|
"react-modal": "^3.12.1",
|
||||||
"sprintf-js": "^1.1.1",
|
"sprintf-js": "^1.1.1",
|
||||||
"tapable": "^1.0.0",
|
"tapable": "^1.0.0",
|
||||||
|
"treant-js": "^1.0.1",
|
||||||
"uuid": "^3.2.1",
|
"uuid": "^3.2.1",
|
||||||
"w3c-blob": "0.0.1"
|
"w3c-blob": "0.0.1"
|
||||||
},
|
},
|
||||||
"description": "A cyberpunk-themed incremental game",
|
"description": "A cyberpunk-themed incremental game",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.3.4",
|
"@babel/core": "^7.3.4",
|
||||||
|
"@babel/preset-env": "^7.15.0",
|
||||||
"@babel/preset-react": "^7.0.0",
|
"@babel/preset-react": "^7.0.0",
|
||||||
"@types/chai": "^4.1.7",
|
"@babel/preset-typescript": "^7.15.0",
|
||||||
|
"@testing-library/cypress": "^8.0.1",
|
||||||
|
"@types/jest": "^27.0.1",
|
||||||
"@types/lodash": "^4.14.168",
|
"@types/lodash": "^4.14.168",
|
||||||
"@types/mocha": "^5.2.7",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^4.22.0",
|
"@typescript-eslint/eslint-plugin": "^4.22.0",
|
||||||
"@typescript-eslint/parser": "^4.22.0",
|
"@typescript-eslint/parser": "^4.22.0",
|
||||||
|
"babel-jest": "^27.0.6",
|
||||||
"babel-loader": "^8.0.5",
|
"babel-loader": "^8.0.5",
|
||||||
"beautify-lint": "^1.0.3",
|
"beautify-lint": "^1.0.3",
|
||||||
"benchmark": "^2.1.1",
|
"benchmark": "^2.1.1",
|
||||||
"bundle-loader": "~0.5.0",
|
"bundle-loader": "~0.5.0",
|
||||||
"chai": "^4.2.0",
|
|
||||||
"css-loader": "^0.28.11",
|
"css-loader": "^0.28.11",
|
||||||
|
"cypress": "^8.3.1",
|
||||||
"es6-promise-polyfill": "^1.1.1",
|
"es6-promise-polyfill": "^1.1.1",
|
||||||
"eslint": "^7.24.0",
|
"eslint": "^7.24.0",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"file-loader": "^1.1.11",
|
"file-loader": "^1.1.11",
|
||||||
|
"fork-ts-checker-webpack-plugin": "^6.3.3",
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
|
"http-server": "^13.0.1",
|
||||||
"i18n-webpack-plugin": "^1.0.0",
|
"i18n-webpack-plugin": "^1.0.0",
|
||||||
"istanbul": "^0.4.5",
|
"istanbul": "^0.4.5",
|
||||||
|
"jest": "^27.1.0",
|
||||||
"js-beautify": "^1.5.10",
|
"js-beautify": "^1.5.10",
|
||||||
"jsdom": "^15.0.0",
|
"jsdom": "^15.0.0",
|
||||||
"jsdom-global": "^3.0.2",
|
"jsdom-global": "^3.0.2",
|
||||||
@@ -78,30 +87,30 @@
|
|||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mini-css-extract-plugin": "^0.4.1",
|
"mini-css-extract-plugin": "^0.4.1",
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"mocha": "^6.1.4",
|
|
||||||
"mochapack": "^1.1.1",
|
|
||||||
"null-loader": "^1.0.0",
|
"null-loader": "^1.0.0",
|
||||||
|
"prettier": "^2.3.2",
|
||||||
"raw-loader": "~0.5.0",
|
"raw-loader": "~0.5.0",
|
||||||
|
"regenerator-runtime": "^0.13.9",
|
||||||
"sass-loader": "^7.0.3",
|
"sass-loader": "^7.0.3",
|
||||||
"script-loader": "~0.7.0",
|
"script-loader": "~0.7.0",
|
||||||
"should": "^11.1.1",
|
"should": "^11.1.1",
|
||||||
"simple-git": "^1.96.0",
|
"simple-git": "^1.96.0",
|
||||||
"sinon": "^2.3.2",
|
"sinon": "^2.3.2",
|
||||||
"source-map": "^0.7.3",
|
"source-map": "^0.7.3",
|
||||||
|
"start-server-and-test": "^1.14.0",
|
||||||
"style-loader": "^0.21.0",
|
"style-loader": "^0.21.0",
|
||||||
"stylelint": "^9.2.1",
|
"stylelint": "^9.2.1",
|
||||||
"stylelint-declaration-use-variable": "^1.6.1",
|
"stylelint-declaration-use-variable": "^1.6.1",
|
||||||
"stylelint-order": "^0.8.1",
|
"stylelint-order": "^0.8.1",
|
||||||
"ts-loader": "^4.5.0",
|
|
||||||
"typescript": "^4.2.4",
|
"typescript": "^4.2.4",
|
||||||
"uglify-es": "^3.3.9",
|
"uglify-es": "^3.3.9",
|
||||||
"uglifyjs-webpack-plugin": "^1.3.0",
|
"uglifyjs-webpack-plugin": "^1.3.0",
|
||||||
"url-loader": "^1.0.1",
|
"url-loader": "^1.0.1",
|
||||||
"watchpack": "^1.6.0",
|
"watchpack": "^1.6.0",
|
||||||
"webpack": "^4.12.0",
|
"webpack": "^4.46.0",
|
||||||
"webpack-cli": "^3.0.4",
|
"webpack-cli": "^3.3.12",
|
||||||
"webpack-dev-middleware": "^3.1.3",
|
"webpack-dev-middleware": "^3.7.3",
|
||||||
"webpack-dev-server": "^3.2.1",
|
"webpack-dev-server": "^3.11.2",
|
||||||
"worker-loader": "^2.0.0"
|
"worker-loader": "^2.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -115,19 +124,24 @@
|
|||||||
"url": "git+https://github.com/danielyxie/bitburner.git"
|
"url": "git+https://github.com/danielyxie/bitburner.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"cy:test": "start-server-and-test start http://localhost:8000 cy:run",
|
||||||
|
"cy:dev": "start-server-and-test start:dev http://localhost:8000 cy:open",
|
||||||
|
"cy:open": "cypress open",
|
||||||
|
"cy:run": "cypress run",
|
||||||
|
"format": "prettier --write .",
|
||||||
|
"start": "http-server -p 8000",
|
||||||
"start:dev": "webpack-dev-server --progress --env.devServer --mode development",
|
"start:dev": "webpack-dev-server --progress --env.devServer --mode development",
|
||||||
"start:container": "webpack-dev-server --progress --env.devServer --mode development --env.runInContainer",
|
"start:container": "webpack-dev-server --progress --env.devServer --mode development --env.runInContainer",
|
||||||
"build": "webpack --mode production",
|
"build": "webpack --mode production",
|
||||||
"build:dev": "webpack --mode development",
|
"build:dev": "webpack --mode development",
|
||||||
"build:test": "webpack --config webpack.config-test.js",
|
|
||||||
"lint": "npm run lint:jsts & npm run lint:style",
|
"lint": "npm run lint:jsts & npm run lint:style",
|
||||||
"lint:jsts": "eslint --fix '*.{js,jsx,ts,tsx}' './src/**/*.{js,jsx,ts,tsx}' './test/**/*.{js,jsx,ts,tsx}' './utils/**/*.{js,jsx,ts,tsx}'",
|
"lint:jsts": "eslint --fix . --ext js,jsx,ts,tsx",
|
||||||
"lint:style": "stylelint --fix ./css/*",
|
"lint:style": "stylelint --fix ./css/*",
|
||||||
"preinstall": "node ./scripts/engines-check.js",
|
"preinstall": "node ./scripts/engines-check.js",
|
||||||
"test": "mochapack --webpack-config webpack.config-test.js -r jsdom-global/register ./test/index.js",
|
"test": "jest",
|
||||||
"test:container": "mochapack --webpack-config webpack.config-test.js --slow 2000 --timeout 10000 -r jsdom-global/register ./test/index.js",
|
"test:watch": "jest --watch",
|
||||||
"watch": "webpack --watch --mode production",
|
"watch": "webpack --watch --mode production",
|
||||||
"watch:dev": "webpack --watch --mode development"
|
"watch:dev": "webpack --watch --mode development"
|
||||||
},
|
},
|
||||||
"version": "0.52.8"
|
"version": "0.53.0"
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -62,9 +62,12 @@ getPackageJson()
|
|||||||
.then(getEngines)
|
.then(getEngines)
|
||||||
.then(checkNodeVersion)
|
.then(checkNodeVersion)
|
||||||
.then(checkNpmVersion)
|
.then(checkNpmVersion)
|
||||||
.then(() => true, (error) => {
|
.then(
|
||||||
// Specifically disable these as the error message gets lost in the normal unhandled output.
|
() => true,
|
||||||
/* eslint-disable no-console, no-process-exit */
|
(error) => {
|
||||||
console.error(error);
|
// Specifically disable these as the error message gets lost in the normal unhandled output.
|
||||||
process.exit(1);
|
/* eslint-disable no-console, no-process-exit */
|
||||||
});
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|||||||
@@ -82,7 +82,9 @@ src[NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
|
|||||||
// ## Main Version
|
// ## Main Version
|
||||||
// Three dot-separated numeric identifiers.
|
// Three dot-separated numeric identifiers.
|
||||||
src[MAINVERSION] = `(${src[NUMERICIDENTIFIER]})\\.(${src[NUMERICIDENTIFIER]})\\.(${src[NUMERICIDENTIFIER]})`;
|
src[MAINVERSION] = `(${src[NUMERICIDENTIFIER]})\\.(${src[NUMERICIDENTIFIER]})\\.(${src[NUMERICIDENTIFIER]})`;
|
||||||
src[MAINVERSIONLOOSE] = `(${src[NUMERICIDENTIFIERLOOSE]})\\.(${src[NUMERICIDENTIFIERLOOSE]})\\.(${src[NUMERICIDENTIFIERLOOSE]})`;
|
src[
|
||||||
|
MAINVERSIONLOOSE
|
||||||
|
] = `(${src[NUMERICIDENTIFIERLOOSE]})\\.(${src[NUMERICIDENTIFIERLOOSE]})\\.(${src[NUMERICIDENTIFIERLOOSE]})`;
|
||||||
|
|
||||||
// ## Pre-release Version Identifier
|
// ## Pre-release Version Identifier
|
||||||
// A numeric identifier, or a non-numeric identifier.
|
// A numeric identifier, or a non-numeric identifier.
|
||||||
@@ -123,10 +125,14 @@ src[XRANGEIDENTIFIERLOOSE] = `${src[NUMERICIDENTIFIERLOOSE]}|x|X|\\*`;
|
|||||||
src[XRANGEIDENTIFIER] = `${src[NUMERICIDENTIFIER]}|x|X|\\*`;
|
src[XRANGEIDENTIFIER] = `${src[NUMERICIDENTIFIER]}|x|X|\\*`;
|
||||||
|
|
||||||
/* eslint-disable-next-line max-len */
|
/* eslint-disable-next-line max-len */
|
||||||
src[XRANGEPLAIN] = `[v=\\s]*(${src[XRANGEIDENTIFIER]})(?:\\.(${src[XRANGEIDENTIFIER]})(?:\\.(${src[XRANGEIDENTIFIER]})(?:${src[PRERELEASE]})?${src[BUILD]}?)?)?`;
|
src[
|
||||||
|
XRANGEPLAIN
|
||||||
|
] = `[v=\\s]*(${src[XRANGEIDENTIFIER]})(?:\\.(${src[XRANGEIDENTIFIER]})(?:\\.(${src[XRANGEIDENTIFIER]})(?:${src[PRERELEASE]})?${src[BUILD]}?)?)?`;
|
||||||
|
|
||||||
/* eslint-disable-next-line max-len */
|
/* eslint-disable-next-line max-len */
|
||||||
src[XRANGEPLAINLOOSE] = `[v=\\s]*(${src[XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[XRANGEIDENTIFIERLOOSE]})(?:${src[PRERELEASELOOSE]})?${src[BUILD]}?)?)?`;
|
src[XRANGEPLAINLOOSE] =
|
||||||
|
`[v=\\s]*(${src[XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[XRANGEIDENTIFIERLOOSE]})` +
|
||||||
|
`(?:\\.(${src[XRANGEIDENTIFIERLOOSE]})(?:${src[PRERELEASELOOSE]})?${src[BUILD]}?)?)?`;
|
||||||
|
|
||||||
src[XRANGE] = `^${src[GTLT]}\\s*${src[XRANGEPLAIN]}$`;
|
src[XRANGE] = `^${src[GTLT]}\\s*${src[XRANGEPLAIN]}$`;
|
||||||
src[XRANGELOOSE] = `^${src[GTLT]}\\s*${src[XRANGEPLAINLOOSE]}$`;
|
src[XRANGELOOSE] = `^${src[GTLT]}\\s*${src[XRANGEPLAINLOOSE]}$`;
|
||||||
@@ -134,7 +140,9 @@ src[XRANGELOOSE] = `^${src[GTLT]}\\s*${src[XRANGEPLAINLOOSE]}$`;
|
|||||||
// Coercion.
|
// Coercion.
|
||||||
// Extract anything that could conceivably be a part of a valid semver
|
// Extract anything that could conceivably be a part of a valid semver
|
||||||
/* eslint-disable-next-line max-len */
|
/* eslint-disable-next-line max-len */
|
||||||
src[COERCE] = `(?:^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:$|[^\\d])`;
|
src[
|
||||||
|
COERCE
|
||||||
|
] = `(?:^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:$|[^\\d])`;
|
||||||
|
|
||||||
// Tilde ranges.
|
// Tilde ranges.
|
||||||
// Meaning is "reasonably at or greater than"
|
// Meaning is "reasonably at or greater than"
|
||||||
@@ -222,10 +230,7 @@ function compareIdentifiers(left, right) {
|
|||||||
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
||||||
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
||||||
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
||||||
function hyphenReplace($0,
|
function hyphenReplace($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) {
|
||||||
from, fM, fm, fp, fpr, fb,
|
|
||||||
to, tM, tm, tp, tpr) {
|
|
||||||
|
|
||||||
if (isX(fM)) {
|
if (isX(fM)) {
|
||||||
from = "";
|
from = "";
|
||||||
} else if (isX(fm)) {
|
} else if (isX(fm)) {
|
||||||
@@ -254,7 +259,7 @@ function hyphenReplace($0,
|
|||||||
function replaceTilde(comp, loose) {
|
function replaceTilde(comp, loose) {
|
||||||
const regex = loose ? re[TILDELOOSE] : re[TILDE];
|
const regex = loose ? re[TILDELOOSE] : re[TILDE];
|
||||||
|
|
||||||
return comp.replace(regex, function(match, major, minor, patch, prerelease) {
|
return comp.replace(regex, function (match, major, minor, patch, prerelease) {
|
||||||
let ret;
|
let ret;
|
||||||
|
|
||||||
if (isX(major)) {
|
if (isX(major)) {
|
||||||
@@ -295,7 +300,7 @@ function replaceTildes(comp, loose) {
|
|||||||
function replaceCaret(comp, loose) {
|
function replaceCaret(comp, loose) {
|
||||||
const regex = loose ? re[CARETLOOSE] : re[CARET];
|
const regex = loose ? re[CARETLOOSE] : re[CARET];
|
||||||
|
|
||||||
return comp.replace(regex, function(match, major, minor, patch, prerelease) {
|
return comp.replace(regex, function (match, major, minor, patch, prerelease) {
|
||||||
let ret;
|
let ret;
|
||||||
|
|
||||||
if (isX(major)) {
|
if (isX(major)) {
|
||||||
@@ -353,7 +358,7 @@ function replaceXRange(comp, loose) {
|
|||||||
comp = comp.trim();
|
comp = comp.trim();
|
||||||
const regex = loose ? re[XRANGELOOSE] : re[XRANGE];
|
const regex = loose ? re[XRANGELOOSE] : re[XRANGE];
|
||||||
|
|
||||||
return comp.replace(regex, function(ret, operator, major, minor, patch) {
|
return comp.replace(regex, function (ret, operator, major, minor, patch) {
|
||||||
const xM = isX(major);
|
const xM = isX(major);
|
||||||
const xm = xM || isX(minor);
|
const xm = xM || isX(minor);
|
||||||
const xp = xm || isX(patch);
|
const xp = xm || isX(patch);
|
||||||
@@ -441,11 +446,11 @@ function parseComparator(comp, loose) {
|
|||||||
class SemVer {
|
class SemVer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A semantic version.
|
* A semantic version.
|
||||||
* @param {string} version The version.
|
* @param {string} version The version.
|
||||||
* @param {boolean} loose If this is a loose representation of a version.
|
* @param {boolean} loose If this is a loose representation of a version.
|
||||||
* @returns {SemVer} a new instance.
|
* @returns {SemVer} a new instance.
|
||||||
*/
|
*/
|
||||||
constructor(version, loose) {
|
constructor(version, loose) {
|
||||||
if (version instanceof SemVer) {
|
if (version instanceof SemVer) {
|
||||||
if (version.loose === loose) {
|
if (version.loose === loose) {
|
||||||
@@ -483,7 +488,7 @@ class SemVer {
|
|||||||
// Numberify any prerelease numeric ids
|
// Numberify any prerelease numeric ids
|
||||||
if (matches[4]) {
|
if (matches[4]) {
|
||||||
this.prerelease = matches[4].split(".").map((id) => {
|
this.prerelease = matches[4].split(".").map((id) => {
|
||||||
if (/^[0-9]+$/.test(id)) {
|
if ((/^[0-9]+$/).test(id)) {
|
||||||
const num = Number(id);
|
const num = Number(id);
|
||||||
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||||||
return num;
|
return num;
|
||||||
@@ -513,10 +518,10 @@ class SemVer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comares the current instance against another instance.
|
* Comares the current instance against another instance.
|
||||||
* @param {SemVer} other The SemVer to comare to.
|
* @param {SemVer} other The SemVer to comare to.
|
||||||
* @returns {0|1|-1} A comparable value for sorting.
|
* @returns {0|1|-1} A comparable value for sorting.
|
||||||
*/
|
*/
|
||||||
compare(other) {
|
compare(other) {
|
||||||
return this.compareMain(other) || this.comparePre(other);
|
return this.compareMain(other) || this.comparePre(other);
|
||||||
}
|
}
|
||||||
@@ -526,7 +531,9 @@ class SemVer {
|
|||||||
other = new SemVer(other, this.loose);
|
other = new SemVer(other, this.loose);
|
||||||
}
|
}
|
||||||
|
|
||||||
return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
|
return (
|
||||||
|
compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
comparePre(other) {
|
comparePre(other) {
|
||||||
@@ -629,10 +636,10 @@ function testSet(set, version) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (version.prerelease.length) {
|
if (version.prerelease.length) {
|
||||||
// Find the set of versions that are allowed to have prereleases
|
// Find the set of versions that are allowed to have prereleases
|
||||||
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
||||||
// That should allow `1.2.3-pr.2` to pass.
|
// That should allow `1.2.3-pr.2` to pass.
|
||||||
// However, `1.2.4-alpha.notready` should NOT be allowed, even though it's within the range set by the comparators.
|
// However, `1.2.4-alpha.notready` should NOT be allowed, even though it's within the range set by the comparators.
|
||||||
for (let idx = 0; idx < set.length; idx++) {
|
for (let idx = 0; idx < set.length; idx++) {
|
||||||
if (set[idx].semver !== ANY) {
|
if (set[idx].semver !== ANY) {
|
||||||
if (set[idx].semver.prerelease.length > 0) {
|
if (set[idx].semver.prerelease.length > 0) {
|
||||||
@@ -728,14 +735,16 @@ class Range {
|
|||||||
this.loose = loose;
|
this.loose = loose;
|
||||||
// First, split based on boolean or ||
|
// First, split based on boolean or ||
|
||||||
/**
|
/**
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.raw = range;
|
this.raw = range;
|
||||||
// Throw out any that are not relevant for whatever reason
|
// Throw out any that are not relevant for whatever reason
|
||||||
const hasLength = (item) => item.length;
|
const hasLength = (item) => item.length;
|
||||||
this.set = this.raw.split(/\s*\|\|\s*/).map(function (range1) {
|
this.set = this.raw
|
||||||
return this.parseRange(range1.trim());
|
.split(/\s*\|\|\s*/)
|
||||||
}, this)
|
.map(function (range1) {
|
||||||
|
return this.parseRange(range1.trim());
|
||||||
|
}, this)
|
||||||
.filter(hasLength);
|
.filter(hasLength);
|
||||||
if (!this.set.length) {
|
if (!this.set.length) {
|
||||||
throw new TypeError(`Invalid SemVer Range: ${range}`);
|
throw new TypeError(`Invalid SemVer Range: ${range}`);
|
||||||
@@ -744,7 +753,8 @@ class Range {
|
|||||||
}
|
}
|
||||||
|
|
||||||
format() {
|
format() {
|
||||||
this.range = this.set.map((comps) => comps.join(" ").trim())
|
this.range = this.set
|
||||||
|
.map((comps) => comps.join(" ").trim())
|
||||||
.join("||")
|
.join("||")
|
||||||
.trim();
|
.trim();
|
||||||
|
|
||||||
@@ -771,7 +781,9 @@ class Range {
|
|||||||
range = range.split(/\s+/).join(" ");
|
range = range.split(/\s+/).join(" ");
|
||||||
// At this point, the range is completely trimmed and ready to be split into comparators.
|
// At this point, the range is completely trimmed and ready to be split into comparators.
|
||||||
const compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
|
const compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
|
||||||
let set = range.split(" ").map((comp) => parseComparator(comp, loose))
|
let set = range
|
||||||
|
.split(" ")
|
||||||
|
.map((comp) => parseComparator(comp, loose))
|
||||||
.join(" ")
|
.join(" ")
|
||||||
.split(/\s+/);
|
.split(/\s+/);
|
||||||
if (loose) {
|
if (loose) {
|
||||||
|
|||||||
164
src/Alias.ts
164
src/Alias.ts
@@ -5,89 +5,91 @@ export let Aliases: IMap<string> = {};
|
|||||||
export let GlobalAliases: IMap<string> = {};
|
export let GlobalAliases: IMap<string> = {};
|
||||||
|
|
||||||
export function loadAliases(saveString: string): void {
|
export function loadAliases(saveString: string): void {
|
||||||
if (saveString === "") {
|
if (saveString === "") {
|
||||||
Aliases = {};
|
Aliases = {};
|
||||||
} else {
|
} else {
|
||||||
Aliases = JSON.parse(saveString);
|
Aliases = JSON.parse(saveString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadGlobalAliases(saveString: string): void {
|
export function loadGlobalAliases(saveString: string): void {
|
||||||
if (saveString === "") {
|
if (saveString === "") {
|
||||||
GlobalAliases = {};
|
GlobalAliases = {};
|
||||||
} else {
|
} else {
|
||||||
GlobalAliases = JSON.parse(saveString);
|
GlobalAliases = JSON.parse(saveString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prints all aliases to terminal
|
// Prints all aliases to terminal
|
||||||
export function printAliases(): void {
|
export function printAliases(): void {
|
||||||
for (const name in Aliases) {
|
for (const name in Aliases) {
|
||||||
if (Aliases.hasOwnProperty(name)) {
|
if (Aliases.hasOwnProperty(name)) {
|
||||||
post("alias " + name + "=" + Aliases[name]);
|
post("alias " + name + "=" + Aliases[name]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (const name in GlobalAliases) {
|
}
|
||||||
if (GlobalAliases.hasOwnProperty(name)) {
|
for (const name in GlobalAliases) {
|
||||||
post("global alias " + name + "=" + GlobalAliases[name]);
|
if (GlobalAliases.hasOwnProperty(name)) {
|
||||||
}
|
post("global alias " + name + "=" + GlobalAliases[name]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if successful, false otherwise
|
// Returns true if successful, false otherwise
|
||||||
export function parseAliasDeclaration(dec: string, global = false): boolean {
|
export function parseAliasDeclaration(dec: string, global = false): boolean {
|
||||||
const re = /^([_|\w|!|%|,|@]+)="(.+)"$/;
|
const re = /^([_|\w|!|%|,|@]+)="(.+)"$/;
|
||||||
const matches = dec.match(re);
|
const matches = dec.match(re);
|
||||||
if (matches == null || matches.length != 3) {return false;}
|
if (matches == null || matches.length != 3) {
|
||||||
if (global){
|
return false;
|
||||||
addGlobalAlias(matches[1],matches[2]);
|
}
|
||||||
} else {
|
if (global) {
|
||||||
addAlias(matches[1], matches[2]);
|
addGlobalAlias(matches[1], matches[2]);
|
||||||
}
|
} else {
|
||||||
return true;
|
addAlias(matches[1], matches[2]);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addAlias(name: string, value: string): void {
|
function addAlias(name: string, value: string): void {
|
||||||
if (name in GlobalAliases) {
|
if (name in GlobalAliases) {
|
||||||
delete GlobalAliases[name];
|
delete GlobalAliases[name];
|
||||||
}
|
}
|
||||||
Aliases[name] = value.trim();
|
Aliases[name] = value.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
function addGlobalAlias(name: string, value: string): void {
|
function addGlobalAlias(name: string, value: string): void {
|
||||||
if (name in Aliases){
|
if (name in Aliases) {
|
||||||
delete Aliases[name];
|
delete Aliases[name];
|
||||||
}
|
}
|
||||||
GlobalAliases[name] = value.trim();
|
GlobalAliases[name] = value.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAlias(name: string): string | null {
|
function getAlias(name: string): string | null {
|
||||||
if (Aliases.hasOwnProperty(name)) {
|
if (Aliases.hasOwnProperty(name)) {
|
||||||
return Aliases[name];
|
return Aliases[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGlobalAlias(name: string): string | null {
|
function getGlobalAlias(name: string): string | null {
|
||||||
if (GlobalAliases.hasOwnProperty(name)) {
|
if (GlobalAliases.hasOwnProperty(name)) {
|
||||||
return GlobalAliases[name];
|
return GlobalAliases[name];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeAlias(name: string): boolean {
|
export function removeAlias(name: string): boolean {
|
||||||
if (Aliases.hasOwnProperty(name)) {
|
if (Aliases.hasOwnProperty(name)) {
|
||||||
delete Aliases[name];
|
delete Aliases[name];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GlobalAliases.hasOwnProperty(name)) {
|
if (GlobalAliases.hasOwnProperty(name)) {
|
||||||
delete GlobalAliases[name];
|
delete GlobalAliases[name];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,33 +97,35 @@ export function removeAlias(name: string): boolean {
|
|||||||
* Aliases are only applied to "whole words", one level deep
|
* Aliases are only applied to "whole words", one level deep
|
||||||
*/
|
*/
|
||||||
export function substituteAliases(origCommand: string): string {
|
export function substituteAliases(origCommand: string): string {
|
||||||
const commandArray = origCommand.split(" ");
|
const commandArray = origCommand.split(" ");
|
||||||
if (commandArray.length > 0){
|
if (commandArray.length > 0) {
|
||||||
// For the alias and unalias commands, dont substite
|
// For the alias and unalias commands, dont substite
|
||||||
if (commandArray[0] === "unalias" || commandArray[0] === "alias") { return commandArray.join(" "); }
|
if (commandArray[0] === "unalias" || commandArray[0] === "alias") {
|
||||||
|
return commandArray.join(" ");
|
||||||
let somethingSubstituted = true;
|
|
||||||
let depth = 0;
|
|
||||||
|
|
||||||
while(somethingSubstituted && depth < 10){
|
|
||||||
depth++;
|
|
||||||
somethingSubstituted = false
|
|
||||||
const alias = getAlias(commandArray[0])?.split(" ");
|
|
||||||
if (alias != null) {
|
|
||||||
somethingSubstituted = true
|
|
||||||
commandArray.splice(0, 1, ...alias);
|
|
||||||
//commandArray[0] = alias;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < commandArray.length; ++i) {
|
|
||||||
const alias = getGlobalAlias(commandArray[i])?.split(" ");
|
|
||||||
if (alias != null) {
|
|
||||||
somethingSubstituted = true
|
|
||||||
commandArray.splice(i, 1, ...alias);
|
|
||||||
i += alias.length - 1;
|
|
||||||
//commandArray[i] = alias;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return commandArray.join(" ");
|
|
||||||
|
let somethingSubstituted = true;
|
||||||
|
let depth = 0;
|
||||||
|
|
||||||
|
while (somethingSubstituted && depth < 10) {
|
||||||
|
depth++;
|
||||||
|
somethingSubstituted = false;
|
||||||
|
const alias = getAlias(commandArray[0])?.split(" ");
|
||||||
|
if (alias != null) {
|
||||||
|
somethingSubstituted = true;
|
||||||
|
commandArray.splice(0, 1, ...alias);
|
||||||
|
//commandArray[0] = alias;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < commandArray.length; ++i) {
|
||||||
|
const alias = getGlobalAlias(commandArray[i])?.split(" ");
|
||||||
|
if (alias != null) {
|
||||||
|
somethingSubstituted = true;
|
||||||
|
commandArray.splice(i, 1, ...alias);
|
||||||
|
i += alias.length - 1;
|
||||||
|
//commandArray[i] = alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return commandArray.join(" ");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,294 +11,542 @@ import { Money } from "../ui/React/Money";
|
|||||||
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../../utils/JSONReviver";
|
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../../utils/JSONReviver";
|
||||||
|
|
||||||
interface IConstructorParams {
|
interface IConstructorParams {
|
||||||
info: string | JSX.Element;
|
info: string | JSX.Element;
|
||||||
stats?: JSX.Element;
|
stats?: JSX.Element;
|
||||||
isSpecial?: boolean;
|
isSpecial?: boolean;
|
||||||
moneyCost: number;
|
moneyCost: number;
|
||||||
name: string;
|
name: string;
|
||||||
prereqs?: string[];
|
prereqs?: string[];
|
||||||
repCost: number;
|
repCost: number;
|
||||||
|
|
||||||
hacking_mult?: number;
|
hacking_mult?: number;
|
||||||
strength_mult?: number;
|
strength_mult?: number;
|
||||||
defense_mult?: number;
|
defense_mult?: number;
|
||||||
dexterity_mult?: number;
|
dexterity_mult?: number;
|
||||||
agility_mult?: number;
|
agility_mult?: number;
|
||||||
charisma_mult?: number;
|
charisma_mult?: number;
|
||||||
hacking_exp_mult?: number;
|
hacking_exp_mult?: number;
|
||||||
strength_exp_mult?: number;
|
strength_exp_mult?: number;
|
||||||
defense_exp_mult?: number;
|
defense_exp_mult?: number;
|
||||||
dexterity_exp_mult?: number;
|
dexterity_exp_mult?: number;
|
||||||
agility_exp_mult?: number;
|
agility_exp_mult?: number;
|
||||||
charisma_exp_mult?: number;
|
charisma_exp_mult?: number;
|
||||||
hacking_chance_mult?: number;
|
hacking_chance_mult?: number;
|
||||||
hacking_speed_mult?: number;
|
hacking_speed_mult?: number;
|
||||||
hacking_money_mult?: number;
|
hacking_money_mult?: number;
|
||||||
hacking_grow_mult?: number;
|
hacking_grow_mult?: number;
|
||||||
company_rep_mult?: number;
|
company_rep_mult?: number;
|
||||||
faction_rep_mult?: number;
|
faction_rep_mult?: number;
|
||||||
crime_money_mult?: number;
|
crime_money_mult?: number;
|
||||||
crime_success_mult?: number;
|
crime_success_mult?: number;
|
||||||
work_money_mult?: number;
|
work_money_mult?: number;
|
||||||
hacknet_node_money_mult?: number;
|
hacknet_node_money_mult?: number;
|
||||||
hacknet_node_purchase_cost_mult?: number;
|
hacknet_node_purchase_cost_mult?: number;
|
||||||
hacknet_node_ram_cost_mult?: number;
|
hacknet_node_ram_cost_mult?: number;
|
||||||
hacknet_node_core_cost_mult?: number;
|
hacknet_node_core_cost_mult?: number;
|
||||||
hacknet_node_level_cost_mult?: number;
|
hacknet_node_level_cost_mult?: number;
|
||||||
bladeburner_max_stamina_mult?: number;
|
bladeburner_max_stamina_mult?: number;
|
||||||
bladeburner_stamina_gain_mult?: number;
|
bladeburner_stamina_gain_mult?: number;
|
||||||
bladeburner_analysis_mult?: number;
|
bladeburner_analysis_mult?: number;
|
||||||
bladeburner_success_chance_mult?: number;
|
bladeburner_success_chance_mult?: number;
|
||||||
|
|
||||||
startingMoney?: number;
|
startingMoney?: number;
|
||||||
programs?: string[];
|
programs?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateStatsDescription(mults: IMap<number>, programs?: string[], startingMoney?: number): JSX.Element {
|
function generateStatsDescription(mults: IMap<number>, programs?: string[], startingMoney?: number): JSX.Element {
|
||||||
const f = (x: number, decimals = 0): string => {
|
const f = (x: number, decimals = 0): string => {
|
||||||
// look, I don't know how to make a "smart decimals"
|
// look, I don't know how to make a "smart decimals"
|
||||||
// todo, make it smarter
|
// todo, make it smarter
|
||||||
if(x === 1.0777-1) return "7.77%";
|
if (x === 1.0777 - 1) return "7.77%";
|
||||||
if(x === 1.777-1) return "77.7%";
|
if (x === 1.777 - 1) return "77.7%";
|
||||||
return numeralWrapper.formatPercentage(x, decimals);
|
return numeralWrapper.formatPercentage(x, decimals);
|
||||||
};
|
};
|
||||||
let desc = <>Effects:</>;
|
let desc = <>Effects:</>;
|
||||||
|
|
||||||
if(mults.hacking_mult &&
|
if (
|
||||||
mults.hacking_mult == mults.strength_mult &&
|
mults.hacking_mult &&
|
||||||
mults.hacking_mult == mults.defense_mult &&
|
mults.hacking_mult == mults.strength_mult &&
|
||||||
mults.hacking_mult == mults.dexterity_mult &&
|
mults.hacking_mult == mults.defense_mult &&
|
||||||
mults.hacking_mult == mults.agility_mult &&
|
mults.hacking_mult == mults.dexterity_mult &&
|
||||||
mults.hacking_mult == mults.charisma_mult){
|
mults.hacking_mult == mults.agility_mult &&
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_mult-1)} all skills</>
|
mults.hacking_mult == mults.charisma_mult
|
||||||
|
) {
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_mult - 1)} all skills
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (mults.hacking_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_mult - 1)} hacking skill
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
mults.strength_mult &&
|
||||||
|
mults.strength_mult == mults.defense_mult &&
|
||||||
|
mults.strength_mult == mults.dexterity_mult &&
|
||||||
|
mults.strength_mult == mults.agility_mult
|
||||||
|
) {
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.strength_mult - 1)} combat skills
|
||||||
|
</>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
if(mults.hacking_mult)
|
if (mults.strength_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_mult-1)} hacking skill</>
|
desc = (
|
||||||
|
<>
|
||||||
if(mults.strength_mult &&
|
{desc}
|
||||||
mults.strength_mult == mults.defense_mult &&
|
<br />+{f(mults.strength_mult - 1)} strength skill
|
||||||
mults.strength_mult == mults.dexterity_mult &&
|
</>
|
||||||
mults.strength_mult == mults.agility_mult) {
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.strength_mult-1)} combat skills</>
|
if (mults.defense_mult)
|
||||||
} else {
|
desc = (
|
||||||
if(mults.strength_mult)
|
<>
|
||||||
desc = <>{desc}<br />+{f(mults.strength_mult-1)} strength skill</>
|
{desc}
|
||||||
if(mults.defense_mult)
|
<br />+{f(mults.defense_mult - 1)} defense skill
|
||||||
desc = <>{desc}<br />+{f(mults.defense_mult-1)} defense skill</>
|
</>
|
||||||
if(mults.dexterity_mult)
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.dexterity_mult-1)} dexterity skill</>
|
if (mults.dexterity_mult)
|
||||||
if(mults.agility_mult)
|
desc = (
|
||||||
desc = <>{desc}<br />+{f(mults.agility_mult-1)} agility skill</>
|
<>
|
||||||
}
|
{desc}
|
||||||
if(mults.charisma_mult)
|
<br />+{f(mults.dexterity_mult - 1)} dexterity skill
|
||||||
desc = <>{desc}<br />+{f(mults.charisma_mult-1)} Charisma skill</>
|
</>
|
||||||
|
);
|
||||||
|
if (mults.agility_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.agility_mult - 1)} agility skill
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
if (mults.charisma_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.charisma_mult - 1)} Charisma skill
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(mults.hacking_exp_mult &&
|
if (
|
||||||
mults.hacking_exp_mult === mults.strength_exp_mult &&
|
mults.hacking_exp_mult &&
|
||||||
mults.hacking_exp_mult === mults.defense_exp_mult &&
|
mults.hacking_exp_mult === mults.strength_exp_mult &&
|
||||||
mults.hacking_exp_mult === mults.dexterity_exp_mult &&
|
mults.hacking_exp_mult === mults.defense_exp_mult &&
|
||||||
mults.hacking_exp_mult === mults.agility_exp_mult &&
|
mults.hacking_exp_mult === mults.dexterity_exp_mult &&
|
||||||
mults.hacking_exp_mult === mults.charisma_exp_mult) {
|
mults.hacking_exp_mult === mults.agility_exp_mult &&
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_exp_mult-1)} exp for all skills</>
|
mults.hacking_exp_mult === mults.charisma_exp_mult
|
||||||
|
) {
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_exp_mult - 1)} exp for all skills
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (mults.hacking_exp_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_exp_mult - 1)} hacking exp
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
mults.strength_exp_mult &&
|
||||||
|
mults.strength_exp_mult === mults.defense_exp_mult &&
|
||||||
|
mults.strength_exp_mult === mults.dexterity_exp_mult &&
|
||||||
|
mults.strength_exp_mult === mults.agility_exp_mult
|
||||||
|
) {
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.strength_exp_mult - 1)} combat exp
|
||||||
|
</>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
if(mults.hacking_exp_mult)
|
if (mults.strength_exp_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_exp_mult-1)} hacking exp</>
|
desc = (
|
||||||
|
<>
|
||||||
if(mults.strength_exp_mult &&
|
{desc}
|
||||||
mults.strength_exp_mult === mults.defense_exp_mult &&
|
<br />+{f(mults.strength_exp_mult - 1)} strength exp
|
||||||
mults.strength_exp_mult === mults.dexterity_exp_mult &&
|
</>
|
||||||
mults.strength_exp_mult === mults.agility_exp_mult) {
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.strength_exp_mult-1)} combat exp</>
|
if (mults.defense_exp_mult)
|
||||||
} else {
|
desc = (
|
||||||
if(mults.strength_exp_mult)
|
<>
|
||||||
desc = <>{desc}<br />+{f(mults.strength_exp_mult-1)} strength exp</>
|
{desc}
|
||||||
if(mults.defense_exp_mult)
|
<br />+{f(mults.defense_exp_mult - 1)} defense exp
|
||||||
desc = <>{desc}<br />+{f(mults.defense_exp_mult-1)} defense exp</>
|
</>
|
||||||
if(mults.dexterity_exp_mult)
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.dexterity_exp_mult-1)} dexterity exp</>
|
if (mults.dexterity_exp_mult)
|
||||||
if(mults.agility_exp_mult)
|
desc = (
|
||||||
desc = <>{desc}<br />+{f(mults.agility_exp_mult-1)} agility exp</>
|
<>
|
||||||
}
|
{desc}
|
||||||
if(mults.charisma_exp_mult)
|
<br />+{f(mults.dexterity_exp_mult - 1)} dexterity exp
|
||||||
desc = <>{desc}<br />+{f(mults.charisma_exp_mult-1)} charisma exp</>
|
</>
|
||||||
|
);
|
||||||
|
if (mults.agility_exp_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.agility_exp_mult - 1)} agility exp
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
if (mults.charisma_exp_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.charisma_exp_mult - 1)} charisma exp
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(mults.hacking_speed_mult)
|
if (mults.hacking_speed_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_speed_mult-1)} faster hacking</>
|
desc = (
|
||||||
if(mults.hacking_chance_mult)
|
<>
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_chance_mult-1)} hack() success chance</>
|
{desc}
|
||||||
if(mults.hacking_money_mult)
|
<br />+{f(mults.hacking_speed_mult - 1)} faster hack(), grow(), and weaken()
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_money_mult-1)} hack() power</>
|
</>
|
||||||
if(mults.hacking_grow_mult)
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.hacking_grow_mult-1)} grow() power</>
|
if (mults.hacking_chance_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_chance_mult - 1)} hack() success chance
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.hacking_money_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_money_mult - 1)} hack() power
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.hacking_grow_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.hacking_grow_mult - 1)} grow() power
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if(mults.faction_rep_mult &&
|
if (mults.faction_rep_mult && mults.faction_rep_mult === mults.company_rep_mult) {
|
||||||
mults.faction_rep_mult === mults.company_rep_mult) {
|
desc = (
|
||||||
desc = <>{desc}<br />+{f(mults.faction_rep_mult-1)} reputation from factions and companies</>
|
<>
|
||||||
} else {
|
{desc}
|
||||||
if(mults.faction_rep_mult)
|
<br />+{f(mults.faction_rep_mult - 1)} reputation from factions and companies
|
||||||
desc = <>{desc}<br />+{f(mults.faction_rep_mult-1)} reputation from factions</>
|
</>
|
||||||
if(mults.company_rep_mult)
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.company_rep_mult-1)} reputation from companies</>
|
} else {
|
||||||
}
|
if (mults.faction_rep_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.faction_rep_mult - 1)} reputation from factions
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.company_rep_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.company_rep_mult - 1)} reputation from companies
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if(mults.crime_money_mult)
|
if (mults.crime_money_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.crime_money_mult-1)} crime money</>
|
desc = (
|
||||||
if(mults.crime_success_mult)
|
<>
|
||||||
desc = <>{desc}<br />+{f(mults.crime_success_mult-1)} crime success rate</>
|
{desc}
|
||||||
if(mults.work_money_mult)
|
<br />+{f(mults.crime_money_mult - 1)} crime money
|
||||||
desc = <>{desc}<br />+{f(mults.work_money_mult-1)} work money</>
|
</>
|
||||||
|
);
|
||||||
|
if (mults.crime_success_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.crime_success_mult - 1)} crime success rate
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.work_money_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.work_money_mult - 1)} work money
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if(mults.hacknet_node_money_mult)
|
if (mults.hacknet_node_money_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.hacknet_node_money_mult-1)} hacknet production</>
|
desc = (
|
||||||
if(mults.hacknet_node_purchase_cost_mult)
|
<>
|
||||||
desc = <>{desc}<br />-{f(-(mults.hacknet_node_purchase_cost_mult-1))} hacknet nodes cost</>
|
{desc}
|
||||||
if(mults.hacknet_node_level_cost_mult)
|
<br />+{f(mults.hacknet_node_money_mult - 1)} hacknet production
|
||||||
desc = <>{desc}<br />-{f(-(mults.hacknet_node_level_cost_mult-1))} hacknet nodes upgrade cost</>
|
</>
|
||||||
|
);
|
||||||
|
if (mults.hacknet_node_purchase_cost_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />-{f(-(mults.hacknet_node_purchase_cost_mult - 1))} hacknet nodes cost
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.hacknet_node_level_cost_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />-{f(-(mults.hacknet_node_level_cost_mult - 1))} hacknet nodes upgrade cost
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if(mults.bladeburner_max_stamina_mult)
|
if (mults.bladeburner_max_stamina_mult)
|
||||||
desc = <>{desc}<br />+{f(mults.bladeburner_max_stamina_mult-1)} Bladeburner Max Stamina</>
|
desc = (
|
||||||
if(mults.bladeburner_stamina_gain_mult)
|
<>
|
||||||
desc = <>{desc}<br />+{f(mults.bladeburner_stamina_gain_mult-1)} Bladeburner Stamina gain</>
|
{desc}
|
||||||
if(mults.bladeburner_analysis_mult)
|
<br />+{f(mults.bladeburner_max_stamina_mult - 1)} Bladeburner Max Stamina
|
||||||
desc = <>{desc}<br />+{f(mults.bladeburner_analysis_mult-1)} Bladeburner Field Analysis effectiveness</>
|
</>
|
||||||
if(mults.bladeburner_success_chance_mult)
|
);
|
||||||
desc = <>{desc}<br />+{f(mults.bladeburner_success_chance_mult-1)} Bladeburner Contracts and Operations success chance</>
|
if (mults.bladeburner_stamina_gain_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.bladeburner_stamina_gain_mult - 1)} Bladeburner Stamina gain
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.bladeburner_analysis_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.bladeburner_analysis_mult - 1)} Bladeburner Field Analysis effectiveness
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.bladeburner_success_chance_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.bladeburner_success_chance_mult - 1)} Bladeburner Contracts and Operations success chance
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if(startingMoney)
|
if (startingMoney)
|
||||||
desc = <>{desc}<br />Start with {Money(startingMoney)} after installing Augmentations.</>
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />
|
||||||
|
Start with <Money money={startingMoney} /> after installing Augmentations.
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if(programs)
|
if (programs)
|
||||||
desc = <>{desc}<br />Start with {programs.join(' and ')} after installing Augmentations.</>
|
desc = (
|
||||||
return desc;
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />
|
||||||
|
Start with {programs.join(" and ")} after installing Augmentations.
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Augmentation {
|
export class Augmentation {
|
||||||
|
// How much money this costs to buy
|
||||||
|
baseCost = 0;
|
||||||
|
|
||||||
// How much money this costs to buy
|
// How much faction reputation is required to unlock this
|
||||||
baseCost = 0;
|
baseRepRequirement = 0;
|
||||||
|
|
||||||
// How much faction reputation is required to unlock this
|
// Description of what this Aug is and what it does
|
||||||
baseRepRequirement = 0;
|
info: string | JSX.Element;
|
||||||
|
|
||||||
// Description of what this Aug is and what it does
|
// Description of the stats, often autogenerated, sometimes manually written.
|
||||||
info: string | JSX.Element;
|
stats: JSX.Element;
|
||||||
|
|
||||||
// Description of the stats, often autogenerated, sometimes manually written.
|
// Any Augmentation not immediately available in BitNode-1 is special (e.g. Bladeburner augs)
|
||||||
stats: JSX.Element;
|
isSpecial = false;
|
||||||
|
|
||||||
// Any Augmentation not immediately available in BitNode-1 is special (e.g. Bladeburner augs)
|
// Augmentation level - for repeatable Augs like NeuroFlux Governor
|
||||||
isSpecial = false;
|
level = 0;
|
||||||
|
|
||||||
// Augmentation level - for repeatable Augs like NeuroFlux Governor
|
// Name of Augmentation
|
||||||
level = 0;
|
name = "";
|
||||||
|
|
||||||
// Name of Augmentation
|
// Whether the player owns this Augmentation
|
||||||
name = "";
|
owned = false;
|
||||||
|
|
||||||
// Whether the player owns this Augmentation
|
// Array of names of all prerequisites
|
||||||
owned = false;
|
prereqs: string[] = [];
|
||||||
|
|
||||||
// Array of names of all prerequisites
|
// Multipliers given by this Augmentation. Must match the property name in
|
||||||
prereqs: string[] = [];
|
// The Player/Person classes
|
||||||
|
mults: IMap<number> = {};
|
||||||
|
|
||||||
// Multipliers given by this Augmentation. Must match the property name in
|
// Initial cost. Doesn't change when you purchase multiple Augmentation
|
||||||
// The Player/Person classes
|
startingCost = 0;
|
||||||
mults: IMap<number> = {}
|
|
||||||
|
|
||||||
// Initial cost. Doesn't change when you purchase multiple Augmentation
|
constructor(
|
||||||
startingCost = 0;
|
params: IConstructorParams = {
|
||||||
|
info: "",
|
||||||
|
moneyCost: 0,
|
||||||
|
name: "",
|
||||||
|
repCost: 0,
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
this.name = params.name;
|
||||||
|
this.info = params.info;
|
||||||
|
this.prereqs = params.prereqs ? params.prereqs : [];
|
||||||
|
|
||||||
constructor(params: IConstructorParams={ info: "", moneyCost: 0, name: "", repCost: 0 }) {
|
this.baseRepRequirement = params.repCost * BitNodeMultipliers.AugmentationRepCost;
|
||||||
this.name = params.name;
|
this.baseCost = params.moneyCost * BitNodeMultipliers.AugmentationMoneyCost;
|
||||||
this.info = params.info;
|
this.startingCost = this.baseCost;
|
||||||
this.prereqs = params.prereqs ? params.prereqs : [];
|
|
||||||
|
|
||||||
this.baseRepRequirement = params.repCost * BitNodeMultipliers.AugmentationRepCost;
|
if (params.isSpecial) {
|
||||||
this.baseCost = params.moneyCost * BitNodeMultipliers.AugmentationMoneyCost;
|
this.isSpecial = true;
|
||||||
this.startingCost = this.baseCost;
|
}
|
||||||
|
|
||||||
if (params.isSpecial) {
|
this.level = 0;
|
||||||
this.isSpecial = true;
|
|
||||||
|
// Set multipliers
|
||||||
|
if (params.hacking_mult) {
|
||||||
|
this.mults.hacking_mult = params.hacking_mult;
|
||||||
|
}
|
||||||
|
if (params.strength_mult) {
|
||||||
|
this.mults.strength_mult = params.strength_mult;
|
||||||
|
}
|
||||||
|
if (params.defense_mult) {
|
||||||
|
this.mults.defense_mult = params.defense_mult;
|
||||||
|
}
|
||||||
|
if (params.dexterity_mult) {
|
||||||
|
this.mults.dexterity_mult = params.dexterity_mult;
|
||||||
|
}
|
||||||
|
if (params.agility_mult) {
|
||||||
|
this.mults.agility_mult = params.agility_mult;
|
||||||
|
}
|
||||||
|
if (params.charisma_mult) {
|
||||||
|
this.mults.charisma_mult = params.charisma_mult;
|
||||||
|
}
|
||||||
|
if (params.hacking_exp_mult) {
|
||||||
|
this.mults.hacking_exp_mult = params.hacking_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.strength_exp_mult) {
|
||||||
|
this.mults.strength_exp_mult = params.strength_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.defense_exp_mult) {
|
||||||
|
this.mults.defense_exp_mult = params.defense_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.dexterity_exp_mult) {
|
||||||
|
this.mults.dexterity_exp_mult = params.dexterity_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.agility_exp_mult) {
|
||||||
|
this.mults.agility_exp_mult = params.agility_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.charisma_exp_mult) {
|
||||||
|
this.mults.charisma_exp_mult = params.charisma_exp_mult;
|
||||||
|
}
|
||||||
|
if (params.hacking_chance_mult) {
|
||||||
|
this.mults.hacking_chance_mult = params.hacking_chance_mult;
|
||||||
|
}
|
||||||
|
if (params.hacking_speed_mult) {
|
||||||
|
this.mults.hacking_speed_mult = params.hacking_speed_mult;
|
||||||
|
}
|
||||||
|
if (params.hacking_money_mult) {
|
||||||
|
this.mults.hacking_money_mult = params.hacking_money_mult;
|
||||||
|
}
|
||||||
|
if (params.hacking_grow_mult) {
|
||||||
|
this.mults.hacking_grow_mult = params.hacking_grow_mult;
|
||||||
|
}
|
||||||
|
if (params.company_rep_mult) {
|
||||||
|
this.mults.company_rep_mult = params.company_rep_mult;
|
||||||
|
}
|
||||||
|
if (params.faction_rep_mult) {
|
||||||
|
this.mults.faction_rep_mult = params.faction_rep_mult;
|
||||||
|
}
|
||||||
|
if (params.crime_money_mult) {
|
||||||
|
this.mults.crime_money_mult = params.crime_money_mult;
|
||||||
|
}
|
||||||
|
if (params.crime_success_mult) {
|
||||||
|
this.mults.crime_success_mult = params.crime_success_mult;
|
||||||
|
}
|
||||||
|
if (params.work_money_mult) {
|
||||||
|
this.mults.work_money_mult = params.work_money_mult;
|
||||||
|
}
|
||||||
|
if (params.hacknet_node_money_mult) {
|
||||||
|
this.mults.hacknet_node_money_mult = params.hacknet_node_money_mult;
|
||||||
|
}
|
||||||
|
if (params.hacknet_node_purchase_cost_mult) {
|
||||||
|
this.mults.hacknet_node_purchase_cost_mult = params.hacknet_node_purchase_cost_mult;
|
||||||
|
}
|
||||||
|
if (params.hacknet_node_ram_cost_mult) {
|
||||||
|
this.mults.hacknet_node_ram_cost_mult = params.hacknet_node_ram_cost_mult;
|
||||||
|
}
|
||||||
|
if (params.hacknet_node_core_cost_mult) {
|
||||||
|
this.mults.hacknet_node_core_cost_mult = params.hacknet_node_core_cost_mult;
|
||||||
|
}
|
||||||
|
if (params.hacknet_node_level_cost_mult) {
|
||||||
|
this.mults.hacknet_node_level_cost_mult = params.hacknet_node_level_cost_mult;
|
||||||
|
}
|
||||||
|
if (params.bladeburner_max_stamina_mult) {
|
||||||
|
this.mults.bladeburner_max_stamina_mult = params.bladeburner_max_stamina_mult;
|
||||||
|
}
|
||||||
|
if (params.bladeburner_stamina_gain_mult) {
|
||||||
|
this.mults.bladeburner_stamina_gain_mult = params.bladeburner_stamina_gain_mult;
|
||||||
|
}
|
||||||
|
if (params.bladeburner_analysis_mult) {
|
||||||
|
this.mults.bladeburner_analysis_mult = params.bladeburner_analysis_mult;
|
||||||
|
}
|
||||||
|
if (params.bladeburner_success_chance_mult) {
|
||||||
|
this.mults.bladeburner_success_chance_mult = params.bladeburner_success_chance_mult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.stats) this.stats = params.stats;
|
||||||
|
else this.stats = generateStatsDescription(this.mults, params.programs, params.startingMoney);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adds this Augmentation to the specified Factions
|
||||||
|
addToFactions(factionList: string[]): void {
|
||||||
|
for (let i = 0; i < factionList.length; ++i) {
|
||||||
|
const faction: Faction | null = Factions[factionList[i]];
|
||||||
|
if (faction == null) {
|
||||||
|
console.warn(`In Augmentation.addToFactions(), could not find faction with this name: ${factionList[i]}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
faction.augmentations.push(this.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adds this Augmentation to all Factions
|
||||||
|
addToAllFactions(): void {
|
||||||
|
for (const fac in Factions) {
|
||||||
|
if (Factions.hasOwnProperty(fac)) {
|
||||||
|
const facObj: Faction | null = Factions[fac];
|
||||||
|
if (facObj == null) {
|
||||||
|
console.warn(`Invalid Faction object in addToAllFactions(). Key value: ${fac}`);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
facObj.augmentations.push(this.name);
|
||||||
this.level = 0;
|
}
|
||||||
|
|
||||||
// Set multipliers
|
|
||||||
if (params.hacking_mult) { this.mults.hacking_mult = params.hacking_mult; }
|
|
||||||
if (params.strength_mult) { this.mults.strength_mult = params.strength_mult; }
|
|
||||||
if (params.defense_mult) { this.mults.defense_mult = params.defense_mult; }
|
|
||||||
if (params.dexterity_mult) { this.mults.dexterity_mult = params.dexterity_mult; }
|
|
||||||
if (params.agility_mult) { this.mults.agility_mult = params.agility_mult; }
|
|
||||||
if (params.charisma_mult) { this.mults.charisma_mult = params.charisma_mult; }
|
|
||||||
if (params.hacking_exp_mult) { this.mults.hacking_exp_mult = params.hacking_exp_mult; }
|
|
||||||
if (params.strength_exp_mult) { this.mults.strength_exp_mult = params.strength_exp_mult; }
|
|
||||||
if (params.defense_exp_mult) { this.mults.defense_exp_mult = params.defense_exp_mult; }
|
|
||||||
if (params.dexterity_exp_mult) { this.mults.dexterity_exp_mult = params.dexterity_exp_mult; }
|
|
||||||
if (params.agility_exp_mult) { this.mults.agility_exp_mult = params.agility_exp_mult; }
|
|
||||||
if (params.charisma_exp_mult) { this.mults.charisma_exp_mult = params.charisma_exp_mult; }
|
|
||||||
if (params.hacking_chance_mult) { this.mults.hacking_chance_mult = params.hacking_chance_mult; }
|
|
||||||
if (params.hacking_speed_mult) { this.mults.hacking_speed_mult = params.hacking_speed_mult; }
|
|
||||||
if (params.hacking_money_mult) { this.mults.hacking_money_mult = params.hacking_money_mult; }
|
|
||||||
if (params.hacking_grow_mult) { this.mults.hacking_grow_mult = params.hacking_grow_mult; }
|
|
||||||
if (params.company_rep_mult) { this.mults.company_rep_mult = params.company_rep_mult; }
|
|
||||||
if (params.faction_rep_mult) { this.mults.faction_rep_mult = params.faction_rep_mult; }
|
|
||||||
if (params.crime_money_mult) { this.mults.crime_money_mult = params.crime_money_mult; }
|
|
||||||
if (params.crime_success_mult) { this.mults.crime_success_mult = params.crime_success_mult; }
|
|
||||||
if (params.work_money_mult) { this.mults.work_money_mult = params.work_money_mult; }
|
|
||||||
if (params.hacknet_node_money_mult) { this.mults.hacknet_node_money_mult = params.hacknet_node_money_mult; }
|
|
||||||
if (params.hacknet_node_purchase_cost_mult) { this.mults.hacknet_node_purchase_cost_mult = params.hacknet_node_purchase_cost_mult; }
|
|
||||||
if (params.hacknet_node_ram_cost_mult) { this.mults.hacknet_node_ram_cost_mult = params.hacknet_node_ram_cost_mult; }
|
|
||||||
if (params.hacknet_node_core_cost_mult) { this.mults.hacknet_node_core_cost_mult = params.hacknet_node_core_cost_mult; }
|
|
||||||
if (params.hacknet_node_level_cost_mult) { this.mults.hacknet_node_level_cost_mult = params.hacknet_node_level_cost_mult; }
|
|
||||||
if (params.bladeburner_max_stamina_mult) { this.mults.bladeburner_max_stamina_mult = params.bladeburner_max_stamina_mult; }
|
|
||||||
if (params.bladeburner_stamina_gain_mult) { this.mults.bladeburner_stamina_gain_mult = params.bladeburner_stamina_gain_mult; }
|
|
||||||
if (params.bladeburner_analysis_mult) { this.mults.bladeburner_analysis_mult = params.bladeburner_analysis_mult; }
|
|
||||||
if (params.bladeburner_success_chance_mult) { this.mults.bladeburner_success_chance_mult = params.bladeburner_success_chance_mult; }
|
|
||||||
|
|
||||||
if(params.stats)
|
|
||||||
this.stats = params.stats;
|
|
||||||
else
|
|
||||||
this.stats = generateStatsDescription(this.mults, params.programs, params.startingMoney);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Adds this Augmentation to the specified Factions
|
// Serialize the current object to a JSON save state.
|
||||||
addToFactions(factionList: string[]): void {
|
toJSON(): any {
|
||||||
for (let i = 0; i < factionList.length; ++i) {
|
return Generic_toJSON("Augmentation", this);
|
||||||
const faction: Faction | null = Factions[factionList[i]];
|
}
|
||||||
if (faction == null) {
|
|
||||||
console.warn(`In Augmentation.addToFactions(), could not find faction with this name: ${factionList[i]}`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
faction.augmentations.push(this.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adds this Augmentation to all Factions
|
// Initiatizes a Augmentation object from a JSON save state.
|
||||||
addToAllFactions(): void {
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||||
for (const fac in Factions) {
|
static fromJSON(value: any): Augmentation {
|
||||||
if (Factions.hasOwnProperty(fac)) {
|
return Generic_fromJSON(Augmentation, value.data);
|
||||||
const facObj: Faction | null = Factions[fac];
|
}
|
||||||
if (facObj == null) {
|
|
||||||
console.warn(`Invalid Faction object in addToAllFactions(). Key value: ${fac}`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
facObj.augmentations.push(this.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Serialize the current object to a JSON save state.
|
|
||||||
toJSON(): any {
|
|
||||||
return Generic_toJSON("Augmentation", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initiatizes a Augmentation object from a JSON save state.
|
|
||||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
||||||
static fromJSON(value: any): Augmentation {
|
|
||||||
return Generic_fromJSON(Augmentation, value.data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Reviver.constructors.Augmentation = Augmentation;
|
Reviver.constructors.Augmentation = Augmentation;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,13 @@
|
|||||||
export class PlayerOwnedAugmentation {
|
export class PlayerOwnedAugmentation {
|
||||||
level = 1;
|
level = 1;
|
||||||
name = "";
|
name = "";
|
||||||
|
|
||||||
constructor(name = "") {
|
constructor(name = "") {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IPlayerOwnedAugmentation {
|
export interface IPlayerOwnedAugmentation {
|
||||||
level: number;
|
level: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,118 +1,118 @@
|
|||||||
import { IMap } from "../../types";
|
import { IMap } from "../../types";
|
||||||
|
|
||||||
export const AugmentationNames: IMap<string> = {
|
export const AugmentationNames: IMap<string> = {
|
||||||
Targeting1: "Augmented Targeting I",
|
Targeting1: "Augmented Targeting I",
|
||||||
Targeting2: "Augmented Targeting II",
|
Targeting2: "Augmented Targeting II",
|
||||||
Targeting3: "Augmented Targeting III",
|
Targeting3: "Augmented Targeting III",
|
||||||
SyntheticHeart: "Synthetic Heart",
|
SyntheticHeart: "Synthetic Heart",
|
||||||
SynfibrilMuscle: "Synfibril Muscle",
|
SynfibrilMuscle: "Synfibril Muscle",
|
||||||
CombatRib1: "Combat Rib I",
|
CombatRib1: "Combat Rib I",
|
||||||
CombatRib2: "Combat Rib II",
|
CombatRib2: "Combat Rib II",
|
||||||
CombatRib3: "Combat Rib III",
|
CombatRib3: "Combat Rib III",
|
||||||
NanofiberWeave: "Nanofiber Weave",
|
NanofiberWeave: "Nanofiber Weave",
|
||||||
SubdermalArmor: "NEMEAN Subdermal Weave",
|
SubdermalArmor: "NEMEAN Subdermal Weave",
|
||||||
WiredReflexes: "Wired Reflexes",
|
WiredReflexes: "Wired Reflexes",
|
||||||
GrapheneBoneLacings: "Graphene Bone Lacings",
|
GrapheneBoneLacings: "Graphene Bone Lacings",
|
||||||
BionicSpine: "Bionic Spine",
|
BionicSpine: "Bionic Spine",
|
||||||
GrapheneBionicSpine: "Graphene Bionic Spine Upgrade",
|
GrapheneBionicSpine: "Graphene Bionic Spine Upgrade",
|
||||||
BionicLegs: "Bionic Legs",
|
BionicLegs: "Bionic Legs",
|
||||||
GrapheneBionicLegs: "Graphene Bionic Legs Upgrade",
|
GrapheneBionicLegs: "Graphene Bionic Legs Upgrade",
|
||||||
SpeechProcessor: "Speech Processor Implant",
|
SpeechProcessor: "Speech Processor Implant",
|
||||||
TITN41Injection: "TITN-41 Gene-Modification Injection",
|
TITN41Injection: "TITN-41 Gene-Modification Injection",
|
||||||
EnhancedSocialInteractionImplant: "Enhanced Social Interaction Implant",
|
EnhancedSocialInteractionImplant: "Enhanced Social Interaction Implant",
|
||||||
BitWire: "BitWire",
|
BitWire: "BitWire",
|
||||||
ArtificialBioNeuralNetwork: "Artificial Bio-neural Network Implant",
|
ArtificialBioNeuralNetwork: "Artificial Bio-neural Network Implant",
|
||||||
ArtificialSynapticPotentiation: "Artificial Synaptic Potentiation",
|
ArtificialSynapticPotentiation: "Artificial Synaptic Potentiation",
|
||||||
EnhancedMyelinSheathing: "Enhanced Myelin Sheathing",
|
EnhancedMyelinSheathing: "Enhanced Myelin Sheathing",
|
||||||
SynapticEnhancement: "Synaptic Enhancement Implant",
|
SynapticEnhancement: "Synaptic Enhancement Implant",
|
||||||
NeuralRetentionEnhancement: "Neural-Retention Enhancement",
|
NeuralRetentionEnhancement: "Neural-Retention Enhancement",
|
||||||
DataJack: "DataJack",
|
DataJack: "DataJack",
|
||||||
ENM: "Embedded Netburner Module",
|
ENM: "Embedded Netburner Module",
|
||||||
ENMCore: "Embedded Netburner Module Core Implant",
|
ENMCore: "Embedded Netburner Module Core Implant",
|
||||||
ENMCoreV2: "Embedded Netburner Module Core V2 Upgrade",
|
ENMCoreV2: "Embedded Netburner Module Core V2 Upgrade",
|
||||||
ENMCoreV3: "Embedded Netburner Module Core V3 Upgrade",
|
ENMCoreV3: "Embedded Netburner Module Core V3 Upgrade",
|
||||||
ENMAnalyzeEngine: "Embedded Netburner Module Analyze Engine",
|
ENMAnalyzeEngine: "Embedded Netburner Module Analyze Engine",
|
||||||
ENMDMA: "Embedded Netburner Module Direct Memory Access Upgrade",
|
ENMDMA: "Embedded Netburner Module Direct Memory Access Upgrade",
|
||||||
Neuralstimulator: "Neuralstimulator",
|
Neuralstimulator: "Neuralstimulator",
|
||||||
NeuralAccelerator: "Neural Accelerator",
|
NeuralAccelerator: "Neural Accelerator",
|
||||||
CranialSignalProcessorsG1: "Cranial Signal Processors - Gen I",
|
CranialSignalProcessorsG1: "Cranial Signal Processors - Gen I",
|
||||||
CranialSignalProcessorsG2: "Cranial Signal Processors - Gen II",
|
CranialSignalProcessorsG2: "Cranial Signal Processors - Gen II",
|
||||||
CranialSignalProcessorsG3: "Cranial Signal Processors - Gen III",
|
CranialSignalProcessorsG3: "Cranial Signal Processors - Gen III",
|
||||||
CranialSignalProcessorsG4: "Cranial Signal Processors - Gen IV",
|
CranialSignalProcessorsG4: "Cranial Signal Processors - Gen IV",
|
||||||
CranialSignalProcessorsG5: "Cranial Signal Processors - Gen V",
|
CranialSignalProcessorsG5: "Cranial Signal Processors - Gen V",
|
||||||
NeuronalDensification: "Neuronal Densification",
|
NeuronalDensification: "Neuronal Densification",
|
||||||
NuoptimalInjectorImplant: "Nuoptimal Nootropic Injector Implant",
|
NuoptimalInjectorImplant: "Nuoptimal Nootropic Injector Implant",
|
||||||
SpeechEnhancement: "Speech Enhancement",
|
SpeechEnhancement: "Speech Enhancement",
|
||||||
FocusWire: "FocusWire",
|
FocusWire: "FocusWire",
|
||||||
PCDNI: "PC Direct-Neural Interface",
|
PCDNI: "PC Direct-Neural Interface",
|
||||||
PCDNIOptimizer: "PC Direct-Neural Interface Optimization Submodule",
|
PCDNIOptimizer: "PC Direct-Neural Interface Optimization Submodule",
|
||||||
PCDNINeuralNetwork: "PC Direct-Neural Interface NeuroNet Injector",
|
PCDNINeuralNetwork: "PC Direct-Neural Interface NeuroNet Injector",
|
||||||
PCMatrix: "PCMatrix",
|
PCMatrix: "PCMatrix",
|
||||||
ADRPheromone1: "ADR-V1 Pheromone Gene",
|
ADRPheromone1: "ADR-V1 Pheromone Gene",
|
||||||
ADRPheromone2: "ADR-V2 Pheromone Gene",
|
ADRPheromone2: "ADR-V2 Pheromone Gene",
|
||||||
ShadowsSimulacrum: "The Shadow's Simulacrum",
|
ShadowsSimulacrum: "The Shadow's Simulacrum",
|
||||||
HacknetNodeCPUUpload: "Hacknet Node CPU Architecture Neural-Upload",
|
HacknetNodeCPUUpload: "Hacknet Node CPU Architecture Neural-Upload",
|
||||||
HacknetNodeCacheUpload: "Hacknet Node Cache Architecture Neural-Upload",
|
HacknetNodeCacheUpload: "Hacknet Node Cache Architecture Neural-Upload",
|
||||||
HacknetNodeNICUpload: "Hacknet Node NIC Architecture Neural-Upload",
|
HacknetNodeNICUpload: "Hacknet Node NIC Architecture Neural-Upload",
|
||||||
HacknetNodeKernelDNI: "Hacknet Node Kernel Direct-Neural Interface",
|
HacknetNodeKernelDNI: "Hacknet Node Kernel Direct-Neural Interface",
|
||||||
HacknetNodeCoreDNI: "Hacknet Node Core Direct-Neural Interface",
|
HacknetNodeCoreDNI: "Hacknet Node Core Direct-Neural Interface",
|
||||||
NeuroFluxGovernor: "NeuroFlux Governor",
|
NeuroFluxGovernor: "NeuroFlux Governor",
|
||||||
Neurotrainer1: "Neurotrainer I",
|
Neurotrainer1: "Neurotrainer I",
|
||||||
Neurotrainer2: "Neurotrainer II",
|
Neurotrainer2: "Neurotrainer II",
|
||||||
Neurotrainer3: "Neurotrainer III",
|
Neurotrainer3: "Neurotrainer III",
|
||||||
Hypersight: "HyperSight Corneal Implant",
|
Hypersight: "HyperSight Corneal Implant",
|
||||||
LuminCloaking1: "LuminCloaking-V1 Skin Implant",
|
LuminCloaking1: "LuminCloaking-V1 Skin Implant",
|
||||||
LuminCloaking2: "LuminCloaking-V2 Skin Implant",
|
LuminCloaking2: "LuminCloaking-V2 Skin Implant",
|
||||||
HemoRecirculator: "HemoRecirculator",
|
HemoRecirculator: "HemoRecirculator",
|
||||||
SmartSonar: "SmartSonar Implant",
|
SmartSonar: "SmartSonar Implant",
|
||||||
PowerRecirculator: "Power Recirculation Core",
|
PowerRecirculator: "Power Recirculation Core",
|
||||||
QLink: "QLink",
|
QLink: "QLink",
|
||||||
TheRedPill: "The Red Pill",
|
TheRedPill: "The Red Pill",
|
||||||
SPTN97: "SPTN-97 Gene Modification",
|
SPTN97: "SPTN-97 Gene Modification",
|
||||||
HiveMind: "ECorp HVMind Implant",
|
HiveMind: "ECorp HVMind Implant",
|
||||||
CordiARCReactor: "CordiARC Fusion Reactor",
|
CordiARCReactor: "CordiARC Fusion Reactor",
|
||||||
SmartJaw: "SmartJaw",
|
SmartJaw: "SmartJaw",
|
||||||
Neotra: "Neotra",
|
Neotra: "Neotra",
|
||||||
Xanipher: "Xanipher",
|
Xanipher: "Xanipher",
|
||||||
nextSENS: "nextSENS Gene Modification",
|
nextSENS: "nextSENS Gene Modification",
|
||||||
OmniTekInfoLoad: "OmniTek InfoLoad",
|
OmniTekInfoLoad: "OmniTek InfoLoad",
|
||||||
PhotosyntheticCells: "Photosynthetic Cells",
|
PhotosyntheticCells: "Photosynthetic Cells",
|
||||||
Neurolink: "BitRunners Neurolink",
|
Neurolink: "BitRunners Neurolink",
|
||||||
TheBlackHand: "The Black Hand",
|
TheBlackHand: "The Black Hand",
|
||||||
UnstableCircadianModulator: "Unstable Circadian Modulator",
|
UnstableCircadianModulator: "Unstable Circadian Modulator",
|
||||||
CRTX42AA: "CRTX42-AA Gene Modification",
|
CRTX42AA: "CRTX42-AA Gene Modification",
|
||||||
Neuregen: "Neuregen Gene Modification",
|
Neuregen: "Neuregen Gene Modification",
|
||||||
CashRoot: "CashRoot Starter Kit",
|
CashRoot: "CashRoot Starter Kit",
|
||||||
NutriGen: "NutriGen Implant",
|
NutriGen: "NutriGen Implant",
|
||||||
INFRARet: "INFRARET Enhancement",
|
INFRARet: "INFRARET Enhancement",
|
||||||
DermaForce: "DermaForce Particle Barrier",
|
DermaForce: "DermaForce Particle Barrier",
|
||||||
GrapheneBrachiBlades: "Graphene BranchiBlades Upgrade",
|
GrapheneBrachiBlades: "Graphene BranchiBlades Upgrade",
|
||||||
GrapheneBionicArms: "Graphene Bionic Arms Upgrade",
|
GrapheneBionicArms: "Graphene Bionic Arms Upgrade",
|
||||||
BrachiBlades: "BrachiBlades",
|
BrachiBlades: "BrachiBlades",
|
||||||
BionicArms: "Bionic Arms",
|
BionicArms: "Bionic Arms",
|
||||||
SNA: "Social Negotiation Assistant (S.N.A)",
|
SNA: "Social Negotiation Assistant (S.N.A)",
|
||||||
HydroflameLeftArm: "Hydroflame Left Arm",
|
HydroflameLeftArm: "Hydroflame Left Arm",
|
||||||
EsperEyewear: "EsperTech Bladeburner Eyewear",
|
EsperEyewear: "EsperTech Bladeburner Eyewear",
|
||||||
EMS4Recombination: "EMS-4 Recombination",
|
EMS4Recombination: "EMS-4 Recombination",
|
||||||
OrionShoulder: "ORION-MKIV Shoulder",
|
OrionShoulder: "ORION-MKIV Shoulder",
|
||||||
HyperionV1: "Hyperion Plasma Cannon V1",
|
HyperionV1: "Hyperion Plasma Cannon V1",
|
||||||
HyperionV2: "Hyperion Plasma Cannon V2",
|
HyperionV2: "Hyperion Plasma Cannon V2",
|
||||||
GolemSerum: "GOLEM Serum",
|
GolemSerum: "GOLEM Serum",
|
||||||
VangelisVirus: "Vangelis Virus",
|
VangelisVirus: "Vangelis Virus",
|
||||||
VangelisVirus3: "Vangelis Virus 3.0",
|
VangelisVirus3: "Vangelis Virus 3.0",
|
||||||
INTERLINKED: "I.N.T.E.R.L.I.N.K.E.D",
|
INTERLINKED: "I.N.T.E.R.L.I.N.K.E.D",
|
||||||
BladeRunner: "Blade's Runners",
|
BladeRunner: "Blade's Runners",
|
||||||
BladeArmor: "BLADE-51b Tesla Armor",
|
BladeArmor: "BLADE-51b Tesla Armor",
|
||||||
BladeArmorPowerCells: "BLADE-51b Tesla Armor: Power Cells Upgrade",
|
BladeArmorPowerCells: "BLADE-51b Tesla Armor: Power Cells Upgrade",
|
||||||
BladeArmorEnergyShielding: "BLADE-51b Tesla Armor: Energy Shielding Upgrade",
|
BladeArmorEnergyShielding: "BLADE-51b Tesla Armor: Energy Shielding Upgrade",
|
||||||
BladeArmorUnibeam: "BLADE-51b Tesla Armor: Unibeam Upgrade",
|
BladeArmorUnibeam: "BLADE-51b Tesla Armor: Unibeam Upgrade",
|
||||||
BladeArmorOmnibeam: "BLADE-51b Tesla Armor: Omnibeam Upgrade",
|
BladeArmorOmnibeam: "BLADE-51b Tesla Armor: Omnibeam Upgrade",
|
||||||
BladeArmorIPU: "BLADE-51b Tesla Armor: IPU Upgrade",
|
BladeArmorIPU: "BLADE-51b Tesla Armor: IPU Upgrade",
|
||||||
BladesSimulacrum: "The Blade's Simulacrum",
|
BladesSimulacrum: "The Blade's Simulacrum",
|
||||||
|
|
||||||
//Wasteland Augs
|
//Wasteland Augs
|
||||||
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System
|
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System
|
||||||
//PepBoyForceField Generates plasma force fields
|
//PepBoyForceField Generates plasma force fields
|
||||||
//PepBoyBlasts Generate high density plasma concussive blasts
|
//PepBoyBlasts Generate high density plasma concussive blasts
|
||||||
//PepBoyDataStorage STore more data on pep boy,
|
//PepBoyDataStorage STore more data on pep boy,
|
||||||
}
|
};
|
||||||
|
|||||||
@@ -13,30 +13,28 @@ import { OwnedAugmentationsOrderSetting } from "../../Settings/SettingEnums";
|
|||||||
import { AugmentationAccordion } from "../../ui/React/AugmentationAccordion";
|
import { AugmentationAccordion } from "../../ui/React/AugmentationAccordion";
|
||||||
|
|
||||||
export function InstalledAugmentations(): React.ReactElement {
|
export function InstalledAugmentations(): React.ReactElement {
|
||||||
const sourceAugs = Player.augmentations.slice();
|
const sourceAugs = Player.augmentations.slice();
|
||||||
|
|
||||||
if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) {
|
if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) {
|
||||||
sourceAugs.sort((aug1, aug2) => {
|
sourceAugs.sort((aug1, aug2) => {
|
||||||
return aug1.name <= aug2.name ? -1 : 1;
|
return aug1.name <= aug2.name ? -1 : 1;
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const augs = sourceAugs.map((e) => {
|
||||||
|
const aug = Augmentations[e.name];
|
||||||
|
|
||||||
|
let level = null;
|
||||||
|
if (e.name === AugmentationNames.NeuroFluxGovernor) {
|
||||||
|
level = e.level;
|
||||||
}
|
}
|
||||||
|
|
||||||
const augs = sourceAugs.map((e) => {
|
|
||||||
const aug = Augmentations[e.name];
|
|
||||||
|
|
||||||
let level = null;
|
|
||||||
if (e.name === AugmentationNames.NeuroFluxGovernor) {
|
|
||||||
level = e.level;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<li key={e.name}>
|
|
||||||
<AugmentationAccordion aug={aug} level={level} />
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>{augs}</>
|
<li key={e.name}>
|
||||||
)
|
<AugmentationAccordion aug={aug} level={level} />
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return <>{augs}</>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,96 +16,100 @@ import { Settings } from "../../Settings/Settings";
|
|||||||
import { OwnedAugmentationsOrderSetting } from "../../Settings/SettingEnums";
|
import { OwnedAugmentationsOrderSetting } from "../../Settings/SettingEnums";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
// nothing special.
|
// nothing special.
|
||||||
}
|
};
|
||||||
|
|
||||||
type IState = {
|
type IState = {
|
||||||
rerenderFlag: boolean;
|
rerenderFlag: boolean;
|
||||||
}
|
};
|
||||||
|
|
||||||
export class InstalledAugmentationsAndSourceFiles extends React.Component<IProps, IState> {
|
export class InstalledAugmentationsAndSourceFiles extends React.Component<IProps, IState> {
|
||||||
listRef: React.RefObject<HTMLUListElement>;
|
listRef: React.RefObject<HTMLUListElement>;
|
||||||
|
|
||||||
constructor(props: IProps) {
|
constructor(props: IProps) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
rerenderFlag: false,
|
rerenderFlag: false,
|
||||||
}
|
};
|
||||||
|
|
||||||
this.collapseAllHeaders = this.collapseAllHeaders.bind(this);
|
this.collapseAllHeaders = this.collapseAllHeaders.bind(this);
|
||||||
this.expandAllHeaders = this.expandAllHeaders.bind(this);
|
this.expandAllHeaders = this.expandAllHeaders.bind(this);
|
||||||
this.sortByAcquirementTime = this.sortByAcquirementTime.bind(this);
|
this.sortByAcquirementTime = this.sortByAcquirementTime.bind(this);
|
||||||
this.sortInOrder = this.sortInOrder.bind(this);
|
this.sortInOrder = this.sortInOrder.bind(this);
|
||||||
|
|
||||||
this.listRef = React.createRef();
|
this.listRef = React.createRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
collapseAllHeaders(): void {
|
||||||
|
const ul = this.listRef.current;
|
||||||
|
if (ul == null) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
const tickers = ul.getElementsByClassName("accordion-header");
|
||||||
|
for (let i = 0; i < tickers.length; ++i) {
|
||||||
|
const ticker = tickers[i];
|
||||||
|
if (!(ticker instanceof HTMLButtonElement)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
collapseAllHeaders(): void {
|
if (ticker.classList.contains("active")) {
|
||||||
const ul = this.listRef.current;
|
ticker.click();
|
||||||
if (ul == null) { return; }
|
}
|
||||||
const tickers = ul.getElementsByClassName("accordion-header");
|
|
||||||
for (let i = 0; i < tickers.length; ++i) {
|
|
||||||
const ticker = tickers[i];
|
|
||||||
if (!(ticker instanceof HTMLButtonElement)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ticker.classList.contains("active")) {
|
|
||||||
ticker.click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
expandAllHeaders(): void {
|
expandAllHeaders(): void {
|
||||||
const ul = this.listRef.current;
|
const ul = this.listRef.current;
|
||||||
if (ul == null) { return; }
|
if (ul == null) {
|
||||||
const tickers = ul.getElementsByClassName("accordion-header");
|
return;
|
||||||
for (let i = 0; i < tickers.length; ++i) {
|
|
||||||
const ticker = tickers[i];
|
|
||||||
if (!(ticker instanceof HTMLButtonElement)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ticker.classList.contains("active")) {
|
|
||||||
ticker.click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
const tickers = ul.getElementsByClassName("accordion-header");
|
||||||
|
for (let i = 0; i < tickers.length; ++i) {
|
||||||
|
const ticker = tickers[i];
|
||||||
|
if (!(ticker instanceof HTMLButtonElement)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
rerender(): void {
|
if (!ticker.classList.contains("active")) {
|
||||||
this.setState((prevState) => {
|
ticker.click();
|
||||||
return {
|
}
|
||||||
rerenderFlag: !prevState.rerenderFlag,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sortByAcquirementTime(): void {
|
rerender(): void {
|
||||||
Settings.OwnedAugmentationsOrder = OwnedAugmentationsOrderSetting.AcquirementTime;
|
this.setState((prevState) => {
|
||||||
this.rerender();
|
return {
|
||||||
}
|
rerenderFlag: !prevState.rerenderFlag,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
sortInOrder(): void {
|
sortByAcquirementTime(): void {
|
||||||
Settings.OwnedAugmentationsOrder = OwnedAugmentationsOrderSetting.Alphabetically
|
Settings.OwnedAugmentationsOrder = OwnedAugmentationsOrderSetting.AcquirementTime;
|
||||||
this.rerender();
|
this.rerender();
|
||||||
}
|
}
|
||||||
|
|
||||||
render(): React.ReactNode {
|
sortInOrder(): void {
|
||||||
return (
|
Settings.OwnedAugmentationsOrder = OwnedAugmentationsOrderSetting.Alphabetically;
|
||||||
<>
|
this.rerender();
|
||||||
<ListConfiguration
|
}
|
||||||
collapseAllButtonsFn={this.collapseAllHeaders}
|
|
||||||
expandAllButtonsFn={this.expandAllHeaders}
|
render(): React.ReactNode {
|
||||||
sortByAcquirementTimeFn={this.sortByAcquirementTime}
|
return (
|
||||||
sortInOrderFn={this.sortInOrder}
|
<>
|
||||||
/>
|
<ListConfiguration
|
||||||
<ul className="augmentations-list" ref={this.listRef}>
|
collapseAllButtonsFn={this.collapseAllHeaders}
|
||||||
<SourceFileMinus1 />
|
expandAllButtonsFn={this.expandAllHeaders}
|
||||||
<OwnedSourceFiles />
|
sortByAcquirementTimeFn={this.sortByAcquirementTime}
|
||||||
<InstalledAugmentations />
|
sortInOrderFn={this.sortInOrder}
|
||||||
</ul>
|
/>
|
||||||
</>
|
<ul className="augmentations-list" ref={this.listRef}>
|
||||||
)
|
<SourceFileMinus1 />
|
||||||
}
|
<OwnedSourceFiles />
|
||||||
|
<InstalledAugmentations />
|
||||||
|
</ul>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,33 +7,27 @@ import * as React from "react";
|
|||||||
import { StdButton } from "../../ui/React/StdButton";
|
import { StdButton } from "../../ui/React/StdButton";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
collapseAllButtonsFn: () => void;
|
collapseAllButtonsFn: () => void;
|
||||||
expandAllButtonsFn: () => void;
|
expandAllButtonsFn: () => void;
|
||||||
sortByAcquirementTimeFn: () => void;
|
sortByAcquirementTimeFn: () => void;
|
||||||
sortInOrderFn: () => void;
|
sortInOrderFn: () => void;
|
||||||
}
|
};
|
||||||
|
|
||||||
export function ListConfiguration(props: IProps): React.ReactElement {
|
export function ListConfiguration(props: IProps): React.ReactElement {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<StdButton
|
<StdButton onClick={props.expandAllButtonsFn} text="Expand All" />
|
||||||
onClick={props.expandAllButtonsFn}
|
<StdButton onClick={props.collapseAllButtonsFn} text="Collapse All" />
|
||||||
text="Expand All"
|
<StdButton
|
||||||
/>
|
onClick={props.sortInOrderFn}
|
||||||
<StdButton
|
text="Sort in Order"
|
||||||
onClick={props.collapseAllButtonsFn}
|
tooltip="Sorts the Augmentations alphabetically and Source-Files in numeral order"
|
||||||
text="Collapse All"
|
/>
|
||||||
/>
|
<StdButton
|
||||||
<StdButton
|
onClick={props.sortByAcquirementTimeFn}
|
||||||
onClick={props.sortInOrderFn}
|
text="Sort by Acquirement Time"
|
||||||
text="Sort in Order"
|
tooltip="Sorts the Augmentations and Source-Files based on when you acquired them (same as default)"
|
||||||
tooltip="Sorts the Augmentations alphabetically and Source-Files in numeral order"
|
/>
|
||||||
/>
|
</>
|
||||||
<StdButton
|
);
|
||||||
onClick={props.sortByAcquirementTimeFn}
|
|
||||||
text="Sort by Acquirement Time"
|
|
||||||
tooltip="Sorts the Augmentations and Source-Files based on when you acquired them (same as default)"
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,30 +12,28 @@ import { SourceFiles } from "../../SourceFile/SourceFiles";
|
|||||||
import { SourceFileAccordion } from "../../ui/React/SourceFileAccordion";
|
import { SourceFileAccordion } from "../../ui/React/SourceFileAccordion";
|
||||||
|
|
||||||
export function OwnedSourceFiles(): React.ReactElement {
|
export function OwnedSourceFiles(): React.ReactElement {
|
||||||
const sourceSfs = Player.sourceFiles.slice();
|
const sourceSfs = Player.sourceFiles.slice();
|
||||||
|
|
||||||
if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) {
|
if (Settings.OwnedAugmentationsOrder === OwnedAugmentationsOrderSetting.Alphabetically) {
|
||||||
sourceSfs.sort((sf1, sf2) => {
|
sourceSfs.sort((sf1, sf2) => {
|
||||||
return sf1.n - sf2.n;
|
return sf1.n - sf2.n;
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const sfs = sourceSfs.map((e) => {
|
||||||
|
const srcFileKey = "SourceFile" + e.n;
|
||||||
|
const sfObj = SourceFiles[srcFileKey];
|
||||||
|
if (sfObj == null) {
|
||||||
|
console.error(`Invalid source file number: ${e.n}`);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const sfs = sourceSfs.map((e) => {
|
|
||||||
const srcFileKey = "SourceFile" + e.n;
|
|
||||||
const sfObj = SourceFiles[srcFileKey];
|
|
||||||
if (sfObj == null) {
|
|
||||||
console.error(`Invalid source file number: ${e.n}`);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<li key={e.n}>
|
|
||||||
<SourceFileAccordion level={e.lvl} sf={sfObj} />
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>{sfs}</>
|
<li key={e.n}>
|
||||||
|
<SourceFileAccordion level={e.lvl} sf={sfObj} />
|
||||||
|
</li>
|
||||||
);
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return <>{sfs}</>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,118 +5,176 @@ import * as React from "react";
|
|||||||
|
|
||||||
import { Player } from "../../Player";
|
import { Player } from "../../Player";
|
||||||
import { numeralWrapper } from "../../ui/numeralFormat";
|
import { numeralWrapper } from "../../ui/numeralFormat";
|
||||||
import { Augmentations} from "../Augmentations";
|
import { Augmentations } from "../Augmentations";
|
||||||
|
|
||||||
function calculateAugmentedStats(): any {
|
function calculateAugmentedStats(): any {
|
||||||
const augP: any = {};
|
const augP: any = {};
|
||||||
for(const aug of Player.queuedAugmentations) {
|
for (const aug of Player.queuedAugmentations) {
|
||||||
const augObj = Augmentations[aug.name];
|
const augObj = Augmentations[aug.name];
|
||||||
for (const mult in augObj.mults) {
|
for (const mult in augObj.mults) {
|
||||||
const v = augP[mult] ? augP[mult] : 1;
|
const v = augP[mult] ? augP[mult] : 1;
|
||||||
augP[mult] = v * augObj.mults[mult];
|
augP[mult] = v * augObj.mults[mult];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return augP;
|
}
|
||||||
|
return augP;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function PlayerMultipliers(): React.ReactElement {
|
export function PlayerMultipliers(): React.ReactElement {
|
||||||
const mults = calculateAugmentedStats();
|
const mults = calculateAugmentedStats();
|
||||||
function MultiplierTable(rows: any[]): React.ReactElement {
|
function MultiplierTable(rows: any[]): React.ReactElement {
|
||||||
function improvements(r: number): JSX.Element[] {
|
function improvements(r: number): JSX.Element[] {
|
||||||
let elems: JSX.Element[] = [];
|
let elems: JSX.Element[] = [];
|
||||||
if(r) {
|
if (r) {
|
||||||
elems = [
|
elems = [<td key="2"> {"=>"} </td>, <td key="3">{numeralWrapper.formatPercentage(r)}</td>];
|
||||||
<td key="2"> {"=>"} </td>,
|
}
|
||||||
<td key="3">{numeralWrapper.formatPercentage(r)}</td>,
|
return elems;
|
||||||
];
|
|
||||||
}
|
|
||||||
return elems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return <table>
|
|
||||||
<tbody>
|
|
||||||
{rows.map((r: any) => <tr key={r[0]}>
|
|
||||||
<td key="0"><span>{r[0]} multiplier: </span></td>
|
|
||||||
<td key="1" style={{textAlign: 'right'}}>{numeralWrapper.formatPercentage(r[1])}</td>
|
|
||||||
{improvements(r[2])}
|
|
||||||
</tr>)}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
}
|
|
||||||
|
|
||||||
function BladeburnerMults(): React.ReactElement {
|
|
||||||
if(!Player.canAccessBladeburner()) return (<></>);
|
|
||||||
return (<>
|
|
||||||
{MultiplierTable([
|
|
||||||
['Bladeburner Success Chance', Player.bladeburner_success_chance_mult, Player.bladeburner_success_chance_mult*mults.bladeburner_success_chance_mult],
|
|
||||||
['Bladeburner Max Stamina', Player.bladeburner_max_stamina_mult, Player.bladeburner_max_stamina_mult*mults.bladeburner_max_stamina_mult],
|
|
||||||
['Bladeburner Stamina Gain', Player.bladeburner_stamina_gain_mult, Player.bladeburner_stamina_gain_mult*mults.bladeburner_stamina_gain_mult],
|
|
||||||
['Bladeburner Field Analysis', Player.bladeburner_analysis_mult, Player.bladeburner_analysis_mult*mults.bladeburner_analysis_mult],
|
|
||||||
])}<br />
|
|
||||||
</>);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<table>
|
||||||
<p><strong><u>Multipliers:</u></strong></p><br />
|
<tbody>
|
||||||
|
{rows.map((r: any) => (
|
||||||
|
<tr key={r[0]}>
|
||||||
|
<td key="0">
|
||||||
|
<span>{r[0]} multiplier: </span>
|
||||||
|
</td>
|
||||||
|
<td key="1" style={{ textAlign: "right" }}>
|
||||||
|
{numeralWrapper.formatPercentage(r[1])}
|
||||||
|
</td>
|
||||||
|
{improvements(r[2])}
|
||||||
|
</tr>
|
||||||
|
))}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function BladeburnerMults(): React.ReactElement {
|
||||||
|
if (!Player.canAccessBladeburner()) return <></>;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Hacking Chance ', Player.hacking_chance_mult, Player.hacking_chance_mult*mults.hacking_chance_mult],
|
[
|
||||||
['Hacking Speed ', Player.hacking_speed_mult, Player.hacking_speed_mult*mults.hacking_speed_mult],
|
"Bladeburner Success Chance",
|
||||||
['Hacking Money ', Player.hacking_money_mult, Player.hacking_money_mult*mults.hacking_money_mult],
|
Player.bladeburner_success_chance_mult,
|
||||||
['Hacking Growth ', Player.hacking_grow_mult, Player.hacking_grow_mult*mults.hacking_grow_mult],
|
Player.bladeburner_success_chance_mult * mults.bladeburner_success_chance_mult,
|
||||||
])}<br />
|
],
|
||||||
|
[
|
||||||
|
"Bladeburner Max Stamina",
|
||||||
|
Player.bladeburner_max_stamina_mult,
|
||||||
|
Player.bladeburner_max_stamina_mult * mults.bladeburner_max_stamina_mult,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bladeburner Stamina Gain",
|
||||||
|
Player.bladeburner_stamina_gain_mult,
|
||||||
|
Player.bladeburner_stamina_gain_mult * mults.bladeburner_stamina_gain_mult,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bladeburner Field Analysis",
|
||||||
|
Player.bladeburner_analysis_mult,
|
||||||
|
Player.bladeburner_analysis_mult * mults.bladeburner_analysis_mult,
|
||||||
|
],
|
||||||
|
])}
|
||||||
|
<br />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
{MultiplierTable([
|
return (
|
||||||
['Hacking Level ', Player.hacking_mult, Player.hacking_mult*mults.hacking_mult],
|
<>
|
||||||
['Hacking Experience ', Player.hacking_exp_mult, Player.hacking_exp_mult*mults.hacking_exp_mult],
|
<p>
|
||||||
])}<br />
|
<strong>
|
||||||
|
<u>Multipliers:</u>
|
||||||
|
</strong>
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
{MultiplierTable([
|
||||||
|
["Hacking Chance ", Player.hacking_chance_mult, Player.hacking_chance_mult * mults.hacking_chance_mult],
|
||||||
|
["Hacking Speed ", Player.hacking_speed_mult, Player.hacking_speed_mult * mults.hacking_speed_mult],
|
||||||
|
["Hacking Money ", Player.hacking_money_mult, Player.hacking_money_mult * mults.hacking_money_mult],
|
||||||
|
["Hacking Growth ", Player.hacking_grow_mult, Player.hacking_grow_mult * mults.hacking_grow_mult],
|
||||||
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
|
{MultiplierTable([
|
||||||
|
["Hacking Level ", Player.hacking_mult, Player.hacking_mult * mults.hacking_mult],
|
||||||
|
["Hacking Experience ", Player.hacking_exp_mult, Player.hacking_exp_mult * mults.hacking_exp_mult],
|
||||||
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Strength Level ', Player.strength_mult, Player.strength_mult*mults.strength_mult],
|
["Strength Level ", Player.strength_mult, Player.strength_mult * mults.strength_mult],
|
||||||
['Strength Experience ', Player.strength_exp_mult, Player.strength_exp_mult*mults.strength_exp_mult],
|
["Strength Experience ", Player.strength_exp_mult, Player.strength_exp_mult * mults.strength_exp_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Defense Level ', Player.defense_mult, Player.defense_mult*mults.defense_mult],
|
["Defense Level ", Player.defense_mult, Player.defense_mult * mults.defense_mult],
|
||||||
['Defense Experience ', Player.defense_exp_mult, Player.defense_exp_mult*mults.defense_exp_mult],
|
["Defense Experience ", Player.defense_exp_mult, Player.defense_exp_mult * mults.defense_exp_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Dexterity Level ', Player.dexterity_mult, Player.dexterity_mult*mults.dexterity_mult],
|
["Dexterity Level ", Player.dexterity_mult, Player.dexterity_mult * mults.dexterity_mult],
|
||||||
['Dexterity Experience ', Player.dexterity_exp_mult, Player.dexterity_exp_mult*mults.dexterity_exp_mult],
|
["Dexterity Experience ", Player.dexterity_exp_mult, Player.dexterity_exp_mult * mults.dexterity_exp_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Agility Level ', Player.agility_mult, Player.agility_mult*mults.agility_mult],
|
["Agility Level ", Player.agility_mult, Player.agility_mult * mults.agility_mult],
|
||||||
['Agility Experience ', Player.agility_exp_mult, Player.agility_exp_mult*mults.agility_exp_mult],
|
["Agility Experience ", Player.agility_exp_mult, Player.agility_exp_mult * mults.agility_exp_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Charisma Level ', Player.charisma_mult, Player.charisma_mult*mults.charisma_mult],
|
["Charisma Level ", Player.charisma_mult, Player.charisma_mult * mults.charisma_mult],
|
||||||
['Charisma Experience ', Player.charisma_exp_mult, Player.charisma_exp_mult*mults.charisma_exp_mult],
|
["Charisma Experience ", Player.charisma_exp_mult, Player.charisma_exp_mult * mults.charisma_exp_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Hacknet Node production ', Player.hacknet_node_money_mult, Player.hacknet_node_money_mult*mults.hacknet_node_money_mult],
|
[
|
||||||
['Hacknet Node purchase cost ', Player.hacknet_node_purchase_cost_mult, Player.hacknet_node_purchase_cost_mult*mults.hacknet_node_purchase_cost_mult],
|
"Hacknet Node production ",
|
||||||
['Hacknet Node RAM upgrade cost ', Player.hacknet_node_ram_cost_mult, Player.hacknet_node_ram_cost_mult*mults.hacknet_node_ram_cost_mult],
|
Player.hacknet_node_money_mult,
|
||||||
['Hacknet Node Core purchase cost ', Player.hacknet_node_core_cost_mult, Player.hacknet_node_core_cost_mult*mults.hacknet_node_core_cost_mult],
|
Player.hacknet_node_money_mult * mults.hacknet_node_money_mult,
|
||||||
['Hacknet Node level upgrade cost ', Player.hacknet_node_level_cost_mult, Player.hacknet_node_level_cost_mult*mults.hacknet_node_level_cost_mult],
|
],
|
||||||
])}<br />
|
[
|
||||||
|
"Hacknet Node purchase cost ",
|
||||||
|
Player.hacknet_node_purchase_cost_mult,
|
||||||
|
Player.hacknet_node_purchase_cost_mult * mults.hacknet_node_purchase_cost_mult,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hacknet Node RAM upgrade cost ",
|
||||||
|
Player.hacknet_node_ram_cost_mult,
|
||||||
|
Player.hacknet_node_ram_cost_mult * mults.hacknet_node_ram_cost_mult,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hacknet Node Core purchase cost ",
|
||||||
|
Player.hacknet_node_core_cost_mult,
|
||||||
|
Player.hacknet_node_core_cost_mult * mults.hacknet_node_core_cost_mult,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hacknet Node level upgrade cost ",
|
||||||
|
Player.hacknet_node_level_cost_mult,
|
||||||
|
Player.hacknet_node_level_cost_mult * mults.hacknet_node_level_cost_mult,
|
||||||
|
],
|
||||||
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Company reputation gain ', Player.company_rep_mult, Player.company_rep_mult*mults.company_rep_mult],
|
["Company reputation gain ", Player.company_rep_mult, Player.company_rep_mult * mults.company_rep_mult],
|
||||||
['Faction reputation gain ', Player.faction_rep_mult, Player.faction_rep_mult*mults.faction_rep_mult],
|
["Faction reputation gain ", Player.faction_rep_mult, Player.faction_rep_mult * mults.faction_rep_mult],
|
||||||
['Salary ', Player.work_money_mult, Player.work_money_mult*mults.work_money_mult],
|
["Salary ", Player.work_money_mult, Player.work_money_mult * mults.work_money_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
{MultiplierTable([
|
{MultiplierTable([
|
||||||
['Crime success ', Player.crime_success_mult, Player.crime_success_mult*mults.crime_success_mult],
|
["Crime success ", Player.crime_success_mult, Player.crime_success_mult * mults.crime_success_mult],
|
||||||
['Crime money ', Player.crime_money_mult, Player.crime_money_mult*mults.crime_money_mult],
|
["Crime money ", Player.crime_money_mult, Player.crime_money_mult * mults.crime_money_mult],
|
||||||
])}<br />
|
])}
|
||||||
|
<br />
|
||||||
|
|
||||||
<BladeburnerMults />
|
<BladeburnerMults />
|
||||||
</>
|
</>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,32 +11,30 @@ import { Player } from "../../Player";
|
|||||||
import { AugmentationAccordion } from "../../ui/React/AugmentationAccordion";
|
import { AugmentationAccordion } from "../../ui/React/AugmentationAccordion";
|
||||||
|
|
||||||
export function PurchasedAugmentations(): React.ReactElement {
|
export function PurchasedAugmentations(): React.ReactElement {
|
||||||
const augs: React.ReactElement[] = [];
|
const augs: React.ReactElement[] = [];
|
||||||
// Only render the last NeuroFlux (there are no findLastIndex btw)
|
// Only render the last NeuroFlux (there are no findLastIndex btw)
|
||||||
let nfgIndex = -1;
|
let nfgIndex = -1;
|
||||||
for(let i = Player.queuedAugmentations.length-1; i >= 0; i--) {
|
for (let i = Player.queuedAugmentations.length - 1; i >= 0; i--) {
|
||||||
if(Player.queuedAugmentations[i].name === AugmentationNames.NeuroFluxGovernor) {
|
if (Player.queuedAugmentations[i].name === AugmentationNames.NeuroFluxGovernor) {
|
||||||
nfgIndex = i;
|
nfgIndex = i;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (let i = 0; i < Player.queuedAugmentations.length; i++) {
|
}
|
||||||
const ownedAug = Player.queuedAugmentations[i];
|
for (let i = 0; i < Player.queuedAugmentations.length; i++) {
|
||||||
if(ownedAug.name === AugmentationNames.NeuroFluxGovernor && i !== nfgIndex) continue;
|
const ownedAug = Player.queuedAugmentations[i];
|
||||||
const aug = Augmentations[ownedAug.name];
|
if (ownedAug.name === AugmentationNames.NeuroFluxGovernor && i !== nfgIndex) continue;
|
||||||
let level = null;
|
const aug = Augmentations[ownedAug.name];
|
||||||
if (ownedAug.name === AugmentationNames.NeuroFluxGovernor) {
|
let level = null;
|
||||||
level = ownedAug.level;
|
if (ownedAug.name === AugmentationNames.NeuroFluxGovernor) {
|
||||||
}
|
level = ownedAug.level;
|
||||||
|
|
||||||
augs.push(
|
|
||||||
<li key={`${ownedAug.name}${ownedAug.level}`}>
|
|
||||||
<AugmentationAccordion aug={aug} level={level} />
|
|
||||||
</li>,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
augs.push(
|
||||||
<ul className="augmentations-list">{augs}</ul>
|
<li key={`${ownedAug.name}${ownedAug.level}`}>
|
||||||
)
|
<AugmentationAccordion aug={aug} level={level} />
|
||||||
|
</li>,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return <ul className="augmentations-list">{augs}</ul>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,88 +13,79 @@ import { StdButton } from "../../ui/React/StdButton";
|
|||||||
import { canGetBonus } from "../../ExportBonus";
|
import { canGetBonus } from "../../ExportBonus";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
exportGameFn: () => void;
|
exportGameFn: () => void;
|
||||||
installAugmentationsFn: () => void;
|
installAugmentationsFn: () => void;
|
||||||
}
|
};
|
||||||
|
|
||||||
type IState = {
|
type IState = {
|
||||||
rerender: boolean;
|
rerender: boolean;
|
||||||
}
|
};
|
||||||
|
|
||||||
export class AugmentationsRoot extends React.Component<IProps, IState> {
|
export class AugmentationsRoot extends React.Component<IProps, IState> {
|
||||||
constructor(props: IProps) {
|
constructor(props: IProps) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
rerender: false,
|
rerender: false,
|
||||||
};
|
};
|
||||||
this.export = this.export.bind(this);
|
this.export = this.export.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
export(): void {
|
||||||
|
this.props.exportGameFn();
|
||||||
|
this.setState({
|
||||||
|
rerender: !this.state.rerender,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render(): React.ReactNode {
|
||||||
|
function exportBonusStr(): string {
|
||||||
|
if (canGetBonus()) return "(+1 favor to all factions)";
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
export(): void {
|
return (
|
||||||
this.props.exportGameFn();
|
<div id="augmentations-content">
|
||||||
this.setState({
|
<h1>Purchased Augmentations</h1>
|
||||||
rerender: !this.state.rerender,
|
<p>
|
||||||
});
|
Below is a list of all Augmentations you have purchased but not yet installed. Click the button below to
|
||||||
}
|
install them.
|
||||||
|
</p>
|
||||||
render(): React.ReactNode {
|
<p>WARNING: Installing your Augmentations resets most of your progress, including:</p>
|
||||||
function exportBonusStr(): string {
|
<br />
|
||||||
if(canGetBonus()) return "(+1 favor to all factions)";
|
<p>- Stats/Skill levels and Experience</p>
|
||||||
return "";
|
<p>- Money</p>
|
||||||
}
|
<p>- Scripts on every computer but your home computer</p>
|
||||||
|
<p>- Purchased servers</p>
|
||||||
return (
|
<p>- Hacknet Nodes</p>
|
||||||
<div id="augmentations-content">
|
<p>- Faction/Company reputation</p>
|
||||||
<h1>Purchased Augmentations</h1>
|
<p>- Stocks</p>
|
||||||
<p>
|
<br />
|
||||||
Below is a list of all Augmentations you have purchased but not
|
<p>
|
||||||
yet installed. Click the button below to install them.
|
Installing Augmentations lets you start over with the perks and benefits granted by all of the Augmentations
|
||||||
</p>
|
you have ever installed. Also, you will keep any scripts and RAM/Core upgrades on your home computer (but you
|
||||||
<p>
|
will lose all programs besides NUKE.exe)
|
||||||
WARNING: Installing your Augmentations resets most of your progress,
|
</p>
|
||||||
including:
|
<StdButton
|
||||||
</p><br />
|
onClick={this.props.installAugmentationsFn}
|
||||||
<p>- Stats/Skill levels and Experience</p>
|
text="Install Augmentations"
|
||||||
<p>- Money</p>
|
tooltip="'I never asked for this'"
|
||||||
<p>- Scripts on every computer but your home computer</p>
|
/>
|
||||||
<p>- Purchased servers</p>
|
<StdButton
|
||||||
<p>- Hacknet Nodes</p>
|
addClasses="flashing-button"
|
||||||
<p>- Faction/Company reputation</p>
|
onClick={this.export}
|
||||||
<p>- Stocks</p><br />
|
text={`Backup Save ${exportBonusStr()}`}
|
||||||
<p>
|
tooltip="It's always a good idea to backup/export your save!"
|
||||||
Installing Augmentations lets you start over with the perks and
|
/>
|
||||||
benefits granted by all of the Augmentations you have ever
|
<PurchasedAugmentations />
|
||||||
installed. Also, you will keep any scripts and RAM/Core upgrades
|
<h1>Installed Augmentations</h1>
|
||||||
on your home computer (but you will lose all programs besides
|
<p>
|
||||||
NUKE.exe)
|
{`List of all Augmentations ${Player.sourceFiles.length > 0 ? "and Source Files " : ""} ` +
|
||||||
</p>
|
`that have been installed. You have gained the effects of these.`}
|
||||||
|
</p>
|
||||||
<StdButton
|
<InstalledAugmentationsAndSourceFiles />
|
||||||
onClick={this.props.installAugmentationsFn}
|
<br /> <br />
|
||||||
text="Install Augmentations"
|
<PlayerMultipliers />
|
||||||
tooltip="'I never asked for this'"
|
</div>
|
||||||
/>
|
);
|
||||||
|
}
|
||||||
<StdButton
|
|
||||||
addClasses="flashing-button"
|
|
||||||
onClick={this.export}
|
|
||||||
text={`Backup Save ${exportBonusStr()}`}
|
|
||||||
tooltip="It's always a good idea to backup/export your save!"
|
|
||||||
/>
|
|
||||||
<PurchasedAugmentations />
|
|
||||||
|
|
||||||
<h1>Installed Augmentations</h1>
|
|
||||||
<p>
|
|
||||||
{
|
|
||||||
`List of all Augmentations ${Player.sourceFiles.length > 0 ? "and Source Files " : ""} ` +
|
|
||||||
`that have been installed. You have gained the effects of these.`
|
|
||||||
}
|
|
||||||
</p>
|
|
||||||
<InstalledAugmentationsAndSourceFiles />
|
|
||||||
|
|
||||||
<br /> <br />
|
|
||||||
<PlayerMultipliers />
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,32 +10,40 @@ import { Exploit, ExploitName } from "../../Exploits/Exploit";
|
|||||||
import { Accordion } from "../../ui/React/Accordion";
|
import { Accordion } from "../../ui/React/Accordion";
|
||||||
|
|
||||||
export function SourceFileMinus1(): React.ReactElement {
|
export function SourceFileMinus1(): React.ReactElement {
|
||||||
const exploits = Player.exploits;
|
const exploits = Player.exploits;
|
||||||
|
|
||||||
if(exploits.length === 0) {
|
if (exploits.length === 0) {
|
||||||
return <></>
|
return <></>;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (<li key={-1}>
|
return (
|
||||||
<Accordion
|
<li key={-1}>
|
||||||
headerContent={
|
<Accordion
|
||||||
<>
|
headerContent={
|
||||||
Source-File -1: Exploits in the BitNodes
|
<>
|
||||||
<br />
|
Source-File -1: Exploits in the BitNodes
|
||||||
Level {exploits.length} / ?
|
<br />
|
||||||
</>
|
Level {exploits.length} / ?
|
||||||
}
|
</>
|
||||||
panelContent={
|
}
|
||||||
<>
|
panelContent={
|
||||||
<p>This Source-File can only be acquired with obscure knowledge of the game, javascript, and the web ecosystem.</p>
|
<>
|
||||||
<p>It increases all of the player's multipliers by 0.1%</p><br />
|
<p>
|
||||||
|
This Source-File can only be acquired with obscure knowledge of the game, javascript, and the web
|
||||||
|
ecosystem.
|
||||||
|
</p>
|
||||||
|
<p>It increases all of the player's multipliers by 0.1%</p>
|
||||||
|
<br />
|
||||||
|
|
||||||
<p>You have found the following exploits:</p>
|
<p>You have found the following exploits:</p>
|
||||||
<ul>
|
<ul>
|
||||||
{exploits.map((c: Exploit) => <li key={c}>* {ExploitName(c)}</li>)}
|
{exploits.map((c: Exploit) => (
|
||||||
</ul>
|
<li key={c}>* {ExploitName(c)}</li>
|
||||||
</>
|
))}
|
||||||
}
|
</ul>
|
||||||
/>
|
</>
|
||||||
</li>)
|
}
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,216 +4,216 @@
|
|||||||
* player toward the intended strategy. Unless they really want to play the long, slow game of waiting...
|
* player toward the intended strategy. Unless they really want to play the long, slow game of waiting...
|
||||||
*/
|
*/
|
||||||
interface IBitNodeMultipliers {
|
interface IBitNodeMultipliers {
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's agility level (not exp) scales
|
* Influences how quickly the player's agility level (not exp) scales
|
||||||
*/
|
*/
|
||||||
AgilityLevelMultiplier: number;
|
AgilityLevelMultiplier: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the base cost to purchase an augmentation.
|
* Influences the base cost to purchase an augmentation.
|
||||||
*/
|
*/
|
||||||
AugmentationMoneyCost: number;
|
AugmentationMoneyCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the base rep the player must have with a faction to purchase an augmentation.
|
* Influences the base rep the player must have with a faction to purchase an augmentation.
|
||||||
*/
|
*/
|
||||||
AugmentationRepCost: number;
|
AugmentationRepCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player can gain rank within Bladeburner.
|
* Influences how quickly the player can gain rank within Bladeburner.
|
||||||
*/
|
*/
|
||||||
BladeburnerRank: number;
|
BladeburnerRank: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the cost of skill levels from Bladeburner.
|
* Influences the cost of skill levels from Bladeburner.
|
||||||
*/
|
*/
|
||||||
BladeburnerSkillCost: number;
|
BladeburnerSkillCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's charisma level (not exp) scales
|
* Influences how quickly the player's charisma level (not exp) scales
|
||||||
*/
|
*/
|
||||||
CharismaLevelMultiplier: number;
|
CharismaLevelMultiplier: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the experience gained for each ability when a player completes a class.
|
* Influences the experience gained for each ability when a player completes a class.
|
||||||
*/
|
*/
|
||||||
ClassGymExpGain: number;
|
ClassGymExpGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the amount of money gained from completing Coding Contracts
|
* Influences the amount of money gained from completing Coding Contracts
|
||||||
**/
|
**/
|
||||||
CodingContractMoney: number;
|
CodingContractMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the experience gained for each ability when the player completes working their job.
|
* Influences the experience gained for each ability when the player completes working their job.
|
||||||
*/
|
*/
|
||||||
CompanyWorkExpGain: number;
|
CompanyWorkExpGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money the player earns when completing working their job.
|
* Influences how much money the player earns when completing working their job.
|
||||||
*/
|
*/
|
||||||
CompanyWorkMoney: number;
|
CompanyWorkMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the valuation of corporations created by the player.
|
* Influences the valuation of corporations created by the player.
|
||||||
*/
|
*/
|
||||||
CorporationValuation: number;
|
CorporationValuation: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the base experience gained for each ability when the player commits a crime.
|
* Influences the base experience gained for each ability when the player commits a crime.
|
||||||
*/
|
*/
|
||||||
CrimeExpGain: number;
|
CrimeExpGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the base money gained when the player commits a crime.
|
* Influences the base money gained when the player commits a crime.
|
||||||
*/
|
*/
|
||||||
CrimeMoney: number;
|
CrimeMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how many Augmentations you need in order to get invited to the Daedalus faction
|
* Influences how many Augmentations you need in order to get invited to the Daedalus faction
|
||||||
*/
|
*/
|
||||||
DaedalusAugsRequirement: number;
|
DaedalusAugsRequirement: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's defense level (not exp) scales
|
* Influences how quickly the player's defense level (not exp) scales
|
||||||
*/
|
*/
|
||||||
DefenseLevelMultiplier: number;
|
DefenseLevelMultiplier: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's dexterity level (not exp) scales
|
* Influences how quickly the player's dexterity level (not exp) scales
|
||||||
*/
|
*/
|
||||||
DexterityLevelMultiplier: number;
|
DexterityLevelMultiplier: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much rep the player gains in each faction simply by being a member.
|
* Influences how much rep the player gains in each faction simply by being a member.
|
||||||
*/
|
*/
|
||||||
FactionPassiveRepGain: number;
|
FactionPassiveRepGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the experience gained for each ability when the player completes work for a Faction.
|
* Influences the experience gained for each ability when the player completes work for a Faction.
|
||||||
*/
|
*/
|
||||||
FactionWorkExpGain: number;
|
FactionWorkExpGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much rep the player gains when performing work for a faction.
|
* Influences how much rep the player gains when performing work for a faction.
|
||||||
*/
|
*/
|
||||||
FactionWorkRepGain: number;
|
FactionWorkRepGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much it costs to unlock the stock market's 4S Market Data API
|
* Influences how much it costs to unlock the stock market's 4S Market Data API
|
||||||
*/
|
*/
|
||||||
FourSigmaMarketDataApiCost: number;
|
FourSigmaMarketDataApiCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much it costs to unlock the stock market's 4S Market Data (NOT API)
|
* Influences how much it costs to unlock the stock market's 4S Market Data (NOT API)
|
||||||
*/
|
*/
|
||||||
FourSigmaMarketDataCost: number;
|
FourSigmaMarketDataCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much negative karma is required to create a gang in this bitnode.
|
* Influences how much negative karma is required to create a gang in this bitnode.
|
||||||
*/
|
*/
|
||||||
GangKarmaRequirement: number;
|
GangKarmaRequirement: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the experienced gained when hacking a server.
|
* Influences the experienced gained when hacking a server.
|
||||||
*/
|
*/
|
||||||
HackExpGain: number;
|
HackExpGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's hacking level (not experience) scales
|
* Influences how quickly the player's hacking level (not experience) scales
|
||||||
*/
|
*/
|
||||||
HackingLevelMultiplier: number;
|
HackingLevelMultiplier: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money is produced by Hacknet Nodes.
|
* Influences how much money is produced by Hacknet Nodes.
|
||||||
* Influeces the hash rate of Hacknet Servers (unlocked in BitNode-9)
|
* Influeces the hash rate of Hacknet Servers (unlocked in BitNode-9)
|
||||||
*/
|
*/
|
||||||
HacknetNodeMoney: number;
|
HacknetNodeMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money it costs to upgrade your home computer's RAM
|
* Influences how much money it costs to upgrade your home computer's RAM
|
||||||
*/
|
*/
|
||||||
HomeComputerRamCost: number;
|
HomeComputerRamCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money is gained when the player infiltrates a company.
|
* Influences how much money is gained when the player infiltrates a company.
|
||||||
*/
|
*/
|
||||||
InfiltrationMoney: number;
|
InfiltrationMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much rep the player can gain from factions when selling stolen documents and secrets
|
* Influences how much rep the player can gain from factions when selling stolen documents and secrets
|
||||||
*/
|
*/
|
||||||
InfiltrationRep: number;
|
InfiltrationRep: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money can be stolen from a server when the player performs a hack against it through
|
* Influences how much money can be stolen from a server when the player performs a hack against it through
|
||||||
* the Terminal.
|
* the Terminal.
|
||||||
*/
|
*/
|
||||||
ManualHackMoney: number;
|
ManualHackMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influence how much it costs to purchase a server
|
* Influence how much it costs to purchase a server
|
||||||
*/
|
*/
|
||||||
PurchasedServerCost: number;
|
PurchasedServerCost: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the maximum number of purchased servers you can have
|
* Influences the maximum number of purchased servers you can have
|
||||||
*/
|
*/
|
||||||
PurchasedServerLimit: number;
|
PurchasedServerLimit: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the maximum allowed RAM for a purchased server
|
* Influences the maximum allowed RAM for a purchased server
|
||||||
*/
|
*/
|
||||||
PurchasedServerMaxRam: number;
|
PurchasedServerMaxRam: number;
|
||||||
/**
|
/**
|
||||||
* Influences the minimum favor the player must have with a faction before they can donate to gain rep.
|
* Influences the minimum favor the player must have with a faction before they can donate to gain rep.
|
||||||
*/
|
*/
|
||||||
RepToDonateToFaction: number;
|
RepToDonateToFaction: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how much money can be stolen from a server when a script performs a hack against it.
|
* Influences how much money can be stolen from a server when a script performs a hack against it.
|
||||||
*/
|
*/
|
||||||
ScriptHackMoney: number;
|
ScriptHackMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The amount of money actually gained when script hack a server. This is
|
* The amount of money actually gained when script hack a server. This is
|
||||||
* different than the above because you can reduce the amount of money but
|
* different than the above because you can reduce the amount of money but
|
||||||
* not gain that same amount.
|
* not gain that same amount.
|
||||||
*/
|
*/
|
||||||
ScriptHackMoneyGain: number;
|
ScriptHackMoneyGain: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the growth percentage per cycle against a server.
|
* Influences the growth percentage per cycle against a server.
|
||||||
*/
|
*/
|
||||||
ServerGrowthRate: number;
|
ServerGrowthRate: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the maxmimum money that a server can grow to.
|
* Influences the maxmimum money that a server can grow to.
|
||||||
*/
|
*/
|
||||||
ServerMaxMoney: number;
|
ServerMaxMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the initial money that a server starts with.
|
* Influences the initial money that a server starts with.
|
||||||
*/
|
*/
|
||||||
ServerStartingMoney: number;
|
ServerStartingMoney: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the initial security level (hackDifficulty) of a server.
|
* Influences the initial security level (hackDifficulty) of a server.
|
||||||
*/
|
*/
|
||||||
ServerStartingSecurity: number;
|
ServerStartingSecurity: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences the weaken amount per invocation against a server.
|
* Influences the weaken amount per invocation against a server.
|
||||||
*/
|
*/
|
||||||
ServerWeakenRate: number;
|
ServerWeakenRate: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Influences how quickly the player's strength level (not exp) scales
|
* Influences how quickly the player's strength level (not exp) scales
|
||||||
*/
|
*/
|
||||||
StrengthLevelMultiplier: number;
|
StrengthLevelMultiplier: number;
|
||||||
|
|
||||||
// Index signature
|
// Index signature
|
||||||
[key: string]: number;
|
[key: string]: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,57 +221,57 @@ interface IBitNodeMultipliers {
|
|||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:variable-name
|
// tslint:disable-next-line:variable-name
|
||||||
export const BitNodeMultipliers: IBitNodeMultipliers = {
|
export const BitNodeMultipliers: IBitNodeMultipliers = {
|
||||||
HackingLevelMultiplier: 1,
|
HackingLevelMultiplier: 1,
|
||||||
StrengthLevelMultiplier: 1,
|
StrengthLevelMultiplier: 1,
|
||||||
DefenseLevelMultiplier: 1,
|
DefenseLevelMultiplier: 1,
|
||||||
DexterityLevelMultiplier: 1,
|
DexterityLevelMultiplier: 1,
|
||||||
AgilityLevelMultiplier: 1,
|
AgilityLevelMultiplier: 1,
|
||||||
CharismaLevelMultiplier: 1,
|
CharismaLevelMultiplier: 1,
|
||||||
|
|
||||||
ServerGrowthRate: 1,
|
ServerGrowthRate: 1,
|
||||||
ServerMaxMoney: 1,
|
ServerMaxMoney: 1,
|
||||||
ServerStartingMoney: 1,
|
ServerStartingMoney: 1,
|
||||||
ServerStartingSecurity: 1,
|
ServerStartingSecurity: 1,
|
||||||
ServerWeakenRate: 1,
|
ServerWeakenRate: 1,
|
||||||
|
|
||||||
HomeComputerRamCost: 1,
|
HomeComputerRamCost: 1,
|
||||||
|
|
||||||
PurchasedServerCost: 1,
|
PurchasedServerCost: 1,
|
||||||
PurchasedServerLimit: 1,
|
PurchasedServerLimit: 1,
|
||||||
PurchasedServerMaxRam: 1,
|
PurchasedServerMaxRam: 1,
|
||||||
|
|
||||||
CompanyWorkMoney: 1,
|
CompanyWorkMoney: 1,
|
||||||
CrimeMoney: 1,
|
CrimeMoney: 1,
|
||||||
HacknetNodeMoney: 1,
|
HacknetNodeMoney: 1,
|
||||||
ManualHackMoney: 1,
|
ManualHackMoney: 1,
|
||||||
ScriptHackMoney: 1,
|
ScriptHackMoney: 1,
|
||||||
ScriptHackMoneyGain: 1,
|
ScriptHackMoneyGain: 1,
|
||||||
CodingContractMoney: 1,
|
CodingContractMoney: 1,
|
||||||
|
|
||||||
ClassGymExpGain: 1,
|
ClassGymExpGain: 1,
|
||||||
CompanyWorkExpGain: 1,
|
CompanyWorkExpGain: 1,
|
||||||
CrimeExpGain: 1,
|
CrimeExpGain: 1,
|
||||||
FactionWorkExpGain: 1,
|
FactionWorkExpGain: 1,
|
||||||
HackExpGain: 1,
|
HackExpGain: 1,
|
||||||
|
|
||||||
FactionPassiveRepGain: 1,
|
FactionPassiveRepGain: 1,
|
||||||
FactionWorkRepGain: 1,
|
FactionWorkRepGain: 1,
|
||||||
RepToDonateToFaction: 1,
|
RepToDonateToFaction: 1,
|
||||||
|
|
||||||
AugmentationMoneyCost: 1,
|
AugmentationMoneyCost: 1,
|
||||||
AugmentationRepCost: 1,
|
AugmentationRepCost: 1,
|
||||||
|
|
||||||
InfiltrationMoney: 1,
|
InfiltrationMoney: 1,
|
||||||
InfiltrationRep: 1,
|
InfiltrationRep: 1,
|
||||||
|
|
||||||
FourSigmaMarketDataCost: 1,
|
FourSigmaMarketDataCost: 1,
|
||||||
FourSigmaMarketDataApiCost: 1,
|
FourSigmaMarketDataApiCost: 1,
|
||||||
|
|
||||||
CorporationValuation: 1,
|
CorporationValuation: 1,
|
||||||
|
|
||||||
BladeburnerRank: 1,
|
BladeburnerRank: 1,
|
||||||
BladeburnerSkillCost: 1,
|
BladeburnerSkillCost: 1,
|
||||||
|
|
||||||
DaedalusAugsRequirement: 1,
|
DaedalusAugsRequirement: 1,
|
||||||
GangKarmaRequirement: 1,
|
GangKarmaRequirement: 1,
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user