Compare commits

..

26 Commits

Author SHA1 Message Date
Olivier Gagnon
56441b8e34 run build for 0.48 2021-03-07 18:45:23 -05:00
Olivier Gagnon
5106315128 Character,Factions has a badge indicating how many pending invite the player has, Character,Augmentations has a badge indicating how many augs the player has bought but not installed. 2021-03-07 18:41:04 -05:00
Olivier Gagnon
6ca7f10faf Current stamina will scale as max stamina increases, this prevents players from having very high penalty when they gain huge amount of exp at the start of a reset. 2021-03-07 16:48:48 -05:00
Olivier Gagnon
56802fc85e The players gang is always listed first in gang terrority screen. 2021-03-07 16:35:17 -05:00
Olivier Gagnon
700583a739 fix broken color from character overview 2021-03-07 16:33:46 -05:00
Olivier Gagnon
a290b0bef5 Bladeburner can be accessed from other bitnodes if the player has SF7 2021-03-07 16:32:56 -05:00
Olivier Gagnon
79a06dd91c Character,Augmentations now display by how much the stats will increase. 2021-03-07 16:32:16 -05:00
Olivier Gagnon
6cd6f28820 Cities are now top-down view of metro maps in ascii 2021-03-07 16:14:08 -05:00
Olivier Gagnon
dabb5016fc Added maxNumNodes to the hacknet API 2021-03-07 16:03:21 -05:00
Olivier Gagnon
58e38faad6 Character percentages are aligned, server and hacknet limit are displayed, if the player has SF5 the reduces stats are shown. 2021-03-07 15:58:52 -05:00
Olivier Gagnon
31e8ca8c8d BN12 now reduces coding contract money 2021-03-07 13:27:21 -05:00
Olivier Gagnon
c72519e3ea Formatting and typo 2021-03-07 13:25:09 -05:00
Olivier Gagnon
58333c1b46 corporation textbox now match the rest of the game. 2021-03-07 13:21:00 -05:00
Olivier Gagnon
f0ad090cdc All BonusTime now displays in the H M S format 2021-03-07 13:19:36 -05:00
Olivier Gagnon
4bd1fce1f6 Fixed an issue where the gang equipment screen would freeze the game if a script installed augmentations while it is open. 2021-03-07 13:15:15 -05:00
Olivier Gagnon
b35e25e5dc New .ns scripts start with a main function. 2021-03-07 13:11:29 -05:00
Olivier Gagnon
a8bb345c88 Faction donation text-input style now matches the rest of the game. 2021-03-07 13:09:32 -05:00
Olivier Gagnon
bbe4f9c286 Pid resets to 1 when installing or destroying a BitNode. 2021-03-07 13:08:12 -05:00
Olivier Gagnon
f9dcefd6ea Merge branch 'dev' of github.com:danielyxie/bitburner into dev 2021-03-07 12:58:59 -05:00
Olivier Gagnon
44c2bab557 Travel Agency now displays a world map. 2021-03-07 12:58:49 -05:00
Olivier Gagnon
fbca5a4d8f Travel Agency now displays a world map. 2021-03-07 12:58:04 -05:00
Olivier Gagnon
c2ceaa9bdd getCharacterInformation now additionally returns stat experience 2021-03-07 05:01:24 -05:00
Olivier Gagnon
dc402bef68 added getAugmentationStats to netscript, it returns the stat boost of an aug 2021-03-07 04:57:49 -05:00
Olivier Gagnon
64272c99fb Added softReset to netscript 2021-03-07 04:49:57 -05:00
Olivier Gagnon
c8377c0bb3 Fix SF3 listed with a limit level of infinity 2021-03-07 04:43:31 -05:00
hydroflame
4145ddad39 0.47.3 patch 2 fix documentation (#810) 2021-03-07 04:37:56 -05:00
121 changed files with 1136 additions and 480 deletions

View File

@@ -59,10 +59,16 @@
}
#character-hp-wrapper { color: $my-stat-hp-color; }
.character-hp-cell { color: $my-stat-hp-color; }
#character-money-wrapper { color: $my-stat-money-color; }
.character-money-cell { color: $my-stat-money-color; }
#character-hack-wrapper { color: $my-stat-hack-color; }
.character-hack-cell { color: $my-stat-hack-color; }
#character-cha-wrapper { color: $my-stat-cha-color; }
.character-cha-cell { color: $my-stat-cha-color; }
#character-int-wrapper { color: $my-stat-int-color; }
.character-int-cell { color: $my-stat-int-color; }
.character-combat-cell { color: $my-stat-physical; }
.character-overview-btn {
@include borderRadius(12px);

View File

@@ -17,7 +17,8 @@ body {
p,
pre,
h2,
.text {
.text,
td {
color: var(--my-font-color);
}
@@ -79,6 +80,28 @@ a:visited {
right: 0;
}
#factions-tab {
position: relative;
}
#factions-notification {
font-size: $defaultFontSize * 0.625;
position: absolute; /* Position the badge within the relatively positioned button */
top: 0;
right: 0;
}
#augmentations-tab {
position: relative;
}
#augmentations-notification {
font-size: $defaultFontSize * 0.625;
position: absolute; /* Position the badge within the relatively positioned button */
top: 0;
right: 0;
}
.notification-on {
background-color: #fa3e3e;
color: #fff;

File diff suppressed because one or more lines are too long

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([362,0]),o()}({305:function(n,t,o){},307:function(n,t,o){},309:function(n,t,o){},311:function(n,t,o){},313:function(n,t,o){},315:function(n,t,o){},317:function(n,t,o){},319:function(n,t,o){},321:function(n,t,o){},323:function(n,t,o){},325:function(n,t,o){},327:function(n,t,o){},329:function(n,t,o){},331:function(n,t,o){},333:function(n,t,o){},335:function(n,t,o){},337:function(n,t,o){},339:function(n,t,o){},341:function(n,t,o){},343:function(n,t,o){},345:function(n,t,o){},347:function(n,t,o){},349:function(n,t,o){},351:function(n,t,o){},353:function(n,t,o){},355:function(n,t,o){},357:function(n,t,o){},359:function(n,t,o){},362:function(n,t,o){"use strict";o.r(t);o(361),o(359),o(357),o(355),o(353),o(351),o(349),o(347),o(345),o(343),o(341),o(339),o(337),o(335),o(333),o(331),o(329),o(327),o(325),o(323),o(321),o(319),o(317),o(315),o(313),o(311),o(309),o(307),o(305)}});
!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([363,0]),o()}({306:function(n,t,o){},308:function(n,t,o){},310:function(n,t,o){},312:function(n,t,o){},314:function(n,t,o){},316:function(n,t,o){},318:function(n,t,o){},320:function(n,t,o){},322:function(n,t,o){},324:function(n,t,o){},326:function(n,t,o){},328:function(n,t,o){},330:function(n,t,o){},332:function(n,t,o){},334:function(n,t,o){},336:function(n,t,o){},338:function(n,t,o){},340:function(n,t,o){},342:function(n,t,o){},344:function(n,t,o){},346:function(n,t,o){},348:function(n,t,o){},350:function(n,t,o){},352:function(n,t,o){},354:function(n,t,o){},356:function(n,t,o){},358:function(n,t,o){},360:function(n,t,o){},363:function(n,t,o){"use strict";o.r(t);o(362),o(360),o(358),o(356),o(354),o(352),o(350),o(348),o(346),o(344),o(342),o(340),o(338),o(336),o(334),o(332),o(330),o(328),o(326),o(324),o(322),o(320),o(318),o(316),o(314),o(312),o(310),o(308),o(306)}});
//# sourceMappingURL=engineStyle.bundle.js.map

