mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-19 06:03:50 +01:00
Merge branch 'dev' into feature/add-back-api-export
This commit is contained in:
commit
e49bd3d091
2
.gitignore
vendored
2
.gitignore
vendored
@ -18,3 +18,5 @@ Netburner.txt
|
|||||||
|
|
||||||
# editor files
|
# editor files
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
|
.idea/
|
||||||
|
@ -39,21 +39,23 @@ List of Factions and their Requirements
|
|||||||
|
|
||||||
.. _gameplay_factions::
|
.. _gameplay_factions::
|
||||||
|
|
||||||
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
+---------------------+--------------------+-----------------------------------------+-------------------------------+
|
||||||
| Early Game | Faction Name | Requirements | Joining this Faction prevents |
|
| Early Game | Faction Name | Requirements | Joining this Faction prevents |
|
||||||
| Factions | | | you from joining: |
|
| Factions | | | you from joining: |
|
||||||
+ +----------------+-----------------------------------------+-------------------------------+
|
+ +--------------------+-----------------------------------------+-------------------------------+
|
||||||
| | CyberSec | * Install a backdoor on the CSEC server | |
|
| | CyberSec | * Install a backdoor on the CSEC server | |
|
||||||
+ +----------------+-----------------------------------------+-------------------------------+
|
+ +--------------------+-----------------------------------------+-------------------------------+
|
||||||
| | Tian Di Hui | * $1m | |
|
| | Tian Di Hui | * $1m | |
|
||||||
| | | * Hacking Level 50 | |
|
| | | * Hacking Level 50 | |
|
||||||
| | | * Be in Chongqing, New Tokyo, or Ishima | |
|
| | | * Be in Chongqing, New Tokyo, or Ishima | |
|
||||||
+ +----------------+-----------------------------------------+-------------------------------+
|
+ +--------------------+-----------------------------------------+-------------------------------+
|
||||||
| | Netburners | * Hacking Level 80 | |
|
| | Netburners | * Hacking Level 80 | |
|
||||||
| | | * Total Hacknet Levels of 100 | |
|
| | | * Total Hacknet Levels of 100 | |
|
||||||
| | | * Total Hacknet RAM of 8 | |
|
| | | * Total Hacknet RAM of 8 | |
|
||||||
| | | * Total Hacknet Cores of 4 | |
|
| | | * Total Hacknet Cores of 4 | |
|
||||||
+---------------------+----------------+-----------------------------------------+-------------------------------+
|
+ +--------------------+-----------------------------------------+-------------------------------+
|
||||||
|
| | Shadows of Anarchy | * Successfully infiltrate a company | |
|
||||||
|
+---------------------+--------------------+-----------------------------------------+-------------------------------+
|
||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -9,5 +9,6 @@ module.exports = {
|
|||||||
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
|
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
|
||||||
"<rootDir>/test/__mocks__/fileMock.js",
|
"<rootDir>/test/__mocks__/fileMock.js",
|
||||||
"\\.(css|less)$": "<rootDir>/test/__mocks__/styleMock.js",
|
"\\.(css|less)$": "<rootDir>/test/__mocks__/styleMock.js",
|
||||||
|
"\\!!raw-loader!.*$": "<rootDir>/test/__mocks__/rawLoader.js",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -69,7 +69,7 @@ function checkForMessagesToSend(): void {
|
|||||||
const truthGazer = Messages[MessageFilenames.TruthGazer];
|
const truthGazer = Messages[MessageFilenames.TruthGazer];
|
||||||
const redpill = Messages[MessageFilenames.RedPill];
|
const redpill = Messages[MessageFilenames.RedPill];
|
||||||
|
|
||||||
if (Player.hasAugmentation(AugmentationNames.TheRedPill)) {
|
if (Player.hasAugmentation(AugmentationNames.TheRedPill, true)) {
|
||||||
//Get the world daemon required hacking level
|
//Get the world daemon required hacking level
|
||||||
const worldDaemon = GetServer(SpecialServers.WorldDaemon);
|
const worldDaemon = GetServer(SpecialServers.WorldDaemon);
|
||||||
if (!(worldDaemon instanceof Server)) {
|
if (!(worldDaemon instanceof Server)) {
|
||||||
|
@ -55,6 +55,7 @@ import { FactionWorkType } from "../Work/data/FactionWorkType";
|
|||||||
import { CompanyWork } from "../Work/CompanyWork";
|
import { CompanyWork } from "../Work/CompanyWork";
|
||||||
import { canGetBonus, onExport } from "../ExportBonus";
|
import { canGetBonus, onExport } from "../ExportBonus";
|
||||||
import { saveObject } from "../SaveObject";
|
import { saveObject } from "../SaveObject";
|
||||||
|
import { calculateCrimeWorkStats } from "../Work/formulas/Crime";
|
||||||
|
|
||||||
export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||||
const getAugmentation = function (ctx: NetscriptContext, name: string): Augmentation {
|
const getAugmentation = function (ctx: NetscriptContext, name: string): Augmentation {
|
||||||
@ -1210,7 +1211,19 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
|||||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid crime: ${crimeRoughName}`);
|
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid crime: ${crimeRoughName}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.assign({}, crime);
|
const crimeStatsWithMultipliers = calculateCrimeWorkStats(crime);
|
||||||
|
|
||||||
|
return Object.assign({}, crime, {
|
||||||
|
money: crimeStatsWithMultipliers.money,
|
||||||
|
reputation: crimeStatsWithMultipliers.reputation,
|
||||||
|
hacking_exp: crimeStatsWithMultipliers.hackExp,
|
||||||
|
strength_exp: crimeStatsWithMultipliers.strExp,
|
||||||
|
defense_exp: crimeStatsWithMultipliers.defExp,
|
||||||
|
dexterity_exp: crimeStatsWithMultipliers.dexExp,
|
||||||
|
agility_exp: crimeStatsWithMultipliers.agiExp,
|
||||||
|
charisma_exp: crimeStatsWithMultipliers.chaExp,
|
||||||
|
intelligence_exp: crimeStatsWithMultipliers.intExp,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
getDarkwebPrograms: (ctx: NetscriptContext) =>
|
getDarkwebPrograms: (ctx: NetscriptContext) =>
|
||||||
function (): string[] {
|
function (): string[] {
|
||||||
|
@ -142,7 +142,7 @@ export function NetscriptStanek(): InternalAPI<IStanek> {
|
|||||||
//Return true iff the player is in CotMG and has the first Stanek aug installed
|
//Return true iff the player is in CotMG and has the first Stanek aug installed
|
||||||
return (
|
return (
|
||||||
Factions[FactionNames.ChurchOfTheMachineGod].isMember &&
|
Factions[FactionNames.ChurchOfTheMachineGod].isMember &&
|
||||||
player.hasAugmentation(AugmentationNames.StaneksGift1)
|
player.hasAugmentation(AugmentationNames.StaneksGift1, true)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -1462,7 +1462,7 @@ export function sourceFileLvl(this: IPlayer, n: number): number {
|
|||||||
|
|
||||||
export function focusPenalty(this: IPlayer): number {
|
export function focusPenalty(this: IPlayer): number {
|
||||||
let focus = 1;
|
let focus = 1;
|
||||||
if (!this.hasAugmentation(AugmentationNames["NeuroreceptorManager"])) {
|
if (!this.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focus = this.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focus = this.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
return focus;
|
return focus;
|
||||||
|
@ -159,6 +159,7 @@ export class Sleeve extends Person {
|
|||||||
this.exp.agility = 0;
|
this.exp.agility = 0;
|
||||||
this.exp.charisma = 0;
|
this.exp.charisma = 0;
|
||||||
this.updateStatLevels();
|
this.updateStatLevels();
|
||||||
|
this.hp.current = this.hp.max;
|
||||||
|
|
||||||
// Reset task-related stuff
|
// Reset task-related stuff
|
||||||
this.stopWork(p);
|
this.stopWork(p);
|
||||||
@ -440,6 +441,9 @@ export class Sleeve extends Person {
|
|||||||
case "Diplomacy":
|
case "Diplomacy":
|
||||||
this.startWork(p, new SleeveBladeburnerWork({ type: "General", name: "Diplomacy" }));
|
this.startWork(p, new SleeveBladeburnerWork({ type: "General", name: "Diplomacy" }));
|
||||||
return true;
|
return true;
|
||||||
|
case "Hyperbolic Regeneration Chamber":
|
||||||
|
this.startWork(p, new SleeveBladeburnerWork({ type: "General", name: "Hyperbolic Regeneration Chamber" }));
|
||||||
|
return true;
|
||||||
case "Infiltrate synthoids":
|
case "Infiltrate synthoids":
|
||||||
this.startWork(p, new SleeveInfiltrateWork());
|
this.startWork(p, new SleeveInfiltrateWork());
|
||||||
return true;
|
return true;
|
||||||
|
@ -35,6 +35,7 @@ const bladeburnerSelectorOptions: string[] = [
|
|||||||
"Field analysis",
|
"Field analysis",
|
||||||
"Recruitment",
|
"Recruitment",
|
||||||
"Diplomacy",
|
"Diplomacy",
|
||||||
|
"Hyperbolic Regeneration Chamber",
|
||||||
"Infiltrate synthoids",
|
"Infiltrate synthoids",
|
||||||
"Support main sleeve",
|
"Support main sleeve",
|
||||||
"Take on contracts",
|
"Take on contracts",
|
||||||
@ -285,6 +286,8 @@ function getABC(sleeve: Sleeve): [string, string, string] {
|
|||||||
return ["Perform Bladeburner Actions", "Diplomacy", "------"];
|
return ["Perform Bladeburner Actions", "Diplomacy", "------"];
|
||||||
case "Recruitment":
|
case "Recruitment":
|
||||||
return ["Perform Bladeburner Actions", "Recruitment", "------"];
|
return ["Perform Bladeburner Actions", "Recruitment", "------"];
|
||||||
|
case "Hyperbolic Regeneration Chamber":
|
||||||
|
return ["Perform Bladeburner Actions", "Hyperbolic Regeneration Chamber", "------"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,15 +55,15 @@ export function prestigeAugmentation(): void {
|
|||||||
AddToAllServers(homeComp);
|
AddToAllServers(homeComp);
|
||||||
prestigeHomeComputer(Player, homeComp);
|
prestigeHomeComputer(Player, homeComp);
|
||||||
|
|
||||||
if (augmentationExists(AugmentationNames.Neurolink) && Player.hasAugmentation(AugmentationNames.Neurolink)) {
|
if (augmentationExists(AugmentationNames.Neurolink) && Player.hasAugmentation(AugmentationNames.Neurolink, true)) {
|
||||||
homeComp.programs.push(Programs.FTPCrackProgram.name);
|
homeComp.programs.push(Programs.FTPCrackProgram.name);
|
||||||
homeComp.programs.push(Programs.RelaySMTPProgram.name);
|
homeComp.programs.push(Programs.RelaySMTPProgram.name);
|
||||||
}
|
}
|
||||||
if (augmentationExists(AugmentationNames.CashRoot) && Player.hasAugmentation(AugmentationNames.CashRoot)) {
|
if (augmentationExists(AugmentationNames.CashRoot) && Player.hasAugmentation(AugmentationNames.CashRoot, true)) {
|
||||||
Player.setMoney(1e6);
|
Player.setMoney(1e6);
|
||||||
homeComp.programs.push(Programs.BruteSSHProgram.name);
|
homeComp.programs.push(Programs.BruteSSHProgram.name);
|
||||||
}
|
}
|
||||||
if (augmentationExists(AugmentationNames.PCMatrix) && Player.hasAugmentation(AugmentationNames.PCMatrix)) {
|
if (augmentationExists(AugmentationNames.PCMatrix) && Player.hasAugmentation(AugmentationNames.PCMatrix, true)) {
|
||||||
homeComp.programs.push(Programs.DeepscanV1.name);
|
homeComp.programs.push(Programs.DeepscanV1.name);
|
||||||
homeComp.programs.push(Programs.AutoLink.name);
|
homeComp.programs.push(Programs.AutoLink.name);
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ export function prestigeAugmentation(): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Red Pill
|
// Red Pill
|
||||||
if (augmentationExists(AugmentationNames.TheRedPill) && Player.hasAugmentation(AugmentationNames.TheRedPill)) {
|
if (augmentationExists(AugmentationNames.TheRedPill) && Player.hasAugmentation(AugmentationNames.TheRedPill, true)) {
|
||||||
const WorldDaemon = GetServer(SpecialServers.WorldDaemon);
|
const WorldDaemon = GetServer(SpecialServers.WorldDaemon);
|
||||||
const DaedalusServer = GetServer(SpecialServers.DaedalusServer);
|
const DaedalusServer = GetServer(SpecialServers.DaedalusServer);
|
||||||
if (WorldDaemon && DaedalusServer) {
|
if (WorldDaemon && DaedalusServer) {
|
||||||
@ -160,7 +160,10 @@ export function prestigeAugmentation(): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (augmentationExists(AugmentationNames.StaneksGift1) && Player.hasAugmentation(AugmentationNames.StaneksGift1)) {
|
if (
|
||||||
|
augmentationExists(AugmentationNames.StaneksGift1) &&
|
||||||
|
Player.hasAugmentation(AugmentationNames.StaneksGift1, true)
|
||||||
|
) {
|
||||||
joinFaction(Factions[FactionNames.ChurchOfTheMachineGod]);
|
joinFaction(Factions[FactionNames.ChurchOfTheMachineGod]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ export class CompanyWork extends Work {
|
|||||||
|
|
||||||
getGainRates(player: IPlayer): WorkStats {
|
getGainRates(player: IPlayer): WorkStats {
|
||||||
let focusBonus = 1;
|
let focusBonus = 1;
|
||||||
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager)) {
|
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
return scaleWorkStats(calculateCompanyWorkStats(player, player, this.getCompany()), focusBonus);
|
return scaleWorkStats(calculateCompanyWorkStats(player, player, this.getCompany()), focusBonus);
|
||||||
|
@ -58,7 +58,7 @@ export class CreateProgramWork extends Work {
|
|||||||
|
|
||||||
process(player: IPlayer, cycles: number): boolean {
|
process(player: IPlayer, cycles: number): boolean {
|
||||||
let focusBonus = 1;
|
let focusBonus = 1;
|
||||||
if (!player.hasAugmentation(AugmentationNames["NeuroreceptorManager"])) {
|
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
//Higher hacking skill will allow you to create programs faster
|
//Higher hacking skill will allow you to create programs faster
|
||||||
|
@ -39,7 +39,7 @@ export class FactionWork extends Work {
|
|||||||
|
|
||||||
getReputationRate(player: IPlayer): number {
|
getReputationRate(player: IPlayer): number {
|
||||||
let focusBonus = 1;
|
let focusBonus = 1;
|
||||||
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager)) {
|
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
return calculateFactionRep(player, this.factionWorkType, this.getFaction().favor) * focusBonus;
|
return calculateFactionRep(player, this.factionWorkType, this.getFaction().favor) * focusBonus;
|
||||||
@ -47,7 +47,7 @@ export class FactionWork extends Work {
|
|||||||
|
|
||||||
getExpRates(player: IPlayer): WorkStats {
|
getExpRates(player: IPlayer): WorkStats {
|
||||||
let focusBonus = 1;
|
let focusBonus = 1;
|
||||||
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager)) {
|
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
const rate = calculateFactionExp(player, this.factionWorkType);
|
const rate = calculateFactionExp(player, this.factionWorkType);
|
||||||
|
@ -37,7 +37,7 @@ export class GraftingWork extends Work {
|
|||||||
|
|
||||||
process(player: IPlayer, cycles: number): boolean {
|
process(player: IPlayer, cycles: number): boolean {
|
||||||
let focusBonus = 1;
|
let focusBonus = 1;
|
||||||
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager)) {
|
if (!player.hasAugmentation(AugmentationNames.NeuroreceptorManager, true)) {
|
||||||
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
focusBonus = player.focus ? 1 : CONSTANTS.BaseFocusBonus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ export class GraftingWork extends Work {
|
|||||||
if (!cancelled) {
|
if (!cancelled) {
|
||||||
applyAugmentation({ name: augName, level: 1 });
|
applyAugmentation({ name: augName, level: 1 });
|
||||||
|
|
||||||
if (!player.hasAugmentation(AugmentationNames.CongruityImplant)) {
|
if (!player.hasAugmentation(AugmentationNames.CongruityImplant, true)) {
|
||||||
player.entropy += 1;
|
player.entropy += 1;
|
||||||
player.applyEntropy(player.entropy);
|
player.applyEntropy(player.entropy);
|
||||||
}
|
}
|
||||||
@ -62,7 +62,7 @@ export class GraftingWork extends Work {
|
|||||||
<>
|
<>
|
||||||
You've finished grafting {augName}.<br />
|
You've finished grafting {augName}.<br />
|
||||||
The augmentation has been applied to your body{" "}
|
The augmentation has been applied to your body{" "}
|
||||||
{player.hasAugmentation(AugmentationNames.CongruityImplant) ? "." : ", but you feel a bit off."}
|
{player.hasAugmentation(AugmentationNames.CongruityImplant, true) ? "." : ", but you feel a bit off."}
|
||||||
</>,
|
</>,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -119,6 +119,7 @@ function ExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Because crime exp is given all at once at the end, we don't care about the cycles per second. */
|
||||||
function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
||||||
return [
|
return [
|
||||||
rate.hackExp > 0 ? (
|
rate.hackExp > 0 ? (
|
||||||
@ -126,7 +127,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Hacking Exp"
|
name="Hacking Exp"
|
||||||
color={Settings.theme.hack}
|
color={Settings.theme.hack}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.hackExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.hackExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -137,7 +138,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Strength Exp"
|
name="Strength Exp"
|
||||||
color={Settings.theme.combat}
|
color={Settings.theme.combat}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.strExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.strExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -148,7 +149,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Defense Exp"
|
name="Defense Exp"
|
||||||
color={Settings.theme.combat}
|
color={Settings.theme.combat}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.defExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.defExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -159,7 +160,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Dexterity Exp"
|
name="Dexterity Exp"
|
||||||
color={Settings.theme.combat}
|
color={Settings.theme.combat}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.dexExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.dexExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -170,7 +171,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Agility Exp"
|
name="Agility Exp"
|
||||||
color={Settings.theme.combat}
|
color={Settings.theme.combat}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.agiExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.agiExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -181,7 +182,7 @@ function CrimeExpRows(rate: WorkStats): React.ReactElement[] {
|
|||||||
name="Charisma Exp"
|
name="Charisma Exp"
|
||||||
color={Settings.theme.cha}
|
color={Settings.theme.cha}
|
||||||
data={{
|
data={{
|
||||||
content: `${numeralWrapper.formatExp(rate.chaExp * CYCLES_PER_SEC)}`,
|
content: `${numeralWrapper.formatExp(rate.chaExp)}`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
|
0
test/__mocks__/rawLoader.js
Normal file
0
test/__mocks__/rawLoader.js
Normal file
Loading…
Reference in New Issue
Block a user