mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-29 04:17:05 +02:00
v0.51.0 (#826)
* Hash upgrades and Bladeburner skills can now be clicked to copy to clipboard * Aug purchase confirmation popup displays money in 0.000a format * Character now displays hacknet server info properly * Character,Info now displays hacknet server info correctly. * Formulas (#825) Formulas API v0.1 * Make all money the same color, same for reputation, format all numbers consistently. * rename a lot of the formulas function to no longer contain calculate * added hacking related formulas * removed unused variable * v0.51.0
This commit is contained in:
@@ -5,6 +5,8 @@ import { IPlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentatio
|
||||
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
||||
import { CityName } from "../Locations/data/CityNames";
|
||||
import { CONSTANTS } from "../Constants";
|
||||
import { calculateSkill } from "./formulas/skill";
|
||||
import { calculateIntelligenceBonus } from "./formulas/intelligence";
|
||||
|
||||
// Interface that defines a generic object used to track experience/money
|
||||
// earnings for tasks
|
||||
@@ -127,7 +129,7 @@ export abstract class Person {
|
||||
* stat level. Stat-agnostic (same formula for every stat)
|
||||
*/
|
||||
calculateStat(exp: number, mult: number=1): number {
|
||||
return Math.max(Math.floor(mult*(32 * Math.log(exp + 534.5) - 200)), 1);
|
||||
return calculateSkill(exp, mult);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -212,10 +214,6 @@ export abstract class Person {
|
||||
|
||||
|
||||
getIntelligenceBonus(weight: number): number {
|
||||
// 15 => +1.4% when you initially acquire int
|
||||
// 50 => +3.8% mid game
|
||||
// 100 => +6.6% late game
|
||||
// 250 => +13.4% realistic best possible
|
||||
return 1+(weight*Math.pow(this.intelligence, 0.8)/600);
|
||||
return calculateIntelligenceBonus(this.intelligence, weight);
|
||||
}
|
||||
}
|
||||
|
||||
+214
-191
@@ -28,6 +28,8 @@ import { Locations } from "../../Locations/Locations";
|
||||
import { CityName } from "../../Locations/data/CityNames";
|
||||
import { LocationName } from "../../Locations/data/LocationNames";
|
||||
import { Sleeve } from "../../PersonObjects/Sleeve/Sleeve";
|
||||
import { calculateSkill as calculateSkillF } from "../formulas/skill";
|
||||
import { calculateIntelligenceBonus } from "../formulas/intelligence";
|
||||
import {
|
||||
AllServers,
|
||||
AddToAllServers,
|
||||
@@ -55,6 +57,14 @@ import {
|
||||
} from "../../../utils/JSONReviver";
|
||||
import {convertTimeMsToTimeElapsedString} from "../../../utils/StringHelperFunctions";
|
||||
|
||||
import { Reputation } from "../../ui/React/Reputation";
|
||||
import { Money } from "../../ui/React/Money";
|
||||
import { MoneyRate } from "../../ui/React/MoneyRate";
|
||||
import { ReputationRate } from "../../ui/React/ReputationRate";
|
||||
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
|
||||
const CYCLES_PER_SEC = 1000 / CONSTANTS.MilliPerCycle;
|
||||
|
||||
export function init() {
|
||||
@@ -293,7 +303,7 @@ export function receiveInvite(factionName) {
|
||||
|
||||
//Calculates skill level based on experience. The same formula will be used for every skill
|
||||
export function calculateSkill(exp, mult=1) {
|
||||
return Math.max(Math.floor(mult*(32 * Math.log(exp + 534.5) - 200)), 1);
|
||||
return calculateSkillF(exp, mult);
|
||||
}
|
||||
|
||||
export function updateSkillLevels() {
|
||||
@@ -520,7 +530,7 @@ export function resetWorkStatus() {
|
||||
this.createProgramName = "";
|
||||
this.className = "";
|
||||
|
||||
document.getElementById("work-in-progress-text").innerHTML = "";
|
||||
ReactDOM.unmountComponentAtNode(document.getElementById("work-in-progress-text"));
|
||||
}
|
||||
|
||||
export function processWorkEarnings(numCycles=1) {
|
||||
@@ -611,22 +621,22 @@ export function work(numCycles) {
|
||||
|
||||
const position = this.jobs[this.companyName];
|
||||
|
||||
var txt = document.getElementById("work-in-progress-text");
|
||||
txt.innerHTML = "You are currently working as a " + position +
|
||||
" at " + this.companyName + " (Current Company Reputation: " +
|
||||
numeralWrapper.format(companyRep, '0,0') + ")<br><br>" +
|
||||
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||
"You have earned: <br><br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + " ($" + numeralWrapper.format(this.workMoneyGainRate * CYCLES_PER_SEC, '0,0.00') + " / sec) <br><br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " (" + numeralWrapper.format(this.workRepGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) reputation for this company <br><br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workHackExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) hacking exp <br><br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workStrExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDefExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDexExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workAgiExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) agility exp <br><br> " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workChaExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) charisma exp <br><br>" +
|
||||
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish, " +
|
||||
"but you will only gain half of the reputation you've earned so far."
|
||||
var elem = document.getElementById("work-in-progress-text");
|
||||
ReactDOM.render(<>
|
||||
You are currently working as a {position} at {this.companyName} (Current Company Reputation: {Reputation(companyRep)})<br /><br />
|
||||
You have been working for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
You have earned: <br /><br />
|
||||
{Money(this.workMoneyGained)} ({MoneyRate(this.workMoneyGainRate * CYCLES_PER_SEC)}) <br /><br />
|
||||
{Reputation(this.workRepGained)} ({ReputationRate(this.workRepGainRate * CYCLES_PER_SEC)}) reputation for this company <br /><br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} ({`${numeralWrapper.formatExp(this.workHackExpGainRate * CYCLES_PER_SEC)} / sec`}) hacking exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} ({`${numeralWrapper.formatExp(this.workStrExpGainRate * CYCLES_PER_SEC)} / sec`}) strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} ({`${numeralWrapper.formatExp(this.workDefExpGainRate * CYCLES_PER_SEC)} / sec`}) defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} ({`${numeralWrapper.formatExp(this.workDexExpGainRate * CYCLES_PER_SEC)} / sec`}) dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} ({`${numeralWrapper.formatExp(this.workAgiExpGainRate * CYCLES_PER_SEC)} / sec`}) agility exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} ({`${numeralWrapper.formatExp(this.workChaExpGainRate * CYCLES_PER_SEC)} / sec`}) charisma exp <br /><br />
|
||||
You will automatically finish after working for 8 hours. You can cancel earlier if you wish,
|
||||
but you will only gain half of the reputation you've earned so far.
|
||||
</>, elem);
|
||||
}
|
||||
|
||||
export function finishWork(cancelled, sing=false) {
|
||||
@@ -640,23 +650,27 @@ export function finishWork(cancelled, sing=false) {
|
||||
|
||||
this.updateSkillLevels();
|
||||
|
||||
var txt = "You earned a total of: <br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + "<br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " reputation for the company <br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp <br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp<br>";
|
||||
let content = <>
|
||||
You earned a total of: <br />
|
||||
{Money(this.workMoneyGained)}<br />
|
||||
{Reputation(this.workRepGained)} reputation for the company <br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking exp <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility exp <br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma exp<br />
|
||||
</>
|
||||
|
||||
if (cancelled) {
|
||||
txt = "You worked a short shift of " + convertTimeMsToTimeElapsedString(this.timeWorked) + " <br><br> " +
|
||||
"Since you cancelled your work early, you only gained half of the reputation you earned. <br><br>" + txt;
|
||||
content = <>
|
||||
You worked a short shift of {convertTimeMsToTimeElapsedString(this.timeWorked)} <br /><br />
|
||||
Since you cancelled your work early, you only gained half of the reputation you earned. <br /><br />{content}
|
||||
</>
|
||||
} else {
|
||||
txt = "You worked a full shift of 8 hours! <br><br> " + txt;
|
||||
content = <>You worked a full shift of 8 hours! <br /><br />{content}</>;
|
||||
}
|
||||
if (!sing) {dialogBoxCreate(txt);}
|
||||
if (!sing) {dialogBoxCreate(content);}
|
||||
|
||||
var mainMenu = document.getElementById("mainmenu-container");
|
||||
mainMenu.style.visibility = "visible";
|
||||
@@ -665,14 +679,14 @@ export function finishWork(cancelled, sing=false) {
|
||||
|
||||
if (sing) {
|
||||
var res = "You worked a short shift of " + convertTimeMsToTimeElapsedString(this.timeWorked) + " and " +
|
||||
"earned $" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + ", " +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " reputation, " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp, and " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp.";
|
||||
"earned $" + numeralWrapper.formatMoney(this.workMoneyGained) + ", " +
|
||||
numeralWrapper.formatReputation(this.workRepGained) + " reputation, " +
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hacking exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " strength exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " defense exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dexterity exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agility exp, and " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " charisma exp.";
|
||||
this.resetWorkStatus();
|
||||
return res;
|
||||
}
|
||||
@@ -734,23 +748,21 @@ export function workPartTime(numCycles) {
|
||||
|
||||
const position = this.jobs[this.companyName];
|
||||
|
||||
var txt = document.getElementById("work-in-progress-text");
|
||||
txt.innerHTML = "You are currently working as a " + position +
|
||||
" at " + this.companyName + " (Current Company Reputation: " +
|
||||
numeralWrapper.format(companyRep, '0,0') + ")<br><br>" +
|
||||
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||
"You have earned: <br><br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + " ($" + numeralWrapper.format(this.workMoneyGainRate * CYCLES_PER_SEC, '0,0.00') + " / sec) <br><br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " (" + numeralWrapper.format(this.workRepGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) reputation for this company <br><br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workHackExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) hacking exp <br><br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workStrExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDefExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDexExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workAgiExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) agility exp <br><br> " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workChaExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) charisma exp <br><br>" +
|
||||
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish, <br>" +
|
||||
"and there will be no penalty because this is a part-time job.";
|
||||
|
||||
const elem = document.getElementById("work-in-progress-text");
|
||||
ReactDOM.render(<>
|
||||
You are currently working as a {position} at {this.companyName} (Current Company Reputation: {Reputation(companyRep)})<br /><br />
|
||||
You have been working for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
You have earned: <br /><br />
|
||||
{Money(this.workMoneyGained)} ({MoneyRate(this.workMoneyGainRate * CYCLES_PER_SEC)}) <br /><br />
|
||||
{Reputation(this.workRepGained)} ({Reputation(`${numeralWrapper.formatExp(this.workRepGainRate * CYCLES_PER_SEC)} / sec`)}) reputation for this company <br /><br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} ({`${numeralWrapper.formatExp(this.workHackExpGainRate * CYCLES_PER_SEC)} / sec`}) hacking exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} ({`${numeralWrapper.formatExp(this.workStrExpGainRate * CYCLES_PER_SEC)} / sec`}) strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} ({`${numeralWrapper.formatExp(this.workDefExpGainRate * CYCLES_PER_SEC)} / sec`}) defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} ({`${numeralWrapper.formatExp(this.workDexExpGainRate * CYCLES_PER_SEC)} / sec`}) dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} ({`${numeralWrapper.formatExp(this.workAgiExpGainRate * CYCLES_PER_SEC)} / sec`}) agility exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} ({`${numeralWrapper.formatExp(this.workChaExpGainRate * CYCLES_PER_SEC)} / sec`}) charisma exp <br /><br />
|
||||
You will automatically finish after working for 8 hours. You can cancel earlier if you wish, and there will be no penalty because this is a part-time job.
|
||||
</>, elem);
|
||||
}
|
||||
|
||||
export function finishWorkPartTime(sing=false) {
|
||||
@@ -759,17 +771,19 @@ export function finishWorkPartTime(sing=false) {
|
||||
|
||||
this.updateSkillLevels();
|
||||
|
||||
var txt = "You earned a total of: <br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + "<br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " reputation for the company <br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp <br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp<br>";
|
||||
txt = "You worked for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br> " + txt;
|
||||
if (!sing) {dialogBoxCreate(txt);}
|
||||
const content = <>
|
||||
You worked for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
You earned a total of: <br />
|
||||
{Money(this.workMoneyGained)}<br />
|
||||
{Reputation(this.workRepGained)} reputation for the company <br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking exp <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility exp <br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma exp<br />
|
||||
</>;
|
||||
if (!sing) {dialogBoxCreate(content);}
|
||||
|
||||
var mainMenu = document.getElementById("mainmenu-container");
|
||||
mainMenu.style.visibility = "visible";
|
||||
@@ -778,14 +792,14 @@ export function finishWorkPartTime(sing=false) {
|
||||
if (sing) {
|
||||
var res = "You worked for " + convertTimeMsToTimeElapsedString(this.timeWorked) + " and " +
|
||||
"earned a total of " +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + ", " +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " reputation, " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp, and " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp";
|
||||
"$" + numeralWrapper.formatMoney(this.workMoneyGained) + ", " +
|
||||
numeralWrapper.formatReputation(this.workRepGained) + " reputation, " +
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hacking exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " strength exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " defense exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dexterity exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agility exp, and " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " charisma exp";
|
||||
this.resetWorkStatus();
|
||||
return res;
|
||||
}
|
||||
@@ -902,22 +916,22 @@ export function workForFaction(numCycles) {
|
||||
return this.finishFactionWork(false);
|
||||
}
|
||||
|
||||
var txt = document.getElementById("work-in-progress-text");
|
||||
txt.innerHTML = "You are currently " + this.currentWorkFactionDescription + " for your faction " + faction.name +
|
||||
" (Current Faction Reputation: " + numeralWrapper.format(faction.playerReputation, '0,0') + "). <br>" +
|
||||
"You have been doing this for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||
"You have earned: <br><br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + " (" + numeralWrapper.format(this.workMoneyGainRate * CYCLES_PER_SEC, '0,0.00') + " / sec) <br><br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " (" + numeralWrapper.format(this.workRepGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) reputation for this faction <br><br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workHackExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) hacking exp <br><br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workStrExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDefExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDexExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workAgiExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) agility exp <br><br> " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workChaExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) charisma exp <br><br>" +
|
||||
const elem = document.getElementById("work-in-progress-text");
|
||||
ReactDOM.render(<>You are currently {this.currentWorkFactionDescription} for your faction {faction.name}<br />
|
||||
(Current Faction Reputation: {Reputation(faction.playerReputation)}). <br />
|
||||
You have been doing this for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
You have earned: <br /><br />
|
||||
{Money(this.workMoneyGained)} ({MoneyRate(this.workMoneyGainRate * CYCLES_PER_SEC)}) <br /><br />
|
||||
{Reputation(this.workRepGained)} ({ReputationRate(this.workRepGainRate * CYCLES_PER_SEC)}) reputation for this faction <br /><br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} ({numeralWrapper.formatExp(this.workHackExpGainRate * CYCLES_PER_SEC)} / sec) hacking exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} ({numeralWrapper.formatExp(this.workStrExpGainRate * CYCLES_PER_SEC)} / sec) strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} ({numeralWrapper.formatExp(this.workDefExpGainRate * CYCLES_PER_SEC)} / sec) defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} ({numeralWrapper.formatExp(this.workDexExpGainRate * CYCLES_PER_SEC)} / sec) dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} ({numeralWrapper.formatExp(this.workAgiExpGainRate * CYCLES_PER_SEC)} / sec) agility exp <br /><br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} ({numeralWrapper.formatExp(this.workChaExpGainRate * CYCLES_PER_SEC)} / sec) charisma exp <br /><br />
|
||||
|
||||
"You will automatically finish after working for 20 hours. You can cancel earlier if you wish.<br>" +
|
||||
"There is no penalty for cancelling earlier.";
|
||||
You will automatically finish after working for 20 hours. You can cancel earlier if you wish.<br />
|
||||
There is no penalty for cancelling earlier.</>, elem)
|
||||
}
|
||||
|
||||
export function finishFactionWork(cancelled, sing=false) {
|
||||
@@ -926,17 +940,20 @@ export function finishFactionWork(cancelled, sing=false) {
|
||||
|
||||
this.updateSkillLevels();
|
||||
|
||||
var txt = "You worked for your faction " + faction.name + " for a total of " + convertTimeMsToTimeElapsedString(this.timeWorked) + " <br><br> " +
|
||||
"You earned a total of: <br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + "<br>" +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " reputation for the faction <br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp <br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp<br>";
|
||||
if (!sing) {dialogBoxCreate(txt);}
|
||||
if (!sing) {
|
||||
dialogBoxCreate(<>
|
||||
You worked for your faction {faction.name} for a total of {convertTimeMsToTimeElapsedString(this.timeWorked)} <br /><br />
|
||||
You earned a total of: <br />
|
||||
{Money(this.workMoneyGained)}<br />
|
||||
{Reputation(this.workRepGained)} reputation for the faction <br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking exp <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility exp <br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma exp<br />
|
||||
</>);
|
||||
}
|
||||
|
||||
var mainMenu = document.getElementById("mainmenu-container");
|
||||
mainMenu.style.visibility = "visible";
|
||||
@@ -948,13 +965,13 @@ export function finishFactionWork(cancelled, sing=false) {
|
||||
if (sing) {
|
||||
var res="You worked for your faction " + faction.name + " for a total of " + convertTimeMsToTimeElapsedString(this.timeWorked) + ". " +
|
||||
"You earned " +
|
||||
numeralWrapper.format(this.workRepGained, '0,0.0000') + " rep, " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " str exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " def exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dex exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agi exp, and " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " cha exp.";
|
||||
numeralWrapper.formatReputation(this.workRepGained) + " rep, " +
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hacking exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " str exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " def exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dex exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agi exp, and " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " cha exp.";
|
||||
this.resetWorkStatus();
|
||||
return res;
|
||||
}
|
||||
@@ -1169,11 +1186,13 @@ export function createProgramWork(numCycles) {
|
||||
this.finishCreateProgramWork(false);
|
||||
}
|
||||
|
||||
var txt = document.getElementById("work-in-progress-text");
|
||||
txt.innerHTML = "You are currently working on coding " + programName + ".<br><br> " +
|
||||
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||
"The program is " + (this.timeWorkedCreateProgram / this.timeNeededToCompleteWork * 100).toFixed(2) + "% complete. <br>" +
|
||||
"If you cancel, your work will be saved and you can come back to complete the program later.";
|
||||
const elem = document.getElementById("work-in-progress-text");
|
||||
ReactDOM.render(<>
|
||||
You are currently working on coding {programName}.<br /><br />
|
||||
You have been working for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
The program is {(this.timeWorkedCreateProgram / this.timeNeededToCompleteWork * 100).toFixed(2)}% complete. <br />
|
||||
If you cancel, your work will be saved and you can come back to complete the program later.
|
||||
</>, elem);
|
||||
}
|
||||
|
||||
export function finishCreateProgramWork(cancelled, sing=false) {
|
||||
@@ -1210,9 +1229,7 @@ export function startClass(costMult, expMult, className) {
|
||||
|
||||
this.className = className;
|
||||
|
||||
var gameCPS = 1000 / Engine._idleSpeed;
|
||||
|
||||
const baseGymExp = 1;
|
||||
const gameCPS = 1000 / Engine._idleSpeed;
|
||||
|
||||
//Find cost and exp gain per game cycle
|
||||
var cost = 0;
|
||||
@@ -1244,19 +1261,19 @@ export function startClass(costMult, expMult, className) {
|
||||
break;
|
||||
case CONSTANTS.ClassGymStrength:
|
||||
cost = CONSTANTS.ClassGymBaseCost * costMult / gameCPS;
|
||||
strExp = baseGymExp * expMult / gameCPS * hashManager.getTrainingMult();
|
||||
strExp = expMult / gameCPS * hashManager.getTrainingMult();
|
||||
break;
|
||||
case CONSTANTS.ClassGymDefense:
|
||||
cost = CONSTANTS.ClassGymBaseCost * costMult / gameCPS;
|
||||
defExp = baseGymExp * expMult / gameCPS * hashManager.getTrainingMult();
|
||||
defExp = expMult / gameCPS * hashManager.getTrainingMult();
|
||||
break;
|
||||
case CONSTANTS.ClassGymDexterity:
|
||||
cost = CONSTANTS.ClassGymBaseCost * costMult / gameCPS;
|
||||
dexExp = baseGymExp * expMult / gameCPS * hashManager.getTrainingMult();
|
||||
dexExp = expMult / gameCPS * hashManager.getTrainingMult();
|
||||
break;
|
||||
case CONSTANTS.ClassGymAgility:
|
||||
cost = CONSTANTS.ClassGymBaseCost * costMult / gameCPS;
|
||||
agiExp = baseGymExp * expMult / gameCPS * hashManager.getTrainingMult();
|
||||
agiExp = expMult / gameCPS * hashManager.getTrainingMult();
|
||||
break;
|
||||
default:
|
||||
throw new Error("ERR: Invalid/unrecognized class name");
|
||||
@@ -1294,19 +1311,21 @@ export function takeClass(numCycles) {
|
||||
var className = this.className;
|
||||
|
||||
this.processWorkEarnings(numCycles);
|
||||
|
||||
var txt = document.getElementById("work-in-progress-text");
|
||||
txt.innerHTML = "You have been " + className + " for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
|
||||
"This has cost you: <br>" +
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + " ($" + numeralWrapper.format(this.workMoneyLossRate * CYCLES_PER_SEC, '0,0.00') + " / sec) <br><br>" +
|
||||
"You have gained: <br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workHackExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) hacking exp <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workStrExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDefExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workDexExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workAgiExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) agility exp <br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " (" + numeralWrapper.format(this.workChaExpGainRate * CYCLES_PER_SEC, '0,0.0000') + " / sec) charisma exp <br>" +
|
||||
"You may cancel at any time";
|
||||
|
||||
const elem = document.getElementById("work-in-progress-text");
|
||||
ReactDOM.render(<>
|
||||
You have been {className} for {convertTimeMsToTimeElapsedString(this.timeWorked)}<br /><br />
|
||||
This has cost you: <br />
|
||||
{Money(-this.workMoneyGained)} ({MoneyRate(this.workMoneyLossRate * CYCLES_PER_SEC)}) <br /><br />
|
||||
You have gained: <br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} ({numeralWrapper.formatExp(this.workHackExpGainRate * CYCLES_PER_SEC)} / sec) hacking exp <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} ({numeralWrapper.formatExp(this.workStrExpGainRate * CYCLES_PER_SEC)} / sec) strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} ({numeralWrapper.formatExp(this.workDefExpGainRate * CYCLES_PER_SEC)} / sec) defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} ({numeralWrapper.formatExp(this.workDexExpGainRate * CYCLES_PER_SEC)} / sec) dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} ({numeralWrapper.formatExp(this.workAgiExpGainRate * CYCLES_PER_SEC)} / sec) agility exp <br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} ({numeralWrapper.formatExp(this.workChaExpGainRate * CYCLES_PER_SEC)} / sec) charisma exp <br />
|
||||
You may cancel at any time
|
||||
</>, elem);
|
||||
}
|
||||
|
||||
//The 'sing' argument defines whether or not this function was called
|
||||
@@ -1319,16 +1338,19 @@ export function finishClass(sing=false) {
|
||||
}
|
||||
|
||||
this.updateSkillLevels();
|
||||
var txt = "After " + this.className + " for " + convertTimeMsToTimeElapsedString(this.timeWorked) + ", <br>" +
|
||||
"you spent a total of $" + numeralWrapper.format(this.workMoneyGained * -1, '0,0.00') + ". <br><br>" +
|
||||
"You earned a total of: <br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp <br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp <br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp <br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp <br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp<br>";
|
||||
if (!sing) {dialogBoxCreate(txt);}
|
||||
if (!sing) {
|
||||
dialogBoxCreate(<>
|
||||
After {this.className} for {convertTimeMsToTimeElapsedString(this.timeWorked)}, <br />
|
||||
you spent a total of {Money(this.workMoneyGained * -1)}. <br /><br />
|
||||
You earned a total of: <br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking exp <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength exp <br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense exp <br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity exp <br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility exp <br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma exp<br />
|
||||
</>);
|
||||
}
|
||||
|
||||
var mainMenu = document.getElementById("mainmenu-container");
|
||||
mainMenu.style.visibility = "visible";
|
||||
@@ -1338,14 +1360,14 @@ export function finishClass(sing=false) {
|
||||
Engine.loadLocationContent(false);
|
||||
if (sing) {
|
||||
var res="After " + this.className + " for " + convertTimeMsToTimeElapsedString(this.timeWorked) + ", " +
|
||||
"you spent a total of $" + numeralWrapper.format(this.workMoneyGained * -1, '0,0.00') + ". " +
|
||||
"you spent a total of " + numeralWrapper.formatMoney(this.workMoneyGained * -1) + ". " +
|
||||
"You earned a total of: " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility exp, and " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma exp";
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hacking exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " strength exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " defense exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dexterity exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agility exp, and " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " charisma exp";
|
||||
this.resetWorkStatus();
|
||||
return res;
|
||||
}
|
||||
@@ -1438,24 +1460,26 @@ export function finishCrime(cancelled) {
|
||||
if (this.committingCrimeThruSingFn) {
|
||||
if(this.singFnCrimeWorkerScript.disableLogs.ALL == null && this.singFnCrimeWorkerScript.disableLogs.commitCrime == null) {
|
||||
this.singFnCrimeWorkerScript.scriptRef.log("Crime successful! Gained " +
|
||||
numeralWrapper.format(this.workMoneyGained, "$0.000a") + ", " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hack exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " str exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " def exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dex exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agi exp, " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " cha exp.");
|
||||
numeralWrapper.formatMoney(this.workMoneyGained) + ", " +
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hack exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " str exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " def exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dex exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agi exp, " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " cha exp.");
|
||||
}
|
||||
} else {
|
||||
dialogBoxCreate("Crime successful! <br><br>" +
|
||||
"You gained:<br>"+
|
||||
"$" + numeralWrapper.format(this.workMoneyGained, '0,0.00') + "<br>" +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking experience <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength experience<br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense experience<br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity experience<br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility experience<br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma experience");
|
||||
dialogBoxCreate(<>
|
||||
Crime successful!<br /><br />
|
||||
You gained:<br />
|
||||
{Money(this.workMoneyGained)}<br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking experience <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength experience<br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense experience<br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity experience<br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility experience<br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma experience
|
||||
</>);
|
||||
}
|
||||
|
||||
} else {
|
||||
@@ -1469,22 +1493,25 @@ export function finishCrime(cancelled) {
|
||||
if (this.committingCrimeThruSingFn) {
|
||||
if(this.singFnCrimeWorkerScript.disableLogs.ALL == null && this.singFnCrimeWorkerScript.disableLogs.commitCrime == null) {
|
||||
this.singFnCrimeWorkerScript.scriptRef.log("Crime failed! Gained " +
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hack exp, " +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " str exp, " +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " def exp, " +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dex exp, " +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agi exp, " +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " cha exp.");
|
||||
numeralWrapper.formatExp(this.workHackExpGained) + " hack exp, " +
|
||||
numeralWrapper.formatExp(this.workStrExpGained) + " str exp, " +
|
||||
numeralWrapper.formatExp(this.workDefExpGained) + " def exp, " +
|
||||
numeralWrapper.formatExp(this.workDexExpGained) + " dex exp, " +
|
||||
numeralWrapper.formatExp(this.workAgiExpGained) + " agi exp, " +
|
||||
numeralWrapper.formatExp(this.workChaExpGained) + " cha exp.");
|
||||
}
|
||||
} else {
|
||||
dialogBoxCreate("Crime failed! <br><br>" +
|
||||
"You gained:<br>"+
|
||||
numeralWrapper.format(this.workHackExpGained, '0,0.0000') + " hacking experience <br>" +
|
||||
numeralWrapper.format(this.workStrExpGained, '0,0.0000') + " strength experience<br>" +
|
||||
numeralWrapper.format(this.workDefExpGained, '0,0.0000') + " defense experience<br>" +
|
||||
numeralWrapper.format(this.workDexExpGained, '0,0.0000') + " dexterity experience<br>" +
|
||||
numeralWrapper.format(this.workAgiExpGained, '0,0.0000') + " agility experience<br>" +
|
||||
numeralWrapper.format(this.workChaExpGained, '0,0.0000') + " charisma experience");
|
||||
dialogBoxCreate(<>
|
||||
Crime failed!<br /><br />
|
||||
You gained:<br />
|
||||
{Money(this.workMoneyGained)}<br />
|
||||
{numeralWrapper.formatExp(this.workHackExpGained)} hacking experience <br />
|
||||
{numeralWrapper.formatExp(this.workStrExpGained)} strength experience<br />
|
||||
{numeralWrapper.formatExp(this.workDefExpGained)} defense experience<br />
|
||||
{numeralWrapper.formatExp(this.workDexExpGained)} dexterity experience<br />
|
||||
{numeralWrapper.formatExp(this.workAgiExpGained)} agility experience<br />
|
||||
{numeralWrapper.formatExp(this.workChaExpGained)} charisma experience
|
||||
</>);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1563,11 +1590,11 @@ export function regenerateHp(amt) {
|
||||
|
||||
export function hospitalize() {
|
||||
if (Settings.SuppressHospitalizationPopup === false) {
|
||||
dialogBoxCreate(
|
||||
"You were in critical condition! You were taken to the hospital where " +
|
||||
"luckily they were able to save your life. You were charged " +
|
||||
numeralWrapper.format(this.max_hp * CONSTANTS.HospitalCostPerHp, '$0.000a')
|
||||
);
|
||||
dialogBoxCreate(<>
|
||||
You were in critical condition! You were taken to the hospital where
|
||||
luckily they were able to save your life. You were charged
|
||||
{Money(this.max_hp * CONSTANTS.HospitalCostPerHp)}
|
||||
</>);
|
||||
}
|
||||
|
||||
const cost = this.max_hp * CONSTANTS.HospitalCostPerHp
|
||||
@@ -2271,7 +2298,7 @@ export function gainCodingContractReward(reward, difficulty=1) {
|
||||
var moneyGain = CONSTANTS.CodingContractBaseMoneyGain * difficulty * BitNodeMultipliers.CodingContractMoney;
|
||||
this.gainMoney(moneyGain);
|
||||
this.recordMoneySource(moneyGain, "codingcontract");
|
||||
return `Gained ${numeralWrapper.format(moneyGain, '$0.000a')}`;
|
||||
return `Gained ${numeralWrapper.formatMoney(moneyGain)}`;
|
||||
break;
|
||||
}
|
||||
/* eslint-enable no-case-declarations */
|
||||
@@ -2309,9 +2336,5 @@ export function giveExploit(exploit) {
|
||||
|
||||
|
||||
export function getIntelligenceBonus(weight) {
|
||||
// 15 => +1.4% when you initially acquire int
|
||||
// 50 => +3.8% mid game
|
||||
// 100 => +6.6% late game
|
||||
// 250 => +13.4% realistic best possible
|
||||
return 1+(weight*Math.pow(this.intelligence, 0.8)/600);
|
||||
return calculateIntelligenceBonus(this.intelligence, weight);
|
||||
}
|
||||
+16
-12
@@ -11,6 +11,7 @@ import { Augmentation } from "../../Augmentation/Augmentation";
|
||||
import { Augmentations } from "../../Augmentation/Augmentations";
|
||||
|
||||
import { numeralWrapper } from "../../ui/numeralFormat";
|
||||
import { Money } from "../../ui/React/Money";
|
||||
import { Page,
|
||||
routing } from "../../ui/navigationTracking";
|
||||
|
||||
@@ -24,6 +25,9 @@ import { getSelectValue } from "../../../utils/uiHelpers/getSelectData";
|
||||
import { removeChildrenFromElement } from "../../../utils/uiHelpers/removeChildrenFromElement";
|
||||
import { removeElement } from "../../../utils/uiHelpers/removeElement";
|
||||
|
||||
import * as React from "react";
|
||||
import { renderToStaticMarkup } from "react-dom/server"
|
||||
|
||||
interface IResleeveUIElems {
|
||||
container: HTMLElement | null;
|
||||
statsPanel: HTMLElement | null;
|
||||
@@ -74,13 +78,13 @@ export function createResleevesPage(p: IPlayer) {
|
||||
innerHTML: "Re-sleeving is the process of digitizing and transferring your consciousness " +
|
||||
"into a new human body, or 'sleeve'. Here at VitaLife, you can purchase new " +
|
||||
"specially-engineered bodies for the re-sleeve process. Many of these bodies " +
|
||||
"even come with genetic and cybernetic Augmentations!<br><br>" +
|
||||
"even come with genetic and cybernetic Augmentations!<br /><br />" +
|
||||
"Re-sleeving will change your experience for every stat. It will also REMOVE " +
|
||||
"all of your currently-installed Augmentations, and replace " +
|
||||
"them with the ones provided by the purchased sleeve. However, Augmentations that you have " +
|
||||
"purchased but not installed will NOT be removed. If you have purchased an " +
|
||||
"Augmentation and then re-sleeve into a body which already has that Augmentation, " +
|
||||
"it will be removed (since you cannot have duplicate Augmentations).<br><br>" +
|
||||
"it will be removed (since you cannot have duplicate Augmentations).<br /><br />" +
|
||||
"NOTE: The stats and multipliers displayed on this page do NOT include your bonuses from " +
|
||||
"Source-File.",
|
||||
width: "75%",
|
||||
@@ -225,7 +229,7 @@ export function clearResleevesPage() {
|
||||
}
|
||||
|
||||
for (const prop in UIElems) {
|
||||
(<any>UIElems)[prop] = null;
|
||||
(UIElems as any)[prop] = null;
|
||||
}
|
||||
|
||||
playerRef = null;
|
||||
@@ -256,12 +260,12 @@ function createResleeveUi(resleeve: Resleeve): IResleeveUIElems {
|
||||
elems.stats = createElement("p", {
|
||||
class: "resleeve-stats-text",
|
||||
innerHTML:
|
||||
`Hacking: ${numeralWrapper.format(resleeve.hacking_skill, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.hacking_exp)} exp)<br>` +
|
||||
`Strength: ${numeralWrapper.format(resleeve.strength, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.strength_exp)} exp)<br>` +
|
||||
`Defense: ${numeralWrapper.format(resleeve.defense, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.defense_exp)} exp)<br>` +
|
||||
`Dexterity: ${numeralWrapper.format(resleeve.dexterity, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.dexterity_exp)} exp)<br>` +
|
||||
`Agility: ${numeralWrapper.format(resleeve.agility, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.agility_exp)} exp)<br>` +
|
||||
`Charisma: ${numeralWrapper.format(resleeve.charisma, "0,0")} (${numeralWrapper.formatBigNumber(resleeve.charisma_exp)} exp)<br>` +
|
||||
`Hacking: ${numeralWrapper.formatSkill(resleeve.hacking_skill)} (${numeralWrapper.formatExp(resleeve.hacking_exp)} exp)<br />` +
|
||||
`Strength: ${numeralWrapper.formatSkill(resleeve.strength)} (${numeralWrapper.formatExp(resleeve.strength_exp)} exp)<br />` +
|
||||
`Defense: ${numeralWrapper.formatSkill(resleeve.defense)} (${numeralWrapper.formatExp(resleeve.defense_exp)} exp)<br />` +
|
||||
`Dexterity: ${numeralWrapper.formatSkill(resleeve.dexterity)} (${numeralWrapper.formatExp(resleeve.dexterity_exp)} exp)<br />` +
|
||||
`Agility: ${numeralWrapper.formatSkill(resleeve.agility)} (${numeralWrapper.formatExp(resleeve.agility_exp)} exp)<br />` +
|
||||
`Charisma: ${numeralWrapper.formatSkill(resleeve.charisma)} (${numeralWrapper.formatExp(resleeve.charisma_exp)} exp)<br />` +
|
||||
`# Augmentations: ${resleeve.augmentations.length}`,
|
||||
});
|
||||
elems.multipliersButton = createElement("button", {
|
||||
@@ -301,7 +305,7 @@ function createResleeveUi(resleeve: Resleeve): IResleeveUIElems {
|
||||
`Bladeburner Stamina Gain multiplier: ${numeralWrapper.formatPercentage(resleeve.bladeburner_stamina_gain_mult)}`,
|
||||
`Bladeburner Field Analysis multiplier: ${numeralWrapper.formatPercentage(resleeve.bladeburner_analysis_mult)}`,
|
||||
`Bladeburner Success Chance multiplier: ${numeralWrapper.formatPercentage(resleeve.bladeburner_success_chance_mult)}`
|
||||
].join("<br>"), false
|
||||
].join("<br />"), false
|
||||
)
|
||||
}
|
||||
});
|
||||
@@ -324,7 +328,7 @@ function createResleeveUi(resleeve: Resleeve): IResleeveUIElems {
|
||||
const cost: number = resleeve.getCost();
|
||||
elems.costPanel = createElement("div", { class: "resleeve-panel", width: "20%" });
|
||||
elems.costText = createElement("p", {
|
||||
innerText: `It costs ${numeralWrapper.formatMoney(cost)} ` +
|
||||
innerHTML: `It costs ${renderToStaticMarkup(Money(cost))} ` +
|
||||
`to purchase this Sleeve.`,
|
||||
});
|
||||
elems.buyButton = createElement("button", {
|
||||
@@ -332,7 +336,7 @@ function createResleeveUi(resleeve: Resleeve): IResleeveUIElems {
|
||||
innerText: "Purchase",
|
||||
clickListener: () => {
|
||||
if (purchaseResleeve(resleeve, playerRef!)) {
|
||||
dialogBoxCreate(`You re-sleeved for ${numeralWrapper.formatMoney(cost)}!`, false);
|
||||
dialogBoxCreate((<>You re-sleeved for {Money(cost)}!</>), false);
|
||||
} else {
|
||||
dialogBoxCreate(`You cannot afford to re-sleeve into this body`, false);
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import { Augmentation } from "../../Augmentation/Augmentation";
|
||||
import { Augmentations } from "../../Augmentation/Augmentations";
|
||||
|
||||
import { numeralWrapper } from "../../ui/numeralFormat";
|
||||
import { Money } from "../../ui/React/Money";
|
||||
|
||||
import { dialogBoxCreate } from "../../../utils/DialogBox";
|
||||
|
||||
@@ -19,6 +20,8 @@ import { createPopup } from "../../../utils/uiHelpers/createPopup";
|
||||
import { createPopupCloseButton } from "../../../utils/uiHelpers/createPopupCloseButton";
|
||||
import { removeElementById } from "../../../utils/uiHelpers/removeElementById";
|
||||
|
||||
import { renderToStaticMarkup } from "react-dom/server"
|
||||
|
||||
export function createSleevePurchaseAugsPopup(sleeve: Sleeve, p: IPlayer) {
|
||||
// Array of all owned Augmentations. Names only
|
||||
const ownedAugNames: string[] = sleeve.augmentations.map((e) => {return e.name});
|
||||
@@ -86,7 +89,7 @@ export function createSleevePurchaseAugsPopup(sleeve: Sleeve, p: IPlayer) {
|
||||
innerHTML:
|
||||
[
|
||||
`<h2>${aug.name}</h2><br>`,
|
||||
`Cost: ${numeralWrapper.formatMoney(aug.startingCost)}<br><br>`,
|
||||
`Cost: ${renderToStaticMarkup(Money(aug.startingCost))}<br><br>`,
|
||||
`${aug.info}`
|
||||
].join(" "),
|
||||
padding: "2px",
|
||||
|
||||
@@ -40,11 +40,15 @@ import { removeElement } from "../../../utils/uiHelpers/removeElement";
|
||||
import { removeElementById } from "../../../utils/uiHelpers/removeElementById";
|
||||
|
||||
import { EarningsTableElement } from "./ui/EarningsTableElement";
|
||||
import { Money } from "../../ui/React/Money";
|
||||
import { MoneyRate } from "../../ui/React/MoneyRate";
|
||||
import { ReputationRate } from "../../ui/React/ReputationRate";
|
||||
import { StatsElement } from "./ui/StatsElement";
|
||||
import { MoreStatsContent } from "./ui/MoreStatsContent";
|
||||
import { MoreEarningsContent } from "./ui/MoreEarningsContent";
|
||||
import * as React from "react";
|
||||
import * as ReactDOM from "react-dom";
|
||||
import { renderToStaticMarkup } from "react-dom/server"
|
||||
|
||||
// Object that keeps track of all DOM elements for the UI for a single Sleeve
|
||||
interface ISleeveUIElems {
|
||||
@@ -218,9 +222,9 @@ function createSleeveUi(sleeve: Sleeve, allSleeves: Sleeve[]): ISleeveUIElems {
|
||||
const popupArguments: HTMLElement[] = [];
|
||||
popupArguments.push(createPopupCloseButton(popupId, { class: "std-button" }));
|
||||
popupArguments.push(createElement("p", {
|
||||
innerText: "Have this sleeve travel to a different city. This affects " +
|
||||
innerHTML: "Have this sleeve travel to a different city. This affects " +
|
||||
"the gyms and universities at which this sleeve can study. " +
|
||||
`Traveling to a different city costs ${numeralWrapper.formatMoney(CONSTANTS.TravelCost)}. ` +
|
||||
`Traveling to a different city costs ${renderToStaticMarkup(Money(CONSTANTS.TravelCost))}. ` +
|
||||
"It will also CANCEL the sleeve's current task (setting it to idle)",
|
||||
}));
|
||||
for (const cityName in Cities) {
|
||||
@@ -331,13 +335,13 @@ function updateSleeveUi(sleeve: Sleeve, elems: ISleeveUIElems) {
|
||||
|
||||
if (sleeve.currentTask === SleeveTaskType.Crime) {
|
||||
const data = [
|
||||
[`Money`, numeralWrapper.formatMoney(parseFloat(sleeve.currentTaskLocation)), `(on success)`],
|
||||
[`Hacking Exp`, numeralWrapper.format(sleeve.gainRatesForTask.hack, "0.00"), `(2x on success)`],
|
||||
[`Strength Exp`, numeralWrapper.format(sleeve.gainRatesForTask.str, "0.00"), `(2x on success)`],
|
||||
[`Defense Exp`, numeralWrapper.format(sleeve.gainRatesForTask.def, "0.00"), `(2x on success)`],
|
||||
[`Dexterity Exp`, numeralWrapper.format(sleeve.gainRatesForTask.dex, "0.00"), `(2x on success)`],
|
||||
[`Agility Exp`, numeralWrapper.format(sleeve.gainRatesForTask.agi, "0.00"), `(2x on success)`],
|
||||
[`Charisma Exp`, numeralWrapper.format(sleeve.gainRatesForTask.cha, "0.00"), `(2x on success)`]
|
||||
[`Money`, Money(parseFloat(sleeve.currentTaskLocation)), `(on success)`],
|
||||
[`Hacking Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.hack), `(2x on success)`],
|
||||
[`Strength Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.str), `(2x on success)`],
|
||||
[`Defense Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.def), `(2x on success)`],
|
||||
[`Dexterity Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.dex), `(2x on success)`],
|
||||
[`Agility Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.agi), `(2x on success)`],
|
||||
[`Charisma Exp`, numeralWrapper.formatExp(sleeve.gainRatesForTask.cha), `(2x on success)`]
|
||||
];
|
||||
ReactDOM.render(EarningsTableElement('Earnings (Pre-Synchronization)', data), elems.currentEarningsInfo!)
|
||||
|
||||
@@ -347,18 +351,18 @@ function updateSleeveUi(sleeve: Sleeve, elems: ISleeveUIElems) {
|
||||
});
|
||||
} else {
|
||||
const data = [
|
||||
[`Money:`, `${numeralWrapper.formatMoney(5 * sleeve.gainRatesForTask.money)} / s`],
|
||||
[`Hacking Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.hack, "0.00")} / s`],
|
||||
[`Strength Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.str, "0.00")} / s`],
|
||||
[`Defense Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.def, "0.00")} / s`],
|
||||
[`Dexterity Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.dex, "0.00")} / s`],
|
||||
[`Agility Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.agi, "0.00")} / s`],
|
||||
[`Charisma Exp:`, `${numeralWrapper.format(5 * sleeve.gainRatesForTask.cha, "0.00")} / s`]
|
||||
[`Money:`, MoneyRate(5 * sleeve.gainRatesForTask.money)],
|
||||
[`Hacking Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.hack)} / s`],
|
||||
[`Strength Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.str)} / s`],
|
||||
[`Defense Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.def)} / s`],
|
||||
[`Dexterity Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.dex)} / s`],
|
||||
[`Agility Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.agi)} / s`],
|
||||
[`Charisma Exp:`, `${numeralWrapper.formatExp(5 * sleeve.gainRatesForTask.cha)} / s`]
|
||||
];
|
||||
let repGainText: string = "";
|
||||
if (sleeve.currentTask === SleeveTaskType.Company || sleeve.currentTask === SleeveTaskType.Faction) {
|
||||
const repGain: number = sleeve.getRepGain(playerRef!);
|
||||
data.push([`Reputation:`, `${numeralWrapper.format(5 * repGain, "0.00")} / s`]);
|
||||
data.push([`Reputation:`, ReputationRate(5 * repGain)]);
|
||||
}
|
||||
ReactDOM.render(EarningsTableElement('Earnings (Pre-Synchronization)', data), elems.currentEarningsInfo!)
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import { numeralWrapper } from "../../../ui/numeralFormat";
|
||||
|
||||
import { PopupCloseButton } from "../../../ui/React/PopupCloseButton";
|
||||
import { StdButton } from "../../../ui/React/StdButton";
|
||||
import { Money } from "../../../ui/React/Money";
|
||||
|
||||
import { dialogBoxCreate } from "../../../../utils/DialogBox";
|
||||
|
||||
@@ -92,7 +93,7 @@ export class CovenantPurchasesRoot extends React.Component<IProps, IState> {
|
||||
<PopupCloseButton popup={PopupId} text={"Close"} />
|
||||
<p>
|
||||
Would you like to purchase an additional Duplicate Sleeve from The Covenant
|
||||
for {numeralWrapper.formatMoney(this.purchaseCost())}?
|
||||
for {Money(this.purchaseCost())}?
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
|
||||
@@ -9,6 +9,7 @@ import { IPlayer } from "../../IPlayer";
|
||||
|
||||
import { numeralWrapper } from "../../../ui/numeralFormat";
|
||||
import { StdButton } from "../../../ui/React/StdButton";
|
||||
import { Money } from "../../../ui/React/Money";
|
||||
|
||||
interface IProps {
|
||||
index: number;
|
||||
@@ -68,13 +69,13 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
|
||||
// Purchase button props
|
||||
const cost = this.getPurchaseCost();
|
||||
const purchaseBtnDisabled = !this.props.p.canAfford(cost);
|
||||
let purchaseBtnText;
|
||||
let purchaseBtnContent;
|
||||
if (isNaN(this.state.amt)) {
|
||||
purchaseBtnText = "Invalid value";
|
||||
purchaseBtnContent = <>Invalid value</>;
|
||||
} else if (this.state.amt > maxMemory) {
|
||||
purchaseBtnText = `Memory cannot exceed 100`;
|
||||
purchaseBtnContent = <>Memory cannot exceed 100?</>;
|
||||
} else {
|
||||
purchaseBtnText = `Purchase ${this.state.amt} memory - ${numeralWrapper.formatMoney(cost)}`;
|
||||
purchaseBtnContent = <>Purchase {this.state.amt} memory - {Money(cost)}?</>;
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -82,7 +83,7 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
|
||||
<h2><u>Upgrade Memory</u></h2>
|
||||
<p>
|
||||
Purchase a memory upgrade for your sleeve. Note that a sleeve's max memory
|
||||
is 100 (current: {numeralWrapper.format(this.props.sleeve.memory, "0")})
|
||||
is 100 (current: {numeralWrapper.formatMemory(this.props.sleeve.memory)})
|
||||
</p>
|
||||
|
||||
<label htmlFor={inputId}>
|
||||
@@ -90,7 +91,7 @@ export class CovenantSleeveMemoryUpgrade extends React.Component<IProps, IState>
|
||||
</label>
|
||||
<input id={inputId} onChange={this.changePurchaseAmount} type={"number"} value={isNaN(this.state.amt) ? this.state.amt.toString() : this.state.amt} />
|
||||
<br />
|
||||
<StdButton disabled={purchaseBtnDisabled} onClick={this.purchaseMemory} text={purchaseBtnText} />
|
||||
<StdButton disabled={purchaseBtnDisabled} onClick={this.purchaseMemory} text={purchaseBtnContent} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Sleeve } from "../Sleeve";
|
||||
import { numeralWrapper } from "../../../ui/numeralFormat";
|
||||
import { Money } from "../../../ui/React/Money";
|
||||
import * as React from "react";
|
||||
import { StatsTable } from "../../../ui/React/StatsTable";
|
||||
|
||||
@@ -8,33 +9,33 @@ export function MoreEarningsContent(sleeve: Sleeve): React.ReactElement {
|
||||
style = {textAlign: 'right'};
|
||||
return (<>
|
||||
{StatsTable([
|
||||
['Money ', numeralWrapper.formatMoney(sleeve.earningsForTask.money)],
|
||||
['Hacking Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.hack)],
|
||||
['Strength Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.str)],
|
||||
['Defense Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.def)],
|
||||
['Dexterity Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.dex)],
|
||||
['Agility Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.agi)],
|
||||
['Charisma Exp ', numeralWrapper.formatBigNumber(sleeve.earningsForTask.cha)],
|
||||
['Money ', Money(sleeve.earningsForTask.money)],
|
||||
['Hacking Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.hack)],
|
||||
['Strength Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.str)],
|
||||
['Defense Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.def)],
|
||||
['Dexterity Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.dex)],
|
||||
['Agility Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.agi)],
|
||||
['Charisma Exp ', numeralWrapper.formatExp(sleeve.earningsForTask.cha)],
|
||||
], 'Earnings for Current Task:')}
|
||||
<br />
|
||||
{StatsTable([
|
||||
['Money: ', numeralWrapper.formatMoney(sleeve.earningsForPlayer.money)],
|
||||
['Hacking Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.hack)],
|
||||
['Strength Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.str)],
|
||||
['Defense Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.def)],
|
||||
['Dexterity Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.dex)],
|
||||
['Agility Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.agi)],
|
||||
['Charisma Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForPlayer.cha)],
|
||||
['Money: ', Money(sleeve.earningsForPlayer.money)],
|
||||
['Hacking Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.hack)],
|
||||
['Strength Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.str)],
|
||||
['Defense Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.def)],
|
||||
['Dexterity Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.dex)],
|
||||
['Agility Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.agi)],
|
||||
['Charisma Exp: ', numeralWrapper.formatExp(sleeve.earningsForPlayer.cha)],
|
||||
], 'Total Earnings for Host Consciousness:')}
|
||||
<br />
|
||||
{StatsTable([
|
||||
['Money: ', numeralWrapper.formatMoney(sleeve.earningsForSleeves.money)],
|
||||
['Hacking Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.hack)],
|
||||
['Strength Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.str)],
|
||||
['Defense Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.def)],
|
||||
['Dexterity Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.dex)],
|
||||
['Agility Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.agi)],
|
||||
['Charisma Exp: ', numeralWrapper.formatBigNumber(sleeve.earningsForSleeves.cha)],
|
||||
['Money: ', Money(sleeve.earningsForSleeves.money)],
|
||||
['Hacking Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.hack)],
|
||||
['Strength Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.str)],
|
||||
['Defense Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.def)],
|
||||
['Dexterity Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.dex)],
|
||||
['Agility Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.agi)],
|
||||
['Charisma Exp: ', numeralWrapper.formatExp(sleeve.earningsForSleeves.cha)],
|
||||
], 'Total Earnings for Other Sleeves:')}
|
||||
<br />
|
||||
</>);
|
||||
|
||||
@@ -8,12 +8,12 @@ export function MoreStatsContent(sleeve: Sleeve): React.ReactElement {
|
||||
style = {textAlign: 'right'};
|
||||
return (<>
|
||||
{StatsTable([
|
||||
['Hacking: ', sleeve.hacking_skill, `(${numeralWrapper.formatBigNumber(sleeve.hacking_exp)} exp)`],
|
||||
['Strength: ', sleeve.strength, `(${numeralWrapper.formatBigNumber(sleeve.strength_exp)} exp)`],
|
||||
['Defense: ', sleeve.defense, `(${numeralWrapper.formatBigNumber(sleeve.defense_exp)} exp)`],
|
||||
['Dexterity: ', sleeve.dexterity, `(${numeralWrapper.formatBigNumber(sleeve.dexterity_exp)} exp)`],
|
||||
['Agility: ', sleeve.agility, `(${numeralWrapper.formatBigNumber(sleeve.agility_exp)} exp)`],
|
||||
['Charisma: ', sleeve.charisma, `(${numeralWrapper.formatBigNumber(sleeve.charisma_exp)} exp)`],
|
||||
['Hacking: ', sleeve.hacking_skill, `(${numeralWrapper.formatExp(sleeve.hacking_exp)} exp)`],
|
||||
['Strength: ', sleeve.strength, `(${numeralWrapper.formatExp(sleeve.strength_exp)} exp)`],
|
||||
['Defense: ', sleeve.defense, `(${numeralWrapper.formatExp(sleeve.defense_exp)} exp)`],
|
||||
['Dexterity: ', sleeve.dexterity, `(${numeralWrapper.formatExp(sleeve.dexterity_exp)} exp)`],
|
||||
['Agility: ', sleeve.agility, `(${numeralWrapper.formatExp(sleeve.agility_exp)} exp)`],
|
||||
['Charisma: ', sleeve.charisma, `(${numeralWrapper.formatExp(sleeve.charisma_exp)} exp)`],
|
||||
], 'Stats:')}
|
||||
<br />
|
||||
{StatsTable([
|
||||
|
||||
@@ -10,7 +10,7 @@ export function StatsElement(sleeve: Sleeve): React.ReactElement {
|
||||
<tbody>
|
||||
<tr>
|
||||
<td className="character-hp-cell">HP: </td>
|
||||
<td className="character-hp-cell" style={style}>{numeralWrapper.format(sleeve.hp, "0,0")} / {numeralWrapper.format(sleeve.max_hp, "0,0")}</td>
|
||||
<td className="character-hp-cell" style={style}>{numeralWrapper.formatHp(sleeve.hp)} / {numeralWrapper.formatHp(sleeve.max_hp)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>City: </td>
|
||||
@@ -18,39 +18,39 @@ export function StatsElement(sleeve: Sleeve): React.ReactElement {
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-hack-cell">Hacking: </td>
|
||||
<td className="character-hack-cell" style={style}>{numeralWrapper.format(sleeve.hacking_skill, "0,0")}</td>
|
||||
<td className="character-hack-cell" style={style}>{numeralWrapper.formatSkill(sleeve.hacking_skill)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-combat-cell">Strength: </td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.format(sleeve.strength, "0,0")}</td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.formatSkill(sleeve.strength)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-combat-cell">Defense: </td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.format(sleeve.defense, "0,0")}</td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.formatSkill(sleeve.defense)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-combat-cell">Dexterity: </td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.format(sleeve.dexterity, "0,0")}</td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.formatSkill(sleeve.dexterity)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-combat-cell">Agility: </td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.format(sleeve.agility, "0,0")}</td>
|
||||
<td className="character-combat-cell" style={style}>{numeralWrapper.formatSkill(sleeve.agility)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-cha-cell">Charisma: </td>
|
||||
<td className="character-cha-cell" style={style}>{numeralWrapper.format(sleeve.charisma, "0,0")}</td>
|
||||
<td className="character-cha-cell" style={style}>{numeralWrapper.formatSkill(sleeve.charisma)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-int-cell">Shock: </td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.format(100 - sleeve.shock, "0,0.000")}</td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.formatShock(100 - sleeve.shock)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-int-cell">Sync: </td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.format(sleeve.sync, "0,0.000")}</td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.formatSync(sleeve.sync)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="character-int-cell">Memory: </td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.format(sleeve.memory, "0")}</td>
|
||||
<td className="character-int-cell" style={style}>{numeralWrapper.formatMemory(sleeve.memory)}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export function calculateIntelligenceBonus(intelligence: number, weight: number = 1): number {
|
||||
return 1+(weight*Math.pow(intelligence, 0.8)/600);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export function calculateSkill(exp: number, mult: number = 1): number {
|
||||
return Math.max(Math.floor(mult*(32 * Math.log(exp + 534.5) - 200)), 1);
|
||||
}
|
||||
|
||||
export function calculateExp(skill: number, mult: number = 1): number {
|
||||
return Math.exp((skill / mult + 200) / 32) - 534.6
|
||||
}
|
||||
Reference in New Issue
Block a user