mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-19 14:13:48 +01:00
Merge branch 'dev' of github.com:danielyxie/bitburner into dev
This commit is contained in:
commit
79e7c47b4d
@ -105,7 +105,7 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
"injects *Γ-based cells that provides general enhancement to the body.",
|
"injects *Γ-based cells that provides general enhancement to the body.",
|
||||||
stats: (
|
stats: (
|
||||||
<>
|
<>
|
||||||
This augmentation makes many aspect of infiltration easier and more productive. Such as increased timer,
|
This augmentation makes many aspects of infiltration easier and more productive. Such as increased timer,
|
||||||
rewards, reduced damage taken, etc.
|
rewards, reduced damage taken, etc.
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
@ -117,10 +117,10 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
repCost: 1e4,
|
repCost: 1e4,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
info:
|
info:
|
||||||
"Extra-occular neurons taken from old martial art master. Injecting the user the ability to " +
|
"Extra-occular neurons taken from old martial art master. Injecting them gives the user the ability to " +
|
||||||
"predict enemy attack before they even know it themself.",
|
"predict the enemy's attack before they even know it themself.",
|
||||||
stats: (
|
stats: (
|
||||||
<>This augmentation makes the Slash minigame easier by showing you via an indictor when the slash in coming.</>
|
<>This augmentation makes the Slash minigame easier by showing you via an indicator when the slash in coming.</>
|
||||||
),
|
),
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
factions: [FactionNames.ShadowsOfAnarchy],
|
factions: [FactionNames.ShadowsOfAnarchy],
|
||||||
@ -129,7 +129,7 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
name: AugmentationNames.WisdomOfAthena,
|
name: AugmentationNames.WisdomOfAthena,
|
||||||
repCost: 1e4,
|
repCost: 1e4,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
info: "A connective brain implant to SASHA that focuses in pattern recognition and predictive templating.",
|
info: "A connective brain implant to SASHA that focuses on pattern recognition and predictive templating.",
|
||||||
stats: <>This augmentation makes the Bracket minigame easier by removing all '[' ']'.</>,
|
stats: <>This augmentation makes the Bracket minigame easier by removing all '[' ']'.</>,
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
factions: [FactionNames.ShadowsOfAnarchy],
|
factions: [FactionNames.ShadowsOfAnarchy],
|
||||||
@ -138,7 +138,7 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
name: AugmentationNames.ChaosOfDionysus,
|
name: AugmentationNames.ChaosOfDionysus,
|
||||||
repCost: 1e4,
|
repCost: 1e4,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
info: "Opto-occipito implant to process visual signal before brain interpretation.",
|
info: "Opto-occipito implant to process visual signals before brain interpretation.",
|
||||||
stats: <>This augmentation makes the Backwards minigame easier by flipping the words.</>,
|
stats: <>This augmentation makes the Backwards minigame easier by flipping the words.</>,
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
factions: [FactionNames.ShadowsOfAnarchy],
|
factions: [FactionNames.ShadowsOfAnarchy],
|
||||||
@ -176,7 +176,7 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
name: AugmentationNames.HuntOfArtemis,
|
name: AugmentationNames.HuntOfArtemis,
|
||||||
repCost: 1e4,
|
repCost: 1e4,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
info: "magneto-turboencabulator based on technology by Micha Eike Siemon, increases the users electro-magnetic sensitivity.",
|
info: "magneto-turboencabulator based on technology by Micha Eike Siemon, increases the user's electro-magnetic sensitivity.",
|
||||||
stats: (
|
stats: (
|
||||||
<>
|
<>
|
||||||
This augmentation makes the Minesweeper minigame easier by showing the location of all mines and keeping their
|
This augmentation makes the Minesweeper minigame easier by showing the location of all mines and keeping their
|
||||||
@ -190,7 +190,7 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
|||||||
name: AugmentationNames.KnowledgeOfApollo,
|
name: AugmentationNames.KnowledgeOfApollo,
|
||||||
repCost: 1e4,
|
repCost: 1e4,
|
||||||
moneyCost: 1e6,
|
moneyCost: 1e6,
|
||||||
info: "Neodynic retention fjengeln spoofer using -φ karmions, net positive effect on implantees delta wave.",
|
info: "Neodynic retention fjengeln spoofer using -φ karmions, net positive effect on implantee's delta wave.",
|
||||||
stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires.</>,
|
stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires.</>,
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
factions: [FactionNames.ShadowsOfAnarchy],
|
factions: [FactionNames.ShadowsOfAnarchy],
|
||||||
@ -515,7 +515,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"TITN is a series of viruses that targets and alters the sequences of human DNA in genes that " +
|
"TITN is a series of viruses that targets and alters the sequences of human DNA in genes that " +
|
||||||
"control personality. The TITN-41 strain alters these genes so that the subject becomes more " +
|
"control personality. The TITN-41 strain alters these genes so that the subject becomes more " +
|
||||||
"outgoing and socialable.",
|
"outgoing and sociable.",
|
||||||
charisma_mult: 1.15,
|
charisma_mult: 1.15,
|
||||||
charisma_exp_mult: 1.15,
|
charisma_exp_mult: 1.15,
|
||||||
factions: [FactionNames.Silhouette],
|
factions: [FactionNames.Silhouette],
|
||||||
@ -526,9 +526,9 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
|||||||
moneyCost: 1.375e9,
|
moneyCost: 1.375e9,
|
||||||
info:
|
info:
|
||||||
"A cranial implant that greatly assists in the user's ability to analyze social situations " +
|
"A cranial implant that greatly assists in the user's ability to analyze social situations " +
|
||||||
"and interactions. The system uses a wide variety of factors such as facial expressions, body " +
|
"and interactions. The system uses a wide variety of factors such as facial expression, body " +
|
||||||
"language, and the voice tone, and inflection to determine the best course of action during social" +
|
"language, voice tone, and inflection to determine the best course of action during social " +
|
||||||
"situations. The implant also uses deep learning software to continuously learn new behavior" +
|
"situations. The implant also uses deep learning software to continuously learn new behavior " +
|
||||||
"patterns and how to best respond.",
|
"patterns and how to best respond.",
|
||||||
charisma_mult: 1.6,
|
charisma_mult: 1.6,
|
||||||
charisma_exp_mult: 1.6,
|
charisma_exp_mult: 1.6,
|
||||||
@ -988,7 +988,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"This is an additional installation that upgrades the functionality of the " +
|
"This is an additional installation that upgrades the functionality of the " +
|
||||||
"PC Direct-Neural Interface augmentation. When connected to a computer, " +
|
"PC Direct-Neural Interface augmentation. When connected to a computer, " +
|
||||||
"The Neural Network upgrade allows the user to use their own brain's " +
|
"the Neural Network upgrade allows the user to use their own brain's " +
|
||||||
"processing power to aid the computer in computational tasks.",
|
"processing power to aid the computer in computational tasks.",
|
||||||
prereqs: [AugmentationNames.PCDNI],
|
prereqs: [AugmentationNames.PCDNI],
|
||||||
company_rep_mult: 2,
|
company_rep_mult: 2,
|
||||||
@ -1172,7 +1172,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"A skin implant that reinforces the skin with highly-advanced synthetic cells. These " +
|
"A skin implant that reinforces the skin with highly-advanced synthetic cells. These " +
|
||||||
"cells, when powered, have a negative refractive index. As a result, they bend light " +
|
"cells, when powered, have a negative refractive index. As a result, they bend light " +
|
||||||
"around the skin, making the user much harder to see to the naked eye.",
|
"around the skin, making the user much harder to see with the naked eye.",
|
||||||
agility_mult: 1.05,
|
agility_mult: 1.05,
|
||||||
crime_money_mult: 1.1,
|
crime_money_mult: 1.1,
|
||||||
factions: [FactionNames.SlumSnakes, FactionNames.Tetrads],
|
factions: [FactionNames.SlumSnakes, FactionNames.Tetrads],
|
||||||
@ -1734,7 +1734,7 @@ export const initBladeburnerAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"An improved version of Vangelis, a synthetic symbiotic virus that is " +
|
"An improved version of Vangelis, a synthetic symbiotic virus that is " +
|
||||||
"injected into human brain tissue. On top of the benefits of the original " +
|
"injected into human brain tissue. On top of the benefits of the original " +
|
||||||
"virus, this also grants an accelerated healing factor and enhanced " +
|
"virus, this also grants accelerated healing and enhanced " +
|
||||||
"reflexes.",
|
"reflexes.",
|
||||||
prereqs: [AugmentationNames.VangelisVirus],
|
prereqs: [AugmentationNames.VangelisVirus],
|
||||||
defense_exp_mult: 1.1,
|
defense_exp_mult: 1.1,
|
||||||
@ -1930,7 +1930,7 @@ export const initChurchOfTheMachineGodAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"The next evolution is near, a coming together of man and machine. A synthesis greater than the birth of the human " +
|
"The next evolution is near, a coming together of man and machine. A synthesis greater than the birth of the human " +
|
||||||
"organism. Time spent with the gift has allowed for acclimatization of the invasive augment and the toll it takes upon " +
|
"organism. Time spent with the gift has allowed for acclimatization of the invasive augment and the toll it takes upon " +
|
||||||
"your frame granting lesser penalty of 5% to all stats.",
|
"your frame granting a 5% reduced penalty to all stats.",
|
||||||
prereqs: [AugmentationNames.StaneksGift1],
|
prereqs: [AugmentationNames.StaneksGift1],
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
hacking_chance_mult: 0.95 / 0.9,
|
hacking_chance_mult: 0.95 / 0.9,
|
||||||
@ -1969,7 +1969,7 @@ export const initChurchOfTheMachineGodAugmentations = (): Augmentation[] => [
|
|||||||
info:
|
info:
|
||||||
"The synthesis of human and machine is nothing to fear. It is our destiny. " +
|
"The synthesis of human and machine is nothing to fear. It is our destiny. " +
|
||||||
"You will become greater than the sum of our parts. As One. Embrace your gift " +
|
"You will become greater than the sum of our parts. As One. Embrace your gift " +
|
||||||
"fully and wholly free of it's accursed toll. Serenity brings tranquility the form " +
|
"fully and wholly free of it's accursed toll. Serenity brings tranquility in the form " +
|
||||||
"of no longer suffering a stat penalty. ",
|
"of no longer suffering a stat penalty. ",
|
||||||
prereqs: [AugmentationNames.StaneksGift2, AugmentationNames.StaneksGift1],
|
prereqs: [AugmentationNames.StaneksGift2, AugmentationNames.StaneksGift1],
|
||||||
isSpecial: true,
|
isSpecial: true,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* React component for displaying a single augmentation for purchase through
|
* React component for displaying a single augmentation for purchase through
|
||||||
* the faction UI
|
* the faction UI
|
||||||
*/
|
*/
|
||||||
import { CheckBox, CheckBoxOutlineBlank, CheckCircle, Info, NewReleases, Report } from "@mui/icons-material";
|
import { CheckBox, CheckBoxOutlineBlank, CheckCircle, NewReleases, Report } from "@mui/icons-material";
|
||||||
import { Box, Button, Container, Paper, Tooltip, Typography } from "@mui/material";
|
import { Box, Button, Container, Paper, Tooltip, Typography } from "@mui/material";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { Faction } from "../../Faction/Faction";
|
import { Faction } from "../../Faction/Faction";
|
||||||
@ -11,8 +11,8 @@ import { Settings } from "../../Settings/Settings";
|
|||||||
import { numeralWrapper } from "../../ui/numeralFormat";
|
import { numeralWrapper } from "../../ui/numeralFormat";
|
||||||
import { Augmentation } from "../Augmentation";
|
import { Augmentation } from "../Augmentation";
|
||||||
import { AugmentationNames } from "../data/AugmentationNames";
|
import { AugmentationNames } from "../data/AugmentationNames";
|
||||||
import { PurchaseAugmentationModal } from "./PurchaseAugmentationModal";
|
|
||||||
import { StaticAugmentations } from "../StaticAugmentations";
|
import { StaticAugmentations } from "../StaticAugmentations";
|
||||||
|
import { PurchaseAugmentationModal } from "./PurchaseAugmentationModal";
|
||||||
|
|
||||||
interface IPreReqsProps {
|
interface IPreReqsProps {
|
||||||
player: IPlayer;
|
player: IPlayer;
|
||||||
@ -42,11 +42,13 @@ const PreReqs = (props: IPreReqsProps): React.ReactElement => {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Typography
|
<Typography
|
||||||
variant="body2"
|
|
||||||
sx={{
|
sx={{
|
||||||
|
ml: 1,
|
||||||
|
fontSize: "0.9rem",
|
||||||
display: "flex",
|
display: "flex",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
color: hasPreReqs ? Settings.theme.successlight : Settings.theme.error,
|
color: hasPreReqs ? Settings.theme.successlight : Settings.theme.error,
|
||||||
|
gridArea: "prereqs",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{hasPreReqs ? (
|
{hasPreReqs ? (
|
||||||
@ -100,7 +102,10 @@ const Exclusive = (props: IExclusiveProps): React.ReactElement => {
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<NewReleases sx={{ ml: 1, color: Settings.theme.money, transform: "rotate(180deg)" }} />
|
<NewReleases
|
||||||
|
fontSize="small"
|
||||||
|
sx={{ ml: 1, color: Settings.theme.money, transform: "rotate(180deg)", gridArea: "exclusive" }}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -113,7 +118,9 @@ interface IReqProps {
|
|||||||
|
|
||||||
const Requirement = (props: IReqProps): React.ReactElement => {
|
const Requirement = (props: IReqProps): React.ReactElement => {
|
||||||
return (
|
return (
|
||||||
<Typography sx={{ display: "flex", alignItems: "center", color: props.color }}>
|
<Typography
|
||||||
|
sx={{ display: "flex", alignItems: "center", color: props.fulfilled ? props.color : Settings.theme.error }}
|
||||||
|
>
|
||||||
{props.fulfilled ? <CheckBox sx={{ mr: 1 }} /> : <CheckBoxOutlineBlank sx={{ mr: 1 }} />}
|
{props.fulfilled ? <CheckBox sx={{ mr: 1 }} /> : <CheckBoxOutlineBlank sx={{ mr: 1 }} />}
|
||||||
{props.value}
|
{props.value}
|
||||||
</Typography>
|
</Typography>
|
||||||
@ -138,7 +145,7 @@ export const PurchasableAugmentations = (props: IPurchasableAugsProps): React.Re
|
|||||||
<Container
|
<Container
|
||||||
maxWidth="lg"
|
maxWidth="lg"
|
||||||
disableGutters
|
disableGutters
|
||||||
sx={{ mx: 0, display: "grid", gridTemplateColumns: "repeat(1, 1fr)", gap: 1 }}
|
sx={{ mx: 0, display: "grid", gridTemplateColumns: "repeat(1, 1fr)", gap: 0.75 }}
|
||||||
>
|
>
|
||||||
{props.augNames.map((augName: string) => (
|
{props.augNames.map((augName: string) => (
|
||||||
<PurchasableAugmentation key={augName} parent={props} augName={augName} owned={false} />
|
<PurchasableAugmentation key={augName} parent={props} augName={augName} owned={false} />
|
||||||
@ -176,11 +183,12 @@ export function PurchasableAugmentation(props: IPurchasableAugProps): React.Reac
|
|||||||
return (
|
return (
|
||||||
<Paper
|
<Paper
|
||||||
sx={{
|
sx={{
|
||||||
p: 1,
|
p: 0.5,
|
||||||
display: "grid",
|
display: "grid",
|
||||||
gridTemplateColumns: "minmax(0, 4fr) 1fr",
|
gridTemplateColumns: "minmax(0, 4fr) 1.4fr",
|
||||||
gap: 1,
|
gap: 1,
|
||||||
opacity: props.owned ? 0.75 : 1,
|
opacity: props.owned ? 0.75 : 1,
|
||||||
|
minWidth: "1100px",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<>
|
<>
|
||||||
@ -192,13 +200,13 @@ export function PurchasableAugmentation(props: IPurchasableAugProps): React.Reac
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
disabled={!props.parent.canPurchase(props.parent.player, aug) || props.owned}
|
disabled={!props.parent.canPurchase(props.parent.player, aug) || props.owned}
|
||||||
sx={{ width: "48px", height: "48px", float: "left", clear: "none", mr: 1 }}
|
sx={{ width: "48px", height: "36px", float: "left", clear: "none", mr: 1 }}
|
||||||
>
|
>
|
||||||
{props.owned ? "Owned" : "Buy"}
|
{props.owned ? "Owned" : "Buy"}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Box sx={{ maxWidth: props.owned ? "100%" : "85%" }}>
|
<Box sx={{ maxWidth: props.owned ? "100%" : "85%" }}>
|
||||||
<Box sx={{ display: "flex", alignItems: "center" }}>
|
<Box sx={{ display: "grid", alignItems: "center", gridTemplateAreas: `"title exclusive prereqs"` }}>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
title={
|
title={
|
||||||
<>
|
<>
|
||||||
@ -211,11 +219,9 @@ export function PurchasableAugmentation(props: IPurchasableAugProps): React.Reac
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Info sx={{ mr: 1 }} color="info" />
|
|
||||||
</Tooltip>
|
|
||||||
<Typography
|
<Typography
|
||||||
variant="h6"
|
|
||||||
sx={{
|
sx={{
|
||||||
|
gridArea: "title",
|
||||||
textOverflow: "ellipsis",
|
textOverflow: "ellipsis",
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
@ -228,17 +234,18 @@ export function PurchasableAugmentation(props: IPurchasableAugProps): React.Reac
|
|||||||
{aug.name}
|
{aug.name}
|
||||||
{aug.name === AugmentationNames.NeuroFluxGovernor && ` - Level ${aug.getLevel(props.parent.player)}`}
|
{aug.name === AugmentationNames.NeuroFluxGovernor && ` - Level ${aug.getLevel(props.parent.player)}`}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
{aug.factions.length === 1 && !props.parent.sleeveAugs && (
|
{aug.factions.length === 1 && !props.parent.sleeveAugs && (
|
||||||
<Exclusive player={props.parent.player} aug={aug} />
|
<Exclusive player={props.parent.player} aug={aug} />
|
||||||
)}
|
)}
|
||||||
</Box>
|
|
||||||
|
|
||||||
{aug.prereqs.length > 0 && !props.parent.sleeveAugs && <PreReqs player={props.parent.player} aug={aug} />}
|
{aug.prereqs.length > 0 && !props.parent.sleeveAugs && <PreReqs player={props.parent.player} aug={aug} />}
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
</Box>
|
||||||
|
|
||||||
{props.owned || (
|
{props.owned || (
|
||||||
<Box sx={{ display: "grid", alignItems: "center", justifyItems: "left" }}>
|
<Box sx={{ display: "grid", alignItems: "center", gridTemplateColumns: "1fr 1fr" }}>
|
||||||
<Requirement
|
<Requirement
|
||||||
fulfilled={cost === 0 || props.parent.player.money > cost}
|
fulfilled={cost === 0 || props.parent.player.money > cost}
|
||||||
value={numeralWrapper.formatMoney(cost)}
|
value={numeralWrapper.formatMoney(cost)}
|
||||||
|
@ -287,6 +287,8 @@ export class Bladeburner implements IBladeburner {
|
|||||||
|
|
||||||
resetAction(): void {
|
resetAction(): void {
|
||||||
this.action = new ActionIdentifier({ type: ActionTypes.Idle });
|
this.action = new ActionIdentifier({ type: ActionTypes.Idle });
|
||||||
|
this.actionTimeCurrent = 0;
|
||||||
|
this.actionTimeToComplete = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
clearConsole(): void {
|
clearConsole(): void {
|
||||||
|
@ -155,7 +155,7 @@ function getRandomReward(): ICodingContractReward {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getRandomServer(): BaseServer {
|
function getRandomServer(): BaseServer {
|
||||||
const servers = GetAllServers();
|
const servers = GetAllServers().filter((server: BaseServer) => server.serversOnNetwork.length !== 0);
|
||||||
let randIndex = getRandomInt(0, servers.length - 1);
|
let randIndex = getRandomInt(0, servers.length - 1);
|
||||||
let randServer = servers[randIndex];
|
let randServer = servers[randIndex];
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ export function Overview({ rerender }: IProps): React.ReactElement {
|
|||||||
["Total Funds:", <Money money={corp.funds} />],
|
["Total Funds:", <Money money={corp.funds} />],
|
||||||
["Total Revenue:", <MoneyRate money={corp.revenue} />],
|
["Total Revenue:", <MoneyRate money={corp.revenue} />],
|
||||||
["Total Expenses:", <MoneyRate money={corp.expenses} />],
|
["Total Expenses:", <MoneyRate money={corp.expenses} />],
|
||||||
|
["Total Profit:", <MoneyRate money={corp.revenue - corp.expenses} />],
|
||||||
["Publicly Traded:", corp.public ? "Yes" : "No"],
|
["Publicly Traded:", corp.public ? "Yes" : "No"],
|
||||||
["Owned Stock Shares:", numeralWrapper.format(corp.numShares, "0.000a")],
|
["Owned Stock Shares:", numeralWrapper.format(corp.numShares, "0.000a")],
|
||||||
["Stock Price:", corp.public ? <Money money={corp.sharePrice} /> : "N/A"],
|
["Stock Price:", corp.public ? <Money money={corp.sharePrice} /> : "N/A"],
|
||||||
|
@ -44,8 +44,8 @@ export function Victory(props: IProps): React.ReactElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function trade(): void {
|
function trade(): void {
|
||||||
handleInfiltrators();
|
|
||||||
if (faction === "none") return;
|
if (faction === "none") return;
|
||||||
|
handleInfiltrators();
|
||||||
Factions[faction].playerReputation += repGain;
|
Factions[faction].playerReputation += repGain;
|
||||||
quitInfiltration();
|
quitInfiltration();
|
||||||
}
|
}
|
||||||
|
@ -226,6 +226,7 @@ const bladeburner: IMap<any> = {
|
|||||||
stopBladeburnerAction: RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
stopBladeburnerAction: RamCostConstants.ScriptBladeburnerApiBaseRamCost / 2,
|
||||||
getCurrentAction: RamCostConstants.ScriptBladeburnerApiBaseRamCost / 4,
|
getCurrentAction: RamCostConstants.ScriptBladeburnerApiBaseRamCost / 4,
|
||||||
getActionTime: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
getActionTime: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||||
|
getActionCurrentTime: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||||
getActionEstimatedSuccessChance: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
getActionEstimatedSuccessChance: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||||
getActionRepGain: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
getActionRepGain: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||||
getActionCountRemaining: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
getActionCountRemaining: RamCostConstants.ScriptBladeburnerApiBaseRamCost,
|
||||||
@ -356,6 +357,7 @@ export const RamCosts: IMap<any> = {
|
|||||||
print: 0,
|
print: 0,
|
||||||
printf: 0,
|
printf: 0,
|
||||||
tprint: 0,
|
tprint: 0,
|
||||||
|
tprintf: 0,
|
||||||
clearLog: 0,
|
clearLog: 0,
|
||||||
disableLog: 0,
|
disableLog: 0,
|
||||||
enableLog: 0,
|
enableLog: 0,
|
||||||
|
@ -137,6 +137,19 @@ export function NetscriptBladeburner(player: IPlayer, workerScript: WorkerScript
|
|||||||
throw ctx.makeRuntimeErrorMsg(e);
|
throw ctx.makeRuntimeErrorMsg(e);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
getActionCurrentTime: (ctx: NetscriptContext) => (): number => {
|
||||||
|
checkBladeburnerAccess(ctx);
|
||||||
|
const bladeburner = player.bladeburner;
|
||||||
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
|
try {
|
||||||
|
const timecomputed =
|
||||||
|
Math.min(bladeburner.actionTimeCurrent + bladeburner.actionTimeOverflow, bladeburner.actionTimeToComplete) *
|
||||||
|
1000;
|
||||||
|
return timecomputed;
|
||||||
|
} catch (e: any) {
|
||||||
|
throw ctx.makeRuntimeErrorMsg(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
getActionEstimatedSuccessChance:
|
getActionEstimatedSuccessChance:
|
||||||
(ctx: NetscriptContext) =>
|
(ctx: NetscriptContext) =>
|
||||||
(_type: unknown, _name: unknown): [number, number] => {
|
(_type: unknown, _name: unknown): [number, number] => {
|
||||||
|
@ -190,6 +190,7 @@ export function NetscriptSleeve(player: IPlayer): InternalAPI<ISleeve> {
|
|||||||
location: sl.currentTaskLocation,
|
location: sl.currentTaskLocation,
|
||||||
gymStatType: sl.gymStatType,
|
gymStatType: sl.gymStatType,
|
||||||
factionWorkType: FactionWorkType[sl.factionWorkType],
|
factionWorkType: FactionWorkType[sl.factionWorkType],
|
||||||
|
className: sl.className,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
getInformation:
|
getInformation:
|
||||||
|
15
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
15
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
@ -1110,6 +1110,8 @@ export interface SleeveTask {
|
|||||||
gymStatType: string;
|
gymStatType: string;
|
||||||
/** Faction work type being performed, if any */
|
/** Faction work type being performed, if any */
|
||||||
factionWorkType: string;
|
factionWorkType: string;
|
||||||
|
/** Class being taken at university, if any */
|
||||||
|
className: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2884,7 +2886,7 @@ export interface Bladeburner {
|
|||||||
* @remarks
|
* @remarks
|
||||||
* RAM cost: 4 GB
|
* RAM cost: 4 GB
|
||||||
*
|
*
|
||||||
* Returns the number of seconds it takes to complete the specified action
|
* Returns the number of milliseconds it takes to complete the specified action
|
||||||
*
|
*
|
||||||
* @param type - Type of action.
|
* @param type - Type of action.
|
||||||
* @param name - Name of action. Must be an exact match.
|
* @param name - Name of action. Must be an exact match.
|
||||||
@ -2892,6 +2894,17 @@ export interface Bladeburner {
|
|||||||
*/
|
*/
|
||||||
getActionTime(type: string, name: string): number;
|
getActionTime(type: string, name: string): number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the time elapsed on current action.
|
||||||
|
* @remarks
|
||||||
|
* RAM cost: 4 GB
|
||||||
|
*
|
||||||
|
* Returns the number of milliseconds already spent on the current action.
|
||||||
|
*
|
||||||
|
* @returns Number of milliseconds already spent on the current action.
|
||||||
|
*/
|
||||||
|
getActionCurrentTime(): number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get estimate success chance of an action.
|
* Get estimate success chance of an action.
|
||||||
* @remarks
|
* @remarks
|
||||||
|
@ -73,6 +73,7 @@ import { weaken } from "./commands/weaken";
|
|||||||
import { wget } from "./commands/wget";
|
import { wget } from "./commands/wget";
|
||||||
import { hash } from "../hash/hash";
|
import { hash } from "../hash/hash";
|
||||||
import { apr1 } from "./commands/apr1";
|
import { apr1 } from "./commands/apr1";
|
||||||
|
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
||||||
|
|
||||||
export class Terminal implements ITerminal {
|
export class Terminal implements ITerminal {
|
||||||
// Flags to determine whether the player is currently running a hack or an analyze
|
// Flags to determine whether the player is currently running a hack or an analyze
|
||||||
@ -204,7 +205,7 @@ export class Terminal implements ITerminal {
|
|||||||
router.toBitVerse(false, false);
|
router.toBitVerse(false, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let moneyGained = calculatePercentMoneyHacked(server, player);
|
let moneyGained = calculatePercentMoneyHacked(server, player) * BitNodeMultipliers.ManualHackMoney;
|
||||||
moneyGained = Math.floor(server.moneyAvailable * moneyGained);
|
moneyGained = Math.floor(server.moneyAvailable * moneyGained);
|
||||||
|
|
||||||
if (moneyGained <= 0) {
|
if (moneyGained <= 0) {
|
||||||
|
@ -272,20 +272,19 @@ const Engine: {
|
|||||||
const numCyclesOffline = Math.floor(timeOffline / CONSTANTS._idleSpeed);
|
const numCyclesOffline = Math.floor(timeOffline / CONSTANTS._idleSpeed);
|
||||||
|
|
||||||
// Generate coding contracts
|
// Generate coding contracts
|
||||||
// let numContracts = 0;
|
let numContracts = 0;
|
||||||
// if (numCyclesOffline < 3000 * 100) {
|
if (numCyclesOffline < 3000 * 100) {
|
||||||
// // if we have less than 100 rolls, just roll them exactly.
|
// if we have less than 100 rolls, just roll them exactly.
|
||||||
// for (let i = 0; i < numCyclesOffline / 3000; i++) {
|
for (let i = 0; i < numCyclesOffline / 3000; i++) {
|
||||||
// if (Math.random() < 0.25) numContracts++;
|
if (Math.random() < 0.25) numContracts++;
|
||||||
// }
|
}
|
||||||
// } else {
|
} else {
|
||||||
// // just average it.
|
// just average it.
|
||||||
// numContracts = (numCyclesOffline / 3000) * 0.25;
|
numContracts = (numCyclesOffline / 3000) * 0.25;
|
||||||
// }
|
}
|
||||||
// console.log(`${numCyclesOffline} ${numContracts}`);
|
for (let i = 0; i < numContracts; i++) {
|
||||||
// for (let i = 0; i < numContracts; i++) {
|
generateRandomContract();
|
||||||
// generateRandomContract();
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
let offlineReputation = 0;
|
let offlineReputation = 0;
|
||||||
const offlineHackingIncome = (Player.moneySourceA.hacking / Player.playtimeSinceLastAug) * timeOffline * 0.75;
|
const offlineHackingIncome = (Player.moneySourceA.hacking / Player.playtimeSinceLastAug) * timeOffline * 0.75;
|
||||||
|
@ -103,6 +103,7 @@ const useStyles = makeStyles((_theme: Theme) =>
|
|||||||
scrollbarWidth: "auto",
|
scrollbarWidth: "auto",
|
||||||
flexDirection: "column-reverse",
|
flexDirection: "column-reverse",
|
||||||
whiteSpace: "pre-wrap",
|
whiteSpace: "pre-wrap",
|
||||||
|
wordWrap: "break-word",
|
||||||
},
|
},
|
||||||
titleButton: {
|
titleButton: {
|
||||||
padding: "1px 0",
|
padding: "1px 0",
|
||||||
|
Loading…
Reference in New Issue
Block a user