mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-22 06:02:26 +01:00
Merge branch 'netscript-refactor' into dev
This commit is contained in:
commit
7786a0aff8
@ -75,7 +75,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#script-editor-filename {
|
#script-editor-filename {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
float: center;
|
float: center;
|
||||||
resize: none;
|
resize: none;
|
||||||
@ -274,15 +274,9 @@ background-color: #555;
|
|||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#hacknet-nodes-container li{
|
|
||||||
padding: 6px;
|
|
||||||
margin: 6px;
|
|
||||||
width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hacknet-nodes-text,
|
#hacknet-nodes-text,
|
||||||
#hacknet-nodes-money {
|
#hacknet-nodes-money,
|
||||||
|
#hacknet-nodes-container li {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@ -344,10 +338,7 @@ background-color: #555;
|
|||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#create-program-page-text {
|
#create-program-page-text,
|
||||||
width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#create-program-list {
|
#create-program-list {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
@ -508,12 +499,14 @@ div.faction-clear {
|
|||||||
|
|
||||||
/* Location */
|
/* Location */
|
||||||
#location-container {
|
#location-container {
|
||||||
color: var(--my-font-color);
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
height: 100%;
|
overflow-x: hidden;
|
||||||
margin-left: 10%;
|
}
|
||||||
width: 99%;
|
|
||||||
|
#location-container a {
|
||||||
|
display:inline-block;
|
||||||
|
width: 30%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#location-slums-description {
|
#location-slums-description {
|
||||||
@ -533,3 +526,72 @@ div.faction-clear {
|
|||||||
#location-job-reputation, #location-company-favor {
|
#location-job-reputation, #location-company-favor {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Infiltration */
|
||||||
|
#infiltration-container {
|
||||||
|
position: fixed;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
#infiltration-left-panel,
|
||||||
|
#infiltration-right-panel {
|
||||||
|
display:inline-block;
|
||||||
|
border: 1px solid white;
|
||||||
|
width: 35%;
|
||||||
|
height: 75%;
|
||||||
|
top: 10px;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#infiltration-faction-select {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#infiltration-left-panel p,
|
||||||
|
#infiltration-right-panel p {
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#infiltration-buttons .a-link-button {
|
||||||
|
display:inline;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stock market */
|
||||||
|
#stock-market-container {
|
||||||
|
position: fixed;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stock-market-container p {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stock-market-container a {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stock-market-qty-input {
|
||||||
|
border: 1px solid white;
|
||||||
|
color: var(--my-font-color);
|
||||||
|
padding: 4px;
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stock-market-buy-sell-button {
|
||||||
|
color: #aaa;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 2px;
|
||||||
|
margin: 6px;
|
||||||
|
border: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stock-market-buy-sell-button:hover,
|
||||||
|
.stock-market-buy-sell-button:focus {
|
||||||
|
color: var(--my-font-color);
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
@ -5,14 +5,38 @@
|
|||||||
z-index: 1; /* Sit on top */
|
z-index: 1; /* Sit on top */
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: 100%; /* Full width */
|
width: 100%;
|
||||||
height: 100%; /* Full height */
|
height: 100%;
|
||||||
overflow: auto; /* Enable scroll if needed */
|
overflow: auto; /* Enable scroll if needed */
|
||||||
/*background-color: black; /* Fallback color */
|
|
||||||
/*background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
|
|
||||||
background-color: rbga(var(--my-background-color), 0.4);
|
background-color: rbga(var(--my-background-color), 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popup-box-content {
|
||||||
|
background-color: var(--my-background-color);
|
||||||
|
margin: 15% auto;
|
||||||
|
padding: 12px;
|
||||||
|
border: 5px solid var(--my-highlight-color);
|
||||||
|
width: 70%;
|
||||||
|
color: var(--my-font-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-box-button {
|
||||||
|
color: #aaa;
|
||||||
|
float: right;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 2px;
|
||||||
|
margin: 6px;
|
||||||
|
border: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-box-button:hover,
|
||||||
|
.popup-box-button:focus {
|
||||||
|
color: var(--my-font-color);
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.dialog-box-container,
|
.dialog-box-container,
|
||||||
#log-box-container {
|
#log-box-container {
|
||||||
display: block;
|
display: block;
|
||||||
@ -69,207 +93,45 @@
|
|||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#purchase-server-box-content {
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
margin: 15% auto; /* 15% from the top and centered */
|
|
||||||
padding: 12px;
|
|
||||||
border: 5px solid var(--my-highlight-color);;
|
|
||||||
width: 80%; /* Could be more or less, depending on screen size */
|
|
||||||
color: var(--my-font-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-server-box-input {
|
#purchase-server-box-input {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#purchase-server-box-confirm,
|
|
||||||
#purchase-server-box-cancel {
|
|
||||||
color: #aaa;
|
|
||||||
float: right;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 2px;
|
|
||||||
margin: 6px;
|
|
||||||
border: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-server-box-confirm:hover,
|
|
||||||
#purchase-server-box-confirm:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-server-box-cancel:hover,
|
|
||||||
#purchase-server-box-cancel:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Purchase RAM for Home computer pop-up box */
|
/* Purchase RAM for Home computer pop-up box */
|
||||||
#purchase-ram-for-home-box-container {
|
#purchase-ram-for-home-box-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#purchase-ram-for-home-box-content {
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
margin: 15% auto; /* 15% from the top and centered */
|
|
||||||
padding: 12px;
|
|
||||||
border: 5px solid var(--my-highlight-color);
|
|
||||||
width: 50%; /* Could be more or less, depending on screen size */
|
|
||||||
color: var(--my-font-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-ram-for-home-box-confirm,
|
|
||||||
#purchase-ram-for-home-box-cancel {
|
|
||||||
color: #aaa;
|
|
||||||
float: right;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 2px;
|
|
||||||
margin: 6px;
|
|
||||||
border: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-ram-for-home-box-confirm:hover,
|
|
||||||
#purchase-ram-for-home-box-confirm:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-ram-for-home-box-cancel:hover,
|
|
||||||
#purchase-ram-for-home-box-cancel:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Purchase Invitation Box */
|
/* Purchase Invitation Box */
|
||||||
#purchase-augmentation-box-container {
|
#purchase-augmentation-box-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#purchase-augmentation-box-content {
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
margin: 15% auto; /* 15% from the top and centered */
|
|
||||||
padding: 8px;
|
|
||||||
border: 5px solid var(--my-highlight-color);;
|
|
||||||
width: 80%; /* Could be more or less, depending on screen size */
|
|
||||||
color: var(--my-font-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-augmentation-box-confirm,
|
|
||||||
#purchase-augmentation-box-cancel {
|
|
||||||
color: #aaa;
|
|
||||||
float: right;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 4px;
|
|
||||||
margin: 6px;
|
|
||||||
border: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-augmentation-box-confirm:hover,
|
|
||||||
#purchase-augmentation-box-confirm:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#purchase-augmentation-box-cancel:hover,
|
|
||||||
#purchase-augmentation-box-cancel:focus {
|
|
||||||
color: var(--my-font-color);
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Faction invitation box */
|
/* Faction invitation box */
|
||||||
#faction-invitation-box-container {
|
#faction-invitation-box-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#faction-invitation-box-content {
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
margin: 15% auto; /* 15% from the top and centered */
|
|
||||||
padding: 10px;
|
|
||||||
border: 5px solid var(--my-highlight-color);;
|
|
||||||
width: 80%; /* Could be more or less, depending on screen size */
|
|
||||||
color: var(--my-font-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#faction-invitation-box-warning {
|
#faction-invitation-box-warning {
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#faction-invitation-box-yes,
|
|
||||||
#faction-invitation-box-no {
|
|
||||||
color: #aaa;
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 2px;
|
|
||||||
margin: 6px;
|
|
||||||
border: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#faction-invitation-box-yes:hover,
|
|
||||||
#faction-invitation-box-yes:focus {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#faction-invitation-box-no:hover,
|
|
||||||
#faction-invitation-box-no:focus {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Travel Pop-up Box */
|
/* Travel Pop-up Box */
|
||||||
#travel-box-container {
|
#travel-box-container {
|
||||||
transition: opacity 400ms ease-in;
|
transition: opacity 400ms ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
#travel-box-content {
|
|
||||||
background-color: var(--my-background-color);
|
|
||||||
margin: 15% auto; /* 15% from the top and centered */
|
|
||||||
padding: 10px;
|
|
||||||
border: 5px solid var(--my-highlight-color);;
|
|
||||||
width: 50%; /* Could be more or less, depending on screen size */
|
|
||||||
color: var(--my-font-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#travel-box-text {
|
#travel-box-text {
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#travel-box-confirm,
|
/* Infiltration-box */
|
||||||
#travel-box-cancel {
|
#infiltration-box-sell,
|
||||||
color: #aaa;
|
#infiltration-box-faction {
|
||||||
float: right;
|
display: block;
|
||||||
font-size: 16px;
|
padding: 8px;
|
||||||
font-weight: bold;
|
margin: 8px;
|
||||||
padding: 2px;
|
|
||||||
margin: 6px;
|
|
||||||
border: 1px solid white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#travel-box-confirm:hover,
|
|
||||||
#travel-box-confirm:focus {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#travel-box-cancel:hover,
|
|
||||||
#travel-box-cancel:focus {
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Game Options */
|
/* Game Options */
|
||||||
|
@ -32,7 +32,7 @@ h2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
padding: 6px;
|
padding: 2px;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,6 +207,43 @@ tr:focus {
|
|||||||
animation: glowing 1500ms infinite;
|
animation: glowing 1500ms infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Blinking Cursor */
|
||||||
|
/* ----- blinking cursor animation ----- */
|
||||||
|
.typed-cursor{
|
||||||
|
opacity: 1;
|
||||||
|
-webkit-animation: blink 0.95s infinite;
|
||||||
|
-moz-animation: blink 0.95s infinite;
|
||||||
|
-ms-animation: blink 0.95s infinite;
|
||||||
|
-o-animation: blink 0.95s infinite;
|
||||||
|
animation: blink 0.95s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-keyframes blink{
|
||||||
|
0% { opacity:1; }
|
||||||
|
50% { opacity:0; }
|
||||||
|
100% { opacity:1; }
|
||||||
|
}
|
||||||
|
@-webkit-keyframes blink{
|
||||||
|
0% { opacity:1; }
|
||||||
|
50% { opacity:0; }
|
||||||
|
100% { opacity:1; }
|
||||||
|
}
|
||||||
|
@-moz-keyframes blink{
|
||||||
|
0% { opacity:1; }
|
||||||
|
50% { opacity:0; }
|
||||||
|
100% { opacity:1; }
|
||||||
|
}
|
||||||
|
@-ms-keyframes blink{
|
||||||
|
0% { opacity:1; }
|
||||||
|
50% { opacity:0; }
|
||||||
|
100% { opacity:1; }
|
||||||
|
}
|
||||||
|
@-o-keyframes blink{
|
||||||
|
0% { opacity:1; }
|
||||||
|
50% { opacity:0; }
|
||||||
|
100% { opacity:1; }
|
||||||
|
}
|
||||||
|
|
||||||
/* Status text */
|
/* Status text */
|
||||||
@-webkit-keyframes status-text{
|
@-webkit-keyframes status-text{
|
||||||
from{
|
from{
|
||||||
@ -252,7 +289,7 @@ tr:focus {
|
|||||||
position: absolute; /* Stay in place */
|
position: absolute; /* Stay in place */
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
height: 185px; /* Full height */
|
height: 195px; /* Full height */
|
||||||
/*margin: 50% auto;*/
|
/*margin: 50% auto;*/
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
border: 2px solid var(--my-highlight-color);
|
border: 2px solid var(--my-highlight-color);
|
||||||
@ -264,7 +301,7 @@ tr:focus {
|
|||||||
|
|
||||||
#character-overview-text {
|
#character-overview-text {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 10px;
|
margin: 8px;
|
||||||
color: white;
|
color: white;
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
}
|
}
|
||||||
@ -272,7 +309,7 @@ tr:focus {
|
|||||||
#character-overview-save-button,
|
#character-overview-save-button,
|
||||||
#character-overview-options-button {
|
#character-overview-options-button {
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: 16px;
|
font-size: 14px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
-webkit-border-radius: 12px;
|
-webkit-border-radius: 12px;
|
||||||
-moz-border-radius: 12px;
|
-moz-border-radius: 12px;
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
#generic-fullscreen-container {
|
||||||
|
color: var(--my-font-color);
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
height: 100%;
|
||||||
|
width: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
#work-in-progress-container {
|
#work-in-progress-container {
|
||||||
color: var(--my-font-color);
|
color: var(--my-font-color);
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
149
index.html
149
index.html
@ -26,6 +26,7 @@
|
|||||||
<script src="utils/PurchaseRamForHomeBox.js"></script>
|
<script src="utils/PurchaseRamForHomeBox.js"></script>
|
||||||
<script src="utils/GameOptions.js"></script>
|
<script src="utils/GameOptions.js"></script>
|
||||||
<script src="utils/LogBox.js"></script>
|
<script src="utils/LogBox.js"></script>
|
||||||
|
<script src="utils/InfiltrationBox.js"></script>
|
||||||
|
|
||||||
<!-- Netscript -->
|
<!-- Netscript -->
|
||||||
<script src="src/NetscriptWorker.js"></script>
|
<script src="src/NetscriptWorker.js"></script>
|
||||||
@ -62,6 +63,8 @@
|
|||||||
<script src="src/Alias.js"></script>
|
<script src="src/Alias.js"></script>
|
||||||
<script src="src/Message.js"></script>
|
<script src="src/Message.js"></script>
|
||||||
<script src="src/ActiveScriptsUI.js"></script>
|
<script src="src/ActiveScriptsUI.js"></script>
|
||||||
|
<script src="src/Infiltration.js"></script>
|
||||||
|
<script src="src/StockMarket.js"></script>
|
||||||
|
|
||||||
<script src="src/engine.js"></script>
|
<script src="src/engine.js"></script>
|
||||||
|
|
||||||
@ -84,45 +87,35 @@
|
|||||||
<li class="terminal-tab">
|
<li class="terminal-tab">
|
||||||
<a id="terminal-menu-link"> Terminal </a>
|
<a id="terminal-menu-link"> Terminal </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="character-tab">
|
<li class="character-tab">
|
||||||
<a id="character-menu-link"> Character </a>
|
<a id="character-menu-link"> Character </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- These scripts stuff should be hidden until level 2, but leave them visible for now to test -->
|
<!-- These scripts stuff should be hidden until level 2, but leave them visible for now to test -->
|
||||||
<li class="create-script-tab">
|
<li class="create-script-tab">
|
||||||
<a id="create-script-menu-link"> Create Script </a>
|
<a id="create-script-menu-link"> Create Script </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="active-scripts-tab">
|
<li class="active-scripts-tab">
|
||||||
<a id="active-scripts-menu-link"> Active Scripts </a>
|
<a id="active-scripts-menu-link"> Active Scripts </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="hacknet-nodes-tab">
|
<li class="hacknet-nodes-tab">
|
||||||
<a id="hacknet-nodes-menu-link"> Hacknet Nodes </a>
|
<a id="hacknet-nodes-menu-link"> Hacknet Nodes </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="world-tab">
|
<li class="world-tab">
|
||||||
<a id="world-menu-link"> World </a>
|
<a id="world-menu-link"> World </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="create-program-tab">
|
<li class="create-program-tab">
|
||||||
<a id="create-program-menu-link"> Create Program </a>
|
<a id="create-program-menu-link"> Create Program </a>
|
||||||
<span id="create-program-notification" class="notification-off"> </span>
|
<span id="create-program-notification" class="notification-off"> </span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="factions-tab">
|
<li class="factions-tab">
|
||||||
<a id="factions-menu-link"> Factions </a>
|
<a id="factions-menu-link"> Factions </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="augmentations-tab">
|
<li class="augmentations-tab">
|
||||||
<a id="augmentations-menu-link"> Augmentations </a>
|
<a id="augmentations-menu-link" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> Augmentations </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="tutorial-tab">
|
<li class="tutorial-tab">
|
||||||
<a id="tutorial-menu-link"> Tutorial </a>
|
<a id="tutorial-menu-link"> Tutorial </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="options-tab">
|
<li class="options-tab">
|
||||||
<a id="options-menu-link"> Options </a>
|
<a id="options-menu-link"> Options </a>
|
||||||
</li>
|
</li>
|
||||||
@ -138,7 +131,6 @@
|
|||||||
onfocus="this.value = this.value;"/>
|
onfocus="this.value = this.value;"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -213,6 +205,9 @@
|
|||||||
<li id="aevum-travelagency-li">
|
<li id="aevum-travelagency-li">
|
||||||
<a id="aevum-travelagency" class="a-link-button"> Travel Agency </a>
|
<a id="aevum-travelagency" class="a-link-button"> Travel Agency </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="aevum-hospital-li">
|
||||||
|
<a id="aevum-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="aevum-summituniversity-li">
|
<li id="aevum-summituniversity-li">
|
||||||
<a id="aevum-summituniversity" class="a-link-button"> Summit University </a>
|
<a id="aevum-summituniversity" class="a-link-button"> Summit University </a>
|
||||||
</li>
|
</li>
|
||||||
@ -261,6 +256,9 @@
|
|||||||
<li id="chongqing-travelagency-li">
|
<li id="chongqing-travelagency-li">
|
||||||
<a id="chongqing-travelagency" class="a-link-button"> Travel Agency </a>
|
<a id="chongqing-travelagency" class="a-link-button"> Travel Agency </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="chongqing-hospital-li">
|
||||||
|
<a id="chongqing-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="chonqging-kuaigonginternational-li">
|
<li id="chonqging-kuaigonginternational-li">
|
||||||
<a id="chongqing-kuaigonginternational" class="a-link-button">KuaiGong International </a>
|
<a id="chongqing-kuaigonginternational" class="a-link-button">KuaiGong International </a>
|
||||||
</li>
|
</li>
|
||||||
@ -276,6 +274,9 @@
|
|||||||
<li id="sector12-travelagency-li">
|
<li id="sector12-travelagency-li">
|
||||||
<a id="sector12-travelagency" class="a-link-button">Travel Agency </a>
|
<a id="sector12-travelagency" class="a-link-button">Travel Agency </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="sector12-hospital-li">
|
||||||
|
<a id="sector12-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="sector12-rothmanuniversity-li">
|
<li id="sector12-rothmanuniversity-li">
|
||||||
<a id="sector12-rothmanuniversity" class="a-link-button"> Rothman University</a>
|
<a id="sector12-rothmanuniversity" class="a-link-button"> Rothman University</a>
|
||||||
</li>
|
</li>
|
||||||
@ -330,6 +331,9 @@
|
|||||||
<li id="newtokyo-travelagency-li">
|
<li id="newtokyo-travelagency-li">
|
||||||
<a id="newtokyo-travelagency" class="a-link-button"> Travel Agency</a>
|
<a id="newtokyo-travelagency" class="a-link-button"> Travel Agency</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="newtokyo-hospital-li">
|
||||||
|
<a id="newtokyo-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="newtokyo-defcomm-li">
|
<li id="newtokyo-defcomm-li">
|
||||||
<a id="newtokyo-defcomm" class="a-link-button"> DefComm</a>
|
<a id="newtokyo-defcomm" class="a-link-button"> DefComm</a>
|
||||||
</li>
|
</li>
|
||||||
@ -351,6 +355,9 @@
|
|||||||
<li id="ishima-travelagency-li">
|
<li id="ishima-travelagency-li">
|
||||||
<a id="ishima-travelagency" class="a-link-button">Travel Agency </a>
|
<a id="ishima-travelagency" class="a-link-button">Travel Agency </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="ishima-hospital-li">
|
||||||
|
<a id="ishima-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="ishima-stormtechnologies-li">
|
<li id="ishima-stormtechnologies-li">
|
||||||
<a id="ishima-stormtechnologies" class="a-link-button">Storm Technologies</a>
|
<a id="ishima-stormtechnologies" class="a-link-button">Storm Technologies</a>
|
||||||
</li>
|
</li>
|
||||||
@ -369,6 +376,9 @@
|
|||||||
<li id="volhaven-travelagency-li">
|
<li id="volhaven-travelagency-li">
|
||||||
<a id="volhaven-travelagency" class="a-link-button">Travel Agency </a>
|
<a id="volhaven-travelagency" class="a-link-button">Travel Agency </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="volhaven-hospital-li">
|
||||||
|
<a id="volhaven-hospital" class="a-link-button">Hospital</a>
|
||||||
|
</li>
|
||||||
<li id="volhaven-zbinstituteoftechnology-li">
|
<li id="volhaven-zbinstituteoftechnology-li">
|
||||||
<a id="volhaven-zbinstituteoftechnology" class="a-link-button">ZB Insitute of Technology</a>
|
<a id="volhaven-zbinstituteoftechnology" class="a-link-button">ZB Insitute of Technology</a>
|
||||||
</li>
|
</li>
|
||||||
@ -400,6 +410,12 @@
|
|||||||
<a id="volhaven-slums" class="a-link-button">The Slums</a>
|
<a id="volhaven-slums" class="a-link-button">The Slums</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<ul id="generic-locations-list">
|
||||||
|
<li id="generic-location-wse-li">
|
||||||
|
<a id="generic-location-wse" class="a-link-button">World Stock Exchange </a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Create a program(executable) -->
|
<!-- Create a program(executable) -->
|
||||||
@ -447,7 +463,6 @@
|
|||||||
ServerProfiler.exe
|
ServerProfiler.exe
|
||||||
<span class="tooltiptext">This program is used to display hacking and Netscript-related information about servers</span>
|
<span class="tooltiptext">This program is used to display hacking and Netscript-related information about servers</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="create-program-a-link-button tooltip" id="create-program-autolink">
|
<a class="create-program-a-link-button tooltip" id="create-program-autolink">
|
||||||
AutoLink.exe
|
AutoLink.exe
|
||||||
<span class="tooltiptext">This program allows you to directly connect to other servers through the 'scan-analyze' command</span>
|
<span class="tooltiptext">This program allows you to directly connect to other servers through the 'scan-analyze' command</span>
|
||||||
@ -560,7 +575,8 @@
|
|||||||
Scripts on every computer but your home computer<br>
|
Scripts on every computer but your home computer<br>
|
||||||
Purchased servers <br>
|
Purchased servers <br>
|
||||||
Hacknet Nodes <br>
|
Hacknet Nodes <br>
|
||||||
Faction/Company reputation <br><br>
|
Faction/Company reputation <br>
|
||||||
|
Stocks<br><br>
|
||||||
Purchasing an Augmentation lets you start over with the perks and benefits granted by all
|
Purchasing an Augmentation lets you start over with the perks and benefits granted by all
|
||||||
of the Augmentations you have ever purchased. Also, you will keep any scripts and RAM upgrades
|
of the Augmentations you have ever purchased. Also, you will keep any scripts and RAM upgrades
|
||||||
on your home computer (but you will lose all programs besides NUKE.exe).
|
on your home computer (but you will lose all programs besides NUKE.exe).
|
||||||
@ -584,7 +600,7 @@
|
|||||||
<a id="tutorial-scripts-link" class="a-link-button"> Scripts </a>
|
<a id="tutorial-scripts-link" class="a-link-button"> Scripts </a>
|
||||||
<a id="tutorial-netscript-link" class="a-link-button"> Netscript Programming Language </a>
|
<a id="tutorial-netscript-link" class="a-link-button"> Netscript Programming Language </a>
|
||||||
<a id="tutorial-traveling-link" class="a-link-button"> Traveling </a>
|
<a id="tutorial-traveling-link" class="a-link-button"> Traveling </a>
|
||||||
<a id="tutorial-jobs-link" class="a-link-button"> Jobs </a>
|
<a id="tutorial-jobs-link" class="a-link-button"> Companies and Infiltration </a>
|
||||||
<a id="tutorial-factions-link" class="a-link-button"> Factions </a>
|
<a id="tutorial-factions-link" class="a-link-button"> Factions </a>
|
||||||
<a id="tutorial-augmentations-link" class="a-link-button"> Augmentations </a>
|
<a id="tutorial-augmentations-link" class="a-link-button"> Augmentations </a>
|
||||||
|
|
||||||
@ -650,6 +666,17 @@
|
|||||||
<a id="location-purchase-tor" class="a-link-button"> Purchase TOR Router - $100,000</a>
|
<a id="location-purchase-tor" class="a-link-button"> Purchase TOR Router - $100,000</a>
|
||||||
<a id="location-purchase-home-ram" class="a-link-button"> Purchase additional RAM for Home computer </a>
|
<a id="location-purchase-home-ram" class="a-link-button"> Purchase additional RAM for Home computer </a>
|
||||||
|
|
||||||
|
<!-- Infiltrate -->
|
||||||
|
<a id="location-infiltrate" class="a-link-button tooltip"> Infiltrate Company
|
||||||
|
<span class="tooltiptext">
|
||||||
|
Infiltrate this company's facility to try and steal their classified secrets!
|
||||||
|
Warning: You may end up hospitalized if you are unsuccessful!
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- Hospital -->
|
||||||
|
<a id="location-hospital-treatment" class="a-link-button"> Get Treatment for Wounds </a>
|
||||||
|
|
||||||
<!-- Travel agency -->
|
<!-- Travel agency -->
|
||||||
<p id="location-travel-agency-text">
|
<p id="location-travel-agency-text">
|
||||||
From here, you can travel to any other city! A ticket costs $200,000.
|
From here, you can travel to any other city! A ticket costs $200,000.
|
||||||
@ -684,16 +711,16 @@
|
|||||||
<div id="infiltration-left-panel">
|
<div id="infiltration-left-panel">
|
||||||
<p id="infiltration-level-text"> </p>
|
<p id="infiltration-level-text"> </p>
|
||||||
<div id="infiltration-buttons">
|
<div id="infiltration-buttons">
|
||||||
<a id="infiltration-kill"> </a>
|
<a class="a-link-button tooltip" id="infiltration-kill"> </a>
|
||||||
<a id="infiltration-knockout"> </a>
|
<a class="a-link-button tooltip" id="infiltration-knockout"> </a>
|
||||||
<a id="infiltration-stealthknockout"> </a>
|
<a class="a-link-button tooltip" id="infiltration-stealthknockout"> </a>
|
||||||
<a id="infiltration-assassinate"> </a>
|
<a class="a-link-button tooltip" id="infiltration-assassinate"> </a>
|
||||||
<a id="infiltration-hacksecurity"> </a>
|
<a class="a-link-button tooltip" id="infiltration-hacksecurity"> </a>
|
||||||
<a id="infiltration-destroysecurity"> </a>
|
<a class="a-link-button tooltip" id="infiltration-destroysecurity"> </a>
|
||||||
<a id="infiltration-sneak"> </a>
|
<a class="a-link-button tooltip" id="infiltration-sneak"> </a>
|
||||||
<a id="infiltration-pickdoor"> </a>
|
<a class="a-link-button tooltip" id="infiltration-pickdoor"> </a>
|
||||||
<a id="infiltration-bribe"> </a>
|
<a class="a-link-button tooltip" id="infiltration-bribe"> </a>
|
||||||
<a id="infiltration-escape"> </a>
|
<a class="a-link-button tooltip" id="infiltration-escape"> </a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="infiltration-right-panel">
|
<div id="infiltration-right-panel">
|
||||||
@ -701,6 +728,33 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="stock-market-container" class="generic-menupage-container">
|
||||||
|
<p>
|
||||||
|
Welcome to the World Stock Exchange (WSE)! <br><br>
|
||||||
|
|
||||||
|
To begin trading, you must first purchase an account. WSE accounts will persist
|
||||||
|
after you 'reset' by installing Augmentations.
|
||||||
|
</p>
|
||||||
|
<a id="stock-market-buy-account" class="a-link-button-inactive"> Buy WSE Account </a>
|
||||||
|
<p>
|
||||||
|
You can also purchase access to the World Stock Exchange's TIX API! TIX, short for
|
||||||
|
Trade Information eXchange, is the communications protocol supported by the WSE.
|
||||||
|
<br><br>
|
||||||
|
Gaining access to the TIX API lets you write code to build automated trading
|
||||||
|
systems. In other words, you can create your own algorithmic trading strategies!
|
||||||
|
<br><br>
|
||||||
|
If you purchase access to the TIX API, you will retain that access even after
|
||||||
|
you 'reset' by installing Augmentations.
|
||||||
|
</p>
|
||||||
|
<a id="stock-market-buy-tix-api" class="a-link-button-inactive">
|
||||||
|
Buy Trade Information eXchange (TEX) API Access - COMING SOON
|
||||||
|
</a>
|
||||||
|
<p id="stock-market-commission"> </p>
|
||||||
|
|
||||||
|
<ul id="stock-market-list" style="list-style:none;">
|
||||||
|
</ul>
|
||||||
|
</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">
|
||||||
@ -711,55 +765,67 @@
|
|||||||
|
|
||||||
<!-- Purchase Server Pop-up Box -->
|
<!-- Purchase Server Pop-up Box -->
|
||||||
<div id="purchase-server-box-container" class="popup-box-container">
|
<div id="purchase-server-box-container" class="popup-box-container">
|
||||||
<div id="purchase-server-box-content">
|
<div id="purchase-server-box-content" class="popup-box-content">
|
||||||
<p id="purchase-server-box-text"> </p>
|
<p id="purchase-server-box-text"> </p>
|
||||||
<p id="purchase-server-box-enter-name"> Enter new server hostname: </p>
|
<p id="purchase-server-box-enter-name"> Enter new server hostname: </p>
|
||||||
<input type="text" id="purchase-server-box-input" pattern="[a-zA-Z0-9-_]+ maxlength="30"> </input>
|
<input type="text" id="purchase-server-box-input" pattern="[a-zA-Z0-9-_]+ maxlength="30"> </input>
|
||||||
<span id="purchase-server-box-confirm"> Purchase </span>
|
<span id="purchase-server-box-confirm" class="popup-box-button"> Purchase </span>
|
||||||
<span id="purchase-server-box-cancel"> Cancel </span>
|
<span id="purchase-server-box-cancel" class="popup-box-button"> Cancel </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Purchase RAM for Home Computer Pop-up Box -->
|
<!-- Purchase RAM for Home Computer Pop-up Box -->
|
||||||
<div id="purchase-ram-for-home-box-container" class="popup-box-container">
|
<div id="purchase-ram-for-home-box-container" class="popup-box-container">
|
||||||
<div id="purchase-ram-for-home-box-content">
|
<div id="purchase-ram-for-home-box-content" class="popup-box-content">
|
||||||
<p id="purchase-ram-for-home-box-text"> </p>
|
<p id="purchase-ram-for-home-box-text"> </p>
|
||||||
<span id="purchase-ram-for-home-box-confirm"> Purchase </span>
|
<span id="purchase-ram-for-home-box-confirm" class="popup-box-button"> Purchase </span>
|
||||||
<span id="purchase-ram-for-home-box-cancel"> Cancel </span>
|
<span id="purchase-ram-for-home-box-cancel" class="popup-box-button"> Cancel </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Travel Pop-up Box -->
|
<!-- Travel Pop-up Box -->
|
||||||
<div id="travel-box-container" class="popup-box-container">
|
<div id="travel-box-container" class="popup-box-container">
|
||||||
<div id="travel-box-content">
|
<div id="travel-box-content" class="popup-box-content">
|
||||||
<p id="travel-box-text"> </p>
|
<p id="travel-box-text"> </p>
|
||||||
<span id="travel-box-confirm"> Yes </span>
|
<span id="travel-box-confirm" class="popup-box-button"> Yes </span>
|
||||||
<span id="travel-box-cancel"> No </span>
|
<span id="travel-box-cancel" class="popup-box-button"> No </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Purchase Augmentation Pop-up Box -->
|
<!-- Purchase Augmentation Pop-up Box -->
|
||||||
<div id="purchase-augmentation-box-container" class="popup-box-container">
|
<div id="purchase-augmentation-box-container" class="popup-box-container">
|
||||||
<div id="purchase-augmentation-box-content">
|
<div id="purchase-augmentation-box-content" class="popup-box-content">
|
||||||
<h2 id="purchase-augmentation-box-aug-name"> </h2>
|
<h2 id="purchase-augmentation-box-aug-name"> </h2>
|
||||||
<p id="purchase-augmentation-box-aug-info"> </p>
|
<p id="purchase-augmentation-box-aug-info"> </p>
|
||||||
<p id="purchase-augmentation-box-text"> </p>
|
<p id="purchase-augmentation-box-text"> </p>
|
||||||
<span id="purchase-augmentation-box-confirm"> Purchase </span>
|
<span id="purchase-augmentation-box-confirm" class="popup-box-button"> Purchase </span>
|
||||||
<span id="purchase-augmentation-box-cancel"> Cancel </span>
|
<span id="purchase-augmentation-box-cancel" class="popup-box-button"> Cancel </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Faction Invitation Pop-up Box -->
|
<!-- Faction Invitation Pop-up Box -->
|
||||||
<div id="faction-invitation-box-container" class="popup-box-container">
|
<div id="faction-invitation-box-container" class="popup-box-container">
|
||||||
<div id="faction-invitation-box-content">
|
<div id="faction-invitation-box-content" class="popup-box-content">
|
||||||
<p id="faction-invitation-box-text"> </p>
|
<p id="faction-invitation-box-text"> </p>
|
||||||
<p id="faction-invitation-box-message"> </p>
|
<p id="faction-invitation-box-message"> </p>
|
||||||
<p id="faction-invitation-box-warning">
|
<p id="faction-invitation-box-warning">
|
||||||
Would you like to join? <br> <br>
|
Would you like to join? <br> <br>
|
||||||
Warning: Joining this faction may prevent you from joining other factions during this run!
|
Warning: Joining this faction may prevent you from joining other factions during this run!
|
||||||
</p>
|
</p>
|
||||||
<span id="faction-invitation-box-yes"> Yes </span>
|
<span id="faction-invitation-box-yes" class="popup-box-button"> Yes </span>
|
||||||
<span id="faction-invitation-box-no"> No </span>
|
<span id="faction-invitation-box-no" class="popup-box-button"> No </span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- End of Infiltration pop up box -->
|
||||||
|
<div id="infiltration-box-container" class="popup-box-container">
|
||||||
|
<div id="infiltration-box-content" class="popup-box-content">
|
||||||
|
<p id="infiltration-box-text"> </p>
|
||||||
|
|
||||||
|
<span id="infiltration-box-sell" class="a-link-button"> Sell on Black Market </span> <br><br>
|
||||||
|
<select id="infiltration-faction-select"> </select> <br>
|
||||||
|
<span id="infiltration-box-faction" class="a-link-button"> Give to Faction for Reputation </span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -770,6 +836,9 @@
|
|||||||
<span id="work-in-progress-cancel-button"> Cancel Work </span>
|
<span id="work-in-progress-cancel-button"> Cancel Work </span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="red-pill-container" class="generic-fullscreen-container">
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Interactive Tutorial Text Screen -->
|
<!-- Interactive Tutorial Text Screen -->
|
||||||
<div id="interactive-tutorial-wrapper">
|
<div id="interactive-tutorial-wrapper">
|
||||||
<div id="interactive-tutorial-container">
|
<div id="interactive-tutorial-container">
|
||||||
|
44
src/Alias.js
44
src/Alias.js
@ -1,5 +1,6 @@
|
|||||||
/* Alias.js */
|
/* Alias.js */
|
||||||
Aliases = {};
|
Aliases = {};
|
||||||
|
GlobalAliases = {};
|
||||||
|
|
||||||
//Print all aliases to terminal
|
//Print all aliases to terminal
|
||||||
function printAliases() {
|
function printAliases() {
|
||||||
@ -8,21 +9,40 @@ function printAliases() {
|
|||||||
post("alias " + name + "=" + Aliases[name]);
|
post("alias " + name + "=" + Aliases[name]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (var name in GlobalAliases) {
|
||||||
|
if (GlobalAliases.hasOwnProperty(name)) {
|
||||||
|
post("global alias " + name + "=" + GlobalAliases[name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//True if successful, false otherwise
|
//True if successful, false otherwise
|
||||||
function parseAliasDeclaration(dec) {
|
function parseAliasDeclaration(dec,global=false) {
|
||||||
var re = /([^=]+)="(.+)"/;
|
var re = /^([_|\w|!|%|,|@]+)="(.+)"$/;
|
||||||
var matches = dec.match(re);
|
var matches = dec.match(re);
|
||||||
if (matches == null || matches.length != 3) {return false;}
|
if (matches == null || matches.length != 3) {return false;}
|
||||||
|
if (global){
|
||||||
|
addGlobalAlias(matches[1],matches[2]);
|
||||||
|
} else {
|
||||||
addAlias(matches[1], matches[2]);
|
addAlias(matches[1], matches[2]);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addAlias(name, value) {
|
function addAlias(name, value) {
|
||||||
|
if (name in GlobalAliases){
|
||||||
|
delete GlobalAliases[name];
|
||||||
|
}
|
||||||
Aliases[name] = value;
|
Aliases[name] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addGlobalAlias(name, value) {
|
||||||
|
if (name in Aliases){
|
||||||
|
delete Aliases[name];
|
||||||
|
}
|
||||||
|
GlobalAliases[name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
function getAlias(name) {
|
function getAlias(name) {
|
||||||
if (Aliases.hasOwnProperty(name)) {
|
if (Aliases.hasOwnProperty(name)) {
|
||||||
return Aliases[name];
|
return Aliases[name];
|
||||||
@ -30,6 +50,13 @@ function getAlias(name) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getGlobalAlias(name) {
|
||||||
|
if (GlobalAliases.hasOwnProperty(name)) {
|
||||||
|
return GlobalAliases[name];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function removeAlias(name) {
|
function removeAlias(name) {
|
||||||
if (Aliases.hasOwnProperty(name)) {
|
if (Aliases.hasOwnProperty(name)) {
|
||||||
delete Aliases[name];
|
delete Aliases[name];
|
||||||
@ -42,11 +69,22 @@ function removeAlias(name) {
|
|||||||
//Aliases only applied to "whole words", one level deep
|
//Aliases only applied to "whole words", one level deep
|
||||||
function substituteAliases(origCommand) {
|
function substituteAliases(origCommand) {
|
||||||
var commandArray = origCommand.split(" ");
|
var commandArray = origCommand.split(" ");
|
||||||
|
if (commandArray.length>0){
|
||||||
|
var alias = getAlias(commandArray[0]);
|
||||||
|
if (alias != null) {
|
||||||
|
commandArray[0] = alias;
|
||||||
|
} else {
|
||||||
|
var alias = getGlobalAlias(commandArray[0]);
|
||||||
|
if (alias != null) {
|
||||||
|
commandArray[0] = alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (var i = 0; i < commandArray.length; ++i) {
|
for (var i = 0; i < commandArray.length; ++i) {
|
||||||
var alias = getAlias(commandArray[i]);
|
var alias = getGlobalAlias(commandArray[i]);
|
||||||
if (alias != null) {
|
if (alias != null) {
|
||||||
commandArray[i] = alias;
|
commandArray[i] = alias;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return commandArray.join(" ");
|
return commandArray.join(" ");
|
||||||
}
|
}
|
@ -128,6 +128,7 @@ AugmentationNames = {
|
|||||||
SmartSonar: "SmartSonar Implant",
|
SmartSonar: "SmartSonar Implant",
|
||||||
PowerRecirculator: "Power Recirculation Core",
|
PowerRecirculator: "Power Recirculation Core",
|
||||||
QLink: "QLink",
|
QLink: "QLink",
|
||||||
|
TheRedPill: "The Red Pill",
|
||||||
SPTN97: "SPTN-97 Gene Modification",
|
SPTN97: "SPTN-97 Gene Modification",
|
||||||
HiveMind: "ECorp HVMind Implant",
|
HiveMind: "ECorp HVMind Implant",
|
||||||
CordiARCReactor: "CordiARC Fusion Reactor",
|
CordiARCReactor: "CordiARC Fusion Reactor",
|
||||||
@ -246,7 +247,7 @@ initAugmentations = function() {
|
|||||||
var CombatRib2 = new Augmentation(AugmentationNames.CombatRib2);
|
var CombatRib2 = new Augmentation(AugmentationNames.CombatRib2);
|
||||||
CombatRib2.setRequirements(7000, 12000000);
|
CombatRib2.setRequirements(7000, 12000000);
|
||||||
CombatRib2.setInfo("This is an upgrade to the Combat Rib I augmentation, and is capable of releasing even more potent combat-enhancing " +
|
CombatRib2.setInfo("This is an upgrade to the Combat Rib I augmentation, and is capable of releasing even more potent combat-enhancing " +
|
||||||
"drugs into the bloodstream<br><br>. This upgrade increases the player's strength and defense by an additional 15%.")
|
"drugs into the bloodstream.<br><br>This upgrade increases the player's strength and defense by an additional 15%.")
|
||||||
CombatRib2.addToFactions(["The Dark Army", "The Syndicate", "Sector-12", "Volhaven", "Ishima",
|
CombatRib2.addToFactions(["The Dark Army", "The Syndicate", "Sector-12", "Volhaven", "Ishima",
|
||||||
"OmniTek Incorporated", "KuaiGong International", "Blade Industries"]);
|
"OmniTek Incorporated", "KuaiGong International", "Blade Industries"]);
|
||||||
if (augmentationExists(AugmentationNames.CombatRib2)) {
|
if (augmentationExists(AugmentationNames.CombatRib2)) {
|
||||||
@ -1039,7 +1040,14 @@ initAugmentations = function() {
|
|||||||
AddToAugmentations(QLink);
|
AddToAugmentations(QLink);
|
||||||
|
|
||||||
//Daedalus
|
//Daedalus
|
||||||
//TODO The Red Pill - Second prestige
|
var RedPill = new Augmentation(AugmentationNames.TheRedPill);
|
||||||
|
RedPill.setInfo("It's time to leave the cave");
|
||||||
|
RedPill.setRequirements(1000000, 0);
|
||||||
|
RedPill.addToFactions(["Daedalus"]);
|
||||||
|
if (augmentationExists(AugmentationNames.TheRedPill)) {
|
||||||
|
delete Augmentations[AugmentationNames.TheRedPill];
|
||||||
|
}
|
||||||
|
AddToAugmentations(RedPill);
|
||||||
|
|
||||||
//Covenant
|
//Covenant
|
||||||
var SPTN97 = new Augmentation(AugmentationNames.SPTN97);
|
var SPTN97 = new Augmentation(AugmentationNames.SPTN97);
|
||||||
@ -1379,6 +1387,8 @@ initAugmentations = function() {
|
|||||||
Augmentations[name].baseCost *= mult;
|
Augmentations[name].baseCost *= mult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player.reapplyAllAugmentations();
|
||||||
}
|
}
|
||||||
|
|
||||||
applyAugmentation = function(aug, reapply=false) {
|
applyAugmentation = function(aug, reapply=false) {
|
||||||
|
125
src/Company.js
125
src/Company.js
@ -231,8 +231,8 @@ CompanyPositions = {
|
|||||||
//Software
|
//Software
|
||||||
SoftwareIntern: new CompanyPosition("Software Engineering Intern", 1, 0, 0, 0, 0, 0, 0, 13),
|
SoftwareIntern: new CompanyPosition("Software Engineering Intern", 1, 0, 0, 0, 0, 0, 0, 13),
|
||||||
JuniorDev: new CompanyPosition("Junior Software Engineer", 51, 0, 0, 0, 0, 0, 8000, 32),
|
JuniorDev: new CompanyPosition("Junior Software Engineer", 51, 0, 0, 0, 0, 0, 8000, 32),
|
||||||
SeniorDev: new CompanyPosition("Senior Software Engineer", 251, 0, 0, 0, 0, 51, 32000, 63),
|
SeniorDev: new CompanyPosition("Senior Software Engineer", 251, 0, 0, 0, 0, 51, 40000, 63),
|
||||||
LeadDev: new CompanyPosition("Lead Software Developer", 401, 0, 0, 0, 0, 151, 144000, 210),
|
LeadDev: new CompanyPosition("Lead Software Developer", 401, 0, 0, 0, 0, 151, 200000, 210),
|
||||||
|
|
||||||
//TODO Through darkweb, maybe?
|
//TODO Through darkweb, maybe?
|
||||||
FreelanceDeveloper: new CompanyPosition("Freelance Developer", 0, 0, 0, 0, 0, 0, 0, 0),
|
FreelanceDeveloper: new CompanyPosition("Freelance Developer", 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
@ -242,26 +242,26 @@ CompanyPositions = {
|
|||||||
|
|
||||||
//IT
|
//IT
|
||||||
ITIntern: new CompanyPosition("IT Intern", 1, 0, 0, 0, 0, 0, 0, 11),
|
ITIntern: new CompanyPosition("IT Intern", 1, 0, 0, 0, 0, 0, 0, 11),
|
||||||
ITAnalyst: new CompanyPosition("IT Analyst", 26, 0, 0, 0, 0, 0, 5000, 25),
|
ITAnalyst: new CompanyPosition("IT Analyst", 26, 0, 0, 0, 0, 0, 7000, 25),
|
||||||
ITManager: new CompanyPosition("IT Manager", 151, 0, 0, 0, 0, 51, 22000, 48),
|
ITManager: new CompanyPosition("IT Manager", 151, 0, 0, 0, 0, 51, 35000, 48),
|
||||||
SysAdmin: new CompanyPosition("Systems Administrator", 251, 0, 0, 0, 0, 76, 120000, 165),
|
SysAdmin: new CompanyPosition("Systems Administrator", 251, 0, 0, 0, 0, 76, 175000, 165),
|
||||||
SecurityEngineer: new CompanyPosition("Security Engineer", 151, 0, 0, 0, 0, 26, 28000, 55),
|
SecurityEngineer: new CompanyPosition("Security Engineer", 151, 0, 0, 0, 0, 26, 35000, 55),
|
||||||
NetworkEngineer: new CompanyPosition("Network Engineer", 151, 0, 0, 0, 0, 26, 28000, 55),
|
NetworkEngineer: new CompanyPosition("Network Engineer", 151, 0, 0, 0, 0, 26, 35000, 55),
|
||||||
NetworkAdministrator: new CompanyPosition("Network Administrator", 251, 0, 0, 0, 0, 76, 120000, 165),
|
NetworkAdministrator: new CompanyPosition("Network Administrator", 251, 0, 0, 0, 0, 76, 175000, 165),
|
||||||
|
|
||||||
//Technology management
|
//Technology management
|
||||||
HeadOfSoftware: new CompanyPosition("Head of Software", 501, 0, 0, 0, 0, 251, 288000, 330),
|
HeadOfSoftware: new CompanyPosition("Head of Software", 501, 0, 0, 0, 0, 251, 400000, 330),
|
||||||
HeadOfEngineering: new CompanyPosition("Head of Engineering", 501, 0, 0, 0, 0, 251, 576000, 660),
|
HeadOfEngineering: new CompanyPosition("Head of Engineering", 501, 0, 0, 0, 0, 251, 800000, 660),
|
||||||
VicePresident: new CompanyPosition("Vice President of Technology", 601, 0, 0, 0, 0, 401, 1152000, 990),
|
VicePresident: new CompanyPosition("Vice President of Technology", 601, 0, 0, 0, 0, 401, 1600000, 990),
|
||||||
CTO: new CompanyPosition("Chief Technology Officer", 751, 0, 0, 0, 0, 501, 4608000, 1100),
|
CTO: new CompanyPosition("Chief Technology Officer", 751, 0, 0, 0, 0, 501, 3200000, 1100),
|
||||||
|
|
||||||
//Business
|
//Business
|
||||||
BusinessIntern: new CompanyPosition("Business Intern", 1, 0, 0, 0, 0, 1, 0, 18),
|
BusinessIntern: new CompanyPosition("Business Intern", 1, 0, 0, 0, 0, 1, 0, 18),
|
||||||
BusinessAnalyst: new CompanyPosition("Business Analyst", 6, 0, 0, 0, 0, 51, 8000, 42),
|
BusinessAnalyst: new CompanyPosition("Business Analyst", 6, 0, 0, 0, 0, 51, 8000, 42),
|
||||||
BusinessManager: new CompanyPosition("Business Manager", 51, 0, 0, 0, 0, 101, 32000, 84),
|
BusinessManager: new CompanyPosition("Business Manager", 51, 0, 0, 0, 0, 101, 40000, 84),
|
||||||
OperationsManager: new CompanyPosition("Operations Manager", 51, 0, 0, 0, 0, 226, 144000, 275),
|
OperationsManager: new CompanyPosition("Operations Manager", 51, 0, 0, 0, 0, 226, 200000, 275),
|
||||||
CFO: new CompanyPosition("Chief Financial Officer", 76, 0, 0, 0, 0, 501, 576000, 800),
|
CFO: new CompanyPosition("Chief Financial Officer", 76, 0, 0, 0, 0, 501, 800000, 800),
|
||||||
CEO: new CompanyPosition("Chief Executive Officer", 101, 0, 0, 0, 0, 751, 4608000, 1500),
|
CEO: new CompanyPosition("Chief Executive Officer", 101, 0, 0, 0, 0, 751, 3200000, 1500),
|
||||||
|
|
||||||
BusinessConsultant: new CompanyPosition("Business Consultant", 6, 0, 0, 0, 0, 51, 0, 28),
|
BusinessConsultant: new CompanyPosition("Business Consultant", 6, 0, 0, 0, 0, 51, 0, 28),
|
||||||
SeniorBusinessConsultant: new CompanyPosition("Senior Business Consultant", 51, 0, 0, 0, 0, 226, 0, 175),
|
SeniorBusinessConsultant: new CompanyPosition("Senior Business Consultant", 51, 0, 0, 0, 0, 226, 0, 175),
|
||||||
@ -273,75 +273,75 @@ CompanyPositions = {
|
|||||||
Waiter: new CompanyPosition("Waiter", 0, 0, 0, 0, 0, 0, 0, 11),
|
Waiter: new CompanyPosition("Waiter", 0, 0, 0, 0, 0, 0, 0, 11),
|
||||||
Employee: new CompanyPosition("Employee", 0, 0, 0, 0, 0, 0, 0, 11),
|
Employee: new CompanyPosition("Employee", 0, 0, 0, 0, 0, 0, 0, 11),
|
||||||
PoliceOfficer: new CompanyPosition("Police Officer", 11, 101, 101, 101, 101, 51, 8000, 36),
|
PoliceOfficer: new CompanyPosition("Police Officer", 11, 101, 101, 101, 101, 51, 8000, 36),
|
||||||
PoliceChief: new CompanyPosition("Police Chief", 101, 301, 301, 301, 301, 151, 32000, 175),
|
PoliceChief: new CompanyPosition("Police Chief", 101, 301, 301, 301, 301, 151, 36000, 175),
|
||||||
SecurityGuard: new CompanyPosition("Security Guard", 0, 51, 51, 51, 51, 1, 0, 20),
|
SecurityGuard: new CompanyPosition("Security Guard", 0, 51, 51, 51, 51, 1, 0, 20),
|
||||||
SecurityOfficer: new CompanyPosition("Security Officer", 26, 151, 151, 151, 151, 51, 8000, 75),
|
SecurityOfficer: new CompanyPosition("Security Officer", 26, 151, 151, 151, 151, 51, 8000, 75),
|
||||||
SecuritySupervisor: new CompanyPosition("Security Supervisor", 26, 251, 251, 251, 251, 101, 32000, 275),
|
SecuritySupervisor: new CompanyPosition("Security Supervisor", 26, 251, 251, 251, 251, 101, 36000, 275),
|
||||||
HeadOfSecurity: new CompanyPosition("Head of Security", 51, 501, 501, 501, 501, 151, 144000, 550),
|
HeadOfSecurity: new CompanyPosition("Head of Security", 51, 501, 501, 501, 501, 151, 144000, 550),
|
||||||
FieldAgent: new CompanyPosition("Field Agent", 101, 101, 101, 101, 101, 101, 8000, 55),
|
FieldAgent: new CompanyPosition("Field Agent", 101, 101, 101, 101, 101, 101, 8000, 55),
|
||||||
SecretAgent: new CompanyPosition("Secret Agent", 201, 251, 251, 251, 251, 201, 32000, 190),
|
SecretAgent: new CompanyPosition("Secret Agent", 201, 251, 251, 251, 251, 201, 32000, 190),
|
||||||
SpecialOperative: new CompanyPosition("Special Operative", 251, 501, 501, 501, 501, 251, 144000, 425),
|
SpecialOperative: new CompanyPosition("Special Operative", 251, 501, 501, 501, 501, 251, 162000, 425),
|
||||||
|
|
||||||
init: function() {
|
init: function() {
|
||||||
//Argument order: hack, str, def, dex, agi, cha
|
//Argument order: hack, str, def, dex, agi, cha
|
||||||
//Software
|
//Software
|
||||||
CompanyPositions.SoftwareIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 1);
|
CompanyPositions.SoftwareIntern.setPerformanceParameters(85, 0, 0, 0, 0, 15, 0.9);
|
||||||
CompanyPositions.SoftwareIntern.setExperienceGains(.1, 0, 0, 0, 0, .02);
|
CompanyPositions.SoftwareIntern.setExperienceGains(.05, 0, 0, 0, 0, .02);
|
||||||
CompanyPositions.JuniorDev.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1);
|
CompanyPositions.JuniorDev.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1);
|
||||||
CompanyPositions.JuniorDev.setExperienceGains(.2, 0, 0, 0, 0, .04);
|
CompanyPositions.JuniorDev.setExperienceGains(.1, 0, 0, 0, 0, .05);
|
||||||
CompanyPositions.SeniorDev.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2);
|
CompanyPositions.SeniorDev.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3);
|
||||||
CompanyPositions.SeniorDev.setExperienceGains(.4, 0, 0, 0, 0, .08);
|
CompanyPositions.SeniorDev.setExperienceGains(.3, 0, 0, 0, 0, .08);
|
||||||
CompanyPositions.LeadDev.setPerformanceParameters(70, 0, 0, 0, 0, 30, 1.3);
|
CompanyPositions.LeadDev.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.5);
|
||||||
CompanyPositions.LeadDev.setExperienceGains(.5, 0, 0, 0, 0, .1);
|
CompanyPositions.LeadDev.setExperienceGains(.5, 0, 0, 0, 0, .1);
|
||||||
|
|
||||||
CompanyPositions.SoftwareConsultant.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1);
|
CompanyPositions.SoftwareConsultant.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1);
|
||||||
CompanyPositions.SoftwareConsultant.setExperienceGains(.175, 0, 0, 0, 0, .03);
|
CompanyPositions.SoftwareConsultant.setExperienceGains(.175, 0, 0, 0, 0, .03);
|
||||||
CompanyPositions.SeniorSoftwareConsultant.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.15);
|
CompanyPositions.SeniorSoftwareConsultant.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2);
|
||||||
CompanyPositions.SeniorSoftwareConsultant.setExperienceGains(.35, 0, 0, 0, 0, .06);
|
CompanyPositions.SeniorSoftwareConsultant.setExperienceGains(.35, 0, 0, 0, 0, .06);
|
||||||
|
|
||||||
//Security
|
//Security
|
||||||
CompanyPositions.ITIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 1);
|
CompanyPositions.ITIntern.setPerformanceParameters(90, 0, 0, 0, 0, 10, 0.9);
|
||||||
CompanyPositions.ITIntern.setExperienceGains(.05, 0, 0, 0, 0, .01);
|
CompanyPositions.ITIntern.setExperienceGains(.04, 0, 0, 0, 0, .01);
|
||||||
CompanyPositions.ITAnalyst.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1);
|
CompanyPositions.ITAnalyst.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.1);
|
||||||
CompanyPositions.ITAnalyst.setExperienceGains(.15, 0, 0, 0, 0, .02);
|
CompanyPositions.ITAnalyst.setExperienceGains(.08, 0, 0, 0, 0, .02);
|
||||||
CompanyPositions.ITManager.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.2);
|
CompanyPositions.ITManager.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3);
|
||||||
CompanyPositions.ITManager.setExperienceGains(.4, 0, 0, 0, 0, .1);
|
CompanyPositions.ITManager.setExperienceGains(.3, 0, 0, 0, 0, .1);
|
||||||
CompanyPositions.SysAdmin.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.2);
|
CompanyPositions.SysAdmin.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.4);
|
||||||
CompanyPositions.SysAdmin.setExperienceGains(.5, 0, 0, 0, 0, .05);
|
CompanyPositions.SysAdmin.setExperienceGains(.5, 0, 0, 0, 0, .05);
|
||||||
CompanyPositions.SecurityEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.15);
|
CompanyPositions.SecurityEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.2);
|
||||||
CompanyPositions.SecurityEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05);
|
CompanyPositions.SecurityEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05);
|
||||||
CompanyPositions.NetworkEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.15);
|
CompanyPositions.NetworkEngineer.setPerformanceParameters(85, 0, 0, 0, 0, 15, 1.2);
|
||||||
CompanyPositions.NetworkEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05);
|
CompanyPositions.NetworkEngineer.setExperienceGains(0.4, 0, 0, 0, 0, .05);
|
||||||
CompanyPositions.NetworkAdministrator.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.25);
|
CompanyPositions.NetworkAdministrator.setPerformanceParameters(80, 0, 0, 0, 0, 20, 1.3);
|
||||||
CompanyPositions.NetworkAdministrator.setExperienceGains(0.5, 0, 0, 0, 0, .1);
|
CompanyPositions.NetworkAdministrator.setExperienceGains(0.5, 0, 0, 0, 0, .1);
|
||||||
|
|
||||||
//Technology management
|
//Technology management
|
||||||
CompanyPositions.HeadOfSoftware.setPerformanceParameters(65, 0, 0, 0, 0, 35, 1.4);
|
CompanyPositions.HeadOfSoftware.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.6);
|
||||||
CompanyPositions.HeadOfSoftware.setExperienceGains(1, 0, 0, 0, 0, .5);
|
CompanyPositions.HeadOfSoftware.setExperienceGains(1, 0, 0, 0, 0, .5);
|
||||||
CompanyPositions.HeadOfEngineering.setPerformanceParameters(60, 0, 0, 0, 0, 40, 1.4);
|
CompanyPositions.HeadOfEngineering.setPerformanceParameters(75, 0, 0, 0, 0, 25, 1.6);
|
||||||
CompanyPositions.HeadOfEngineering.setExperienceGains(1.1, 0, 0, 0, 0, .5);
|
CompanyPositions.HeadOfEngineering.setExperienceGains(1.1, 0, 0, 0, 0, .5);
|
||||||
CompanyPositions.VicePresident.setPerformanceParameters(60, 0, 0, 0, 0, 40, 1.5);
|
CompanyPositions.VicePresident.setPerformanceParameters(70, 0, 0, 0, 0, 30, 1.75);
|
||||||
CompanyPositions.VicePresident.setExperienceGains(1.2, 0, 0, 0, 0, .6);
|
CompanyPositions.VicePresident.setExperienceGains(1.2, 0, 0, 0, 0, .6);
|
||||||
CompanyPositions.CTO.setPerformanceParameters(50, 0, 0, 0, 0, 50, 1.5);
|
CompanyPositions.CTO.setPerformanceParameters(65, 0, 0, 0, 0, 35, 2);
|
||||||
CompanyPositions.CTO.setExperienceGains(1.5, 0, 0, 0, 1);
|
CompanyPositions.CTO.setExperienceGains(1.5, 0, 0, 0, 1);
|
||||||
|
|
||||||
//Business
|
//Business
|
||||||
CompanyPositions.BusinessIntern.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1);
|
CompanyPositions.BusinessIntern.setPerformanceParameters(10, 0, 0, 0, 0, 90, 0.9);
|
||||||
CompanyPositions.BusinessIntern.setExperienceGains(.01, 0, 0, 0, 0, .1);
|
CompanyPositions.BusinessIntern.setExperienceGains(.01, 0, 0, 0, 0, .08);
|
||||||
CompanyPositions.BusinessAnalyst.setPerformanceParameters(20, 0, 0, 0, 0, 80, 1.1);
|
CompanyPositions.BusinessAnalyst.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.1);
|
||||||
CompanyPositions.BusinessAnalyst.setExperienceGains(.02, 0, 0, 0, 0, .2);
|
CompanyPositions.BusinessAnalyst.setExperienceGains(.02, 0, 0, 0, 0, .15);
|
||||||
CompanyPositions.BusinessManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2);
|
CompanyPositions.BusinessManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.3);
|
||||||
CompanyPositions.BusinessManager.setExperienceGains(.02, 0, 0, 0, 0, .4);
|
CompanyPositions.BusinessManager.setExperienceGains(.02, 0, 0, 0, 0, .3);
|
||||||
CompanyPositions.OperationsManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2);
|
CompanyPositions.OperationsManager.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.5);
|
||||||
CompanyPositions.OperationsManager.setExperienceGains(.02, 0, 0, 0, 0, .4);
|
CompanyPositions.OperationsManager.setExperienceGains(.02, 0, 0, 0, 0, .4);
|
||||||
CompanyPositions.CFO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.3);
|
CompanyPositions.CFO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.6);
|
||||||
CompanyPositions.CFO.setExperienceGains(.05, 0, 0, 0, 0, 1);
|
CompanyPositions.CFO.setExperienceGains(.05, 0, 0, 0, 0, 1);
|
||||||
CompanyPositions.CEO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.5);
|
CompanyPositions.CEO.setPerformanceParameters(10, 0, 0, 0, 0, 90, 1.75);
|
||||||
CompanyPositions.CEO.setExperienceGains(.1, 0, 0, 0, 0, 1.5);
|
CompanyPositions.CEO.setExperienceGains(.1, 0, 0, 0, 0, 1.5);
|
||||||
|
|
||||||
CompanyPositions.BusinessConsultant.setPerformanceParameters(20, 0, 0, 0, 0, 80, 1);
|
CompanyPositions.BusinessConsultant.setPerformanceParameters(20, 0, 0, 0, 0, 80, 1);
|
||||||
CompanyPositions.BusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .15);
|
CompanyPositions.BusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .15);
|
||||||
CompanyPositions.SeniorBusinessConsultant.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.15);
|
CompanyPositions.SeniorBusinessConsultant.setPerformanceParameters(15, 0, 0, 0, 0, 85, 1.2);
|
||||||
CompanyPositions.SeniorBusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .3);
|
CompanyPositions.SeniorBusinessConsultant.setExperienceGains(.015, 0, 0, 0, 0, .3);
|
||||||
|
|
||||||
//Non-tech/management jobs
|
//Non-tech/management jobs
|
||||||
@ -665,7 +665,8 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITAnalyst, CompanyPositions.ITManager, CompanyPositions.SysAdmin,
|
CompanyPositions.ITAnalyst, CompanyPositions.ITManager, CompanyPositions.SysAdmin,
|
||||||
CompanyPositions.SecurityEngineer, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator,
|
CompanyPositions.SecurityEngineer, CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator,
|
||||||
CompanyPositions.HeadOfSoftware, CompanyPositions.HeadOfEngineering,
|
CompanyPositions.HeadOfSoftware, CompanyPositions.HeadOfEngineering,
|
||||||
CompanyPositions.VicePresident, CompanyPositions.CTO, CompanyPositions.BusinessAnalyst,
|
CompanyPositions.VicePresident, CompanyPositions.CTO,
|
||||||
|
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst,
|
||||||
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
|
CompanyPositions.BusinessManager, CompanyPositions.OperationsManager, CompanyPositions.CFO,
|
||||||
CompanyPositions.CEO]);
|
CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.IshimaStormTechnologies)) {
|
if (companyExists(Locations.IshimaStormTechnologies)) {
|
||||||
@ -681,7 +682,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.NewTokyoDefComm)) {
|
if (companyExists(Locations.NewTokyoDefComm)) {
|
||||||
DefComm.favor = Companies[Locations.NewTokyoDefComm].favor;
|
DefComm.favor = Companies[Locations.NewTokyoDefComm].favor;
|
||||||
delete Companies[Locations.NewTokyoDefComm];
|
delete Companies[Locations.NewTokyoDefComm];
|
||||||
@ -695,7 +696,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.VolhavenHeliosLabs)) {
|
if (companyExists(Locations.VolhavenHeliosLabs)) {
|
||||||
HeliosLabs.favor = Companies[Locations.VolhavenHeliosLabs].favor;
|
HeliosLabs.favor = Companies[Locations.VolhavenHeliosLabs].favor;
|
||||||
delete Companies[Locations.VolhavenHeliosLabs];
|
delete Companies[Locations.VolhavenHeliosLabs];
|
||||||
@ -709,7 +710,8 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
|
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessManager,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.NewTokyoVitaLife)) {
|
if (companyExists(Locations.NewTokyoVitaLife)) {
|
||||||
VitaLife.favor = Companies[Locations.NewTokyoVitaLife].favor;
|
VitaLife.favor = Companies[Locations.NewTokyoVitaLife].favor;
|
||||||
@ -724,7 +726,8 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
|
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessManager,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.Sector12IcarusMicrosystems)) {
|
if (companyExists(Locations.Sector12IcarusMicrosystems)) {
|
||||||
IcarusMicrosystems.favor = Companies[Locations.Sector12IcarusMicrosystems].favor;
|
IcarusMicrosystems.favor = Companies[Locations.Sector12IcarusMicrosystems].favor;
|
||||||
@ -739,7 +742,8 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
|
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessManager,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.Sector12UniversalEnergy)) {
|
if (companyExists(Locations.Sector12UniversalEnergy)) {
|
||||||
UniversalEnergy.favor = Companies[Locations.Sector12UniversalEnergy].favor;
|
UniversalEnergy.favor = Companies[Locations.Sector12UniversalEnergy].favor;
|
||||||
@ -754,7 +758,8 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
CompanyPositions.ITIntern, CompanyPositions.ITAnalyst,
|
||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO, CompanyPositions.BusinessManager,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
|
CompanyPositions.BusinessIntern, CompanyPositions.BusinessAnalyst, CompanyPositions.BusinessManager,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO]);
|
||||||
if (companyExists(Locations.AevumGalacticCybersystems)) {
|
if (companyExists(Locations.AevumGalacticCybersystems)) {
|
||||||
GalacticCybersystems.favor = Companies[Locations.AevumGalacticCybersystems].favor;
|
GalacticCybersystems.favor = Companies[Locations.AevumGalacticCybersystems].favor;
|
||||||
@ -770,7 +775,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
|
CompanyPositions.OperationsManager, CompanyPositions.CEO,
|
||||||
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
||||||
CompanyPositions.HeadOfSecurity]);
|
CompanyPositions.HeadOfSecurity]);
|
||||||
if (companyExists(Locations.AevumAeroCorp)) {
|
if (companyExists(Locations.AevumAeroCorp)) {
|
||||||
@ -786,7 +791,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
|
CompanyPositions.OperationsManager, CompanyPositions.CEO,
|
||||||
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
||||||
CompanyPositions.HeadOfSecurity]);
|
CompanyPositions.HeadOfSecurity]);
|
||||||
if (companyExists(Locations.VolhavenOmniaCybersystems)) {
|
if (companyExists(Locations.VolhavenOmniaCybersystems)) {
|
||||||
@ -802,7 +807,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
|
CompanyPositions.OperationsManager, CompanyPositions.CEO,
|
||||||
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
||||||
CompanyPositions.HeadOfSecurity]);
|
CompanyPositions.HeadOfSecurity]);
|
||||||
if (companyExists(Locations.ChongqingSolarisSpaceSystems)) {
|
if (companyExists(Locations.ChongqingSolarisSpaceSystems)) {
|
||||||
@ -818,7 +823,7 @@ initCompanies = function() {
|
|||||||
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
CompanyPositions.ITManager, CompanyPositions.SysAdmin, CompanyPositions.SecurityEngineer,
|
||||||
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
CompanyPositions.NetworkEngineer, CompanyPositions.NetworkAdministrator, CompanyPositions.HeadOfSoftware,
|
||||||
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
CompanyPositions.HeadOfEngineering, CompanyPositions.CTO,
|
||||||
CompanyPositions.OperationsManager, CompanyPositions.CFO, CompanyPositions.CEO,
|
CompanyPositions.OperationsManager, CompanyPositions.CEO,
|
||||||
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
CompanyPositions.SecurityGuard, CompanyPositions.SecurityOfficer, CompanyPositions.SecuritySupervisor,
|
||||||
CompanyPositions.HeadOfSecurity]);
|
CompanyPositions.HeadOfSecurity]);
|
||||||
if (companyExists(Locations.Sector12DeltaOne)) {
|
if (companyExists(Locations.Sector12DeltaOne)) {
|
||||||
|
@ -127,7 +127,7 @@ PlayerObject.prototype.applyForSecurityEngineerJob = function() {
|
|||||||
if (this.isQualified(company, CompanyPositions.SecurityEngineer)) {
|
if (this.isQualified(company, CompanyPositions.SecurityEngineer)) {
|
||||||
this.companyName = company.companyName;
|
this.companyName = company.companyName;
|
||||||
this.companyPosition = CompanyPositions.SecurityEngineer;
|
this.companyPosition = CompanyPositions.SecurityEngineer;
|
||||||
dialogBoxCreate("Congratulations, you were offered a position at ", this.companyName, " as a Security Engineer!");
|
dialogBoxCreate("Congratulations, you were offered a position at " + this.companyName + " as a Security Engineer!");
|
||||||
Engine.loadLocationContent();
|
Engine.loadLocationContent();
|
||||||
} else {
|
} else {
|
||||||
dialogBoxCreate("Unforunately, you do not qualify for this position");
|
dialogBoxCreate("Unforunately, you do not qualify for this position");
|
||||||
|
120
src/Constants.js
120
src/Constants.js
@ -1,5 +1,5 @@
|
|||||||
CONSTANTS = {
|
CONSTANTS = {
|
||||||
Version: "0.23.0",
|
Version: "0.24.0",
|
||||||
|
|
||||||
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
|
//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
|
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
|
||||||
@ -10,7 +10,7 @@ CONSTANTS = {
|
|||||||
CorpFactionRepRequirement: 250000,
|
CorpFactionRepRequirement: 250000,
|
||||||
|
|
||||||
/* Base costs */
|
/* Base costs */
|
||||||
BaseCostFor1GBOfRamHome: 45000,
|
BaseCostFor1GBOfRamHome: 32000,
|
||||||
BaseCostFor1GBOfRamServer: 55000, //1 GB of RAM
|
BaseCostFor1GBOfRamServer: 55000, //1 GB of RAM
|
||||||
BaseCostFor1GBOfRamHacknetNode: 30000,
|
BaseCostFor1GBOfRamHacknetNode: 30000,
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ CONSTANTS = {
|
|||||||
|
|
||||||
/* Hacknet Node constants */
|
/* Hacknet Node constants */
|
||||||
HacknetNodeMoneyGainPerLevel: 1.55,
|
HacknetNodeMoneyGainPerLevel: 1.55,
|
||||||
HacknetNodePurchaseNextMult: 1.42, //Multiplier when purchasing an additional hacknet node
|
HacknetNodePurchaseNextMult: 1.75, //Multiplier when purchasing an additional hacknet node
|
||||||
HacknetNodeUpgradeLevelMult: 1.045, //Multiplier for cost when upgrading level
|
HacknetNodeUpgradeLevelMult: 1.045, //Multiplier for cost when upgrading level
|
||||||
HacknetNodeUpgradeRamMult: 1.28, //Multiplier for cost when upgrading RAM
|
HacknetNodeUpgradeRamMult: 1.28, //Multiplier for cost when upgrading RAM
|
||||||
HacknetNodeUpgradeCoreMult: 1.49, //Multiplier for cost when buying another core
|
HacknetNodeUpgradeCoreMult: 1.49, //Multiplier for cost when buying another core
|
||||||
@ -38,7 +38,7 @@ CONSTANTS = {
|
|||||||
|
|
||||||
/* Script related things */
|
/* Script related things */
|
||||||
//Time (ms) it takes to run one operation in Netscript.
|
//Time (ms) it takes to run one operation in Netscript.
|
||||||
CodeInstructionRunTime: 200,
|
CodeInstructionRunTime: 100,
|
||||||
|
|
||||||
//RAM Costs for different commands
|
//RAM Costs for different commands
|
||||||
ScriptWhileRamCost: 0.2,
|
ScriptWhileRamCost: 0.2,
|
||||||
@ -82,8 +82,8 @@ CONSTANTS = {
|
|||||||
|
|
||||||
//Augmentation Constants
|
//Augmentation Constants
|
||||||
AugmentationCostMultiplier: 5, //Used for balancing costs without having to readjust every Augmentation cost
|
AugmentationCostMultiplier: 5, //Used for balancing costs without having to readjust every Augmentation cost
|
||||||
AugmentationRepMultiplier: 1.75, //Used for balancing rep cost without having to readjust every value
|
AugmentationRepMultiplier: 2.5, //Used for balancing rep cost without having to readjust every value
|
||||||
MultipleAugMultiplier: 1.75,
|
MultipleAugMultiplier: 1.9,
|
||||||
|
|
||||||
//Maximum number of log entries for a script
|
//Maximum number of log entries for a script
|
||||||
MaxLogCapacity: 50,
|
MaxLogCapacity: 50,
|
||||||
@ -91,6 +91,18 @@ CONSTANTS = {
|
|||||||
//How much a TOR router costs
|
//How much a TOR router costs
|
||||||
TorRouterCost: 200000,
|
TorRouterCost: 200000,
|
||||||
|
|
||||||
|
//Infiltration constants
|
||||||
|
InfiltrationBribeBaseAmount: 100000, //Amount per clearance level
|
||||||
|
InfiltrationMoneyValue: 2000, //Convert "secret" value to money
|
||||||
|
|
||||||
|
//Stock market constants
|
||||||
|
WSEAccountCost: 50000000,
|
||||||
|
TIXAPICost: 1000000000,
|
||||||
|
StockMarketCommission: 100000,
|
||||||
|
|
||||||
|
//Hospital/Health
|
||||||
|
HospitalCostPerHp: 75000,
|
||||||
|
|
||||||
MillisecondsPer20Hours: 72000000,
|
MillisecondsPer20Hours: 72000000,
|
||||||
GameCyclesPer20Hours: 72000000 / 200,
|
GameCyclesPer20Hours: 72000000 / 200,
|
||||||
|
|
||||||
@ -140,8 +152,8 @@ CONSTANTS = {
|
|||||||
ClassGymDexterity: "training your dexterity at a gym",
|
ClassGymDexterity: "training your dexterity at a gym",
|
||||||
ClassGymAgility: "training your agility at a gym",
|
ClassGymAgility: "training your agility at a gym",
|
||||||
|
|
||||||
ClassDataStructuresBaseCost: 6,
|
ClassDataStructuresBaseCost: 10,
|
||||||
ClassNetworksBaseCost: 30,
|
ClassNetworksBaseCost: 32,
|
||||||
ClassAlgorithmsBaseCost: 120,
|
ClassAlgorithmsBaseCost: 120,
|
||||||
ClassManagementBaseCost: 60,
|
ClassManagementBaseCost: 60,
|
||||||
ClassLeadershipBaseCost: 120,
|
ClassLeadershipBaseCost: 120,
|
||||||
@ -384,8 +396,8 @@ CONSTANTS = {
|
|||||||
"<i>print(x)</i> <br>Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command ). <br>" +
|
"<i>print(x)</i> <br>Prints a value or a variable to the scripts logs (which can be viewed with the 'tail [script]' terminal command ). <br>" +
|
||||||
"WARNING: Do NOT call print() on an array. The script will crash. You can, however, call print on single elements of an array. For example, if " +
|
"WARNING: Do NOT call print() on an array. The script will crash. You can, however, call print on single elements of an array. For example, if " +
|
||||||
"the variable 'a' is an array, then do NOT call print(a), but it is okay to call print(a[0]).<br><br>" +
|
"the variable 'a' is an array, then do NOT call print(a), but it is okay to call print(a[0]).<br><br>" +
|
||||||
"<i>scan()</i><br>Returns an array containing the hostnames of all servers that are one node away from the current server. The " +
|
"<i>scan(hostname/ip)</i><br>Returns an array containing the hostnames of all servers that are one node away from the specified server. " +
|
||||||
"current server is the server on which the script that calls this function is running. The hostnames are strings.<br><br>" +
|
"The argument must be a string containing the IP or hostname of the target server. The hostnames in the returned array are strings.<br><br>" +
|
||||||
"<i>nuke(hostname/ip)</i><br>Run NUKE.exe on the target server. NUKE.exe must exist on your home computer. Does NOT work while offline <br> Example: nuke('foodnstuff'); <br><br>" +
|
"<i>nuke(hostname/ip)</i><br>Run NUKE.exe on the target server. NUKE.exe must exist on your home computer. Does NOT work while offline <br> Example: nuke('foodnstuff'); <br><br>" +
|
||||||
"<i>brutessh(hostname/ip)</i><br>Run BruteSSH.exe on the target server. BruteSSH.exe must exist on your home computer. Does NOT work while offline <br> Example: brutessh('foodnstuff');<br><br>" +
|
"<i>brutessh(hostname/ip)</i><br>Run BruteSSH.exe on the target server. BruteSSH.exe must exist on your home computer. Does NOT work while offline <br> Example: brutessh('foodnstuff');<br><br>" +
|
||||||
"<i>ftpcrack(hostname/ip)</i><br>Run FTPCrack.exe on the target server. FTPCrack.exe must exist on your home computer. Does NOT work while offline <br> Example: ftpcrack('foodnstuff');<br><br>" +
|
"<i>ftpcrack(hostname/ip)</i><br>Run FTPCrack.exe on the target server. FTPCrack.exe must exist on your home computer. Does NOT work while offline <br> Example: ftpcrack('foodnstuff');<br><br>" +
|
||||||
@ -566,7 +578,7 @@ CONSTANTS = {
|
|||||||
"From the travel agency you can travel to any other city. Doing so costs money. <br><br>" +
|
"From the travel agency you can travel to any other city. Doing so costs money. <br><br>" +
|
||||||
"Each city has its own set of companies and unique locations. Also, certain content is only available to you " +
|
"Each city has its own set of companies and unique locations. Also, certain content is only available to you " +
|
||||||
"if you are in certain cities, so get exploring!",
|
"if you are in certain cities, so get exploring!",
|
||||||
TutorialJobsText: "Hacking is not the only way to gain money and experience! Located around the world are many " +
|
TutorialCompaniesText: "Hacking is not the only way to gain money and experience! Located around the world are many " +
|
||||||
"different companies which you can work for. By working for a company you can earn money, " +
|
"different companies which you can work for. By working for a company you can earn money, " +
|
||||||
"train your various labor skills, and unlock powerful passive perks. <br><br> " +
|
"train your various labor skills, and unlock powerful passive perks. <br><br> " +
|
||||||
"To apply for a job, visit the company you want to work for through the 'World' menu. The company " +
|
"To apply for a job, visit the company you want to work for through the 'World' menu. The company " +
|
||||||
@ -587,7 +599,26 @@ CONSTANTS = {
|
|||||||
" be penalized if you cancel a work shift early. However, these positions pay less than full-time positions.<br><br>" +
|
" be penalized if you cancel a work shift early. However, these positions pay less than full-time positions.<br><br>" +
|
||||||
"As you continue to work at a company, you will gain more and more reputation at that company. When your stats " +
|
"As you continue to work at a company, you will gain more and more reputation at that company. When your stats " +
|
||||||
"and reputation are high enough, you can get a promotion. You can apply for a promotion on the company page, just like " +
|
"and reputation are high enough, you can get a promotion. You can apply for a promotion on the company page, just like " +
|
||||||
"you applied for the job originally. Higher positions at a company provide better salaries and stat gains.",
|
"you applied for the job originally. Higher positions at a company provide better salaries and stat gains.<br><br>" +
|
||||||
|
"<h1>Infiltrating Companies</h1><br>" +
|
||||||
|
"Many companies have facilities that you can attempt to infiltrate. By infiltrating, you can steal classified company secrets " +
|
||||||
|
"and then sell these for money or for faction reputation. To try and infiltrate a company, visit a company through the " +
|
||||||
|
"'World' menu. There will be an option that says 'Infiltrate Company'. <br><br>" +
|
||||||
|
"When infiltrating a company, you must progress through clearance levels in the facility. Every clearance level " +
|
||||||
|
"has some form of security that you must get past. There are several forms of security, ranging from high-tech security systems to " +
|
||||||
|
"armed guards. For each form of security, there are a variety of options that you can choose to try and bypass the security. Examples " +
|
||||||
|
"include hacking the security, engaging in combat, assassination, or sneaking past the security. The chance to succeed for each option " +
|
||||||
|
"is determined in part by your stats. So, for example, trying to hack the security system relies on your hacking skill, whereas trying to " +
|
||||||
|
"sneak past the security relies on your agility level.<br><br>" +
|
||||||
|
"The facility has a 'security level' that affects your chance of success when trying to get past a clearance level. " +
|
||||||
|
"Every time you advance to the next clearance level, the facility's security level will increase by a fixed amount. Furthermore " +
|
||||||
|
"the options you choose and whether you succeed or fail will affect the security level as well. For example, " +
|
||||||
|
"if you try to kill a security guard and fail, the security level will increase by a lot. If you choose to sneak past " +
|
||||||
|
"security and succeed, the security level will not increase at all. <br><br>" +
|
||||||
|
"Every 5 clearance levels, you will steal classified company secrets that can be sold for money or faction reputation. However, " +
|
||||||
|
"in order to sell these secrets you must successfully escape the facility using the 'Escape' option. Furthermore, companies have " +
|
||||||
|
"a max clearance level. If you reach the max clearance level you will automatically escape the facility with all of your " +
|
||||||
|
"stolen secrets.<br><br>",
|
||||||
TutorialFactionsText: "Throughout the game you may receive invitations from factions. There are many different factions, and each faction " +
|
TutorialFactionsText: "Throughout the game you may receive invitations from factions. There are many different factions, and each faction " +
|
||||||
"has different criteria for determining its potential members. Joining a faction and furthering its cause is crucial " +
|
"has different criteria for determining its potential members. Joining a faction and furthering its cause is crucial " +
|
||||||
"to progressing in the game and unlocking endgame content. <br><br> " +
|
"to progressing in the game and unlocking endgame content. <br><br> " +
|
||||||
@ -603,13 +634,17 @@ CONSTANTS = {
|
|||||||
"upgrade your abilities. The Augmentations that are available to unlock vary from faction to faction.",
|
"upgrade your abilities. The Augmentations that are available to unlock vary from faction to faction.",
|
||||||
TutorialAugmentationsText: "Advances in science and medicine have lead to powerful new technologies that allow people to augment themselves " +
|
TutorialAugmentationsText: "Advances in science and medicine have lead to powerful new technologies that allow people to augment themselves " +
|
||||||
"beyond normal human capabilities. There are many different types of Augmentations, ranging from cybernetic to " +
|
"beyond normal human capabilities. There are many different types of Augmentations, ranging from cybernetic to " +
|
||||||
"genetic to biological. Acquiring these Augmentations enhances the user's physical and mental faculties. <br>" +
|
"genetic to biological. Acquiring these Augmentations enhances the user's physical and mental faculties. <br><br>" +
|
||||||
"Because of how powerful these Augmentations are, the technology behind them is kept private and secret by the " +
|
"Because of how powerful these Augmentations are, the technology behind them is kept private and secret by the " +
|
||||||
"corporations and organizations that create them. Therefore, the only way for the player to obtain Augmentations is " +
|
"corporations and organizations that create them. Therefore, the only way for the player to obtain Augmentations is " +
|
||||||
"through Factions. After joining a Faction and earning enough reputation in it, you will be able to purchase " +
|
"through Factions. After joining a Faction and earning enough reputation in it, you will be able to purchase " +
|
||||||
"its Augmentations. Different Factions offer different Augmentations. Augmentations must be purchased in order to be installed, " +
|
"its Augmentations. Different Factions offer different Augmentations. Augmentations must be purchased in order to be installed, " +
|
||||||
"and they are fairly expensive. <br><br>" +
|
"and they are fairly expensive. <br><br>" +
|
||||||
"Unfortunately, installing an Augmentation has side effects. You will lose most of the progress you've made, including your " +
|
"When you purchase an Augmentation, the price of purchasing another Augmentation increases by 90%. This multiplier stacks for " +
|
||||||
|
"each Augmentation you purchase. You will not gain the benefits of your purchased Augmentations until you install them. You can " +
|
||||||
|
"choose to install Augmentations through the 'Augmentations' menu tab. Once you install your purchased Augmentations, " +
|
||||||
|
"their costs are reset back to the original price.<br><br>" +
|
||||||
|
"Unfortunately, installing Augmentations has side effects. You will lose most of the progress you've made, including your " +
|
||||||
"skills, stats, and money. You will have to start over, but you will have all of the Augmentations you have installed to " +
|
"skills, stats, and money. You will have to start over, but you will have all of the Augmentations you have installed to " +
|
||||||
"help you progress. <br><br> " +
|
"help you progress. <br><br> " +
|
||||||
"To summarize, here is a list of everything you will LOSE when you install an Augmentation: <br><br>" +
|
"To summarize, here is a list of everything you will LOSE when you install an Augmentation: <br><br>" +
|
||||||
@ -621,13 +656,31 @@ CONSTANTS = {
|
|||||||
"Company/faction reputation<br>" +
|
"Company/faction reputation<br>" +
|
||||||
"Jobs and Faction memberships<br>" +
|
"Jobs and Faction memberships<br>" +
|
||||||
"Programs<br>" +
|
"Programs<br>" +
|
||||||
|
"Stocks<br>" +
|
||||||
"TOR router<br><br>" +
|
"TOR router<br><br>" +
|
||||||
"Here is everything you will KEEP when you install an Augmentation: <br><br>" +
|
"Here is everything you will KEEP when you install an Augmentation: <br><br>" +
|
||||||
"Every Augmentation you have installed<br>" +
|
"Every Augmentation you have installed<br>" +
|
||||||
"Scripts on your home computer<br>" +
|
"Scripts on your home computer<br>" +
|
||||||
"RAM Upgrades on your home computer",
|
"RAM Upgrades on your home computer<br>" +
|
||||||
|
"World Stock Exchange account and TIX API Access<br>",
|
||||||
|
|
||||||
Changelog:
|
Changelog:
|
||||||
|
"v0.24.0<br>" +
|
||||||
|
"-Players now have HP, which is displayed in the top right. To regain HP, visit the hospital. Currently " +
|
||||||
|
"the only way to lose HP is through infiltration<br>" +
|
||||||
|
"-Infiltration - Attempt to infiltrate a company and steal their classified secrets. See 'Companies' documentation for more details<br>" +
|
||||||
|
"-Stock Market - Added the World Stock Exchange (WSE), a brokerage that lets you buy/sell stocks. To begin trading you must first purchase " +
|
||||||
|
"an account. A WSE account will persist even after resetting by installing Augmentations. How the stock market works should hopefully be " +
|
||||||
|
"self explanatory. There is no documentation about it currently, I will add some later. NOTE: Stock prices only change when the game is open. " +
|
||||||
|
"The Stock Market is reset when installing Augmentations, which means you will lose all your stocks<br>" +
|
||||||
|
"-Decreased money gained from hacking by ~12%<br>" +
|
||||||
|
"-Increased reputation required for all Augmentations by ~40%<br>" +
|
||||||
|
"-Cost increase when purchasing multiple augmentations increased from 75% to 90%<br>" +
|
||||||
|
"-Added basic variable runtime to Netscript operations. Basic commands run in 100ms. Any function incurs another 100ms in runtime (200ms total). " +
|
||||||
|
"Any function that starts with getServer incurs another 100ms runtime (300ms total). exec() and scp() require 400ms total. <br>" +
|
||||||
|
"-Slightly reduced the amount of experience gained from hacking<br><br>" +
|
||||||
|
"v0.23.1<br>" +
|
||||||
|
"-scan() Netscript function now takes a single argument representing the server from which to scan. <br><br>" +
|
||||||
"v0.23.0<br>" +
|
"v0.23.0<br>" +
|
||||||
"-You can now purchase multiple Augmentations in a run. When you purchase an Augmentation you will lose money equal to the price " +
|
"-You can now purchase multiple Augmentations in a run. When you purchase an Augmentation you will lose money equal to the price " +
|
||||||
"and then the cost of purchasing another Augmentation during this run will be increased by 75%. You do not gain the benefits " +
|
"and then the cost of purchasing another Augmentation during this run will be increased by 75%. You do not gain the benefits " +
|
||||||
@ -820,17 +873,28 @@ CONSTANTS = {
|
|||||||
"-You can now see what an Augmentation does and its price even while its locked<br><br>",
|
"-You can now see what an Augmentation does and its price even while its locked<br><br>",
|
||||||
|
|
||||||
LatestUpdate:
|
LatestUpdate:
|
||||||
"v0.23.0<br>" +
|
"v0.24.1<br>" +
|
||||||
"-You can now purchase multiple Augmentations in a run. When you purchase an Augmentation you will lose money equal to the price " +
|
"-Adjusted cost of upgrading home computer RAM. Should be a little cheaper for the first few upgrades (up to ~64GB), and " +
|
||||||
"and then the cost of purchasing another Augmentation during this run will be increased by 75%. You do not gain the benefits " +
|
"then will start being more expensive than before. High RAM upgrades should now be significantly more expensive than before.<br>" +
|
||||||
"of your purchased Augmentations until you install them. This installation can be done through the 'Augmentation' tab. When " +
|
"-Very slightly lowered the starting money available on most mid-game and end-game servers (servers with required hacking level " +
|
||||||
"you install your Augmentations, your game will reset like before. <br>" +
|
"greater than 200) by about 10-15%<br>" +
|
||||||
"-Reputation needed to gain a favor from faction decreased from 7500 to 6500<br>" +
|
"-Rebalanced company/company position reputation gains and requirements<br>" +
|
||||||
"-Reputation needed to gain a favor from company increased from 5000 to 6000<br>" +
|
"-Studying at a university now gives slightly more EXP and early jobs give slightly less EXP<br>" +
|
||||||
"-Reputation cost of all Augmentations increased by 16%<br>" +
|
"-Significantly increased cost multiplier for purchasing additional Hacknet Nodes<br>" +
|
||||||
"-Higher positions at companies now grant slightly more reputation for working<br>" +
|
"-Updated Faction descriptions<br>" +
|
||||||
"-Added getServerMaxMoney() Netscript function<br>" +
|
"-'top' Terminal command implemented courtesy of Github user LTCNugget<br><br>" +
|
||||||
"-Added scan() Netscript function<br>" +
|
"v0.24.0<br>" +
|
||||||
"-Added getServerNumPortsRequired() Netscript function<br>" +
|
"-Players now have HP, which is displayed in the top right. To regain HP, visit the hospital. Currently " +
|
||||||
"-There is now no additional RAM cost incurred when multithreading a script<br><br>",
|
"the only way to lose HP is through infiltration<br>" +
|
||||||
|
"-Infiltration - Attempt to infiltrate a company and steal their classified secrets. See 'Companies' documentation for more details<br>" +
|
||||||
|
"-Stock Market - Added the World Stock Exchange (WSE), a brokerage that lets you buy/sell stocks. To begin trading you must first purchase " +
|
||||||
|
"an account. A WSE account will persist even after resetting by installing Augmentations. How the stock market works should hopefully be " +
|
||||||
|
"self explanatory. There is no documentation about it currently, I will add some later. NOTE: Stock prices only change when the game is open. " +
|
||||||
|
"The Stock Market is reset when installing Augmentations, which means you will lose all your stocks<br>" +
|
||||||
|
"-Decreased money gained from hacking by ~12%<br>" +
|
||||||
|
"-Increased reputation required for all Augmentations by ~40%<br>" +
|
||||||
|
"-Cost increase when purchasing multiple augmentations increased from 75% to 90%<br>" +
|
||||||
|
"-Added basic variable runtime to Netscript operations. Basic commands run in 100ms. Any function incurs another 100ms in runtime (200ms total). " +
|
||||||
|
"Any function that starts with getServer incurs another 100ms runtime (300ms total). exec() and scp() require 400ms total. <br>" +
|
||||||
|
"-Slightly reduced the amount of experience gained from hacking<br>",
|
||||||
}
|
}
|
||||||
|
@ -982,6 +982,12 @@ displayFactionAugmentations = function(factionName) {
|
|||||||
owned = true;
|
owned = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (var j = 0; j < Player.augmentations.length; ++j) {
|
||||||
|
if (Player.augmentations[j].name == aug.name) {
|
||||||
|
owned = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var item = document.createElement("li");
|
var item = document.createElement("li");
|
||||||
var span = document.createElement("span");
|
var span = document.createElement("span");
|
||||||
var aDiv = document.createElement("div");
|
var aDiv = document.createElement("div");
|
||||||
|
@ -3,20 +3,14 @@
|
|||||||
FactionInfo = {
|
FactionInfo = {
|
||||||
//Endgame
|
//Endgame
|
||||||
IlluminatiInfo: "Humanity never changes. No matter how civilized society becomes, it will eventually fall back " +
|
IlluminatiInfo: "Humanity never changes. No matter how civilized society becomes, it will eventually fall back " +
|
||||||
"into chaos. And out of this chaos, we will lead them to order. <br><br>" +
|
"into chaos. And from this chaos, we are the Invisible hand that guides them to order. ",
|
||||||
"We are the Invisible Hand. We are forever.",
|
|
||||||
|
|
||||||
DaedalusInfo: "If all of human " +
|
DaedalusInfo: "Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.",
|
||||||
"history is but a single lesson, it is that the individual may be remembered, but the organization " +
|
|
||||||
"persists and thrives. A single artist, a single general, a single hero or a single villain may all die, " +
|
CovenantInfo: "Surrender yourself. Give up your empty individuality to become part of something great, something eternal. " +
|
||||||
"but it is impossible to kill a people, a nation, an idea -- except when that idea has grown weak and is " +
|
|
||||||
"overpowered by one that is stronger. -- The Doctrine of the Mighty<br><br>" +
|
|
||||||
"Surrender yourself. Give up your empty individuality to become part of something great, something eternal. " +
|
|
||||||
"Become a slave. Submit your mind, body, and soul. Only then can you set yourself free.<br><br> " +
|
"Become a slave. Submit your mind, body, and soul. Only then can you set yourself free.<br><br> " +
|
||||||
"Only then can you discover immortality.",
|
"Only then can you discover immortality.",
|
||||||
|
|
||||||
CovenantInfo: "Yesterday we obeyed kings and bent our necks to emperors. Today we kneel only to truth.",
|
|
||||||
|
|
||||||
//Megacorporations, each forms its own faction
|
//Megacorporations, each forms its own faction
|
||||||
ECorpInfo: "ECorp's mission is simple: to connect the world of today with the technology of tomorrow. " +
|
ECorpInfo: "ECorp's mission is simple: to connect the world of today with the technology of tomorrow. " +
|
||||||
"With our wide range of Internet-related software and commercial hardware, ECorp makes the world's " +
|
"With our wide range of Internet-related software and commercial hardware, ECorp makes the world's " +
|
||||||
@ -51,12 +45,12 @@ FactionInfo = {
|
|||||||
"It's all transformed into bits, stored in bits, communicated through bits. It’s impossible for any person " +
|
"It's all transformed into bits, stored in bits, communicated through bits. It’s impossible for any person " +
|
||||||
"to move, to live, to operate at any level without the use of bits. " +
|
"to move, to live, to operate at any level without the use of bits. " +
|
||||||
"And when a person moves, lives, and operates, they leave behind their bits, mere traces of seemingly " +
|
"And when a person moves, lives, and operates, they leave behind their bits, mere traces of seemingly " +
|
||||||
"meaningly fragments of information. But these bits can be reconstructed. Transformed. Used.<br><br>" +
|
"meaningless fragments of information. But these bits can be reconstructed. Transformed. Used.<br><br>" +
|
||||||
"Those who run the bits, run the world",
|
"Those who run the bits, run the world",
|
||||||
|
|
||||||
|
|
||||||
BlackHandInfo: "This is real freedom, freedom to own property, make a profit, make your life. " +
|
BlackHandInfo: "The world, so afraid of strong government, now has no government. Only power - Digital power. Financial power. " +
|
||||||
"The West, so afraid of strong government, now has no government. Only financial power. " +
|
"Technological power. " +
|
||||||
"And those at the top rule with an invisible hand. They built a society where the rich get richer, " +
|
"And those at the top rule with an invisible hand. They built a society where the rich get richer, " +
|
||||||
"and everyone else suffers.<br><br>" +
|
"and everyone else suffers.<br><br>" +
|
||||||
"So much pain. So many lives. Their darkness must end.",
|
"So much pain. So many lives. Their darkness must end.",
|
||||||
@ -113,7 +107,10 @@ FactionInfo = {
|
|||||||
|
|
||||||
TheSyndicateInfo: "Honor holds you back",
|
TheSyndicateInfo: "Honor holds you back",
|
||||||
|
|
||||||
SilhouetteInfo: "Corporations are so big, you don't even know who you're working for. That's terror. Terror built into the system.",
|
SilhouetteInfo: "Corporations have filled the void of power left behind by the collapse of Western government. The issue is they've become so big " +
|
||||||
|
"that you don't know who they're working for. And if you're employed at one of these corporations, you don't even know who you're working " +
|
||||||
|
"for. <br><br>" +
|
||||||
|
"That's terror. Terror, fear, and corruption. All born into the system, all propagated by the system.",
|
||||||
|
|
||||||
TetradsInfo: "Following the Mandate of Heaven and Carrying out the Way",
|
TetradsInfo: "Following the Mandate of Heaven and Carrying out the Way",
|
||||||
|
|
||||||
|
796
src/Infiltration.js
Normal file
796
src/Infiltration.js
Normal file
@ -0,0 +1,796 @@
|
|||||||
|
/* Infiltration.js
|
||||||
|
*
|
||||||
|
* Kill
|
||||||
|
* Knockout (nonlethal)
|
||||||
|
* Stealth Knockout (nonlethal)
|
||||||
|
* Assassinate
|
||||||
|
*
|
||||||
|
* Hack Security
|
||||||
|
* Destroy Security
|
||||||
|
* Sneak past Security
|
||||||
|
*
|
||||||
|
* Pick the locked door
|
||||||
|
*
|
||||||
|
* Bribe security
|
||||||
|
*
|
||||||
|
* Escape
|
||||||
|
*/
|
||||||
|
|
||||||
|
InfiltrationScenarios = {
|
||||||
|
Guards: "You see an armed security guard patrolling the area.",
|
||||||
|
TechOnly: "The area is equipped with a state-of-the-art security system: cameras, laser tripwires, and sentry turrets.",
|
||||||
|
TechOrLockedDoor: "The area is equipped with a state-of-the-art security system. There is a locked door on the side of the " +
|
||||||
|
"room that can be used to bypass security.",
|
||||||
|
Bots: "You see a few security bots patrolling the area.",
|
||||||
|
}
|
||||||
|
|
||||||
|
function InfiltrationInstance(companyName, startLevel, val, maxClearance, diff) {
|
||||||
|
this.companyName = companyName;
|
||||||
|
this.clearanceLevel = 0;
|
||||||
|
this.maxClearanceLevel = maxClearance;
|
||||||
|
this.securityLevel = startLevel;
|
||||||
|
this.difficulty = diff; //Affects how much security level increases. Represents a percentage
|
||||||
|
this.baseValue = val; //Base value of company secrets
|
||||||
|
this.secretsStolen = []; //Numbers representing value of stolen secrets
|
||||||
|
|
||||||
|
this.hackingExpGained = 0;
|
||||||
|
this.strExpGained = 0;
|
||||||
|
this.defExpGained = 0;
|
||||||
|
this.dexExpGained = 0;
|
||||||
|
this.agiExpGained = 0;
|
||||||
|
this.chaExpGained = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainHackingExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.hackingExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainStrengthExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.strExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainDefenseExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.defExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainDexterityExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.dexExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainAgilityExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.agiExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfiltrationInstance.prototype.gainCharismaExp = function(amt) {
|
||||||
|
if (isNaN(amt)) {return;}
|
||||||
|
this.chaExpGained += amt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function beginInfiltration(companyName, startLevel, val, maxClearance, diff) {
|
||||||
|
var inst = new InfiltrationInstance(companyName, startLevel, val, maxClearance, diff);
|
||||||
|
clearInfiltrationStatusText();
|
||||||
|
nextInfiltrationLevel(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
function endInfiltration(inst, success) {
|
||||||
|
if (success) {
|
||||||
|
infiltrationBoxCreate(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
clearEventListeners("infiltration-kill");
|
||||||
|
clearEventListeners("infiltration-knockout");
|
||||||
|
clearEventListeners("infiltration-stealthknockout");
|
||||||
|
clearEventListeners("infiltration-assassinate");
|
||||||
|
clearEventListeners("infiltration-hacksecurity");
|
||||||
|
clearEventListeners("infiltration-destroysecurity");
|
||||||
|
clearEventListeners("infiltration-sneak");
|
||||||
|
clearEventListeners("infiltration-pickdoor");
|
||||||
|
clearEventListeners("infiltration-bribe");
|
||||||
|
clearEventListeners("infiltration-escape");
|
||||||
|
|
||||||
|
Engine.loadWorldContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextInfiltrationLevel(inst) {
|
||||||
|
++inst.clearanceLevel;
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
|
||||||
|
//Buttons
|
||||||
|
var killButton = clearEventListeners("infiltration-kill");
|
||||||
|
var knockoutButton = clearEventListeners("infiltration-knockout");
|
||||||
|
var stealthKnockoutButton = clearEventListeners("infiltration-stealthknockout");
|
||||||
|
var assassinateButton = clearEventListeners("infiltration-assassinate");
|
||||||
|
var hackSecurityButton = clearEventListeners("infiltration-hacksecurity");
|
||||||
|
var destroySecurityButton = clearEventListeners("infiltration-destroysecurity");
|
||||||
|
var sneakButton = clearEventListeners("infiltration-sneak");
|
||||||
|
var pickdoorButton = clearEventListeners("infiltration-pickdoor");
|
||||||
|
var bribeButton = clearEventListeners("infiltration-bribe");
|
||||||
|
var escapeButton = clearEventListeners("infiltration-escape");
|
||||||
|
|
||||||
|
killButton.style.display = "none";
|
||||||
|
knockoutButton.style.display = "none";
|
||||||
|
stealthKnockoutButton.style.display = "none";
|
||||||
|
assassinateButton.style.display = "none";
|
||||||
|
hackSecurityButton.style.display = "none";
|
||||||
|
destroySecurityButton.style.display = "none";
|
||||||
|
sneakButton.style.display = "none";
|
||||||
|
pickdoorButton.style.display = "none";
|
||||||
|
bribeButton.style.display = "none";
|
||||||
|
escapeButton.style.display = "none";
|
||||||
|
|
||||||
|
var rand = getRandomInt(0, 5); //This needs to change if more scenarios are added
|
||||||
|
var scenario = null;
|
||||||
|
switch (rand) {
|
||||||
|
case 1:
|
||||||
|
scenario = InfiltrationScenarios.TechOnly;
|
||||||
|
hackSecurityButton.style.display = "block";
|
||||||
|
destroySecurityButton.style.display = "block";
|
||||||
|
sneakButton.style.display = "block";
|
||||||
|
escapeButton.style.display = "block";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
scenario = InfiltrationScenarios.TechOrLockedDoor;
|
||||||
|
hackSecurityButton.style.display = "block";
|
||||||
|
destroySecurityButton.style.display = "block";
|
||||||
|
sneakButton.style.display = "block";
|
||||||
|
pickdoorButton.style.display = "block";
|
||||||
|
escapeButton.style.display = "block";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
scenario = InfiltrationScenarios.Bots;
|
||||||
|
killButton.style.display = "block";
|
||||||
|
killButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationKill(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY killed the security bots! Unfortunately you alerted the " +
|
||||||
|
"rest of the facility's security. The facility's security " +
|
||||||
|
"level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
Player.karma -= 1;
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
var dmgTaken = Math.max(1, Math.round(1.5 * inst.securityLevel / Player.defense));
|
||||||
|
writeInfiltrationStatusText("You FAILED to kill the security bots. The bots fight back " +
|
||||||
|
"and raise the alarm! You take " + dmgTaken + " damage and " +
|
||||||
|
"the facility's security level increases by " +
|
||||||
|
formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
if (Player.takeDamage(dmgTaken)) {
|
||||||
|
endInfiltration(inst, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
});
|
||||||
|
assassinateButton.style.display = "block";
|
||||||
|
assassinateButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationAssassinate(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY assassinated the security bots without being detected!");
|
||||||
|
Player.karma -= 1;
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to assassinate the security bots. The bots have not detected " +
|
||||||
|
"you but are now more alert for an intruder. The facility's security level " +
|
||||||
|
"has increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
});
|
||||||
|
hackSecurityButton.style.display = "block";
|
||||||
|
sneakButton.style.display = "block";
|
||||||
|
escapeButton.style.display = "block";
|
||||||
|
break;
|
||||||
|
default: //0, 4-5
|
||||||
|
scenario = InfiltrationScenarios.Guards;
|
||||||
|
killButton.style.display = "block";
|
||||||
|
killButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationKill(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY killed the security guard! Unfortunately you alerted the " +
|
||||||
|
"rest of the facility's security. The facility's security " +
|
||||||
|
"level has increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
Player.karma -= 3;
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
var dmgTaken = Math.max(1, Math.round(inst.securityLevel / Player.defense));
|
||||||
|
writeInfiltrationStatusText("You FAILED to kill the security guard. The guard fights back " +
|
||||||
|
"and raises the alarm! You take " + dmgTaken + " damage and " +
|
||||||
|
"the facility's security level has increased by " +
|
||||||
|
formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
if (Player.takeDamage(dmgTaken)) {
|
||||||
|
endInfiltration(inst, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
});
|
||||||
|
knockoutButton.style.display = "block";
|
||||||
|
stealthKnockoutButton.style.display = "block";
|
||||||
|
assassinateButton.style.display = "block";
|
||||||
|
assassinateButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationAssassinate(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY assassinated the security guard without being detected!");
|
||||||
|
Player.karma -= 3;
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to assassinate the security guard. The guard has not detected " +
|
||||||
|
"you but is now more alert for an intruder. The facility's security level " +
|
||||||
|
"has increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
});
|
||||||
|
sneakButton.style.display = "block";
|
||||||
|
bribeButton.style.display = "block";
|
||||||
|
escapeButton.style.display = "block";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
knockoutButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationKnockout(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY knocked out the security guard! " +
|
||||||
|
"Unfortunately you made a lot of noise and alerted other security.");
|
||||||
|
writeInfiltrationStatusText("The facility's security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
var dmgTaken = Math.max(1, Math.round(inst.securityLevel / Player.defense));
|
||||||
|
writeInfiltrationStatusText("You FAILED to knockout the security guard. The guard " +
|
||||||
|
"raises the alarm and fights back! You take " + dmgTaken + " damage and " +
|
||||||
|
"the facility's security level increases by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
if (Player.takeDamage(dmgTaken)) {
|
||||||
|
endInfiltration(inst, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
stealthKnockoutButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationStealthKnockout(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY knocked out the security guard without making " +
|
||||||
|
"any noise!");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
var dmgTaken = Math.max(1, Math.round(inst.securityLevel / Player.defense));
|
||||||
|
writeInfiltrationStatusText("You FAILED to stealthily knockout the security guard. The guard " +
|
||||||
|
"raises the alarm and fights back! You take " + dmgTaken + " damage and " +
|
||||||
|
"the facility's security level increases by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
if (Player.takeDamage(dmgTaken)) {
|
||||||
|
endInfiltration(inst, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
hackSecurityButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationHack(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY hacked and disabled the security system!");
|
||||||
|
writeInfiltrationStatusText("The facility's security level increased by " + ((res[1]*100) - 100).toString() + "%");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to hack the security system. The facility's " +
|
||||||
|
"security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
destroySecurityButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationDestroySecurity(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY and violently destroy the security system!");
|
||||||
|
writeInfiltrationStatusText("The facility's security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to destroy the security system. The facility's " +
|
||||||
|
"security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
sneakButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationSneak(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY sneak past the security undetected!");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED and were detected while trying to sneak past security! The facility's " +
|
||||||
|
"security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
pickdoorButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationPickLockedDoor(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY pick the locked door!");
|
||||||
|
writeInfiltrationStatusText("The facility's security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to pick the locked door. The facility's security level " +
|
||||||
|
"increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
bribeButton.addEventListener("click", function() {
|
||||||
|
var bribeAmt = CONSTANTS.InfiltrationBribeBaseAmount * inst.clearanceLevel;
|
||||||
|
if (Player.money < bribeAmt) {
|
||||||
|
writeInfiltrationStatusText("You do not have enough money to bribe the guard. " +
|
||||||
|
"You need $" + bribeAmt);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var res = attemptInfiltrationBribe(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY bribed a guard to let you through " +
|
||||||
|
"to the next clearance level for $" + bribeAmt);
|
||||||
|
Player.loseMoney(bribeAmt);
|
||||||
|
endInfiltrationLevel(inst);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to bribe a guard! The guard is alerting " +
|
||||||
|
"other security guards about your presence! The facility's " +
|
||||||
|
"security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
escapeButton.addEventListener("click", function() {
|
||||||
|
var res = attemptInfiltrationEscape(inst);
|
||||||
|
if (res[0]) {
|
||||||
|
writeInfiltrationStatusText("You SUCCESSFULLY escape from the facility with the stolen classified " +
|
||||||
|
"documents and company secrets!");
|
||||||
|
endInfiltration(inst, true);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
writeInfiltrationStatusText("You FAILED to escape from the facility. You took 1 damage. The facility's " +
|
||||||
|
"security level increased by " + formatNumber((res[1]*100)-100, 2).toString() + "%");
|
||||||
|
if (Player.takeDamage(1)) {
|
||||||
|
endInfiltration(inst, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
updateInfiltrationLevelText(inst);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
updateInfiltrationButtons(inst, scenario);
|
||||||
|
writeInfiltrationStatusText("");
|
||||||
|
writeInfiltrationStatusText("You are now on clearance level " + inst.clearanceLevel + ".<br>" +
|
||||||
|
scenario);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function endInfiltrationLevel(inst) {
|
||||||
|
//Check if you gained any secrets
|
||||||
|
if (inst.clearanceLevel % 5 == 0) {
|
||||||
|
var baseSecretValue = inst.baseValue * inst.clearanceLevel / 2;
|
||||||
|
var secretValue = baseSecretValue * Player.faction_rep_mult;
|
||||||
|
var secretMoneyValue = baseSecretValue * CONSTANTS.InfiltrationMoneyValue;
|
||||||
|
inst.secretsStolen.push(secretValue);
|
||||||
|
dialogBoxCreate("You found and stole a set of classified documents from the company. " +
|
||||||
|
"These classified secrets could probably be sold for money ($" +
|
||||||
|
formatNumber(secretMoneyValue, 2) + "), or they " +
|
||||||
|
"could be given to factions for reputation (" + formatNumber(secretValue, 3) + " rep)");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Increase security level based on difficulty
|
||||||
|
inst.securityLevel *= (1 + (inst.difficulty / 100));
|
||||||
|
writeInfiltrationStatusText("You move on to the facility's next clearance level. This " +
|
||||||
|
"clearance level has " + inst.difficulty + "% higher security");
|
||||||
|
|
||||||
|
//If this is max level, force endInfiltration
|
||||||
|
if (inst.clearanceLevel >= inst.maxClearanceLevel) {
|
||||||
|
endInfiltration(inst, true);
|
||||||
|
} else {
|
||||||
|
nextInfiltrationLevel(inst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeInfiltrationStatusText(txt) {
|
||||||
|
var statusTxt = document.getElementById("infiltration-status-text");
|
||||||
|
statusTxt.innerHTML += (txt + "<br>");
|
||||||
|
statusTxt.parentElement.scrollTop = statusTxt.scrollHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearInfiltrationStatusText() {
|
||||||
|
document.getElementById("infiltration-status-text").innerHTML = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateInfiltrationLevelText(inst) {
|
||||||
|
var totalValue = 0;
|
||||||
|
var totalMoneyValue = 0;
|
||||||
|
for (var i = 0; i < inst.secretsStolen.length; ++i) {
|
||||||
|
totalValue += inst.secretsStolen[i];
|
||||||
|
totalMoneyValue += inst.secretsStolen[i] * CONSTANTS.InfiltrationMoneyValue;
|
||||||
|
}
|
||||||
|
document.getElementById("infiltration-level-text").innerHTML =
|
||||||
|
"Facility name: " + inst.companyName + "<br>" +
|
||||||
|
"Clearance Level: " + inst.clearanceLevel + "<br>" +
|
||||||
|
"Security Level: " + formatNumber(inst.securityLevel, 3) + "<br><br>" +
|
||||||
|
"Total reputation value of secrets stolen: " + formatNumber(totalValue, 3) + "<br>" +
|
||||||
|
"Total monetary value of secrets stolen: $" + formatNumber(totalMoneyValue, 2) + "<br><br>" +
|
||||||
|
"Hack exp gained: " + formatNumber(inst.hackingExpGained, 3) + "<br>" +
|
||||||
|
"Str exp gained: " + formatNumber(inst.strExpGained, 3) + "<br>" +
|
||||||
|
"Def exp gained: " + formatNumber(inst.defExpGained, 3) + "<br>" +
|
||||||
|
"Dex exp gained: " + formatNumber(inst.dexExpGained, 3) + "<br>" +
|
||||||
|
"Agi exp gained: " + formatNumber(inst.agiExpGained, 3) + "<br>" +
|
||||||
|
"Cha exp gained: " + formatNumber(inst.chaExpGained, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateInfiltrationButtons(inst, scenario) {
|
||||||
|
var killChance = getInfiltrationKillChance(inst);
|
||||||
|
var knockoutChance = getInfiltrationKnockoutChance(inst);
|
||||||
|
var stealthKnockoutChance = getInfiltrationStealthKnockoutChance(inst);
|
||||||
|
var assassinateChance = getInfiltrationAssassinateChance(inst);
|
||||||
|
var destroySecurityChance = getInfiltrationDestroySecurityChance(inst);
|
||||||
|
var hackChance = getInfiltrationHackChance(inst);
|
||||||
|
var sneakChance = getInfiltrationSneakChance(inst);
|
||||||
|
var lockpickChance = getInfiltrationPickLockedDoorChance(inst);
|
||||||
|
var bribeChance = getInfiltrationBribeChance(inst);
|
||||||
|
var escapeChance = getInfiltrationEscapeChance(inst);
|
||||||
|
|
||||||
|
document.getElementById("infiltration-escape").innerHTML = "Escape" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to escape the facility with the classified secrets and " +
|
||||||
|
"documents you have stolen. You have a " +
|
||||||
|
formatNumber(escapeChance*100, 2) + "% chance of success. If you fail, " +
|
||||||
|
"the security level will increase by 5%.</span>";
|
||||||
|
|
||||||
|
switch(scenario) {
|
||||||
|
case InfiltrationScenarios.TechOrLockedDoor:
|
||||||
|
document.getElementById("infiltration-pickdoor").innerHTML = "Lockpick" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to pick the locked door. You have a " +
|
||||||
|
formatNumber(lockpickChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increased by 1%. If you fail, the " +
|
||||||
|
"security level will increase by 3%.</span>";
|
||||||
|
case InfiltrationScenarios.TechOnly:
|
||||||
|
document.getElementById("infiltration-hacksecurity").innerHTML = "Hack" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to hack and disable the security system. You have a " +
|
||||||
|
formatNumber(hackChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 3%. If you fail, " +
|
||||||
|
"the security level will increase by 5%.</span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-destroysecurity").innerHTML = "Destroy security" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to violently destroy the security system. You have a " +
|
||||||
|
formatNumber(destroySecurityChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 5%. If you fail, the " +
|
||||||
|
"security level will increase by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-sneak").innerHTML = "Sneak" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to sneak past the security system. You have a " +
|
||||||
|
formatNumber(sneakChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 8%. </span>";
|
||||||
|
break;
|
||||||
|
case InfiltrationScenarios.Bots:
|
||||||
|
document.getElementById("infiltration-kill").innerHTML = "Destroy bots" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to destroy the security bots through combat. You have a " +
|
||||||
|
formatNumber(killChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 5%. If you fail, " +
|
||||||
|
"the security level will increase by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-assassinate").innerHTML = "Assassinate bots" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to stealthily destroy the security bots through assassination. You have a " +
|
||||||
|
formatNumber(assassinateChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-hacksecurity").innerHTML = "Hack bots" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to disable the security bots by hacking them. You have a " +
|
||||||
|
formatNumber(hackChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 1%. If you fail, " +
|
||||||
|
"the security level will increase by 5%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-sneak").innerHTML = "Sneak" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to sneak past the security bots. You have a " +
|
||||||
|
formatNumber(sneakChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 8%. </span>";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case InfiltrationScenarios.Guards:
|
||||||
|
default:
|
||||||
|
document.getElementById("infiltration-kill").innerHTML = "Kill" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to kill the security guard. You have a " +
|
||||||
|
formatNumber(killChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 5%. If you fail, " +
|
||||||
|
"the security level will decrease by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-knockout").innerHTML = "Knockout" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to knockout the security guard. You have a " +
|
||||||
|
formatNumber(knockoutChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you succeed, the security level will increase by 3%. If you fail, the " +
|
||||||
|
"security level will increase by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-stealthknockout").innerHTML = "Stealth Knockout" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to stealthily knockout the security guard. You have a " +
|
||||||
|
formatNumber(stealthKnockoutChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 10%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-assassinate").innerHTML = "Assassinate" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to assassinate the security guard. You have a " +
|
||||||
|
formatNumber(assassinateChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 5%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-sneak").innerHTML = "Sneak" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to sneak past the security guard. You have a " +
|
||||||
|
formatNumber(sneakChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 8%. </span>";
|
||||||
|
|
||||||
|
document.getElementById("infiltration-bribe").innerHTML = "Bribe" +
|
||||||
|
"<span class='tooltiptext'>" +
|
||||||
|
"Attempt to bribe the security guard. You have a " +
|
||||||
|
formatNumber(bribeChance*100, 2) + "% chance of success. " +
|
||||||
|
"If you fail, the security level will increase by 15%. </span>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Kill
|
||||||
|
//Success: 5%, Failure 10%, -Karma
|
||||||
|
function attemptInfiltrationKill(inst) {
|
||||||
|
var chance = getInfiltrationKillChance(inst);
|
||||||
|
inst.gainStrengthExp(inst.securityLevel / 750) * Player.strength_exp_mult;
|
||||||
|
inst.gainDefenseExp(inst.securityLevel / 750) * Player.defense_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 750) * Player.dexterity_exp_mult;
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 750) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
inst.securityLevel *= 1.05;
|
||||||
|
return [true, 1.05];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.1;
|
||||||
|
return [false, 1.1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationKillChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.strength +
|
||||||
|
Player.dexterity +
|
||||||
|
Player.agility) / (1.5 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Knockout
|
||||||
|
//Success: 3%, Failure: 10%
|
||||||
|
function attemptInfiltrationKnockout(inst) {
|
||||||
|
var chance = getInfiltrationKnockoutChance(inst);
|
||||||
|
inst.gainStrengthExp(inst.securityLevel / 750) * Player.strength_exp_mult;
|
||||||
|
inst.gainDefenseExp(inst.securityLevel / 750) * Player.defense_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 750) * Player.dexterity_exp_mult;
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 750) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
inst.securityLevel *= 1.03;
|
||||||
|
return [true, 1.03];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.1;
|
||||||
|
return [false, 1.1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationKnockoutChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.strength +
|
||||||
|
Player.dexterity +
|
||||||
|
Player.agility) / (1.75 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Stealth knockout
|
||||||
|
//Success: 0%, Failure: 10%
|
||||||
|
function attemptInfiltrationStealthKnockout(inst) {
|
||||||
|
var chance = getInfiltrationStealthKnockoutChance(inst);
|
||||||
|
inst.gainStrengthExp(inst.securityLevel / 750) * Player.strength_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 500) * Player.dexterity_exp_mult;
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 500) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
return [true, 1];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.1;
|
||||||
|
return [false, 1.1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationStealthKnockoutChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(0.5 * Player.strength +
|
||||||
|
2 * Player.dexterity +
|
||||||
|
2 * Player.agility) / (3 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Assassination
|
||||||
|
//Success: 0%, Failure: 5%, -Karma
|
||||||
|
function attemptInfiltrationAssassinate(inst) {
|
||||||
|
var chance = getInfiltrationAssassinateChance(inst);
|
||||||
|
inst.gainStrengthExp(inst.securityLevel / 750) * Player.strength_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 500) * Player.dexterity_exp_mult;
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 500) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
return [true, 1];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.05;
|
||||||
|
return [false, 1.05];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationAssassinateChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.dexterity +
|
||||||
|
0.5 * Player.agility) / (2 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Destroy security
|
||||||
|
//Success: 5%, Failure: 10%
|
||||||
|
function attemptInfiltrationDestroySecurity(inst) {
|
||||||
|
var chance = getInfiltrationDestroySecurityChance(inst);
|
||||||
|
inst.gainStrengthExp(inst.securityLevel / 750) * Player.strength_exp_mult;
|
||||||
|
inst.gainDefenseExp(inst.securityLevel / 750) * Player.defense_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 750) * Player.dexterity_exp_mult;
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 750) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
inst.securityLevel *= 1.05;
|
||||||
|
return [true, 1.05];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.1;
|
||||||
|
return [false, 1.1];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationDestroySecurityChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.strength +
|
||||||
|
Player.dexterity +
|
||||||
|
Player.agility) / (2 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Hack security
|
||||||
|
//Success: 1%, Failure: 5%
|
||||||
|
function attemptInfiltrationHack(inst) {
|
||||||
|
var chance = getInfiltrationHackChance(inst);
|
||||||
|
inst.gainHackingExp(inst.securityLevel / 250) * Player.hacking_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
inst.securityLevel *= 1.03;
|
||||||
|
return [true, 1.03];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.05;
|
||||||
|
return [false, 1.05];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationHackChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.hacking_skill) / lvl);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sneak past security
|
||||||
|
//Success: 0%, Failure: 8%
|
||||||
|
function attemptInfiltrationSneak(inst) {
|
||||||
|
var chance = getInfiltrationSneakChance(inst);
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 250) * Player.agility_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
return [true, 1];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.08;
|
||||||
|
return [false, 1.08];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationSneakChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.agility +
|
||||||
|
0.5 * Player.dexterity) / (2 * lvl));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Pick locked door
|
||||||
|
//Success: 1%, Failure: 3%
|
||||||
|
function attemptInfiltrationPickLockedDoor(inst) {
|
||||||
|
var chance = getInfiltrationPickLockedDoorChance(inst);
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 250) * Player.dexterity_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
inst.securityLevel *= 1.01;
|
||||||
|
return [true, 1.01];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.03;
|
||||||
|
return [false, 1.03];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationPickLockedDoorChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.dexterity) / lvl);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Bribe
|
||||||
|
//Success: 0%, Failure: 15%,
|
||||||
|
function attemptInfiltrationBribe(inst) {
|
||||||
|
var chance = getInfiltrationBribeChance(inst);
|
||||||
|
inst.gainCharismaExp(inst.securityLevel / 250) * Player.charisma_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
return [true, 1];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.15;
|
||||||
|
return [false, 1.15];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationBribeChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(Player.charisma) / lvl);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Escape
|
||||||
|
//Failure: 5%
|
||||||
|
function attemptInfiltrationEscape(inst) {
|
||||||
|
var chance = getInfiltrationEscapeChance(inst);
|
||||||
|
inst.gainAgilityExp(inst.securityLevel / 500) * Player.agility_exp_mult;
|
||||||
|
inst.gainDexterityExp(inst.securityLevel / 500) * Player.dexterity_exp_mult;
|
||||||
|
if (Math.random() <= chance) {
|
||||||
|
return [true, 1];
|
||||||
|
} else {
|
||||||
|
inst.securityLevel *= 1.05;
|
||||||
|
return [false, 1.05];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInfiltrationEscapeChance(inst) {
|
||||||
|
var lvl = inst.securityLevel;
|
||||||
|
return Math.min(0.95,
|
||||||
|
(2 * Player.agility +
|
||||||
|
Player.dexterity) / lvl);
|
||||||
|
}
|
@ -647,5 +647,5 @@ function iTutorialSetText(txt) {
|
|||||||
var textBox = document.getElementById("interactive-tutorial-text");
|
var textBox = document.getElementById("interactive-tutorial-text");
|
||||||
if (textBox == null) {throw new Error("Could not find text box"); return;}
|
if (textBox == null) {throw new Error("Could not find text box"); return;}
|
||||||
textBox.innerHTML = txt;
|
textBox.innerHTML = txt;
|
||||||
|
textBox.parentElement.scrollTop = 0; // this resets scroll position
|
||||||
}
|
}
|
173
src/Location.js
173
src/Location.js
@ -80,6 +80,10 @@ Locations = {
|
|||||||
VolhavenCompuTek: "CompuTek",
|
VolhavenCompuTek: "CompuTek",
|
||||||
VolhavenMilleniumFitnessGym: "Millenium Fitness Gym",
|
VolhavenMilleniumFitnessGym: "Millenium Fitness Gym",
|
||||||
VolhavenSlums: "Volhaven Slums",
|
VolhavenSlums: "Volhaven Slums",
|
||||||
|
|
||||||
|
//Generic locations
|
||||||
|
Hospital: "Hospital",
|
||||||
|
WorldStockExchange: "World Stock Exchange",
|
||||||
}
|
}
|
||||||
|
|
||||||
displayLocationContent = function() {
|
displayLocationContent = function() {
|
||||||
@ -149,6 +153,10 @@ displayLocationContent = function() {
|
|||||||
var travelToIshima = document.getElementById("location-travel-to-ishima");
|
var travelToIshima = document.getElementById("location-travel-to-ishima");
|
||||||
var travelToVolhaven = document.getElementById("location-travel-to-volhaven");
|
var travelToVolhaven = document.getElementById("location-travel-to-volhaven");
|
||||||
|
|
||||||
|
var infiltrate = clearEventListeners("location-infiltrate");
|
||||||
|
|
||||||
|
var hospitalTreatment = document.getElementById("location-hospital-treatment");
|
||||||
|
|
||||||
var slumsDescText = document.getElementById("location-slums-description");
|
var slumsDescText = document.getElementById("location-slums-description");
|
||||||
var slumsShoplift = document.getElementById("location-slums-shoplift");
|
var slumsShoplift = document.getElementById("location-slums-shoplift");
|
||||||
var slumsMug = document.getElementById("location-slums-mug");
|
var slumsMug = document.getElementById("location-slums-mug");
|
||||||
@ -246,6 +254,10 @@ displayLocationContent = function() {
|
|||||||
travelToIshima.style.display = "none";
|
travelToIshima.style.display = "none";
|
||||||
travelToVolhaven.style.display = "none";
|
travelToVolhaven.style.display = "none";
|
||||||
|
|
||||||
|
infiltrate.style.display = "none";
|
||||||
|
|
||||||
|
hospitalTreatment.style.display = "none";
|
||||||
|
|
||||||
slumsDescText.style.display = "none";
|
slumsDescText.style.display = "none";
|
||||||
slumsShoplift.style.display = "none";
|
slumsShoplift.style.display = "none";
|
||||||
slumsMug.style.display = "none";
|
slumsMug.style.display = "none";
|
||||||
@ -320,6 +332,10 @@ displayLocationContent = function() {
|
|||||||
locationTxtDiv3.style.display = "none";
|
locationTxtDiv3.style.display = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Calculate hospital Cost
|
||||||
|
if (Player.hp < 0) {Player.hp = 0;}
|
||||||
|
var hospitalTreatmentCost = (Player.max_hp - Player.hp) * CONSTANTS.HospitalCostPerHp;
|
||||||
|
|
||||||
switch (loc) {
|
switch (loc) {
|
||||||
case Locations.AevumTravelAgency:
|
case Locations.AevumTravelAgency:
|
||||||
travelAgencyText.style.display = "block";
|
travelAgencyText.style.display = "block";
|
||||||
@ -352,6 +368,8 @@ displayLocationContent = function() {
|
|||||||
purchase1tb.style.display = "block";
|
purchase1tb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumECorp,
|
||||||
|
6000, 100, 150, 14);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumBachmanAndAssociates:
|
case Locations.AevumBachmanAndAssociates:
|
||||||
@ -363,6 +381,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumBachmanAndAssociates,
|
||||||
|
1500, 36, 60, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumClarkeIncorporated:
|
case Locations.AevumClarkeIncorporated:
|
||||||
@ -374,6 +394,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumClarkeIncorporated,
|
||||||
|
2400, 28, 75, 9.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumFulcrumTechnologies:
|
case Locations.AevumFulcrumTechnologies:
|
||||||
@ -391,6 +413,8 @@ displayLocationContent = function() {
|
|||||||
purchase1tb.style.display = "block";
|
purchase1tb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumFulcrumTechnologies,
|
||||||
|
6000, 84, 100, 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumAeroCorp:
|
case Locations.AevumAeroCorp:
|
||||||
@ -400,8 +424,9 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumAeroCorp,
|
||||||
|
2000, 26, 50, 10.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumGalacticCybersystems:
|
case Locations.AevumGalacticCybersystems:
|
||||||
@ -413,6 +438,8 @@ displayLocationContent = function() {
|
|||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumGalacticCybersystems,
|
||||||
|
1400, 24, 50, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumWatchdogSecurity:
|
case Locations.AevumWatchdogSecurity:
|
||||||
@ -425,6 +452,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
agentJob.style.display = "block";
|
agentJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumWatchdogSecurity,
|
||||||
|
850, 12, 30, 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumRhoConstruction:
|
case Locations.AevumRhoConstruction:
|
||||||
@ -432,6 +461,8 @@ displayLocationContent = function() {
|
|||||||
|
|
||||||
softwareJob.style.display = "block";
|
softwareJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumRhoConstruction,
|
||||||
|
600, 8, 20, 4.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumPolice:
|
case Locations.AevumPolice:
|
||||||
@ -439,6 +470,8 @@ displayLocationContent = function() {
|
|||||||
|
|
||||||
softwareJob.style.display = "block";
|
softwareJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumPolice,
|
||||||
|
700, 10, 25, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumNetLinkTechnologies:
|
case Locations.AevumNetLinkTechnologies:
|
||||||
@ -455,6 +488,8 @@ displayLocationContent = function() {
|
|||||||
purchase8gb.style.display = "block";
|
purchase8gb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.AevumNetLinkTechnologies,
|
||||||
|
150, 5, 15, 3.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.AevumCrushFitnessGym:
|
case Locations.AevumCrushFitnessGym:
|
||||||
@ -487,6 +522,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.ChongqingKuaiGongInternational,
|
||||||
|
5500, 42, 100, 15);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.ChongqingSolarisSpaceSystems:
|
case Locations.ChongqingSolarisSpaceSystems:
|
||||||
@ -496,8 +533,9 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.ChongqingSolarisSpaceSystems,
|
||||||
|
3600, 24, 75, 14);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@ -525,6 +563,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12MegaCorp,
|
||||||
|
6000, 100, 125, 15.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12BladeIndustries:
|
case Locations.Sector12BladeIndustries:
|
||||||
@ -536,6 +576,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12BladeIndustries,
|
||||||
|
3000, 40, 100, 11);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12FourSigma:
|
case Locations.Sector12FourSigma:
|
||||||
@ -547,6 +589,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12FourSigma,
|
||||||
|
1500, 50, 100, 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12IcarusMicrosystems:
|
case Locations.Sector12IcarusMicrosystems:
|
||||||
@ -558,6 +602,8 @@ displayLocationContent = function() {
|
|||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12IcarusMicrosystems,
|
||||||
|
900, 28, 70, 12);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12UniversalEnergy:
|
case Locations.Sector12UniversalEnergy:
|
||||||
@ -569,6 +615,8 @@ displayLocationContent = function() {
|
|||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12UniversalEnergy,
|
||||||
|
775, 20, 50, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12DeltaOne:
|
case Locations.Sector12DeltaOne:
|
||||||
@ -578,8 +626,9 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12DeltaOne,
|
||||||
|
1200, 30, 75, 11);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12CIA:
|
case Locations.Sector12CIA:
|
||||||
@ -591,6 +640,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
agentJob.style.display = "block";
|
agentJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12CIA,
|
||||||
|
1450, 38, 80, 12.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12NSA:
|
case Locations.Sector12NSA:
|
||||||
@ -602,6 +653,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
agentJob.style.display = "block";
|
agentJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12NSA,
|
||||||
|
1400, 34, 80, 12);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12AlphaEnterprises:
|
case Locations.Sector12AlphaEnterprises:
|
||||||
@ -614,6 +667,8 @@ displayLocationContent = function() {
|
|||||||
purchase4gb.style.display = "block";
|
purchase4gb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12AlphaEnterprises,
|
||||||
|
250, 10, 40, 5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12CarmichaelSecurity:
|
case Locations.Sector12CarmichaelSecurity:
|
||||||
@ -626,6 +681,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
agentJob.style.display = "block";
|
agentJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12CarmichaelSecurity,
|
||||||
|
500, 14, 60, 5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12FoodNStuff:
|
case Locations.Sector12FoodNStuff:
|
||||||
@ -640,6 +697,8 @@ displayLocationContent = function() {
|
|||||||
|
|
||||||
employeeJob.style.display = "block";
|
employeeJob.style.display = "block";
|
||||||
employeePartTimeJob.style.display = "block";
|
employeePartTimeJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.Sector12JoesGuns,
|
||||||
|
100, 4, 20, 4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.Sector12IronGym:
|
case Locations.Sector12IronGym:
|
||||||
@ -671,7 +730,8 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
setInfiltrateButton(infiltrate, Locations.NewTokyoDefComm,
|
||||||
|
1300, 24, 70, 9.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.NewTokyoVitaLife:
|
case Locations.NewTokyoVitaLife:
|
||||||
@ -683,6 +743,8 @@ displayLocationContent = function() {
|
|||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.NewTokyoVitaLife,
|
||||||
|
750, 18, 100, 9);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.NewTokyoGlobalPharmaceuticals:
|
case Locations.NewTokyoGlobalPharmaceuticals:
|
||||||
@ -695,6 +757,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.NewTokyoGlobalPharmaceuticals,
|
||||||
|
900, 20, 80, 9);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.NewTokyoNoodleBar:
|
case Locations.NewTokyoNoodleBar:
|
||||||
@ -704,7 +768,6 @@ displayLocationContent = function() {
|
|||||||
waitPartTimeJob.style.display = "block";
|
waitPartTimeJob.style.display = "block";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case Locations.IshimaTravelAgency:
|
case Locations.IshimaTravelAgency:
|
||||||
travelAgencyText.style.display = "block";
|
travelAgencyText.style.display = "block";
|
||||||
travelToAevum.style.display = "block";
|
travelToAevum.style.display = "block";
|
||||||
@ -733,6 +796,8 @@ displayLocationContent = function() {
|
|||||||
purchase128gb.style.display = "block";
|
purchase128gb.style.display = "block";
|
||||||
purchase256gb.style.display = "block";
|
purchase256gb.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.IshimaStormTechnologies,
|
||||||
|
700, 20, 100, 10.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.IshimaNovaMedical:
|
case Locations.IshimaNovaMedical:
|
||||||
@ -744,6 +809,8 @@ displayLocationContent = function() {
|
|||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.IshimaNovaMedical,
|
||||||
|
600, 16, 50, 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.IshimaOmegaSoftware:
|
case Locations.IshimaOmegaSoftware:
|
||||||
@ -760,6 +827,8 @@ displayLocationContent = function() {
|
|||||||
purchase32gb.style.display = "block";
|
purchase32gb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.IshimaOmegaSoftware,
|
||||||
|
200, 5, 40, 4.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenTravelAgency:
|
case Locations.VolhavenTravelAgency:
|
||||||
@ -791,6 +860,8 @@ displayLocationContent = function() {
|
|||||||
purchase256gb.style.display = "block";
|
purchase256gb.style.display = "block";
|
||||||
purchase512gb.style.display = "block";
|
purchase512gb.style.display = "block";
|
||||||
purchase1tb.style.display = "block";
|
purchase1tb.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenOmniTekIncorporated,
|
||||||
|
1500, 38, 100, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenNWO:
|
case Locations.VolhavenNWO:
|
||||||
@ -802,6 +873,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenNWO,
|
||||||
|
1800, 48, 200, 12);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenHeliosLabs:
|
case Locations.VolhavenHeliosLabs:
|
||||||
@ -812,7 +885,8 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
setInfiltrateButton(infiltrate, Locations.VolhavenHeliosLabs,
|
||||||
|
1200, 24, 75, 9.5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenOmniaCybersystems:
|
case Locations.VolhavenOmniaCybersystems:
|
||||||
@ -822,8 +896,9 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenOmniaCybersystems,
|
||||||
|
900, 24, 90, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenLexoCorp:
|
case Locations.VolhavenLexoCorp:
|
||||||
@ -836,6 +911,8 @@ displayLocationContent = function() {
|
|||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
businessJob.style.display = "block";
|
businessJob.style.display = "block";
|
||||||
securityJob.style.display = "block";
|
securityJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenLexoCorp,
|
||||||
|
500, 10, 40, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenSysCoreSecurities:
|
case Locations.VolhavenSysCoreSecurities:
|
||||||
@ -845,6 +922,8 @@ displayLocationContent = function() {
|
|||||||
itJob.style.display = "block";
|
itJob.style.display = "block";
|
||||||
securityEngineerJob.style.display = "block";
|
securityEngineerJob.style.display = "block";
|
||||||
networkEngineerJob.style.display = "block";
|
networkEngineerJob.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenSysCoreSecurities,
|
||||||
|
600, 12, 50, 7);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenCompuTek:
|
case Locations.VolhavenCompuTek:
|
||||||
@ -864,6 +943,8 @@ displayLocationContent = function() {
|
|||||||
purchase256gb.style.display = "block";
|
purchase256gb.style.display = "block";
|
||||||
purchaseTor.style.display = "block";
|
purchaseTor.style.display = "block";
|
||||||
purchaseHomeRam.style.display = "block";
|
purchaseHomeRam.style.display = "block";
|
||||||
|
setInfiltrateButton(infiltrate, Locations.VolhavenCompuTek,
|
||||||
|
300, 8, 35, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Locations.VolhavenMilleniumFitnessGym:
|
case Locations.VolhavenMilleniumFitnessGym:
|
||||||
@ -918,6 +999,13 @@ displayLocationContent = function() {
|
|||||||
slumsHeist.innerHTML = "Heist (" + (heistChance*100).toFixed(3) + "% chance of success)";
|
slumsHeist.innerHTML = "Heist (" + (heistChance*100).toFixed(3) + "% chance of success)";
|
||||||
slumsHeist.innerHTML += '<span class="tooltiptext"> Attempt to pull off the ultimate heist </span>';
|
slumsHeist.innerHTML += '<span class="tooltiptext"> Attempt to pull off the ultimate heist </span>';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//Hospital
|
||||||
|
case Locations.Hospital:
|
||||||
|
hospitalTreatment.innerText = "Get treatment for wounds - $" + formatNumber(hospitalTreatmentCost, 2).toString();
|
||||||
|
hospitalTreatment.style.display = "block";
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.log("ERROR: INVALID LOCATION");
|
console.log("ERROR: INVALID LOCATION");
|
||||||
|
|
||||||
@ -949,6 +1037,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
aevumHospital = document.getElementById("aevum-hospital");
|
||||||
|
aevumHospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
aevumSummitUniversity = document.getElementById("aevum-summituniversity");
|
aevumSummitUniversity = document.getElementById("aevum-summituniversity");
|
||||||
aevumSummitUniversity.addEventListener("click", function() {
|
aevumSummitUniversity.addEventListener("click", function() {
|
||||||
Player.location = Locations.AevumSummitUniversity;
|
Player.location = Locations.AevumSummitUniversity;
|
||||||
@ -1054,6 +1149,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
chongqingHospital = document.getElementById("chongqing-hospital");
|
||||||
|
chongqingHospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
chongqingKuaiGongInternational = document.getElementById("chongqing-kuaigonginternational");
|
chongqingKuaiGongInternational = document.getElementById("chongqing-kuaigonginternational");
|
||||||
chongqingKuaiGongInternational.addEventListener("click", function() {
|
chongqingKuaiGongInternational.addEventListener("click", function() {
|
||||||
Player.location = Locations.ChongqingKuaiGongInternational;
|
Player.location = Locations.ChongqingKuaiGongInternational;
|
||||||
@ -1083,6 +1185,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
sector12Hospital = document.getElementById("sector12-hospital");
|
||||||
|
sector12Hospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
sector12RothmanUniversity = document.getElementById("sector12-rothmanuniversity");
|
sector12RothmanUniversity = document.getElementById("sector12-rothmanuniversity");
|
||||||
sector12RothmanUniversity.addEventListener("click", function() {
|
sector12RothmanUniversity.addEventListener("click", function() {
|
||||||
Player.location = Locations.Sector12RothmanUniversity;
|
Player.location = Locations.Sector12RothmanUniversity;
|
||||||
@ -1202,6 +1311,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
newTokyoHospital = document.getElementById("newtokyo-hospital");
|
||||||
|
newTokyoHospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
newTokyoDefComm = document.getElementById("newtokyo-defcomm");
|
newTokyoDefComm = document.getElementById("newtokyo-defcomm");
|
||||||
newTokyoDefComm.addEventListener("click", function() {
|
newTokyoDefComm.addEventListener("click", function() {
|
||||||
Player.location = Locations.NewTokyoDefComm;
|
Player.location = Locations.NewTokyoDefComm;
|
||||||
@ -1244,6 +1360,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ishimaHospital = document.getElementById("ishima-hospital");
|
||||||
|
ishimaHospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
ishimaStormTechnologies = document.getElementById("ishima-stormtechnologies");
|
ishimaStormTechnologies = document.getElementById("ishima-stormtechnologies");
|
||||||
ishimaStormTechnologies.addEventListener("click", function() {
|
ishimaStormTechnologies.addEventListener("click", function() {
|
||||||
Player.location = Locations.IshimaStormTechnologies;
|
Player.location = Locations.IshimaStormTechnologies;
|
||||||
@ -1279,6 +1402,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
volhavenHospital = document.getElementById("volhaven-hospital");
|
||||||
|
volhavenHospital.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.Hospital;
|
||||||
|
Engine.loadLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
volhavenZBInstituteOfTechnology = document.getElementById("volhaven-zbinstituteoftechnology");
|
volhavenZBInstituteOfTechnology = document.getElementById("volhaven-zbinstituteoftechnology");
|
||||||
volhavenZBInstituteOfTechnology.addEventListener("click", function() {
|
volhavenZBInstituteOfTechnology.addEventListener("click", function() {
|
||||||
Player.location = Locations.VolhavenZBInstituteOfTechnology;
|
Player.location = Locations.VolhavenZBInstituteOfTechnology;
|
||||||
@ -1349,6 +1479,13 @@ initLocationButtons = function() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
worldStockExchange = document.getElementById("generic-location-wse");
|
||||||
|
worldStockExchange.addEventListener("click", function() {
|
||||||
|
Player.location = Locations.WorldStockExchange;
|
||||||
|
Engine.loadStockMarketContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
//Buttons to interact at a location (apply for job/promotion, train, purchase, etc.)
|
//Buttons to interact at a location (apply for job/promotion, train, purchase, etc.)
|
||||||
var softwareJob = document.getElementById("location-software-job");
|
var softwareJob = document.getElementById("location-software-job");
|
||||||
@ -1397,6 +1534,8 @@ initLocationButtons = function() {
|
|||||||
var slumsAssassinate = document.getElementById("location-slums-assassinate");
|
var slumsAssassinate = document.getElementById("location-slums-assassinate");
|
||||||
var slumsHeist = document.getElementById("location-slums-heist");
|
var slumsHeist = document.getElementById("location-slums-heist");
|
||||||
|
|
||||||
|
var hospitalTreatment = document.getElementById("location-hospital-treatment");
|
||||||
|
|
||||||
softwareJob.addEventListener("click", function() {
|
softwareJob.addEventListener("click", function() {
|
||||||
Player.applyForSoftwareJob();
|
Player.applyForSoftwareJob();
|
||||||
return false;
|
return false;
|
||||||
@ -1596,6 +1735,17 @@ initLocationButtons = function() {
|
|||||||
commitHeistCrime();
|
commitHeistCrime();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
hospitalTreatment.addEventListener("click", function() {
|
||||||
|
if (Player.hp < 0) {Player.hp = 0;}
|
||||||
|
var price = (Player.max_hp - Player.hp) * CONSTANTS.HospitalCostPerHp;
|
||||||
|
Player.loseMoney(price);
|
||||||
|
dialogBoxCreate("You were healed to full health! The hospital billed " +
|
||||||
|
"you for $" + formatNumber(price, 2).toString());
|
||||||
|
Player.hp = Player.max_hp;
|
||||||
|
displayLocationContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
travelToCity = function(destCityName, cost) {
|
travelToCity = function(destCityName, cost) {
|
||||||
@ -1741,3 +1891,12 @@ setGymLocationButtons = function(costMult, expMult) {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setInfiltrateButton = function(btn, companyName, startLevel, val, maxClearance, difficulty) {
|
||||||
|
btn.style.display = "block";
|
||||||
|
btn.addEventListener("click", function() {
|
||||||
|
Engine.loadInfiltrationContent();
|
||||||
|
beginInfiltration(companyName, startLevel, val, maxClearance, difficulty)
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
@ -754,14 +754,14 @@ function scriptCalculateExpGain(server) {
|
|||||||
if (server.baseDifficulty == null) {
|
if (server.baseDifficulty == null) {
|
||||||
server.baseDifficulty = server.hackDifficulty;
|
server.baseDifficulty = server.hackDifficulty;
|
||||||
}
|
}
|
||||||
return (server.baseDifficulty * Player.hacking_exp_mult * 0.5 + 2);
|
return (server.baseDifficulty * Player.hacking_exp_mult * 0.4 + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//The same as Player's calculatePercentMoneyHacked() function but takes in the server as an argument
|
//The same as Player's calculatePercentMoneyHacked() function but takes in the server as an argument
|
||||||
function scriptCalculatePercentMoneyHacked(server) {
|
function scriptCalculatePercentMoneyHacked(server) {
|
||||||
var difficultyMult = (100 - server.hackDifficulty) / 100;
|
var difficultyMult = (100 - server.hackDifficulty) / 100;
|
||||||
var skillMult = (Player.hacking_skill - (server.requiredHackingSkill - 1)) / Player.hacking_skill;
|
var skillMult = (Player.hacking_skill - (server.requiredHackingSkill - 1)) / Player.hacking_skill;
|
||||||
var percentMoneyHacked = difficultyMult * skillMult * Player.hacking_money_mult / 200;
|
var percentMoneyHacked = difficultyMult * skillMult * Player.hacking_money_mult / 225;
|
||||||
if (percentMoneyHacked < 0) {return 0;}
|
if (percentMoneyHacked < 0) {return 0;}
|
||||||
if (percentMoneyHacked > 1) {return 1;}
|
if (percentMoneyHacked > 1) {return 1;}
|
||||||
return percentMoneyHacked;
|
return percentMoneyHacked;
|
||||||
|
@ -170,6 +170,10 @@ function PlayerObject() {
|
|||||||
this.hacknet_node_core_cost_mult = 1;
|
this.hacknet_node_core_cost_mult = 1;
|
||||||
this.hacknet_node_level_cost_mult = 1;
|
this.hacknet_node_level_cost_mult = 1;
|
||||||
|
|
||||||
|
//Stock Market
|
||||||
|
this.hasWseAccount = false;
|
||||||
|
this.hasTixApiAccess = false;
|
||||||
|
|
||||||
//Used to store the last update time.
|
//Used to store the last update time.
|
||||||
this.lastUpdate = 0;
|
this.lastUpdate = 0;
|
||||||
this.totalPlaytime = 0;
|
this.totalPlaytime = 0;
|
||||||
@ -203,13 +207,16 @@ PlayerObject.prototype.calculateSkill = function(exp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlayerObject.prototype.updateSkillLevels = function() {
|
PlayerObject.prototype.updateSkillLevels = function() {
|
||||||
//TODO Account for total and lifetime stats for achievements and stuff
|
|
||||||
this.hacking_skill = Math.floor(this.calculateSkill(this.hacking_exp) * this.hacking_mult);
|
this.hacking_skill = Math.floor(this.calculateSkill(this.hacking_exp) * this.hacking_mult);
|
||||||
this.strength = Math.floor(this.calculateSkill(this.strength_exp) * this.strength_mult);
|
this.strength = Math.floor(this.calculateSkill(this.strength_exp) * this.strength_mult);
|
||||||
this.defense = Math.floor(this.calculateSkill(this.defense_exp) * this.defense_mult);
|
this.defense = Math.floor(this.calculateSkill(this.defense_exp) * this.defense_mult);
|
||||||
this.dexterity = Math.floor(this.calculateSkill(this.dexterity_exp) * this.dexterity_mult);
|
this.dexterity = Math.floor(this.calculateSkill(this.dexterity_exp) * this.dexterity_mult);
|
||||||
this.agility = Math.floor(this.calculateSkill(this.agility_exp) * this.agility_mult);
|
this.agility = Math.floor(this.calculateSkill(this.agility_exp) * this.agility_mult);
|
||||||
this.charisma = Math.floor(this.calculateSkill(this.charisma_exp) * this.charisma_mult);
|
this.charisma = Math.floor(this.calculateSkill(this.charisma_exp) * this.charisma_mult);
|
||||||
|
|
||||||
|
var ratio = this.hp / this.max_hp;
|
||||||
|
this.max_hp = Math.floor(10 + this.defense / 10);
|
||||||
|
Player.hp = Math.round(this.max_hp * ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Calculates the chance of hacking a server
|
//Calculates the chance of hacking a server
|
||||||
@ -246,7 +253,7 @@ PlayerObject.prototype.calculateHackingTime = function() {
|
|||||||
PlayerObject.prototype.calculatePercentMoneyHacked = function() {
|
PlayerObject.prototype.calculatePercentMoneyHacked = function() {
|
||||||
var difficultyMult = (100 - this.getCurrentServer().hackDifficulty) / 100;
|
var difficultyMult = (100 - this.getCurrentServer().hackDifficulty) / 100;
|
||||||
var skillMult = (this.hacking_skill - (this.getCurrentServer().requiredHackingSkill - 1)) / this.hacking_skill;
|
var skillMult = (this.hacking_skill - (this.getCurrentServer().requiredHackingSkill - 1)) / this.hacking_skill;
|
||||||
var percentMoneyHacked = difficultyMult * skillMult * this.hacking_money_mult / 200;
|
var percentMoneyHacked = difficultyMult * skillMult * this.hacking_money_mult / 225;
|
||||||
console.log("Percent money hacked calculated to be: " + percentMoneyHacked);
|
console.log("Percent money hacked calculated to be: " + percentMoneyHacked);
|
||||||
if (percentMoneyHacked < 0) {return 0;}
|
if (percentMoneyHacked < 0) {return 0;}
|
||||||
if (percentMoneyHacked > 1) {return 1;}
|
if (percentMoneyHacked > 1) {return 1;}
|
||||||
@ -261,7 +268,7 @@ PlayerObject.prototype.calculateExpGain = function() {
|
|||||||
if (s.baseDifficulty == null) {
|
if (s.baseDifficulty == null) {
|
||||||
s.baseDifficulty = s.hackDifficulty;
|
s.baseDifficulty = s.hackDifficulty;
|
||||||
}
|
}
|
||||||
return (s.baseDifficulty * this.hacking_exp_mult * 0.5 + 2);
|
return (s.baseDifficulty * this.hacking_exp_mult * 0.4 + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Hack/Analyze a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for
|
//Hack/Analyze a server. Return the amount of time the hack will take. This lets the Terminal object know how long to disable itself for
|
||||||
@ -931,10 +938,10 @@ PlayerObject.prototype.startClass = function(costMult, expMult, className) {
|
|||||||
var gameCPS = 1000 / Engine._idleSpeed;
|
var gameCPS = 1000 / Engine._idleSpeed;
|
||||||
|
|
||||||
//Base exp gains per second
|
//Base exp gains per second
|
||||||
var baseStudyComputerScienceExp = 0.05;
|
var baseStudyComputerScienceExp = 0.3;
|
||||||
var baseDataStructuresExp = 0.2;
|
var baseDataStructuresExp = 0.6;
|
||||||
var baseNetworksExp = 0.8;
|
var baseNetworksExp = 1.2;
|
||||||
var baseAlgorithmsExp = 2.0;
|
var baseAlgorithmsExp = 2.4;
|
||||||
var baseManagementExp = 1.0;
|
var baseManagementExp = 1.0;
|
||||||
var baseLeadershipExp = 2.0;
|
var baseLeadershipExp = 2.0;
|
||||||
var baseGymExp = 1.0;
|
var baseGymExp = 1.0;
|
||||||
@ -1204,6 +1211,26 @@ PlayerObject.prototype.finishCrime = function(cancelled) {
|
|||||||
Engine.loadLocationContent();
|
Engine.loadLocationContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Returns true if hospitalized, false otherwise
|
||||||
|
PlayerObject.prototype.takeDamage = function(amt) {
|
||||||
|
this.hp -= amt;
|
||||||
|
if (this.hp <= 0) {
|
||||||
|
this.hospitalize();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerObject.prototype.hospitalize = function() {
|
||||||
|
dialogBoxCreate("You were in critical condition! You were taken to the hospital where " +
|
||||||
|
"luckily they were able to save your life. You were charged $" +
|
||||||
|
formatNumber(this.max_hp * CONSTANTS.HospitalCostPerHp, 2));
|
||||||
|
Player.loseMoney(this.max_hp * CONSTANTS.HospitalCostPerHp);
|
||||||
|
this.hp = this.max_hp;
|
||||||
|
}
|
||||||
|
|
||||||
/* Functions for saving and loading the Player data */
|
/* Functions for saving and loading the Player data */
|
||||||
PlayerObject.prototype.toJSON = function() {
|
PlayerObject.prototype.toJSON = function() {
|
||||||
return Generic_toJSON("PlayerObject", this);
|
return Generic_toJSON("PlayerObject", this);
|
||||||
|
@ -200,6 +200,12 @@ function prestigeAugmentation() {
|
|||||||
//Messages
|
//Messages
|
||||||
initMessages();
|
initMessages();
|
||||||
|
|
||||||
|
//Stock market
|
||||||
|
if (Player.hasWseAccount) {
|
||||||
|
initStockMarket();
|
||||||
|
initSymbolToStockMap();
|
||||||
|
}
|
||||||
|
|
||||||
Player.playtimeSinceLastAug = 0;
|
Player.playtimeSinceLastAug = 0;
|
||||||
|
|
||||||
Engine.loadTerminalContent();
|
Engine.loadTerminalContent();
|
||||||
|
38
src/RedPill.js
Normal file
38
src/RedPill.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* RedPill.js
|
||||||
|
* Implements what happens when you have Red Pill augmentation and then hack the world daemon */
|
||||||
|
|
||||||
|
//Returns promise
|
||||||
|
function writeRedPillLine(line) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
|
||||||
|
var container = document.getElementById("red-pill-container");
|
||||||
|
var pElem = document.createElement("p");
|
||||||
|
container.appendChild(pElem);
|
||||||
|
|
||||||
|
var promise = writeRedPillLetter(pElem, line, 0);
|
||||||
|
promise.then(function(res) {
|
||||||
|
resolve(res);
|
||||||
|
}, function(e) {
|
||||||
|
reject(e);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeRedPillLetter(pElem, line, i=0) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
setTimeout(function() {
|
||||||
|
if (i >= line.length) {
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
var textToShow = line.substring(0, i);
|
||||||
|
pElem.innerHTML = "> " + textToShow + "<span class='typed-cursor'> █ </span>";
|
||||||
|
var promise = writeRedPillLetter(pElem, line, i+1);
|
||||||
|
promise.then(function(res) {
|
||||||
|
resolve(res);
|
||||||
|
}, function(e) {
|
||||||
|
reject(e);
|
||||||
|
});
|
||||||
|
}, 50);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,9 @@ function BitburnerSaveObject() {
|
|||||||
this.FactionsSave = "";
|
this.FactionsSave = "";
|
||||||
this.SpecialServerIpsSave = "";
|
this.SpecialServerIpsSave = "";
|
||||||
this.AliasesSave = "";
|
this.AliasesSave = "";
|
||||||
|
this.GlobalAliasesSave = "";
|
||||||
this.MessagesSave = "";
|
this.MessagesSave = "";
|
||||||
|
this.StockMarketSave = "";
|
||||||
this.VersionSave = "";
|
this.VersionSave = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +37,9 @@ BitburnerSaveObject.prototype.saveGame = function() {
|
|||||||
this.FactionsSave = JSON.stringify(Factions);
|
this.FactionsSave = JSON.stringify(Factions);
|
||||||
this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps);
|
this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps);
|
||||||
this.AliasesSave = JSON.stringify(Aliases);
|
this.AliasesSave = JSON.stringify(Aliases);
|
||||||
|
this.GlobalAliasesSave = JSON.stringify(GlobalAliases);
|
||||||
this.MessagesSave = JSON.stringify(Messages);
|
this.MessagesSave = JSON.stringify(Messages);
|
||||||
|
this.StockMarketSave = JSON.stringify(StockMarket);
|
||||||
this.VersionSave = JSON.stringify(CONSTANTS.Version);
|
this.VersionSave = JSON.stringify(CONSTANTS.Version);
|
||||||
var saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this))));
|
var saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this))));
|
||||||
window.localStorage.setItem("bitburnerSave", saveString);
|
window.localStorage.setItem("bitburnerSave", saveString);
|
||||||
@ -67,6 +71,15 @@ loadGame = function(saveObj) {
|
|||||||
} else {
|
} else {
|
||||||
Aliases = {};
|
Aliases = {};
|
||||||
}
|
}
|
||||||
|
if (saveObj.hasOwnProperty("GlobalAliasesSave")) {
|
||||||
|
try {
|
||||||
|
GlobalAliases = JSON.parse(saveObj.GlobalAliasesSave, Reviver);
|
||||||
|
} catch(e) {
|
||||||
|
GlobalAliases = {};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GlobalAliases = {};
|
||||||
|
}
|
||||||
if (saveObj.hasOwnProperty("MessagesSave")) {
|
if (saveObj.hasOwnProperty("MessagesSave")) {
|
||||||
try {
|
try {
|
||||||
Messages = JSON.parse(saveObj.MessagesSave, Reviver);
|
Messages = JSON.parse(saveObj.MessagesSave, Reviver);
|
||||||
@ -76,6 +89,15 @@ loadGame = function(saveObj) {
|
|||||||
} else {
|
} else {
|
||||||
initMessages();
|
initMessages();
|
||||||
}
|
}
|
||||||
|
if (saveObj.hasOwnProperty("StockMarketSave")) {
|
||||||
|
try {
|
||||||
|
StockMarket = JSON.parse(saveObj.StockMarketSave, Reviver);
|
||||||
|
} catch(e) {
|
||||||
|
StockMarket = {};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
StockMarket = {};
|
||||||
|
}
|
||||||
if (saveObj.hasOwnProperty("VersionSave")) {
|
if (saveObj.hasOwnProperty("VersionSave")) {
|
||||||
try {
|
try {
|
||||||
var ver = JSON.parse(saveObj.VersionSave, Reviver);
|
var ver = JSON.parse(saveObj.VersionSave, Reviver);
|
||||||
@ -118,7 +140,9 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
var tempSpecialServerIps = null;
|
var tempSpecialServerIps = null;
|
||||||
var tempAugmentations = null;
|
var tempAugmentations = null;
|
||||||
var tempAliases = null;
|
var tempAliases = null;
|
||||||
|
var tempGlobalAliases = null;
|
||||||
var tempMessages = null;
|
var tempMessages = null;
|
||||||
|
var tempStockMarket = null;
|
||||||
try {
|
try {
|
||||||
saveString = decodeURIComponent(escape(atob(saveString)));
|
saveString = decodeURIComponent(escape(atob(saveString)));
|
||||||
tempSaveObj = new BitburnerSaveObject();
|
tempSaveObj = new BitburnerSaveObject();
|
||||||
@ -139,6 +163,15 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
} else {
|
} else {
|
||||||
tempAliases = {};
|
tempAliases = {};
|
||||||
}
|
}
|
||||||
|
if (tempSaveObj.hasOwnProperty("GlobalAliases")) {
|
||||||
|
try {
|
||||||
|
tempGlobalAliases = JSON.parse(tempSaveObj.AliasesSave, Reviver);
|
||||||
|
} catch(e) {
|
||||||
|
tempGlobalAliases = {};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tempGlobalAliases = {};
|
||||||
|
}
|
||||||
if (tempSaveObj.hasOwnProperty("MessagesSave")) {
|
if (tempSaveObj.hasOwnProperty("MessagesSave")) {
|
||||||
try {
|
try {
|
||||||
tempMessages = JSON.parse(tempSaveObj.MessagesSave, Reviver);
|
tempMessages = JSON.parse(tempSaveObj.MessagesSave, Reviver);
|
||||||
@ -148,6 +181,15 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
} else {
|
} else {
|
||||||
initMessages();
|
initMessages();
|
||||||
}
|
}
|
||||||
|
if (saveObj.hasOwnProperty("StockMarketSave")) {
|
||||||
|
try {
|
||||||
|
tempStockMarket = JSON.parse(saveObj.StockMarketSave, Reviver);
|
||||||
|
} catch(e) {
|
||||||
|
tempStockMarket = {};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tempStockMarket = {};
|
||||||
|
}
|
||||||
if (tempSaveObj.hasOwnProperty("VersionSave")) {
|
if (tempSaveObj.hasOwnProperty("VersionSave")) {
|
||||||
try {
|
try {
|
||||||
var ver = JSON.parse(tempSaveObj.VersionSave, Reviver);
|
var ver = JSON.parse(tempSaveObj.VersionSave, Reviver);
|
||||||
@ -168,7 +210,7 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CONSTANTS.Version == "0.23.0") {
|
if (CONSTANTS.Version == "0.23.0") {
|
||||||
Augmentations = JSON.parse(saveObj.AugmentationsSave, Reviver);
|
tempAugmentations = JSON.parse(saveObj.AugmentationsSave, Reviver);
|
||||||
}
|
}
|
||||||
createNewUpdateText();
|
createNewUpdateText();
|
||||||
}
|
}
|
||||||
@ -194,10 +236,18 @@ loadImportedGame = function(saveObj, saveString) {
|
|||||||
Aliases = tempAliases;
|
Aliases = tempAliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tempGlobalAliases) {
|
||||||
|
GlobalAliases = tempGlobalAliases;
|
||||||
|
}
|
||||||
|
|
||||||
if (tempMessages) {
|
if (tempMessages) {
|
||||||
Messages = tempMessages;
|
Messages = tempMessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tempStockMarket) {
|
||||||
|
StockMarket = tempStockMarket;
|
||||||
|
}
|
||||||
|
|
||||||
dialogBoxCreate("Imported game");
|
dialogBoxCreate("Imported game");
|
||||||
gameOptionsBoxClose();
|
gameOptionsBoxClose();
|
||||||
|
|
||||||
@ -266,6 +316,7 @@ BitburnerSaveObject.prototype.exportGame = function() {
|
|||||||
this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps);
|
this.SpecialServerIpsSave = JSON.stringify(SpecialServerIps);
|
||||||
this.AugmentationsSave = JSON.stringify(Augmentations);
|
this.AugmentationsSave = JSON.stringify(Augmentations);
|
||||||
this.AliasesSave = JSON.stringify(Aliases);
|
this.AliasesSave = JSON.stringify(Aliases);
|
||||||
|
this.GlobalAliasesSave = JSON.stringify(GlobalAliasesSave);
|
||||||
this.MessagesSave = JSON.stringify(Messages);
|
this.MessagesSave = JSON.stringify(Messages);
|
||||||
this.VersionSave = JSON.stringify(CONSTANTS.Version);
|
this.VersionSave = JSON.stringify(CONSTANTS.Version);
|
||||||
|
|
||||||
|
@ -141,62 +141,62 @@ initForeignServers = function() {
|
|||||||
//MegaCorporations
|
//MegaCorporations
|
||||||
var ECorpServer = new Server();
|
var ECorpServer = new Server();
|
||||||
ECorpServer.init(createRandomIp(), "ecorp", "ECorp", true, false, false, false, 0);
|
ECorpServer.init(createRandomIp(), "ecorp", "ECorp", true, false, false, false, 0);
|
||||||
ECorpServer.setHackingParameters(getRandomInt(900, 950), 100000000000, 99, 99);
|
ECorpServer.setHackingParameters(getRandomInt(900, 950), 90000000000, 99, 99);
|
||||||
ECorpServer.setPortProperties(5);
|
ECorpServer.setPortProperties(5);
|
||||||
AddToAllServers(ECorpServer);
|
AddToAllServers(ECorpServer);
|
||||||
|
|
||||||
var MegaCorpServer = new Server();
|
var MegaCorpServer = new Server();
|
||||||
MegaCorpServer.init(createRandomIp(), "megacorp", "MegaCorp", true, false, false, false, 0);
|
MegaCorpServer.init(createRandomIp(), "megacorp", "MegaCorp", true, false, false, false, 0);
|
||||||
MegaCorpServer.setHackingParameters(getRandomInt(900, 950), 80000000000, 99, 99);
|
MegaCorpServer.setHackingParameters(getRandomInt(900, 950), 75000000000, 99, 99);
|
||||||
MegaCorpServer.setPortProperties(5);
|
MegaCorpServer.setPortProperties(5);
|
||||||
AddToAllServers(MegaCorpServer);
|
AddToAllServers(MegaCorpServer);
|
||||||
|
|
||||||
var BachmanAndAssociatesServer = new Server();
|
var BachmanAndAssociatesServer = new Server();
|
||||||
BachmanAndAssociatesServer.init(createRandomIp(), "b-and-a", "Bachman & Associates", true, false, false, false, 0);
|
BachmanAndAssociatesServer.init(createRandomIp(), "b-and-a", "Bachman & Associates", true, false, false, false, 0);
|
||||||
BachmanAndAssociatesServer.setHackingParameters(getRandomInt(875, 925), 32000000000, getRandomInt(75, 85), getRandomInt(65, 75));
|
BachmanAndAssociatesServer.setHackingParameters(getRandomInt(875, 925), 30000000000, getRandomInt(75, 85), getRandomInt(65, 75));
|
||||||
BachmanAndAssociatesServer.setPortProperties(5);
|
BachmanAndAssociatesServer.setPortProperties(5);
|
||||||
AddToAllServers(BachmanAndAssociatesServer);
|
AddToAllServers(BachmanAndAssociatesServer);
|
||||||
|
|
||||||
var BladeIndustriesServer = new Server();
|
var BladeIndustriesServer = new Server();
|
||||||
BladeIndustriesServer.init(createRandomIp(), "blade", "Blade Industries", true, false, false, false, 0);
|
BladeIndustriesServer.init(createRandomIp(), "blade", "Blade Industries", true, false, false, false, 0);
|
||||||
BladeIndustriesServer.setHackingParameters(getRandomInt(875, 925), 20000000000, getRandomInt(90, 95), getRandomInt(60, 75));
|
BladeIndustriesServer.setHackingParameters(getRandomInt(875, 925), 18000000000, getRandomInt(90, 95), getRandomInt(60, 75));
|
||||||
BladeIndustriesServer.setPortProperties(5);
|
BladeIndustriesServer.setPortProperties(5);
|
||||||
AddToAllServers(BladeIndustriesServer);
|
AddToAllServers(BladeIndustriesServer);
|
||||||
|
|
||||||
var NWOServer = new Server();
|
var NWOServer = new Server();
|
||||||
NWOServer.init(createRandomIp(), "nwo", "New World Order", true, false, false, false, 0);
|
NWOServer.init(createRandomIp(), "nwo", "New World Order", true, false, false, false, 0);
|
||||||
NWOServer.setHackingParameters(getRandomInt(900, 920), 40000000000, 99, getRandomInt(75, 85));
|
NWOServer.setHackingParameters(getRandomInt(900, 920), 36000000000, 99, getRandomInt(75, 85));
|
||||||
NWOServer.setPortProperties(5);
|
NWOServer.setPortProperties(5);
|
||||||
AddToAllServers(NWOServer);
|
AddToAllServers(NWOServer);
|
||||||
|
|
||||||
var ClarkeIncorporatedServer = new Server();
|
var ClarkeIncorporatedServer = new Server();
|
||||||
ClarkeIncorporatedServer.init(createRandomIp(), "clarkeinc", "Clarke Incorporated", true, false, false, false, 0);
|
ClarkeIncorporatedServer.init(createRandomIp(), "clarkeinc", "Clarke Incorporated", true, false, false, false, 0);
|
||||||
ClarkeIncorporatedServer.setHackingParameters(getRandomInt(875, 950), 15000000000, getRandomInt(50, 60), getRandomInt(50, 70));
|
ClarkeIncorporatedServer.setHackingParameters(getRandomInt(875, 950), 13000000000, getRandomInt(50, 60), getRandomInt(50, 70));
|
||||||
ClarkeIncorporatedServer.setPortProperties(5);
|
ClarkeIncorporatedServer.setPortProperties(5);
|
||||||
AddToAllServers(ClarkeIncorporatedServer);
|
AddToAllServers(ClarkeIncorporatedServer);
|
||||||
|
|
||||||
var OmniTekIncorporatedServer = new Server();
|
var OmniTekIncorporatedServer = new Server();
|
||||||
OmniTekIncorporatedServer.init(createRandomIp(), "omnitek", "OmniTek Incorporated", true, false, false, false, 0);
|
OmniTekIncorporatedServer.init(createRandomIp(), "omnitek", "OmniTek Incorporated", true, false, false, false, 0);
|
||||||
OmniTekIncorporatedServer.setHackingParameters(getRandomInt(870, 930), 50000000000, getRandomInt(90, 99), getRandomInt(95, 99));
|
OmniTekIncorporatedServer.setHackingParameters(getRandomInt(870, 930), 45000000000, getRandomInt(90, 99), getRandomInt(95, 99));
|
||||||
OmniTekIncorporatedServer.setPortProperties(5);
|
OmniTekIncorporatedServer.setPortProperties(5);
|
||||||
AddToAllServers(OmniTekIncorporatedServer);
|
AddToAllServers(OmniTekIncorporatedServer);
|
||||||
|
|
||||||
var FourSigmaServer = new Server();
|
var FourSigmaServer = new Server();
|
||||||
FourSigmaServer.init(createRandomIp(), "4sigma", "FourSigma", true, false, false, false, 0);
|
FourSigmaServer.init(createRandomIp(), "4sigma", "FourSigma", true, false, false, false, 0);
|
||||||
FourSigmaServer.setHackingParameters(getRandomInt(875, 925), 25000000000, getRandomInt(60, 70), getRandomInt(75, 85));
|
FourSigmaServer.setHackingParameters(getRandomInt(875, 925), 24000000000, getRandomInt(60, 70), getRandomInt(75, 99));
|
||||||
FourSigmaServer.setPortProperties(5);
|
FourSigmaServer.setPortProperties(5);
|
||||||
AddToAllServers(FourSigmaServer);
|
AddToAllServers(FourSigmaServer);
|
||||||
|
|
||||||
var KuaiGongInternationalServer = new Server();
|
var KuaiGongInternationalServer = new Server();
|
||||||
KuaiGongInternationalServer.init(createRandomIp(), "kuai-gong", "KuaiGong International", true, false, false, false, 0);
|
KuaiGongInternationalServer.init(createRandomIp(), "kuai-gong", "KuaiGong International", true, false, false, false, 0);
|
||||||
KuaiGongInternationalServer.setHackingParameters(getRandomInt(900, 950), 75000000000, getRandomInt(95, 99), getRandomInt(90, 99));
|
KuaiGongInternationalServer.setHackingParameters(getRandomInt(900, 950), 70000000000, getRandomInt(95, 99), getRandomInt(90, 99));
|
||||||
KuaiGongInternationalServer.setPortProperties(5);
|
KuaiGongInternationalServer.setPortProperties(5);
|
||||||
AddToAllServers(KuaiGongInternationalServer);
|
AddToAllServers(KuaiGongInternationalServer);
|
||||||
|
|
||||||
//Technology and communications companies (large targets)
|
//Technology and communications companies (large targets)
|
||||||
var FulcrumTechnologiesServer = new Server();
|
var FulcrumTechnologiesServer = new Server();
|
||||||
FulcrumTechnologiesServer.init(createRandomIp(), "fulcrumtech", "Fulcrum Technologies", true, false, false, false, 64);
|
FulcrumTechnologiesServer.init(createRandomIp(), "fulcrumtech", "Fulcrum Technologies", true, false, false, false, 64);
|
||||||
FulcrumTechnologiesServer.setHackingParameters(getRandomInt(900, 1000), 2000000000, getRandomInt(85, 95), getRandomInt(80, 99));
|
FulcrumTechnologiesServer.setHackingParameters(getRandomInt(900, 1000), 1500000000, getRandomInt(85, 95), getRandomInt(80, 99));
|
||||||
FulcrumTechnologiesServer.setPortProperties(5);
|
FulcrumTechnologiesServer.setPortProperties(5);
|
||||||
AddToAllServers(FulcrumTechnologiesServer);
|
AddToAllServers(FulcrumTechnologiesServer);
|
||||||
|
|
||||||
@ -209,148 +209,148 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var StormTechnologiesServer = new Server();
|
var StormTechnologiesServer = new Server();
|
||||||
StormTechnologiesServer.init(createRandomIp(), "stormtech", "Storm Technologies", true, false, false, false, 0);
|
StormTechnologiesServer.init(createRandomIp(), "stormtech", "Storm Technologies", true, false, false, false, 0);
|
||||||
StormTechnologiesServer.setHackingParameters(getRandomInt(825, 875), 1500000000, getRandomInt(80, 90), getRandomInt(70, 90));
|
StormTechnologiesServer.setHackingParameters(getRandomInt(825, 875), 1300000000, getRandomInt(80, 90), getRandomInt(70, 90));
|
||||||
StormTechnologiesServer.setPortProperties(5);
|
StormTechnologiesServer.setPortProperties(5);
|
||||||
AddToAllServers(StormTechnologiesServer);
|
AddToAllServers(StormTechnologiesServer);
|
||||||
|
|
||||||
var DefCommServer = new Server();
|
var DefCommServer = new Server();
|
||||||
DefCommServer.init(createRandomIp(), "defcomm", "DefComm", true, false, false, false, 0);
|
DefCommServer.init(createRandomIp(), "defcomm", "DefComm", true, false, false, false, 0);
|
||||||
DefCommServer.setHackingParameters(getRandomInt(800, 850), 900000000, getRandomInt(85, 95), getRandomInt(50, 70));
|
DefCommServer.setHackingParameters(getRandomInt(800, 850), 850000000, getRandomInt(85, 95), getRandomInt(50, 70));
|
||||||
DefCommServer.setPortProperties(5);
|
DefCommServer.setPortProperties(5);
|
||||||
AddToAllServers(DefCommServer);
|
AddToAllServers(DefCommServer);
|
||||||
|
|
||||||
var InfoCommServer = new Server();
|
var InfoCommServer = new Server();
|
||||||
InfoCommServer.init(createRandomIp(), "infocomm", "InfoComm", true, false, false, false, 0);
|
InfoCommServer.init(createRandomIp(), "infocomm", "InfoComm", true, false, false, false, 0);
|
||||||
InfoCommServer.setHackingParameters(getRandomInt(800, 850), 750000000, getRandomInt(70, 90), getRandomInt(35, 75));
|
InfoCommServer.setHackingParameters(getRandomInt(800, 850), 700000000, getRandomInt(70, 90), getRandomInt(35, 75));
|
||||||
InfoCommServer.setPortProperties(5);
|
InfoCommServer.setPortProperties(5);
|
||||||
AddToAllServers(InfoCommServer);
|
AddToAllServers(InfoCommServer);
|
||||||
|
|
||||||
var HeliosLabsServer = new Server();
|
var HeliosLabsServer = new Server();
|
||||||
HeliosLabsServer.init(createRandomIp(), "helios", "Helios Labs", true, false, false, false, 0);
|
HeliosLabsServer.init(createRandomIp(), "helios", "Helios Labs", true, false, false, false, 0);
|
||||||
HeliosLabsServer.setHackingParameters(getRandomInt(775, 825), 500000000, getRandomInt(85, 95), getRandomInt(70, 80));
|
HeliosLabsServer.setHackingParameters(getRandomInt(775, 825), 450000000, getRandomInt(85, 95), getRandomInt(70, 80));
|
||||||
HeliosLabsServer.setPortProperties(5);
|
HeliosLabsServer.setPortProperties(5);
|
||||||
AddToAllServers(HeliosLabsServer);
|
AddToAllServers(HeliosLabsServer);
|
||||||
|
|
||||||
var VitaLifeServer = new Server();
|
var VitaLifeServer = new Server();
|
||||||
VitaLifeServer.init(createRandomIp(), "vitalife", "VitaLife", true, false, false, false, 32);
|
VitaLifeServer.init(createRandomIp(), "vitalife", "VitaLife", true, false, false, false, 32);
|
||||||
VitaLifeServer.setHackingParameters(getRandomInt(750, 800), 800000000, getRandomInt(80, 90), getRandomInt(60, 80));
|
VitaLifeServer.setHackingParameters(getRandomInt(750, 800), 720000000, getRandomInt(80, 90), getRandomInt(60, 80));
|
||||||
VitaLifeServer.setPortProperties(5);
|
VitaLifeServer.setPortProperties(5);
|
||||||
AddToAllServers(VitaLifeServer);
|
AddToAllServers(VitaLifeServer);
|
||||||
|
|
||||||
var IcarusMicrosystemsServer = new Server();
|
var IcarusMicrosystemsServer = new Server();
|
||||||
IcarusMicrosystemsServer.init(createRandomIp(), "icarus", "Icarus Microsystems", true, false, false, false, 0);
|
IcarusMicrosystemsServer.init(createRandomIp(), "icarus", "Icarus Microsystems", true, false, false, false, 0);
|
||||||
IcarusMicrosystemsServer.setHackingParameters(getRandomInt(800, 820), 1100000000, getRandomInt(85, 95), getRandomInt(85, 95));
|
IcarusMicrosystemsServer.setHackingParameters(getRandomInt(800, 820), 1000000000, getRandomInt(85, 95), getRandomInt(85, 95));
|
||||||
IcarusMicrosystemsServer.setPortProperties(5);
|
IcarusMicrosystemsServer.setPortProperties(5);
|
||||||
AddToAllServers(IcarusMicrosystemsServer);
|
AddToAllServers(IcarusMicrosystemsServer);
|
||||||
|
|
||||||
var UniversalEnergyServer = new Server();
|
var UniversalEnergyServer = new Server();
|
||||||
UniversalEnergyServer.init(createRandomIp(), "univ-energy", "Universal Energy", true, false, false, false, 32);
|
UniversalEnergyServer.init(createRandomIp(), "univ-energy", "Universal Energy", true, false, false, false, 32);
|
||||||
UniversalEnergyServer.setHackingParameters(getRandomInt(780, 800), 1500000000, getRandomInt(80, 90), getRandomInt(80, 90));
|
UniversalEnergyServer.setHackingParameters(getRandomInt(780, 800), 1300000000, getRandomInt(80, 90), getRandomInt(80, 90));
|
||||||
UniversalEnergyServer.setPortProperties(4);
|
UniversalEnergyServer.setPortProperties(4);
|
||||||
AddToAllServers(UniversalEnergyServer);
|
AddToAllServers(UniversalEnergyServer);
|
||||||
|
|
||||||
var TitanLabsServer = new Server();
|
var TitanLabsServer = new Server();
|
||||||
TitanLabsServer.init(createRandomIp(), "titan-labs", "Titan Laboratories", true, false, false, false, 32);
|
TitanLabsServer.init(createRandomIp(), "titan-labs", "Titan Laboratories", true, false, false, false, 32);
|
||||||
TitanLabsServer.setHackingParameters(getRandomInt(790, 800), 1000000000, getRandomInt(70, 80), getRandomInt(60, 80));
|
TitanLabsServer.setHackingParameters(getRandomInt(790, 800), 900000000, getRandomInt(70, 80), getRandomInt(60, 80));
|
||||||
TitanLabsServer.setPortProperties(5);
|
TitanLabsServer.setPortProperties(5);
|
||||||
AddToAllServers(TitanLabsServer);
|
AddToAllServers(TitanLabsServer);
|
||||||
|
|
||||||
var MicrodyneTechnologiesServer = new Server();
|
var MicrodyneTechnologiesServer = new Server();
|
||||||
MicrodyneTechnologiesServer.init(createRandomIp(), "microdyne", "Microdyne Technologies", true, false, false, false, 16);
|
MicrodyneTechnologiesServer.init(createRandomIp(), "microdyne", "Microdyne Technologies", true, false, false, false, 16);
|
||||||
MicrodyneTechnologiesServer.setHackingParameters(getRandomInt(780, 820), 900000000, getRandomInt(65, 75), getRandomInt(70, 90));
|
MicrodyneTechnologiesServer.setHackingParameters(getRandomInt(780, 820), 750000000, getRandomInt(65, 75), getRandomInt(70, 90));
|
||||||
MicrodyneTechnologiesServer.setPortProperties(5);
|
MicrodyneTechnologiesServer.setPortProperties(5);
|
||||||
AddToAllServers(MicrodyneTechnologiesServer);
|
AddToAllServers(MicrodyneTechnologiesServer);
|
||||||
|
|
||||||
var TaiYangDigitalServer = new Server();
|
var TaiYangDigitalServer = new Server();
|
||||||
TaiYangDigitalServer.init(createRandomIp(), "taiyang-digital", "Taiyang Digital", true, false, false, false, 0);
|
TaiYangDigitalServer.init(createRandomIp(), "taiyang-digital", "Taiyang Digital", true, false, false, false, 0);
|
||||||
TaiYangDigitalServer.setHackingParameters(getRandomInt(800, 900), 1100000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
TaiYangDigitalServer.setHackingParameters(getRandomInt(800, 900), 1000000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
||||||
TaiYangDigitalServer.setPortProperties(5);
|
TaiYangDigitalServer.setPortProperties(5);
|
||||||
AddToAllServers(TaiYangDigitalServer);
|
AddToAllServers(TaiYangDigitalServer);
|
||||||
|
|
||||||
var GalacticCyberSystemsServer = new Server();
|
var GalacticCyberSystemsServer = new Server();
|
||||||
GalacticCyberSystemsServer.init(createRandomIp(), "galactic-cyber", "Galactic Cybersystems", true, false, false, false, 0);
|
GalacticCyberSystemsServer.init(createRandomIp(), "galactic-cyber", "Galactic Cybersystems", true, false, false, false, 0);
|
||||||
GalacticCyberSystemsServer.setHackingParameters(getRandomInt(800, 850), 500000000, getRandomInt(55, 65), getRandomInt(70, 90));
|
GalacticCyberSystemsServer.setHackingParameters(getRandomInt(800, 850), 450000000, getRandomInt(55, 65), getRandomInt(70, 90));
|
||||||
GalacticCyberSystemsServer.setPortProperties(5);
|
GalacticCyberSystemsServer.setPortProperties(5);
|
||||||
AddToAllServers(GalacticCyberSystemsServer);
|
AddToAllServers(GalacticCyberSystemsServer);
|
||||||
|
|
||||||
//Defense Companies ("Large" Companies)
|
//Defense Companies ("Large" Companies)
|
||||||
var AeroCorpServer = new Server();
|
var AeroCorpServer = new Server();
|
||||||
AeroCorpServer.init(createRandomIp(), "aerocorp", "AeroCorp", true, false, false, false, 0);
|
AeroCorpServer.init(createRandomIp(), "aerocorp", "AeroCorp", true, false, false, false, 0);
|
||||||
AeroCorpServer.setHackingParameters(getRandomInt(825, 875), 1500000000, getRandomInt(80, 90), getRandomInt(55, 65));
|
AeroCorpServer.setHackingParameters(getRandomInt(825, 875), 1300000000, getRandomInt(80, 90), getRandomInt(55, 65));
|
||||||
AeroCorpServer.setPortProperties(5);
|
AeroCorpServer.setPortProperties(5);
|
||||||
AddToAllServers(AeroCorpServer);
|
AddToAllServers(AeroCorpServer);
|
||||||
|
|
||||||
var OmniaCybersystemsServer = new Server();
|
var OmniaCybersystemsServer = new Server();
|
||||||
OmniaCybersystemsServer.init(createRandomIp(), "omnia", "Omnia Cybersystems", true, false, false, false, 0);
|
OmniaCybersystemsServer.init(createRandomIp(), "omnia", "Omnia Cybersystems", true, false, false, false, 0);
|
||||||
OmniaCybersystemsServer.setHackingParameters(getRandomInt(800, 850), 1200000000, getRandomInt(85, 95), getRandomInt(60, 70));
|
OmniaCybersystemsServer.setHackingParameters(getRandomInt(800, 850), 1100000000, getRandomInt(85, 95), getRandomInt(60, 70));
|
||||||
OmniaCybersystemsServer.setPortProperties(5);
|
OmniaCybersystemsServer.setPortProperties(5);
|
||||||
AddToAllServers(OmniaCybersystemsServer);
|
AddToAllServers(OmniaCybersystemsServer);
|
||||||
|
|
||||||
var ZBDefenseServer = new Server();
|
var ZBDefenseServer = new Server();
|
||||||
ZBDefenseServer.init(createRandomIp(), "zb-def", "ZB Defense Industries", true, false, false, false, 0);
|
ZBDefenseServer.init(createRandomIp(), "zb-def", "ZB Defense Industries", true, false, false, false, 0);
|
||||||
ZBDefenseServer.setHackingParameters(getRandomInt(775, 825), 1000000000, getRandomInt(55, 65), getRandomInt(65, 75));
|
ZBDefenseServer.setHackingParameters(getRandomInt(775, 825), 900000000, getRandomInt(55, 65), getRandomInt(65, 75));
|
||||||
ZBDefenseServer.setPortProperties(4);
|
ZBDefenseServer.setPortProperties(4);
|
||||||
AddToAllServers(ZBDefenseServer);
|
AddToAllServers(ZBDefenseServer);
|
||||||
|
|
||||||
var AppliedEnergeticsServer = new Server();
|
var AppliedEnergeticsServer = new Server();
|
||||||
AppliedEnergeticsServer.init(createRandomIp(), "applied-energetics", "Applied Energetics", true, false, false, false, 0);
|
AppliedEnergeticsServer.init(createRandomIp(), "applied-energetics", "Applied Energetics", true, false, false, false, 0);
|
||||||
AppliedEnergeticsServer.setHackingParameters(getRandomInt(750, 800), 1200000000, getRandomInt(60, 80), getRandomInt(70, 75));
|
AppliedEnergeticsServer.setHackingParameters(getRandomInt(750, 800), 1100000000, getRandomInt(60, 80), getRandomInt(70, 75));
|
||||||
AppliedEnergeticsServer.setPortProperties(4);
|
AppliedEnergeticsServer.setPortProperties(4);
|
||||||
AddToAllServers(AppliedEnergeticsServer);
|
AddToAllServers(AppliedEnergeticsServer);
|
||||||
|
|
||||||
var SolarisSpaceSystemsServer = new Server();
|
var SolarisSpaceSystemsServer = new Server();
|
||||||
SolarisSpaceSystemsServer.init(createRandomIp(), "solaris", "Solaris Space Systems", true, false, false, false, 0);
|
SolarisSpaceSystemsServer.init(createRandomIp(), "solaris", "Solaris Space Systems", true, false, false, false, 0);
|
||||||
SolarisSpaceSystemsServer.setHackingParameters(getRandomInt(790, 810), 900000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
SolarisSpaceSystemsServer.setHackingParameters(getRandomInt(790, 810), 800000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
||||||
SolarisSpaceSystemsServer.setPortProperties(5);
|
SolarisSpaceSystemsServer.setPortProperties(5);
|
||||||
AddToAllServers(SolarisSpaceSystemsServer);
|
AddToAllServers(SolarisSpaceSystemsServer);
|
||||||
|
|
||||||
var DeltaOneServer = new Server();
|
var DeltaOneServer = new Server();
|
||||||
DeltaOneServer.init(createRandomIp(), "deltaone", "Delta One", true, false, false, false, 0);
|
DeltaOneServer.init(createRandomIp(), "deltaone", "Delta One", true, false, false, false, 0);
|
||||||
DeltaOneServer.setHackingParameters(getRandomInt(800, 820), 1500000000, getRandomInt(75, 85), getRandomInt(50, 70));
|
DeltaOneServer.setHackingParameters(getRandomInt(800, 820), 1400000000, getRandomInt(75, 85), getRandomInt(50, 70));
|
||||||
DeltaOneServer.setPortProperties(5);
|
DeltaOneServer.setPortProperties(5);
|
||||||
AddToAllServers(DeltaOneServer);
|
AddToAllServers(DeltaOneServer);
|
||||||
|
|
||||||
//Health, medicine, pharmaceutical companies ("Large" targets)
|
//Health, medicine, pharmaceutical companies ("Large" targets)
|
||||||
var GlobalPharmaceuticalsServer = new Server();
|
var GlobalPharmaceuticalsServer = new Server();
|
||||||
GlobalPharmaceuticalsServer.init(createRandomIp(), "global-pharm", "Global Pharmaceuticals", true, false, false, false, 16);
|
GlobalPharmaceuticalsServer.init(createRandomIp(), "global-pharm", "Global Pharmaceuticals", true, false, false, false, 16);
|
||||||
GlobalPharmaceuticalsServer.setHackingParameters(getRandomInt(750, 800), 2000000000, getRandomInt(75, 85), getRandomInt(80, 90));
|
GlobalPharmaceuticalsServer.setHackingParameters(getRandomInt(750, 800), 1800000000, getRandomInt(75, 85), getRandomInt(80, 90));
|
||||||
GlobalPharmaceuticalsServer.setPortProperties(4);
|
GlobalPharmaceuticalsServer.setPortProperties(4);
|
||||||
AddToAllServers(GlobalPharmaceuticalsServer);
|
AddToAllServers(GlobalPharmaceuticalsServer);
|
||||||
|
|
||||||
var NovaMedicalServer = new Server();
|
var NovaMedicalServer = new Server();
|
||||||
NovaMedicalServer.init(createRandomIp(), "nova-med", "Nova Medical", true, false, false, false, 0);
|
NovaMedicalServer.init(createRandomIp(), "nova-med", "Nova Medical", true, false, false, false, 0);
|
||||||
NovaMedicalServer.setHackingParameters(getRandomInt(775, 825), 1500000000, getRandomInt(60, 80), getRandomInt(65, 85));
|
NovaMedicalServer.setHackingParameters(getRandomInt(775, 825), 1350000000, getRandomInt(60, 80), getRandomInt(65, 85));
|
||||||
NovaMedicalServer.setPortProperties(4);
|
NovaMedicalServer.setPortProperties(4);
|
||||||
AddToAllServers(NovaMedicalServer);
|
AddToAllServers(NovaMedicalServer);
|
||||||
|
|
||||||
var ZeusMedicalServer = new Server();
|
var ZeusMedicalServer = new Server();
|
||||||
ZeusMedicalServer.init(createRandomIp(), "zeud-med", "Zeus Medical", true, false, false, false, 0);
|
ZeusMedicalServer.init(createRandomIp(), "zeud-med", "Zeus Medical", true, false, false, false, 0);
|
||||||
ZeusMedicalServer.setHackingParameters(getRandomInt(800, 825), 1750000000, getRandomInt(70, 90), getRandomInt(70, 80));
|
ZeusMedicalServer.setHackingParameters(getRandomInt(800, 825), 1600000000, getRandomInt(70, 90), getRandomInt(70, 80));
|
||||||
ZeusMedicalServer.setPortProperties(5);
|
ZeusMedicalServer.setPortProperties(5);
|
||||||
AddToAllServers(ZeusMedicalServer);
|
AddToAllServers(ZeusMedicalServer);
|
||||||
|
|
||||||
var UnitaLifeGroupServer = new Server();
|
var UnitaLifeGroupServer = new Server();
|
||||||
UnitaLifeGroupServer.init(createRandomIp(), "unitalife", "UnitaLife Group", true, false, false, false, 32);
|
UnitaLifeGroupServer.init(createRandomIp(), "unitalife", "UnitaLife Group", true, false, false, false, 32);
|
||||||
UnitaLifeGroupServer.setHackingParameters(getRandomInt(780, 800), 1400000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
UnitaLifeGroupServer.setHackingParameters(getRandomInt(780, 800), 1200000000, getRandomInt(70, 80), getRandomInt(70, 80));
|
||||||
UnitaLifeGroupServer.setPortProperties(4);
|
UnitaLifeGroupServer.setPortProperties(4);
|
||||||
AddToAllServers(UnitaLifeGroupServer);
|
AddToAllServers(UnitaLifeGroupServer);
|
||||||
|
|
||||||
//"Medium level" targets
|
//"Medium level" targets
|
||||||
var LexoCorpServer = new Server();
|
var LexoCorpServer = new Server();
|
||||||
LexoCorpServer.init(createRandomIp(), "lexo-corp", "Lexo Corporation", true, false, false, false, 16);
|
LexoCorpServer.init(createRandomIp(), "lexo-corp", "Lexo Corporation", true, false, false, false, 16);
|
||||||
LexoCorpServer.setHackingParameters(getRandomInt(680, 720), 1000000000, getRandomInt(60, 80), getRandomInt(55, 65));
|
LexoCorpServer.setHackingParameters(getRandomInt(680, 720), 800000000, getRandomInt(60, 80), getRandomInt(55, 65));
|
||||||
LexoCorpServer.setPortProperties(4);
|
LexoCorpServer.setPortProperties(4);
|
||||||
AddToAllServers(LexoCorpServer);
|
AddToAllServers(LexoCorpServer);
|
||||||
|
|
||||||
var RhoConstructionServer = new Server();
|
var RhoConstructionServer = new Server();
|
||||||
RhoConstructionServer.init(createRandomIp(), "rho-construction", "Rho Construction", true, false, false, false, 0);
|
RhoConstructionServer.init(createRandomIp(), "rho-construction", "Rho Construction", true, false, false, false, 0);
|
||||||
RhoConstructionServer.setHackingParameters(getRandomInt(480, 520), 750000000, getRandomInt(40, 60), getRandomInt(40, 60));
|
RhoConstructionServer.setHackingParameters(getRandomInt(480, 520), 700000000, getRandomInt(40, 60), getRandomInt(40, 60));
|
||||||
RhoConstructionServer.setPortProperties(3);
|
RhoConstructionServer.setPortProperties(3);
|
||||||
AddToAllServers(RhoConstructionServer);
|
AddToAllServers(RhoConstructionServer);
|
||||||
|
|
||||||
var AlphaEnterprisesServer = new Server();
|
var AlphaEnterprisesServer = new Server();
|
||||||
AlphaEnterprisesServer.init(createRandomIp(), "alpha-ent", "Alpha Enterprises", true, false, false, false, 0);
|
AlphaEnterprisesServer.init(createRandomIp(), "alpha-ent", "Alpha Enterprises", true, false, false, false, 0);
|
||||||
AlphaEnterprisesServer.setHackingParameters(getRandomInt(500, 600), 800000000, getRandomInt(50, 70), getRandomInt(50, 60));
|
AlphaEnterprisesServer.setHackingParameters(getRandomInt(500, 600), 750000000, getRandomInt(50, 70), getRandomInt(50, 60));
|
||||||
AlphaEnterprisesServer.setPortProperties(4);
|
AlphaEnterprisesServer.setPortProperties(4);
|
||||||
AddToAllServers(AlphaEnterprisesServer);
|
AddToAllServers(AlphaEnterprisesServer);
|
||||||
|
|
||||||
@ -363,7 +363,7 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var RothmanUniversityServer = new Server();
|
var RothmanUniversityServer = new Server();
|
||||||
RothmanUniversityServer.init(createRandomIp(), "rothman-uni", "Rothman University Network", true, false, false, false, 4);
|
RothmanUniversityServer.init(createRandomIp(), "rothman-uni", "Rothman University Network", true, false, false, false, 4);
|
||||||
RothmanUniversityServer.setHackingParameters(getRandomInt(370, 430), 250000000, getRandomInt(45, 55), getRandomInt(35, 45));
|
RothmanUniversityServer.setHackingParameters(getRandomInt(370, 430), 200000000, getRandomInt(45, 55), getRandomInt(35, 45));
|
||||||
RothmanUniversityServer.setPortProperties(3);
|
RothmanUniversityServer.setPortProperties(3);
|
||||||
AddToAllServers(RothmanUniversityServer);
|
AddToAllServers(RothmanUniversityServer);
|
||||||
|
|
||||||
@ -375,43 +375,43 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var SummitUniversityServer = new Server();
|
var SummitUniversityServer = new Server();
|
||||||
SummitUniversityServer.init(createRandomIp(), "summit-uni", "Summit University Network", true, false, false, false, 4);
|
SummitUniversityServer.init(createRandomIp(), "summit-uni", "Summit University Network", true, false, false, false, 4);
|
||||||
SummitUniversityServer.setHackingParameters(getRandomInt(425, 475), 200000000, getRandomInt(45, 65), getRandomInt(40, 60));
|
SummitUniversityServer.setHackingParameters(getRandomInt(425, 475), 160000000, getRandomInt(45, 65), getRandomInt(40, 60));
|
||||||
SummitUniversityServer.setPortProperties(3);
|
SummitUniversityServer.setPortProperties(3);
|
||||||
AddToAllServers(SummitUniversityServer);
|
AddToAllServers(SummitUniversityServer);
|
||||||
|
|
||||||
var SysCoreSecuritiesServer = new Server();
|
var SysCoreSecuritiesServer = new Server();
|
||||||
SysCoreSecuritiesServer.init(createRandomIp(), "syscore", "SysCore Securities", true, false, false, false, 0);
|
SysCoreSecuritiesServer.init(createRandomIp(), "syscore", "SysCore Securities", true, false, false, false, 0);
|
||||||
SysCoreSecuritiesServer.setHackingParameters(getRandomInt(550, 650), 600000000, getRandomInt(60, 80), getRandomInt(60, 70));
|
SysCoreSecuritiesServer.setHackingParameters(getRandomInt(550, 650), 500000000, getRandomInt(60, 80), getRandomInt(60, 70));
|
||||||
SysCoreSecuritiesServer.setPortProperties(4);
|
SysCoreSecuritiesServer.setPortProperties(4);
|
||||||
AddToAllServers(SysCoreSecuritiesServer);
|
AddToAllServers(SysCoreSecuritiesServer);
|
||||||
|
|
||||||
var CatalystVenturesServer = new Server();
|
var CatalystVenturesServer = new Server();
|
||||||
CatalystVenturesServer.init(createRandomIp(), "catalyst", "Catalyst Ventures", true, false, false, false, 0);
|
CatalystVenturesServer.init(createRandomIp(), "catalyst", "Catalyst Ventures", true, false, false, false, 0);
|
||||||
CatalystVenturesServer.setHackingParameters(getRandomInt(400, 450), 900000000, getRandomInt(60, 70), getRandomInt(25, 55));
|
CatalystVenturesServer.setHackingParameters(getRandomInt(400, 450), 750000000, getRandomInt(60, 70), getRandomInt(25, 55));
|
||||||
CatalystVenturesServer.setPortProperties(3);
|
CatalystVenturesServer.setPortProperties(3);
|
||||||
AddToAllServers(CatalystVenturesServer);
|
AddToAllServers(CatalystVenturesServer);
|
||||||
|
|
||||||
var TheHubServer = new Server();
|
var TheHubServer = new Server();
|
||||||
TheHubServer.init(createRandomIp(), "the-hub", "The Hub", true, false, false, false, 0);
|
TheHubServer.init(createRandomIp(), "the-hub", "The Hub", true, false, false, false, 0);
|
||||||
TheHubServer.setHackingParameters(getRandomInt(275, 325), 250000000, getRandomInt(35, 45), getRandomInt(45, 55));
|
TheHubServer.setHackingParameters(getRandomInt(275, 325), 225000000, getRandomInt(35, 45), getRandomInt(45, 55));
|
||||||
TheHubServer.setPortProperties(2);
|
TheHubServer.setPortProperties(2);
|
||||||
AddToAllServers(TheHubServer);
|
AddToAllServers(TheHubServer);
|
||||||
|
|
||||||
var CompuTekServer = new Server();
|
var CompuTekServer = new Server();
|
||||||
CompuTekServer.init(createRandomIp(), "comptek", "CompuTek", true, false, false, false, 8);
|
CompuTekServer.init(createRandomIp(), "comptek", "CompuTek", true, false, false, false, 8);
|
||||||
CompuTekServer.setHackingParameters(getRandomInt(300, 400), 300000000, getRandomInt(55, 65), getRandomInt(50, 60));
|
CompuTekServer.setHackingParameters(getRandomInt(300, 400), 275000000, getRandomInt(55, 65), getRandomInt(50, 60));
|
||||||
CompuTekServer.setPortProperties(3);
|
CompuTekServer.setPortProperties(3);
|
||||||
AddToAllServers(CompuTekServer);
|
AddToAllServers(CompuTekServer);
|
||||||
|
|
||||||
var NetLinkTechnologiesServer = new Server();
|
var NetLinkTechnologiesServer = new Server();
|
||||||
NetLinkTechnologiesServer.init(createRandomIp(), "netlink", "NetLink Technologies", true, false, false, false, 0);
|
NetLinkTechnologiesServer.init(createRandomIp(), "netlink", "NetLink Technologies", true, false, false, false, 0);
|
||||||
NetLinkTechnologiesServer.setHackingParameters(getRandomInt(375, 425), 350000000, getRandomInt(60, 80), getRandomInt(50, 70));
|
NetLinkTechnologiesServer.setHackingParameters(getRandomInt(375, 425), 320000000, getRandomInt(60, 80), getRandomInt(50, 70));
|
||||||
NetLinkTechnologiesServer.setPortProperties(3);
|
NetLinkTechnologiesServer.setPortProperties(3);
|
||||||
AddToAllServers(NetLinkTechnologiesServer);
|
AddToAllServers(NetLinkTechnologiesServer);
|
||||||
|
|
||||||
var JohnsonOrthopedicsServer = new Server();
|
var JohnsonOrthopedicsServer = new Server();
|
||||||
JohnsonOrthopedicsServer.init(createRandomIp(), "johnson-ortho", "Johnson Orthopedics", true, false, false, false, 4);
|
JohnsonOrthopedicsServer.init(createRandomIp(), "johnson-ortho", "Johnson Orthopedics", true, false, false, false, 4);
|
||||||
JohnsonOrthopedicsServer.setHackingParameters(getRandomInt(250, 300), 100000000, getRandomInt(40, 60), getRandomInt(40, 60));
|
JohnsonOrthopedicsServer.setHackingParameters(getRandomInt(250, 300), 80000000, getRandomInt(40, 60), getRandomInt(40, 60));
|
||||||
JohnsonOrthopedicsServer.setPortProperties(2);
|
JohnsonOrthopedicsServer.setPortProperties(2);
|
||||||
AddToAllServers(JohnsonOrthopedicsServer);
|
AddToAllServers(JohnsonOrthopedicsServer);
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var SilverHelixServer = new Server();
|
var SilverHelixServer = new Server();
|
||||||
SilverHelixServer.init(createRandomIp(), "silver-helix", "Silver Helix", true, false, false, false, 2);
|
SilverHelixServer.init(createRandomIp(), "silver-helix", "Silver Helix", true, false, false, false, 2);
|
||||||
SilverHelixServer.setHackingParameters(150, 55000000, 30, 30);
|
SilverHelixServer.setHackingParameters(150, 50000000, 30, 30);
|
||||||
SilverHelixServer.setPortProperties(2);
|
SilverHelixServer.setPortProperties(2);
|
||||||
AddToAllServers(SilverHelixServer);
|
AddToAllServers(SilverHelixServer);
|
||||||
|
|
||||||
@ -484,7 +484,7 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var OmegaSoftwareServer = new Server();
|
var OmegaSoftwareServer = new Server();
|
||||||
OmegaSoftwareServer.init(createRandomIp(), "omega-net", "Omega Software", true, false, false, false, 8);
|
OmegaSoftwareServer.init(createRandomIp(), "omega-net", "Omega Software", true, false, false, false, 8);
|
||||||
OmegaSoftwareServer.setHackingParameters(getRandomInt(180, 220), 85000000, getRandomInt(25, 35), getRandomInt(30, 40));
|
OmegaSoftwareServer.setHackingParameters(getRandomInt(180, 220), 75000000, getRandomInt(25, 35), getRandomInt(30, 40));
|
||||||
OmegaSoftwareServer.setPortProperties(2);
|
OmegaSoftwareServer.setPortProperties(2);
|
||||||
AddToAllServers(OmegaSoftwareServer);
|
AddToAllServers(OmegaSoftwareServer);
|
||||||
|
|
||||||
@ -529,7 +529,7 @@ initForeignServers = function() {
|
|||||||
|
|
||||||
var TheBlackHandServer = new Server();
|
var TheBlackHandServer = new Server();
|
||||||
TheBlackHandServer.init(createRandomIp(), "I.I.I.I", "I.I.I.I", true, false, false, false, 0);
|
TheBlackHandServer.init(createRandomIp(), "I.I.I.I", "I.I.I.I", true, false, false, false, 0);
|
||||||
TheBlackHandServer.setHackingParameters(getRandomInt(303, 325), 0, 0, 0);
|
TheBlackHandServer.setHackingParameters(getRandomInt(340, 365), 0, 0, 0);
|
||||||
TheBlackHandServer.setPortProperties(3);
|
TheBlackHandServer.setPortProperties(3);
|
||||||
AddToAllServers(TheBlackHandServer);
|
AddToAllServers(TheBlackHandServer);
|
||||||
SpecialServerIps.addIp(SpecialServerNames.TheBlackHandServer, TheBlackHandServer.ip);
|
SpecialServerIps.addIp(SpecialServerNames.TheBlackHandServer, TheBlackHandServer.ip);
|
||||||
@ -689,7 +689,7 @@ processSingleServerGrowth = function(server, numCycles) {
|
|||||||
var growthRate = CONSTANTS.ServerBaseGrowthRate;
|
var growthRate = CONSTANTS.ServerBaseGrowthRate;
|
||||||
var adjGrowthRate = 1 + (growthRate - 1) / server.hackDifficulty;
|
var adjGrowthRate = 1 + (growthRate - 1) / server.hackDifficulty;
|
||||||
if (adjGrowthRate > CONSTANTS.ServerMaxGrowthRate) {adjGrowthRate = CONSTANTS.ServerMaxGrowthRate;}
|
if (adjGrowthRate > CONSTANTS.ServerMaxGrowthRate) {adjGrowthRate = CONSTANTS.ServerMaxGrowthRate;}
|
||||||
console.log("Adjusted growth rate: " + adjGrowthRate);
|
//console.log("Adjusted growth rate: " + adjGrowthRate);
|
||||||
|
|
||||||
//Calculate adjusted server growth rate based on parameters
|
//Calculate adjusted server growth rate based on parameters
|
||||||
var serverGrowthPercentage = server.serverGrowth / 100;
|
var serverGrowthPercentage = server.serverGrowth / 100;
|
||||||
|
554
src/StockMarket.js
Normal file
554
src/StockMarket.js
Normal file
@ -0,0 +1,554 @@
|
|||||||
|
/* StockMarket.js */
|
||||||
|
function Stock(name, symbol, mv, b, otlkMag, initPrice=10000) {
|
||||||
|
this.symbol = symbol;
|
||||||
|
this.name = name;
|
||||||
|
this.price = initPrice;
|
||||||
|
|
||||||
|
this.playerShares = 0;
|
||||||
|
this.playerAvgPx = 0;
|
||||||
|
this.mv = mv;
|
||||||
|
this.b = b;
|
||||||
|
this.otlkMag = otlkMag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
StockMarket = {} //Full name to stock object
|
||||||
|
StockSymbols = {} //Full name to symbol
|
||||||
|
SymbolToStockMap = {}; //Symbol to Stock object
|
||||||
|
|
||||||
|
function initStockSymbols() {
|
||||||
|
//Stocks for companies at which you can work
|
||||||
|
StockSymbols[Locations.AevumECorp] = "ECP";
|
||||||
|
StockSymbols[Locations.Sector12MegaCorp] = "MGCP";
|
||||||
|
StockSymbols[Locations.Sector12BladeIndustries] = "BLD";
|
||||||
|
StockSymbols[Locations.AevumClarkeIncorporated] = "CLRK";
|
||||||
|
StockSymbols[Locations.VolhavenOmniTekIncorporated] = "OMTK";
|
||||||
|
StockSymbols[Locations.Sector12FourSigma] = "FSIG";
|
||||||
|
StockSymbols[Locations.ChongqingKuaiGongInternational] = "KGI";
|
||||||
|
StockSymbols[Locations.AevumFulcrumTechnologies] = "FLCM";
|
||||||
|
StockSymbols[Locations.IshimaStormTechnologies] = "STM";
|
||||||
|
StockSymbols[Locations.NewTokyoDefComm] = "DCOMM";
|
||||||
|
StockSymbols[Locations.VolhavenHeliosLabs] = "HLS";
|
||||||
|
StockSymbols[Locations.NewTokyoVitaLife] = "VITA";
|
||||||
|
StockSymbols[Locations.Sector12IcarusMicrosystems] = "ICRS";
|
||||||
|
StockSymbols[Locations.Sector12UniversalEnergy] = "UNV";
|
||||||
|
StockSymbols[Locations.AevumGalacticCybersystems] = "GLC"
|
||||||
|
StockSymbols[Locations.AevumAeroCorp] = "AERO";
|
||||||
|
StockSymbols[Locations.VolhavenOmniaCybersystems] = "OMN";
|
||||||
|
StockSymbols[Locations.ChongqingSolarisSpaceSystems] = "SLRS";
|
||||||
|
StockSymbols[Locations.NewTokyoGlobalPharmaceuticals] = "GPH";
|
||||||
|
StockSymbols[Locations.IshimaNovaMedical] = "NVMD";
|
||||||
|
StockSymbols[Locations.AevumWatchdogSecurity] = "WDS";
|
||||||
|
StockSymbols[Locations.VolhavenLexoCorp] = "LXO";
|
||||||
|
StockSymbols[Locations.AevumRhoConstruction] = "RHOC";
|
||||||
|
StockSymbols[Locations.Sector12AlphaEnterprises] = "APHE";
|
||||||
|
StockSymbols[Locations.VolhavenSysCoreSecurities] = "SYSC";
|
||||||
|
StockSymbols[Locations.VolhavenCompuTek] = "CTK";
|
||||||
|
StockSymbols[Locations.AevumNetLinkTechnologies] = "NTLK";
|
||||||
|
StockSymbols[Locations.IshimaOmegaSoftware] = "OMGA";
|
||||||
|
StockSymbols[Locations.Sector12FoodNStuff] = "FNS";
|
||||||
|
|
||||||
|
//Stocks for other companies
|
||||||
|
StockSymbols["Sigma Cosmetics"] = "SGC";
|
||||||
|
StockSymbols["Joes Guns"] = "JGN";
|
||||||
|
StockSymbols["Catalyst Ventures"] = "CTYS";
|
||||||
|
StockSymbols["UnitaLife Group"] = "UNT";
|
||||||
|
StockSymbols["Zeus Medical"] = "ZEUS";
|
||||||
|
StockSymbols["Taiyang Digital"] = "TAI";
|
||||||
|
StockSymbols["Microdyne Technologies"] = "MDYN";
|
||||||
|
StockSymbols["Titan Laboratories"] = "TITN";
|
||||||
|
}
|
||||||
|
|
||||||
|
function initStockMarket() {
|
||||||
|
StockMarket = {};
|
||||||
|
|
||||||
|
var ecorp = Locations.AevumECorp;
|
||||||
|
var ecorpStk = new Stock(ecorp, StockSymbols[ecorp], 0.5, true, 20, getRandomInt(20000, 25000));
|
||||||
|
StockMarket[ecorp] = ecorpStk;
|
||||||
|
|
||||||
|
var megacorp = Locations.Sector12MegaCorp;
|
||||||
|
var megacorpStk = new Stock(megacorp, StockSymbols[megacorp], 0.5, true, 20, getRandomInt(25000, 33000));
|
||||||
|
StockMarket[megacorp] = megacorpStk;
|
||||||
|
|
||||||
|
var blade = Locations.Sector12BladeIndustries;
|
||||||
|
var bladeStk = new Stock(blade, StockSymbols[blade], 0.75, true, 16, getRandomInt(15000, 22000));
|
||||||
|
StockMarket[blade] = bladeStk;
|
||||||
|
|
||||||
|
var clarke = Locations.AevumClarkeIncorporated;
|
||||||
|
var clarkeStk = new Stock(clarke, StockSymbols[clarke], 0.7, true, 15, getRandomInt(15000, 20000));
|
||||||
|
StockMarket[clarke] = clarkeStk;
|
||||||
|
|
||||||
|
var omnitek = Locations.VolhavenOmniTekIncorporated;
|
||||||
|
var omnitekStk = new Stock(omnitek, StockSymbols[omnitek], 0.65, true, 15, getRandomInt(35000, 40000));
|
||||||
|
StockMarket[omnitek] = omnitekStk;
|
||||||
|
|
||||||
|
var foursigma = Locations.Sector12FourSigma;
|
||||||
|
var foursigmaStk = new Stock(foursigma, StockSymbols[foursigma], 1.25, true, 20, getRandomInt(75000, 80000));
|
||||||
|
StockMarket[foursigma] = foursigmaStk;
|
||||||
|
|
||||||
|
var kuaigong = Locations.ChongqingKuaiGongInternational;
|
||||||
|
var kuaigongStk = new Stock(kuaigong, StockSymbols[kuaigong], 0.8, true, 12, getRandomInt(20000, 24000));
|
||||||
|
StockMarket[kuaigong] = kuaigongStk;
|
||||||
|
|
||||||
|
var fulcrum = Locations.AevumFulcrumTechnologies;
|
||||||
|
var fulcrumStk = new Stock(fulcrum, StockSymbols[fulcrum], 1.25, true, 21, getRandomInt(30000, 35000));
|
||||||
|
StockMarket[fulcrum] = fulcrumStk;
|
||||||
|
|
||||||
|
var storm = Locations.IshimaStormTechnologies;
|
||||||
|
var stormStk = new Stock(storm, StockSymbols[storm], 0.85, true, 9, getRandomInt(21000, 24000));
|
||||||
|
StockMarket[storm] = stormStk;
|
||||||
|
|
||||||
|
var defcomm = Locations.NewTokyoDefComm;
|
||||||
|
var defcommStk = new Stock(defcomm, StockSymbols[defcomm], 0.65, true, 12, getRandomInt(10000, 15000));
|
||||||
|
StockMarket[defcomm] = defcommStk;
|
||||||
|
|
||||||
|
var helios = Locations.VolhavenHeliosLabs;
|
||||||
|
var heliosStk = new Stock(helios, StockSymbols[helios], 0.6, true, 11, getRandomInt(12000, 16000));
|
||||||
|
StockMarket[helios] = heliosStk;
|
||||||
|
|
||||||
|
var vitalife = Locations.NewTokyoVitaLife;
|
||||||
|
var vitalifeStk = new Stock(vitalife, StockSymbols[vitalife], 0.75, true, 7.5, getRandomInt(10000, 12000));
|
||||||
|
StockMarket[vitalife] = vitalifeStk;
|
||||||
|
|
||||||
|
var icarus = Locations.Sector12IcarusMicrosystems;
|
||||||
|
var icarusStk = new Stock(icarus, StockSymbols[icarus], 0.65, true, 9, getRandomInt(16000, 20000));
|
||||||
|
StockMarket[icarus] = icarusStk;
|
||||||
|
|
||||||
|
var universalenergy = Locations.Sector12UniversalEnergy;
|
||||||
|
var universalenergyStk = new Stock(universalenergy, StockSymbols[universalenergy], 0.55, true, 12, getRandomInt(20000, 25000));
|
||||||
|
StockMarket[universalenergy] = universalenergyStk;
|
||||||
|
|
||||||
|
var galactic = Locations.AevumGalacticCybersystems;
|
||||||
|
var galacticStk = new Stock(galactic, StockSymbols[galactic], 0.6, true, 6, getRandomInt(8000, 10000));
|
||||||
|
StockMarket[galactic] = galacticStk;
|
||||||
|
|
||||||
|
var aerocorp = Locations.AevumAeroCorp;
|
||||||
|
var aerocorpStk = new Stock(aerocorp, StockSymbols[aerocorp], 0.6, true, 7, getRandomInt(10000, 15000));
|
||||||
|
StockMarket[aerocorp] = aerocorpStk;
|
||||||
|
|
||||||
|
var omnia = Locations.VolhavenOmniaCybersystems;
|
||||||
|
var omniaStk = new Stock(omnia, StockSymbols[omnia], 0.7, true, 4.5, getRandomInt(9000, 12000));
|
||||||
|
StockMarket[omnia] = omniaStk;
|
||||||
|
|
||||||
|
var solaris = Locations.ChongqingSolarisSpaceSystems;
|
||||||
|
var solarisStk = new Stock(solaris, StockSymbols[solaris], 0.75, true, 10, getRandomInt(18000, 24000));
|
||||||
|
StockMarket[solaris] = solarisStk;
|
||||||
|
|
||||||
|
var globalpharm = Locations.NewTokyoGlobalPharmaceuticals;
|
||||||
|
var globalpharmStk = new Stock(globalpharm, StockSymbols[globalpharm], 0.6, true, 12, getRandomInt(18000, 24000));
|
||||||
|
StockMarket[globalpharm] = globalpharmStk;
|
||||||
|
|
||||||
|
var nova = Locations.IshimaNovaMedical;
|
||||||
|
var novaStk = new Stock(nova, StockSymbols[nova], 0.75, true, 6, getRandomInt(18000, 24000));
|
||||||
|
StockMarket[nova] = novaStk;
|
||||||
|
|
||||||
|
var watchdog = Locations.AevumWatchdogSecurity;
|
||||||
|
var watchdogStk = new Stock(watchdog, StockSymbols[watchdog], 1, true, 2, getRandomInt(5000, 7500));
|
||||||
|
StockMarket[watchdog] = watchdogStk;
|
||||||
|
|
||||||
|
var lexocorp = Locations.VolhavenLexoCorp;
|
||||||
|
var lexocorpStk = new Stock(lexocorp, StockSymbols[lexocorp], 1.25, true, 3, getRandomInt(5000, 7500));
|
||||||
|
StockMarket[lexocorp] = lexocorpStk;
|
||||||
|
|
||||||
|
var rho = Locations.AevumRhoConstruction;
|
||||||
|
var rhoStk = new Stock(rho, StockSymbols[rho], 0.6, true, 1, getRandomInt(3000, 6000));
|
||||||
|
StockMarket[rho] = rhoStk;
|
||||||
|
|
||||||
|
var alpha = Locations.Sector12AlphaEnterprises;
|
||||||
|
var alphaStk = new Stock(alpha, StockSymbols[alpha], 1.05, true, 2, getRandomInt(5000, 7500));
|
||||||
|
StockMarket[alpha] = alphaStk;
|
||||||
|
|
||||||
|
var syscore = Locations.VolhavenSysCoreSecurities;
|
||||||
|
var syscoreStk = new Stock(syscore, StockSymbols[syscore], 1.25, true, 0, getRandomInt(4000, 7000))
|
||||||
|
StockMarket[syscore] = syscoreStk;
|
||||||
|
|
||||||
|
var computek = Locations.VolhavenCompuTek;
|
||||||
|
var computekStk = new Stock(computek, StockSymbols[computek], 0.9, true, 0, getRandomInt(2000, 5000));
|
||||||
|
StockMarket[computek] = computekStk;
|
||||||
|
|
||||||
|
var netlink = Locations.AevumNetLinkTechnologies;
|
||||||
|
var netlinkStk = new Stock(netlink, StockSymbols[netlink], 1, true, 1, getRandomInt(2000, 4000));
|
||||||
|
StockMarket[netlink] = netlinkStk;
|
||||||
|
|
||||||
|
var omega = Locations.IshimaOmegaSoftware;
|
||||||
|
var omegaStk = new Stock(omega, StockSymbols[omega], 1, true, 0.5, getRandomInt(3000, 6000));
|
||||||
|
StockMarket[omega] = omegaStk;
|
||||||
|
|
||||||
|
var fns = Locations.Sector12FoodNStuff;
|
||||||
|
var fnsStk = new Stock(fns, StockSymbols[fns], 0.75, false, 1, getRandomInt(1000, 4000));
|
||||||
|
StockMarket[fns] = fnsStk;
|
||||||
|
|
||||||
|
var sigmacosm = "Sigma Cosmetics";
|
||||||
|
var sigmacosmStk = new Stock(sigmacosm, StockSymbols[sigmacosm], 0.9, true, 0, getRandomInt(2000, 3000));
|
||||||
|
StockMarket[sigmacosm] = sigmacosmStk;
|
||||||
|
|
||||||
|
var joesguns = "Joes Guns";
|
||||||
|
var joesgunsStk = new Stock(joesguns, StockSymbols[joesguns], 1, true, 1, getRandomInt(500, 1000));
|
||||||
|
StockMarket[joesguns] = joesgunsStk;
|
||||||
|
|
||||||
|
var catalyst = "Catalyst Ventures";
|
||||||
|
var catalystStk = new Stock(catalyst, StockSymbols[catalyst], 1.25, true, 0, getRandomInt(1000, 1500));
|
||||||
|
StockMarket[catalyst] = catalystStk;
|
||||||
|
|
||||||
|
var unitalife = "UnitaLife Group";
|
||||||
|
var unitalifeStk = new Stock(unitalife, StockSymbols[unitalife], 0.75, true, 8, getRandomInt(10000, 15000));
|
||||||
|
StockMarket[unitalife] = unitalifeStk;
|
||||||
|
|
||||||
|
var zeus = "Zeus Medical";
|
||||||
|
var zeusStk = new Stock(zeus, StockSymbols[zeus], 0.6, true, 9, getRandomInt(20000, 25000));
|
||||||
|
StockMarket[zeus] = zeusStk;
|
||||||
|
|
||||||
|
var taiyang = "Taiyang Digital";
|
||||||
|
var taiyangStk = new Stock(taiyang, StockSymbols[taiyang], 0.75, true, 12, getRandomInt(25000, 30000));
|
||||||
|
StockMarket[taiyang] = taiyangStk;
|
||||||
|
|
||||||
|
var microdyne = "Microdyne Technologies";
|
||||||
|
var microdyneStk = new Stock(microdyne, StockSymbols[microdyne], 0.75, true, 8, getRandomInt(20000, 25000));
|
||||||
|
StockMarket[microdyne] = microdyneStk;
|
||||||
|
|
||||||
|
var titanlabs = "Titan Laboratories";
|
||||||
|
var titanlabsStk = new Stock(titanlabs, StockSymbols[titanlabs], 0.6, true, 11, getRandomInt(15000, 20000));
|
||||||
|
StockMarket[titanlabs] = titanlabsStk;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initSymbolToStockMap() {
|
||||||
|
for (var name in StockSymbols) {
|
||||||
|
if (StockSymbols.hasOwnProperty(name)) {
|
||||||
|
var stock = StockMarket[name];
|
||||||
|
if (stock == null) {
|
||||||
|
console.log("ERROR finding stock");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var symbol = StockSymbols[name];
|
||||||
|
SymbolToStockMap[symbol] = stock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Returns true if successful, false otherwise
|
||||||
|
function buyStock(stock, shares) {
|
||||||
|
if (shares == 0) {return false;}
|
||||||
|
if (stock == null || shares < 0) {
|
||||||
|
dialogBoxCreate("Failed to buy stock. This may be a bug, contact developer");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
shares = Math.round(shares);
|
||||||
|
|
||||||
|
var totalPrice = stock.price * shares;
|
||||||
|
if (Player.money < totalPrice + CONSTANTS.StockMarketCommission) {
|
||||||
|
dialogBoxCreate("You do not have enough money to purchase this. You need $" +
|
||||||
|
formatNumber(totalPrice + CONSTANTS.StockMarketCommission, 2).toString() + ".");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var origTotal = stock.playerShares * stock.playerAvgPx;
|
||||||
|
Player.loseMoney(totalPrice + CONSTANTS.StockMarketCommission);
|
||||||
|
var newTotal = origTotal + totalPrice;
|
||||||
|
stock.playerShares += shares;
|
||||||
|
stock.playerAvgPx = newTotal / stock.playerShares;
|
||||||
|
updateStockPlayerPosition(stock);
|
||||||
|
dialogBoxCreate("Bought " + formatNumber(shares, 0) + " shares of " + stock.symbol + " at $" +
|
||||||
|
formatNumber(stock.price, 2) + " per share. You also paid $" +
|
||||||
|
formatNumber(CONSTANTS.StockMarketCommission, 2) + " in commission fees.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Returns true if successful and false otherwise
|
||||||
|
function sellStock(stock, shares) {
|
||||||
|
if (shares == 0) {return false;}
|
||||||
|
if (stock == null || shares < 0) {
|
||||||
|
dialogBoxCreate("Failed to sell stock. This may be a bug, contact developer");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (shares > stock.playerShares) {shares = stock.playerShares;}
|
||||||
|
if (shares == 0) {return false;}
|
||||||
|
var gains = stock.price * shares - CONSTANTS.StockMarketCommission;
|
||||||
|
Player.gainMoney(gains);
|
||||||
|
stock.playerShares -= shares;
|
||||||
|
if (stock.playerShares == 0) {
|
||||||
|
stock.playerAvgPx = 0;
|
||||||
|
}
|
||||||
|
updateStockPlayerPosition(stock);
|
||||||
|
dialogBoxCreate("Sold " + formatNumber(shares, 0) + " shares of " + stock.symbol + " at $" +
|
||||||
|
formatNumber(stock.price, 2) + " per share. After commissions, you gained " +
|
||||||
|
"a total of $" + formatNumber(gains, 2));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateStockPrices() {
|
||||||
|
var v = Math.random();
|
||||||
|
for (var name in StockMarket) {
|
||||||
|
if (StockMarket.hasOwnProperty(name)) {
|
||||||
|
var stock = StockMarket[name];
|
||||||
|
var av = (v * stock.mv) / 100;
|
||||||
|
if (isNaN(av)) {av = .02;}
|
||||||
|
|
||||||
|
var chc = 50;
|
||||||
|
if (stock.b) {
|
||||||
|
chc = (chc + stock.otlkMag)/100;
|
||||||
|
if (isNaN(chc)) {chc = 0.5;}
|
||||||
|
} else {
|
||||||
|
chc = (chc - stock.otlkMag)/100;
|
||||||
|
if (isNaN(chc)) {chc = 0.5;}
|
||||||
|
}
|
||||||
|
|
||||||
|
var c = Math.random();
|
||||||
|
if (c < chc) {
|
||||||
|
stock.price *= (1 + av);
|
||||||
|
if (Engine.currentPage == Engine.Page.StockMarket) {
|
||||||
|
updateStockTicker(stock, true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stock.price /= (1 + av);
|
||||||
|
if (Engine.currentPage == Engine.Page.StockMarket) {
|
||||||
|
updateStockTicker(stock, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var otlkMagChange = stock.otlkMag * av;
|
||||||
|
if (stock.otlkMag <= 0.1) {
|
||||||
|
otlkMagChange = 1;
|
||||||
|
}
|
||||||
|
if (c < 0.5) {
|
||||||
|
stock.otlkMag += otlkMagChange;
|
||||||
|
} else {
|
||||||
|
stock.otlkMag -= otlkMagChange;
|
||||||
|
}
|
||||||
|
if (stock.otlkMag < 0) {
|
||||||
|
stock.otlkMag *= -1;
|
||||||
|
stock.b = !stock.b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var stockMarketContentCreated = false;
|
||||||
|
function displayStockMarketContent() {
|
||||||
|
if (Player.hasWseAccount == null) {Player.hasWseAccount = false;}
|
||||||
|
if (Player.hasTixApiAccess == null) {Player.hasTixApiAccess = false;}
|
||||||
|
|
||||||
|
var wseAccountButton = clearEventListeners("stock-market-buy-account");
|
||||||
|
wseAccountButton.innerText = "Buy WSE Account - $" + formatNumber(CONSTANTS.WSEAccountCost, 2).toString()
|
||||||
|
if (!Player.hasWseAccount && Player.money >= CONSTANTS.WSEAccountCost) {
|
||||||
|
wseAccountButton.setAttribute("class", "a-link-button");
|
||||||
|
} else {
|
||||||
|
wseAccountButton.setAttribute("class", "a-link-button-inactive");
|
||||||
|
}
|
||||||
|
wseAccountButton.addEventListener("click", function() {
|
||||||
|
Player.hasWseAccount = true;
|
||||||
|
initStockMarket();
|
||||||
|
Player.loseMoney(CONSTANTS.WSEAccountCost);
|
||||||
|
displayStockMarketContent();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
var stockList = document.getElementById("stock-market-list");
|
||||||
|
if (stockList == null) {return;}
|
||||||
|
|
||||||
|
if (!Player.hasWseAccount) {
|
||||||
|
stockMarketContentCreated = false;
|
||||||
|
while (stockList.firstChild) {
|
||||||
|
stockList.removeChild(stockList.firstChild);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!stockMarketContentCreated && Player.hasWseAccount) {
|
||||||
|
console.log("Creating Stock Market UI");
|
||||||
|
document.getElementById("stock-market-commission").innerHTML =
|
||||||
|
"Commission Fees: Every transaction you make has a $" +
|
||||||
|
formatNumber(CONSTANTS.StockMarketCommission, 2) + " commission fee.<br><br>" +
|
||||||
|
"WARNING: When you reset after installing Augmentations, the Stock Market is reset. " +
|
||||||
|
"This means all your positions are lost, so make sure to sell your stocks before installing " +
|
||||||
|
"Augmentations!";
|
||||||
|
|
||||||
|
var hdrLi = document.createElement("li");
|
||||||
|
var hdrName = document.createElement("p");
|
||||||
|
var hdrSym = document.createElement("p");
|
||||||
|
var hdrPrice = document.createElement("p");
|
||||||
|
var hdrQty = document.createElement("p");
|
||||||
|
var hdrBuySell = document.createElement("p")
|
||||||
|
var hdrAvgPrice = document.createElement("p");
|
||||||
|
var hdrShares = document.createElement("p");
|
||||||
|
var hdrReturn = document.createElement("p");
|
||||||
|
hdrName.style.display = "inline-block";
|
||||||
|
hdrName.innerText = "Stock Name";
|
||||||
|
hdrName.style.width = "8%";
|
||||||
|
hdrSym.style.display = "inline-block";
|
||||||
|
hdrSym.innerText = "Symbol";
|
||||||
|
hdrSym.style.width = "4%";
|
||||||
|
hdrPrice.style.display = "inline-block";
|
||||||
|
hdrPrice.innerText = "Price";
|
||||||
|
hdrPrice.style.width = "8%";
|
||||||
|
hdrQty.style.display = "inline-block";
|
||||||
|
hdrQty.innerText = "Quantity";
|
||||||
|
hdrQty.style.width = "3%";
|
||||||
|
hdrBuySell.style.display = "inline-block";
|
||||||
|
hdrBuySell.innerText = "Buy/Sell";
|
||||||
|
hdrBuySell.style.width = "5%";
|
||||||
|
hdrAvgPrice.style.display = "inline-block";
|
||||||
|
hdrAvgPrice.innerText = "Avg price of owned shares";
|
||||||
|
hdrAvgPrice.style.width = "7.5%";
|
||||||
|
hdrShares.style.display = "inline-block";
|
||||||
|
hdrShares.innerText = "Shares owned";
|
||||||
|
hdrShares.style.width = "4%";
|
||||||
|
hdrReturn.style.display = "inline-block";
|
||||||
|
hdrReturn.innerText = "Total Return";
|
||||||
|
hdrReturn.style.width = "6%";
|
||||||
|
hdrLi.appendChild(hdrName);
|
||||||
|
hdrLi.appendChild(hdrSym);
|
||||||
|
hdrLi.appendChild(hdrPrice);
|
||||||
|
hdrLi.appendChild(hdrQty);
|
||||||
|
hdrLi.appendChild(hdrBuySell);
|
||||||
|
hdrLi.appendChild(hdrAvgPrice);
|
||||||
|
hdrLi.appendChild(hdrShares);
|
||||||
|
hdrLi.appendChild(hdrReturn);
|
||||||
|
stockList.appendChild(hdrLi);
|
||||||
|
|
||||||
|
for (var name in StockMarket) {
|
||||||
|
if (StockMarket.hasOwnProperty(name)) {
|
||||||
|
(function() {
|
||||||
|
var stock = StockMarket[name];
|
||||||
|
|
||||||
|
var li = document.createElement("li");
|
||||||
|
var stkName = document.createElement("p");
|
||||||
|
var stkSym = document.createElement("p");
|
||||||
|
var stkPrice = document.createElement("p");
|
||||||
|
var qtyInput = document.createElement("input");
|
||||||
|
var buyButton = document.createElement("span");
|
||||||
|
var sellButton = document.createElement("span");
|
||||||
|
var avgPriceTxt = document.createElement("p");
|
||||||
|
var sharesTxt = document.createElement("p");
|
||||||
|
var returnTxt = document.createElement("p");
|
||||||
|
|
||||||
|
var tickerId = "stock-market-ticker-" + stock.symbol;
|
||||||
|
stkName.setAttribute("id", tickerId + "-name");
|
||||||
|
stkSym.setAttribute("id", tickerId + "-sym");
|
||||||
|
stkPrice.setAttribute("id", tickerId + "-price");
|
||||||
|
stkName.style.display = "inline-block";
|
||||||
|
stkName.style.width = "8%";
|
||||||
|
stkSym.style.display = "inline-block";
|
||||||
|
stkSym.style.width = "4%";
|
||||||
|
stkPrice.style.display = "inline-block";
|
||||||
|
stkPrice.style.width = "9%";
|
||||||
|
|
||||||
|
li.setAttribute("display", "inline-block");
|
||||||
|
|
||||||
|
qtyInput.setAttribute("type", "text");
|
||||||
|
qtyInput.setAttribute("id", tickerId + "-qty-input");
|
||||||
|
qtyInput.setAttribute("class", "stock-market-qty-input");
|
||||||
|
qtyInput.setAttribute("onkeydown", "return ( event.ctrlKey || event.altKey " +
|
||||||
|
" || (47<event.keyCode && event.keyCode<58 && event.shiftKey==false) " +
|
||||||
|
" || (95<event.keyCode && event.keyCode<106) " +
|
||||||
|
" || (event.keyCode==8) || (event.keyCode==9) " +
|
||||||
|
" || (event.keyCode>34 && event.keyCode<40) " +
|
||||||
|
" || (event.keyCode==46) )");
|
||||||
|
qtyInput.style.width = "3%";
|
||||||
|
qtyInput.style.display = "inline-block";
|
||||||
|
|
||||||
|
buyButton.innerHTML = "Buy";
|
||||||
|
buyButton.setAttribute("class", "stock-market-buy-sell-button");
|
||||||
|
buyButton.style.width = "3%";
|
||||||
|
buyButton.style.display = "inline-block";
|
||||||
|
buyButton.addEventListener("click", function() {
|
||||||
|
var shares = document.getElementById(tickerId + "-qty-input").value;
|
||||||
|
shares = Number(shares);
|
||||||
|
if (isNaN(shares)) {return false;}
|
||||||
|
buyStock(stock, shares);
|
||||||
|
});
|
||||||
|
sellButton.innerHTML = "Sell";
|
||||||
|
sellButton.setAttribute("class", "stock-market-buy-sell-button");
|
||||||
|
sellButton.style.width = "3%";
|
||||||
|
sellButton.style.display = "inline-block";
|
||||||
|
sellButton.addEventListener("click", function() {
|
||||||
|
var shares = document.getElementById(tickerId + "-qty-input").value;
|
||||||
|
shares = Number(shares);
|
||||||
|
if (isNaN(shares)) {return false;}
|
||||||
|
sellStock(stock, shares);
|
||||||
|
});
|
||||||
|
|
||||||
|
avgPriceTxt.setAttribute("id", tickerId + "-avgprice");
|
||||||
|
avgPriceTxt.style.display = "inline-block";
|
||||||
|
avgPriceTxt.style.width = "8%";
|
||||||
|
avgPriceTxt.style.color = "white";
|
||||||
|
sharesTxt.setAttribute("id", tickerId + "-shares");
|
||||||
|
sharesTxt.style.display = "inline-block";
|
||||||
|
sharesTxt.style.width = "4%";
|
||||||
|
sharesTxt.style.color = "white";
|
||||||
|
returnTxt.setAttribute("id", tickerId + "-return");
|
||||||
|
returnTxt.style.display = "inline-block";
|
||||||
|
returnTxt.style.width = "6%";
|
||||||
|
returnTxt.style.color = "white";
|
||||||
|
|
||||||
|
li.appendChild(stkName);
|
||||||
|
li.appendChild(stkSym);
|
||||||
|
li.appendChild(stkPrice);
|
||||||
|
li.appendChild(qtyInput);
|
||||||
|
li.appendChild(buyButton);
|
||||||
|
li.appendChild(sellButton);
|
||||||
|
li.appendChild(avgPriceTxt);
|
||||||
|
li.appendChild(sharesTxt);
|
||||||
|
li.appendChild(returnTxt);
|
||||||
|
stockList.appendChild(li);
|
||||||
|
|
||||||
|
updateStockTicker(stock, true);
|
||||||
|
updateStockPlayerPosition(stock);
|
||||||
|
}()); //Immediate invocation
|
||||||
|
}//End if
|
||||||
|
|
||||||
|
}
|
||||||
|
stockMarketContentCreated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//'increase' argument is a boolean indicating whether the price increased or decreased
|
||||||
|
function updateStockTicker(stock, increase) {
|
||||||
|
var tickerId = "stock-market-ticker-" + stock.symbol;
|
||||||
|
stkName = document.getElementById(tickerId + "-name");
|
||||||
|
stkSym = document.getElementById(tickerId + "-sym");
|
||||||
|
stkPrice = document.getElementById(tickerId + "-price");
|
||||||
|
|
||||||
|
if (stkName == null || stkSym == null || stkPrice == null) {
|
||||||
|
console.log("ERROR, couldn't find elements with tickerId " + tickerId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
stkName.innerText = stock.name;
|
||||||
|
stkSym.innerText = stock.symbol;
|
||||||
|
stkPrice.innerText = "$" + formatNumber(stock.price, 2).toString();
|
||||||
|
|
||||||
|
var returnTxt = document.getElementById(tickerId + "-return");
|
||||||
|
var totalCost = stock.playerShares * stock.playerAvgPx;
|
||||||
|
var gains = (stock.price - stock.playerAvgPx) * stock.playerShares;
|
||||||
|
var percentageGains = gains / totalCost;
|
||||||
|
if (totalCost > 0) {
|
||||||
|
returnTxt.innerText = "$" + formatNumber(gains, 2) + " (" +
|
||||||
|
formatNumber(percentageGains * 100, 2) + "%)";
|
||||||
|
} else {
|
||||||
|
returnTxt.innerText = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (increase) {
|
||||||
|
stkName.style.color = "#66ff33";
|
||||||
|
stkSym.style.color = "#66ff33";
|
||||||
|
stkPrice.style.color = "#66ff33";
|
||||||
|
} else {
|
||||||
|
stkName.style.color = "red";
|
||||||
|
stkSym.style.color = "red";
|
||||||
|
stkPrice.style.color = "red";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateStockPlayerPosition(stock) {
|
||||||
|
var tickerId = "stock-market-ticker-" + stock.symbol;
|
||||||
|
var avgPriceTxt = document.getElementById(tickerId + "-avgprice");
|
||||||
|
var sharesTxt = document.getElementById(tickerId + "-shares");
|
||||||
|
if (avgPriceTxt == null || sharesTxt == null) {
|
||||||
|
dialogBoxCreate("Could not find element for player positions for stock " +
|
||||||
|
stock.symbol + ". This is a bug please contact developer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
avgPriceTxt.innerText = "$" + formatNumber(stock.playerAvgPx, 2);
|
||||||
|
sharesTxt.innerText = stock.playerShares.toString();
|
||||||
|
}
|
@ -243,7 +243,7 @@ function determineAllPossibilitiesForTabCompletion(input, index=0) {
|
|||||||
return ["alias", "analyze", "cat", "check", "clear", "cls", "connect", "free",
|
return ["alias", "analyze", "cat", "check", "clear", "cls", "connect", "free",
|
||||||
"hack", "help", "home", "hostname", "ifconfig", "kill", "killall",
|
"hack", "help", "home", "hostname", "ifconfig", "kill", "killall",
|
||||||
"ls", "mem", "nano", "ps", "rm", "run", "scan", "scan-analyze",
|
"ls", "mem", "nano", "ps", "rm", "run", "scan", "scan-analyze",
|
||||||
"scp", "sudov", "tail", "theme", "top"].concat(Object.keys(Aliases));
|
"scp", "sudov", "tail", "theme", "top"].concat(Object.keys(Aliases)).concat(Object.keys(GlobalAliases));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input.startsWith ("buy ")) {
|
if (input.startsWith ("buy ")) {
|
||||||
@ -581,15 +581,18 @@ var Terminal = {
|
|||||||
case "alias":
|
case "alias":
|
||||||
if (commandArray.length == 1) {
|
if (commandArray.length == 1) {
|
||||||
printAliases();
|
printAliases();
|
||||||
} else if (commandArray.length == 2) {
|
return;
|
||||||
if (parseAliasDeclaration(commandArray[1])) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
post('Incorrect usage of alias command. Usage: alias [aliasname="value"]'); return;
|
|
||||||
}
|
}
|
||||||
} else {
|
if (commandArray.length == 2 ) {
|
||||||
post('Incorrect usage of alias command. Usage: alias [aliasname="value"]'); return;
|
var args = commandArray[1].split(" ");
|
||||||
|
if (args.length == 1 && parseAliasDeclaration(args[0])){
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if (args.length == 2 && args[0] == "-g" && parseAliasDeclaration(args[1],true)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post('Incorrect usage of alias command. Usage: alias [aliasname="value"]');
|
||||||
break;
|
break;
|
||||||
case "analyze":
|
case "analyze":
|
||||||
if (commandArray.length != 1) {
|
if (commandArray.length != 1) {
|
||||||
@ -1036,8 +1039,31 @@ var Terminal = {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "top":
|
case "top":
|
||||||
//TODO List each's script RAM usage
|
if(commandArray.length != 1) {
|
||||||
post("Not yet implemented");
|
post("Incorrect usage of top command. Usage: top"); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
post("Script Threads RAM Usage");
|
||||||
|
|
||||||
|
var currRunningScripts = Player.getCurrentServer().runningScripts;
|
||||||
|
//Iterate through scripts on current server
|
||||||
|
for(var i = 0; i < currRunningScripts.length; i++) {
|
||||||
|
var script = currRunningScripts[i];
|
||||||
|
|
||||||
|
//Calculate name padding
|
||||||
|
var numSpacesScript = 26 - script.filename.length; //26 -> width of name column
|
||||||
|
var spacesScript = Array(numSpacesScript+1).join(" ");
|
||||||
|
|
||||||
|
//Calculate thread padding
|
||||||
|
var numSpacesThread = 16 - (script.threads + "").length; //16 -> width of thread column
|
||||||
|
var spacesThread = Array(numSpacesThread+1).join(" ");
|
||||||
|
|
||||||
|
//Calculate and transform RAM usage
|
||||||
|
ramUsage = (script.scriptRef.ramUsage * script.threads) + "GB";
|
||||||
|
|
||||||
|
var entry = [script.filename, spacesScript, script.threads, spacesThread, ramUsage];
|
||||||
|
post(entry.join(""));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "unalias":
|
case "unalias":
|
||||||
if (commandArray.length != 2) {
|
if (commandArray.length != 2) {
|
||||||
@ -1300,6 +1326,19 @@ var Terminal = {
|
|||||||
post("Netscript hack() execution time: " + formatNumber(scriptCalculateHackingTime(serv), 1) + "s");
|
post("Netscript hack() execution time: " + formatNumber(scriptCalculateHackingTime(serv), 1) + "s");
|
||||||
post("Netscript grow() execution time: " + formatNumber(scriptCalculateGrowTime(serv)/1000, 1) + "s");
|
post("Netscript grow() execution time: " + formatNumber(scriptCalculateGrowTime(serv)/1000, 1) + "s");
|
||||||
post("Netscript weaken() execution time: " + formatNumber(scriptCalculateWeakenTime(serv)/1000, 1) + "s");
|
post("Netscript weaken() execution time: " + formatNumber(scriptCalculateWeakenTime(serv)/1000, 1) + "s");
|
||||||
|
break;
|
||||||
|
case Programs.AutoLink:
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("AutoLink.exe lets you automatically connect to other servers when using 'scan-analyze'.");
|
||||||
|
post("When using scan-analyze, click on a server's hostname to connect to it.");
|
||||||
|
break;
|
||||||
|
case Programs.DeepscanV1:
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("DeepscanV1.exe lets you run 'scan-analyze' with a depth up to 5.");
|
||||||
|
break;
|
||||||
|
case Programs.DeepscanV2:
|
||||||
|
post("This executable cannot be run.");
|
||||||
|
post("DeepscanV2.exe lets you run 'scan-analyze' with a depth up to 10.");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
post("Invalid executable. Cannot be run");
|
post("Invalid executable. Cannot be run");
|
||||||
|
@ -25,7 +25,7 @@ var Engine = {
|
|||||||
tutorialScriptsButton: null,
|
tutorialScriptsButton: null,
|
||||||
tutorialNetscriptButton: null,
|
tutorialNetscriptButton: null,
|
||||||
tutorialTravelingButton: null,
|
tutorialTravelingButton: null,
|
||||||
tutorialJobsButton: null,
|
tutorialCompaniesButton: null,
|
||||||
tutorialFactionsButton: null,
|
tutorialFactionsButton: null,
|
||||||
tutorialAugmentationsButton: null,
|
tutorialAugmentationsButton: null,
|
||||||
tutorialBackButton: null,
|
tutorialBackButton: null,
|
||||||
@ -54,8 +54,11 @@ var Engine = {
|
|||||||
factionAugmentationsContent: null,
|
factionAugmentationsContent: null,
|
||||||
augmentationsContent: null,
|
augmentationsContent: null,
|
||||||
tutorialContent: null,
|
tutorialContent: null,
|
||||||
|
infiltrationContent: null,
|
||||||
|
stockMarketContent: null,
|
||||||
locationContent: null,
|
locationContent: null,
|
||||||
workInProgressContent: null,
|
workInProgressContent: null,
|
||||||
|
redPillContent: null,
|
||||||
|
|
||||||
//Character info
|
//Character info
|
||||||
characterInfo: null,
|
characterInfo: null,
|
||||||
@ -79,6 +82,9 @@ var Engine = {
|
|||||||
Tutorial: "Tutorial",
|
Tutorial: "Tutorial",
|
||||||
Location: "Location",
|
Location: "Location",
|
||||||
workInProgress: "WorkInProgress",
|
workInProgress: "WorkInProgress",
|
||||||
|
RedPill: "RedPill",
|
||||||
|
Infiltration: "Infiltration",
|
||||||
|
StockMarket: "StockMarket",
|
||||||
},
|
},
|
||||||
currentPage: null,
|
currentPage: null,
|
||||||
|
|
||||||
@ -110,7 +116,6 @@ var Engine = {
|
|||||||
document.getElementById("script-editor-text").value = code;
|
document.getElementById("script-editor-text").value = code;
|
||||||
}
|
}
|
||||||
document.getElementById("script-editor-text").focus();
|
document.getElementById("script-editor-text").focus();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.ScriptEditor;
|
Engine.currentPage = Engine.Page.ScriptEditor;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -118,7 +123,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.activeScriptsContent.style.visibility = "visible";
|
Engine.Display.activeScriptsContent.style.visibility = "visible";
|
||||||
setActiveScriptsClickHandlers();
|
setActiveScriptsClickHandlers();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.ActiveScripts;
|
Engine.currentPage = Engine.Page.ActiveScripts;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -126,7 +130,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.hacknetNodesContent.style.visibility = "visible";
|
Engine.Display.hacknetNodesContent.style.visibility = "visible";
|
||||||
displayHacknetNodesContent();
|
displayHacknetNodesContent();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.HacknetNodes;
|
Engine.currentPage = Engine.Page.HacknetNodes;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -134,7 +137,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.worldContent.style.visibility = "visible";
|
Engine.Display.worldContent.style.visibility = "visible";
|
||||||
Engine.displayWorldInfo();
|
Engine.displayWorldInfo();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.World;
|
Engine.currentPage = Engine.Page.World;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -142,7 +144,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.createProgramContent.style.visibility = "visible";
|
Engine.Display.createProgramContent.style.visibility = "visible";
|
||||||
displayCreateProgramContent();
|
displayCreateProgramContent();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.CreateProgram;
|
Engine.currentPage = Engine.Page.CreateProgram;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -150,14 +151,12 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.factionsContent.style.visibility = "visible";
|
Engine.Display.factionsContent.style.visibility = "visible";
|
||||||
Engine.displayFactionsInfo();
|
Engine.displayFactionsInfo();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.Factions;
|
Engine.currentPage = Engine.Page.Factions;
|
||||||
},
|
},
|
||||||
|
|
||||||
loadFactionContent: function() {
|
loadFactionContent: function() {
|
||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.factionContent.style.visibility = "visible";
|
Engine.Display.factionContent.style.visibility = "visible";
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.Faction;
|
Engine.currentPage = Engine.Page.Faction;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -165,7 +164,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.augmentationsContent.style.visibility = "visible";
|
Engine.Display.augmentationsContent.style.visibility = "visible";
|
||||||
Engine.displayAugmentationsContent();
|
Engine.displayAugmentationsContent();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.Augmentations;
|
Engine.currentPage = Engine.Page.Augmentations;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -173,7 +171,6 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.tutorialContent.style.visibility = "visible";
|
Engine.Display.tutorialContent.style.visibility = "visible";
|
||||||
Engine.displayTutorialContent();
|
Engine.displayTutorialContent();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.Tutorial;
|
Engine.currentPage = Engine.Page.Tutorial;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -181,21 +178,38 @@ var Engine = {
|
|||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
Engine.Display.locationContent.style.visibility = "visible";
|
Engine.Display.locationContent.style.visibility = "visible";
|
||||||
displayLocationContent();
|
displayLocationContent();
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.Location;
|
Engine.currentPage = Engine.Page.Location;
|
||||||
},
|
},
|
||||||
|
|
||||||
loadWorkInProgressContent: function() {
|
loadWorkInProgressContent: function() {
|
||||||
Engine.hideAllContent();
|
Engine.hideAllContent();
|
||||||
|
|
||||||
var mainMenu = document.getElementById("mainmenu-container");
|
var mainMenu = document.getElementById("mainmenu-container");
|
||||||
mainMenu.style.visibility = "hidden";
|
mainMenu.style.visibility = "hidden";
|
||||||
|
|
||||||
Engine.Display.workInProgressContent.style.visibility = "visible";
|
Engine.Display.workInProgressContent.style.visibility = "visible";
|
||||||
|
|
||||||
Engine.currentPage = Engine.Page.WorkInProgress;
|
Engine.currentPage = Engine.Page.WorkInProgress;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
loadRedPillContent: function() {
|
||||||
|
Engine.hideAllContent();
|
||||||
|
var mainMenu = document.getElementById("mainmenu-container");
|
||||||
|
mainMenu.style.visibility = "hidden";
|
||||||
|
Engine.Display.redPillContent.style.visibility = "visible";
|
||||||
|
Engine.currentPage = Engine.Page.RedPill;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadInfiltrationContent: function() {
|
||||||
|
Engine.hideAllContent();
|
||||||
|
Engine.Display.infiltrationContent.style.visibility = "visible";
|
||||||
|
Engine.currentPage = Engine.Page.Infiltration;
|
||||||
|
},
|
||||||
|
|
||||||
|
loadStockMarketContent: function() {
|
||||||
|
Engine.hideAllContent();
|
||||||
|
Engine.Display.stockMarketContent.style.visibility = "visible";
|
||||||
|
displayStockMarketContent();
|
||||||
|
Engine.currentPage = Engine.Page.StockMarket;
|
||||||
|
},
|
||||||
|
|
||||||
//Helper function that hides all content
|
//Helper function that hides all content
|
||||||
hideAllContent: function() {
|
hideAllContent: function() {
|
||||||
Engine.Display.terminalContent.style.visibility = "hidden";
|
Engine.Display.terminalContent.style.visibility = "hidden";
|
||||||
@ -212,6 +226,9 @@ var Engine = {
|
|||||||
Engine.Display.tutorialContent.style.visibility = "hidden";
|
Engine.Display.tutorialContent.style.visibility = "hidden";
|
||||||
Engine.Display.locationContent.style.visibility = "hidden";
|
Engine.Display.locationContent.style.visibility = "hidden";
|
||||||
Engine.Display.workInProgressContent.style.visibility = "hidden";
|
Engine.Display.workInProgressContent.style.visibility = "hidden";
|
||||||
|
Engine.Display.redPillContent.style.visibility = "hidden";
|
||||||
|
Engine.Display.infiltrationContent.style.visibility = "hidden";
|
||||||
|
Engine.Display.stockMarketContent.style.visibility = "hidden";
|
||||||
|
|
||||||
//Location lists
|
//Location lists
|
||||||
Engine.aevumLocationsList.style.display = "none";
|
Engine.aevumLocationsList.style.display = "none";
|
||||||
@ -223,8 +240,10 @@ var Engine = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
displayCharacterOverviewInfo: function() {
|
displayCharacterOverviewInfo: function() {
|
||||||
|
if (Player.hp == null) {Player.hp = Player.max_hp;}
|
||||||
document.getElementById("character-overview-text").innerHTML =
|
document.getElementById("character-overview-text").innerHTML =
|
||||||
("Money: $" + formatNumber(Player.money, 2) + "<br>" +
|
("Hp: " + Player.hp + " / " + Player.max_hp + "<br>" +
|
||||||
|
"Money: $" + formatNumber(Player.money, 2) + "<br>" +
|
||||||
"Hack: " + (Player.hacking_skill).toLocaleString() + "<br>" +
|
"Hack: " + (Player.hacking_skill).toLocaleString() + "<br>" +
|
||||||
"Str: " + (Player.strength).toLocaleString() + "<br>" +
|
"Str: " + (Player.strength).toLocaleString() + "<br>" +
|
||||||
"Def: " + (Player.defense).toLocaleString() + "<br>" +
|
"Def: " + (Player.defense).toLocaleString() + "<br>" +
|
||||||
@ -335,6 +354,8 @@ var Engine = {
|
|||||||
console.log("Invalid city value in Player object!");
|
console.log("Invalid city value in Player object!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
document.getElementById("generic-locations-list").style.display = "inline";
|
||||||
},
|
},
|
||||||
|
|
||||||
displayFactionsInfo: function() {
|
displayFactionsInfo: function() {
|
||||||
@ -440,7 +461,7 @@ var Engine = {
|
|||||||
Engine.Clickables.tutorialScriptsButton.style.display = "block";
|
Engine.Clickables.tutorialScriptsButton.style.display = "block";
|
||||||
Engine.Clickables.tutorialNetscriptButton.style.display = "block";
|
Engine.Clickables.tutorialNetscriptButton.style.display = "block";
|
||||||
Engine.Clickables.tutorialTravelingButton.style.display = "block";
|
Engine.Clickables.tutorialTravelingButton.style.display = "block";
|
||||||
Engine.Clickables.tutorialJobsButton.style.display = "block";
|
Engine.Clickables.tutorialCompaniesButton.style.display = "block";
|
||||||
Engine.Clickables.tutorialFactionsButton.style.display = "block";
|
Engine.Clickables.tutorialFactionsButton.style.display = "block";
|
||||||
Engine.Clickables.tutorialAugmentationsButton.style.display = "block";
|
Engine.Clickables.tutorialAugmentationsButton.style.display = "block";
|
||||||
|
|
||||||
@ -456,7 +477,7 @@ var Engine = {
|
|||||||
Engine.Clickables.tutorialScriptsButton.style.display = "none";
|
Engine.Clickables.tutorialScriptsButton.style.display = "none";
|
||||||
Engine.Clickables.tutorialNetscriptButton.style.display = "none";
|
Engine.Clickables.tutorialNetscriptButton.style.display = "none";
|
||||||
Engine.Clickables.tutorialTravelingButton.style.display = "none";
|
Engine.Clickables.tutorialTravelingButton.style.display = "none";
|
||||||
Engine.Clickables.tutorialJobsButton.style.display = "none";
|
Engine.Clickables.tutorialCompaniesButton.style.display = "none";
|
||||||
Engine.Clickables.tutorialFactionsButton.style.display = "none";
|
Engine.Clickables.tutorialFactionsButton.style.display = "none";
|
||||||
Engine.Clickables.tutorialAugmentationsButton.style.display = "none";
|
Engine.Clickables.tutorialAugmentationsButton.style.display = "none";
|
||||||
|
|
||||||
@ -547,6 +568,7 @@ var Engine = {
|
|||||||
checkFactionInvitations: 100, //Check whether you qualify for any faction invitations every 5 minutes
|
checkFactionInvitations: 100, //Check whether you qualify for any faction invitations every 5 minutes
|
||||||
passiveFactionGrowth: 600,
|
passiveFactionGrowth: 600,
|
||||||
messages: 300,
|
messages: 300,
|
||||||
|
stockTick: 50, //Update stock prices
|
||||||
},
|
},
|
||||||
|
|
||||||
decrementAllCounters: function(numCycles = 1) {
|
decrementAllCounters: function(numCycles = 1) {
|
||||||
@ -621,6 +643,13 @@ var Engine = {
|
|||||||
checkForMessagesToSend();
|
checkForMessagesToSend();
|
||||||
Engine.Counters.messages = 300;
|
Engine.Counters.messages = 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Engine.Counters.stockTick <= 0) {
|
||||||
|
if (Player.hasWseAccount) {
|
||||||
|
updateStockPrices();
|
||||||
|
}
|
||||||
|
Engine.Counters.stockTick = 50;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Calculates the hack progress for a manual (non-scripted) hack and updates the progress bar/time accordingly */
|
/* Calculates the hack progress for a manual (non-scripted) hack and updates the progress bar/time accordingly */
|
||||||
@ -682,7 +711,11 @@ var Engine = {
|
|||||||
Engine.setDisplayElements(); //Sets variables for important DOM elements
|
Engine.setDisplayElements(); //Sets variables for important DOM elements
|
||||||
Engine.init(); //Initialize buttons, work, etc.
|
Engine.init(); //Initialize buttons, work, etc.
|
||||||
CompanyPositions.init();
|
CompanyPositions.init();
|
||||||
initAugmentations();
|
initAugmentations(); //Also calls Player.reapplyAllAugmentations()
|
||||||
|
initStockSymbols();
|
||||||
|
if (Player.hasWseAccount) {
|
||||||
|
initSymbolToStockMap();
|
||||||
|
}
|
||||||
|
|
||||||
//Calculate the number of cycles have elapsed while offline
|
//Calculate the number of cycles have elapsed while offline
|
||||||
Engine._lastUpdate = new Date().getTime();
|
Engine._lastUpdate = new Date().getTime();
|
||||||
@ -721,9 +754,6 @@ var Engine = {
|
|||||||
Player.totalPlaytime += time;
|
Player.totalPlaytime += time;
|
||||||
Player.playtimeSinceLastAug += time;
|
Player.playtimeSinceLastAug += time;
|
||||||
|
|
||||||
//Re-apply augmentations
|
|
||||||
Player.reapplyAllAugmentations();
|
|
||||||
|
|
||||||
Player.lastUpdate = Engine._lastUpdate;
|
Player.lastUpdate = Engine._lastUpdate;
|
||||||
Engine.start(); //Run main game loop and Scripts loop
|
Engine.start(); //Run main game loop and Scripts loop
|
||||||
dialogBoxCreate("While you were offline, your scripts generated $" +
|
dialogBoxCreate("While you were offline, your scripts generated $" +
|
||||||
@ -742,6 +772,7 @@ var Engine = {
|
|||||||
CompanyPositions.init();
|
CompanyPositions.init();
|
||||||
initAugmentations();
|
initAugmentations();
|
||||||
initMessages();
|
initMessages();
|
||||||
|
initStockSymbols();
|
||||||
|
|
||||||
//Start interactive tutorial
|
//Start interactive tutorial
|
||||||
iTutorialStart();
|
iTutorialStart();
|
||||||
@ -787,6 +818,13 @@ var Engine = {
|
|||||||
Engine.Display.tutorialContent = document.getElementById("tutorial-container");
|
Engine.Display.tutorialContent = document.getElementById("tutorial-container");
|
||||||
Engine.Display.tutorialContent.style.visibility = "hidden";
|
Engine.Display.tutorialContent.style.visibility = "hidden";
|
||||||
|
|
||||||
|
Engine.Display.infiltrationContent = document.getElementById("infiltration-container");
|
||||||
|
Engine.Display.infiltrationContent.style.visibility = "hidden";
|
||||||
|
|
||||||
|
Engine.Display.stockMarketContent = document.getElementById("stock-market-container");
|
||||||
|
Engine.Display.stockMarketContent.style.visibility = "hidden";
|
||||||
|
|
||||||
|
|
||||||
//Character info
|
//Character info
|
||||||
Engine.Display.characterInfo = document.getElementById("character-info");
|
Engine.Display.characterInfo = document.getElementById("character-info");
|
||||||
|
|
||||||
@ -806,6 +844,10 @@ var Engine = {
|
|||||||
Engine.Display.workInProgressContent = document.getElementById("work-in-progress-container");
|
Engine.Display.workInProgressContent = document.getElementById("work-in-progress-container");
|
||||||
Engine.Display.workInProgressContent.style.visibility = "hidden";
|
Engine.Display.workInProgressContent.style.visibility = "hidden";
|
||||||
|
|
||||||
|
//Red Pill / Hack World Daemon
|
||||||
|
Engine.Display.redPillContent = document.getElementById("red-pill-container");
|
||||||
|
Engine.Display.redPillContent.style.visibility = "hidden";
|
||||||
|
|
||||||
//Init Location buttons
|
//Init Location buttons
|
||||||
initLocationButtons();
|
initLocationButtons();
|
||||||
|
|
||||||
@ -843,9 +885,9 @@ var Engine = {
|
|||||||
Engine.displayTutorialPage(CONSTANTS.TutorialTravelingText);
|
Engine.displayTutorialPage(CONSTANTS.TutorialTravelingText);
|
||||||
});
|
});
|
||||||
|
|
||||||
Engine.Clickables.tutorialJobsButton = document.getElementById("tutorial-jobs-link");
|
Engine.Clickables.tutorialCompaniesButton = document.getElementById("tutorial-jobs-link");
|
||||||
Engine.Clickables.tutorialJobsButton.addEventListener("click", function() {
|
Engine.Clickables.tutorialCompaniesButton.addEventListener("click", function() {
|
||||||
Engine.displayTutorialPage(CONSTANTS.TutorialJobsText);
|
Engine.displayTutorialPage(CONSTANTS.TutorialCompaniesText);
|
||||||
});
|
});
|
||||||
|
|
||||||
Engine.Clickables.tutorialFactionsButton = document.getElementById("tutorial-factions-link");
|
Engine.Clickables.tutorialFactionsButton = document.getElementById("tutorial-factions-link");
|
||||||
|
90
utils/InfiltrationBox.js
Normal file
90
utils/InfiltrationBox.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/* InfiltrationBox.js */
|
||||||
|
infiltrationBoxClose = function() {
|
||||||
|
var box = document.getElementById("infiltration-box-container");
|
||||||
|
box.style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
infiltrationBoxOpen = function() {
|
||||||
|
var box = document.getElementById("infiltration-box-container");
|
||||||
|
box.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
infiltrationSetText = function(txt) {
|
||||||
|
var textBox = document.getElementById("infiltration-box-text");
|
||||||
|
textBox.innerHTML = txt;
|
||||||
|
}
|
||||||
|
|
||||||
|
//ram argument is in GB
|
||||||
|
infiltrationBoxCreate = function(inst) {
|
||||||
|
var totalValue = 0;
|
||||||
|
for (var i = 0; i < inst.secretsStolen.length; ++i) {
|
||||||
|
totalValue += inst.secretsStolen[i];
|
||||||
|
}
|
||||||
|
if (totalValue == 0) {
|
||||||
|
dialogBoxCreate("You successfully escaped the facility but you did not steal " +
|
||||||
|
"anything of worth when infiltrating.<br><br>" +
|
||||||
|
"You gained:<br>" +
|
||||||
|
formatNumber(inst.hackingExpGained, 3) + " hacking exp<br>" +
|
||||||
|
formatNumber(inst.strExpGained, 3) + " str exp<br>" +
|
||||||
|
formatNumber(inst.defExpGained, 3) + " def exp<br>" +
|
||||||
|
formatNumber(inst.dexExpGained, 3) + " dex exp<br>" +
|
||||||
|
formatNumber(inst.agiExpGained, 3) + " agi exp<br>" +
|
||||||
|
formatNumber(inst.chaExpGained, 3) + " cha exp<br>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var moneyValue = totalValue * CONSTANTS.InfiltrationMoneyValue;
|
||||||
|
infiltrationSetText("You can sell the classified documents and secrets " +
|
||||||
|
"you stole from " + inst.companyName + " for $" +
|
||||||
|
formatNumber(moneyValue, 2) + " on the black market or you can give it " +
|
||||||
|
"to a faction to gain " + formatNumber(totalValue, 3) + " reputation with " +
|
||||||
|
"that faction.");
|
||||||
|
var selector = document.getElementById("infiltration-faction-select");
|
||||||
|
selector.innerHTML = "";
|
||||||
|
for (var i = 0; i < Player.factions.length; ++i) {
|
||||||
|
selector.innerHTML += "<option value='" + Player.factions[i] +
|
||||||
|
"'>" + Player.factions[i] + "</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
var sellButton = clearEventListeners("infiltration-box-sell");
|
||||||
|
setTimeout(function() {
|
||||||
|
sellButton.addEventListener("click", function() {
|
||||||
|
Player.gainMoney(moneyValue);
|
||||||
|
dialogBoxCreate("You sold the classified information you stole from " + inst.companyName +
|
||||||
|
" for $" + moneyValue + " on the black market!<br><br>" +
|
||||||
|
"You gained:<br>" +
|
||||||
|
formatNumber(inst.hackingExpGained, 3) + " hacking exp<br>" +
|
||||||
|
formatNumber(inst.strExpGained, 3) + " str exp<br>" +
|
||||||
|
formatNumber(inst.defExpGained, 3) + " def exp<br>" +
|
||||||
|
formatNumber(inst.dexExpGained, 3) + " dex exp<br>" +
|
||||||
|
formatNumber(inst.agiExpGained, 3) + " agi exp<br>" +
|
||||||
|
formatNumber(inst.chaExpGained, 3) + " cha exp<br>");
|
||||||
|
infiltrationBoxClose();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}, 750);
|
||||||
|
|
||||||
|
var factionButton = clearEventListeners("infiltration-box-faction");
|
||||||
|
setTimeout(function() {
|
||||||
|
factionButton.addEventListener("click", function() {
|
||||||
|
var facName = selector.options[selector.selectedIndex].value;
|
||||||
|
var faction = Factions[facName];
|
||||||
|
if (faction == null) {
|
||||||
|
dialogBoxCreate("Error finding faction. This is a bug please report to developer");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
faction.playerReputation += totalValue;
|
||||||
|
dialogBoxCreate("You gave the classified information you stole from " + inst.companyName +
|
||||||
|
" to " + facName + " and gained " + formatNumber(totalValue, 3) + " reputation with the faction. <br><br>" +
|
||||||
|
"You gained:<br>" +
|
||||||
|
formatNumber(inst.hackingExpGained, 3) + " hacking exp<br>" +
|
||||||
|
formatNumber(inst.strExpGained, 3) + " str exp<br>" +
|
||||||
|
formatNumber(inst.defExpGained, 3) + " def exp<br>" +
|
||||||
|
formatNumber(inst.dexExpGained, 3) + " dex exp<br>" +
|
||||||
|
formatNumber(inst.agiExpGained, 3) + " agi exp<br>" +
|
||||||
|
formatNumber(inst.chaExpGained, 3) + " cha exp<br>");
|
||||||
|
infiltrationBoxClose();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}, 750);
|
||||||
|
infiltrationBoxOpen();
|
||||||
|
}
|
@ -36,7 +36,7 @@ purchaseRamForHomeBoxCreate = function() {
|
|||||||
//Calculate cost
|
//Calculate cost
|
||||||
//Have cost increase by some percentage each time RAM has been upgraded
|
//Have cost increase by some percentage each time RAM has been upgraded
|
||||||
var cost = currentRam * CONSTANTS.BaseCostFor1GBOfRamHome;
|
var cost = currentRam * CONSTANTS.BaseCostFor1GBOfRamHome;
|
||||||
var mult = Math.pow(1.44, numUpgrades);
|
var mult = Math.pow(1.52, numUpgrades);
|
||||||
cost = cost * mult;
|
cost = cost * mult;
|
||||||
|
|
||||||
purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" +
|
purchaseRamForHomeBoxSetText("Would you like to purchase additional RAM for your home computer? <br><br>" +
|
||||||
|
Loading…
Reference in New Issue
Block a user