Added copy save to clipbaord option. Added getOrders netscript function. Fixed Corporation Bugs

This commit is contained in:
danielyxie 2018-12-30 16:11:48 -08:00
parent fb9676e04e
commit 5091b56ff2
12 changed files with 1464 additions and 1229 deletions

19
css/gameoptions.scss Normal file

@ -0,0 +1,19 @@
/* Styling for the game options/settings
*
* Styling for the actual Game Options popup box can be found in popupboxes.scss
* This stylesheet is for everything inside the Game Options pop-up box
*/
@import "theme";
#game-options-right-panel {
a {
display: block;
width: 46%;
}
button {
display: inline-block;
width: 46%;
}
}

1642
dist/engine.bundle.js vendored

File diff suppressed because it is too large Load Diff

15
dist/engine.css vendored

@ -1512,6 +1512,21 @@ button {
#import-game-file-selector {
display: none; }
/* Styling for the game options/settings
*
* Styling for the actual Game Options popup box can be found in popupboxes.scss
* This stylesheet is for everything inside the Game Options pop-up box
*/
/* COLORS */
/* Attributes */
#game-options-right-panel a {
display: block;
width: 46%; }
#game-options-right-panel button {
display: inline-block;
width: 46%; }
/* COLORS */
/* Attributes */
/* interactivetutorial.css */

858
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

@ -964,27 +964,30 @@
</form>
</div>
<div id="game-options-right-panel">
<a class="a-link-button" style="display:block;" href="https://bitburner.readthedocs.io/en/latest/changelog.html" target="_blank"> Changelog </a>
<a class="a-link-button" style="display:block;" href="https://bitburner.wikia.com" target="_blank">Wiki</a>
<a class="a-link-button" style="display:block;" href="https://www.reddit.com/r/bitburner" target="_blank">Subreddit</a>
<a id="save-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Save Game </a>
<a id="delete-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Delete Game </a>
<a id="export-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Export Game </a>
<a class="a-link-button" href="https://bitburner.readthedocs.io/en/latest/changelog.html" target="_blank"> Changelog </a>
<a class="a-link-button" href="https://bitburner.wikia.com" target="_blank">Wiki</a>
<a class="a-link-button" href="https://www.reddit.com/r/bitburner" target="_blank">Subreddit</a>
<button id="save-game-link" class="a-link-button"> Save Game </button>
<button id="delete-game-link" class="a-link-button"> Delete Game </button>
<button id="export-game-link" class="a-link-button"> Export Game </button>
<input type="file" id="import-game-file-selector" name="file" />
<a id="import-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Import Game </a>
<a id="debug-delete-scripts-link" class="a-link-button tooltip" style="display:block;width:46%;">
<button id="import-game-link" class="a-link-button"> Import Game </button>
<button id="copy-save-to-clipboard-link" class="std-button">
Copy Save data to Clipboard
</button>
<button id="debug-delete-scripts-link" class="a-link-button tooltip">
(DEBUG) Delete Active Scripts
<span class="tooltiptextleft">
Debug option used to forcefully kill all active running scripts, in case there is a bug or some unexpected issue with the game. After
using this, save the game and then reload the page.
</span>
</a>
<a id="debug-soft-reset" class="a-link-button tooltip" style="display:block;width:46%;">
</button>
<button id="debug-soft-reset" class="a-link-button tooltip">
(DEBUG) Soft Reset
<span class="tooltiptextleft">
Perform a soft reset. Resets everything as if you had just purchased an Augmentation.
</span>
</a>
</button>
</div>
</div>
</div>

@ -95,7 +95,7 @@ let NetscriptFunctions =
// TIX API
"getStockPrice|getStockPosition|getStockSymbols|buyStock|sellStock|" +
"shortStock|sellShort|" +
"placeOrder|cancelOrder|getStockVolatility|getStockForecast|" +
"placeOrder|cancelOrder|getOrders|getStockVolatility|getStockForecast|" +
"purchase4SMarketData|purchase4SMarketDataTixApi|" +
// Hacknet Node API

