mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-29 19:13:49 +01:00
commit
3158c18129
28
dist/vendor.bundle.js
vendored
28
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vendor.bundle.js.map
vendored
2
dist/vendor.bundle.js.map
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -97,7 +97,10 @@ export function updateAugmentationCosts(): void {
|
|||||||
if (augmentationToUpdate.name === AugmentationNames.NeuroFluxGovernor) {
|
if (augmentationToUpdate.name === AugmentationNames.NeuroFluxGovernor) {
|
||||||
updateNeuroFluxGovernorCosts(augmentationToUpdate);
|
updateNeuroFluxGovernorCosts(augmentationToUpdate);
|
||||||
} else {
|
} else {
|
||||||
augmentationToUpdate.baseCost = augmentationToUpdate.startingCost * getGenericAugmentationPriceMultiplier();
|
augmentationToUpdate.baseCost =
|
||||||
|
augmentationToUpdate.startingCost *
|
||||||
|
getGenericAugmentationPriceMultiplier() *
|
||||||
|
BitNodeMultipliers.AugmentationMoneyCost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,7 +287,7 @@ export const CONSTANTS: {
|
|||||||
TotalNumBitNodes: 24,
|
TotalNumBitNodes: 24,
|
||||||
|
|
||||||
LatestUpdate: `
|
LatestUpdate: `
|
||||||
v1.6.0 - 2022-03-29 Grafting
|
v1.6.1 - 2022-03-29 Grafting
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
** Vitalife secret lab **
|
** Vitalife secret lab **
|
||||||
|
@ -353,7 +353,8 @@ export function NetscriptBladeburner(
|
|||||||
checkBladeburnerCity("switchCity", cityName);
|
checkBladeburnerCity("switchCity", cityName);
|
||||||
const bladeburner = player.bladeburner;
|
const bladeburner = player.bladeburner;
|
||||||
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
if (bladeburner === null) throw new Error("Should not be called without Bladeburner");
|
||||||
return bladeburner.city === cityName;
|
bladeburner.city = cityName;
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
getStamina: function (): [number, number] {
|
getStamina: function (): [number, number] {
|
||||||
helper.updateDynamicRam("getStamina", getRamCost(player, "bladeburner", "getStamina"));
|
helper.updateDynamicRam("getStamina", getRamCost(player, "bladeburner", "getStamina"));
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { CityName } from "../Locations/data/CityNames";
|
|
||||||
import { Augmentations } from "../Augmentation/Augmentations";
|
import { Augmentations } from "../Augmentation/Augmentations";
|
||||||
|
import { hasAugmentationPrereqs } from "../Faction/FactionHelpers";
|
||||||
|
import { CityName } from "../Locations/data/CityNames";
|
||||||
import { getRamCost } from "../Netscript/RamCostGenerator";
|
import { getRamCost } from "../Netscript/RamCostGenerator";
|
||||||
import { WorkerScript } from "../Netscript/WorkerScript";
|
import { WorkerScript } from "../Netscript/WorkerScript";
|
||||||
import { GraftableAugmentation } from "../PersonObjects/Grafting/GraftableAugmentation";
|
import { GraftableAugmentation } from "../PersonObjects/Grafting/GraftableAugmentation";
|
||||||
@ -70,6 +71,11 @@ export function NetscriptGrafting(player: IPlayer, workerScript: WorkerScript, h
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasAugmentationPrereqs(craftableAug.augmentation)) {
|
||||||
|
workerScript.log("grafting.graftAugmentation", () => `You don't have the pre-requisites for ${augName}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
player.loseMoney(craftableAug.cost, "augmentations");
|
player.loseMoney(craftableAug.cost, "augmentations");
|
||||||
player.startGraftAugmentationWork(augName, craftableAug.time);
|
player.startGraftAugmentationWork(augName, craftableAug.time);
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ export async function compile(player: IPlayer, script: Script, scripts: Script[]
|
|||||||
const uurls = _getScriptUrls(script, scripts, []);
|
const uurls = _getScriptUrls(script, scripts, []);
|
||||||
const url = uurls[uurls.length - 1].url;
|
const url = uurls[uurls.length - 1].url;
|
||||||
if (script.url && script.url !== url) {
|
if (script.url && script.url !== url) {
|
||||||
|
URL.revokeObjectURL(script.url);
|
||||||
// Thoughts: Should we be revoking any URLs here?
|
// Thoughts: Should we be revoking any URLs here?
|
||||||
// If a script is modified repeatedly between two states,
|
// If a script is modified repeatedly between two states,
|
||||||
// we could reuse the blob at a later time.
|
// we could reuse the blob at a later time.
|
||||||
@ -42,8 +43,9 @@ export async function compile(player: IPlayer, script: Script, scripts: Script[]
|
|||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
script.url = url;
|
if (script.dependencies.length > 0) script.dependencies.forEach((dep) => URL.revokeObjectURL(dep.url));
|
||||||
script.module = new Promise((resolve) => resolve(eval("import(url)")));
|
script.url = uurls[uurls.length - 1].url;
|
||||||
|
script.module = new Promise((resolve) => resolve(eval("import(uurls[uurls.length - 1].url)")));
|
||||||
script.dependencies = uurls;
|
script.dependencies = uurls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,22 +1,20 @@
|
|||||||
|
import { Construction, CheckBox, CheckBoxOutlineBlank } from "@mui/icons-material";
|
||||||
|
import { Box, Button, Container, List, ListItemButton, Paper, Typography } from "@mui/material";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
|
import { Augmentation } from "../../../Augmentation/Augmentation";
|
||||||
import { Typography, Container, Box, Paper, List, ListItemButton, Button } from "@mui/material";
|
|
||||||
import { Construction } from "@mui/icons-material";
|
|
||||||
|
|
||||||
import { use } from "../../../ui/Context";
|
|
||||||
import { Money } from "../../../ui/React/Money";
|
|
||||||
import { ConfirmationModal } from "../../../ui/React/ConfirmationModal";
|
|
||||||
import { Augmentations } from "../../../Augmentation/Augmentations";
|
import { Augmentations } from "../../../Augmentation/Augmentations";
|
||||||
import { AugmentationNames } from "../../../Augmentation/data/AugmentationNames";
|
import { AugmentationNames } from "../../../Augmentation/data/AugmentationNames";
|
||||||
import { Settings } from "../../../Settings/Settings";
|
import { CONSTANTS } from "../../../Constants";
|
||||||
import { IMap } from "../../../types";
|
import { hasAugmentationPrereqs } from "../../../Faction/FactionHelpers";
|
||||||
import { convertTimeMsToTimeElapsedString, formatNumber } from "../../../utils/StringHelperFunctions";
|
|
||||||
import { LocationName } from "../../../Locations/data/LocationNames";
|
import { LocationName } from "../../../Locations/data/LocationNames";
|
||||||
import { Locations } from "../../../Locations/Locations";
|
import { Locations } from "../../../Locations/Locations";
|
||||||
import { CONSTANTS } from "../../../Constants";
|
import { Settings } from "../../../Settings/Settings";
|
||||||
|
import { IMap } from "../../../types";
|
||||||
|
import { use } from "../../../ui/Context";
|
||||||
|
import { ConfirmationModal } from "../../../ui/React/ConfirmationModal";
|
||||||
|
import { Money } from "../../../ui/React/Money";
|
||||||
|
import { convertTimeMsToTimeElapsedString, formatNumber } from "../../../utils/StringHelperFunctions";
|
||||||
import { IPlayer } from "../../IPlayer";
|
import { IPlayer } from "../../IPlayer";
|
||||||
|
|
||||||
import { GraftableAugmentation } from "../GraftableAugmentation";
|
import { GraftableAugmentation } from "../GraftableAugmentation";
|
||||||
|
|
||||||
const GraftableAugmentations: IMap<GraftableAugmentation> = {};
|
const GraftableAugmentations: IMap<GraftableAugmentation> = {};
|
||||||
@ -33,6 +31,36 @@ export const getAvailableAugs = (player: IPlayer): string[] => {
|
|||||||
return augs.filter((augmentation: string) => !player.hasAugmentation(augmentation));
|
return augs.filter((augmentation: string) => !player.hasAugmentation(augmentation));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const canGraft = (player: IPlayer, aug: GraftableAugmentation): boolean => {
|
||||||
|
if (player.money < aug.cost) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return hasAugmentationPrereqs(aug.augmentation);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface IProps {
|
||||||
|
player: IPlayer;
|
||||||
|
aug: Augmentation;
|
||||||
|
}
|
||||||
|
|
||||||
|
const AugPreReqsChecklist = (props: IProps): React.ReactElement => {
|
||||||
|
const aug = props.aug,
|
||||||
|
player = props.player;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Typography color={Settings.theme.money}>
|
||||||
|
<b>Pre-Requisites:</b>
|
||||||
|
<br />
|
||||||
|
{aug.prereqs.map((preAug) => (
|
||||||
|
<span style={{ display: "flex", alignItems: "center" }}>
|
||||||
|
{player.hasAugmentation(preAug) ? <CheckBox sx={{ mr: 1 }} /> : <CheckBoxOutlineBlank sx={{ mr: 1 }} />}
|
||||||
|
{preAug}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</Typography>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const GraftingRoot = (): React.ReactElement => {
|
export const GraftingRoot = (): React.ReactElement => {
|
||||||
const player = use.Player();
|
const player = use.Player();
|
||||||
const router = use.Router();
|
const router = use.Router();
|
||||||
@ -80,7 +108,7 @@ export const GraftingRoot = (): React.ReactElement => {
|
|||||||
<Button
|
<Button
|
||||||
onClick={() => setGraftOpen(true)}
|
onClick={() => setGraftOpen(true)}
|
||||||
sx={{ width: "100%" }}
|
sx={{ width: "100%" }}
|
||||||
disabled={player.money < GraftableAugmentations[selectedAug].cost}
|
disabled={!canGraft(player, GraftableAugmentations[selectedAug])}
|
||||||
>
|
>
|
||||||
Graft Augmentation (
|
Graft Augmentation (
|
||||||
<Typography>
|
<Typography>
|
||||||
@ -115,6 +143,11 @@ export const GraftingRoot = (): React.ReactElement => {
|
|||||||
)}
|
)}
|
||||||
{/* Use formula so the displayed creation time is accurate to player bonus */}
|
{/* Use formula so the displayed creation time is accurate to player bonus */}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
{Augmentations[selectedAug].prereqs.length > 0 && (
|
||||||
|
<AugPreReqsChecklist player={player} aug={Augmentations[selectedAug]} />
|
||||||
|
)}
|
||||||
|
|
||||||
|
<br />
|
||||||
<Typography sx={{ maxHeight: 305, overflowY: "scroll" }}>
|
<Typography sx={{ maxHeight: 305, overflowY: "scroll" }}>
|
||||||
{(() => {
|
{(() => {
|
||||||
const aug = Augmentations[selectedAug];
|
const aug = Augmentations[selectedAug];
|
||||||
|
Loading…
Reference in New Issue
Block a user