Compare commits

...

234 Commits

Author SHA1 Message Date
Olivier Gagnon e4b2a6853d v0.52.3 2021-08-15 16:23:54 -04:00
Olivier Gagnon 697a8119b0 update Changelog. 2021-08-15 16:20:34 -04:00
Olivier Gagnon b31b3dc735 Factions list screen converted to React. 2021-08-15 16:20:10 -04:00
Olivier Gagnon 5848fa53b7 Merge branch 'dev' of github.com:danielyxie/bitburner into dev 2021-08-15 15:24:23 -04:00
Olivier Gagnon 539b206cb5 update patch notes. 2021-08-15 15:23:39 -04:00
hydroflame 0f92890f0c Merge pull request #1045 from danielyxie/gang2
Gang rework
2021-08-15 15:01:27 -04:00
Olivier Gagnon 056f0213dd Fixed an issue where a faction could be joined twice. 2021-08-15 14:31:38 -04:00
Olivier Gagnon 41871de26c More adjustments to gang rework 2021-08-15 14:09:58 -04:00
Olivier Gagnon 5803ddc613 popup now all can be dismissed by clicking outside the window and have grey background 2021-08-15 12:16:16 -04:00
Olivier Gagnon 99263309ba Fix gaining too much asc pts, reduce reputation gain in gangs. 2021-08-15 12:14:56 -04:00
Olivier Gagnon 8a78ee4cf6 build dev for beta branch 2021-08-15 12:11:18 -04:00
Olivier Gagnon af46324c6d Changed the ascension mechanic 2021-08-15 12:09:44 -04:00
Olivier Gagnon 42aa6525a6 the gang UI has a force update on ascension. 2021-08-15 12:09:44 -04:00
Olivier Gagnon 05b1b55e9a bit more code cleanups 2021-08-15 12:09:44 -04:00
Olivier Gagnon febf0835c2 tweaks to how the gang ui is loaded, making it more like stock market 2021-08-15 12:09:44 -04:00
Olivier Gagnon 94ea0d253c Removed all DOM id 2021-08-15 12:09:44 -04:00
Olivier Gagnon 31cf02e8e4 some comments 2021-08-15 12:09:44 -04:00
Olivier Gagnon 97fdf7cb7f Format/cleanup of Gang UI 2021-08-15 12:09:44 -04:00
Olivier Gagnon 2c7fbc03cf Remove all uses of any in Gang, Train Combat and Train Hacking are now the best exp gains, gang equipment and augs now give exp boosts 2021-08-15 12:09:43 -04:00
Olivier Gagnon 07cca48a17 converted everything to ts 2021-08-15 12:09:43 -04:00
Olivier Gagnon 43d0fcb9f9 little cleanup 2021-08-15 12:09:43 -04:00
Olivier Gagnon 99b8dfa0c1 Converted GangMember to tsx, only Gang left 2021-08-15 12:09:43 -04:00
Olivier Gagnon 4cdd65e96c more gang react conversion 2021-08-15 12:09:43 -04:00
Olivier Gagnon 9e345b1375 Mostly done converting Gang UI to React 2021-08-15 12:09:43 -04:00
Olivier Gagnon 9466017906 modifying gang stats 2021-08-15 12:09:43 -04:00
Olivier Gagnon 9c24f1325f Gang member accordion done 2021-08-15 12:09:43 -04:00
Olivier Gagnon 26401fbb93 more panels! 2021-08-15 12:09:43 -04:00
Olivier Gagnon 69dfbb6673 panel 2 done 2021-08-15 12:09:43 -04:00
Olivier Gagnon 5863797b03 minor refactor 2021-08-15 12:09:43 -04:00
Olivier Gagnon 25f546c691 part 1 of converting gang to react 2021-08-15 12:09:43 -04:00
Olivier Gagnon 67e5e413e4 v0.52.2 2021-08-15 02:14:07 -04:00
Olivier Gagnon 796d91835c Simplify all the augmentation effects. 2021-08-15 00:49:19 -04:00
Olivier Gagnon be8d56ced9 rewrite augmentation stats description so it's autogenerated and consistent with the actual effects. 2021-08-15 00:24:31 -04:00
hydroflame 0671c48c86 Merge pull request #1029 from Kwazygloo/patch-1
Unique  Aevum Augment
2021-08-14 14:28:37 -04:00
Olivier Gagnon 94388ba6af hotfix revert tutorial instructing the player to make a script on n00dles 2021-08-11 01:05:11 -04:00
Olivier Gagnon 306fe97ed8 rebuild with the version inside the game correctly udpated 2021-08-10 21:09:37 -04:00
Olivier Gagnon c9b47ac3a6 Update changelog. 2021-08-10 21:03:40 -04:00
Olivier Gagnon 8c9f78394b v0.52.1 2021-08-10 21:01:09 -04:00
hydroflame 643d2525c5 Merge pull request #1031 from PurePandemonium/patch-1
Update doc page for Singularity functions
2021-08-10 20:56:40 -04:00
hydroflame cb6e7ef5e9 Merge pull request #1036 from schroederIT/patch-1
Fix for unintended backdoor/autolink interaction
2021-08-10 20:55:50 -04:00
hydroflame f7f9065472 Merge pull request #1037 from danielyxie/v0.52.1
V0.52.1
2021-08-10 20:55:19 -04:00
Olivier Gagnon 1e3af43ab3 v0.52.1 2021-08-10 20:54:43 -04:00
Olivier Gagnon e18aa08eeb Fix crash when quitting an unfocused job 2021-08-10 19:36:52 -04:00
schroederIT 5a75581b38 Fix for unintended backdoor/autolink interaction
Added check for backdoorFlag when calling scan-analyze-link
2021-08-09 20:22:46 -05:00
Joshua Morgan 0d3bc1ea1f Update doc page for Singularity functions
Clean up the intro a bit and separate the list by level.
2021-07-08 14:09:45 -07:00
Kwazygloo 547324a813 Update AugmentationHelpers.jsx 2021-07-06 01:55:42 -07:00
Kwazygloo fa64186120 Update AugmentationHelpers.jsx 2021-07-06 01:55:42 -07:00
Kwazygloo 9b593758c3 Update AugmentationHelpers.jsx 2021-07-06 01:55:42 -07:00
Kwazygloo a55fd5046b Update AugmentationHelpers.jsx 2021-07-06 01:55:42 -07:00
Kwazygloo 0e177841ac Update AugmentationHelpers.jsx 2021-07-06 01:55:42 -07:00
MageKing17 0cd17cd3b3 Correct incorrect RAM value in tutorial.
Appears to be a leftover mistake from when the tutorial pointed at foodnstuff; n00dles only has 4 GB.
2021-07-06 00:19:34 -07:00
MageKing17 04c0c87242 Addressing feedback.
`flags` example should have the output, instead of the code, in a comment block. `formulas.basic.calculateExp` and `formulas.basic.hackChance` should have explicit `var` declarations.
2021-07-06 00:18:22 -07:00
MageKing17 43b09a2459 Correct descriptions of LuminCloaking2 and HydroflameLeftArm.
LuminCloaking-V2 claimed to be a more advanced version of itself, and Hydroflame Left Arm described a 2.7 multiplier as a 270% increase.
2021-07-06 00:18:22 -07:00
MageKing17 8731a02ef0 Update Source-File documentation and descriptions.
Only SF-11 had incorrect multipliers, but quite a few were missing things that they unlock; in particular, even the in-game description of BN/SF5 didn't mention the formulas API, which is one of its major benefits (besides Intelligence). I also removed the empty rows from the Source-File description table; it's not exactly hard to add new rows when new BitNodes get added, and all that empty space looks bad.
2021-07-06 00:18:22 -07:00
MageKing17 30abcec74a Update scriptScheduler.ns example to not be pointlessly async.
The example code gives the impression that `ns.run` and `ns.exec` are asynchronous, when they're not; making these functions async is adding overhead for no purpose.
2021-07-06 00:18:22 -07:00
MageKing17 ae15914efa Update netscript documentation.
Unfortunately, I haven't used most of the specialty APIs yet, so I'm not intimately familiar with where their documentation might be wrong. I figured some fixes were better than no fixes, and I can always make more fixes later.

