2022-01-10 17:29:58 +01:00
import React , { useEffect , useState } from "react" ;
2023-06-26 04:53:35 +02:00
import {
Accordion ,
AccordionSummary ,
AccordionDetails ,
Button ,
MenuItem ,
Select ,
SelectChangeEvent ,
TextField ,
Typography ,
} from "@mui/material" ;
2021-09-17 01:23:03 +02:00
import ExpandMoreIcon from "@mui/icons-material/ExpandMore" ;
2023-06-26 04:53:35 +02:00
2022-10-10 00:42:14 +02:00
import { Player } from "@player" ;
2023-06-26 04:53:35 +02:00
import { FactionName } from "@enums" ;
import { Money } from "../../ui/React/Money" ;
2022-09-06 15:07:12 +02:00
import { Router } from "../../ui/GameRoot" ;
2023-06-26 10:24:37 +02:00
import { Page } from "../../ui/Router" ;
2022-04-01 14:54:07 +02:00
import { Bladeburner } from "../../Bladeburner/Bladeburner" ;
import { GangConstants } from "../../Gang/data/Constants" ;
2022-04-13 08:53:22 +02:00
import { checkForMessagesToSend } from "../../Message/MessageHelpers" ;
2023-02-02 16:09:38 +01:00
import { ThemeEvents } from "../../Themes/ui/Theme" ;
2023-06-26 04:53:35 +02:00
import { getEnumHelper } from "../../utils/EnumHelper" ;
2021-09-14 02:37:35 +02:00
2022-09-06 15:07:12 +02:00
export function General ( ) : React . ReactElement {
2022-01-10 17:29:58 +01:00
const [ error , setError ] = useState ( false ) ;
2022-04-01 14:54:07 +02:00
const [ corporationName , setCorporationName ] = useState ( "" ) ;
2023-06-26 04:53:35 +02:00
const [ gangFaction , setGangFaction ] = useState ( FactionName . SlumSnakes ) ;
2023-02-02 16:09:38 +01:00
const [ devMoney , setDevMoney ] = useState ( 0 ) ;
2021-09-14 02:37:35 +02:00
2023-02-02 16:09:38 +01:00
// Money functions
const addCustomMoney = ( ) = > ! Number . isNaN ( devMoney ) && Player . gainMoney ( devMoney , "other" ) ;
const addMoney = ( n : number ) = > ( ) = > Player . gainMoney ( n , "other" ) ;
const setMoney = ( n : number ) = > ( ) = > ( Player . money = Number ( n ) ) ;
2021-09-14 02:37:35 +02:00
2023-02-02 16:09:38 +01:00
// Ram functions
const upgradeRam = ( ) = > ( Player . getHomeComputer ( ) . maxRam *= 2 ) ;
2021-09-14 02:37:35 +02:00
2023-02-02 16:09:38 +01:00
// Node-clearing functions
2023-06-26 10:24:37 +02:00
const quickB1tFlum3 = ( ) = > Router . toPage ( Page . BitVerse , { flume : true , quick : true } ) ;
const b1tflum3 = ( ) = > Router . toPage ( Page . BitVerse , { flume : true , quick : false } ) ;
const quickHackW0r1dD43m0n = ( ) = > Router . toPage ( Page . BitVerse , { flume : false , quick : true } ) ;
const hackW0r1dD43m0n = ( ) = > Router . toPage ( Page . BitVerse , { flume : false , quick : false } ) ;
2021-09-14 02:37:35 +02:00
2023-02-02 16:09:38 +01:00
// Corp functions
const createCorporation = ( ) = > {
2023-03-18 02:12:43 +01:00
Player . startCorporation ( corporationName , false ) ;
2023-02-02 16:09:38 +01:00
// Rerender so the corp menu option will show up immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
const destroyCorporation = ( ) = > {
Player . corporation = null ;
// Rerender so the corp menu option will be removed immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
// Blade functions
const joinBladeburner = ( ) = > {
2022-09-06 15:07:12 +02:00
Player . bladeburner = new Bladeburner ( ) ;
2023-02-02 16:09:38 +01:00
// Rerender so the blade menu option will show up immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
const leaveBladeburner = ( ) = > {
Player . bladeburner = null ;
// Rerender so the blade menu option will be removed immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
// Gang functions
const startGang = ( ) = > {
2023-06-12 06:34:20 +02:00
const isHacking = gangFaction === FactionName . NiteSec || gangFaction === FactionName . TheBlackHand ;
2022-09-06 15:07:12 +02:00
Player . startGang ( gangFaction , isHacking ) ;
2023-02-02 16:09:38 +01:00
// Rerender so the gang menu option will show up immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
const stopGang = ( ) = > {
Player . gang = null ;
// Rerender so the gang menu option will be removed immediately on the devmenu page selection
ThemeEvents . emit ( ) ;
} ;
2023-06-26 04:53:35 +02:00
const setGangFactionDropdown = ( event : SelectChangeEvent ) = > {
// Todo: Make this a more specific check when a GangName enumlike is added
if ( ! getEnumHelper ( "FactionName" ) . isMember ( event . target . value ) ) return ;
setGangFaction ( event . target . value ) ;
} ;
2023-02-02 16:09:38 +01:00
// Misc functions
const checkMessages = ( ) = > checkForMessagesToSend ( ) ;
2022-01-10 17:29:58 +01:00
useEffect ( ( ) = > {
2022-04-01 14:54:07 +02:00
if ( error ) throw new ReferenceError ( "Manually thrown error" ) ;
2022-01-10 17:29:58 +01:00
} , [ error ] ) ;
2021-09-14 02:37:35 +02:00
return (
2021-09-18 03:30:02 +02:00
< Accordion TransitionProps = { { unmountOnExit : true } } >
2021-09-14 02:37:35 +02:00
< AccordionSummary expandIcon = { < ExpandMoreIcon / > } >
2021-10-01 22:22:33 +02:00
< Typography > General < / Typography >
2021-09-14 02:37:35 +02:00
< / AccordionSummary >
< AccordionDetails >
2023-02-02 16:09:38 +01:00
< Button
onClick = { setMoney ( 0 ) }
title = "This sets your money to $0, this means the money you had will just vanish without being accounted for where it went and may offset some metrics."
>
< pre >
= < Money money = { 0 } / >
< / pre >
< / Button >
2021-10-01 19:08:37 +02:00
< Button onClick = { addMoney ( 1 e6 ) } >
< pre >
+ < Money money = { 1 e6 } / >
< / pre >
< / Button >
< Button onClick = { addMoney ( 1 e9 ) } >
< pre >
+ < Money money = { 1 e9 } / >
< / pre >
< / Button >
< Button onClick = { addMoney ( 1 e12 ) } >
< pre >
+ < Money money = { 1 e12 } / >
< / pre >
< / Button >
< Button onClick = { addMoney ( 1 e15 ) } >
< pre >
+ < Money money = { 1000 e12 } / >
< / pre >
< / Button >
< Button onClick = { addMoney ( Infinity ) } >
< pre >
+ < Money money = { Infinity } / >
< / pre >
< / Button >
< Button onClick = { upgradeRam } > + RAM < / Button >
< br / >
2023-02-02 16:09:38 +01:00
< Typography > Add Custom Money < / Typography >
< TextField onChange = { ( x ) = > setDevMoney ( parseFloat ( x . target . value ) ) } / >
< Button onClick = { addCustomMoney } > Give Money < / Button >
2022-04-01 14:54:07 +02:00
< br / >
2023-02-02 16:09:38 +01:00
{ Player . corporation ? (
< Button onClick = { destroyCorporation } > Destroy Corporation < / Button >
) : (
< >
< Typography > Corporation Name : < / Typography >
< TextField value = { corporationName } onChange = { ( x ) = > setCorporationName ( x . target . value ) } / >
< Button onClick = { createCorporation } > Create Corporation < / Button >
< / >
) }
2022-04-01 14:54:07 +02:00
< br / >
2023-02-02 16:09:38 +01:00
{ Player . gang ? (
< Button onClick = { stopGang } > Stop Gang < / Button >
) : (
< >
< Typography > Gang Faction : < / Typography >
< Select value = { gangFaction } onChange = { setGangFactionDropdown } >
{ GangConstants . Names . map ( ( factionName ) = > (
< MenuItem key = { factionName } value = { factionName } >
{ factionName }
< / MenuItem >
) ) }
< / Select >
< Button onClick = { startGang } > Start Gang < / Button >
< / >
) }
< br / >
{ Player . bladeburner ? (
< Button onClick = { leaveBladeburner } > Leave BladeBurner < / Button >
) : (
< Button onClick = { joinBladeburner } > Join BladeBurner < / Button >
) }
2022-04-01 14:54:07 +02:00
< br / >
2021-10-01 19:08:37 +02:00
< Button onClick = { quickB1tFlum3 } > Quick b1t_flum3 . exe < / Button >
< Button onClick = { b1tflum3 } > Run b1t_flum3 . exe < / Button >
< Button onClick = { quickHackW0r1dD43m0n } > Quick w0rld_d34m0n < / Button >
< Button onClick = { hackW0r1dD43m0n } > Hack w0rld_d34m0n < / Button >
2022-01-10 17:29:58 +01:00
< Button onClick = { ( ) = > setError ( true ) } > Throw Error < / Button >
2022-04-13 05:29:06 +02:00
< Button onClick = { checkMessages } > Check Messages < / Button >
2021-09-14 02:37:35 +02:00
< / AccordionDetails >
< / Accordion >
) ;
}