few bugfix

This commit is contained in:
Olivier Gagnon 2021-12-13 18:44:52 -05:00
parent 7b8e486e3a
commit 1b42b51e5f
9 changed files with 106 additions and 11 deletions

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="256"
height="256"
viewBox="0 0 67.733332 67.733335"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="BN13+.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
inkscape:zoom="2.326908"
inkscape:cx="86.81048"
inkscape:cy="111.09163"
inkscape:window-width="2423"
inkscape:window-height="1341"
inkscape:window-x="146"
inkscape:window-y="29"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid824" />
</sodipodi:namedview>
<defs
id="defs2" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="background">
<rect
style="fill:#000000;stroke:none;stroke-width:7.02745"
id="rect849"
width="67.73333"
height="67.73333"
x="0"
y="0" />
</g>
<g
inkscape:label="main"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-weight:bold;font-size:16.0737px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;fill-opacity:1;stroke-width:0.215272"
x="34.276661"
y="40.084541"
id="text8876"><tspan
sodipodi:role="line"
style="text-align:center;text-anchor:middle;fill:#00ff00;fill-opacity:1;stroke-width:0.215272"
x="34.276661"
y="40.084541"
id="tspan20241">BN13+</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

@ -341,6 +341,13 @@ const achievements: Achievement[] = [
), ),
}, },
{ ID: "CHALLENGE_BN12", Condition: () => Player.sourceFileLvl(12) >= 50 }, { ID: "CHALLENGE_BN12", Condition: () => Player.sourceFileLvl(12) >= 50 },
{
ID: "CHALLENGE_BN13",
Condition: () =>
Player.bitNodeN === 13 &&
bitNodeFinishedState() &&
!Player.augmentations.some((a) => a.name === AugmentationNames.StaneksGift1),
},
{ ID: "BYPASS", Condition: () => Player.exploits.includes(Exploit.Bypass) }, { ID: "BYPASS", Condition: () => Player.exploits.includes(Exploit.Bypass) },
{ ID: "PROTOTYPETAMPERING", Condition: () => Player.exploits.includes(Exploit.PrototypeTampering) }, { ID: "PROTOTYPETAMPERING", Condition: () => Player.exploits.includes(Exploit.PrototypeTampering) },
{ ID: "UNCLICKABLE", Condition: () => Player.exploits.includes(Exploit.Unclickable) }, { ID: "UNCLICKABLE", Condition: () => Player.exploits.includes(Exploit.Unclickable) },

@ -24,10 +24,15 @@ interface IProps {
rerender: () => void; rerender: () => void;
} }
const serversMap: { [key: string]: string } = {};
export function HacknetUpgradeElem(props: IProps): React.ReactElement { export function HacknetUpgradeElem(props: IProps): React.ReactElement {
const [selectedServer, setSelectedServer] = useState("ecorp"); const [selectedServer, setSelectedServer] = useState(
serversMap[props.upg.name] ? serversMap[props.upg.name] : "ecorp",
);
function changeTargetServer(event: SelectChangeEvent<string>): void { function changeTargetServer(event: SelectChangeEvent<string>): void {
setSelectedServer(event.target.value); setSelectedServer(event.target.value);
serversMap[props.upg.name] = event.target.value;
} }
function purchase(): void { function purchase(): void {

@ -114,6 +114,7 @@ const ITutorial: {
function iTutorialStart(): void { function iTutorialStart(): void {
ITutorial.isRunning = true; ITutorial.isRunning = true;
ITutorial.currStep = iTutorialSteps.Start;
} }
// Go to the next step and evaluate it // Go to the next step and evaluate it

@ -507,16 +507,15 @@ export class Terminal implements ITerminal {
if (s.hasAdminRights) { if (s.hasAdminRights) {
c = "YES"; c = "YES";
} }
let out = `${dashes}Root Access: ${c}${ this.print(
!isHacknet ? ", Required hacking skill: " + (s as any).requiredHackingSkill : "" `${dashes}Root Access: ${c}${!isHacknet ? ", Required hacking skill: " + (s as any).requiredHackingSkill : ""}`,
}`; );
if (s.hasOwnProperty("numOpenPortsRequired")) { if (s.hasOwnProperty("numOpenPortsRequired")) {
out += "\n" + dashes + "Number of open ports required to NUKE: " + (s as any).numOpenPortsRequired; this.print(dashes + "Number of open ports required to NUKE: " + (s as any).numOpenPortsRequired);
} }
out += "\n" + dashes + "RAM: " + numeralWrapper.formatRAM(s.maxRam); this.print(dashes + "RAM: " + numeralWrapper.formatRAM(s.maxRam));
out += "\n" + " "; this.print(" ");
this.print(out);
} }
} }

@ -3,11 +3,18 @@ import React from "react";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
import Link from "@mui/material/Link"; import Link from "@mui/material/Link";
import Box from "@mui/material/Box"; import Box from "@mui/material/Box";
export function TutorialRoot(): React.ReactElement { import Button from "@mui/material/Button";
interface IProps {
reactivateTutorial: () => void;
}
export function TutorialRoot(props: IProps): React.ReactElement {
return ( return (
<> <>
<Typography variant="h4">Tutorial / Documentation</Typography> <Typography variant="h4">Tutorial / Documentation</Typography>
<Box m={2}> <Box m={2}>
<Button onClick={props.reactivateTutorial}>Soft reset and Restart tutorial</Button>
<Link <Link
color="primary" color="primary"
target="_blank" target="_blank"

@ -9,7 +9,7 @@ import { onExport } from "../ExportBonus";
import { LocationName } from "../Locations/data/LocationNames"; import { LocationName } from "../Locations/data/LocationNames";
import { Location } from "../Locations/Location"; import { Location } from "../Locations/Location";
import { Locations } from "../Locations/Locations"; import { Locations } from "../Locations/Locations";
import { ITutorial } from "../InteractiveTutorial"; import { ITutorial, iTutorialStart } from "../InteractiveTutorial";
import { InteractiveTutorialRoot } from "./InteractiveTutorial/InteractiveTutorialRoot"; import { InteractiveTutorialRoot } from "./InteractiveTutorial/InteractiveTutorialRoot";
import { ITutorialEvents } from "./InteractiveTutorial/ITutorialEvents"; import { ITutorialEvents } from "./InteractiveTutorial/ITutorialEvents";
@ -349,7 +349,13 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme
) : page === Page.Milestones ? ( ) : page === Page.Milestones ? (
<MilestonesRoot player={player} /> <MilestonesRoot player={player} />
) : page === Page.Tutorial ? ( ) : page === Page.Tutorial ? (
<TutorialRoot /> <TutorialRoot
reactivateTutorial={() => {
prestigeAugmentation();
Router.toTerminal();
iTutorialStart();
}}
/>
) : page === Page.DevMenu ? ( ) : page === Page.DevMenu ? (
<DevMenuRoot player={player} engine={engine} router={Router} /> <DevMenuRoot player={player} engine={engine} router={Router} />
) : page === Page.Gang ? ( ) : page === Page.Gang ? (