mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-10 01:33:54 +01:00
Character,Augmentations now display by how much the stats will increase.
This commit is contained in:
parent
6cd6f28820
commit
79a06dd91c
@ -59,10 +59,16 @@
|
||||
}
|
||||
|
||||
#character-hp-wrapper { color: $my-stat-hp-color; }
|
||||
.character-hp-cell { color: $my-stat-hp-color; }
|
||||
#character-money-wrapper { color: $my-stat-money-color; }
|
||||
.character-money-cell { color: $my-stat-money-color; }
|
||||
#character-hack-wrapper { color: $my-stat-hack-color; }
|
||||
.character-hack-cell { color: $my-stat-hack-color; }
|
||||
#character-cha-wrapper { color: $my-stat-cha-color; }
|
||||
.character-cha-cell { color: $my-stat-cha-color; }
|
||||
#character-int-wrapper { color: $my-stat-int-color; }
|
||||
.character-int-cell { color: $my-stat-int-color; }
|
||||
.character-combat-cell { color: $my-stat-physical; }
|
||||
|
||||
.character-overview-btn {
|
||||
@include borderRadius(12px);
|
||||
|
@ -17,7 +17,8 @@ body {
|
||||
p,
|
||||
pre,
|
||||
h2,
|
||||
.text {
|
||||
.text,
|
||||
td {
|
||||
color: var(--my-font-color);
|
||||
}
|
||||
|
||||
|
@ -5,92 +5,104 @@ import * as React from "react";
|
||||
|
||||
import { Player } from "../../Player";
|
||||
import { numeralWrapper } from "../../ui/numeralFormat";
|
||||
import { Augmentations} from "../Augmentations";
|
||||
|
||||
function calculateAugmentedStats() {
|
||||
const augP: any = {};
|
||||
for(const aug of Player.queuedAugmentations) {
|
||||
const augObj = Augmentations[aug.name];
|
||||
for (const mult in augObj.mults) {
|
||||
const v = augP[mult] ? augP[mult] : 1;
|
||||
augP[mult] = v * augObj.mults[mult];
|
||||
}
|
||||
}
|
||||
return augP;
|
||||
}
|
||||
|
||||
export function PlayerMultipliers(): React.ReactElement {
|
||||
const mults = calculateAugmentedStats();
|
||||
function MultiplierTable(rows: any[]): React.ReactElement {
|
||||
function improvements(r: number) {
|
||||
let elems: any[] = [];
|
||||
if(r) {
|
||||
elems = [
|
||||
<td key='2'> => </td>,
|
||||
<td key='3'>{numeralWrapper.formatPercentage(r)}</td>
|
||||
];
|
||||
}
|
||||
return elems;
|
||||
}
|
||||
|
||||
return <table>
|
||||
<tbody>
|
||||
{rows.map((r: any) => <tr key={r[0]}>
|
||||
<td key='0'><span>{r[0]} multiplier: </span></td>
|
||||
<td key='1' style={{textAlign: 'right'}}>{numeralWrapper.formatPercentage(r[1])}</td>
|
||||
{improvements(r[2])}
|
||||
</tr>)}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<p><strong><u>Total Multipliers:</u></strong></p>
|
||||
<p><strong><u>Multipliers:</u></strong></p><br />
|
||||
{MultiplierTable([
|
||||
['Hacking Chance ', Player.hacking_chance_mult, Player.hacking_chance_mult*mults.hacking_chance_mult],
|
||||
['Hacking Speed ', Player.hacking_speed_mult, Player.hacking_speed_mult*mults.hacking_speed_mult],
|
||||
['Hacking Money ', Player.hacking_money_mult, Player.hacking_money_mult*mults.hacking_money_mult],
|
||||
['Hacking Growth ', Player.hacking_grow_mult, Player.hacking_grow_mult*mults.hacking_grow_mult]
|
||||
])}<br />
|
||||
|
||||
<pre>
|
||||
{'Hacking Chance multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_chance_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacking Speed multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_speed_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacking Money multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_money_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacking Growth multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_grow_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Hacking Level multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacking Experience multiplier: ' + numeralWrapper.formatPercentage(Player.hacking_exp_mult)}
|
||||
</pre>
|
||||
<br />
|
||||
<pre>
|
||||
{'Strength Level multiplier: ' + numeralWrapper.formatPercentage(Player.strength_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Strength Experience multiplier: ' + numeralWrapper.formatPercentage(Player.strength_exp_mult)}
|
||||
</pre>
|
||||
<br />
|
||||
<pre>
|
||||
{'Defense Level multiplier: ' + numeralWrapper.formatPercentage(Player.defense_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Defense Experience multiplier: ' + numeralWrapper.formatPercentage(Player.defense_exp_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Dexterity Level multiplier: ' + numeralWrapper.formatPercentage(Player.dexterity_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Dexterity Experience multiplier: ' + numeralWrapper.formatPercentage(Player.dexterity_exp_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Agility Level multiplier: ' + numeralWrapper.formatPercentage(Player.agility_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Agility Experience multiplier: ' + numeralWrapper.formatPercentage(Player.agility_exp_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Charisma Level multiplier: ' + numeralWrapper.formatPercentage(Player.charisma_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Charisma Experience multiplier: ' + numeralWrapper.formatPercentage(Player.charisma_exp_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Hacknet Node production multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_money_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacknet Node purchase cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_purchase_cost_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacknet Node RAM upgrade cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_ram_cost_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacknet Node Core purchase cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_core_cost_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Hacknet Node level upgrade cost multiplier: ' + numeralWrapper.formatPercentage(Player.hacknet_node_level_cost_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Company reputation gain multiplier: ' + numeralWrapper.formatPercentage(Player.company_rep_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Faction reputation gain multiplier: ' + numeralWrapper.formatPercentage(Player.faction_rep_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Salary multiplier: ' + numeralWrapper.formatPercentage(Player.work_money_mult)}
|
||||
</pre><br />
|
||||
<pre>
|
||||
{'Crime success multiplier: ' + numeralWrapper.formatPercentage(Player.crime_success_mult)}
|
||||
</pre>
|
||||
<pre>
|
||||
{'Crime money multiplier: ' + numeralWrapper.formatPercentage(Player.crime_money_mult)}
|
||||
</pre>
|
||||
{MultiplierTable([
|
||||
['Hacking Level ', Player.hacking_mult, Player.hacking_mult*mults.hacking_mult],
|
||||
['Hacking Experience ', Player.hacking_exp_mult, Player.hacking_exp_mult*mults.hacking_exp_mult]
|
||||
])}<br />
|
||||
|
||||
|
||||
{MultiplierTable([
|
||||
['Strength Level ', Player.strength_mult, Player.strength_mult*mults.strength_mult],
|
||||
['Strength Experience ', Player.strength_exp_mult, Player.strength_exp_mult*mults.strength_exp_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Defense Level ', Player.defense_mult, Player.defense_mult*mults.defense_mult],
|
||||
['Defense Experience ', Player.defense_exp_mult, Player.defense_exp_mult*mults.defense_exp_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Dexterity Level ', Player.dexterity_mult, Player.dexterity_mult*mults.dexterity_mult],
|
||||
['Dexterity Experience ', Player.dexterity_exp_mult, Player.dexterity_exp_mult*mults.dexterity_exp_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Agility Level ', Player.agility_mult, Player.agility_mult*mults.agility_mult],
|
||||
['Agility Experience ', Player.agility_exp_mult, Player.agility_exp_mult*mults.agility_exp_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Charisma Level ', Player.charisma_mult, Player.charisma_mult*mults.charisma_mult],
|
||||
['Charisma Experience ', Player.charisma_exp_mult, Player.charisma_exp_mult*mults.charisma_exp_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Hacknet Node production ', Player.hacknet_node_money_mult, Player.hacknet_node_money_mult*mults.hacknet_node_money_mult],
|
||||
['Hacknet Node purchase cost ', Player.hacknet_node_purchase_cost_mult, Player.hacknet_node_purchase_cost_mult*mults.hacknet_node_purchase_cost_mult],
|
||||
['Hacknet Node RAM upgrade cost ', Player.hacknet_node_ram_cost_mult, Player.hacknet_node_ram_cost_mult*mults.hacknet_node_ram_cost_mult],
|
||||
['Hacknet Node Core purchase cost ', Player.hacknet_node_core_cost_mult, Player.hacknet_node_core_cost_mult*mults.hacknet_node_core_cost_mult],
|
||||
['Hacknet Node level upgrade cost ', Player.hacknet_node_level_cost_mult, Player.hacknet_node_level_cost_mult*mults.hacknet_node_level_cost_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Company reputation gain ', Player.company_rep_mult, Player.company_rep_mult*mults.company_rep_mult],
|
||||
['Faction reputation gain ', Player.faction_rep_mult, Player.faction_rep_mult*mults.faction_rep_mult],
|
||||
['Salary ', Player.work_money_mult, Player.work_money_mult*mults.work_money_mult]
|
||||
])}<br />
|
||||
|
||||
{MultiplierTable([
|
||||
['Crime success ', Player.crime_success_mult, Player.crime_success_mult*mults.crime_success_mult],
|
||||
['Crime money ', Player.crime_money_mult, Player.crime_money_mult*mults.crime_money_mult],
|
||||
])}<br />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -74,7 +74,6 @@ for (const md of codingContractTypesMetadata) {
|
||||
// tslint:disable-next-line
|
||||
CodingContractTypes[md.name] = new CodingContractType(md.name, md.desc, md.gen, md.solver, md.difficulty, md.numTries);
|
||||
}
|
||||
console.info(`${Object.keys(CodingContractTypes).length} Coding Contract Types loaded`);
|
||||
|
||||
/**
|
||||
* Enum representing the different types of rewards a Coding Contract can give
|
||||
|
@ -258,5 +258,7 @@ export let CONSTANTS: IMap<any> = {
|
||||
* BN12 now reduces contract money
|
||||
* Character>Stats percentages are aligned, server and hacknet limit are
|
||||
displayed, if the player has SF5 the reduces stats are shown.
|
||||
* Character>Augmentations now displays by how much the player stats will
|
||||
increase.
|
||||
`
|
||||
}
|
||||
|
@ -500,7 +500,6 @@ export function createAndAddWorkerScript(runningScriptObj, server) {
|
||||
// the script from being cleaned up twice
|
||||
if (!w.running) { return; }
|
||||
|
||||
console.log("Stopping script " + w.name + " because it finished running naturally");
|
||||
killWorkerScript(s);
|
||||
w.log("Script finished running");
|
||||
}).catch(function(w) {
|
||||
@ -512,8 +511,8 @@ export function createAndAddWorkerScript(runningScriptObj, server) {
|
||||
if (isScriptErrorMessage(w.errorMessage)) {
|
||||
var errorTextArray = w.errorMessage.split("|");
|
||||
if (errorTextArray.length != 4) {
|
||||
console.log("ERROR: Something wrong with Error text in evaluator...");
|
||||
console.log("Error text: " + errorText);
|
||||
console.error("ERROR: Something wrong with Error text in evaluator...");
|
||||
console.error("Error text: " + errorText);
|
||||
return;
|
||||
}
|
||||
var serverIp = errorTextArray[1];
|
||||
@ -532,11 +531,11 @@ export function createAndAddWorkerScript(runningScriptObj, server) {
|
||||
w.env.stopFlag = true;
|
||||
} else if (isScriptErrorMessage(w)) {
|
||||
dialogBoxCreate("Script runtime unknown error. This is a bug please contact game developer");
|
||||
console.log("ERROR: Evaluating workerscript returns only error message rather than WorkerScript object. THIS SHOULDN'T HAPPEN: " + w.toString());
|
||||
console.error("ERROR: Evaluating workerscript returns only error message rather than WorkerScript object. THIS SHOULDN'T HAPPEN: " + w.toString());
|
||||
return;
|
||||
} else {
|
||||
dialogBoxCreate("An unknown script died for an unknown reason. This is a bug please contact game dev");
|
||||
console.log(w);
|
||||
console.error(w);
|
||||
}
|
||||
|
||||
killWorkerScript(s);
|
||||
|
@ -411,7 +411,7 @@ export function recordMoneySource(amt, source) {
|
||||
|
||||
export function gainHackingExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into Player.gainHackingExp()"); return;
|
||||
console.error("ERR: NaN passed into Player.gainHackingExp()"); return;
|
||||
}
|
||||
this.hacking_exp += exp;
|
||||
if(this.hacking_exp < 0) {
|
||||
@ -421,7 +421,7 @@ export function gainHackingExp(exp) {
|
||||
|
||||
export function gainStrengthExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into Player.gainStrengthExp()"); return;
|
||||
console.error("ERR: NaN passed into Player.gainStrengthExp()"); return;
|
||||
}
|
||||
this.strength_exp += exp;
|
||||
if(this.strength_exp < 0) {
|
||||
@ -431,7 +431,7 @@ export function gainStrengthExp(exp) {
|
||||
|
||||
export function gainDefenseExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into player.gainDefenseExp()"); return;
|
||||
console.error("ERR: NaN passed into player.gainDefenseExp()"); return;
|
||||
}
|
||||
this.defense_exp += exp;
|
||||
if(this.defense_exp < 0) {
|
||||
@ -441,7 +441,7 @@ export function gainDefenseExp(exp) {
|
||||
|
||||
export function gainDexterityExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into Player.gainDexterityExp()"); return;
|
||||
console.error("ERR: NaN passed into Player.gainDexterityExp()"); return;
|
||||
}
|
||||
this.dexterity_exp += exp;
|
||||
if(this.dexterity_exp < 0) {
|
||||
@ -451,7 +451,7 @@ export function gainDexterityExp(exp) {
|
||||
|
||||
export function gainAgilityExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into Player.gainAgilityExp()"); return;
|
||||
console.error("ERR: NaN passed into Player.gainAgilityExp()"); return;
|
||||
}
|
||||
this.agility_exp += exp;
|
||||
if(this.agility_exp < 0) {
|
||||
@ -461,7 +461,7 @@ export function gainAgilityExp(exp) {
|
||||
|
||||
export function gainCharismaExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERR: NaN passed into Player.gainCharismaExp()"); return;
|
||||
console.error("ERR: NaN passed into Player.gainCharismaExp()"); return;
|
||||
}
|
||||
this.charisma_exp += exp;
|
||||
if(this.charisma_exp < 0) {
|
||||
@ -471,7 +471,7 @@ export function gainCharismaExp(exp) {
|
||||
|
||||
export function gainIntelligenceExp(exp) {
|
||||
if (isNaN(exp)) {
|
||||
console.log("ERROR: NaN passed into Player.gainIntelligenceExp()"); return;
|
||||
console.error("ERROR: NaN passed into Player.gainIntelligenceExp()"); return;
|
||||
}
|
||||
if (SourceFileFlags[5] > 0 || this.intelligence > 0) {
|
||||
this.intelligence_exp += exp;
|
||||
@ -1827,7 +1827,6 @@ export function isQualified(company, position) {
|
||||
|
||||
/********** Reapplying Augmentations and Source File ***********/
|
||||
export function reapplyAllAugmentations(resetMultipliers=true) {
|
||||
console.log("Re-applying augmentations");
|
||||
if (resetMultipliers) {
|
||||
this.resetMultipliers();
|
||||
}
|
||||
@ -1856,7 +1855,6 @@ export function reapplyAllAugmentations(resetMultipliers=true) {
|
||||
}
|
||||
|
||||
export function reapplyAllSourceFiles() {
|
||||
console.log("Re-applying source files");
|
||||
//Will always be called after reapplyAllAugmentations() so multipliers do not have to be reset
|
||||
//this.resetMultipliers();
|
||||
|
||||
|
@ -112,7 +112,7 @@ BitburnerSaveObject.prototype.saveGame = function(db) {
|
||||
var request = objectStore.put(saveString, "save");
|
||||
|
||||
request.onerror = function(e) {
|
||||
console.log("Error saving game to IndexedDB: " + e);
|
||||
console.error("Error saving game to IndexedDB: " + e);
|
||||
}
|
||||
|
||||
request.onsuccess = function(e) {
|
||||
@ -124,7 +124,7 @@ BitburnerSaveObject.prototype.saveGame = function(db) {
|
||||
} catch(e) {
|
||||
if (e.code == 22) {
|
||||
createStatusText("Save failed for localStorage! Check console(F12)");
|
||||
console.log("Failed to save game to localStorage because the size of the save file " +
|
||||
console.error("Failed to save game to localStorage because the size of the save file " +
|
||||
"is too large. However, the game will still be saved to IndexedDb if your browser " +
|
||||
"supports it. If you would like to save to localStorage as well, then " +
|
||||
"consider killing several of your scripts to " +
|
||||
@ -247,7 +247,7 @@ function loadGame(saveString) {
|
||||
try {
|
||||
Settings.load(saveObj.SettingsSave);
|
||||
} catch(e) {
|
||||
console.log("ERROR: Failed to parse Settings. Re-initing default values");
|
||||
console.error("ERROR: Failed to parse Settings. Re-initing default values");
|
||||
Settings.init();
|
||||
}
|
||||
} else {
|
||||
@ -257,7 +257,7 @@ function loadGame(saveString) {
|
||||
try {
|
||||
loadFconf(saveObj.FconfSettingsSave);
|
||||
} catch(e) {
|
||||
console.log("ERROR: Failed to parse .fconf Settings.");
|
||||
console.error("ERROR: Failed to parse .fconf Settings.");
|
||||
}
|
||||
}
|
||||
if (saveObj.hasOwnProperty("VersionSave")) {
|
||||
@ -281,7 +281,7 @@ function loadGame(saveString) {
|
||||
try {
|
||||
loadAllGangs(saveObj.AllGangsSave);
|
||||
} catch(e) {
|
||||
console.log("ERROR: Failed to parse AllGangsSave: " + e);
|
||||
console.error("ERROR: Failed to parse AllGangsSave: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -439,7 +439,7 @@ function loadImportedGame(saveObj, saveString) {
|
||||
try {
|
||||
loadFconf(saveObj.FconfSettingsSave);
|
||||
} catch(e) {
|
||||
console.log("ERROR: Failed to load .fconf settings when importing");
|
||||
console.error("ERROR: Failed to load .fconf settings when importing");
|
||||
}
|
||||
}
|
||||
if (saveObj.hasOwnProperty("VersionSave")) {
|
||||
@ -460,7 +460,7 @@ function loadImportedGame(saveObj, saveString) {
|
||||
try {
|
||||
loadAllGangs(saveObj.AllGangsSave);
|
||||
} catch(e) {
|
||||
console.log("ERROR: Failed to parse AllGangsSave: " + e);
|
||||
console.error("ERROR: Failed to parse AllGangsSave: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -592,7 +592,7 @@ const Engine = {
|
||||
factionsList.appendChild(createElement("a", {
|
||||
class:"a-link-button", innerText:factionName, padding:"4px", margin:"4px",
|
||||
display:"inline-block",
|
||||
clickListener:()=>{
|
||||
clickListener: () => {
|
||||
Engine.loadFactionContent();
|
||||
displayFactionContent(factionName);
|
||||
return false;
|
||||
@ -1536,19 +1536,18 @@ window.onload = function() {
|
||||
indexedDbRequest = window.indexedDB.open("bitburnerSave", 1);
|
||||
|
||||
indexedDbRequest.onerror = function(e) {
|
||||
console.log("Error opening indexedDB: ");
|
||||
console.log(e);
|
||||
console.error("Error opening indexedDB: ");
|
||||
console.error(e);
|
||||
return Engine.load(null); // Try to load from localstorage
|
||||
};
|
||||
|
||||
indexedDbRequest.onsuccess = function(e) {
|
||||
console.log("Opening bitburnerSave database successful!");
|
||||
indexedDb = e.target.result;
|
||||
var transaction = indexedDb.transaction(["savestring"]);
|
||||
var objectStore = transaction.objectStore("savestring");
|
||||
var request = objectStore.get("save");
|
||||
request.onerror = function(e) {
|
||||
console.log("Error in Database request to get savestring: " + e);
|
||||
console.error("Error in Database request to get savestring: " + e);
|
||||
return Engine.load(null); // Try to load from localstorage
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,6 @@ document.addEventListener("keydown", function (event) {
|
||||
let dialogBoxOpened = false;
|
||||
|
||||
function dialogBoxCreate(txt, preformatted=false) {
|
||||
console.log(`dialogBoxCreate() called`)
|
||||
var container = document.createElement("div");
|
||||
container.setAttribute("class", "dialog-box-container");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user