41
dist/engineStyle.css vendored
View File

@@ -26,7 +26,8 @@ body {
p,
pre,
h2,
.text {
.text,
td {
color: var(--my-font-color); }
h1 {
@@ -78,6 +79,26 @@ a:visited {
top: 0;
right: 0; }
#factions-tab {
position: relative; }
#factions-notification {
font-size: 10px;
position: absolute;
/* Position the badge within the relatively positioned button */
top: 0;
right: 0; }
#augmentations-tab {
position: relative; }
#augmentations-notification {
font-size: 10px;
position: absolute;
/* Position the badge within the relatively positioned button */
top: 0;
right: 0; }
.notification-on {
background-color: #fa3e3e;
color: #fff;
@@ -684,18 +705,36 @@ button {
#character-hp-wrapper {
color: #dd3434; }
.character-hp-cell {
color: #dd3434; }
#character-money-wrapper {
color: #ffd700; }
.character-money-cell {
color: #ffd700; }
#character-hack-wrapper {
color: #adff2f; }
.character-hack-cell {
color: #adff2f; }
#character-cha-wrapper {
color: #a671d1; }
.character-cha-cell {
color: #a671d1; }
#character-int-wrapper {
color: #6495ed; }
.character-int-cell {
color: #6495ed; }
.character-combat-cell {
color: #faffdf; }
.character-overview-btn {
-webkit-border-radius: 12px;
-moz-border-radius: 12px;

24
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -3,6 +3,49 @@
Changelog
=========
v0.48.0 - ASCII - 2020-03-07
-------
**ASCII**
* Travel Agency now displays a world map
* Cities are now top view of metro station maps
**Netscript**
* 'softReset' is a new netscript function that performs a soft reset
regardless of if the player has bought augmentations or not.
* 'getAugmentationStats' is a new netscript function that returns the stats of
an augmentation.
* getCharacterInformation now additionally returns exp
* pid resets back to 1 when installing or destroying a BitNode.
* New '.ns' scripts start with a main function.
* 'hacknet.maxNumNodes' returns the maximum number of hacknet nodes.
**Bladeburner**
* Current stamina will scale as max stamina increases, this prevents players
from having very high penalty when they gain huge amount of exp at the
start of a reset.
**Misc.**
* Fixed an issue where SF3 was listed as infinitly repeatable and SF12 as
having a limit of 3.
* Fixed an issue where the gang equipment screen would freeze the game if a
script installed augmentations while it is open.
* All BonusTime now displays in the 'H M S' format.
* Donation textbox style updated to match the rest of the game.
* Corporation name style updated to match the rest of the game.
* minor formatting under Hacking>Active Scripts
* typo in BN12 description
* BN12 now reduces contract money
* Character>Stats percentages are aligned, server and hacknet limit are
displayed, if the player has SF5 the reduces stats are shown.
* Character>Augmentations now displays by how much the player stats will
increase.
* Character>Augmentations has a badge indicating how many augs the player
has bought but not installed
* Character>Factions has a badge indicating how many factions have pending
invites.
v0.47.2 - 7/15/2019
-------------------

View File

@@ -3,6 +3,8 @@ ascendMember() Netscript Function
.. js:function:: ascendMember(name)
:RAM cost: 4 GB
:param string name: Name of member to ascend
Ascend the specified Gang Member.
@@ -20,5 +22,3 @@ ascendMember() Netscript Function
agi: Agility multiplier gained from ascending. Decimal form
cha: Charisma multiplier gained from ascending. Decimal form
}
:RAM cost: 4 GB

View File

@@ -3,6 +3,6 @@ canRecruitMember() Netscript Function
.. js:function:: canRecruitMember()
:returns: Boolean indicating whether a member can currently be recruited
:RAM cost: 1 GB
:returns: Boolean indicating whether a member can currently be recruited

View File

@@ -3,6 +3,8 @@ getBonusTime() Netscript Function
.. js:function:: getBonusTime()
:RAM cost: 0 GB
Returns the amount of accumulated "bonus time" (seconds) for the Gang mechanic.
"Bonus time" is accumulated when the game is offline or if the game is
@@ -11,5 +13,3 @@ getBonusTime() Netscript Function
"Bonus time" makes the game progress faster, up to 10x the normal speed.
:returns: Bonus time for the Gang mechanic in seconds
:RAM cost: 0 GB

View File

@@ -3,9 +3,9 @@ getChanceToWinClash() Netscript Function
.. js:function:: getChanceToWinClash(gangName)
:RAM cost: 4 GB
:param string gangName: Target gang
Returns the chance you have to win a clash with the specified gang. The chance
is returned in decimal form, not percentage
:RAM cost: 4 GB

View File

@@ -3,6 +3,8 @@ getEquipmentCost() Netscript Function
.. js:function:: getEquipmentCost(equipName)
:RAM cost: 2 GB
:param string equipName: Name of equipment
Get the amount of money it takes to purchase a piece of Equipment or an Augmentation.
@@ -10,5 +12,3 @@ getEquipmentCost() Netscript Function
:returns: Cost to purchase the specified Equipment/Augmentation (number). Infinity
for invalid arguments
:RAM cost: 2 GB

View File

@@ -3,9 +3,9 @@ getEquipmentNames() Netscript Function
.. js:function:: getEquipmentNames()
:RAM cost: 1 GB
Get the name of all possible equipment/upgrades you can purchase for your
Gang Members. This includes Augmentations.
:returns: Array of strings of the names of all Equpiment/Augmentations
:RAM cost: 1 GB

View File

@@ -3,6 +3,8 @@ getEquipmentType() Netscript Function
.. js:function:: getEquipmentType(equipName)
:RAM cost: 2 GB
:param string equipName: Name of equipment
Get the specified equipment type, which can be one of the following:
@@ -14,5 +16,3 @@ getEquipmentType() Netscript Function
* Augmentation
:returns: A string stating the type of the equipment
:RAM cost: 2 GB

View File

@@ -3,6 +3,8 @@ getGangInformation() Netscript Function
.. js:function:: getGangInformation()
:RAM cost: 2 GB
Get general information about the gang
:returns: An object with the gang information.
@@ -21,5 +23,3 @@ getGangInformation() Netscript Function
wantedLevel: Gang's wanted level
wantedLevelGainRate: Wanted level gained/lost per second (negative for losses)
}
:RAM cost: 2 GB

View File

@@ -3,14 +3,14 @@ getMemberInformation() Netscript Function
.. js:function:: getMemberInformation(name)
:RAM cost: 2 GB
:param string name: Name of member
Get stat and equipment-related information about a Gang Member
:returns: An object with the gang member information.
:RAM cost: 2 GB
The object has the following structure::
{

View File

@@ -3,8 +3,8 @@ getMemberNames() Netscript Function
.. js:function:: getMemberNames()
:RAM cost: 1 GB
Get the names of all Gang members
:returns: An array of the names of all Gang members as strings
:RAM cost: 1 GB

View File

@@ -3,6 +3,8 @@ getOtherGangInformation() Netscript Function
.. js:function:: getOtherGangInformation()
:RAM cost: 2 GB
Get territory and power information about all gangs
:returns: An object with information about all gangs
@@ -24,5 +26,3 @@ getOtherGangInformation() Netscript Function
},
... (for all six gangs)
}
:RAM cost: 2 GB

View File

@@ -3,8 +3,8 @@ getTaskNames() Netscript Function
.. js:function:: getTaskNames()
:RAM cost: 1 GB
Get the name of all valid tasks that Gang members can be assigned to
:returns: Array of strings of all task names
:RAM cost: 1 GB

View File

@@ -3,6 +3,8 @@ purchaseEquipment() Netscript Function
.. js:function:: purchaseEquipment(memberName, equipName)
:RAM cost: 4 GB
:param string memberName: Name of Gang member to purchase the equipment for
:param string equipName: Name of Equipment/Augmentation to purchase
@@ -10,5 +12,3 @@ purchaseEquipment() Netscript Function
Gang member.
:returns: True if the equipment was successfully purchased. False otherwise
:RAM cost: 4 GB

View File

@@ -3,6 +3,8 @@ recruitMember() Netscript Function
.. js:function:: recruitMember(name)
:RAM cost: 2 GB
:param string name: Name of member to recruit
Attempt to recruit a new gang member.
@@ -13,5 +15,3 @@ recruitMember() Netscript Function
* There already exists a member with the specified name
:returns: True if the member was successfully recruited. False otherwise
:RAM cost: 2 GB

View File

@@ -3,6 +3,8 @@ setMemberTask() Netscript Function
.. js:function:: setMemberTask(memberName, taskName)
:RAM cost: 2 GB
:param string memberName: Name of Gang member to assign
:param string taskName: Task to assign
@@ -10,5 +12,3 @@ setMemberTask() Netscript Function
If an invalid task is specified, the Gang member will be set to idle ("Unassigned")
:returns: True if the Gang Member was successfully assigned to the task. False otherwise
:RAM cost: 2 GB

View File

@@ -3,8 +3,8 @@ setTerritoryWarfare() Netscript Function
.. js:function:: setTerritoryWarfare(engage)
:RAM cost: 2 GB
:param bool engage: Whether or not to engage in territory warfare
Set whether or not the gang should engage in territory warfare
:RAM cost: 2 GB

View File

@@ -5,6 +5,8 @@ getCacheUpgradeCost() Netscript Function
.. js:function:: getCacheUpgradeCost(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of times to upgrade cache. Must be positive. Rounded to nearest integer
@@ -15,5 +17,3 @@ getCacheUpgradeCost() Netscript Function
If an invalid value for *n* is provided, then this function returns 0. If the
specified Hacknet Server is already at the max cache level, then Infinity is returned.
:RAM cost: 0 GB

View File

@@ -3,6 +3,8 @@ getCoreUpgradeCost() Netscript Function
.. js:function:: getCoreUpgradeCost(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of times to upgrade cores. Must be positive. Rounded to nearest integer
@@ -10,5 +12,3 @@ getCoreUpgradeCost() Netscript Function
If an invalid value for *n* is provided, then this function returns 0. If the
specified Hacknet Node is already at the max number of cores, then Infinity is returned.
:RAM cost: 0 GB

View File

@@ -3,6 +3,8 @@ getLevelUpgradeCost() Netscript Function
.. js:function:: getLevelUpgradeCost(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of levels to upgrade. Must be positive. Rounded to nearest integer
@@ -10,5 +12,3 @@ getLevelUpgradeCost() Netscript Function
If an invalid value for *n* is provided, then this function returns 0. If the
specified Hacknet Node is already at max level, then Infinity is returned.
:RAM cost: 0 GB

View File

@@ -5,6 +5,8 @@ getNodeStats() Netscript Function
.. js:function:: getNodeStats(i)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
Returns an object containing a variety of stats about the specified Hacknet Node::
@@ -20,8 +22,6 @@ getNodeStats() Netscript Function
timeOnline: Number of seconds since Node has been purchased,
totalProduction: Total amount that the Node has produced
}
:RAM cost: 0 GB
.. note:: Note that for Hacknet Nodes, production refers to the amount of money the node generates.
For Hacknet Servers (the upgraded version of Hacknet Nodes), production refers to the amount

View File

@@ -3,6 +3,6 @@ getPurchaseNodeCost() Netscript Function
.. js:function:: getPurchaseNodeCost()
Returns the cost of purchasing a new Hacknet Node
:RAM cost: 0 GB
Returns the cost of purchasing a new Hacknet Node

View File

@@ -3,6 +3,8 @@ getRamUpgradeCost() Netscript Function
.. js:function:: getRamUpgradeCost(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of times to upgrade RAM. Must be positive. Rounded to nearest integer
@@ -10,5 +12,3 @@ getRamUpgradeCost() Netscript Function
If an invalid value for *n* is provided, then this function returns 0. If the
specified Hacknet Node is already at max RAM, then Infinity is returned.
:RAM cost: 0 GB

View File

@@ -5,6 +5,8 @@ hashCost() Netscript Function
.. js:function:: hashCost(upgName)
:RAM cost: 0 GB
:param string upgName: Name of upgrade to get the cost of. Must be an exact match
.. note:: This function is only applicable for Hacknet Servers (the upgraded version
@@ -12,8 +14,6 @@ hashCost() Netscript Function
Returns the number of hashes required for the specified upgrade. The name of the
upgrade must be an exact match.
:RAM cost: 0 GB
Example:

View File

@@ -0,0 +1,8 @@
maxNumNodes() Netscript Function
=============================
.. js:function:: maxNumNodes()
:RAM cost: 0 GB
Returns the maximum number of Hacknet Nodes you can own.

View File

@@ -5,9 +5,9 @@ numHashes() Netscript Function
.. js:function:: numHashes()
:RAM cost: 0 GB
.. note:: This function is only applicable for Hacknet Servers (the upgraded version
of a Hacknet Node).
Returns the number of hashes you have
:RAM cost: 0 GB

View File

@@ -3,6 +3,6 @@ numNodes() Netscript Function
.. js:function:: numNodes()
Returns the number of Hacknet Nodes you own.
:RAM cost: 0 GB
Returns the number of Hacknet Nodes you own.

View File

@@ -3,11 +3,11 @@ purchaseNode() Netscript Function
.. js:function:: purchaseNode()
:RAM cost: 0 GB
Purchases a new Hacknet Node. Returns a number with the index of the Hacknet Node.
This index is equivalent to the number at the end of the Hacknet Node's name
(e.g The Hacknet Node named 'hacknet-node-4' will have an index of 4).
If the player cannot afford to purchase a new Hacknet Node then the function
will return -1.
:RAM cost: 0 GB

View File

@@ -5,6 +5,8 @@ spendHashes() Netscript Function
.. js:function:: spendHashes(upgName, upgTarget)
:RAM cost: 0 GB
:param string upgName: Name of upgrade to spend hashes on. Must be an exact match
:param string upgTarget: Object to which upgrade applies. Required for certain upgrades
@@ -24,5 +26,3 @@ spendHashes() Netscript Function
hacknet.spendHashes("Sell for Corporation Funds");
hacknet.spendHashes("Increase Maximum Money", "foodnstuff");
:RAM cost: 0 GB

View File

@@ -5,6 +5,8 @@ upgradeCache() Netscript Function
.. js:function:: upgradeCache(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of cache levels to purchase. Must be positive. Rounded to nearest integer
@@ -17,5 +19,3 @@ upgradeCache() Netscript Function
it purchases some positive amount and the Server reaches its max cache level.
Returns false otherwise.
:RAM cost: 0 GB

View File

@@ -3,6 +3,8 @@ upgradeCore() Netscript Function
.. js:function:: upgradeCore(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of cores to purchase. Must be positive. Rounded to nearest integer
@@ -12,5 +14,3 @@ upgradeCore() Netscript Function
it purchases some positive amount and the Node reaches its max number of cores.
Returns false otherwise.
:RAM cost: 0 GB

View File

@@ -3,6 +3,8 @@ upgradeLevel() Netscript Function
.. js:function:: upgradeLevel(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of levels to purchase. Must be positive. Rounded to nearest integer
@@ -12,5 +14,3 @@ upgradeLevel() Netscript Function
if it is upgraded by some positive amount and the Node reaches its max level.
Returns false otherwise.
:RAM cost: 0 GB

View File

@@ -3,6 +3,8 @@ upgradeRam() Netscript Function
.. js:function:: upgradeRam(i, n)
:RAM cost: 0 GB
:param number i: Index/Identifier of Hacknet Node. :ref:`See here for details <netscript_hacknetnodeapi_referencingahacknetnode>`
:param number n: Number of times to upgrade RAM. Must be positive. Rounded to nearest integer
@@ -14,5 +16,3 @@ upgradeRam() Netscript Function
it is upgraded some positive number of times and the Node reaches it max RAM.
Returns false otherwise.
:RAM cost: 0 GB

View File

@@ -2,6 +2,7 @@ applyToCompany() Netscript Function
===================================
.. js:function:: applyToCompany(companyName, field)
:RAM cost: 3 GB
:param string companyName: Name of company to apply to. CASE-SENSITIVE.

View File

@@ -2,6 +2,7 @@ checkFactionInvitations() Netscript Function
============================================
.. js:function:: checkFactionInvitations()
:RAM cost: 3 GB
If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.

View File

@@ -2,6 +2,7 @@ commitCrime() Netscript Function
================================
.. js:function:: commitCrime(crime)
:RAM cost: 5 GB
:param string crime:

View File

@@ -2,6 +2,7 @@ createProgram() Netscript Function
==================================
.. js:function:: createProgram(programName)
:RAM cost: 5 GB
:param string programName: Name of program to create. Not case-sensitive

View File

@@ -2,6 +2,7 @@ donateToFaction() Netscript Function
====================================
.. js:function:: donateToFaction(factionName, donateAmt)
:RAM cost: 5 GB
:param string factionName: Name of faction to donate to. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getAugmentationCost() Netscript Function
========================================
.. js:function:: getAugmentationCost(augName)
:RAM cost: 5 GB
:param string augName: Name of Augmentation. CASE-SENSITIVE

View File

@@ -3,6 +3,8 @@ getAugmentationPrereq() Netscript Function
.. js:function:: getAugmentationPrereq(augName)
:RAM cost: 5 GB
:param string augName: Name of Augmentation. CASE-SENSITIVE
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.

View File

@@ -0,0 +1,16 @@
getAugmentationStats() Netscript Function
=========================================
.. js:function:: getAugmentationStats(name)
:RAM cost: 5 GB
:param string name: Name of Augmentation. CASE-SENSITIVE
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
ns.getAugmentationStats("Synfibril Muscle")
{
strength_mult: 1.3,
defense_mult: 1.3,
}

View File

@@ -2,6 +2,7 @@ getAugmentationsFromFaction() Netscript Function
================================================
.. js:function:: getAugmentationsFromFaction(facName)
:RAM cost: 5 GB
:param string facName: Name of faction. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getCharacterInformation() Netscript Function
============================================
.. js:function:: getCharacterInformation()
: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.
@@ -48,4 +49,10 @@ getCharacterInformation() Netscript Function
workChaExpGain: Cha experience earned so far from work
workRepGain: Reputation earned so far from work, if applicable
workMoneyGain: Money earned so far from work, if applicable
hackingExp: Total hacking experience
strengthExp: Total strength experience
defenseExp: Total defense experience
dexterityExp: Total dexterity experience
agilityExp: Total agility experience
charismaExp: Total charisma experience
}

View File

@@ -2,6 +2,7 @@ getCompanyFavor() Netscript Function
====================================
.. js:function:: getCompanyFavor(companyName)
:RAM cost: 1 GB
:param string companyName: Name of the company. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getCompanyFavorGain() Netscript Function
========================================
.. js:function:: getCompanyFavorGain(companyName)
:RAM cost: 0.75 GB
:param string companyName: Name of the company. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getCompanyRep() Netscript Function
==================================
.. js:function:: getCompanyRep(companyName)
:RAM cost: 1 GB
:param string companyName: Name of the company. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getCrimeChance() Netscript Function
===================================
.. js:function:: getCrimeChance(crime)
:RAM cost: 5 GB
:param string crime:

View File

@@ -2,6 +2,7 @@ getFactionFavor() Netscript Function
====================================
.. js:function:: getFactionFavor(factionName)
:RAM cost: 1 GB
:param string factionName: Name of faction. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getFactionFavorGain() Netscript Function
========================================
.. js:function:: getFactionFavorGain(factionName)
:RAM cost: 0.75 GB
:param string factionName: Name of faction. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ getFactionRep() Netscript Function
==================================
.. js:function:: getFactionRep(factionName)
:RAM cost: 1 GB
:param string factionName: Name of faction. CASE-SENSITIVE

View File

@@ -3,6 +3,8 @@ getOwnedAugmentations() Netscript Function
.. js:function:: getOwnedAugmentations(purchased=false)
:RAM cost: 5 GB
:param boolean purchase:
Specifies whether the returned array should include Augmentations you have purchased but not yet installed.
By default, this argument is false which means that the return value will NOT have the purchased Augmentations.

View File

@@ -2,6 +2,7 @@ getOwnedSourceFiles() Netscript Function
========================================
.. js:function:: getOwnedSourceFiles()
:RAM cost: 5 GB
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.

View File

@@ -3,6 +3,8 @@ getStats() Netscript Function
.. js:function:: getStats()
: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.
Returns an object with the Player's stats. The object has the following properties::

View File

@@ -2,6 +2,7 @@ getUpgradeHomeRamCost() Netscript Function
==========================================
.. js:function:: getUpgradeHomeRamCost()
:RAM cost: 1.5 GB
If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.

View File

@@ -2,6 +2,7 @@ gymWorkout() Netscript Function
===============================
.. js:function:: gymWorkout(gymName, stat)
:RAM cost: 2 GB
:param string gymName:

View File

@@ -2,6 +2,7 @@ installAugmentations() Netscript Function
=========================================
.. js:function:: installAugmentations(cbScript)
:RAM cost: 5 GB
:param string cbScript:

View File

@@ -2,6 +2,7 @@ isBusy() Netscript Function
===========================
.. js:function:: isBusy()
: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.

View File

@@ -2,6 +2,7 @@ joinFaction() Netscript Function
================================
.. js:function:: joinFaction(name)
:RAM cost: 3 GB
:param string name: Name of faction to join. CASE-SENSITIVE

View File

@@ -2,6 +2,7 @@ purchaseAugmentation() Netscript Function
=========================================
.. js:function:: purchaseAugmentation(factionName, augName)
:RAM cost: 5 GB
:param string factionName: Name of faction to purchase Augmentation from. CASE-SENSITIVE

View File

@@ -3,6 +3,8 @@ purchaseProgram() Netscript Function
.. js:function:: purchaseProgram(programName)
:RAM cost: 2 GB
:param string programName: Name of program to purchase. Must include '.exe' extension. Not case-sensitive.
If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.

View File

@@ -3,6 +3,8 @@ purchaseTor() Netscript Function
.. js:function:: purchaseTor()
:RAM cost: 2 GB
If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to use this function.
This function allows you to automatically purchase a TOR router. The cost for purchasing a TOR router using this

View File

@@ -0,0 +1,8 @@
softReset() Netscript Function
===================================
.. js:function:: softReset()
If you are not in BitNode-4, then you must have Level 3 of Source-File 4 in order to use this function.
This function will perform a reset even if you don't have any augmentation installed.

View File

@@ -2,6 +2,7 @@ stopAction() Netscript Function
===============================
.. js:function:: stopAction()
:RAM cost: 1 GB
If you are not in BitNode-4, then you must have Level 1 of Source-File 4 in order to run this function.

View File

@@ -2,6 +2,7 @@ travelToCity() Netscript Function
=================================
.. js:function:: travelToCity(cityName)
:RAM cost: 2 GB
:param string cityName:

View File

@@ -2,6 +2,7 @@ universityCourse() Netscript Function
=====================================
.. js:function:: universityCourse(universityName, courseName)
:RAM cost: 2 GB
:param string universityName:

View File

@@ -2,6 +2,7 @@ upgradeHomeRam() Netscript Function
===================================
.. js:function:: upgradeHomeRam()
:RAM cost: 3 GB
If you are not in BitNode-4, then you must have Level 2 of Source-File 4 in order to use this function.

View File

@@ -2,6 +2,7 @@ workForCompany() Netscript Function
===================================
.. js:function:: workForCompany(companyName=lastCompany)
:RAM cost: 3 GB
:param string companyName: Name of company to work for. Must be an exact match.

View File

@@ -2,6 +2,7 @@ workForFaction() Netscript Function
===================================
.. js:function:: workForFaction(factionName, workType)
:RAM cost: 3 GB
:param string factionName: Name of faction to work for. CASE-SENSITIVE

View File

@@ -2,12 +2,12 @@ getInformation() Netscript Function
=======================================
.. js:function:: getInformation(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to retrieve information. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a struct containing tons of information about this sleeve
:RAM cost: 4 GB
.. code-block:: javascript

View File

@@ -3,6 +3,6 @@ getNumSleeves() Netscript Function
.. js:function:: getNumSleeves()
Return the number of duplicate sleeves the player has.
:RAM cost: 4 GB
Return the number of duplicate sleeves the player has.

View File

@@ -3,8 +3,8 @@ getSleeveAugmentations() Netscript Function
.. js:function:: getSleeveAugmentations(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to retrieve augmentations from. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a list of augmentation names that this sleeve has installed.
:RAM cost: 4 GB

View File

@@ -2,12 +2,12 @@ getSleevePurchasableAugs() Netscript Function
=============================================
.. js:function:: getSleevePurchasableAugs(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to retrieve purchasable augmentations from. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a list of augmentations that the player can buy for this sleeve.
:RAM cost: 4 GB
.. code-block:: javascript

View File

@@ -3,11 +3,11 @@ getSleeveStats() Netscript Function
.. js:function:: getSleeveStats(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to get stats of. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a structure containing the stats of the sleeve
:RAM cost: 4 GB
.. code-block:: javascript

View File

@@ -3,11 +3,11 @@ getTask() Netscript Function
.. js:function:: getTask(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to retrieve task from. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return the current task that the sleeve is performing. type is set to "Idle" if the sleeve isn't doing anything
:RAM cost: 4 GB
.. code-block:: javascript

View File

@@ -3,9 +3,9 @@ purchaseSleeveAug() Netscript Function
.. js:function:: purchaseSleeveAug(sleeveNumber, augName)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to buy an aug for. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string augName: Name of the aug to buy. Must be an exact match
Return true if the aug was purchased and installed on the sleeve.
:RAM cost: 4 GB

View File

@@ -3,11 +3,11 @@ setToCommitCrime() Netscript Function
.. js:function:: setToCommitCrime(sleeveNumber, name)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to start commiting crime. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string name: Name of the crime. Must be an exact match.
Return a boolean indicating whether or not this action was set successfully.
Returns false if an invalid action is specified.
:RAM cost: 4 GB

View File

@@ -3,9 +3,9 @@ setToCompanyWork() Netscript Function
.. js:function:: setToCompanyWork(sleeveNumber, companyName)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to work for the company. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string companyName: Name of the company to work for.
Return a boolean indicating whether or not the sleeve started working or this company.
:RAM cost: 4 GB

View File

@@ -3,10 +3,10 @@ setToFactionWork() Netscript Function
.. js:function:: setToFactionWork(sleeveNumber, factionName, factionWorkType)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to work for the faction. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string factionName: Name of the faction to work for.
:param string factionWorkType: Name of the action to perform for this faction.
Return a boolean indicating whether or not the sleeve started working or this faction.
:RAM cost: 4 GB

View File

@@ -3,10 +3,10 @@ setToGymWorkout() Netscript Function
.. js:function:: setToGymWorkout(sleeveNumber, gymName, stat)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to workout at the gym. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string gymName: Name of the gym.
:param string stat: Name of the stat to train.
Return a boolean indicating whether or not the sleeve started working out.
:RAM cost: 4 GB

View File

@@ -3,8 +3,8 @@ setToShockRecovery() Netscript Function
.. js:function:: setToShockRecovery(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to start recovery. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a boolean indicating whether or not this action was set successfully.
:RAM cost: 4 GB

View File

@@ -3,8 +3,8 @@ setToSynchronize() Netscript Function
.. js:function:: setToSynchronize(sleeveNumber)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to start synchronizing. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
Return a boolean indicating whether or not this action was set successfully.
:RAM cost: 4 GB

View File

@@ -3,10 +3,10 @@ setToUniversityCourse() Netscript Function
.. js:function:: setToUniversityCourse(sleeveNumber, university, className)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to start taking class. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string university: Name of the university to attend.
:param string className: Name of the class to follow.
Return a boolean indicating whether or not this action was set successfully.
:RAM cost: 4 GB

View File

@@ -3,9 +3,9 @@ travel() Netscript Function
.. js:function:: travel(sleeveNumber, cityName)
:RAM cost: 4 GB
:param int sleeveNumber: Index of the sleeve to travel. See :ref:`here <netscript_sleeveapi_referencingaduplicatesleeve>`
:param string cityName: Name of the destination city.
Return a boolean indicating whether or not the sleeve reached destination.
:RAM cost: 4 GB

View File

@@ -58,9 +58,11 @@
</li>
<li id="factions-tab" class="mainmenu-accordion-panel">
<button id="factions-menu-link"> Factions </button>
<span id="factions-notification" class="notification-off"> </span>
</li>
<li id="augmentations-tab" class="mainmenu-accordion-panel">
<button id="augmentations-menu-link" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> Augmentations </button>
<span id="augmentations-notification" class="notification-off"> </span>
</li>
<li id="hacknet-nodes-tab" class="mainmenu-accordion-panel">
<button id="hacknet-nodes-menu-link"> Hacknet Nodes </button>

View File

@@ -5,92 +5,104 @@ import * as React from "react";
import { Player } from "../../Player";
import { numeralWrapper } from "../../ui/numeralFormat";
import { Augmentations} from "../Augmentations";
function calculateAugmentedStats() {
const augP: any = {};
for(const aug of Player.queuedAugmentations) {
const augObj = Augmentations[aug.name];
for (const mult in augObj.mults) {
const v = augP[mult] ? augP[mult] : 1;
augP[mult] = v * augObj.mults[mult];
}
}
return augP;
}
export function PlayerMultipliers(): React.ReactElement {
const mults = calculateAugmentedStats();
function MultiplierTable(rows: any[]): React.ReactElement {
function improvements(r: number) {
let elems: any[] = [];
if(r) {
elems = [
<td key='2'>&nbsp;=>&nbsp;</td>,
<td key='3'>{numeralWrapper.formatPercentage(r)}</td>
];
}
return elems;
}
return <table>
<tbody>
{rows.map((r: any) => <tr key={r[0]}>
<td key='0'><span>{r[0]} multiplier:&nbsp;</span></td>
<td key='1' style={{textAlign: 'right'}}>{numeralWrapper.formatPercentage(r[1])}</td>
{improvements(r[2])}
</tr>)}
</tbody>
</table>
}
return (
<>
<p><strong><u>Total Multipliers:</u></strong></p>
<p><strong><u>Multipliers:</u></strong></p><br />
{MultiplierTable([
['Hacking Chance ', Player.hacking_chance_mult, Player.hacking_chance_mult*mults.hacking_chance_mult],
['Hacking Speed ', Player.hacking_speed_mult, Player.hacking_speed_mult*mults.hacking_speed_mult],
['Hacking Money ', Player.hacking_money_mult, Player.hacking_money_mult*mults.hacking_money_mult],
['Hacking Growth ', Player.hacking_grow_mult, Player.hacking_grow_mult*mults.hacking_grow_mult]
])}<br />
<pre>
{'Hacking Chance multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_chance_mult)}
</pre>
<pre>
{'Hacking Speed multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_speed_mult)}
</pre>
<pre>
{'Hacking Money multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_money_mult)}
</pre>
<pre>
{'Hacking Growth multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_grow_mult)}
</pre><br />
<pre>
{'Hacking Level multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_mult)}
</pre>
<pre>
{'Hacking Experience multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_exp_mult)}
</pre>
<br />
<pre>
{'Strength Level multiplier: ' + numeralWrapper.formatPercentage(Player.strength_mult)}
</pre>
<pre>
{'Strength Experience multiplier: ' + numeralWrapper.formatPercentage(Player.strength_exp_mult)}
</pre>
<br />
<pre>
{'Defense Level multiplier: ' + numeralWrapper.formatPercentage(Player.defense_mult)}
</pre>
<pre>
{'Defense Experience multiplier: ' + numeralWrapper.formatPercentage(Player.defense_exp_mult)}
</pre><br />
<pre>
{'Dexterity Level multiplier: ' + numeralWrapper.formatPercentage(Player.dexterity_mult)}
</pre>
<pre>
{'Dexterity Experience multiplier: ' + numeralWrapper.formatPercentage(Player.dexterity_exp_mult)}
</pre><br />
<pre>
{'Agility Level multiplier: ' + numeralWrapper.formatPercentage(Player.agility_mult)}
</pre>
<pre>
{'Agility Experience multiplier: ' + numeralWrapper.formatPercentage(Player.agility_exp_mult)}
</pre><br />
<pre>
{'Charisma Level multiplier: ' + numeralWrapper.formatPercentage(Player.charisma_mult)}
</pre>
<pre>
{'Charisma Experience multiplier: ' + numeralWrapper.formatPercentage(Player.charisma_exp_mult)}
</pre><br />
<pre>
{'Hacknet Node production multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_money_mult)}
</pre>
<pre>
{'Hacknet Node purchase cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_purchase_cost_mult)}
</pre>
<pre>
{'Hacknet Node RAM upgrade cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_ram_cost_mult)}
</pre>
<pre>
{'Hacknet Node Core purchase cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_core_cost_mult)}
</pre>
<pre>
{'Hacknet Node level upgrade cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_level_cost_mult)}
</pre><br />
<pre>
{'Company reputation gain multiplier: ' + numeralWrapper.formatPercentage(Player.company_rep_mult)}
</pre>
<pre>
{'Faction reputation gain multiplier: ' + numeralWrapper.formatPercentage(Player.faction_rep_mult)}
</pre>
<pre>
{'Salary multiplier: ' + numeralWrapper.formatPercentage(Player.work_money_mult)}
</pre><br />
<pre>
{'Crime success multiplier: ' + numeralWrapper.formatPercentage(Player.crime_success_mult)}
</pre>
<pre>
{'Crime money multiplier: ' + numeralWrapper.formatPercentage(Player.crime_money_mult)}
</pre>
{MultiplierTable([
['Hacking Level ', Player.hacking_mult, Player.hacking_mult*mults.hacking_mult],
['Hacking Experience ', Player.hacking_exp_mult, Player.hacking_exp_mult*mults.hacking_exp_mult]
])}<br />
{MultiplierTable([
['Strength Level ', Player.strength_mult, Player.strength_mult*mults.strength_mult],
['Strength Experience ', Player.strength_exp_mult, Player.strength_exp_mult*mults.strength_exp_mult]
])}<br />
{MultiplierTable([
['Defense Level ', Player.defense_mult, Player.defense_mult*mults.defense_mult],
['Defense Experience ', Player.defense_exp_mult, Player.defense_exp_mult*mults.defense_exp_mult]
])}<br />
{MultiplierTable([
['Dexterity Level ', Player.dexterity_mult, Player.dexterity_mult*mults.dexterity_mult],
['Dexterity Experience ', Player.dexterity_exp_mult, Player.dexterity_exp_mult*mults.dexterity_exp_mult]
])}<br />
{MultiplierTable([
['Agility Level ', Player.agility_mult, Player.agility_mult*mults.agility_mult],
['Agility Experience ', Player.agility_exp_mult, Player.agility_exp_mult*mults.agility_exp_mult]
])}<br />
{MultiplierTable([
['Charisma Level ', Player.charisma_mult, Player.charisma_mult*mults.charisma_mult],
['Charisma Experience ', Player.charisma_exp_mult, Player.charisma_exp_mult*mults.charisma_exp_mult]
])}<br />
{MultiplierTable([
['Hacknet Node production ', Player.hacknet_node_money_mult, Player.hacknet_node_money_mult*mults.hacknet_node_money_mult],
['Hacknet Node purchase cost ', Player.hacknet_node_purchase_cost_mult, Player.hacknet_node_purchase_cost_mult*mults.hacknet_node_purchase_cost_mult],
['Hacknet Node RAM upgrade cost ', Player.hacknet_node_ram_cost_mult, Player.hacknet_node_ram_cost_mult*mults.hacknet_node_ram_cost_mult],
['Hacknet Node Core purchase cost ', Player.hacknet_node_core_cost_mult, Player.hacknet_node_core_cost_mult*mults.hacknet_node_core_cost_mult],
['Hacknet Node level upgrade cost ', Player.hacknet_node_level_cost_mult, Player.hacknet_node_level_cost_mult*mults.hacknet_node_level_cost_mult]
])}<br />
{MultiplierTable([
['Company reputation gain ', Player.company_rep_mult, Player.company_rep_mult*mults.company_rep_mult],
['Faction reputation gain ', Player.faction_rep_mult, Player.faction_rep_mult*mults.faction_rep_mult],
['Salary ', Player.work_money_mult, Player.work_money_mult*mults.work_money_mult]
])}<br />
{MultiplierTable([
['Crime success ', Player.crime_success_mult, Player.crime_success_mult*mults.crime_success_mult],
['Crime money ', Player.crime_money_mult, Player.crime_money_mult*mults.crime_money_mult],
])}<br />
</>
)
}

View File

@@ -234,7 +234,7 @@ BitNodes["BitNode11"] = new BitNode(11, "The Big Crash", "Okay. Sell it all.",
"Level 3: 56%");
BitNodes["BitNode12"] = new BitNode(12, "The Recursion", "Repeat.",
"To iterate is human, to recurse divine.<br><br>" +
"Every time this BitNode is destroyed, it becomes slightly harder. Destroying this BitNode will give your Souce-File 12, or " +
"Every time this BitNode is destroyed, it becomes slightly harder. Destroying this BitNode will give you Souce-File 12, or " +
"if you already have this Source-File it will upgrade its level. There is no maximum level for Source-File 12. Each level " +
"of Source-File 12 will increase all of your multipliers by 1%. This effect is multiplicative with itself. " +
"In other words, level N of this Source-File will result in a multiplier of 1.01^N (or 0.99^N for multipliers that decrease)");
@@ -460,11 +460,12 @@ export function initBitNodeMultipliers(p: IPlayer) {
BitNodeMultipliers.PurchasedServerLimit = dec;
BitNodeMultipliers.PurchasedServerMaxRam = dec;
BitNodeMultipliers.ManualHackMoney = dec;
BitNodeMultipliers.ScriptHackMoney = dec;
BitNodeMultipliers.CompanyWorkMoney = dec;
BitNodeMultipliers.CrimeMoney = dec;
BitNodeMultipliers.HacknetNodeMoney = dec;
BitNodeMultipliers.ManualHackMoney = dec;
BitNodeMultipliers.ScriptHackMoney = dec;
BitNodeMultipliers.CompanyWorkMoney = dec;
BitNodeMultipliers.CrimeMoney = dec;
BitNodeMultipliers.HacknetNodeMoney = dec;
BitNodeMultipliers.CodingContractMoney = dec;
BitNodeMultipliers.CompanyWorkExpGain = dec;
BitNodeMultipliers.ClassGymExpGain = dec;

View File

@@ -31,6 +31,7 @@ import { KEY } from "../utils/helpers/keyCodes";
import { removeChildrenFromElement } from "../utils/uiHelpers/removeChildrenFromElement";
import { appendLineBreaks } from "../utils/uiHelpers/appendLineBreaks";
import { convertTimeMsToTimeElapsedString } from "../utils/StringHelperFunctions";
import { createElement } from "../utils/uiHelpers/createElement";
import { createPopup } from "../utils/uiHelpers/createPopup";
import { removeElement } from "../utils/uiHelpers/removeElement";
@@ -991,12 +992,16 @@ Bladeburner.prototype.process = function() {
}
Bladeburner.prototype.calculateMaxStamina = function() {
var effAgility = Player.agility * this.skillMultipliers.effAgi;
var maxStamina = (Math.pow(effAgility, 0.8) + this.staminaBonus);
maxStamina *= this.skillMultipliers.stamina;
maxStamina *= Player.bladeburner_max_stamina_mult;
const effAgility = Player.agility * this.skillMultipliers.effAgi;
let maxStamina = (Math.pow(effAgility, 0.8) + this.staminaBonus) *
this.skillMultipliers.stamina *
Player.bladeburner_max_stamina_mult;
if (this.maxStamina !== maxStamina) {
const oldMax = this.maxStamina;
this.maxStamina = maxStamina;
this.stamina = this.maxStamina * this.stamina / oldMax;
}
if (isNaN(maxStamina)) {throw new Error("Max Stamina calculated to be NaN in Bladeburner.calculateMaxStamina()");}
this.maxStamina = maxStamina;
}
Bladeburner.prototype.calculateStaminaGainPerSecond = function() {
@@ -2349,7 +2354,7 @@ Bladeburner.prototype.updateOverviewContent = function() {
DomElems.overviewEstComms.childNodes[0].nodeValue = "Est. Synthoid Communities: " + formatNumber(this.getCurrentCity().comms, 0);
DomElems.overviewChaos.childNodes[0].nodeValue = "City Chaos: " + formatNumber(this.getCurrentCity().chaos);
DomElems.overviewSkillPoints.innerText = "Skill Points: " + formatNumber(this.skillPoints, 0);
DomElems.overviewBonusTime.childNodes[0].nodeValue = "Bonus time: " + this.storedCycles/CyclesPerSecond;
DomElems.overviewBonusTime.childNodes[0].nodeValue = "Bonus time: " + convertTimeMsToTimeElapsedString(this.storedCycles/CyclesPerSecond*1000);
DomElems.overviewAugSuccessMult.innerText = "Aug. Success Chance Mult: " + formatNumber(Player.bladeburner_success_chance_mult*100, 1) + "%";
DomElems.overviewAugMaxStaminaMult.innerText = "Aug. Max Stamina Mult: " + formatNumber(Player.bladeburner_max_stamina_mult*100, 1) + "%";
DomElems.overviewAugStaminaGainMult.innerText = "Aug. Stamina Gain Mult: " + formatNumber(Player.bladeburner_stamina_gain_mult*100, 1) + "%";

View File

@@ -74,7 +74,6 @@ for (const md of codingContractTypesMetadata) {
// tslint:disable-next-line
CodingContractTypes[md.name] = new CodingContractType(md.name, md.desc, md.gen, md.solver, md.difficulty, md.numTries);
}
console.info(`${Object.keys(CodingContractTypes).length} Coding Contract Types loaded`);
/**
* Enum representing the different types of rewards a Coding Contract can give

View File

@@ -6,7 +6,7 @@
import { IMap } from "./types";
export let CONSTANTS: IMap<any> = {
Version: "0.47.2",
Version: "0.48.0",
/** Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
* and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
@@ -228,11 +228,46 @@ export let CONSTANTS: IMap<any> = {
LatestUpdate:
`
v0.47.3
v0.48.0 - ASCII
-------
ASCII
* Travel Agency now displays a world map
* Cities are now top view of metro station maps
Netscript
* 'softReset' is a new netscript function that performs a soft reset
regardless of if the player has bought augmentations or not.
* 'getAugmentationStats' is a new netscript function that returns the stats of
an augmentation.
* getCharacterInformation now additionally returns exp
* pid resets back to 1 when installing or destroying a BitNode.
* New '.ns' scripts start with a main function.
* 'hacknet.maxNumNodes' returns the maximum number of hacknet nodes.
Bladeburner
* Current stamina will scale as max stamina increases, this prevents players
from having very high penalty when they gain huge amount of exp at the
start of a reset.
Misc.
* missing ram cost in many function now added to documentation
* typos
* Fixed an issue where SF3 was listed as infinitly repeatable and SF12 as
having a limit of 3.
* Fixed an issue where the gang equipment screen would freeze the game if a
script installed augmentations while it is open.
* All BonusTime now displays in the 'H M S' format.
* Donation textbox style updated to match the rest of the game.
* Corporation name style updated to match the rest of the game.
* minor formatting under Hacking>Active Scripts
* typo in BN12 description
* BN12 now reduces contract money
* Character>Stats percentages are aligned, server and hacknet limit are
displayed, if the player has SF5 the reduces stats are shown.
* Character>Augmentations now displays by how much the player stats will
increase.
* Character>Augmentations has a badge indicating how many augs the player
has bought but not installed
* Character>Factions has a badge indicating how many factions have pending
invites.
`
}

View File

@@ -10,6 +10,7 @@ import { CorporationUpgrades } from "../data/CorporationUpgrades";
import { CONSTANTS } from "../../Constants";
import { numeralWrapper } from "../../ui/numeralFormat";
import { convertTimeMsToTimeElapsedString } from "../../../utils/StringHelperFunctions";
export class Overview extends BaseReactComponent {
// Generic Function for Creating a button
@@ -71,9 +72,9 @@ export class Overview extends BaseReactComponent {
`Private Shares: ${numeralWrapper.format(this.corp().totalShares - this.corp().issuedShares - this.corp().numShares, "0.000a")}` +
"</span></p><br><br>";
const storedTime = this.corp().storedCycles * CONSTANTS.MilliPerCycle / 1000;
if (storedTime > 15) {
txt += `Bonus Time: ${storedTime} seconds<br><br>`;
const storedTime = this.corp().storedCycles * CONSTANTS.MilliPerCycle;
if (storedTime > 15000) {
txt += `Bonus time: ${convertTimeMsToTimeElapsedString(storedTime)}<br><br>`;
}
let prodMult = this.corp().getProductionMultiplier(),

View File

@@ -88,7 +88,7 @@ export class DonateOption extends React.Component<IProps, IState> {
return (
<div className={"faction-work-div"}>
<div className={"faction-work-div-wrapper"}>
<input onChange={this.handleChange} placeholder={"Donation amount"} style={inputStyleMarkup} />
<input className='text-input' onChange={this.handleChange} placeholder={"Donation amount"} style={inputStyleMarkup} />
<StdButton
onClick={this.donate}
text={"Donate Money"}

View File

@@ -33,6 +33,7 @@ import { createPopup } from "../utils/uiHelpers/createPopup";
import { removeChildrenFromElement } from "../utils/uiHelpers/removeChildrenFromElement";
import { removeElement } from "../utils/uiHelpers/removeElement";
import { removeElementById } from "../utils/uiHelpers/removeElementById";
import { convertTimeMsToTimeElapsedString } from "../utils/StringHelperFunctions";
// Constants
@@ -1570,7 +1571,9 @@ Gang.prototype.updateGangContent = function() {
// Update territory information
UIElems.gangTerritoryInfoText.innerHTML = "";
const playerPower = AllGangs[this.facName].power;
for (const gangname in AllGangs) {
let gangNames = Object.keys(AllGangs).filter(g => g != this.facName);
gangNames.unshift(this.facName);
for (const gangname of gangNames) {
if (AllGangs.hasOwnProperty(gangname)) {
const gangTerritoryInfo = AllGangs[gangname];
let territory = gangTerritoryInfo.territory * 100;
@@ -1670,7 +1673,7 @@ Gang.prototype.updateGangContent = function() {
const CyclesPerSecond = 1000 / Engine._idleSpeed;
UIElems.gangInfo.appendChild(createElement("p", { // Stored Cycles
innerText: `Bonus time(s): ${this.storedCycles / CyclesPerSecond}`,
innerText: `Bonus time: ${convertTimeMsToTimeElapsedString(this.storedCycles / CyclesPerSecond*1000)}`,
display: "inline-block",
tooltip: "You gain bonus time while offline or when the game is inactive (e.g. when the tab is throttled by the browser). " +
"Bonus time makes the Gang mechanic progress faster, up to 5x the normal speed",
@@ -1942,6 +1945,8 @@ Gang.prototype.setGangMemberTaskDescription = function(memberObj, taskName) {
Gang.prototype.clearUI = function() {
if (UIElems.gangContainer instanceof Element) { removeElement(UIElems.gangContainer); }
if (UIElems.gangMemberUpgradeBox instanceof Element) { removeElement(UIElems.gangMemberUpgradeBox); }
for (const prop in UIElems) {
UIElems[prop] = null;
}

View File

@@ -15,9 +15,15 @@ export class City {
*/
name: CityName;
constructor(name: CityName, locations: LocationName[]=[]) {
/**
* Metro map ascii art
*/
asciiArt: string;
constructor(name: CityName, locations: LocationName[]=[], asciiArt: string='') {
this.name = name;
this.locations = locations;
this.asciiArt = asciiArt;
}
addLocation(loc: LocationName): void {

View File

@@ -40,6 +40,181 @@ Cities[CityName.NewTokyo] = new City(CityName.NewTokyo);
Cities[CityName.Sector12] = new City(CityName.Sector12);
Cities[CityName.Volhaven] = new City(CityName.Volhaven);
Cities[CityName.Aevum].asciiArt = `
[aevum police headquarters] 26
o
I \\ [bachman & associates]
\\ 56 B
x \\ [summit university]
\\ \\ 28
\\ [snap fitness gym] x o--L------------
K \\ /
\\ \\ P
x 58 \\ / [travel agency]
\\ 94 95 o
90 x 59 o------o |
\\ / \\ | 98 102 103
o--------N------x----o 93 96 o-----+------------o o----o
\\ | \\ /
[hospital] \\ 61 [ecorp] x 31 99 o-F-o 101
o |
| o---E-- | [fulcrum tech.]
x 62 / A [aerocorp]
[crush fitness gym] | / |
| / |
o--------D------+--o o
| |\\ [rho construction]
H [netlink tech.] | J
| | \\
| 34 x \\
[clarke inc.] C | \\ [world stock exchange]
| | \\
| | o-M-------Q--------o
[galactic cybersystems] G 35 x
| [watchdog security]
|
67 o
[the slums] O `
Cities[CityName.Chongqing].asciiArt = `
|
75 o
\\
o 76
7 | |
| + 77
[world stock exchange] F |
\\ o 78 [kuaigong international]
\\ /
38 o----x--x------x------A---------
/ 39 | 41
37 o + 79 o--x--x-C-0
/ | /
/ x-----+-----x-----0 [hospital]
[solaris space system] B |
| + 80
| |
34 o E [travel agency]
|
|
x 82
[the slums] D `
Cities[CityName.Ishima].asciiArt = `
o 59
o o |
[storm tech.] | | G [world stock exchange]
| | 28 |
23 o--C------o--------+----x----o |
/ / 25 | 27 \\ x 57
/ / | \\ |
/ / | \\ |
o 22 o | \\| 29/56
| | o
| [hospital] D / \\ 3 2 1
o | / \\ o-------x------o
/ o / \\ /
48 o / 55 x \\ /
\\ / / x
\\ / [nova medical] / 4/30 \\
49 x A \\
/ \\ / \\
/ \\ [travel agency] F o 31
/ \\ 51 /
/ o----B------x-----o
o 50 52
[omega soft.]
[the slums] E `
Cities[CityName.NewTokyo].asciiArt = `
o
\\
\\ [defcomm]
\\
o--x---A--x--o [travel agency]
7 8 10 G
[vitalife] o 12 [global pharmaceuticals]
|
o--D-x----x-------x-C-+--------x--x-B-x---x-o
21 22 23 \\ 24 25 26 27
\\
[noodle bar] x 14
\\
\\
[hospital] o 15 [world stock exchange]
|
o--x--E--x-----x-----x---+---x----x--H--x-o
|
|
o 17
F [the slums]
`
Cities[CityName.Sector12].asciiArt = `
78 o 97
o [icarus microsystems] /
N [powerhouse gym] o I
1 | | /
o-----+---x----o 4 A [alpha ent.] o-------o /
| 3 \\ | \\ /
| \\ | [iron gym] x 95
(79) x \\ | / \\
| o-E----+----x----J--o 10 / o----T--o
| | 8 \\ 94 x
80 x [city hall] | x 11 / [world stock exchange]
| | \\ /
| C [cia] \\ /
Q [hospital] | F P [universal energy]
| o [deltaone] \\ /
| 35 o---------x 13/92/36
L [megacorp] 33 / / \\
| o------------o 34 / \\
(29) | / [carmichael sec.] D \\
o-----+-----x------o / O [rothman university]
| 31 32 [nsa] M
| /
B [blade industries] H
| / [four sigma]
| [joe's guns] /
| /
85 o--G--------K--------S-------o 88 [the slums] R
[foodnstuff] [travel agency] `
Cities[CityName.Volhaven].asciiArt = `
[omnia cybersystems]
17 66 68
o o------G-------o
\\ / \\
\\ o 65 o 69
[syscore sec.] H | |
\\ | | [millenium fitness gym]
\\ | 21 22 23 24 | 26
o----+--x--x----x---x---+-----x-------D-----o
19 | | 28
| F [omnitek inc.]
[hospital] J 63 o
| / 72
3 | 5 6 / 9
o--------+----x-----x----+----------M-------o
/ | |
/ 61 x [helios labs] B [world stock exchange]
[travel agency] L | |
/ | o
/ E [nwo] / 75
/ [computek] | /
/ A-------o------I-----o
1 o | |
| [zb] o 77
[lexocorp] C
|
o
57
[the slums] K `
// Then construct all locations, and add them to the cities as we go.
for (const metadata of LocationsMetadata) {
const loc = constructLocation(metadata);

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