Fixes #1023.
2021-07-06 00:18:22 -07:00
Kwazygloo 1aa141b87e Update AugmentationHelpers.jsx 2021-07-03 11:13:45 -04:00
Kwazygloo 55d1ebd0e4 Synthetic Heart and Combat Rib Description Changes 2021-06-29 19:55:26 -07:00
Kwazygloo 06ac63aece Update AugmentationHelpers.jsx 2021-06-29 19:29:36 -07:00
Kwazygloo f706fee3d1 Augmented Targeting Description Changes 2021-06-29 19:20:05 -07:00
Kwazygloo f554398a7f Update AugmentationHelpers.jsx 2021-06-22 23:17:24 -07:00
Kwazygloo abe204109e Update AugmentationHelpers.jsx 2021-06-18 16:11:12 -04:00
Kwazygloo 434dd2b58d Update AugmentationHelpers.jsx 2021-06-18 12:09:56 -04:00
hydroflame 4c8d0acbd9 Merge pull request #1015 from danielyxie/dev
hotfix buying multiple NFG from level 0 not stacking
2021-06-14 20:32:49 -04:00
Olivier Gagnon 96847b5d27 build hotfix 2021-06-14 20:32:36 -04:00
Olivier Gagnon 8facdd2b49 hotfix buying multiple NFG from level 0 not stacking 2021-06-14 20:31:24 -04:00
hydroflame 8e2b5cfccb Merge pull request #1014 from danielyxie/dev
hotfix augmentation displaying null
2021-06-13 17:32:27 -04:00
Olivier Gagnon 2c7a4f4ce6 hotfix augmentation displaying null 2021-06-13 17:32:16 -04:00
hydroflame 1ca52e2b77 Merge pull request #1013 from danielyxie/dev
Hotfix adding noodle bars as infiltration location
2021-06-13 12:19:01 -04:00
Olivier Gagnon 2248c083c8 Hotfix adding noodle bars as infiltration location 2021-06-13 12:18:34 -04:00
hydroflame 37ec5c733f Merge pull request #1011 from danielyxie/dev
v0.52.0 Infiltration 2.0
2021-06-13 11:15:47 -04:00
Olivier Gagnon 321dca4993 v0.52.0 2021-06-13 11:15:02 -04:00
hydroflame 19f51b684b Infiltration rework (#1010)
Infiltration 2
2021-06-13 11:05:40 -04:00
Olivier Gagnon 39b4048603 Fixed a performance issue when installing too many Neuroflux at once. 2021-06-13 11:05:07 -04:00
Olivier Gagnon 2b1ec7d573 update patch notes 2021-06-12 05:57:09 -04:00
Olivier Gagnon 2b13b5329f tail is smarter 2021-06-12 05:42:18 -04:00
Olivier Gagnon 6661473adc Fix an issue where an empty stack trace would appear in ns1 scripts 2021-06-12 05:09:12 -04:00
Olivier Gagnon d6a7471e0b Added functions to create gang 2021-06-12 04:47:03 -04:00
Olivier Gagnon 9996232751 Nerf the effect of intelligence on faction reputation gain 2021-06-12 04:28:17 -04:00
Olivier Gagnon cdd376f2ae gave some love to the tutorial. 2021-06-12 04:23:15 -04:00
hydroflame 00a5085cdf Merge pull request #1008 from Tesseract1234567890/typosFix
Typo Fixes
2021-06-11 00:18:48 -04:00
Tesseract1234567890 4cd17607e6 Fixed server/node text always displaying as Hacknet Nodes even if the player has servers unlocked 2021-06-10 09:27:43 -04:00
Tesseract1234567890 1b734be895 Test to fix server/node text 2021-06-10 09:05:16 -04:00
Tesseract1234567890 6a8aa79396 Fixed capitalization error in Quotes.txt 2021-06-10 08:56:53 -04:00
Tesseract1234567890 34b3843e18 Fixed typo in PlayerObjectGeneralMethods.jsx 2021-06-10 08:55:06 -04:00
Tesseract1234567890 dd75c1b2d2 Fixed typo in Infiltration.js 2021-06-10 08:54:21 -04:00
hydroflame 6d072d766d Merge pull request #1007 from danielyxie/fix-reputation-transfer
Fix reputation transfering when applying for other jobs
2021-06-09 16:33:42 -04:00
Olivier Gagnon 7875d1ba93 Fix reputation transfering when applying for other jobs 2021-06-09 16:33:21 -04:00
hydroflame 0e458a8142 Merge pull request #1004 from Kwazygloo/patch-15
Update Info.tsx
2021-06-08 21:33:55 -04:00
Kwazygloo 8ab571d54d Update Info.tsx 2021-06-08 08:31:56 -04:00
hydroflame d9da1a8568 Merge pull request #997 from Tesseract1234567890/sleevesUIFix
Allowed Sleeves UI to update on workout change via API
2021-06-07 19:45:25 -04:00
hydroflame b946886295 Merge pull request #1002 from Tesseract1234567890/hydroPetPeeveFix
Hydro's Pet Peeve Fix
2021-06-07 19:43:16 -04:00
hydroflame 3bb74ceebe Merge pull request #1001 from Tesseract1234567890/hacknetNodeConstantsFix
Hacknet Node Constants Fix (see omuretsu's message in Discord)
2021-06-07 19:10:14 -04:00
Tesseract1234567890 e24c5b3cce Fixed hydro's pet peeve 2021-06-07 09:22:26 -04:00
Tesseract1234567890 527455bada Removed HacknetServerConstant from formulas.hacknetNodes.constants function call 2021-06-07 08:40:10 -04:00
Olivier Gagnon efdd8482d7 minor tweak to really large number display 2021-06-06 15:06:39 -04:00
hydroflame 4180ceae17 Merge pull request #984 from Tesseract1234567890/numeralFormat.ts-NanT-removal
Modified numeralFormat.ts to prevent NaNt from appearing
2021-06-06 14:59:03 -04:00
hydroflame 9e04aef8d2 Merge pull request #999 from danielyxie/dev
0.51.10 early
2021-06-06 14:54:07 -04:00
Olivier Gagnon 0fc6f90863 push 0.51.11 early for a player 2021-06-06 14:53:31 -04:00
Olivier Gagnon 0cb821b50d lint 2021-06-06 14:46:33 -04:00
QuantumByte 14af88c3fc Merge branch 'danielyxie:dev' into sleevesUIFix 2021-06-06 14:41:48 -04:00
Olivier Gagnon 61dded637d fix some typos in augmentation descriptions. 2021-06-06 14:40:16 -04:00
Tesseract1234567890 4623bb3a0b Fix to Sleeves UI not updating when set to workout value by API 2021-06-06 14:32:09 -04:00
QuantumByte 4f7fb1cd62 Merge branch 'danielyxie:dev' into dev 2021-06-06 14:20:56 -04:00
Olivier Gagnon 0b401ba83b collapse 2 constants in where they are used. 2021-06-06 14:17:03 -04:00
Olivier Gagnon 40813d5c4f Finish work on the gimick time-based aug 2021-06-06 13:28:25 -04:00
QuantumByte 687a2f8852 Merge branch 'danielyxie:dev' into dev 2021-06-06 12:42:28 -04:00
Tesseract1234567890 150a3b03f4 Merge branch 'intFix' of https://github.com/Tesseract1234567890/bitburner into dev 2021-06-06 12:25:48 -04:00
hydroflame 42935a217d Merge pull request #991 from Tesseract1234567890/timeBasedAugment
Circadian Modulator - an augment based on the hour in which you install/reset
2021-06-06 12:06:15 -04:00
Olivier Gagnon 2c2548f856 dev menu is now save-file sensitive, Fixed some bugs related to BN5-1 int 2021-06-06 12:00:59 -04:00
hydroflame 141f2a8331 Merge pull request #994 from Tesseract1234567890/intFix
Fixed intelligence not resetting when b1t_flum3.exe is used from BN5 without having SF5
2021-06-06 11:03:01 -04:00
hydroflame 5b9d2e36c6 Merge pull request #995 from Tesseract1234567890/bladeburnerStatFix
Fixed Bladeburner stats not displaying correctly on Augmentations page
2021-06-06 10:54:18 -04:00
Tesseract1234567890 80125d1521 Fixed bladeburner stats not displaying correctly 2021-06-04 13:55:33 -04:00
Tesseract1234567890 ed041743c2 Allows player to keep int if bitfluming into SF5 from SF5 for some reason 2021-06-04 12:17:46 -04:00
Tesseract1234567890 f9ff45fbed Attempt at making Int. available from start of BN5 2021-06-04 12:14:04 -04:00
Tesseract1234567890 fc5e0ea6a0 Set intelligence_exp to 0 if player does not have SourceFile 5 on b1t_flum3.exe usage 2021-06-04 12:02:26 -04:00
Tesseract1234567890 66ff040e38 Attempt at fixing Int. not resetting on b1t_flum3.exe usage 2021-06-04 11:59:23 -04:00
Tesseract1234567890 49cc25479e Modified flavortext 2021-06-04 08:55:06 -04:00
hydroflame 4bd1813b45 Merge pull request #988 from Kwazygloo/patch-1
Update FactionInfo.ts
2021-06-03 22:56:30 -04:00
Tesseract1234567890 8259c1a5b9 Reset RNG to reload every hour 2021-06-03 16:54:43 -04:00
Tesseract1234567890 c793a076db Changed price and rep. cost of augment 2021-06-03 16:30:06 -04:00
Tesseract1234567890 e320a8339a added extended info to augment 2021-06-03 16:27:06 -04:00
Tesseract1234567890 1427a0f1ae Modified RNG gen for testing 2021-06-03 16:20:35 -04:00
Tesseract1234567890 17315733a7 deleted unnecessary functions 2021-06-03 16:17:34 -04:00
Tesseract1234567890 29d7134859 testing 2021-06-03 16:16:20 -04:00
Tesseract1234567890 4ac91f5599 set to hour instead of 6 mins 2021-06-03 15:27:08 -04:00
Tesseract1234567890 a3496cdfa9 changed rng method to based on hour of install, changes every 360000 ms 2021-06-03 13:25:20 -04:00
Tesseract1234567890 b88990444b Swapped faction to speakers for the dead, modified price + rep cost, modified lore 2021-06-03 13:21:11 -04:00
Tesseract1234567890 e9eae40891 expanded multiplierTypes 2021-06-03 12:21:56 -04:00
Tesseract1234567890 0ec05f3fe2 get random modifier for augment function added 2021-06-03 12:10:26 -04:00
Tesseract1234567890 21611ec571 Made random mult into function 2021-06-03 12:01:10 -04:00
Tesseract1234567890 e7fde38bf9 testing step random 2021-06-03 11:55:50 -04:00
Tesseract1234567890 c47990ef56 Fixed RNG generation for augment 2021-06-03 11:36:32 -04:00
Tesseract1234567890 23cefed8d4 test 2021-06-03 11:33:15 -04:00
Tesseract1234567890 d86fb0262a Attempt 2 2021-06-03 11:30:43 -04:00
Tesseract1234567890 aef0cc815e added rng to circ. modulator 2021-06-03 11:18:55 -04:00
Tesseract1234567890 e0436a4314 increased effect of modulator to test 2021-06-03 11:07:05 -04:00
Tesseract1234567890 1ad0fbe2e1 Attempt #1 at creating custom augment 2021-06-03 11:03:53 -04:00
Kwazygloo db21010fe4 Update FactionInfo.ts 2021-06-03 08:40:25 -04:00
Tesseract1234567890 0535a0c49b Fixed high HP values 2021-06-02 21:57:31 -04:00
Tesseract1234567890 6314000bd0 Fixed absurdly high skill counter on UI 2021-06-02 21:54:11 -04:00
Tesseract1234567890 a05335d6e2 fixed a stupid mistake 2021-06-02 21:47:32 -04:00
Tesseract1234567890 54114dc6d0 Edited formatAbsurdNumber; reinstated parts of formatShares 2021-06-02 21:41:58 -04:00
Tesseract1234567890 1b6058dd0a Fixed formatAbsurdNumber 2021-06-02 21:38:36 -04:00
Tesseract1234567890 75227233f3 Added class method formatAbsurdNumber 2021-06-02 21:33:27 -04:00
hydroflame 8d80ecffd4 Merge pull request #987 from danielyxie/dev
hotfix making getPlayer a non-singularity function
2021-06-02 21:29:41 -04:00
Olivier Gagnon 57ab1d885b build hotfix 2021-06-02 21:29:29 -04:00
Olivier Gagnon 34c2c70a2b hotfix getPlayer non-singularity 2021-06-02 21:28:07 -04:00
hydroflame 0ef09a1c73 Merge pull request #977 from Kwazygloo/patch-3
Update Literatures.ts
2021-06-02 21:19:53 -04:00
hydroflame 264e0b2e1a Merge pull request #982 from Kwazygloo/patch-1
Update AugmentationHelpers.jsx
2021-06-02 21:19:05 -04:00
hydroflame 5755db4979 Merge pull request #983 from Kwazygloo/patch-1
Update Literatures.ts
2021-06-02 21:18:19 -04:00
hydroflame 84b49bb5e9 Merge pull request #985 from Tesseract1234567890/ErrorMessagesFix
Fixed typos in error messages
2021-06-02 21:16:17 -04:00
hydroflame fb89b824d9 Merge pull request #986 from Tesseract1234567890/HudTextMod
Capitalized HP in HUD
2021-06-02 21:15:19 -04:00
Tesseract1234567890 fee661b451 Capitalized HP 2021-06-02 16:31:21 -04:00
Tesseract1234567890 a40d0bb6e0 Fixed typos in error messages 2021-06-02 16:18:38 -04:00
Tesseract1234567890 f7f22ac7ef Fixed typos in error messages 2021-06-02 16:12:46 -04:00
Tesseract1234567890 8fba3c3fa4 Modified numeralFormat.ts to prevent NaNt from appearing 2021-06-02 16:07:52 -04:00
Kwazygloo a72560bf25 Update Literatures.ts 2021-06-01 16:12:11 -04:00
Kwazygloo 21211e7d08 Update AugmentationHelpers.jsx 2021-06-01 12:36:57 -04:00
hydroflame d627890047 Merge pull request #979 from danielyxie/dev
hotfix farming rep and hacking mission or infiltrations
2021-05-31 23:58:53 -04:00
Olivier Gagnon a1e0d40963 hotfix farming rep and hacking mission or infiltrations 2021-05-31 23:58:34 -04:00
hydroflame ca8fc54400 Merge pull request #978 from danielyxie/dev
hotfix being to do other stuff while working out at the gym
2021-05-31 23:44:14 -04:00
Olivier Gagnon cf67213c36 hotfix being to do other stuff while working out at the gym 2021-05-31 23:43:51 -04:00
Kwazygloo 51b2175c35 Update Literatures.ts 2021-05-31 20:35:30 -04:00
hydroflame 531c0ce5c0 Merge pull request #974 from danielyxie/dev
v0.59.10
2021-05-31 17:35:35 -04:00
hydroflame ad9c01ac50 Merge pull request #973 from danielyxie/v0.59.10
v0.59.10
2021-05-31 17:34:53 -04:00
Olivier Gagnon 0f266eaa42 v0.59.10 2021-05-31 17:34:23 -04:00
Olivier Gagnon 674ce17834 fix nearly all lint errors now 2021-05-29 14:48:56 -04:00
hydroflame e611ab7bc7 Merge pull request #969 from danielyxie/dev
Hotfix Vigilante Justice reducing wanted by a percentage.
2021-05-29 12:50:53 -04:00
Olivier Gagnon 60d6d49c43 Vigilante Justice now reduces wanted by a percentage to help players stuck with very high wanted level. 2021-05-29 12:48:58 -04:00
Olivier Gagnon 75b2806c93 Added new SF -1 called Bypass 2021-05-29 12:10:17 -04:00
hydroflame 04b57f07a9 Merge pull request #967 from danielyxie/dev
Hotfix very large number to extend kmbt with qQsSon.
2021-05-27 14:05:04 -04:00
Olivier Gagnon a2d924e1c6 revert dev menu to 1e99 money 2021-05-27 14:04:49 -04:00
Olivier Gagnon f14f65814a Hotfix very large number to extend kmbt with qQsSon. 2021-05-27 14:03:53 -04:00
hydroflame 04921520d8 Merge pull request #966 from danielyxie/dev
Hotfix number of decimal for very large numbers
2021-05-26 17:55:26 -04:00
Olivier Gagnon 9d1e132d11 Hotfix number of decimal for very large numbers 2021-05-26 17:54:55 -04:00
hydroflame eb84652e19 Merge pull request #965 from danielyxie/dev
Hotfix large numbers
2021-05-26 14:14:44 -04:00
Olivier Gagnon 7fedd1f1f5 Fix very large number appearing as NaN 2021-05-26 14:14:20 -04:00
hydroflame ba4169268c Merge pull request #963 from Pimvgd/patch-6
Update GeneralActions.ts
2021-05-23 13:45:06 -04:00
Pimvgd 5bf21c0ab2 Update GeneralActions.ts
typo fix
2021-05-18 21:16:32 +02:00
hydroflame 670587a07d Merge pull request #962 from danielyxie/dev
hotfix grow percent being logged 100x too high
2021-05-18 10:52:05 -04:00
Olivier Gagnon 4dc206bb3e hotfix grow percent being logged 100x too high 2021-05-18 10:51:36 -04:00
hydroflame a7389f63b8 Merge pull request #961 from danielyxie/dev
v0.51.9
2021-05-18 00:01:35 -04:00
Olivier Gagnon 8ba63f4951 update changelog 2021-05-18 00:00:51 -04:00
Olivier Gagnon b28f607056 v0.51.9 2021-05-17 23:59:45 -04:00
Olivier Gagnon 218a9dd250 Sleeves earnings is now tracked in Character Stats Money 2021-05-17 22:03:48 -04:00
Olivier Gagnon 7a1fdd6c28 Merge branch 'dev' of github.com:danielyxie/bitburner into dev 2021-05-17 22:03:27 -04:00
Olivier Gagnon b69a262faf ls no longer prints lingering newline 2021-05-17 21:58:11 -04:00
hydroflame 66c87b1f64 Merge pull request #673 from danielyxie/dependabot/npm_and_yarn/jquery-3.5.0
Bump jquery from 3.3.1 to 3.5.0
2021-05-17 21:51:00 -04:00
hydroflame 9bc1a4a895 Merge pull request #671 from danielyxie/dependabot/npm_and_yarn/acorn-6.4.1
Bump acorn from 6.2.0 to 6.4.1
2021-05-17 21:45:40 -04:00
dependabot[bot] 7a0d0b3fec Bump jquery from 3.3.1 to 3.5.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.3.1 to 3.5.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.3.1...3.5.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-18 01:26:20 +00:00
dependabot[bot] dd077152f4 Bump acorn from 6.2.0 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.2.0 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.2.0...6.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-18 01:20:42 +00:00
hydroflame 2347e0b1fd Merge pull request #956 from danielyxie/dependabot/npm_and_yarn/codemirror-5.58.2
Bump codemirror from 5.43.0 to 5.58.2
2021-05-17 21:19:48 -04:00
Olivier Gagnon 188dcbad89 bladeburner supress option now correctly updates when blade become accessible/unaccessible 2021-05-17 21:17:17 -04:00
hydroflame eb7004feaa Merge pull request #959 from MartinFournier/suppress-bladeburner-popup
Add setting to suppress Bladeburner prompts
2021-05-17 21:09:21 -04:00
Olivier Gagnon 062cd2dc38 update changelog 2021-05-17 21:08:29 -04:00
hydroflame 2f3e5c79e7 Merge pull request #954 from Daniferrito/bladeburner-fixes
Bladeburner fixes
2021-05-17 21:05:19 -04:00
Olivier Gagnon bd172434d1 Fixed an issue where bladeburner would miscalculate hospitalization cost. 2021-05-17 20:18:05 -04:00
Olivier Gagnon afc1347d3a Deleting a file without ext print a normal error msg. 2021-05-17 18:09:47 -04:00
Olivier Gagnon b9c292f7cf Can no longer export negative amount 2021-05-17 18:04:10 -04:00
Olivier Gagnon 6df824613e Fix more bugs 2021-05-17 18:00:22 -04:00
Olivier Gagnon de113a7b92 City hall no longer just has nothing when you can't create corp 2021-05-17 17:56:31 -04:00
Olivier Gagnon 4ec14460b6 more fixes 2021-05-17 17:49:39 -04:00
Olivier Gagnon 3f63d91448 Merge branch 'dev' of github.com:danielyxie/bitburner into dev 2021-05-17 17:12:37 -04:00
Olivier Gagnon 2ae9a3d2a7 fix fconf not being created and fix formatting in netscript functions 2021-05-17 17:12:35 -04:00
Martin Fournier ae04b7357e Add setting to suppress Bladeburner popups
Used to suppress the message that is shown when your Bladeburner action
is cancelled when busy with something else.

Will be hidden if the player does not have access to Bladeburners.
2021-05-15 13:33:30 -04:00
hydroflame bf141c7eb0 Merge pull request #958 from Daniferrito/dynamic-possibleLogs
Added dynamic generation of functionNames
2021-05-15 11:23:42 -04:00
Olivier Gagnon 1503d82e35 update changelog 2021-05-15 11:19:02 -04:00
hydroflame a75efd9c62 Merge pull request #955 from Daniferrito/import-autoreload
Import autoreload
2021-05-15 11:16:24 -04:00
Olivier Gagnon 299e964e2b update changelog 2021-05-15 11:09:32 -04:00
hydroflame 69fbfe87c0 Merge branch 'dev' into import-autoreload 2021-05-15 11:08:36 -04:00
hydroflame 60a229030b Merge pull request #951 from Daniferrito/aliases
Recursive and multi-command alias
2021-05-15 11:06:06 -04:00
Olivier Gagnon e27b19ffae update changelog 2021-05-15 11:05:52 -04:00
Olivier Gagnon 5e2c40ea23 Merge branch 'dev' of github.com:danielyxie/bitburner into dev 2021-05-15 10:56:00 -04:00
Olivier Gagnon 8411de8e42 remove offline calc from importing game 2021-05-15 10:54:19 -04:00
Daniel Ferri 525c0ada55 Added dynamic generation of functionNames 2021-05-12 21:10:36 +02:00
hydroflame 0e06565e27 Merge pull request #953 from MartinFournier/docker-support
Add basic docker support for development
2021-05-12 00:29:36 -04:00
dependabot[bot] 5e517d1671 Bump codemirror from 5.43.0 to 5.58.2
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.43.0 to 5.58.2.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.43.0...5.58.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-12 00:32:31 +00:00
Daniel Ferri 1b57c1f7e0 Changed loops to be more concise 2021-05-11 20:16:18 +02:00
Daniel Ferri 0cb2fd1a87 Removed useless code 2021-05-11 19:46:51 +02:00
Daniel Ferri 08b0c7710d Changed import so it saves and reloads the page 2021-05-11 19:27:02 +02:00
Daniel Ferri f8a085af7a Autofocus the input when opening a "Set Team Size" popup 2021-05-11 15:34:05 +02:00
Daniel Ferri c95a926154 Add overflow time of bladeburner updates to the next update 2021-05-11 15:32:43 +02:00
Olivier Gagnon 5af10c8406 Offline money gain is based off hacking exp / time since last aug instead 2021-05-10 20:11:03 -04:00
Olivier Gagnon 0f2b7517b4 Added export bonus 2021-05-10 18:26:50 -04:00
Martin Fournier ac8565d820 Add basic docker support for development
Assuming docker engine is installed, it is now possible to run the dev
server using 'docker-compose up --build' or run the production version using
'docker build -t bitburner . && docker run -it -p 8000:80 bitburner'.
2021-05-10 08:54:25 -04:00
hydroflame 2adcf79264 Merge pull request #952 from danielyxie/dev
hotfix ls not listing all files lol
2021-05-08 22:39:52 -04:00
Olivier Gagnon 2bd4892fa8 hotfix ls not listing all files lol 2021-05-08 22:38:48 -04:00
Daniel Ferri 46862d30fd Recursive and multi-command alias 2021-05-08 18:44:21 +02:00
hydroflame fccf2b5cb4 Merge pull request #950 from danielyxie/dev
hotfix ls printing a bunch of newlines
2021-05-07 22:38:19 -04:00
Olivier Gagnon f6af61d15b hotfix ls printing a bunch of newlines 2021-05-07 22:37:50 -04:00
hydroflame b35d8475e3 Merge pull request #949 from danielyxie/dev
v0.51.8
2021-05-07 22:29:39 -04:00
Olivier Gagnon 04e8bc944e build 2021-05-07 22:29:18 -04:00
Olivier Gagnon cfd78e2d36 Add installBackdoor 2021-05-07 02:14:46 -04:00
260 changed files with 8081 additions and 6594 deletions
+14
View File
@@ -0,0 +1,14 @@
node_modules/
.git
.gitattributes
.gitignore
.editorconfig
.dockerignore
Dockerfile
docker-compose.yml
*.md
Quotes.txt
netscript_tests/
+35
View File
@@ -0,0 +1,35 @@
FROM node:15.14.0 AS base
WORKDIR /app
# Scripts used in the npm preinstall hook
COPY scripts/engines-check.js scripts/semver.js scripts/
# Adding our dependencies and install before adding the rest of the files
# This prevents reinstallation of npm packages for every subsequent code modification
ENV npm_config_update_notifier=false
COPY package.json package-lock.json ./
RUN npm ci --loglevel=error --no-audit --no-fund && npm rebuild node-sass
# Adding all the remaining source files
COPY . .
# We need more than the default 512MB otherwise webpack will throw 'heap out of memory' exceptions
# https://nodejs.org/api/cli.html#cli_max_old_space_size_size_in_megabytes
ENV NODE_OPTIONS=--max-old-space-size=1536
FROM base AS dev
# This is the main development build using the file watcher if you mount volumes
USER node
EXPOSE 8000
CMD npm run start:container
FROM base AS prod-dist
# We'll simply build the production dist files here to later reuse in a simple webserver
RUN npm run build
FROM nginx:1.20.0-alpine AS prod
WORKDIR /usr/share/nginx/html
COPY --from=prod-dist /app/dist ./dist
COPY --from=prod-dist /app/index.html /app/favicon.ico /app/license.txt ./
EXPOSE 80
+2 -2
View File
@@ -1,13 +1,13 @@
Collection of Quotes Collection of Quotes
The past is relevant only as data The past is relevant only as data.
Pull on the new flesh like borrowed gloves and burn your fingers once again. Pull on the new flesh like borrowed gloves and burn your fingers once again.
A weapon is a tool. A tool for killing and destroying. And there will be times A weapon is a tool. A tool for killing and destroying. And there will be times
when you must kill and destroy. Then you will choose and equip yourself with the tools when you must kill and destroy. Then you will choose and equip yourself with the tools
that you need. But remember the weakness of weapons. They are an extension -- that you need. But remember the weakness of weapons. They are an extension --
You are the killer and destroyer. You are whole, with or without them. you are the killer and destroyer. You are whole, with or without them.
For all that we have done, as a civilization, as individuals, the universe is For all that we have done, as a civilization, as individuals, the universe is
not stable, and nor is any single thing within it. Stars consume themselves, not stable, and nor is any single thing within it. Stars consume themselves,
-1
View File
@@ -27,5 +27,4 @@
button { button {
padding: 4px; padding: 4px;
} }
} }
+1 -1
View File
@@ -80,7 +80,7 @@
transform: rotate(-45deg); transform: rotate(-45deg);
} }
} }
input[type=checkbox] { input[type="checkbox"] {
margin: 3px; margin: 3px;
visibility: hidden; visibility: hidden;
&:checked + label:after { &:checked + label:after {
+3 -5
View File
@@ -1,5 +1,6 @@
@import "mixins"; @import "mixins";
@import "theme"; @import "theme";
@import "styles";
/** /**
* Styling for all buttons * Styling for all buttons
@@ -16,6 +17,7 @@ button {
.a-link-button, .a-link-button,
.std-button { .std-button {
@extend .noselect;
text-decoration: none; text-decoration: none;
background-color: #555; background-color: #555;
color: #fff; color: #fff;
@@ -23,11 +25,6 @@ button {
margin: 5px; margin: 5px;
border: 1px solid #333; border: 1px solid #333;
-moz-user-select: none;
-ms-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
&:hover { &:hover {
background-color: #666; background-color: #666;
} }
@@ -68,6 +65,7 @@ button {
.a-link-button-bought, .a-link-button-bought,
.std-button-bought { .std-button-bought {
@extend .noselect;
text-decoration: none; text-decoration: none;
background-color: #0a0; background-color: #0a0;
color: #fff; color: #fff;
+1 -1
View File
@@ -11,7 +11,7 @@
} }
.casino-card .value { .casino-card .value {
font-size:15pt; font-size: 15pt;
font-family: sans-serif; font-family: sans-serif;
} }
+7 -6
View File
@@ -47,17 +47,16 @@
text-align: right; text-align: right;
} }
#character-hack-wrapper td,
#character-agi-wrapper td {
border-bottom: 1px #aaa solid;
padding-bottom: 10px;
}
#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 {
border-top: 1px #aaa solid;
padding-top: 10px;
}
#character-hp-wrapper { color: $my-stat-hp-color; } #character-hp-wrapper { color: $my-stat-hp-color; }
.character-hp-cell { color: $my-stat-hp-color; } .character-hp-cell { color: $my-stat-hp-color; }
#character-money-wrapper { color: $my-stat-money-color; } #character-money-wrapper { color: $my-stat-money-color; }
@@ -69,6 +68,8 @@
#character-int-wrapper { color: $my-stat-int-color; } #character-int-wrapper { color: $my-stat-int-color; }
.character-int-cell { color: $my-stat-int-color; } .character-int-cell { color: $my-stat-int-color; }
.character-combat-cell { color: $my-stat-physical; } .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);
+2 -6
View File
@@ -3,15 +3,11 @@
} }
.remove-exp-button { .remove-exp-button {
margin-left:0; margin-left: 0;
} }
.exp-input { .exp-input {
margin-right: 0; margin: 5px 0 5px 0;
margin-left:0;
margin-top: 5px;
margin-bottom: 5px;
padding: 2px 5px; padding: 2px 5px;
} }
+1
View File
@@ -1,3 +1,4 @@
/* stylelint-disable */
/*! /*!
* Bootstrap Grid v4.1.2 (https://getbootstrap.com/) * Bootstrap Grid v4.1.2 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
+56
View File
@@ -0,0 +1,56 @@
@import "theme";
.blinking-cursor {
font-weight: 100;
color: #2E3D48;
-webkit-animation: 1s cursorblink step-end infinite;
-moz-animation: 1s cursorblink step-end infinite;
-ms-animation: 1s cursorblink step-end infinite;
-o-animation: 1s cursorblink step-end infinite;
animation: 1s cursorblink step-end infinite;
}
@keyframes "cursorblink" {
from, to {
color: transparent;
}
50% {
color: $hacker-green;
}
}
@-moz-keyframes cursorblink {
from, to {
color: transparent;
}
50% {
color: $hacker-green;
}
}
@-webkit-keyframes "cursorblink" {
from, to {
color: transparent;
}
50% {
color: $hacker-green;
}
}
@-ms-keyframes "cursorblink" {
from, to {
color: transparent;
}
50% {
color: $hacker-green;
}
}
@-o-keyframes "cursorblink" {
from, to {
color: transparent;
}
50% {
color: $hacker-green;
}
}
+19
View File
@@ -69,3 +69,22 @@
float: right; float: right;
padding: 4px; padding: 4px;
} }
.interactive-tutorial-command {
background-color: #000;
color: $hacker-green;
white-space: nowrap;
}
.interactive-tutorial-code {
background-color: #272822;
color: white;
padding: 3px;
}
.interactive-tutorial-tab {
background-color: #555;
color: #e6e6e6;
padding: 3px;
box-shadow: 0 0 3px #000;
}
+2 -34
View File
@@ -150,38 +150,6 @@
/* Infiltration */ /* Infiltration */
#infiltration-container { #infiltration-container {
position: fixed; position: fixed;
padding: 6px; margin: 5px;
width: 70%;
span {
margin: 0;
padding: 0;
}
}
#infiltration-left-panel,
#infiltration-right-panel {
display: inline-block;
border: 1px solid #fff;
width: 35%;
height: 75%;
top: 10px;
overflow-y: auto;
overflow-x: auto;
}
#infiltration-faction-select {
color: #fff;
}
#infiltration-left-panel p,
#infiltration-right-panel p {
margin: 4px;
}
#infiltration-buttons {
margin-top: 20px;
}
#infiltration-buttons .a-link-button {
display: inline;
} }
+3
View File
@@ -1,5 +1,6 @@
@import "mixins"; @import "mixins";
@import "theme"; @import "theme";
@import "styles";
/* Pop-up boxes */ /* Pop-up boxes */
.popup-box-container { .popup-box-container {
@@ -23,6 +24,7 @@
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 */
color: var(--my-font-color); color: var(--my-font-color);
} }
@@ -87,6 +89,7 @@
.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;
float: right; float: right;
color: #aaa; color: #aaa;
+1 -1
View File
@@ -17,7 +17,7 @@
} }
&.level-2 { &.level-2 {
color: #48d1cc; color: #48d1cc;
} }
&.level-3 { &.level-3 {
+10 -6
View File
@@ -36,6 +36,10 @@ li {
list-style-type: none; list-style-type: none;
} }
br {
@extend .noselect;
}
#entire-game-container { #entire-game-container {
background-color: transparent; background-color: transparent;
} }
@@ -234,9 +238,9 @@ a:visited {
#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 {
@@ -371,14 +375,15 @@ a:visited {
.noscrollbar { .noscrollbar {
-ms-overflow-style: none; /* IE and Edge */ -ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */ /* stylelint-disable-next-line property-no-unknown */
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);
} }
@@ -398,7 +403,6 @@ input[type=checkbox] {
margin: 3px; margin: 3px;
} }
.optionRange::-webkit-slider-thumb { .optionRange::-webkit-slider-thumb {
-webkit-appearance: none; -webkit-appearance: none;
appearance: none; appearance: none;
+1 -1
View File
@@ -16,7 +16,7 @@
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;
} }
+3 -3
View File
@@ -26,7 +26,7 @@
margin: 10px; margin: 10px;
} }
#work-in-progress-cancel-button { .work-button {
@include borderRadius(12px); @include borderRadius(12px);
@include boxShadow(1px 1px 3px #000); @include boxShadow(1px 1px 3px #000);
@@ -39,8 +39,8 @@
border: 3px solid #fff; border: 3px solid #fff;
} }
#work-in-progress-cancel-button:hover, .work-button:hover,
#work-in-progress-cancel-button:focus { .work-button:focus {
color: #fff; color: #fff;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -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([841,0]),o()}({780:function(n,t,o){},782:function(n,t,o){},784:function(n,t,o){},786:function(n,t,o){},788:function(n,t,o){},790:function(n,t,o){},792:function(n,t,o){},794:function(n,t,o){},796:function(n,t,o){},798:function(n,t,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){},841:function(n,t,o){"use strict";o.r(t);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),o(798),o(796),o(794),o(792),o(790),o(788),o(786),o(784),o(782),o(780)}}); !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([858,0]),o()}({795:function(n,t,o){},797:function(n,t,o){},799:function(n,t,o){},801:function(n,t,o){},803:function(n,t,o){},805:function(n,t,o){},807:function(n,t,o){},809:function(n,t,o){},811:function(n,t,o){},813:function(n,t,o){},815:function(n,t,o){},817:function(n,t,o){},819:function(n,t,o){},821:function(n,t,o){},823:function(n,t,o){},825:function(n,t,o){},827:function(n,t,o){},829:function(n,t,o){},831:function(n,t,o){},833:function(n,t,o){},835:function(n,t,o){},837:function(n,t,o){},839:function(n,t,o){},841:function(n,t,o){},843:function(n,t,o){},845:function(n,t,o){},847:function(n,t,o){},849:function(n,t,o){},851:function(n,t,o){},853:function(n,t,o){},855:function(n,t,o){},858:function(n,t,o){"use strict";o.r(t);o(857),o(855),o(853),o(851),o(849),o(847),o(845),o(843),o(841),o(839),o(837),o(835),o(833),o(831),o(829),o(827),o(825),o(823),o(821),o(819),o(817),o(815),o(813),o(811),o(809),o(807),o(805),o(803),o(801),o(799),o(797),o(795)}});
//# sourceMappingURL=engineStyle.bundle.js.map //# sourceMappingURL=engineStyle.bundle.js.map
+911 -49
View File
File diff suppressed because it is too large Load Diff
+47 -47
View File
File diff suppressed because one or more lines are too long
+79 -70
View File
@@ -11,7 +11,8 @@
padding: 4px 0; padding: 4px 0;
/* Vertical padding around content */ } /* Vertical padding around content */ }
.CodeMirror pre { .CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
padding: 0 4px; padding: 0 4px;
/* Horizontal padding of content */ } /* Horizontal padding of content */ }
@@ -98,7 +99,7 @@
left: 0; left: 0;
right: 0; right: 0;
top: -50px; top: -50px;
bottom: -20px; bottom: 0;
overflow: hidden; } overflow: hidden; }
.CodeMirror-ruler { .CodeMirror-ruler {
@@ -216,11 +217,11 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
.CodeMirror-scroll { .CodeMirror-scroll {
overflow: scroll !important; overflow: scroll !important;
/* Things will break if this is overridden */ /* Things will break if this is overridden */
/* 30px is the magic margin used to hide the element's real scrollbars */ /* 50px is the magic margin used to hide the element's real scrollbars */
/* See overflow: hidden in .CodeMirror */ /* See overflow: hidden in .CodeMirror */
margin-bottom: -30px; margin-bottom: -50px;
margin-right: -30px; margin-right: -50px;
padding-bottom: 30px; padding-bottom: 50px;
height: 100%; height: 100%;
outline: none; outline: none;
/* Prevent dragging from highlighting the element */ /* Prevent dragging from highlighting the element */
@@ -228,7 +229,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
.CodeMirror-sizer { .CodeMirror-sizer {
position: relative; position: relative;
border-right: 30px solid transparent; } border-right: 50px solid transparent; }
/* The fake, visible scrollbars. Used to force redraw during scrolling /* The fake, visible scrollbars. Used to force redraw during scrolling
before actual scrolling happens, thus preventing shaking and before actual scrolling happens, thus preventing shaking and
@@ -236,7 +237,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
position: absolute; position: absolute;
z-index: 6; z-index: 6;
display: none; } display: none;
outline: none; }
.CodeMirror-vscrollbar { .CodeMirror-vscrollbar {
right: 0; right: 0;
@@ -270,7 +272,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
height: 100%; height: 100%;
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
margin-bottom: -30px; } margin-bottom: -50px; }
.CodeMirror-gutter-wrapper { .CodeMirror-gutter-wrapper {
position: absolute; position: absolute;
@@ -300,7 +302,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
min-height: 1px; min-height: 1px;
/* prevents collapsing before first draw */ } /* prevents collapsing before first draw */ }
.CodeMirror pre { .CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
/* Reset some styles that the rest of the page might have set */ /* Reset some styles that the rest of the page might have set */
-moz-border-radius: 0; -moz-border-radius: 0;
-webkit-border-radius: 0; -webkit-border-radius: 0;
@@ -321,7 +324,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {
-webkit-font-variant-ligatures: contextual; -webkit-font-variant-ligatures: contextual;
font-variant-ligatures: contextual; } font-variant-ligatures: contextual; }
.CodeMirror-wrap pre { .CodeMirror-wrap pre.CodeMirror-line,
.CodeMirror-wrap pre.CodeMirror-line-like {
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;
word-break: normal; } word-break: normal; }
@@ -1479,6 +1483,16 @@ span.CodeMirror-selectedtext {
.cm-s-darcula span.cm-special { .cm-s-darcula span.cm-special {
color: #FF9E59; } color: #FF9E59; }
.cm-s-darcula span.cm-matchhighlight {
color: #FFFFFF;
background-color: rgba(50, 89, 48, 0.7);
font-weight: normal; }
.cm-s-darcula span.cm-searching {
color: #FFFFFF;
background-color: rgba(61, 115, 59, 0.7);
font-weight: normal; }
.cm-s-darcula .CodeMirror-cursor { .cm-s-darcula .CodeMirror-cursor {
border-left: 1px solid #A9B7C6; } border-left: 1px solid #A9B7C6; }
@@ -2510,7 +2524,7 @@ Ported to CodeMirror by Peter Kroon
color: #999; } color: #999; }
.cm-s-lesser-dark span.cm-link { .cm-s-lesser-dark span.cm-link {
color: #00c; } color: #7070E6; }
.cm-s-lesser-dark span.cm-error { .cm-s-lesser-dark span.cm-error {
color: #9d1e15; } color: #9d1e15; }
@@ -2766,103 +2780,105 @@ Ported to CodeMirror by Peter Kroon
color: white !important; } color: white !important; }
/* /*
Name: material
Name: material Author: Mattia Astorino (http://github.com/equinusocio)
Author: Michael Kaminsky (http://github.com/mkaminsky11) Website: https://material-theme.site/
Original material color scheme by Mattia Astorino (https://github.com/equinusocio/material-theme)
*/ */
.cm-s-material.CodeMirror { .cm-s-material.CodeMirror {
background-color: #263238; background-color: #263238;
color: #e9eded; } color: #EEFFFF; }
.cm-s-material .CodeMirror-gutters { .cm-s-material .CodeMirror-gutters {
background: #263238; background: #263238;
color: #537f7e; color: #546E7A;
border: none; } border: none; }
.cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { .cm-s-material .CodeMirror-guttermarker,
color: #537f7e; } .cm-s-material .CodeMirror-guttermarker-subtle,
.cm-s-material .CodeMirror-linenumber {
color: #546E7A; }
.cm-s-material .CodeMirror-cursor { .cm-s-material .CodeMirror-cursor {
border-left: 1px solid #f8f8f0; } border-left: 1px solid #FFCC00; }
.cm-s-material div.CodeMirror-selected { .cm-s-material div.CodeMirror-selected {
background: rgba(255, 255, 255, 0.15); } background: rgba(128, 203, 196, 0.2); }
.cm-s-material.CodeMirror-focused div.CodeMirror-selected { .cm-s-material.CodeMirror-focused div.CodeMirror-selected {
background: rgba(255, 255, 255, 0.1); } background: rgba(128, 203, 196, 0.2); }
.cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line > span::selection, .cm-s-material .CodeMirror-line > span > span::selection { .cm-s-material .CodeMirror-line::selection,
background: rgba(255, 255, 255, 0.1); } .cm-s-material .CodeMirror-line > span::selection,
.cm-s-material .CodeMirror-line > span > span::selection {
background: rgba(128, 203, 196, 0.2); }
.cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line > span::-moz-selection, .cm-s-material .CodeMirror-line > span > span::-moz-selection { .cm-s-material .CodeMirror-line::-moz-selection,
background: rgba(255, 255, 255, 0.1); } .cm-s-material .CodeMirror-line > span::-moz-selection,
.cm-s-material .CodeMirror-line > span > span::-moz-selection {
background: rgba(128, 203, 196, 0.2); }
.cm-s-material .CodeMirror-activeline-background { .cm-s-material .CodeMirror-activeline-background {
background: rgba(0, 0, 0, 0); } background: rgba(0, 0, 0, 0.5); }
.cm-s-material .cm-keyword { .cm-s-material .cm-keyword {
color: #c792ea; } color: #C792EA; }
.cm-s-material .cm-operator { .cm-s-material .cm-operator {
color: #e9eded; } color: #89DDFF; }
.cm-s-material .cm-variable-2 { .cm-s-material .cm-variable-2 {
color: #80CBC4; } color: #EEFFFF; }
.cm-s-material .cm-variable-3, .cm-s-material .cm-type { .cm-s-material .cm-variable-3,
color: #82B1FF; } .cm-s-material .cm-type {
color: #f07178; }
.cm-s-material .cm-builtin { .cm-s-material .cm-builtin {
color: #DECB6B; } color: #FFCB6B; }
.cm-s-material .cm-atom { .cm-s-material .cm-atom {
color: #F77669; } color: #F78C6C; }
.cm-s-material .cm-number { .cm-s-material .cm-number {
color: #F77669; } color: #FF5370; }
.cm-s-material .cm-def { .cm-s-material .cm-def {
color: #e9eded; } color: #82AAFF; }
.cm-s-material .cm-string { .cm-s-material .cm-string {
color: #C3E88D; } color: #C3E88D; }
.cm-s-material .cm-string-2 { .cm-s-material .cm-string-2 {
color: #80CBC4; } color: #f07178; }
.cm-s-material .cm-comment { .cm-s-material .cm-comment {
color: #546E7A; } color: #546E7A; }
.cm-s-material .cm-variable { .cm-s-material .cm-variable {
color: #82B1FF; } color: #f07178; }
.cm-s-material .cm-tag { .cm-s-material .cm-tag {
color: #80CBC4; } color: #FF5370; }
.cm-s-material .cm-meta { .cm-s-material .cm-meta {
color: #80CBC4; }
.cm-s-material .cm-attribute {
color: #FFCB6B; } color: #FFCB6B; }
.cm-s-material .cm-attribute {
color: #C792EA; }
.cm-s-material .cm-property { .cm-s-material .cm-property {
color: #80CBAE; } color: #C792EA; }
.cm-s-material .cm-qualifier { .cm-s-material .cm-qualifier {
color: #DECB6B; } color: #DECB6B; }
.cm-s-material .cm-variable-3, .cm-s-material .cm-type { .cm-s-material .cm-variable-3,
.cm-s-material .cm-type {
color: #DECB6B; } color: #DECB6B; }
.cm-s-material .cm-tag {
color: #ff5370; }
.cm-s-material .cm-error { .cm-s-material .cm-error {
color: white; color: white;
background-color: #EC5F67; } background-color: #FF5370; }
.cm-s-material .CodeMirror-matchingbracket { .cm-s-material .CodeMirror-matchingbracket {
text-decoration: underline; text-decoration: underline;
@@ -3074,13 +3090,6 @@ div.cm-s-mdn-like span.CodeMirror-matchingbracket {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); } background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }
/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ /* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */
/*<!--match-->*/
.cm-s-midnight span.CodeMirror-matchhighlight {
background: #494949; }
.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight {
background: #314D67 !important; }
/*<!--activeline-->*/ /*<!--activeline-->*/
.cm-s-midnight .CodeMirror-activeline-background { .cm-s-midnight .CodeMirror-activeline-background {
background: #253540; } background: #253540; }
@@ -3420,7 +3429,7 @@ div.cm-s-mdn-like span.CodeMirror-matchingbracket {
background: #292A2B; background: #292A2B;
color: #E6E6E6; color: #E6E6E6;
line-height: 1.5; line-height: 1.5;
font-family: 'Operator Mono', 'Source Sans Pro', Menlo, Monaco, Consolas, Courier New, monospace; } font-family: 'Operator Mono', 'Source Code Pro', Menlo, Monaco, Consolas, Courier New, monospace; }
.cm-s-panda-syntax .CodeMirror-cursor { .cm-s-panda-syntax .CodeMirror-cursor {
border-color: #ff2c6d; } border-color: #ff2c6d; }
@@ -5000,7 +5009,7 @@ http://ethanschoonover.com/solarized/img/solarized-palette.png
color: #AEAEAE; } color: #AEAEAE; }
.cm-s-vibrant-ink .cm-link { .cm-s-vibrant-ink .cm-link {
color: blue; } color: #5656F3; }
.cm-s-vibrant-ink .cm-error { .cm-s-vibrant-ink .cm-error {
border-bottom: 1px solid red; } border-bottom: 1px solid red; }
@@ -5305,7 +5314,7 @@ THE SOFTWARE.
.cm-s-zenburn .CodeMirror-cursor { .cm-s-zenburn .CodeMirror-cursor {
border-left: 1px solid white; } border-left: 1px solid white; }
.cm-s-zenburn { .cm-s-zenburn.CodeMirror {
background-color: #3f3f3f; background-color: #3f3f3f;
color: #dcdccc; } color: #dcdccc; }
@@ -5487,17 +5496,17 @@ li.CodeMirror-hint-active {
-o-transition: opacity .4s; -o-transition: opacity .4s;
-ms-transition: opacity .4s; } -ms-transition: opacity .4s; }
.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { .CodeMirror-lint-mark {
background-position: left bottom; background-position: left bottom;
background-repeat: repeat-x; } background-repeat: repeat-x; }
.CodeMirror-lint-mark-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg=="); }
.CodeMirror-lint-mark-warning { .CodeMirror-lint-mark-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); } background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); }
.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { .CodeMirror-lint-mark-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg=="); }
.CodeMirror-lint-marker {
background-position: center center; background-position: center center;
background-repeat: no-repeat; background-repeat: no-repeat;
cursor: pointer; cursor: pointer;
@@ -5507,17 +5516,17 @@ li.CodeMirror-hint-active {
vertical-align: middle; vertical-align: middle;
position: relative; } position: relative; }
.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { .CodeMirror-lint-message {
padding-left: 18px; padding-left: 18px;
background-position: top left; background-position: top left;
background-repeat: no-repeat; } background-repeat: no-repeat; }
.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); }
.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { .CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); } background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); }
.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); }
.CodeMirror-lint-marker-multiple { .CodeMirror-lint-marker-multiple {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");
background-repeat: no-repeat; background-repeat: no-repeat;
+1 -1
View File
@@ -50,7 +50,7 @@ Duplicate Sleeves. It is a numeral value between 1 and 100, and it affects how m
is earned when the sleeve is performing a task. is earned when the sleeve is performing a task.
Let N be the sleeve's synchronization. When the sleeve earns experience by performing Let N be the sleeve's synchronization. When the sleeve earns experience by performing
a task, both the sleeve and the player's original host consciousness of N% of the a task, both the sleeve and the player's original host consciousness gain N% of the
amount of experience normally earned by the task. All of the player's other sleeves amount of experience normally earned by the task. All of the player's other sleeves
earn ((N/100)^2 * 100)% of the experience. earn ((N/100)^2 * 100)% of the experience.
+31 -51
View File
@@ -15,73 +15,53 @@ of level 3.
List of all Source-Files List of all Source-Files
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-1: Source Genesis | * Lets the player start with 32 GB of RAM on home computer | | BitNode-1: Source Genesis | * Lets the player start with 32 GB of RAM on home computer. |
| | * Increases all of the player's multipliers by 16%/24%/28% | | | * Increases all of the player's multipliers by 16%/24%/28%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-2: Rise of the Underworld | * Increases the player's crime success rate, crime money, and | | BitNode-2: Rise of the Underworld | * Lets the player create Gangs in other BitNodes (although some |
| | charisma multipliers by 24%/36%/42% | | | BitNodes will disable this mechanic). |
| | * Increases the player's crime success rate, crime money, and |
| | charisma multipliers by 24%/36%/42%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-3: Corporatocracy | * Lets the player create Corporations in other BitNodes (although some | | BitNode-3: Corporatocracy | * Lets the player create Corporations in other BitNodes (although some |
| | BitNodes will disable this mechanic) | | | BitNodes will disable this mechanic). |
| | * Increases the player's charisma and company salary multipliers by 8%/12%/14% | | | * Increases the player's charisma and company salary multipliers by 8%/12%/14%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-4: The Singularity | * Lets the player access and use Netscript Singularity Functions in other BitNodes. | | BitNode-4: The Singularity | * Lets the player access and use Netscript Singularity Functions in other BitNodes. |
| | * Each level of this Source-File opens up more of the Singularity Functions to use | | | * Each level of this Source-File opens up more of the Singularity Functions to use. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-5: Artificial Intelligence | * Unlocks :ref:`gameplay_intelligence` | | BitNode-5: Artificial Intelligence | * Unlocks :ref:`gameplay_intelligence`. |
| | * Unlocks :js:func:`getBitNodeMultipliers` Netscript function | | | * Unlocks :js:func:`getBitNodeMultipliers` and :js:func:`getServer` |
| | * Increases all of the player's hacking-related multipliers by 8%/12%/14% | | | Netscript functions, as well as :ref:`netscriptformulas`. |
| | * Increases all of the player's hacking-related multipliers by 8%/12%/14%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-6: Bladeburners | * Unlocks the Bladeburner feature in other BitNodes | | BitNode-6: Bladeburners | * Unlocks the Bladeburner feature in other BitNodes. |
| | * Increases all of the player's level and experience gain rate multipliers for | | | * Increases all of the player's level and experience gain rate multipliers for |
| | combat stats by 8%/12%/14% | | | combat stats by 8%/12%/14%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-7: Bladeburners 2079 | * Allows the player to access the :ref:`netscript_bladeburnerapi` in other BitNodes | | BitNode-7: Bladeburners 2079 | * Allows the player to access the :ref:`netscript_bladeburnerapi` in other BitNodes.|
| | * Increases all of the player's Bladeburner multipliers by 8%/12%/14% | | | * Increases all of the player's Bladeburner multipliers by 8%/12%/14%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-8: Ghost of Wall Street | * Increases the player's hacking growth multiplier by 12%/18%/21% | | BitNode-8: Ghost of Wall Street | * Increases the player's hacking growth multiplier by 12%/18%/21%. |
| | * Level 1 grants permanent access to :ref:`WSE <gameplay_stock_market>` and | | | * Level 1 grants permanent access to :ref:`WSE <gameplay_stock_market>` and |
| | :ref:`TIX API <netscript_tixapi>` | | | :ref:`TIX API <netscript_tixapi>`. |
| | * Level 2 grants permanent access to shorting stocks | | | * Level 2 grants permanent access to shorting stocks. |
| | * Level 3 grants permanent access to use limit/stop orders | | | * Level 3 grants permanent access to use limit/stop orders. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-9: Coming Soon | | | BitNode-9: Hacktocracy | * Level 1 permanently unlocks the Hacknet Server in other BitNodes. |
| | * Level 2 lets the player start with 128 GB of RAM on home computer. |
| | * Level 3 grants a highly-upgraded Hacknet Server when entering a new BitNode (it |
| | will be lost after installing augments). |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-10: Digital Carbon | * Each level of this grants a Duplicate Sleeve. | | BitNode-10: Digital Carbon | * Each level of this grants a Duplicate Sleeve. |
| | * Allows the player to access the :ref:`netscript_sleeveapi` in other BitNodes | | | * Allows the player to access the :ref:`netscript_sleeveapi` in other BitNodes. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-11: The Big Crash | * Company favor increases both the player's salary and reputation gain at that | | BitNode-11: The Big Crash | * Company favor increases both the player's salary and reputation gain at that |
| | company by 1% per favor (rather than just the reputation gain) | | | company by 1% per favor (rather than just the reputation gain). |
| | * Increases the player's company salary and reputation gain multipliers by | | | * Increases the player's company salary and reputation gain multipliers by |
| | 24%/36%/42% | | | 32%/48%/56%. |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
| BitNode-12: The Recursion | * There is no maximum level for this Source-File | | BitNode-12: The Recursion | * There is no maximum level for this Source-File. |
| | * Each level of this Source-File increases all of the player's multipliers by 1%. | | | * Lets the player start with Neuroflux Governor equal to the level of this |
| | * This affect is multiplicative with itself. This means that level N of this | | | Source-File. |
| | Source-File will result in a multiplier of 1.01^N (or 0.99^N for multipliers |
| | that decrease) |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+
| | |
+------------------------------------+-------------------------------------------------------------------------------------+ +------------------------------------+-------------------------------------------------------------------------------------+
+1 -1
View File
@@ -124,6 +124,6 @@ Gain experience by:
* Committing certain crimes * Committing certain crimes
* Infiltration * Infiltration
* Working out at a gym * Studying at a university
* Working a relevant job at a company * Working a relevant job at a company
* Doing Field work for a Faction * Doing Field work for a Faction
+205 -4
View File
@@ -3,8 +3,209 @@
Changelog Changelog
========= =========
v0.52.3 - 2021-07-15 Gangs were OP (hydroflame)
-------------------------------------------
v0.51.8 - 2021-05-07 It was there all along (hydroflame) ** Gang **
* Significant rework. Ascension is now based on exp gained.
* All upgrades give exp bonuses.
* Maximum gang members reduced to 12.
* Respect required to recruit sharply increased.
* Rewritten in React, the UI should be smoother and less laggy now.
** Infiltration **
* Now isTrusted protected.
** Misc. **
* Many UI element are now "noselect" protected.
* Fixed an issue where you could join the same faction twice via script and
UI simultaneously.
* Factions list screen converted to React.
v0.52.2 - 2021-07-15 Oh yeah, BN11 is a thing (drunk hydroflame tbh)
-------------------------------------------
** Source-Files **
* Source-File 11 now also provides a small reduction to the price increase
multiplier.
** Augmentations **
* New Augmentation offered by Aevum, themed around 777 and offers some basic
programs.
* Augmentation descriptions are now more concise and consistent.
v0.52.1 - 2021-07-10 bugfixing (hydroflame & community)
-------------------------------------------
**Misc.**
* Fix game crash/corruption when quitting a job while working for it unfocused.
* Fix typo in corporation Market Data.
* Fix typo in docs for hackPercent.
* The tutorial encourages the players to connect to home before creating `n00dles.script`
* The dark web `buy` command now accepts `-1` (one) and `--list` instead of just
`-l`. Helps some confused players.
* Character overview screen no longer hidden on the corporation screen.
* Infiltration difficulty display is now more explicit (It's a big arrow instead
of just one word.)
* Fix wrong ram value in tutorial. (@MageKing17)
* Plenty of augmentation description cleanup (@Kwazygloo)
* Plenty of typo/description fixed (@MageKing17)
* Cleanup description of singularity function on readthedocs (@PurePandemonium)
* Fix bug when autolinking a server while backdooring (@schroederIT)
v0.52.0 - 2021-06-13 Infiltration 2.0 (hydroflame & community)
--------------------------------------------------------------
**Infiltration**
* Completely reworked. Not the same mechanic at all.
**Terminal**
* tail is smarter. It automatically assume the only possible options in some
cases.
**Intelligence**
* Now available when starting BN5 instead of after beating it for the first
time.
* Nerf the effect of intelligence on reputation gain.
**Augmentation**
* Added a new augmentation, the 'Unstable Circadian Modulator', whose
gimmick is that its stats are randomized every hour.
**Netscript**
* 'getPlayer' is not a singularity function anymore.
* 'hacknetNodes.constants' returns the correct values.
* 'createGang' has been added.
* 'inGang' has been added.
**Tutorial**
* Updated the tutorial. Made it look cleaner, fixed typos, etc.
**Misc.**
* Fix many typos in literature (@kwazygloo)
* Fix being able to unfocus from gym and university.
* Fix being able to do hacking missions while unfocused.
* Fix many typos in Augmentation descriptions (@kwazygloo)
* More numbers handle absurdly large values. (@Tesseract1234567890)
* Fix many typos (@Tesseract1234567890)
* Fixed an issue that caused a UI desync when sleeves were set to workout
stats other than strength at the gym.
* Fix weird alignment of donation text box and button. (@Tesseract1234567890)
* Fixed an issue where reputation could be transfered to new jobs when unfocused.
* Empty stack traces should no longer appear.
* Purchasing anything with Infinity money doesn't result in NaN.
v0.51.10 - 2021-05-31 Focus Mark, Focus! (hydroflame)
-----------------------------------------------------
**Focus**
* You can now use the terminal and write scripts while working for factions
but you will gain reputation at a slower rate.
**SF -1**
* Added a new SF -1: Bypass
**Gang**
* "Vigilante justice"/"Ethical hacking" now reduces wanted level by a very
small percentage as well an absolute value.
**Netscript**
* 'tFormat' now has a second argument to display with millisecond precision.
* 'purchaseSleeveAug' can no longer purchase the same aug over and over for
the same sleeve.
* fix typo in logging for 'getServerSecurityLevel'
* Fixed some weird issue where very rarely you would get 0 exp from 'grow'
* 'getActionTime' now returns correct values for Diplomacy and Regeneration.
**Corporations**
* Fixed an exploit where you could get nearly infinite corporation funds by
entering negative numbers in textboxes.
* Fixed an exploit where shares could be sold again by clicking the
"sell share" button via scripts.
**Documentation**
* typo fix in purchaseTor
* typo fix in basicgameplay/stats
**Misc.**
* Very large number will no longer appear as "$NaNt"
* Hash capacity now displays in the "big number" format.
v0.51.9 - 2021-05-17 offline progress and exports! (hydroflame & community)
---------------------------------------------------------------
**Alias**
* several commands can be included in 1 alias. Recursive alias now work to
a depth of 10. (@Dawe)
**Offline**
* Offline money gain has been reworked (it is more generous)
* If you're not working anywhere and go offline the game will work for you
at all your factions evenly.
**Export**
* Exporting now gives +1 favor to all joined factions every 24h.
**Corp**
* Self-fund with an invalid name no longer takes away 150b anyway.
* Can no longer export negative amount
**Bladeburner**
* No longer waste overflowing time.
**Text Editors**
* All settings will now be saved and loaded correctly.
**Terminal**
* 'scan' now works for servers that are more than 21 character long.
**Misc.**
* ls now correctly lists all files.
* importing auto save+reloads (@Dawe)
* Fix a bug where .fconf could not be created
* Fix formatting inconsistencies for some logs of netscript functions.
* Fix a bug where Cashroot starter kit would appear as [object Object] in
confirmation dialog.
* Fix some ram not displayed as 0.00GB
* Fix error message throw undefined variable error
* City hall now has some generic text if you can't create a corp yet.
* Deleting a file without extension now returns an appropriate error message.
* Fixed an issue where bladeburner would miscalculate the cost of hospitalization.
* It is now possible to suppress bladeburner "action stopped" popup.
* Updated several dependencies (big who cares, I know)
* ls no longer prints lingering newline.
* Money earned/spent by sleeves is now tracked under Character>Money
v0.51.8 - 2021-05-07 It was there all along (hydroflame & community)
-------------------------------------------------------- --------------------------------------------------------
**Servers** **Servers**
@@ -60,8 +261,8 @@ v0.51.8 - 2021-05-07 It was there all along (hydroflame)
* script income transfers to parent on death. This helps keep track of * script income transfers to parent on death. This helps keep track of
income for scripts that spawn short lived scripts. income for scripts that spawn short lived scripts.
v0.51.7 - 2021-04-28 n00dles v0.51.7 - 2021-04-28 n00dles (hydroflame & community)
---------------------------- -----------------------------------------
**Tutorial servers** **Tutorial servers**
@@ -118,7 +319,7 @@ v0.51.7 - 2021-04-28 n00dles
* Faction invite text says "Decide later"/"Join!" instead of "No"/"Yes" * Faction invite text says "Decide later"/"Join!" instead of "No"/"Yes"
v0.51.6 - 2021-04-28 Backdoor! (Community) v0.51.6 - 2021-04-28 Backdoor! (hydroflame & community)
------------------------------------------ ------------------------------------------
**Backdoor** **Backdoor**
+2 -2
View File
@@ -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.51' version = '0.52'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '0.51.8' release = '0.52.3'
# 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.
@@ -5,13 +5,16 @@ getBitNodeMultipliers() Netscript Function
:RAM cost: 4 GB :RAM cost: 4 GB
Returns an object containing the current BitNode multipliers. This function If you are not in BitNode-5, then you must have Source-File 5-1 in order to
requires Source-File 5 in order to run. The multipliers are returned in run this function.
decimal forms (e.g. 1.5 instead of 150%). The multipliers represent the
difference between the current BitNode and the original BitNode (BitNode-1). Returns an object containing the current BitNode multipliers. The
For example, if the *CrimeMoney* multiplier has a value of 0.1, then that multipliers are returned in decimal forms (e.g. 1.5 instead of 150%). The
means that committing crimes in the current BitNode will only give 10% of multipliers represent the difference between the current BitNode and the
the money you would have received in BitNode-1. original BitNode (BitNode-1). For example, if the *CrimeMoney* multiplier
has a value of 0.1, then that means that committing crimes in the current
BitNode will only give 10% of the money you would have received in
BitNode-1.
The structure of the returned object is subject to change as BitNode The structure of the returned object is subject to change as BitNode
multipliers get added to the game. Refer to the `source code here multipliers get added to the game. Refer to the `source code here
@@ -3,7 +3,7 @@ getServer() Netscript Function
.. js:function:: getServer([hostname]) .. js:function:: getServer([hostname])
:RAM cost: 4 GB :RAM cost: 2 GB
:param string hostname: Hostname of the server, defaults to host server. :param string hostname: Hostname of the server, defaults to host server.
If you are not in BitNode-5, then you must have Source-File 5-1 in order to run this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to run this function.
@@ -7,8 +7,8 @@ brutessh() Netscript Function
:param string hostname: Hostname of the target server. :param string hostname: Hostname of the target server.
Runs the BruteSSH.exe program on the target server. BruteSSH.exe must exist Runs the ``BruteSSH.exe`` program on the target server. ``BruteSSH.exe``
on your home computer. must exist on your home computer.
Examples: Examples:
@@ -9,9 +9,3 @@ disableLog() Netscript Function
Disables logging for the given function. Logging can be disabled for Disables logging for the given function. Logging can be disabled for
all functions by passing 'ALL' as the argument. all functions by passing 'ALL' as the argument.
Note that this does not completely remove all logging functionality.
This only stops a function from logging when the function is successful. If
the function fails, it will still log the reason for failure.
Notable functions that cannot have their logs disabled: run, exec, exit
+2 -3
View File
@@ -19,9 +19,8 @@ exec() Netscript Function
the :doc:`run<run>` function except that it can be used to run a script on any the :doc:`run<run>` function except that it can be used to run a script on any
server, instead of just the current server. server, instead of just the current server.
.. warning:: Running this function with a ``numThreads`` argument of 0 will return 0 without .. warning:: Running this function with a ``numThreads`` argument of 0 or
running the script. However, running this function with a negative *numThreads* less will cause a runtime error.
argument will cause a runtime error.
The simplest way to use the :doc:`exec<exec>` command is to call it with The simplest way to use the :doc:`exec<exec>` command is to call it with
just the script name and the target server. The following example will try just the script name and the target server. The following example will try
@@ -6,3 +6,12 @@ exit() Netscript Function
:RAM cost: 0 GB :RAM cost: 0 GB
Terminates the current script immediately. Terminates the current script immediately.
.. warning:: In :ref:`netscriptjs`, execution may continue past a call to
this function; while some game-related functions (e.g. those with an
``ns.`` prefix) will not function after this function has been called,
there might still be unintended behavior if you assume ``exit`` will
immediately halt execution, like it does in :ref:`netscript1`. To be
safe, you should probably ``return`` from the main function instead
of/in addition to calling ``ns.exit()`` when halting a NetscriptJS
script.
+16 -10
View File
@@ -7,17 +7,22 @@ flags() Netscript Function
:param data array of pairs of strings: Flags definition. :param data array of pairs of strings: Flags definition.
:returns: Object containing all the flags that were parsed or default. :returns: Object containing all the flags that were parsed or default.
The flag definition is an array of pairs of values, the first value is the This function allows for a more flexible way of parsing script arguments
name of the flag, the 2nd value is the default value for that flag. than to just pass a fixed list in a fixed order. Options can be given
names, and passed in any order, while having defined default values.
The flag definition is an array of pairs of values: the first value is the
name of the flag, and the 2nd value is the default value for that flag.
The return object is a map containing flag names to the value. It also The return object is a map containing flag names to the value. It also
contains the special field '_' which contains all arguments that were not flags. contains the special field '_', which contains all arguments that were not
flags.
Example: Example:
.. code-block:: javascript .. code-block:: javascript
/* example.script // example.script
var data = flags([ var data = flags([
['delay', 0], // a default number means this flag is a number ['delay', 0], // a default number means this flag is a number
['server', 'foodnstuff'], // a default string means this flag is a string ['server', 'foodnstuff'], // a default string means this flag is a string
@@ -25,16 +30,17 @@ flags() Netscript Function
['help', false], // a default boolean means this flag is a boolean ['help', false], // a default boolean means this flag is a boolean
]); ]);
tprint(data); tprint(data);
*/ /*
[home ~/]> run example.script [home ~/]> run example.script
{"_":[],"delay":0,"server":"foodnstuff"} {"_":[],"delay":0,"server":"foodnstuff","exclude":[],"help":false}
[home ~/]> run example.script --delay 3000 [home ~/]> run example.script --delay 3000
{"_":[],"server":"foodnstuff","delay":3000} {"_":[],"server":"foodnstuff","exclude":[],"help":false,"delay":3000}
[home ~/]> run example.script --delay 3000 --server harakiri-sushi [home ~/]> run example.script --delay 3000 --server harakiri-sushi
{"_":[],"delay":3000,"server":"harakiri-sushi"} {"_":[],"exclude":[],"help":false,"delay":3000,"server":"harakiri-sushi"}
[home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world [home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world
{"_":["hello","world"],"delay":3000,"server":"harakiri-sushi"} {"_":["hello","world"],"exclude":[],"help":false,"delay":3000,"server":"harakiri-sushi"}
[home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world --exclude a --exclude b [home ~/]> run example.script --delay 3000 --server harakiri-sushi hello world --exclude a --exclude b
{"_":["hello","world"],"delay":3000,"server":"harakiri-sushi","exclude":["a","b"]} {"_":["hello","world"],"help":false,"delay":3000,"server":"harakiri-sushi","exclude":["a","b"]}
[home ~/]> run example.script --help [home ~/]> run example.script --help
{"_":[],"delay":0,"server":"foodnstuff","exclude":[],"help":true} {"_":[],"delay":0,"server":"foodnstuff","exclude":[],"help":true}
*/
@@ -10,7 +10,6 @@ ftpcrack() Netscript Function
Runs the ``FTPCrack.exe`` program on the target server. ``FTPCrack.exe`` Runs the ``FTPCrack.exe`` program on the target server. ``FTPCrack.exe``
must exist on your home computer. must exist on your home computer.
Examples: Examples:
.. code-block:: javascript .. code-block:: javascript
@@ -13,7 +13,6 @@ getGrowTime() Netscript Function
The function takes in an optional ``hackLvl`` parameter that can be The function takes in an optional ``hackLvl`` parameter that can be
specified to see what the grow time would be at different hacking levels. specified to see what the grow time would be at different hacking levels.
Example: Example:
.. code-block:: javascript .. code-block:: javascript
@@ -11,4 +11,3 @@ getHostname() Netscript Function
.. code-block:: javascript .. code-block:: javascript
getHostname(); // returns: "foodnstuff" getHostname(); // returns: "foodnstuff"
@@ -0,0 +1,101 @@
getPlayer() Netscript Function
==============================
.. js:function:: getPlayer()
:RAM cost: 0.5 GB
The result of this function can be passed to the :doc:`formulas API<../netscriptformulasapi>`.
Returns an object with the Player's stats. The object has the following properties::
{
hacking_skill: Current Hacking skill level
hp: Current health points
max_hp: Maximum health points
strength: Current Strength skill level
defense: Current Defense skill level
dexterity: Current Dexterity skill level
agility: Current Agility skill level
charisma: Current Charisma skill level
intelligence: Current Intelligence skill level (from BitNode-5)
hacking_chance_mult: Hacking Chance multiplier (from Source-Files and Augments)
hacking_speed_mult: Hacking Speed multiplier (from Source-Files and Augments)
hacking_money_mult: Hacking Money multiplier (from Source-Files and Augments)
hacking_grow_mult: Hacking Growth multiplier (from Source-Files and Augments)
hacking_exp: Current Hacking experience points
strength_exp: Current Strength experience points
defense_exp: Current Defense experience points
dexterity_exp: Current Dexterity experience points
agility_exp: Current Agility experience points
charisma_exp: Current Charisma experience points
hacking_mult: Hacking Level multiplier (from Source-Files and Augments)
strength_mult: Strength Level multiplier (from Source-Files and Augments)
defense_mult: Defense Level multiplier (from Source-Files and Augments)
dexterity_mult: Dexterity Level multiplier (from Source-Files and Augments)
agility_mult: Agility Level multiplier (from Source-Files and Augments)
charisma_mult: Charisma Level multiplier (from Source-Files and Augments)
hacking_exp_mult: Hacking Experience multiplier (from Source-Files and Augments)
strength_exp_mult: Strength Experience multiplier (from Source-Files and Augments)
defense_exp_mult: Defense Experience multiplier (from Source-Files and Augments)
dexterity_exp_mult: Dexterity Experience multiplier (from Source-Files and Augments)
agility_exp_mult: Agility Experience multiplier (from Source-Files and Augments)
charisma_exp_mult: Charisma Experience multiplier (from Source-Files and Augments)
company_rep_mult: Company reputation gain multiplier (from Source-Files and Augments)
faction_rep_mult: Faction reputation gain multiplier (from Source-Files and Augments)
money: Current money
city: Name of city you are currently in
location: Name of the last location visited
crime_money_mult: Crime money multiplier (from Source-Files and Augments)
crime_success_mult: Crime success multiplier (from Source-Files and Augments)
isWorking: Boolean indicating whether the player is currently performing work
workType: Name of the kind of work the player is performing
currentWorkFactionName: Name of the faction the player is currently working for
currentWorkFactionDescription: Description of the kind of work the player is currently doing
workHackExpGainRate: Amount of Hacking experience the player will gain every cycle (fifth of a second)
workStrExpGainRate: Amount of Strength experience the player will gain every cycle
workDefExpGainRate: Amount of Defense experience the player will gain every cycle
workDexExpGainRate: Amount of Dexterity experience the player will gain every cycle
workAgiExpGainRate: Amount of Agility experience the player will gain every cycle
workChaExpGainRate: Amount of Charisma experience the player will gain every cycle
workRepGainRate: Amount of Reputation the player will gain every cycle
workMoneyGainRate: Amount of Money the player will gain every cycle
workMoneyLossRate: Amount of Money the player will lose every cycle
workHackExpGained: Total Hacking experience gained while working thus far
workStrExpGained: Total Strength experience gained while working thus far
workDefExpGained: Total Defense experience gained while working thus far
workDexExpGained: Total Dexterity experience gained while working thus far
workAgiExpGained: Total Agility experience gained while working thus far
workChaExpGained: Total Charisma experience gained while working thus far
workRepGained: Total Reputation gained while working thus far
workMoneyGained: Total Money gained while working thus far
createProgramName: Name of the program the player is currently creating
createProgramReqLvl: Hacking skill required to make that program
className: Name of the class the player is currently studying
crimeType: Name of the crime the player last started
work_money_mult: Salary multiplier (from Source-Files and Augments)
hacknet_node_money_mult: Hacknet Node production multiplier (from Source-Files and Augments)
hacknet_node_purchase_cost_mult: Hacknet Node purchase cost multiplier (from Source-Files and Augments)
hacknet_node_ram_cost_mult: Hacknet Node RAM upgrade cost multiplier (from Source-Files and Augments)
hacknet_node_core_cost_mult: Hacknet Node Core purchase cost multiplier (from Source-Files and Augments)
hacknet_node_level_cost_mult: Hacknet Node level upgrade cost multiplier (from Source-Files and Augments)
hasWseAccount: Boolean indicating whether the player has a WSE Account
hasTixApiAccess: Boolean indicating whether the player has TIX API Access
has4SData: Boolean indicating whether the player has 4S Market Data Access
has4SDataTixApi: Boolean indicating whether the player has 4S Market Data TIX API Access
bladeburner_max_stamina_mult: Bladeburner Max Stamina multiplier (from Source-Files and Augments)
bladeburner_stamina_gain_mult: Bladeburner Stamina Gain multiplier (from Source-Files and Augments)
bladeburner_success_chance_mult: Bladeburner Success Chance multiplier (from Source-Files and Augments)
bitNodeN: Current BitNode number
totalPlaytime: Total amount of time the game has been running, in milliseconds
playtimeSinceLastAug: Milliseconds since the last time Augmentations were installed
playtimeSinceLastBitnode: Milliseconds since this BitNode was started
jobs: A mapping of companies the player works for to the title of the player's job at that company
factions: An array of factions the player is currently a member of
tor: Boolean indicating whether or not you have a tor router
}
Example::
player = getPlayer();
print('My charisma level is: ' + player.charisma);
@@ -4,7 +4,7 @@ getRunningScript() Netscript Function
.. js:function:: getRunningScript() .. js:function:: getRunningScript()
:RAM cost: 0.3 GB :RAM cost: 0.3 GB
:returns: Script object or null if not found :returns: Script object or null if not found.
The object has the following properties: The object has the following properties:
@@ -64,8 +64,8 @@ getRunningScript() Netscript Function
.. js:function:: getRunningScript(pid) .. js:function:: getRunningScript(pid)
:RAM cost: 0.3 GB :RAM cost: 0.3 GB
:param number pid: PID of the script :param number pid: PID of the script.
:returns: Script object or null if not found :returns: Script object or null if not found.
Examples: Examples:
@@ -73,13 +73,13 @@ getRunningScript() Netscript Function
getRunningScript(42); // get the script with pid 42. getRunningScript(42); // get the script with pid 42.
.. js:function:: getRunningScript(fn, hostname[, args]) .. js:function:: getRunningScript(fn, hostname[, args...])
:RAM cost: 0.3 GB :RAM cost: 0.3 GB
:param number fn: filename of the target script :param number fn: Filename of the target script.
:param number hostname: hostname of the server running the script :param number hostname: Hostname of the server running the script.
:param number args: arguments to the script. :param number args...: Arguments that the script is running with.
:returns: Script object or null if not found :returns: Script object or null if not found.
Examples: Examples:
@@ -15,4 +15,3 @@ getScriptExpGain() Netscript Function
.. note:: A script is uniquely identified by both its name and its .. note:: A script is uniquely identified by both its name and its
arguments. arguments.
@@ -9,8 +9,8 @@ getScriptLogs() Netscript Function
:param args...: Arguments to identify which scripts to get logs for :param args...: Arguments to identify which scripts to get logs for
:returns: Array of string, each line being a logged line. Chronological. :returns: Array of string, each line being a logged line. Chronological.
.. note:: There is a maximum number of lines that a script stores in its logs. .. note:: There is a maximum number of lines that a script stores in its logs.
This is configurable in the game's options. This is configurable in the game's options.
If the function is called with no arguments, it will return the current If the function is called with no arguments, it will return the current
script's logs. script's logs.
@@ -7,10 +7,10 @@ getServerGrowth() Netscript Function
:param string hostname: Hostname of target server. :param string hostname: Hostname of target server.
:returns: Server growth parameter. :returns: Server growth parameter.
The growth parameter is a number between 1 and 100 affects the percentage by The growth parameter is a number, typically between 1 and 100, that affects
which the server's money is increased when using the :doc:`grow<grow>` the percentage by which the server's money is increased when using the
function. A higher growth parameter will result in a higher percentage :doc:`grow<grow>` function. A higher growth parameter will result in a
increase. higher percentage increase.
Example: Example:
@@ -5,10 +5,10 @@ getServerMaxMoney() Netscript Function
:RAM cost: 0.1 GB :RAM cost: 0.1 GB
:param string hostname: Hostname of target server. :param string hostname: Hostname of target server.
:returns: Maximum amount of money that can be available on a server. :returns: Maximum amount of money that can be available on a server.
Example: Example:
.. code-block:: javascript .. code-block:: javascript
getServerMaxMoney('foodnstuff'); // returns: 4000000 getServerMaxMoney('foodnstuff'); // returns: 50000000
@@ -3,12 +3,14 @@ getServerRam() Netscript Function
.. js:function:: getServerRam(hostname) .. js:function:: getServerRam(hostname)
.. warning:: This function is deprecated. .. warning:: This function is deprecated. It still functions, but new
scripts should prefer :doc:`getServerMaxRam<getServerMaxRam>`
and :doc:`getServerUsedRam<getServerUsedRam>` instead.
:RAM cost: 0.1 GB :RAM cost: 0.1 GB
:param string hostname: Hostname of target server. :param string hostname: Hostname of target server.
:returns: An array of 2 number, first number is the total RAM, second the :returns: An array of 2 numbers; the first number is the total RAM, and the
used RAM. second is the used RAM.
Returns an array with two elements that gives information about a server's memory (RAM). The first Returns an array with two elements that gives information about a server's memory (RAM). The first
element in the array is the amount of RAM that the server has total (in GB). The second element in element in the array is the amount of RAM that the server has total (in GB). The second element in
@@ -6,8 +6,8 @@ httpworm() Netscript Function
:RAM cost: 0.05 GB :RAM cost: 0.05 GB
:param string hostname: Hostname of the target server. :param string hostname: Hostname of the target server.
Runs the HTTPWorm.exe program on the target server. HTTPWorm.exe must exist Runs the ``HTTPWorm.exe`` program on the target server. ``HTTPWorm.exe``
on your home computer. must exist on your home computer.
Example: Example:
+2 -1
View File
@@ -6,7 +6,8 @@ nuke() Netscript Function
:RAM cost: 0.05 GB :RAM cost: 0.05 GB
:param string hostname: Hostname of the target server. :param string hostname: Hostname of the target server.
Runs the NUKE.exe program on the target server. NUKE.exe must exist on your home computer. Runs the ``NUKE.exe`` program on the target server. ``NUKE.exe`` must exist
on your home computer.
Example: Example:
@@ -6,9 +6,8 @@ relaysmtp() Netscript Function
:RAM cost: 0.05 GB :RAM cost: 0.05 GB
:param string hostname: Hostname of the target server. :param string hostname: Hostname of the target server.
Runs the ``relaySMTP.exe`` program on the target server. ``relaySMTP.exe``
Runs the relaySMTP.exe program on the target server. relaySMTP.exe must must exist on your home computer.
exist on your home computer.
Example: Example:
+2 -3
View File
@@ -17,9 +17,8 @@ run() Netscript Function
scripts located on the current server (the server running the script that scripts located on the current server (the server running the script that
calls this function). calls this function).
.. warning:: Running this function with a ``numThreads`` argument of 0 will .. warning:: Running this function with a ``numThreads`` argument of 0 or
return 0 without running the script. However, running this function with less will cause a runtime error.
a negative ``numThreads`` argument will cause a runtime error.
The simplest way to use the :doc:`run<run>` command is to call it with just The simplest way to use the :doc:`run<run>` command is to call it with just
the script name. The following example will run ``foo.script`` the script name. The following example will run ``foo.script``
+1 -1
View File
@@ -9,7 +9,7 @@ scp() Netscript Function
Hostname of the source server, which is the server from which the file will be copied. Hostname of the source server, which is the server from which the file will be copied.
This argument is optional and if it's omitted the source will be the current server. This argument is optional and if it's omitted the source will be the current server.
:param string destination: Hostname of the destination server, which is the server to which the file will be copied. :param string destination: Hostname of the destination server, which is the server to which the file will be copied.
:returns: ``true`` is the copy was a success. :returns: ``true`` if the copy was a success.
Copies a script or literature (.lit) file(s) to another server. The Copies a script or literature (.lit) file(s) to another server. The
``files`` argument can be either a string specifying a single file to copy, ``files`` argument can be either a string specifying a single file to copy,
@@ -8,7 +8,6 @@ sleep() Netscript Function
Suspends the script for n milliseconds. Suspends the script for n milliseconds.
Example: Example:
.. code-block:: javascript .. code-block:: javascript
@@ -16,6 +16,8 @@ spawn() Netscript Function
current one. This function can only be used to run scripts on the local current one. This function can only be used to run scripts on the local
server. server.
.. warning:: Running this function with a ``numThreads`` argument of 0 or
less will cause a runtime error.
Example: Example:
@@ -6,8 +6,8 @@ sqlinject() Netscript Function
:RAM cost: 0.05 GB :RAM cost: 0.05 GB
:param string hostname: Hostname of the target server. :param string hostname: Hostname of the target server.
Runs the SQLInject.exe program on the target server. SQLInject.exe must Runs the ``SQLInject.exe`` program on the target server. ``SQLInject.exe``
exist on your home computer. must exist on your home computer.
Example: Example:
@@ -1,15 +1,17 @@
tFormat() Netscript Function tFormat() Netscript Function
============================ ============================
.. js:function:: tFormat(milliseconds) .. js:function:: tFormat(milliseconds[, milliPrecision=false])
:RAM cost: 0 GB :RAM cost: 0 GB
:param number milliseconds: Amount of milliseconds to format. :param number milliseconds: Amount of milliseconds to format.
:param number milliPrecision: Display time with millisecond precision.
:returns: milliseconds in the "D M H S" format :returns: milliseconds in the "D M H S" format
Example: Example:
.. code-block:: javascript .. code-block:: javascript
tFormat(3000); // returns: "3 seconds" tFormat(3000); // returns: "3 seconds"
tFormat(10000000); // returns: "2 hours 46 minutes 40 seconds" tFormat(10000000); // returns: "2 hours 46 minutes 40 seconds"
tFormat(10000023, true); // returns: "2 hours 46 minutes 40.023 seconds"
@@ -44,9 +44,6 @@ tail() Netscript Function
// Open logs from process with id 42 // Open logs from process with id 42
tail(42); tail(42);
// Open logs from process with id 42 on the foodnstuff server
tail(42, "foodnstuff");
.. js:function:: tail() .. js:function:: tail()
:RAM cost: 0 GB :RAM cost: 0 GB
@@ -8,7 +8,6 @@ write() Netscript Function
:param string data: Data to write :param string data: Data to write
:param string mode: Defines the write mode. Only valid when writing to text files or scripts. :param string mode: Defines the write mode. Only valid when writing to text files or scripts.
This function can be used to either write data to a port, a text file This function can be used to either write data to a port, a text file
(.txt), or a script (.script, .js, .ns) (.txt), or a script (.script, .js, .ns)
@@ -11,8 +11,8 @@ getData() Netscript Function
contract type. contract type.
Get the data associated with the specific Coding Contract. Note that this is Get the data associated with the specific Coding Contract. Note that this is
not the same as the contract's description. This is just the data that not the same as the contract's description; this is just the data that
the contract wants you to act on in order to solve the contract wants you to act on in order to solve.
Example: Example:
@@ -8,15 +8,18 @@ calculateExp() Netscript Function
:param number mult: Assume a specific skill multipler (not exp multiplier). :param number mult: Assume a specific skill multipler (not exp multiplier).
:returns: number of exp required to reach given ``skillLevel`` with that multiplier. :returns: number of exp required to reach given ``skillLevel`` with that multiplier.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the amount of experience needed to reach level the given ``skillLevel``. This function calculates the amount of experience needed to reach the given
``skillLevel``.
Examples: Examples:
.. code-block:: javascript .. code-block:: javascript
nextHacking = getStats().hacking+1; var player = getPlayer();
nextExp = formulas.basic.calculateExp(nextHacking); var nextHacking = player.hacking_skill+1;
missingExp = nextExp - getCharacterInformation().hackingExp; var nextExp = formulas.basic.calculateExp(nextHacking);
var missingExp = nextExp - player.hacking_exp;
tprint("Missing " + missingExp + " to reach next hacking level"); tprint("Missing " + missingExp + " to reach next hacking level");
@@ -8,7 +8,8 @@ calculateSkill() Netscript Function
:param number mult: Assume a specific skill multipler (not exp multiplier). :param number mult: Assume a specific skill multipler (not exp multiplier).
:returns: skillLevel that ``exp`` would reach with that multiplier. :returns: skillLevel that ``exp`` would reach with that multiplier.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the skillLevel that the given amount of ``exp`` would reach. This function calculates the skillLevel that the given amount of ``exp`` would reach.
@@ -7,14 +7,18 @@ growPercent() Netscript Function
:param server server: The server that receives the growth. :param server server: The server that receives the growth.
:param number threads: The number of thread that would be used. :param number threads: The number of thread that would be used.
:param player player: The player. :param player player: The player.
:returns: The percentage growth this server would receive with these parameters. :returns: The amount the server's money would be multiplied by with these
parameters.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates percentage of growth a server would receive with these parameters. This function calculates the amount of growth, as a multiplier, a server
would receive with these parameters. Despite its name, it does not return
a percentage.
Examples: Examples:
@@ -8,10 +8,11 @@ growTime() Netscript Function
:param player player: The player. :param player player: The player.
:returns: The time it takes to grow this server. In seconds. :returns: The time it takes to grow this server. In seconds.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates the amount of time it takes to grow a server. This function calculates the amount of time it takes to grow a server.
@@ -6,19 +6,20 @@ hackChance() Netscript Function
:RAM cost: 0 GB :RAM cost: 0 GB
:param server server: The server to hack. :param server server: The server to hack.
:param player player: The player. :param player player: The player.
:returns: The change to hack that server. between 0 and 1. :returns: The chance to hack that server, between 0 and 1.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates percentage chance to hack a server. This function calculates the probability to successfully hack a server.
Examples: Examples:
.. code-block:: javascript .. code-block:: javascript
server = getServer(); var server = getServer();
server.hackDifficulty = server.minDifficulty; server.hackDifficulty = server.minDifficulty;
tprint(formulas.basic.hackChance(server, getPlayer())); tprint(formulas.basic.hackChance(server, getPlayer()));
@@ -8,10 +8,11 @@ hackExp() Netscript Function
:param player player: The player. :param player player: The player.
:returns: The amount of exp that would be acquired if this server were to be hacked. :returns: The amount of exp that would be acquired if this server were to be hacked.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates the amount of exp obtained by hacking a server. This function calculates the amount of exp obtained by hacking a server.
@@ -19,6 +20,4 @@ hackExp() Netscript Function
.. code-block:: javascript .. code-block:: javascript
server = getServer(); tprint(formulas.basic.hackExp(getServer(), getPlayer()));
server.hackDifficulty = 99.9;
tprint(formulas.basic.hackExp(server, getPlayer()));
@@ -6,15 +6,16 @@ hackPercent() Netscript Function
:RAM cost: 0 GB :RAM cost: 0 GB
:param server server: The server to hack. :param server server: The server to hack.
:param player player: The player. :param player player: The player.
:returns: The percentage of money hacked from a servers maximum money. :returns: The percentage of money hacked from the server's money.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates the percentage of maximum money hacked from a server. This function calculates the percentage of money hacked from a server.
Multiply this by thread count to know calculate the percentage for more than 1 thread. Multiply this by thread count to calculate the percentage for more than 1 thread.
Examples: Examples:
@@ -8,10 +8,11 @@ hackTime() Netscript Function
:param player player: The player. :param player player: The player.
:returns: The time it takes to hack this server. In seconds. :returns: The time it takes to hack this server. In seconds.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates the amount of time it takes to hack a server. This function calculates the amount of time it takes to hack a server.
@@ -8,10 +8,11 @@ weakenTime() Netscript Function
:param player player: The player. :param player player: The player.
:returns: The time it takes to weaken this server. In seconds. :returns: The time it takes to weaken this server. In seconds.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function. Server can be acquired with the :doc:`getServer<../../advancedfunctions/getServer>` function.
Player can be acquired with the :doc:`getPlayer<../../singularityfunctions/getPlayer>` function. Player can be acquired with the :doc:`getPlayer<../../basicfunctions/getPlayer>` function.
This function calculates the amount of time it takes to weaken a server. This function calculates the amount of time it takes to weaken a server.
@@ -6,21 +6,28 @@ constants() Netscript Function
:RAM cost: 0 GB :RAM cost: 0 GB
:returns: A structure with various constants related to hacknet nodes. :returns: A structure with various constants related to hacknet nodes.
If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
Returns an object with the following properties::
{
MoneyGainPerLevel: Multiplied by the node's level to get the node's base income
BaseCost: A multiplier used when buying new nodes or upgrading levels
LevelBaseCost: A multiplier used when upgrading levels
RamBaseCost: A multiplier used when upgrading RAM
CoreBaseCost: A multiplier used when buying additional cores
PurchaseNextMult: The root of an exponent used when buying new nodes
UpgradeLevelMult: The root of an exponent used when upgrading levels
UpgradeRamMult: The root of an exponent used when upgrading RAM
UpgradeCoreMult: The root of an exponent used when buying additional cores
MaxLevel: Maximum level a node can have
MaxRam: Maximum RAM a node can have
MaxCores: Maximum number of cores a node can have
}
Examples: Examples:
.. code-block:: javascript .. code-block:: javascript
{ tprint("Maximum RAM a hacknet node can have: "+formulas.hacknetNodes.constants().MaxRam+" GB.");
MoneyGainPerLevel
BaseCost
LevelBaseCost
RamBaseCost
CoreBaseCost
PurchaseNextMult
UpgradeLevelMult
UpgradeRamMult
UpgradeCoreMult
MaxLevel
MaxRam
MaxCores
}
@@ -9,7 +9,8 @@ coreUpgradeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to go from ``startingCores`` to ``startingCores+extraCores``. :returns: Money required to go from ``startingCores`` to ``startingCores+extraCores``.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the cost of upgrading cores from any level to any level. This function calculates the cost of upgrading cores from any level to any level.
@@ -8,7 +8,8 @@ hacknetNodeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to buy your ``nodeN`` th node. :returns: Money required to buy your ``nodeN`` th node.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the cost purchasing a hacknet node. This function calculates the cost purchasing a hacknet node.
@@ -9,7 +9,8 @@ levelUpgradeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``. :returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the cost of upgrading levels from any level to any level. This function calculates the cost of upgrading levels from any level to any level.
@@ -9,7 +9,8 @@ moneyGainRate() Netscript Function
:param number core: cores of the node. :param number core: cores of the node.
:returns: Money per second that a node with those stats would gain per second. :returns: Money per second that a node with those stats would gain per second.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the money rate of a node with the given stats. This function calculates the money rate of a node with the given stats.
@@ -11,7 +11,8 @@ ramUpgradeCost() Netscript Function
..note:: ``startingRam`` is the actual amount of ram, not the amount of levels of ram. ..note:: ``startingRam`` is the actual amount of ram, not the amount of levels of ram.
You must have Source-File 5-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function.
This function calculates the cost of upgrading levels from any level to any level. This function calculates the cost of upgrading levels from any level to any level.
@@ -9,7 +9,9 @@ cacheUpgradeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``. :returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the cost of upgrading cache from any level to any level. This function calculates the cost of upgrading cache from any level to any level.
@@ -6,24 +6,32 @@ constants() Netscript Function
:RAM cost: 0 GB :RAM cost: 0 GB
:returns: A structure with various constants related to hacknet servers. :returns: A structure with various constants related to hacknet servers.
If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
Returns an object with the following properties::
{
HashesPerLevel: Multiplied by the server's level to get the server's base income
BaseCost: A multiplier used when buying new nodes or upgrading levels
RamBaseCost: A multiplier used when upgrading RAM
CoreBaseCost: A multiplier used when buying additional cores
CacheBaseCost: A multiplier used when upgrading cache
PurchaseMult: The root of an exponent used when buying new servers
UpgradeLevelMult: The root of an exponent used when upgrading levels
UpgradeRamMult: The root of an exponent used when upgrading RAM
UpgradeCoreMult: The root of an exponent used when buying additional cores
UpgradeCacheMult: The root of an exponent used when upgrading cache
MaxServers: Maximum number of hacknet servers you can own
MaxLevel: Maximum level a server can have
MaxRam: Maximum RAM a server can have
MaxCores: Maximum number of cores a server can have
MaxCache: Maximum cache a server can have
}
Examples: Examples:
.. code-block:: javascript .. code-block:: javascript
{ tprint("Maximum RAM a hacknet server can have: "+formulas.hacknetServers.constants().MaxRam+" GB");
HashesPerLevel
BaseCost
RamBaseCost
CoreBaseCost
CacheBaseCost
PurchaseMult
UpgradeLevelMult
UpgradeRamMult
UpgradeCoreMult
UpgradeCacheMult
MaxServers
MaxLevel
MaxRam
MaxCores
MaxCache
}
@@ -9,7 +9,9 @@ coreUpgradeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to go from ``startingCores`` to ``startingCores+extraCores``. :returns: Money required to go from ``startingCores`` to ``startingCores+extraCores``.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the cost of upgrading cores from any level to any level. This function calculates the cost of upgrading cores from any level to any level.
@@ -8,7 +8,9 @@ hacknetServerCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to buy your ``serverN`` th node. :returns: Money required to buy your ``serverN`` th node.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the cost purchasing a hacknet node. This function calculates the cost purchasing a hacknet node.
@@ -10,7 +10,9 @@ hashGainRate() Netscript Function
:param number core: cores of the server. :param number core: cores of the server.
:returns: Money per second that a server with those stats would gain per second. :returns: Money per second that a server with those stats would gain per second.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the hash rate of a server with the given stats. This function calculates the hash rate of a server with the given stats.
@@ -19,7 +21,7 @@ hashGainRate() Netscript Function
.. code-block:: javascript .. code-block:: javascript
server = hacknet.getNodeStats(1); server = hacknet.getNodeStats(1);
currentRate = formulas.hacknetNodes.hashGainRate(server.level, 0, server.ram, server.cores); currentRate = formulas.hacknetServers.hashGainRate(server.level, 0, server.ram, server.cores);
levelRate = formulas.hacknetNodes.hashGainRate(server.level+1, 0, server.ram, server.cores); levelRate = formulas.hacknetServers.hashGainRate(server.level+1, 0, server.ram, server.cores);
ramRate = formulas.hacknetNodes.hashGainRate(server.level, 0, server.ram*2, server.cores); ramRate = formulas.hacknetServers.hashGainRate(server.level, 0, server.ram*2, server.cores);
coresRate = formulas.hacknetNodes.hashGainRate(server.level, 0, server.ram, server.cores+1); coresRate = formulas.hacknetServers.hashGainRate(server.level, 0, server.ram, server.cores+1);
@@ -8,7 +8,9 @@ hashUpgradeCost() Netscript Function
:param number level: Level of the upgrade. :param number level: Level of the upgrade.
:returns: Amount of Hash. :returns: Amount of Hash.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates amount of Hash require to buy level ``level`` of upgrade ``upgName``. This function calculates amount of Hash require to buy level ``level`` of upgrade ``upgName``.
@@ -9,7 +9,9 @@ levelUpgradeCost() Netscript Function
:param number costMult: Aug multiplier that reduces cost. Defaults to ``1``. :param number costMult: Aug multiplier that reduces cost. Defaults to ``1``.
:returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``. :returns: Money required to go from ``startingLevel`` to ``startingLevel+extraLevels``.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the cost of upgrading levels from any level to any level. This function calculates the cost of upgrading levels from any level to any level.
@@ -11,7 +11,9 @@ ramUpgradeCost() Netscript Function
..note:: ``startingRam`` is the actual amount of ram, not the amount of levels of ram. ..note:: ``startingRam`` is the actual amount of ram, not the amount of levels of ram.
You must have Source-File 5-1 and Source-File 9-1 in order to use this function. If you are not in BitNode-5, then you must have Source-File 5-1 in order to
use this function. In addition, if you are not in BitNode-9, then you must
have Source-File 9-1 in order to use this function.
This function calculates the cost of upgrading levels from any level to any level. This function calculates the cost of upgrading levels from any level to any level.
@@ -0,0 +1,12 @@
createGang() Netscript Function
======================================
.. js:function:: createGang(faction)
:RAM cost: 1 GB
:param string faction: Name of faction
:returns: ``true`` if a Gang was created with that faction.
Creates a Gang with that faction. You need to have access to Gangs, the
faction must be one of the approved gang factions, and you must be a member
of that faction for the creation to be successful.
+7
View File
@@ -0,0 +1,7 @@
inGang() Netscript Function
======================================
.. js:function:: inGang()
:RAM cost: 1 GB
:returns: ``true`` if the player is already in a gang.
@@ -92,7 +92,7 @@ its type and name. The following are valid values when specifying the action's t
* blackop * blackop
* blackops * blackops
**General Actions (Training, Field Analysis, Recruitment)** **General Actions (Training, Field Analysis, etc)**
* general * general
* general action * general action
* gen * gen
+10 -5
View File
@@ -8,15 +8,19 @@ Netscript Formulas Functions
The formulas API allow you to gain insight into the inner workings of the game. The formulas API allow you to gain insight into the inner workings of the game.
These functions will allow you to make more informed decision. These functions will allow you to make more informed decision.
All of these function cost 0 GB of ram to use. All these function require The formulas API is unlocked in BitNode-5. If you are in BitNode-5, you will
Source-File 5-1 but some additionally need another source file level 1 to use. automatically gain access to this API. Otherwise, you must have Source-File 5-1
in order to use this API in other BitNodes. Additionally, some functions need
another source file level 1 to use.
All of these function cost 0 GB of ram to use.
basic formulas basic formulas
-------------- --------------
These functions are under the ``formulas.basic.`` name space and available as These functions are under the ``formulas.basic.`` name space and available as
soon as you acquire Source-File 5-1 soon as you enter BitNode-5 or acquire Source-File 5-1.
.. toctree:: .. toctree::
calculateSkill() <formulasapi/basic/calculateSkill> calculateSkill() <formulasapi/basic/calculateSkill>
@@ -34,7 +38,7 @@ hacknetNodes formulas
--------------------- ---------------------
These functions are under the ``formulas.hacknetNodes.`` namespace and available as These functions are under the ``formulas.hacknetNodes.`` namespace and available as
soon as you acquire Source-File 5-1. soon as you enter BitNode-5 or acquire Source-File 5-1.
.. toctree:: .. toctree::
hacknetNodeCost() <formulasapi/hacknetNodes/hacknetNodeCost> hacknetNodeCost() <formulasapi/hacknetNodes/hacknetNodeCost>
@@ -48,7 +52,8 @@ hacknetServers formulas
----------------------- -----------------------
These functions are under the ``formulas.hacknetServers.`` namespace. These functions are under the ``formulas.hacknetServers.`` namespace.
These functions require Source-File 5-1 and Source-File 9-1 to be invoked. These functions require either being in BitNode-5 or having Source-File 5-1, and
also require either being in BitNode-9 or having Source-File 9-1 to be invoked.
.. toctree:: .. toctree::
hacknetServerCost() <formulasapi/hacknetServers/hacknetServerCost> hacknetServerCost() <formulasapi/hacknetServers/hacknetServerCost>
@@ -46,6 +46,7 @@ This includes information such as function signatures, what they do, and their r
getHackingLevel() <basicfunctions/getHackingLevel> getHackingLevel() <basicfunctions/getHackingLevel>
getHackingMultipliers() <basicfunctions/getHackingMultipliers> getHackingMultipliers() <basicfunctions/getHackingMultipliers>
getHacknetMultipliers() <basicfunctions/getHacknetMultipliers> getHacknetMultipliers() <basicfunctions/getHacknetMultipliers>
getPlayer() <basicfunctions/getPlayer>
getServerMoneyAvailable() <basicfunctions/getServerMoneyAvailable> getServerMoneyAvailable() <basicfunctions/getServerMoneyAvailable>
getServerMaxMoney() <basicfunctions/getServerMaxMoney> getServerMaxMoney() <basicfunctions/getServerMaxMoney>
getServerGrowth() <basicfunctions/getServerGrowth> getServerGrowth() <basicfunctions/getServerGrowth>
@@ -25,6 +25,8 @@ In :ref:`netscriptjs`::
.. toctree:: .. toctree::
:caption: API Functions: :caption: API Functions:
createGang() <gangapi/createGang>
inGang() <gangapi/inGang>
getMemberNames() <gangapi/getMemberNames> getMemberNames() <gangapi/getMemberNames>
getGangInformation() <gangapi/getGangInformation> getGangInformation() <gangapi/getGangInformation>
getOtherGangInformation() <gangapi/getOtherGangInformation> getOtherGangInformation() <gangapi/getOtherGangInformation>
+10 -7
View File
@@ -159,18 +159,21 @@ importing other NetscriptJS scripts::
this.args = params.args ? params.args : []; this.args = params.args ? params.args : [];
} }
ScriptJob.prototype.run = async function(ns) { ScriptJob.prototype.run = function(ns) {
let runArgs = [this.fn, this.threads].concat(this.args); let runArgs = [this.fn, this.threads].concat(this.args);
await ns.run.apply(this, runArgs); if (!ns.run.apply(this, runArgs)) {
throw new Error("Unable to run " + this.fn + " on " +ns.getHostname());
}
tprintColored("Running " + this.fn + " on " + ns.getHostname(), "blue"); tprintColored("Running " + this.fn + " on " + ns.getHostname(), "blue");
} }
ScriptJob.prototype.exec = async function(ns, target) { ScriptJob.prototype.exec = function(ns, target) {
ns.scp(this.fn, target); ns.scp(this.fn, target);
let execArgs = [this.fn, target, this.threads].concat(this.args); let execArgs = [this.fn, target, this.threads].concat(this.args);
await ns.exec.apply(this, execArgs); if (!ns.exec.apply(this, execArgs)) {
throw new Error("Unable to execute " + this.fn + " on " + target);
}
tprintColored("Executing " + this.fn + " on " + target, "blue"); tprintColored("Executing " + this.fn + " on " + target, "blue");
} }
@@ -182,8 +185,8 @@ importing other NetscriptJS scripts::
threads: 1, threads: 1,
args: ["foodnstuff"] args: ["foodnstuff"]
}); });
await job.run(ns); job.run(ns);
await job.exec(ns, "foodnstuff"); job.exec(ns, "foodnstuff");
} catch (e) { } catch (e) {
ns.tprint("Exception thrown in scriptScheduler.ns: " + e); ns.tprint("Exception thrown in scriptScheduler.ns: " + e);
} }
@@ -3,21 +3,16 @@
Netscript Singularity Functions Netscript Singularity Functions
=============================== ===============================
The Singularity Functions are a special set of Netscript functions. These functions allow you to control .. warning:: This page contains spoilers for the game.
many additional aspects of the game through scripts, such as working for factions/companies, purchasing/installing Augmentations,
and creating programs. The Singularity Functions are a special set of Netscript functions that allow the player to control additional aspects of the game such as working for factions/companies, purchasing/installing Augmentations, and creating programs.
The Singularity Functions are **not** immediately available to the player and must be unlocked later in the game. The Singularity Functions are **not** immediately available to the player and must be unlocked later in the game.
.. warning:: This page contains spoilers for the game The player has access to all of these functions while in BitNode-4. Completing BitNode-4 and gaining its source-file unlocks certain Singularity Functions for use in other BitNodes, with all functions accessible at level 3.
The Singularity Functions are unlocked in BitNode-4. If you are in BitNode-4, then you will automatically have access to all of these functions.
You can use the Singularity Functions in other BitNodes if and only if you have the Source-File for BitNode-4 (aka Source-File 4). Each level of
Source-File 4 will open up additional Singularity Functions that you can use in other BitNodes. If your Source-File 4 is upgraded all the way to
level 3, then you will be able to access all of the Singularity Functions.
.. toctree:: .. toctree::
:caption: Functions: :caption: Level 1 Functions
universityCourse() <singularityfunctions/universityCourse> universityCourse() <singularityfunctions/universityCourse>
gymWorkout() <singularityfunctions/gymWorkout> gymWorkout() <singularityfunctions/gymWorkout>
@@ -28,9 +23,12 @@ level 3, then you will be able to access all of the Singularity Functions.
connect() <singularityfunctions/connect> connect() <singularityfunctions/connect>
manualHack() <singularityfunctions/manualHack> manualHack() <singularityfunctions/manualHack>
installBackdoor() <singularityfunctions/installBackdoor> installBackdoor() <singularityfunctions/installBackdoor>
getPlayer() <singularityfunctions/getPlayer>
hospitalize() <singularityfunctions/hospitalize> hospitalize() <singularityfunctions/hospitalize>
isBusy() <singularityfunctions/isBusy> isBusy() <singularityfunctions/isBusy>
.. toctree::
:caption: Level 2 Functions
stopAction() <singularityfunctions/stopAction> stopAction() <singularityfunctions/stopAction>
upgradeHomeRam() <singularityfunctions/upgradeHomeRam> upgradeHomeRam() <singularityfunctions/upgradeHomeRam>
getUpgradeHomeRamCost() <singularityfunctions/getUpgradeHomeRamCost> getUpgradeHomeRamCost() <singularityfunctions/getUpgradeHomeRamCost>
@@ -45,6 +43,10 @@ level 3, then you will be able to access all of the Singularity Functions.
getFactionRep() <singularityfunctions/getFactionRep> getFactionRep() <singularityfunctions/getFactionRep>
getFactionFavor() <singularityfunctions/getFactionFavor> getFactionFavor() <singularityfunctions/getFactionFavor>
getFactionFavorGain() <singularityfunctions/getFactionFavorGain> getFactionFavorGain() <singularityfunctions/getFactionFavorGain>
.. toctree::
:caption: Level 3 Functions
donateToFaction() <singularityfunctions/donateToFaction> donateToFaction() <singularityfunctions/donateToFaction>
createProgram() <singularityfunctions/createProgram> createProgram() <singularityfunctions/createProgram>
commitCrime() <singularityfunctions/commitCrime> commitCrime() <singularityfunctions/commitCrime>
@@ -1,103 +0,0 @@
getPlayer() Netscript Function
==============================
.. js:function:: getPlayer()
:RAM cost: 0.5 GB
If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to run this function.
The result of this function can be passed to the :doc:`formulas API<../netscriptformulasapi>`.
Returns an object with the Player's stats. The object has the following properties::
{
hacking_skill
hp
max_hp
strength
defense
dexterity
agility
charisma
intelligence
hacking_chance_mult
hacking_speed_mult
hacking_money_mult
hacking_grow_mult
hacking_exp
strength_exp
defense_exp
dexterity_exp
agility_exp
charisma_exp
hacking_mult
strength_mult
defense_mult
dexterity_mult
agility_mult
charisma_mult
hacking_exp_mult
strength_exp_mult
defense_exp_mult
dexterity_exp_mult
agility_exp_mult
charisma_exp_mult
company_rep_mult
faction_rep_mult
money
city
location
crime_money_mult
crime_success_mult
isWorking
workType
currentWorkFactionName
currentWorkFactionDescription
workHackExpGainRate
workStrExpGainRate
workDefExpGainRate
workDexExpGainRate
workAgiExpGainRate
workChaExpGainRate
workRepGainRate
workMoneyGainRate
workMoneyLossRate
workHackExpGained
workStrExpGained
workDefExpGained
workDexExpGained
workAgiExpGained
workChaExpGained
workRepGained
workMoneyGained
createProgramName
createProgramReqLvl
className
crimeType
work_money_mult
hacknet_node_money_mult
hacknet_node_purchase_cost_mult
hacknet_node_ram_cost_mult
hacknet_node_core_cost_mult
hacknet_node_level_cost_mult
hasWseAccount
hasTixApiAccess
has4SData
has4SDataTixApi
bladeburner_max_stamina_mult
bladeburner_stamina_gain_mult
bladeburner_success_chance_mult
bitNodeN
totalPlaytime
playtimeSinceLastAug
playtimeSinceLastBitnode
jobs
factions
tor
}
Example::
player = getPlayer();
print('My charisma level is: ' + player.charisma);
@@ -10,6 +10,6 @@ purchaseTor() Netscript Function
This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this
function is the same as if you were to manually purchase one. function is the same as if you were to manually purchase one.
This function will return true if it successfully purchase a TOR router and false otherwise. This function will return true if it successfully purchased a TOR router and false otherwise.
:RAM cost: 2 GB :RAM cost: 2 GB
+15
View File
@@ -0,0 +1,15 @@
version: "3.4"
services:
web:
image: bitburner:dev
build:
context: .
dockerfile: Dockerfile
target: dev
ports:
- "8000:8000"
volumes:
- ./src:/app/src
- ./css:/app/css
- ./utils:/app/utils
- ./test:/app/test
+43 -46
View File
@@ -33,83 +33,83 @@
<ul id="mainmenu" class="mainmenu noscrollbar"> <ul id="mainmenu" class="mainmenu noscrollbar">
<!-- Hacking dropdown --> <!-- Hacking dropdown -->
<li id="hacking-menu-header-li"> <li id="hacking-menu-header-li">
<button id="hacking-menu-header" class="mainmenu-accordion-header"> Hacking </button> <button id="hacking-menu-header" class="mainmenu-accordion-header noselect"> Hacking </button>
</li> </li>
<li id="terminal-tab" class="mainmenu-accordion-panel"> <li id="terminal-tab" class="mainmenu-accordion-panel noselect">
<button id="terminal-menu-link"> Terminal </button> <button id="terminal-menu-link"> Terminal </button>
</li> </li>
<li id="create-script-tab" class="mainmenu-accordion-panel"> <li id="create-script-tab" class="mainmenu-accordion-panel noselect">
<button id="create-script-menu-link"> Create Script </button> <button id="create-script-menu-link"> Create Script </button>
</li> </li>
<li id="active-scripts-tab" class="mainmenu-accordion-panel"> <li id="active-scripts-tab" class="mainmenu-accordion-panel noselect">
<button id="active-scripts-menu-link"> Active Scripts </button> <button id="active-scripts-menu-link"> Active Scripts </button>
</li> </li>
<li id="create-program-tab" class="mainmenu-accordion-panel"> <li id="create-program-tab" class="mainmenu-accordion-panel noselect">
<button id="create-program-menu-link"> Create Program </button> <button id="create-program-menu-link"> Create Program </button>
<span id="create-program-notification" class="notification-off"> </span> <span id="create-program-notification" class="notification-off"> </span>
</li> </li>
<!-- Character dropdown --> <!-- Character dropdown -->
<li id="character-menu-header-li"> <li id="character-menu-header-li">
<button id="character-menu-header" class="mainmenu-accordion-header"> Character </button> <button id="character-menu-header" class="mainmenu-accordion-header noselect"> Character </button>
</li> </li>
<li id="stats-tab" class="mainmenu-accordion-panel"> <li id="stats-tab" class="mainmenu-accordion-panel noselect">
<button id="stats-menu-link"> Stats </button> <button id="stats-menu-link"> Stats </button>
</li> </li>
<li id="factions-tab" class="mainmenu-accordion-panel"> <li id="factions-tab" class="mainmenu-accordion-panel noselect">
<button id="factions-menu-link"> Factions </button> <button id="factions-menu-link"> Factions </button>
<span id="factions-notification" class="notification-off"> </span> <span id="factions-notification" class="notification-off"> </span>
</li> </li>
<li id="augmentations-tab" class="mainmenu-accordion-panel"> <li id="augmentations-tab" class="mainmenu-accordion-panel noselect">
<button id="augmentations-menu-link" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> Augmentations </button> <button id="augmentations-menu-link" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> Augmentations </button>
<span id="augmentations-notification" class="notification-off"> </span> <span id="augmentations-notification" class="notification-off"> </span>
</li> </li>
<li id="hacknet-nodes-tab" class="mainmenu-accordion-panel"> <li id="hacknet-nodes-tab" class="mainmenu-accordion-panel noselect">
<button id="hacknet-nodes-menu-link"> Hacknet Nodes </button> <button id="hacknet-nodes-menu-link"> Hacknet </button>
</li> </li>
<li id="sleeves-tab" class="mainmenu-accordion-panel"> <li id="sleeves-tab" class="mainmenu-accordion-panel noselect">
<button id="sleeves-menu-link"> Sleeves </button> <button id="sleeves-menu-link"> Sleeves </button>
</li> </li>
<!-- World dropdown --> <!-- World dropdown -->
<li id="world-menu-header-li"> <li id="world-menu-header-li">
<button id="world-menu-header" class="mainmenu-accordion-header">World</button> <button id="world-menu-header" class="mainmenu-accordion-header noselect">World</button>
</li> </li>
<li id="city-tab" class="mainmenu-accordion-panel"> <li id="city-tab" class="mainmenu-accordion-panel noselect">
<button id="city-menu-link"> City </button> <button id="city-menu-link"> City </button>
</li> </li>
<li id="travel-tab" class="mainmenu-accordion-panel"> <li id="travel-tab" class="mainmenu-accordion-panel noselect">
<button id="travel-menu-link"> Travel </button> <button id="travel-menu-link"> Travel </button>
</li> </li>
<li id="job-tab" class="mainmenu-accordion-panel"> <li id="job-tab" class="mainmenu-accordion-panel noselect">
<button id="job-menu-link"> Job </button> <button id="job-menu-link"> Job </button>
</li> </li>
<li id="stock-market-tab" class="mainmenu-accordion-panel"> <li id="stock-market-tab" class="mainmenu-accordion-panel noselect">
<button id="stock-market-menu-link"> Stock Market </button> <button id="stock-market-menu-link"> Stock Market </button>
</li> </li>
<li id="bladeburner-tab" class="mainmenu-accordion-panel"> <li id="bladeburner-tab" class="mainmenu-accordion-panel noselect">
<button id="bladeburner-menu-link"> Bladeburner </button> <button id="bladeburner-menu-link"> Bladeburner </button>
</li> </li>
<li id="corporation-tab" class="mainmenu-accordion-panel"> <li id="corporation-tab" class="mainmenu-accordion-panel noselect">
<button id="corporation-menu-link"> Corp </button> <button id="corporation-menu-link"> Corp </button>
</li> </li>
<li id="gang-tab" class="mainmenu-accordion-panel"> <li id="gang-tab" class="mainmenu-accordion-panel noselect">
<button id="gang-menu-link"> Gang </button> <button id="gang-menu-link"> Gang </button>
</li> </li>
<li id="help-menu-header-li"> <li id="help-menu-header-li">
<button id="help-menu-header" class="mainmenu-accordion-header"> Help </button> <button id="help-menu-header" class="mainmenu-accordion-header noselect"> Help </button>
</li> </li>
<li id="milestones-tab" class="mainmenu-accordion-panel"> <li id="milestones-tab" class="mainmenu-accordion-panel noselect">
<button id="milestones-menu-link"> Milestones </button> <button id="milestones-menu-link"> Milestones </button>
</li> </li>
<li id="tutorial-tab" class="mainmenu-accordion-panel"> <li id="tutorial-tab" class="mainmenu-accordion-panel noselect">
<button id="tutorial-menu-link"> Tutorial </button> <button id="tutorial-menu-link"> Tutorial </button>
</li> </li>
<li id="options-tab" class="mainmenu-accordion-panel"> <li id="options-tab" class="mainmenu-accordion-panel noselect">
<button id="options-menu-link"> Options </button> <button id="options-menu-link"> Options </button>
</li> </li>
<li id="dev-tab" class="mainmenu-accordion-panel"> <li id="dev-tab" class="mainmenu-accordion-panel noselect">
<button id="dev-menu-link"> Dev </button> <button id="dev-menu-link"> Dev </button>
</li> </li>
</ul> </ul>
@@ -264,31 +264,17 @@
<div id="location-container" class="generic-menupage-container"> <div id="location-container" class="generic-menupage-container">
</div> </div>
<div id="infiltration-container" class="generic-menupage-container"> <div id="infiltration-container" class="generic-fullscreen-container">
<div id="infiltration-left-panel">
<p id="infiltration-level-text"> </p>
<div id="infiltration-buttons">
<button class="a-link-button tooltip" id="infiltration-kill"> </button>
<button class="a-link-button tooltip" id="infiltration-knockout"> </button>
<button class="a-link-button tooltip" id="infiltration-stealthknockout"> </button>
<button class="a-link-button tooltip" id="infiltration-assassinate"> </button>
<button class="a-link-button tooltip" id="infiltration-hacksecurity"> </button>
<button class="a-link-button tooltip" id="infiltration-destroysecurity"> </button>
<button class="a-link-button tooltip" id="infiltration-sneak"> </button>
<button class="a-link-button tooltip" id="infiltration-pickdoor"> </button>
<button class="a-link-button tooltip" id="infiltration-bribe"> </button>
<button class="a-link-button tooltip" id="infiltration-escape"> </button>
</div>
</div>
<div id="infiltration-right-panel">
<p id="infiltration-status-text"></p>
</div>
</div> </div>
<div id="stock-market-container" class="generic-menupage-container"> <div id="stock-market-container" class="generic-menupage-container">
<!-- React Component --> <!-- React Component -->
</div> </div>
<div id="gang-container" class="generic-menupage-container">
<!-- React Component -->
</div>
<!-- Log Box --> <!-- Log Box -->
<div id="log-box-container"> <div id="log-box-container">
<div id="log-box-content"> <div id="log-box-content">
@@ -352,7 +338,8 @@
<div id="work-in-progress-container" class="generic-fullscreen-container"> <div id="work-in-progress-container" class="generic-fullscreen-container">
<p id="work-in-progress-text"> </p> <p id="work-in-progress-text"> </p>
<button id="work-in-progress-cancel-button"> Cancel Work </button> <button id="work-in-progress-cancel-button" class="work-button"> Cancel Work </button>
<button id="work-in-progress-something-else-button" class="work-button"> Do something else simultaneously </button>
</div> </div>
<!-- Red Pill Container --> <!-- Red Pill Container -->
@@ -379,7 +366,7 @@
<div id="character-overview-text"> <div id="character-overview-text">
<!-- ReactJS Component --> <!-- ReactJS Component -->
</div> </div>
<div class="character-quick-options"> <div class="character-quick-options noselect">
<button id="character-overview-save-button" class="character-overview-btn">Save Game</button> <button id="character-overview-save-button" class="character-overview-btn">Save Game</button>
<button id="character-overview-options-button" class="character-overview-btn">Options</button> <button id="character-overview-options-button" class="character-overview-btn">Options</button>
</div> </div>
@@ -506,6 +493,16 @@
<input class="optionCheckbox" type="checkbox" name="settingsSuppressHospitalizationPopup" id="settingsSuppressHospitalizationPopup"> <input class="optionCheckbox" type="checkbox" name="settingsSuppressHospitalizationPopup" id="settingsSuppressHospitalizationPopup">
</fieldset> </fieldset>
<!-- Suppress Bladeburner popups -->
<fieldset>
<label for="settingsSuppressBladeburnerPopup" class="tooltip">Suppress Bladeburner Popup:
<span class="tooltiptext">
If this is set, then having your Bladeburner actions interrupted by being busy with something else will not display a popup message.
</span>
</label>
<input class="optionCheckbox" type="checkbox" name="settingsSuppressBladeburnerPopup" id="settingsSuppressBladeburnerPopup">
</fieldset>
<!-- Disable Terminal and Navigation Shortcuts --> <!-- Disable Terminal and Navigation Shortcuts -->
<fieldset> <fieldset>
<label for="settingsDisableHotkeys" class="tooltip">Disable Hotkeys: <label for="settingsDisableHotkeys" class="tooltip">Disable Hotkeys:
+782 -1206
View File
File diff suppressed because it is too large Load Diff
+7 -5
View File
@@ -10,7 +10,7 @@
"@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.2.0", "acorn": "^6.4.1",
"acorn-walk": "^6.2.0", "acorn-walk": "^6.2.0",
"ajv": "^5.1.5", "ajv": "^5.1.5",
"ajv-keywords": "^2.0.0", "ajv-keywords": "^2.0.0",
@@ -18,14 +18,14 @@
"async": "^2.6.1", "async": "^2.6.1",
"autosize": "^4.0.2", "autosize": "^4.0.2",
"brace": "^0.11.1", "brace": "^0.11.1",
"codemirror": "^5.43.0", "codemirror": "^5.58.2",
"decimal.js": "7.2.3", "decimal.js": "7.2.3",
"enhanced-resolve": "^4.0.0", "enhanced-resolve": "^4.0.0",
"escodegen": "^1.11.0", "escodegen": "^1.11.0",
"escope": "^3.6.0", "escope": "^3.6.0",
"file-saver": "^1.3.8", "file-saver": "^1.3.8",
"interpret": "^1.0.0", "interpret": "^1.0.0",
"jquery": "^3.3.1", "jquery": "^3.5.0",
"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",
@@ -33,6 +33,7 @@
"loader-runner": "^2.3.0", "loader-runner": "^2.3.0",
"loader-utils": "^1.1.0", "loader-utils": "^1.1.0",
"memory-fs": "~0.4.1", "memory-fs": "~0.4.1",
"node-sass": "^6.0.1",
"normalize.css": "^8.0.0", "normalize.css": "^8.0.0",
"numeral": "2.0.6", "numeral": "2.0.6",
"react": "^16.8.3", "react": "^16.8.3",
@@ -76,7 +77,6 @@
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mocha": "^6.1.4", "mocha": "^6.1.4",
"mochapack": "^1.1.1", "mochapack": "^1.1.1",
"node-sass": "^5.0.0",
"null-loader": "^1.0.0", "null-loader": "^1.0.0",
"raw-loader": "~0.5.0", "raw-loader": "~0.5.0",
"sass-loader": "^7.0.3", "sass-loader": "^7.0.3",
@@ -113,6 +113,7 @@
}, },
"scripts": { "scripts": {
"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",
"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", "build:test": "webpack --config webpack.config-test.js",
@@ -121,8 +122,9 @@
"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": "mochapack --webpack-config webpack.config-test.js -r jsdom-global/register ./test/index.js",
"test:container": "mochapack --webpack-config webpack.config-test.js --slow 2000 --timeout 10000 -r jsdom-global/register ./test/index.js",
"watch": "webpack --watch --mode production", "watch": "webpack --watch --mode production",
"watch:dev": "webpack --watch --mode development" "watch:dev": "webpack --watch --mode development"
}, },
"version": "0.51.8" "version": "0.52.3"
} }
+22 -15
View File
@@ -51,14 +51,14 @@ function addAlias(name: string, value: string): void {
if (name in GlobalAliases) { if (name in GlobalAliases) {
delete GlobalAliases[name]; delete GlobalAliases[name];
} }
Aliases[name] = value; 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; GlobalAliases[name] = value.trim();
} }
function getAlias(name: string): string | null { function getAlias(name: string): string | null {
@@ -97,22 +97,29 @@ export function removeAlias(name: string): boolean {
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 unalias command, dont substite // For the alias and unalias commands, dont substite
if (commandArray[0] === "unalias") { return commandArray.join(" "); } if (commandArray[0] === "unalias" || commandArray[0] === "alias") { return commandArray.join(" "); }
const alias = getAlias(commandArray[0]); let somethingSubstituted = true;
if (alias != null) { let depth = 0;
commandArray[0] = alias;
} else { while(somethingSubstituted && depth < 10){
const alias = getGlobalAlias(commandArray[0]); depth++;
somethingSubstituted = false
const alias = getAlias(commandArray[0])?.split(" ");
if (alias != null) { if (alias != null) {
commandArray[0] = alias; somethingSubstituted = true
commandArray.splice(0, 1, ...alias);
//commandArray[0] = alias;
} }
} for (let i = 0; i < commandArray.length; ++i) {
for (let i = 0; i < commandArray.length; ++i) { const alias = getGlobalAlias(commandArray[i])?.split(" ");
const alias = getGlobalAlias(commandArray[i]); if (alias != null) {
if (alias != null) { somethingSubstituted = true
commandArray[i] = alias; commandArray.splice(i, 1, ...alias);
i += alias.length - 1;
//commandArray[i] = alias;
}
} }
} }
} }
@@ -1,15 +1,18 @@
// Class definition for a single Augmentation object // Class definition for a single Augmentation object
import { CONSTANTS } from "../Constants"; import * as React from "react";
import { IMap } from "../types"; import { IMap } from "../types";
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers"; import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
import { Faction } from "../Faction/Faction"; import { Faction } from "../Faction/Faction";
import { Factions } from "../Faction/Factions"; import { Factions } from "../Faction/Factions";
import { numeralWrapper } from "../ui/numeralFormat";
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;
isSpecial?: boolean; isSpecial?: boolean;
moneyCost: number; moneyCost: number;
name: string; name: string;
@@ -46,6 +49,129 @@ interface IConstructorParams {
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;
programs?: string[];
}
function generateStatsDescription(mults: IMap<number>, programs?: string[], startingMoney?: number): JSX.Element {
const f = (x: number, decimals: number = 0) => {
// look, I don't know how to make a "smart decimals"
// todo, make it smarter
if(x === 1.0777-1) return "7.77%";
if(x === 1.777-1) return "77.7%";
return numeralWrapper.formatPercentage(x, decimals);
};
let desc = <>Effects:</>;
if(mults.hacking_mult &&
mults.hacking_mult == mults.strength_mult &&
mults.hacking_mult == mults.defense_mult &&
mults.hacking_mult == mults.dexterity_mult &&
mults.hacking_mult == mults.agility_mult &&
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 {
if(mults.strength_mult)
desc = <>{desc}<br />+{f(mults.strength_mult-1)} strength skill</>
if(mults.defense_mult)
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.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 &&
mults.hacking_exp_mult === mults.strength_exp_mult &&
mults.hacking_exp_mult === mults.defense_exp_mult &&
mults.hacking_exp_mult === mults.dexterity_exp_mult &&
mults.hacking_exp_mult === mults.agility_exp_mult &&
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 {
if(mults.strength_exp_mult)
desc = <>{desc}<br />+{f(mults.strength_exp_mult-1)} strength exp</>
if(mults.defense_exp_mult)
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.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)
desc = <>{desc}<br />+{f(mults.hacking_speed_mult-1)} faster hacking</>
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 &&
mults.faction_rep_mult === mults.company_rep_mult) {
desc = <>{desc}<br />+{f(mults.faction_rep_mult-1)} reputation from factions and 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)
desc = <>{desc}<br />+{f(mults.crime_money_mult-1)} crime 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)
desc = <>{desc}<br />+{f(mults.hacknet_node_money_mult-1)} hacknet production</>
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)
desc = <>{desc}<br />+{f(mults.bladeburner_max_stamina_mult-1)} Bladeburner Max Stamina</>
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)
desc = <>{desc}<br />Start with {Money(startingMoney)} after installing Augmentations.</>
if(programs)
desc = <>{desc}<br />Start with {programs.join(' and ')} after installing Augmentations.</>
return desc;
} }
export class Augmentation { export class Augmentation {
@@ -59,6 +185,9 @@ export class Augmentation {
// Description of what this Aug is and what it does // Description of what this Aug is and what it does
info: string | JSX.Element; info: string | JSX.Element;
// Description of the stats, often autogenerated, sometimes manually written.
stats: JSX.Element;
// Any Augmentation not immediately available in BitNode-1 is special (e.g. Bladeburner augs) // Any Augmentation not immediately available in BitNode-1 is special (e.g. Bladeburner augs)
isSpecial = false; isSpecial = false;
@@ -86,8 +215,8 @@ export class Augmentation {
this.info = params.info; this.info = params.info;
this.prereqs = params.prereqs ? params.prereqs : []; this.prereqs = params.prereqs ? params.prereqs : [];
this.baseRepRequirement = params.repCost * CONSTANTS.AugmentationRepMultiplier * BitNodeMultipliers.AugmentationRepCost; this.baseRepRequirement = params.repCost * BitNodeMultipliers.AugmentationRepCost;
this.baseCost = params.moneyCost * CONSTANTS.AugmentationCostMultiplier * BitNodeMultipliers.AugmentationMoneyCost; this.baseCost = params.moneyCost * BitNodeMultipliers.AugmentationMoneyCost;
this.startingCost = this.baseCost; this.startingCost = this.baseCost;
if (params.isSpecial) { if (params.isSpecial) {
@@ -127,6 +256,11 @@ export class Augmentation {
if (params.bladeburner_stamina_gain_mult) { this.mults.bladeburner_stamina_gain_mult = params.bladeburner_stamina_gain_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_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.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 // Adds this Augmentation to the specified Factions
File diff suppressed because it is too large Load Diff
@@ -47,6 +47,7 @@ export const AugmentationNames: IMap<string> = {
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",
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",
@@ -78,6 +79,7 @@ export const AugmentationNames: IMap<string> = {
PhotosyntheticCells: "Photosynthetic Cells", PhotosyntheticCells: "Photosynthetic Cells",
Neurolink: "BitRunners Neurolink", Neurolink: "BitRunners Neurolink",
TheBlackHand: "The Black Hand", TheBlackHand: "The Black Hand",
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",
+3 -3
View File
@@ -48,10 +48,10 @@ export function PlayerMultipliers(): React.ReactElement {
if(!Player.canAccessBladeburner()) return (<></>); if(!Player.canAccessBladeburner()) return (<></>);
return (<> return (<>
{MultiplierTable([ {MultiplierTable([
['Bladeburner Success Chance', Player.bladeburner_max_stamina_mult, Player.bladeburner_max_stamina_mult*mults.bladeburner_max_stamina_mult], ['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 Max Stamina', Player.bladeburner_max_stamina_mult, Player.bladeburner_max_stamina_mult*mults.bladeburner_max_stamina_mult],
['Bladeburner Stamina Gain', 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_max_stamina_mult, Player.bladeburner_max_stamina_mult*mults.bladeburner_max_stamina_mult], ['Bladeburner Field Analysis', Player.bladeburner_analysis_mult, Player.bladeburner_analysis_mult*mults.bladeburner_analysis_mult],
])}<br /> ])}<br />
</>); </>);
} }
+11 -1
View File
@@ -12,7 +12,17 @@ import { AugmentationAccordion } from "../../ui/React/AugmentationAccordion";
export function PurchasedAugmentations(): React.ReactElement { export function PurchasedAugmentations(): React.ReactElement {
const augs: React.ReactElement[] = []; const augs: React.ReactElement[] = [];
for (const ownedAug of Player.queuedAugmentations) { // Only render the last NeuroFlux (there are no findLastIndex btw)
let nfgIndex = -1;
for(let i = Player.queuedAugmentations.length-1; i >= 0; i--) {
if(Player.queuedAugmentations[i].name === AugmentationNames.NeuroFluxGovernor) {
nfgIndex = i;
break;
}
}
for (let i = 0; i < Player.queuedAugmentations.length; i++) {
const ownedAug = Player.queuedAugmentations[i];
if(ownedAug.name === AugmentationNames.NeuroFluxGovernor && i !== nfgIndex) continue;
const aug = Augmentations[ownedAug.name]; const aug = Augmentations[ownedAug.name];
let level = null; let level = null;
if (ownedAug.name === AugmentationNames.NeuroFluxGovernor) { if (ownedAug.name === AugmentationNames.NeuroFluxGovernor) {

Some files were not shown because too many files have changed in this diff Show More