@ -520,12 +520,15 @@ export let CONSTANTS: IMap<any> = {
** Slightly reduced the effect "Real Estate" has on the Production Multiplier for the
Agriculture industry
* Added getOrders() Netscript function to the TIX API
*
* Stock Market, Travel, and Corporation main menu links are now properly styled
* Many pop-up/dialog boxes now support the 'Enter' and 'Esc' hotkeys. If you
find a pop-up/dialog box that doesnt support this, let me know specifically which one
('Enter' for the default option, 'Esc' for cancelling and closing the pop-up box)
* Added "brace_style = preserve_inline" configuration to Script Editor Beautifier
* ServerProfiler.exe can now be purchased from the Dark Web
* Added an option to copy save data to clipboard
`
}

@ -2425,12 +2425,17 @@ Warehouse.prototype.createMaterialUI = function(mat, matName, parentRefs) {
let marketTaClickListener = () => {
const popupId = "cmpy-mgmt-marketta-popup";
const markupLimit = mat.getMarkupLimit();
const ta1 = createElemenet("p", {
innerText: "The maximum sale price you can mark this up to is " +
const ta1 = createElement("p", {
innerHTML: "<u><strong>Market-TA.I</strong></u><br>" +
"The maximum sale price you can mark this up to is " +
numeralWrapper.format(mat.bCost + markupLimit, '$0.000a') +
". This means that if you set the sale price higher than this, " +
"you will begin to experience a loss in number of sales",
});
const closeBtn = createPopupCloseButton(popupId, {
class: "std-button",
display: "block",
});
if (industry.hasResearch("Market-TA.II")) {
let updateTa2Text;
@ -2442,11 +2447,11 @@ Warehouse.prototype.createMaterialUI = function(mat, matName, parentRefs) {
updateTa2Text();
},
type: "number",
value: mat.sCost,
value: mat.bCost,
});
// Function that updates the text in ta2Text element
updateTa2Text = () => {
updateTa2Text = function() {
const sCost = parseFloat(ta2Input.value);
let markup = 1;
if (sCost > mat.bCost) {
@ -2462,15 +2467,16 @@ Warehouse.prototype.createMaterialUI = function(mat, matName, parentRefs) {
markup = mat.bCost / sCost;
}
}
ta2Text.innerText = `If you sell at ${numeralWrapper.format(sCost, "$0.0001")}, ` +
`then you will sell ${formatNumber(markup, 2)}x as much compared `
ta2Text.innerHTML = `<br><u><strong>Market-TA.II</strong></u><br>` +
`If you sell at ${numeralWrapper.format(sCost, "$0.0001")}, ` +
`then you will sell ${formatNumber(markup, 5)}x as much compared ` +
`to if you sold at market price.`;
}
updateTa2Text();
createPopup(popupId, [ta1, ta2Input, ta2Text]);
createPopup(popupId, [ta1, ta2Text, ta2Input, closeBtn]);
} else {
// Market-TA.I only
createPopup(popupId, [ta1]);
createPopup(popupId, [ta1, closeBtn]);
}
};

@ -1713,6 +1713,40 @@ function NetscriptFunctions(workerScript) {
};
return cancelOrder(params, workerScript);
},
getOrders : function() {
if (workerScript.checkingRam) {
return updateStaticRam("getOrders", CONSTANTS.ScriptBuySellStockRamCost);
}
updateDynamicRam("getOrders", CONSTANTS.ScriptBuySellStockRamCost);
if (!Player.hasTixApiAccess) {
throw makeRuntimeRejectMsg(workerScript, "You don't have TIX API Access! Cannot use getOrders()");
}
if (Player.bitNodeN !== 8) {
if (!(hasWallStreetSF && wallStreetSFLvl >= 3)) {
throw makeRuntimeRejectMsg(workerScript, "ERROR: Cannot use getOrders(). You must either be in BitNode-8 or have Level 3 of Source-File 8");
}
}
const orders = {};
const stockMarketOrders = StockMarket["Orders"];
for (let symbol in stockMarketOrders) {
const orderBook = stockMarketOrders[symbol];
if (orderBook.constructor === Array && orderBook.length > 0) {
orders[symbol] = [];
for (let i = 0; i < orderBook.length; ++i) {
orders[symbol].push({
shares: orderBook[i].shares,
price: orderBook[i].price,
type: orderBook[i].type,
position: orderBook[i].pos,
});
}
}
}
return orders;
},
getStockVolatility : function(symbol) {
if (workerScript.checkingRam) {
return updateStaticRam("getStockVolatility", CONSTANTS.ScriptBuySellStockRamCost);

@ -54,7 +54,7 @@ function BitburnerSaveObject() {
this.CorporationResearchTreesSave = "";
}
BitburnerSaveObject.prototype.saveGame = function(db) {
BitburnerSaveObject.prototype.getSaveString = function() {
this.PlayerSave = JSON.stringify(Player);
//Delete all logs from all running scripts
@ -85,6 +85,12 @@ BitburnerSaveObject.prototype.saveGame = function(db) {
}
var saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this))));
return saveString;
}
BitburnerSaveObject.prototype.saveGame = function(db) {
var saveString = this.getSaveString();
//We'll save to both localstorage and indexedDb
var objectStore = db.transaction(["savestring"], "readwrite").objectStore("savestring");
var request = objectStore.put(saveString, "save");

@ -9,6 +9,7 @@ import { exceptionAlert } from "../utils/helpers/e
import { removeLoadingScreen } from "../utils/uiHelpers/removeLoadingScreen";
import {numeralWrapper} from "./ui/numeralFormat";
import { createStatusText } from "./ui/createStatusText";
import {formatNumber,
convertTimeMsToTimeElapsedString,
@ -89,6 +90,7 @@ import "../css/terminal.scss";
import "../css/menupages.scss";
import "../css/workinprogress.scss";
import "../css/popupboxes.scss";
import "../css/gameoptions.scss";
import "../css/interactivetutorial.scss";
import "../css/loader.scss";
import "../css/missions.scss";
@ -97,6 +99,7 @@ import "../css/bladeburner.scss";
import "../css/gang.scss";
import "../css/treant.css";
/* Shortcuts to navigate through the game
* Alt-t - Terminal
* Alt-c - Character
@ -1804,6 +1807,43 @@ const Engine = {
document.getElementById("city-menu-link").removeAttribute("class");
document.getElementById("tutorial-menu-link").removeAttribute("class");
// Copy Save Data to Clipboard
document.getElementById("copy-save-to-clipboard-link").addEventListener("click", function() {
const saveString = saveObject.getSaveString();
if (!navigator.clipboard) {
// Async Clipboard API not supported, so we'll use this using the
// textarea and document.execCommand('copy') trick
const textArea = document.createElement("textarea");
textArea.value = saveString;
textArea.setAttribute("readonly", '');
textArea.style.position = 'absolute';
textArea.left = '-9999px';
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
const successful = document.execCommand("copy");
if (successful) {
createStatusText("Copied save to clipboard");
} else {
createStatusText("Failed to copy save");
}
} catch(e) {
console.error("Unable to copy save data to clipboard using document.execCommand('copy')");
createStatusText("Failed to copy save");
}
document.body.removeChild(textArea);
} else {
// Use the Async Clipboard API
navigator.clipboard.writeText(saveString).then(function() {
createStatusText("Copied save to clipboard");
}, function(e) {
console.error("Unable to copy save data to clipboard using Async API");
createStatusText("Failed to copy save");
})
}
});
//DEBUG Delete active Scripts on home
document.getElementById("debug-delete-scripts-link").addEventListener("click", function() {
console.log("Deleting running scripts on home computer");

@ -966,27 +966,30 @@ if (htmlWebpackPlugin.options.googleAnalytics.trackingId) { %>
</form>
</div>
<div id="game-options-right-panel">
<a class="a-link-button" style="display:block;" href="https://bitburner.readthedocs.io/en/latest/changelog.html" target="_blank"> Changelog </a>
<a class="a-link-button" style="display:block;" href="https://bitburner.wikia.com" target="_blank">Wiki</a>
<a class="a-link-button" style="display:block;" href="https://www.reddit.com/r/bitburner" target="_blank">Subreddit</a>
<a id="save-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Save Game </a>
<a id="delete-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Delete Game </a>
<a id="export-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Export Game </a>
<a class="a-link-button" href="https://bitburner.readthedocs.io/en/latest/changelog.html" target="_blank"> Changelog </a>
<a class="a-link-button" href="https://bitburner.wikia.com" target="_blank">Wiki</a>
<a class="a-link-button" href="https://www.reddit.com/r/bitburner" target="_blank">Subreddit</a>
<button id="save-game-link" class="a-link-button"> Save Game </button>
<button id="delete-game-link" class="a-link-button"> Delete Game </button>
<button id="export-game-link" class="a-link-button"> Export Game </button>
<input type="file" id="import-game-file-selector" name="file" />
<a id="import-game-link" class="a-link-button" style="display:inline-block;width:46%;"> Import Game </a>
<a id="debug-delete-scripts-link" class="a-link-button tooltip" style="display:block;width:46%;">
<button id="import-game-link" class="a-link-button"> Import Game </button>
<button id="copy-save-to-clipboard-link" class="std-button">
Copy Save data to Clipboard
</button>
<button id="debug-delete-scripts-link" class="a-link-button tooltip">
(DEBUG) Delete Active Scripts
<span class="tooltiptextleft">
Debug option used to forcefully kill all active running scripts, in case there is a bug or some unexpected issue with the game. After
using this, save the game and then reload the page.
</span>
</a>
<a id="debug-soft-reset" class="a-link-button tooltip" style="display:block;width:46%;">
</button>
<button id="debug-soft-reset" class="a-link-button tooltip">
(DEBUG) Soft Reset
<span class="tooltiptextleft">
Perform a soft reset. Resets everything as if you had just purchased an Augmentation.
</span>
</a>
</button>
</div>
</div>
</div>