mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-10 17:53:55 +01:00
moved over to player stats
* added new augmentations
This commit is contained in:
parent
e11cc1946e
commit
7f28158005
@ -9,6 +9,7 @@ import { numeralWrapper } from "../ui/numeralFormat";
|
|||||||
import { Money } from "../ui/React/Money";
|
import { Money } from "../ui/React/Money";
|
||||||
|
|
||||||
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../utils/JSONReviver";
|
import { Generic_fromJSON, Generic_toJSON, Reviver } from "../utils/JSONReviver";
|
||||||
|
import { FactionNames } from "../Faction/data/FactionNames";
|
||||||
|
|
||||||
export interface IConstructorParams {
|
export interface IConstructorParams {
|
||||||
info: string | JSX.Element;
|
info: string | JSX.Element;
|
||||||
@ -50,6 +51,12 @@ export interface IConstructorParams {
|
|||||||
bladeburner_stamina_gain_mult?: number;
|
bladeburner_stamina_gain_mult?: number;
|
||||||
bladeburner_analysis_mult?: number;
|
bladeburner_analysis_mult?: number;
|
||||||
bladeburner_success_chance_mult?: number;
|
bladeburner_success_chance_mult?: number;
|
||||||
|
infiltration_base_rep_increase?: number;
|
||||||
|
infiltration_rep_mult?: number;
|
||||||
|
infiltration_trade_mult?: number;
|
||||||
|
infiltration_sell_mult?: number;
|
||||||
|
infiltration_timer_mult?: number;
|
||||||
|
infiltration_health_reduction_mult?: number;
|
||||||
|
|
||||||
startingMoney?: number;
|
startingMoney?: number;
|
||||||
programs?: string[];
|
programs?: string[];
|
||||||
@ -338,6 +345,48 @@ function generateStatsDescription(mults: IMap<number>, programs?: string[], star
|
|||||||
<br />+{f(mults.bladeburner_success_chance_mult - 1)} Bladeburner Contracts and Operations success chance
|
<br />+{f(mults.bladeburner_success_chance_mult - 1)} Bladeburner Contracts and Operations success chance
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
if (mults.infiltration_base_rep_increase)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f(mults.infiltration_base_rep_increase)} Infiltration {FactionNames.Infiltrators} Reputation base reward
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.infiltration_rep_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f((mults.infiltration_rep_mult - 1) * 100)}% Infiltration {FactionNames.Infiltrators} Reputation reward
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.infiltration_trade_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f((mults.infiltration_trade_mult - 1) * 100)}% Infiltration Reputation for trading information
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.infiltration_sell_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f((mults.infiltration_sell_mult - 1) * 100)}% Infiltration cash reward for selling information
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.infiltration_timer_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />+{f((mults.infiltration_timer_mult - 1) * 100)}% Infiltration time per minigame
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
if (mults.infiltration_health_reduction_mult)
|
||||||
|
desc = (
|
||||||
|
<>
|
||||||
|
{desc}
|
||||||
|
<br />-{f((mults.infiltration_health_reduction_mult - 1) * 100)}% Infiltration health lost per failed minigame
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if (startingMoney)
|
if (startingMoney)
|
||||||
desc = (
|
desc = (
|
||||||
@ -395,7 +444,7 @@ export class Augmentation {
|
|||||||
startingCost = 0;
|
startingCost = 0;
|
||||||
|
|
||||||
// Initial rep requirement. Doesn't change when you purchase multiple Augmentation
|
// Initial rep requirement. Doesn't change when you purchase multiple Augmentation
|
||||||
startingRepRequirement = 0
|
startingRepRequirement = 0;
|
||||||
|
|
||||||
// Factions that offer this aug.
|
// Factions that offer this aug.
|
||||||
factions: string[] = [];
|
factions: string[] = [];
|
||||||
@ -517,6 +566,25 @@ export class Augmentation {
|
|||||||
this.mults.bladeburner_success_chance_mult = params.bladeburner_success_chance_mult;
|
this.mults.bladeburner_success_chance_mult = params.bladeburner_success_chance_mult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params.infiltration_base_rep_increase) {
|
||||||
|
this.mults.infiltration_base_rep_increase = params.infiltration_base_rep_increase;
|
||||||
|
}
|
||||||
|
if (params.infiltration_rep_mult) {
|
||||||
|
this.mults.infiltration_rep_mult = params.infiltration_rep_mult;
|
||||||
|
}
|
||||||
|
if (params.infiltration_trade_mult) {
|
||||||
|
this.mults.infiltration_trade_mult = params.infiltration_trade_mult;
|
||||||
|
}
|
||||||
|
if (params.infiltration_sell_mult) {
|
||||||
|
this.mults.infiltration_sell_mult = params.infiltration_sell_mult;
|
||||||
|
}
|
||||||
|
if (params.infiltration_timer_mult) {
|
||||||
|
this.mults.infiltration_timer_mult = params.infiltration_timer_mult;
|
||||||
|
}
|
||||||
|
if (params.infiltration_health_reduction_mult) {
|
||||||
|
this.mults.infiltration_health_reduction_mult = params.infiltration_health_reduction_mult;
|
||||||
|
}
|
||||||
|
|
||||||
if (params.stats === undefined)
|
if (params.stats === undefined)
|
||||||
this.stats = generateStatsDescription(this.mults, params.programs, params.startingMoney);
|
this.stats = generateStatsDescription(this.mults, params.programs, params.startingMoney);
|
||||||
else this.stats = params.stats;
|
else this.stats = params.stats;
|
||||||
|
@ -5,6 +5,7 @@ import { Programs } from "../Programs/Programs";
|
|||||||
import { WHRNG } from "../Casino/RNG";
|
import { WHRNG } from "../Casino/RNG";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { FactionNames } from "../Faction/data/FactionNames";
|
import { FactionNames } from "../Faction/data/FactionNames";
|
||||||
|
import { CityName } from "src/Locations/data/CityNames";
|
||||||
|
|
||||||
function getRandomBonus(): any {
|
function getRandomBonus(): any {
|
||||||
const bonuses = [
|
const bonuses = [
|
||||||
@ -99,23 +100,63 @@ export const infiltratorsOtherAugmentations = [
|
|||||||
name: AugmentationNames.BionicFingers,
|
name: AugmentationNames.BionicFingers,
|
||||||
repCost: 15e1,
|
repCost: 15e1,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
|
infiltration_base_rep_increase: 5,
|
||||||
info:
|
info:
|
||||||
"This state of the art augmentation removes the need for bones and tendons in your fingers, " +
|
"This state of the art augmentation removes the need for bones and tendons in your fingers, " +
|
||||||
"with this you will have the dexterity equal to the best rubik's cube player in the world. ",
|
"with this you will have the dexterity equal to the best rubik's cube player in the world. ",
|
||||||
stats: <>This augmentation increases the rep reward to {FactionNames.Infiltrators} by 5 per infiltration.</>,
|
|
||||||
factions: [FactionNames.Infiltrators],
|
factions: [FactionNames.Infiltrators],
|
||||||
}),
|
}),
|
||||||
new Augmentation({
|
new Augmentation({
|
||||||
name: AugmentationNames.CorporationManagementImplant,
|
name: AugmentationNames.CorporationManagementImplant,
|
||||||
repCost: 25e1,
|
repCost: 25e1,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
|
infiltration_rep_mult: 2.5,
|
||||||
info:
|
info:
|
||||||
"As time went on corporations realized that managers were redundant if they could be replaced by AI chips " +
|
"As time went on corporations realized that managers were redundant if they could be replaced by AI chips " +
|
||||||
"implanted directly in the brain, and so the this implant was developed which could analyse the users brain " +
|
"implanted directly in the brain, and so the this implant was developed which could analyse the users brain " +
|
||||||
"to find the perfect tone and sounding voice to increase productivity of the user to maximum profits.",
|
"to find the perfect tone and sounding voice to increase productivity of the user to maximum profits.",
|
||||||
stats: (
|
factions: [FactionNames.Infiltrators],
|
||||||
<>This augmentation multiplies the rep reward to {FactionNames.Infiltrators} by 2.5 per infiltration.</>
|
}),
|
||||||
),
|
new Augmentation({
|
||||||
|
name: AugmentationNames.TranslationCircuit,
|
||||||
|
repCost: 5e2,
|
||||||
|
moneyCost: 1e6,
|
||||||
|
infiltration_trade_mult: 1.5,
|
||||||
|
info:
|
||||||
|
"A state of the art circuit module that manipulates the users voice to suit the needs of the situation, " +
|
||||||
|
"allowing the people listening to feel more persuaded by whats said due to the voice being auto translated " +
|
||||||
|
"to the listeners accent and language.",
|
||||||
|
factions: [FactionNames.Infiltrators],
|
||||||
|
}),
|
||||||
|
new Augmentation({
|
||||||
|
name: AugmentationNames.GoldenSuiteCase,
|
||||||
|
repCost: 5e2,
|
||||||
|
moneyCost: 1e6,
|
||||||
|
infiltration_sell_mult: 1.5,
|
||||||
|
info:
|
||||||
|
"Some say too much money is a curse, those people clearly have never owned a golden suitcase. it might be " +
|
||||||
|
"a bit heavier but it sure does make anything inside it look a lot more valuable.",
|
||||||
|
factions: [FactionNames.Infiltrators],
|
||||||
|
}),
|
||||||
|
new Augmentation({
|
||||||
|
name: AugmentationNames.TimeDilationInjection,
|
||||||
|
repCost: 5e2,
|
||||||
|
moneyCost: 1e6,
|
||||||
|
infiltration_timer_mult: 1.3,
|
||||||
|
info:
|
||||||
|
"Injected directly into the user eyes, as the serum seeps into the brain via the optic nerves perception " +
|
||||||
|
"of time begins to slow down allowing you to take more time to do things than the average person",
|
||||||
|
factions: [FactionNames.Infiltrators],
|
||||||
|
}),
|
||||||
|
new Augmentation({
|
||||||
|
name: AugmentationNames.BitaniumArmorAlloy,
|
||||||
|
repCost: 5e2,
|
||||||
|
moneyCost: 1e6,
|
||||||
|
infiltration_health_reduction_mult: 0.7,
|
||||||
|
info:
|
||||||
|
`Deep in the mines of ${CityName.Ishima} miners found a strange new material, now known as bitanium after ` +
|
||||||
|
"many iterations of experimenting it was found to be exceptional at increasing ones amour at absorbing " +
|
||||||
|
"blunt damage when used as an alloy with almost any other metal you can think of.",
|
||||||
factions: [FactionNames.Infiltrators],
|
factions: [FactionNames.Infiltrators],
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
@ -113,6 +113,7 @@ export enum AugmentationNames {
|
|||||||
StaneksGift2 = "Stanek's Gift - Awakening",
|
StaneksGift2 = "Stanek's Gift - Awakening",
|
||||||
StaneksGift3 = "Stanek's Gift - Serenity",
|
StaneksGift3 = "Stanek's Gift - Serenity",
|
||||||
|
|
||||||
|
// Infiltrators MiniGames
|
||||||
BagOfSand = "A Bag of Sand",
|
BagOfSand = "A Bag of Sand",
|
||||||
IntellisenseModule = "Intellisense Module",
|
IntellisenseModule = "Intellisense Module",
|
||||||
ReverseDictionary = "Reverse Dictionary",
|
ReverseDictionary = "Reverse Dictionary",
|
||||||
@ -121,9 +122,13 @@ export enum AugmentationNames {
|
|||||||
CyberDecoder = "Cyber Decoder",
|
CyberDecoder = "Cyber Decoder",
|
||||||
MineDetector = "Mine Detector",
|
MineDetector = "Mine Detector",
|
||||||
WireCuttingManual = "Wire Cutting Manual",
|
WireCuttingManual = "Wire Cutting Manual",
|
||||||
|
// Infiltrators general
|
||||||
BionicFingers = "Bionic Fingers",
|
BionicFingers = "Bionic Fingers",
|
||||||
CorporationManagementImplant = "Corporation Management Implant",
|
CorporationManagementImplant = "Corporation Management Implant",
|
||||||
|
TranslationCircuit = "Translation Circuit",
|
||||||
|
GoldenSuiteCase = "Golden Suite Case",
|
||||||
|
TimeDilationInjection = "Time Dilation Injection",
|
||||||
|
BitaniumArmorAlloy = "Bitanium Armor Alloy",
|
||||||
|
|
||||||
//Wasteland Augs
|
//Wasteland Augs
|
||||||
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System
|
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System
|
||||||
|
@ -115,6 +115,48 @@ export function PlayerMultipliers(): React.ReactElement {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function InfiltrationMults(): React.ReactElement {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<MultiplierTable
|
||||||
|
rows={[
|
||||||
|
[
|
||||||
|
"Infiltrator Rep reward multiplier",
|
||||||
|
Player.infiltration_rep_mult,
|
||||||
|
Player.infiltration_rep_mult * mults.infiltration_rep_mult,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Infiltration sell multiplier",
|
||||||
|
Player.infiltration_sell_mult,
|
||||||
|
Player.infiltration_sell_mult * mults.infiltration_sell_mult,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Infiltration trade multiplier",
|
||||||
|
Player.infiltration_trade_mult,
|
||||||
|
Player.infiltration_trade_mult * mults.infiltration_trade_mult,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Infiltration minigame timer multiplier",
|
||||||
|
Player.infiltration_timer_mult,
|
||||||
|
Player.infiltration_timer_mult * mults.infiltration_timer_mult,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Infiltration minigame health reduction multiplier",
|
||||||
|
Player.infiltration_health_reduction_mult,
|
||||||
|
Player.infiltration_health_reduction_mult * mults.infiltration_health_reduction_mult,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<br />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Typography variant="h4">Multipliers</Typography>
|
<Typography variant="h4">Multipliers</Typography>
|
||||||
@ -286,6 +328,7 @@ export function PlayerMultipliers(): React.ReactElement {
|
|||||||
<br />
|
<br />
|
||||||
|
|
||||||
<BladeburnerMults />
|
<BladeburnerMults />
|
||||||
|
<InfiltrationMults />
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -45,6 +45,12 @@ export function Info(props: IProps): React.ReactElement {
|
|||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
|
|
||||||
const favorGain = props.faction.getFavorGain();
|
const favorGain = props.faction.getFavorGain();
|
||||||
|
const offersWork =
|
||||||
|
props.factionInfo.offerHackingMission ||
|
||||||
|
props.factionInfo.offerFieldWork ||
|
||||||
|
props.factionInfo.offerSecurityWork ||
|
||||||
|
props.factionInfo.offerHackingWork;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Typography classes={{ root: classes.noformat }}>{props.factionInfo.infoText}</Typography>
|
<Typography classes={{ root: classes.noformat }}>{props.factionInfo.infoText}</Typography>
|
||||||
@ -59,9 +65,7 @@ export function Info(props: IProps): React.ReactElement {
|
|||||||
</Typography>
|
</Typography>
|
||||||
<MathJaxWrapper>{"\\(\\huge{r = \\text{total faction reputation}}\\)"}</MathJaxWrapper>
|
<MathJaxWrapper>{"\\(\\huge{r = \\text{total faction reputation}}\\)"}</MathJaxWrapper>
|
||||||
<MathJaxWrapper>
|
<MathJaxWrapper>
|
||||||
{
|
{"\\(\\huge{favor=1+\\left\\lfloor\\log_{1.02}\\left(\\frac{r+25000}{25500}\\right)\\right\\rfloor}\\)"}
|
||||||
"\\(\\huge{favor=1+\\left\\lfloor\\log_{1.02}\\left(\\frac{r+25000}{25500}\\right)\\right\\rfloor}\\)"
|
|
||||||
}
|
|
||||||
</MathJaxWrapper>
|
</MathJaxWrapper>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
@ -86,7 +90,6 @@ export function Info(props: IProps): React.ReactElement {
|
|||||||
|
|
||||||
<MathJaxWrapper>{"\\(\\huge{r = reputation}\\)"}</MathJaxWrapper>
|
<MathJaxWrapper>{"\\(\\huge{r = reputation}\\)"}</MathJaxWrapper>
|
||||||
<MathJaxWrapper>{"\\(\\huge{\\Delta r = \\Delta r \\times \\frac{100+favor}{100}}\\)"}</MathJaxWrapper>
|
<MathJaxWrapper>{"\\(\\huge{\\Delta r = \\Delta r \\times \\frac{100+favor}{100}}\\)"}</MathJaxWrapper>
|
||||||
|
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
@ -98,10 +101,16 @@ export function Info(props: IProps): React.ReactElement {
|
|||||||
|
|
||||||
<Typography>-------------------------</Typography>
|
<Typography>-------------------------</Typography>
|
||||||
<Typography>
|
<Typography>
|
||||||
Perform work/carry out assignments for your faction to help further its cause! By doing so you will earn
|
{offersWork ? (
|
||||||
reputation for your faction. You will also gain reputation passively over time, although at a very slow rate.
|
<>
|
||||||
Earning reputation will allow you to purchase Augmentations through this faction, which are powerful upgrades
|
Perform work/carry out assignments for your faction to help further its cause! By doing so you will earn
|
||||||
that enhance your abilities.
|
reputation for your faction.{" "}
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
You will also gain reputation passively over time, although at a very slow rate. Earning reputation will allow
|
||||||
|
you to purchase Augmentations through this faction, which are powerful upgrades that enhance your abilities.
|
||||||
</Typography>
|
</Typography>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -91,7 +91,9 @@ export function Game(props: IProps): React.ReactElement {
|
|||||||
pushResult(false);
|
pushResult(false);
|
||||||
// Kill the player immediately if they use automation, so
|
// Kill the player immediately if they use automation, so
|
||||||
// it's clear they're not meant to
|
// it's clear they're not meant to
|
||||||
const damage = options?.automated ? player.hp : props.StartingDifficulty * 3;
|
const damage = options?.automated
|
||||||
|
? player.hp
|
||||||
|
: props.StartingDifficulty * 3 * player.infiltration_health_reduction_mult;
|
||||||
if (player.takeDamage(damage)) {
|
if (player.takeDamage(damage)) {
|
||||||
router.toCity();
|
router.toCity();
|
||||||
return;
|
return;
|
||||||
|
@ -3,6 +3,7 @@ import React, { useState, useEffect } from "react";
|
|||||||
import withStyles from "@mui/styles/withStyles";
|
import withStyles from "@mui/styles/withStyles";
|
||||||
import { Theme } from "@mui/material/styles";
|
import { Theme } from "@mui/material/styles";
|
||||||
import Grid from "@mui/material/Grid";
|
import Grid from "@mui/material/Grid";
|
||||||
|
import { use } from "../../ui/Context";
|
||||||
|
|
||||||
const TimerProgress = withStyles((theme: Theme) => ({
|
const TimerProgress = withStyles((theme: Theme) => ({
|
||||||
root: {
|
root: {
|
||||||
@ -20,14 +21,16 @@ interface IProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function GameTimer(props: IProps): React.ReactElement {
|
export function GameTimer(props: IProps): React.ReactElement {
|
||||||
|
const player = use.Player();
|
||||||
const [v, setV] = useState(100);
|
const [v, setV] = useState(100);
|
||||||
|
const totalMillis = player.infiltration_timer_mult * props.millis;
|
||||||
|
|
||||||
const tick = 200;
|
const tick = 200;
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const intervalId = setInterval(() => {
|
const intervalId = setInterval(() => {
|
||||||
setV((old) => {
|
setV((old) => {
|
||||||
if (old <= 0) props.onExpire();
|
if (old <= 0) props.onExpire();
|
||||||
return old - (tick / props.millis) * 100;
|
return old - (tick / totalMillis) * 100;
|
||||||
});
|
});
|
||||||
}, tick);
|
}, tick);
|
||||||
return () => {
|
return () => {
|
||||||
|
@ -10,7 +10,6 @@ import Button from "@mui/material/Button";
|
|||||||
import MenuItem from "@mui/material/MenuItem";
|
import MenuItem from "@mui/material/MenuItem";
|
||||||
import Select, { SelectChangeEvent } from "@mui/material/Select";
|
import Select, { SelectChangeEvent } from "@mui/material/Select";
|
||||||
import { FactionNames } from "../../Faction/data/FactionNames";
|
import { FactionNames } from "../../Faction/data/FactionNames";
|
||||||
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
|
|
||||||
import { LocationsMetadata } from "../../Locations/data/LocationsMetadata";
|
import { LocationsMetadata } from "../../Locations/data/LocationsMetadata";
|
||||||
import { formatNumber } from "../../utils/StringHelperFunctions";
|
import { formatNumber } from "../../utils/StringHelperFunctions";
|
||||||
|
|
||||||
@ -38,6 +37,7 @@ export function Victory(props: IProps): React.ReactElement {
|
|||||||
Math.pow(props.StartingDifficulty, 1.2) *
|
Math.pow(props.StartingDifficulty, 1.2) *
|
||||||
30 *
|
30 *
|
||||||
levelBonus *
|
levelBonus *
|
||||||
|
player.infiltration_trade_mult *
|
||||||
BitNodeMultipliers.InfiltrationRep;
|
BitNodeMultipliers.InfiltrationRep;
|
||||||
|
|
||||||
const infiltratorFaction = Factions[FactionNames.Infiltrators];
|
const infiltratorFaction = Factions[FactionNames.Infiltrators];
|
||||||
@ -48,23 +48,17 @@ export function Victory(props: IProps): React.ReactElement {
|
|||||||
Math.pow(props.StartingDifficulty, 3) *
|
Math.pow(props.StartingDifficulty, 3) *
|
||||||
3e3 *
|
3e3 *
|
||||||
levelBonus *
|
levelBonus *
|
||||||
|
player.infiltration_sell_mult *
|
||||||
BitNodeMultipliers.InfiltrationMoney;
|
BitNodeMultipliers.InfiltrationMoney;
|
||||||
|
|
||||||
function calculateInfiltratorsRepReward(): number {
|
function calculateInfiltratorsRepReward(): number {
|
||||||
const bionicFingersRepGain = player.hasAugmentation(AugmentationNames.BionicFingers, true) ? 5 : 0;
|
|
||||||
const CorporationManagementImplantRepMultiplier = player.hasAugmentation(
|
|
||||||
AugmentationNames.CorporationManagementImplant,
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
? 2.5
|
|
||||||
: 1;
|
|
||||||
const maxStartingSecurityLevel = LocationsMetadata.reduce((acc, data): number => {
|
const maxStartingSecurityLevel = LocationsMetadata.reduce((acc, data): number => {
|
||||||
const startingSecurityLevel = data.infiltrationData?.startingSecurityLevel || 0;
|
const startingSecurityLevel = data.infiltrationData?.startingSecurityLevel || 0;
|
||||||
return acc > startingSecurityLevel ? acc : startingSecurityLevel;
|
return acc > startingSecurityLevel ? acc : startingSecurityLevel;
|
||||||
}, 0);
|
}, 0);
|
||||||
const baseRepGain = (props.StartingDifficulty / maxStartingSecurityLevel) * 10;
|
const baseRepGain = (props.StartingDifficulty / maxStartingSecurityLevel) * 10;
|
||||||
|
|
||||||
return (baseRepGain + bionicFingersRepGain) * CorporationManagementImplantRepMultiplier;
|
return (baseRepGain + player.infiltration_base_rep_increase) * player.infiltration_rep_mult;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sell(): void {
|
function sell(): void {
|
||||||
|
@ -2306,6 +2306,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
|
|||||||
bladeburner_stamina_gain_mult: Player.bladeburner_stamina_gain_mult,
|
bladeburner_stamina_gain_mult: Player.bladeburner_stamina_gain_mult,
|
||||||
bladeburner_analysis_mult: Player.bladeburner_analysis_mult,
|
bladeburner_analysis_mult: Player.bladeburner_analysis_mult,
|
||||||
bladeburner_success_chance_mult: Player.bladeburner_success_chance_mult,
|
bladeburner_success_chance_mult: Player.bladeburner_success_chance_mult,
|
||||||
|
infiltration_base_rep_increase: Player.infiltration_base_rep_increase,
|
||||||
|
infiltration_rep_mult: Player.infiltration_rep_mult,
|
||||||
|
infiltration_trade_mult: Player.infiltration_trade_mult,
|
||||||
|
infiltration_sell_mult: Player.infiltration_sell_mult,
|
||||||
|
infiltration_timer_mult: Player.infiltration_timer_mult,
|
||||||
|
infiltration_health_reduction_mult: Player.infiltration_health_reduction_mult,
|
||||||
bitNodeN: Player.bitNodeN,
|
bitNodeN: Player.bitNodeN,
|
||||||
totalPlaytime: Player.totalPlaytime,
|
totalPlaytime: Player.totalPlaytime,
|
||||||
playtimeSinceLastAug: Player.playtimeSinceLastAug,
|
playtimeSinceLastAug: Player.playtimeSinceLastAug,
|
||||||
|
@ -126,6 +126,12 @@ export interface IPlayer {
|
|||||||
bladeburner_stamina_gain_mult: number;
|
bladeburner_stamina_gain_mult: number;
|
||||||
bladeburner_analysis_mult: number;
|
bladeburner_analysis_mult: number;
|
||||||
bladeburner_success_chance_mult: number;
|
bladeburner_success_chance_mult: number;
|
||||||
|
infiltration_base_rep_increase: number;
|
||||||
|
infiltration_rep_mult: number;
|
||||||
|
infiltration_trade_mult: number;
|
||||||
|
infiltration_sell_mult: number;
|
||||||
|
infiltration_timer_mult: number;
|
||||||
|
infiltration_health_reduction_mult: number;
|
||||||
|
|
||||||
createProgramReqLvl: number;
|
createProgramReqLvl: number;
|
||||||
factionWorkType: string;
|
factionWorkType: string;
|
||||||
|
@ -97,6 +97,13 @@ export abstract class Person {
|
|||||||
bladeburner_analysis_mult = 1;
|
bladeburner_analysis_mult = 1;
|
||||||
bladeburner_success_chance_mult = 1;
|
bladeburner_success_chance_mult = 1;
|
||||||
|
|
||||||
|
infiltration_base_rep_increase = 0;
|
||||||
|
infiltration_rep_mult = 1;
|
||||||
|
infiltration_trade_mult = 1;
|
||||||
|
infiltration_sell_mult = 1;
|
||||||
|
infiltration_timer_mult = 1;
|
||||||
|
infiltration_health_reduction_mult = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Augmentations
|
* Augmentations
|
||||||
*/
|
*/
|
||||||
@ -195,6 +202,24 @@ export abstract class Person {
|
|||||||
this.crime_success_mult = 1;
|
this.crime_success_mult = 1;
|
||||||
|
|
||||||
this.work_money_mult = 1;
|
this.work_money_mult = 1;
|
||||||
|
|
||||||
|
this.hacknet_node_money_mult = 1;
|
||||||
|
this.hacknet_node_purchase_cost_mult = 1;
|
||||||
|
this.hacknet_node_ram_cost_mult = 1;
|
||||||
|
this.hacknet_node_core_cost_mult = 1;
|
||||||
|
this.hacknet_node_level_cost_mult = 1;
|
||||||
|
|
||||||
|
this.bladeburner_max_stamina_mult = 1;
|
||||||
|
this.bladeburner_stamina_gain_mult = 1;
|
||||||
|
this.bladeburner_analysis_mult = 1;
|
||||||
|
this.bladeburner_success_chance_mult = 1;
|
||||||
|
|
||||||
|
this.infiltration_base_rep_increase = 0;
|
||||||
|
this.infiltration_rep_mult = 1;
|
||||||
|
this.infiltration_trade_mult = 1;
|
||||||
|
this.infiltration_sell_mult = 1;
|
||||||
|
this.infiltration_timer_mult = 1;
|
||||||
|
this.infiltration_health_reduction_mult = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,6 +135,12 @@ export class PlayerObject implements IPlayer {
|
|||||||
bladeburner_stamina_gain_mult: number;
|
bladeburner_stamina_gain_mult: number;
|
||||||
bladeburner_analysis_mult: number;
|
bladeburner_analysis_mult: number;
|
||||||
bladeburner_success_chance_mult: number;
|
bladeburner_success_chance_mult: number;
|
||||||
|
infiltration_base_rep_increase: number;
|
||||||
|
infiltration_rep_mult: number;
|
||||||
|
infiltration_trade_mult: number;
|
||||||
|
infiltration_sell_mult: number;
|
||||||
|
infiltration_timer_mult: number;
|
||||||
|
infiltration_health_reduction_mult: number;
|
||||||
|
|
||||||
createProgramReqLvl: number;
|
createProgramReqLvl: number;
|
||||||
factionWorkType: string;
|
factionWorkType: string;
|
||||||
@ -456,6 +462,13 @@ export class PlayerObject implements IPlayer {
|
|||||||
this.bladeburner_analysis_mult = 1; //Field Analysis Onl;
|
this.bladeburner_analysis_mult = 1; //Field Analysis Onl;
|
||||||
this.bladeburner_success_chance_mult = 1;
|
this.bladeburner_success_chance_mult = 1;
|
||||||
|
|
||||||
|
this.infiltration_base_rep_increase = 0;
|
||||||
|
this.infiltration_rep_mult = 1;
|
||||||
|
this.infiltration_trade_mult = 1;
|
||||||
|
this.infiltration_sell_mult = 1;
|
||||||
|
this.infiltration_timer_mult = 1;
|
||||||
|
this.infiltration_health_reduction_mult = 1;
|
||||||
|
|
||||||
// Sleeves & Re-sleeving
|
// Sleeves & Re-sleeving
|
||||||
this.sleeves = [];
|
this.sleeves = [];
|
||||||
this.resleeves = [];
|
this.resleeves = [];
|
||||||
|
@ -314,6 +314,13 @@ export function resetMultipliers(this: IPlayer): void {
|
|||||||
this.bladeburner_stamina_gain_mult = 1;
|
this.bladeburner_stamina_gain_mult = 1;
|
||||||
this.bladeburner_analysis_mult = 1;
|
this.bladeburner_analysis_mult = 1;
|
||||||
this.bladeburner_success_chance_mult = 1;
|
this.bladeburner_success_chance_mult = 1;
|
||||||
|
|
||||||
|
this.infiltration_base_rep_increase = 0;
|
||||||
|
this.infiltration_rep_mult = 1;
|
||||||
|
this.infiltration_trade_mult = 1;
|
||||||
|
this.infiltration_sell_mult = 1;
|
||||||
|
this.infiltration_timer_mult = 1;
|
||||||
|
this.infiltration_health_reduction_mult = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function hasProgram(this: IPlayer, programName: string): boolean {
|
export function hasProgram(this: IPlayer, programName: string): boolean {
|
||||||
|
@ -142,6 +142,25 @@ function BladeburnerMults(): React.ReactElement {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function InfiltrationMults(): React.ReactElement {
|
||||||
|
const player = use.Player();
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<MultiplierTable
|
||||||
|
rows={[
|
||||||
|
["Infiltrator Base Rep increase", player.infiltration_rep_mult],
|
||||||
|
["Infiltrator Rep reward multiplier", player.infiltration_rep_mult],
|
||||||
|
["Infiltration sell multiplier", player.infiltration_sell_mult],
|
||||||
|
["Infiltration trade multiplier", player.infiltration_trade_mult],
|
||||||
|
["Infiltration minigame timer multiplier", player.infiltration_timer_mult],
|
||||||
|
["Infiltration minigame health reduction multiplier", player.infiltration_health_reduction_mult],
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<br />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function CurrentBitNode(): React.ReactElement {
|
function CurrentBitNode(): React.ReactElement {
|
||||||
const player = use.Player();
|
const player = use.Player();
|
||||||
if (player.sourceFiles.length > 0) {
|
if (player.sourceFiles.length > 0) {
|
||||||
@ -483,6 +502,7 @@ export function CharacterStats(): React.ReactElement {
|
|||||||
/>
|
/>
|
||||||
<br />
|
<br />
|
||||||
<BladeburnerMults />
|
<BladeburnerMults />
|
||||||
|
<InfiltrationMults />
|
||||||
</Box>
|
</Box>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user