mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-19 22:23:51 +01:00
Update infiltrators
This commit is contained in:
parent
adbd6c3486
commit
9fdfb77dd4
@ -348,15 +348,15 @@ function generateStatsDescription(mults: IMap<number>, programs?: string[], star
|
||||
desc = (
|
||||
<>
|
||||
{desc}
|
||||
<br />+{f(mults.infiltration_base_rep_increase - 1)} Infiltration {FactionNames.Infiltrators} Reputation base
|
||||
reward
|
||||
<br />+{f(mults.infiltration_base_rep_increase - 1)} Infiltration {FactionNames.ShadowsOfAnarchy} Reputation
|
||||
base reward
|
||||
</>
|
||||
);
|
||||
if (mults.infiltration_rep_mult)
|
||||
desc = (
|
||||
<>
|
||||
{desc}
|
||||
<br />+{f(mults.infiltration_rep_mult - 1)} Infiltration {FactionNames.Infiltrators} Reputation reward
|
||||
<br />+{f(mults.infiltration_rep_mult - 1)} Infiltration {FactionNames.ShadowsOfAnarchy} Reputation reward
|
||||
</>
|
||||
);
|
||||
if (mults.infiltration_trade_mult)
|
||||
|
@ -16,7 +16,7 @@ import {
|
||||
initBladeburnerAugmentations,
|
||||
initChurchOfTheMachineGodAugmentations,
|
||||
initGeneralAugmentations,
|
||||
initInfiltratorsAugmentations,
|
||||
initSoAAugmentations,
|
||||
initNeuroFluxGovernor,
|
||||
initUnstableCircadianModulator,
|
||||
} from "./data/AugmentationCreator";
|
||||
@ -51,7 +51,7 @@ function createAugmentations(): void {
|
||||
initNeuroFluxGovernor(),
|
||||
initUnstableCircadianModulator(),
|
||||
...initGeneralAugmentations(),
|
||||
...initInfiltratorsAugmentations(),
|
||||
...initSoAAugmentations(),
|
||||
...(factionExists(FactionNames.Bladeburners) ? initBladeburnerAugmentations() : []),
|
||||
...(factionExists(FactionNames.ChurchOfTheMachineGod) ? initChurchOfTheMachineGodAugmentations() : []),
|
||||
].map(resetAugmentation);
|
||||
@ -94,13 +94,15 @@ function updateNeuroFluxGovernorCosts(neuroFluxGovernorAugmentation: Augmentatio
|
||||
}
|
||||
}
|
||||
|
||||
function updateInfiltratorCosts(infiltratorAugmentation: Augmentation): void {
|
||||
const infiltratorAugmentationNames = initInfiltratorsAugmentations().map((augmentation) => augmentation.name);
|
||||
const infiltratorMultiplier =
|
||||
infiltratorAugmentationNames.filter((augmentationName) => Player.hasAugmentation(augmentationName)).length + 1;
|
||||
infiltratorAugmentation.baseCost = Math.pow(infiltratorAugmentation.startingCost * 1000, infiltratorMultiplier);
|
||||
if (infiltratorAugmentationNames.find((augmentationName) => augmentationName === infiltratorAugmentation.name)) {
|
||||
infiltratorAugmentation.baseRepRequirement = infiltratorAugmentation.startingRepRequirement * infiltratorMultiplier;
|
||||
function updateSoACosts(soaAugmentation: Augmentation): void {
|
||||
const soaAugmentationNames = initSoAAugmentations().map((augmentation) => augmentation.name);
|
||||
const soaAugCount = soaAugmentationNames.filter((augmentationName) =>
|
||||
Player.hasAugmentation(augmentationName),
|
||||
).length;
|
||||
soaAugmentation.baseCost = soaAugmentation.startingCost * Math.pow(CONSTANTS.SoACostMult, soaAugCount);
|
||||
if (soaAugmentationNames.find((augmentationName) => augmentationName === soaAugmentation.name)) {
|
||||
soaAugmentation.baseRepRequirement =
|
||||
soaAugmentation.startingRepRequirement * Math.pow(CONSTANTS.SoARepMult, soaAugCount);
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,8 +112,8 @@ export function updateAugmentationCosts(): void {
|
||||
const augmentationToUpdate = Augmentations[name];
|
||||
if (augmentationToUpdate.name === AugmentationNames.NeuroFluxGovernor) {
|
||||
updateNeuroFluxGovernorCosts(augmentationToUpdate);
|
||||
} else if (augmentationToUpdate.factions.includes(FactionNames.Infiltrators)) {
|
||||
updateInfiltratorCosts(augmentationToUpdate);
|
||||
} else if (augmentationToUpdate.factions.includes(FactionNames.ShadowsOfAnarchy)) {
|
||||
updateSoACosts(augmentationToUpdate);
|
||||
} else {
|
||||
augmentationToUpdate.baseCost =
|
||||
augmentationToUpdate.startingCost *
|
||||
|
@ -96,159 +96,96 @@ function getRandomBonus(): any {
|
||||
return bonuses[Math.floor(bonuses.length * randomNumber.random())];
|
||||
}
|
||||
|
||||
export const initInfiltratorsAugmentations = (): Augmentation[] => [
|
||||
export const initSoAAugmentations = (): Augmentation[] => [
|
||||
new Augmentation({
|
||||
name: AugmentationNames.BionicFingers,
|
||||
repCost: 15e1,
|
||||
name: AugmentationNames.WKSharmonizer,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
infiltration_base_rep_increase: 5,
|
||||
info:
|
||||
"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. ",
|
||||
factions: [FactionNames.Infiltrators],
|
||||
`A copy of the WKS harmonizer from the MIA leader of the ${FactionNames.ShadowsOfAnarchy} ` +
|
||||
"injects *Γ-based cells that provides general enhancement to the body.",
|
||||
stats: (
|
||||
<>
|
||||
This augmentation makes many aspect of infiltration easier and more productive. Such as increased timer,
|
||||
rewards, reduced damage taken, etc.
|
||||
</>
|
||||
),
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.CorporationManagementImplant,
|
||||
repCost: 25e1,
|
||||
moneyCost: 1e6,
|
||||
infiltration_rep_mult: 2.5,
|
||||
info:
|
||||
"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 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.",
|
||||
factions: [FactionNames.Infiltrators],
|
||||
}),
|
||||
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_damage_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 armor at absorbing " +
|
||||
"blunt damage when used as an alloy with almost any other metal you can think of.",
|
||||
factions: [FactionNames.Infiltrators],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.PythiasBrainStem,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.MightOfAres,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"You found an old jar apparently containing the brain stem of one of the most famous " +
|
||||
"fortune tellers in the world, installing this augmentation will apparently connect the synapses reactivating " +
|
||||
"the magic this man once shared with the world ",
|
||||
"Extra-occular neurons taken from old martial art master. Injecting the user the ability to " +
|
||||
"predict enemy attack before they even know it themself.",
|
||||
stats: (
|
||||
<>This augmentation makes the Slash minigame easier by showing you via an indictor when the slash in coming.</>
|
||||
),
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.IntellisenseModule,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.WisdomOfAthena,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"A brain implant with AI power that focuses in auto linting and intellisense, which " +
|
||||
"provides the ability to perform code completion better than any existing " +
|
||||
"IDE environment on the market to date.",
|
||||
info: "A connective brain implant to SASHA that focuses in pattern recognition and predictive templating.",
|
||||
stats: <>This augmentation makes the Bracket minigame easier by removing all '[' ']'.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.RearViewMirrorShoulderAttachment,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.ChaosOfDionysus,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info: "Never again will you need to turn your head to see whats behind you.",
|
||||
stats: <>This augmentation makes the Backwards minigame easier by making the words no longer backwards.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
info: "Opto-occipito implant to process visual signal before brain interpretation.",
|
||||
stats: <>This augmentation makes the Backwards minigame easier by flipping the words.</>,
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.KyberCrystalInjection,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.BeautyOfAphrodite,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"A weird looking shiny crystal which is crushed down and turned into a thick syrup, " +
|
||||
"most people think its all homeopathic but there are a few that believe when injected people will " +
|
||||
"believe what you say with one wave of the hand ",
|
||||
"Pheromone extruder injected in the thoracodorsal nerve. Emits pleasing scent guaranteed to " +
|
||||
"make conversational partners more agreeable.",
|
||||
stats: <>This augmentation makes the Bribe minigame easier by indicating the incorrect paths.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.DyslexiaModule,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.TrickeryOfHermes,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"A module initially developed to reverse the affliction of dyslexia, But during human trials it was found " +
|
||||
"to actually cause dyslexia, despite the fact scientists decided to sell it anyway. Who would want " +
|
||||
"to install something like that... i guess it has the added benefit of qualifying for a disability card",
|
||||
info: "Penta-dynamo-neurovascular-valve inserted in the carpal ligament, enhances dexterity.",
|
||||
stats: <>This augmentation makes the Cheat Code minigame easier by allowing the opposite character.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.CyberDecoder,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.FloodOfPoseidon,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"A cool looking do hickey that oddly resembles Keanu Reeves face, " +
|
||||
"it has a usb cable that looks like it plugs into something.",
|
||||
info: "Transtinatium VVD reticulator used in optico-sterbing recognition.",
|
||||
stats: <>This augmentation makes the Symbol matching minigame easier by indicating the correct choice.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.MineDetectionArmAttachment,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.HuntOfArtemis,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"You stumble across an old mine detection arm attachment at an army surplus store, " +
|
||||
"on the side is inscribed 'X(' i wonder what happened to the original owner, " +
|
||||
"its a bit beaten up but looks like it should still do the job.",
|
||||
info: "magneto-turboencabulator based on technology by Micha Eike Siemon, increases the users electro-magnetic sensitivity.",
|
||||
stats: (
|
||||
<>
|
||||
This augmentation makes the Minesweeper minigame easier by showing the location of all mines and keeping their
|
||||
position.
|
||||
</>
|
||||
),
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
new Augmentation({
|
||||
name: AugmentationNames.SecurityWireContacts,
|
||||
repCost: 1e2,
|
||||
name: AugmentationNames.KnowledgeOfApollo,
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"This augment is a set of contacts for your eyes when installed allows for the user to see which" +
|
||||
"wires are conducting security related information",
|
||||
info: "Neodynic retention fjengeln spoofer using -φ karmions, net positive effect on implantees delta wave.",
|
||||
stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires.</>,
|
||||
factions: [FactionNames.Infiltrators],
|
||||
factions: [FactionNames.ShadowsOfAnarchy],
|
||||
}),
|
||||
];
|
||||
|
||||
@ -2095,7 +2032,7 @@ export function initNeuroFluxGovernor(): Augmentation {
|
||||
work_money_mult: 1.01 + donationBonus,
|
||||
factions: Object.values(FactionNames).filter(
|
||||
(factionName) =>
|
||||
![FactionNames.Infiltrators, FactionNames.Bladeburners, FactionNames.ChurchOfTheMachineGod].includes(
|
||||
![FactionNames.ShadowsOfAnarchy, FactionNames.Bladeburners, FactionNames.ChurchOfTheMachineGod].includes(
|
||||
factionName,
|
||||
),
|
||||
),
|
||||
|
@ -114,22 +114,27 @@ export enum AugmentationNames {
|
||||
StaneksGift2 = "Stanek's Gift - Awakening",
|
||||
StaneksGift3 = "Stanek's Gift - Serenity",
|
||||
|
||||
/*
|
||||
MightOfAres = "Might of Ares", // slash
|
||||
WisdomOfAthena = "Wisdom of Athena", // bracket
|
||||
TrickeryOfHermes = "Trickery of Hermes", // cheatcode
|
||||
BeautyOfAphrodite = "Beauty of Aphrodite", // bribe
|
||||
ChaosOfDionysus = "Chaos of Dionysus", // reverse
|
||||
FloodOfPoseidon = "Flood of Poseidon", // hex
|
||||
HuntOfArtemis = "Hunt of Artemis", // mine
|
||||
KnowledgeOfApollo = "Knowledge of Apollo", // wire
|
||||
*/
|
||||
|
||||
// Infiltrators MiniGames
|
||||
PythiasBrainStem = "Pythia's Brain Stem",
|
||||
IntellisenseModule = "Intellisense Module",
|
||||
DyslexiaModule = "Dyslexia Module",
|
||||
KyberCrystalInjection = "Kyber Crystal Injection",
|
||||
RearViewMirrorShoulderAttachment = "Rear View Mirror Shoulder Attachment",
|
||||
CyberDecoder = "Cyber Decoder",
|
||||
MineDetectionArmAttachment = "Mine Detection Arm Attachment",
|
||||
SecurityWireContacts = "Security Wire Contacts",
|
||||
// Infiltrators general
|
||||
BionicFingers = "Bionic Fingers",
|
||||
CorporationManagementImplant = "Corporation Management Implant",
|
||||
TranslationCircuit = "Translation Circuit",
|
||||
GoldenSuiteCase = "Golden Suite Case",
|
||||
TimeDilationInjection = "Time Dilation Injection",
|
||||
BitaniumArmorAlloy = "Bitanium Armor Alloy",
|
||||
MightOfAres = "SoA - Might of Ares", // slash
|
||||
WisdomOfAthena = "SoA - Wisdom of Athena", // bracket
|
||||
TrickeryOfHermes = "SoA - Trickery of Hermes", // cheatcode
|
||||
BeautyOfAphrodite = "SoA - Beauty of Aphrodite", // bribe
|
||||
ChaosOfDionysus = "SoA - Chaos of Dionysus", // reverse
|
||||
FloodOfPoseidon = "SoA - Flood of Poseidon", // hex
|
||||
HuntOfArtemis = "SoA - Hunt of Artemis", // mine
|
||||
KnowledgeOfApollo = "SoA - Knowledge of Apollo", // wire
|
||||
WKSharmonizer = "SoA - phyzical WKS harmonizer",
|
||||
|
||||
//Wasteland Augs
|
||||
//PepBoy: "P.E.P-Boy", Plasma Energy Projection System
|
||||
|
@ -254,41 +254,6 @@ export function PlayerMultipliers(): React.ReactElement {
|
||||
);
|
||||
}
|
||||
|
||||
rightColData.push(
|
||||
...[
|
||||
[
|
||||
"Infiltrator Rep reward",
|
||||
Player.infiltration_rep_mult,
|
||||
Player.infiltration_rep_mult * mults.infiltration_rep_mult,
|
||||
1,
|
||||
],
|
||||
[
|
||||
"Infiltration sell",
|
||||
Player.infiltration_sell_mult,
|
||||
Player.infiltration_sell_mult * mults.infiltration_sell_mult,
|
||||
1,
|
||||
],
|
||||
[
|
||||
"Infiltration trade",
|
||||
Player.infiltration_trade_mult,
|
||||
Player.infiltration_trade_mult * mults.infiltration_trade_mult,
|
||||
1,
|
||||
],
|
||||
[
|
||||
"Infiltration minigame timer",
|
||||
Player.infiltration_timer_mult,
|
||||
Player.infiltration_timer_mult * mults.infiltration_timer_mult,
|
||||
1,
|
||||
],
|
||||
[
|
||||
"Infiltration minigame damage reduction",
|
||||
Player.infiltration_damage_reduction_mult,
|
||||
-1 * (1 - Player.infiltration_damage_reduction_mult * mults.infiltration_damage_reduction_mult),
|
||||
1,
|
||||
],
|
||||
].map((data): MultiplierListItemData => (data as any).concat([Settings.theme.primary])),
|
||||
);
|
||||
|
||||
const hasLeftImprovements = +!!(leftColData.filter((item) => item[2] !== 0).length > 0),
|
||||
hasRightImprovements = +!!(rightColData.filter((item) => item[2] !== 0).length > 0);
|
||||
|
||||
|
@ -112,6 +112,8 @@ export const CONSTANTS: {
|
||||
CodingContractBaseMoneyGain: number;
|
||||
AugmentationGraftingCostMult: number;
|
||||
AugmentationGraftingTimeBase: number;
|
||||
SoACostMult: number;
|
||||
SoARepMult: number;
|
||||
EntropyEffect: number;
|
||||
TotalNumBitNodes: number;
|
||||
Donations: number; // number of blood/plasma/palette donation the dev have verified., boosts NFG
|
||||
@ -281,6 +283,10 @@ export const CONSTANTS: {
|
||||
AugmentationGraftingCostMult: 3,
|
||||
AugmentationGraftingTimeBase: 3600000,
|
||||
|
||||
// SoA mults
|
||||
SoACostMult: 7,
|
||||
SoARepMult: 1.3,
|
||||
|
||||
// Value raised to the number of entropy stacks, then multiplied to player multipliers
|
||||
EntropyEffect: 0.98,
|
||||
|
||||
|
@ -3,6 +3,7 @@ import { IMap } from "../types";
|
||||
import { FactionNames } from "./data/FactionNames";
|
||||
import { use } from "../ui/Context";
|
||||
import { Option } from "./ui/Option";
|
||||
import { Typography } from "@mui/material";
|
||||
|
||||
interface FactionInfoParams {
|
||||
infoText?: JSX.Element;
|
||||
@ -511,51 +512,17 @@ export const FactionInfos: IMap<FactionInfo> = {
|
||||
);
|
||||
},
|
||||
}),
|
||||
// prettier-ignore
|
||||
[FactionNames.Infiltrators]: new FactionInfo({
|
||||
infoText:(<>
|
||||
{".,=,.==.²=.'=,.=░.==.:=,,▄▓▓▓▓▓▓▓▓▓╬░.==.²!.,=,.=⌐.==.!=,.=,.==.²=.,=,.==.²=.!=,"}<br />
|
||||
{"'¡»⌐^»∩^:»^:=^`=∩':+]▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▒^»∩^»=^:»^²»⌐^»∩^:=^`»^`»∩^:»^¡»^`»⌐'»÷'\»'"}<br />
|
||||
{"░░_|░_'░⌐_░∩`|▒▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░`,░``░∩`»░_|░¬`░⌐_░░`'PHYZ|C@L`»░_!░⌐`░░_|"}<br />
|
||||
{".,=,.»\.²=,,[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▒╦╔░¡_²².,=,,=:.==_!²,,=,_==,W@Z,=,,=\.!=./²,"}<br />
|
||||
{"'`»^^»∩':»')▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████▒▐▒Ü▒^»=^¡»^^»⌐'»∩':»^`»^'=^:=^H3R3^»∩^:»':=^"}<br />
|
||||
{"░∩`:░_'░⌐`░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█████ÑÜP╩Ü╙░`_░∩`|░`:░_`░∩`|∩`:░_`░⌐_░░`|░`,░⌐`░∩`»"}<br />
|
||||
{".,=,,==_²=,▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▌Ñ▓██ÑÜÜ▒Ü▒░_»=,,=,.==_»=,!=,,=,_==,»░,,=,,==_»=,!=,"}<br />
|
||||
{"'`=^^=∩^:»^:»└'µ╫█████████╬▓▓▓██Ññ▒NÜÜ▒╠^»=':=^^=∩^»=^:=^`=⌐^»»':»`¡»^`=∩^:=^\»'"}<br />
|
||||
{"░░`:░_,░⌐`=∩`|░_¡█╬▀███▓╬╬▀▓▓▀Ñ▒ÄÜ╟ñÜÜ╠D░¬_░░_|=_!░_`░⌐`=∩_:░_'░⌐_░░`!=`┌░__░∩_»"}<br />
|
||||
{".,=,.==.!=,,=,.=░╠████Ñ▒▒ÄÜñÜÜÖ╠╩Ü║Üû╠╙».»░.:=,.=⌐.==.!=,,=,.==.!=.,=,_==.»=.!=,"}<br />
|
||||
{"^`»^`»∩`:»'\»^^»⌐^╚╬▒Ü▒▒▒ÜÜ▒╚╩▒▒RÖÜ╠╠▒∩∩';╓';»^'»⌐`»»^:»^^»⌐^»∩':»^¡»''»∩`:»^\»^"}<br />
|
||||
{"░░ :░ '░⌐_░░_|░`!░`╙▒▒╠╠ÜÉ▒╚Ö╠╠╠╠╟╬╠╠╠╬╬▓▓█▓▓▓▓▓▌▄▒,,░⌐_|░_:░`,░⌐`░░ |░ '░_`░∩_|"}<br />
|
||||
{".,=,.=».!=,,=,.=░.==.└╙╙╜╚╩╩╙╙Ü7┘,░╚╬╠╬▓████▓▓▓▓▓█▓▓▓▓▓▓▓▓▓▓▒==,²».,»,,=░.!=.!=,"}<br />
|
||||
{"'^»⌐^»∩^:÷^\»^^»⌐'»»^:»^^»⌐^»∩^:»'`║██████████████▓████████▓▓m»'»»^¡»^^»∩^»»^\»^"}<br />
|
||||
{"░∩`!░_'░⌐`░░`|░,;░__░⌐`░░`|░-'░⌐`░µ▓█████████████▓▓▓▓▀▀╫▓███▓▌`░⌐_░░`|░`!░⌐`░∩`|"}<br />
|
||||
{"_,=,_²».:=:▒▒╠▒▒╠╠▒▒,:=,,=⌐_»░_:=,▓██████████████▓▓▓▓▒!=,███▓▓░_»=_,=,_=░_!░.'=,"}<br />
|
||||
{"▒╙R▓▓▄▄╣▓▓▓▓▓▓▓▓▓╬╬╠▒╠▄▄▄µ∩'»=]▄▄▓████Ñ»╙▀███████▓▓▓▓Ñ:»^╫█▓▓▓H`:='`=^`=∩`»=`\=^"}<br />
|
||||
{"Ü⌐»╙▓▓▓▓▓▓╬▌╠╬▒╬╬╬╠╠Ö╣▓▓▓▓▓▓▓▓██▓███▀U``░``╫███████▓▓Ñ⌐_=╫█▓▓▓Ñ░_`░░_|░_┌░``░░_»"}<br />
|
||||
{"|░::╟▓▓▀╚╙░/=,,╙░░╙░,⌡╩▀▓█████████▓╙,,==_²²╫███████▓▓░!=,╙╬╩▒▒▒╦╦░,,=,_=\.²=.!=,"}<br />
|
||||
{"^'ܵÅÑ»`:='\=^^»⌐^»=':÷^^=^┴╚╢▀▀▀╙`»^'=∩`:»║██████▓▓▌^:»'╔╠▒▒▒▒▒▒▒╠M≡╦`»⌐'»=^╒»`"}<br />
|
||||
{"░░_|░_'░⌐`░░_»░`!░¬`░▄▄▄▌▄▄▄▄▄▄╥,░░_:░`,░,╫███████▓▓Ü░⌐`=╠▒▒▒▒▒▒╠╠╩░`»╝╦:░_`░∩`»"}<br />
|
||||
{"_,»,_!\_!=,,=,_»░_²1████████████████▓▄▓▓▄▓█████▓▓▓▓Ñ»_!=,7╝╬╚╝╩╩░ù,,»,,╫▒,²»_!=,"}<br />
|
||||
{"'¡»^^»∩^:÷^\»^^»⌐^»=████████████████████████████▓▓Ñ»∩':»^^»╬^÷∩^:»^¡÷^║╣ÜR≈»^\÷^"}<br />
|
||||
{"░░`|░¬'░⌐`░░`|░`:░``╫███████▀▀██████████████████▓▀░¬`░⌐`|░`╠╣╣░▒░_▒╥║╬╣▒╙Ü^=░░`|"}<br />
|
||||
{"_,=,_»░_²=,,=,_=░_==|██████░==_╙╩▀██████████████Ñ⌐_!=_:=,_░╟%╩╬╟╣╣╣╬Ñ╣Φ╬»_²=┐╟╣╓"}<br />
|
||||
{"`¡»^^»∩^»»^\»^^»⌐^»»[█████▓^»∩'»:^)▓██████████▀┴=⌐`»='»»^`»╠^»╠╬╠n╬╬▒^[╠∩^»»^:=^"}<br />
|
||||
{"░∩`:░_'░⌐`░∩_»░_:░¬_▐██████▒``░⌐`▄█████████▓Ñ`»░`!░_`░⌐_|∩|╬░``╠⌐_░╠_»░╚Ü░_`░⌐`|"}<br />
|
||||
{",,=,,==_²=.,=,,=░,==╫██████▒==,²▓███████▓╨░,,=,_=⌐,=»,!=,,=╠░»=╬==.╠Ü,_=╢,!=,!=,"}<br />
|
||||
{"^¡÷^^»∩^:='\»^^»⌐^»»███████^»»^╫██████▄┐':»':=^^»⌐`»»^\=^░╬Ü'»┐╬░»''╢^^»∩Φ░»^\»^"}<br />
|
||||
{"░=`!░`¡░⌐`░░`|░`:░,███████▓░_`▓███████▌'░¬`░░`|░ ¡░``░⌐`|╝╨|░``╬H_░û╬▒░`:╟╬^░∩_»"}<br />
|
||||
{",_=,,»»_!»,,░╓▄▄▓▓█████████,=»,╙▀███████▌▄».,=,_=⌐_»»_²=,,=,,²=╚ÑÜ,,╚Ñ_=»_!=.!»_"}<br />
|
||||
{"^^»^^»∩^:Φ███████████████▌╜^»»':»^¡╬▓██████▄░»^^»⌐'»»':»^^»''»»^»»^¡»^^»⌐':»'\»^"}<br />
|
||||
{"░∩`:░`'░⌐╨████████████████:░``░⌐`░░`|░▀██████▓▄░`:░_`░░`»░`:░``░⌐`░░`|░`,░⌐`░░`|"}<br />
|
||||
{"_,=,,==_!=,,=,_»=_==_²ù││ù,_==_!=,,=,,=░████████▄░_»»_!=,_=░_==_»»_,=,,=░_»=,'»,"}<br />
|
||||
{"^¡»^^»∩^:=^\=^^»⌐^»»^:»^^=^^»∩^:=^`='^;▄▓████████▌^»»^:=^`»⌐^»»^»»^¡»^^»∩^:=^\»^"}<br />
|
||||
{"░∩`!=_'░⌐`░∩`|░`!░``░⌐`|░`|░`'░⌐`░µ▄▓███████████▄¡░_`░⌐`|░`!░_`░⌐`░∩`|░_¡░⌐`░░`|"}<br />
|
||||
{"################################################################################"}<br /><br />
|
||||
Experts in getting in and out in plain sight<br /><br />
|
||||
Some some speculate that the oceans movies are documentaries based on this group<br /><br />
|
||||
Some members are even rumored to be able to pick locks like the fonz, one hit and it will swing open ayeeeee<br /><br />
|
||||
Note that for this faction, reputation can only be gained by performing infiltration tasks</>),
|
||||
special: true,
|
||||
keepOnInstall: true,
|
||||
}),
|
||||
[FactionNames.ShadowsOfAnarchy]: new FactionInfo({
|
||||
infoText: (
|
||||
<>
|
||||
The government is ruled by the corporations that we have allowed to consume it. To release the world from its
|
||||
shackles, the gods grant us their strength.
|
||||
</>
|
||||
),
|
||||
special: true,
|
||||
keepOnInstall: true,
|
||||
assignment: (): React.ReactElement => {
|
||||
return <Typography>{FactionNames.ShadowsOfAnarchy} can only gain reputation by infiltrating.</Typography>;
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
@ -32,5 +32,5 @@ export enum FactionNames {
|
||||
CyberSec = "CyberSec",
|
||||
Bladeburners = "Bladeburners",
|
||||
ChurchOfTheMachineGod = "Church of the Machine God",
|
||||
Infiltrators = "The Infiltrators",
|
||||
ShadowsOfAnarchy = "Shadows of Anarchy",
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ export function AugmentationsPage(props: IProps): React.ReactElement {
|
||||
);
|
||||
}
|
||||
const multiplierComponent =
|
||||
props.faction.name !== FactionNames.Infiltrators ? (
|
||||
props.faction.name !== FactionNames.ShadowsOfAnarchy ? (
|
||||
<Typography>
|
||||
Price multiplier: x {numeralWrapper.formatMultiplier(getGenericAugmentationPriceMultiplier())}
|
||||
</Typography>
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { IPlayer } from "../../PersonObjects/IPlayer";
|
||||
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
|
||||
import { LocationsMetadata } from "../../Locations/data/LocationsMetadata";
|
||||
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
|
||||
import { Faction } from "../../Faction/Faction";
|
||||
|
||||
export function calculateSellInformationCashReward(
|
||||
player: IPlayer,
|
||||
@ -15,7 +17,7 @@ export function calculateSellInformationCashReward(
|
||||
Math.pow(difficulty, 3) *
|
||||
3e3 *
|
||||
levelBonus *
|
||||
player.infiltration_sell_mult *
|
||||
(player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.5 : 1) *
|
||||
BitNodeMultipliers.InfiltrationMoney
|
||||
);
|
||||
}
|
||||
@ -33,17 +35,17 @@ export function calculateTradeInformationRepReward(
|
||||
Math.pow(difficulty, 3) *
|
||||
3e3 *
|
||||
levelBonus *
|
||||
player.infiltration_sell_mult *
|
||||
(player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.5 : 1) *
|
||||
BitNodeMultipliers.InfiltrationMoney
|
||||
);
|
||||
}
|
||||
|
||||
export function calculateInfiltratorsRepReward(player: IPlayer, difficulty: number): number {
|
||||
export function calculateInfiltratorsRepReward(player: IPlayer, faction: Faction, difficulty: number): number {
|
||||
const maxStartingSecurityLevel = LocationsMetadata.reduce((acc, data): number => {
|
||||
const startingSecurityLevel = data.infiltrationData?.startingSecurityLevel || 0;
|
||||
return acc > startingSecurityLevel ? acc : startingSecurityLevel;
|
||||
}, 0);
|
||||
const baseRepGain = (difficulty / maxStartingSecurityLevel) * 10;
|
||||
const baseRepGain = (difficulty / maxStartingSecurityLevel) * 5000;
|
||||
|
||||
return (baseRepGain + player.infiltration_base_rep_increase) * player.infiltration_rep_mult;
|
||||
return baseRepGain * (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 2 : 1) * (1 + faction.favor / 100);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ export function BackwardGame(props: IMinigameProps): React.ReactElement {
|
||||
const timer = difficulty.timer;
|
||||
const [answer] = useState(makeAnswer(difficulty));
|
||||
const [guess, setGuess] = useState("");
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.RearViewMirrorShoulderAttachment, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.ChaosOfDionysus, true);
|
||||
|
||||
function press(this: Document, event: KeyboardEvent): void {
|
||||
event.preventDefault();
|
||||
|
@ -33,7 +33,7 @@ const difficulties: {
|
||||
function generateLeftSide(difficulty: Difficulty): string {
|
||||
let str = "";
|
||||
const options = [KEY.OPEN_BRACKET, KEY.LESS_THAN, KEY.OPEN_PARENTHESIS, KEY.OPEN_BRACE];
|
||||
if (Player.hasAugmentation(AugmentationNames.IntellisenseModule, true)) {
|
||||
if (Player.hasAugmentation(AugmentationNames.WisdomOfAthena, true)) {
|
||||
options.splice(0, 1);
|
||||
}
|
||||
const length = random(difficulty.min, difficulty.max);
|
||||
|
@ -47,7 +47,7 @@ export function BribeGame(props: IMinigameProps): React.ReactElement {
|
||||
let upColor = defaultColor;
|
||||
let downColor = defaultColor;
|
||||
let choiceColor = defaultColor;
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.KyberCrystalInjection, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.BeautyOfAphrodite, true);
|
||||
|
||||
if (hasAugment) {
|
||||
const upIndex = index + 1 >= choices.length ? 0 : index + 1;
|
||||
|
@ -42,7 +42,7 @@ export function CheatCodeGame(props: IMinigameProps): React.ReactElement {
|
||||
const timer = difficulty.timer;
|
||||
const [code] = useState(generateCode(difficulty));
|
||||
const [index, setIndex] = useState(0);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.DyslexiaModule, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.TrickeryOfHermes, true);
|
||||
|
||||
function press(this: Document, event: KeyboardEvent): void {
|
||||
event.preventDefault();
|
||||
|
@ -40,7 +40,7 @@ export function Cyberpunk2077Game(props: IMinigameProps): React.ReactElement {
|
||||
const [currentAnswerIndex, setCurrentAnswerIndex] = useState(0);
|
||||
const [pos, setPos] = useState([0, 0]);
|
||||
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.CyberDecoder, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.FloodOfPoseidon, true);
|
||||
function press(this: Document, event: KeyboardEvent): void {
|
||||
event.preventDefault();
|
||||
const move = [0, 0];
|
||||
|
@ -13,6 +13,7 @@ import { MinesweeperGame } from "./MinesweeperGame";
|
||||
import { WireCuttingGame } from "./WireCuttingGame";
|
||||
import { Victory } from "./Victory";
|
||||
import Typography from "@mui/material/Typography";
|
||||
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
|
||||
|
||||
interface IProps {
|
||||
StartingDifficulty: number;
|
||||
@ -93,7 +94,7 @@ export function Game(props: IProps): React.ReactElement {
|
||||
// it's clear they're not meant to
|
||||
const damage = options?.automated
|
||||
? player.hp
|
||||
: props.StartingDifficulty * 3 * player.infiltration_damage_reduction_mult;
|
||||
: props.StartingDifficulty * 3 * (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 0.5 : 1);
|
||||
if (player.takeDamage(damage)) {
|
||||
router.toCity();
|
||||
return;
|
||||
@ -112,7 +113,16 @@ export function Game(props: IProps): React.ReactElement {
|
||||
stageComponent = <Countdown onFinish={() => setStage(Stage.Minigame)} />;
|
||||
break;
|
||||
case Stage.Minigame: {
|
||||
const MiniGame = minigames[gameIds.id];
|
||||
/**
|
||||
*
|
||||
BackwardGame,
|
||||
BribeGame,
|
||||
CheatCodeGame,
|
||||
Cyberpunk2077Game,
|
||||
MinesweeperGame,
|
||||
WireCuttingGame,
|
||||
*/
|
||||
const MiniGame = WireCuttingGame; // minigames[gameIds.id];
|
||||
stageComponent = <MiniGame onSuccess={success} onFailure={failure} difficulty={props.Difficulty + level / 50} />;
|
||||
break;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import withStyles from "@mui/styles/withStyles";
|
||||
import { Theme } from "@mui/material/styles";
|
||||
import Grid from "@mui/material/Grid";
|
||||
import { use } from "../../ui/Context";
|
||||
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
|
||||
|
||||
const TimerProgress = withStyles((theme: Theme) => ({
|
||||
root: {
|
||||
@ -23,7 +24,7 @@ interface IProps {
|
||||
export function GameTimer(props: IProps): React.ReactElement {
|
||||
const player = use.Player();
|
||||
const [v, setV] = useState(100);
|
||||
const totalMillis = player.infiltration_timer_mult * props.millis;
|
||||
const totalMillis = (player.hasAugmentation(AugmentationNames.WKSharmonizer) ? 1.3 : 1) * props.millis;
|
||||
|
||||
const tick = 200;
|
||||
useEffect(() => {
|
||||
|
@ -38,7 +38,7 @@ export function MinesweeperGame(props: IMinigameProps): React.ReactElement {
|
||||
const [answer, setAnswer] = useState(generateEmptyField(difficulty));
|
||||
const [pos, setPos] = useState([0, 0]);
|
||||
const [memoryPhase, setMemoryPhase] = useState(true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.MineDetectionArmAttachment, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.HuntOfArtemis, true);
|
||||
function press(this: Document, event: KeyboardEvent): void {
|
||||
event.preventDefault();
|
||||
if (memoryPhase) return;
|
||||
|
@ -40,7 +40,7 @@ export function SlashGame(props: IMinigameProps): React.ReactElement {
|
||||
props.onSuccess();
|
||||
}
|
||||
}
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.PythiasBrainStem, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.MightOfAres, true);
|
||||
const phaseZeroTime = Math.random() * 3250 + 1500 - (250 + difficulty.window);
|
||||
const phaseOneTime = 250;
|
||||
const timeUntilAttacking = phaseZeroTime + phaseOneTime;
|
||||
|
@ -15,6 +15,7 @@ import {
|
||||
calculateSellInformationCashReward,
|
||||
calculateTradeInformationRepReward,
|
||||
} from "../formulas/victory";
|
||||
import { inviteToFaction } from "../../Faction/FactionHelpers";
|
||||
|
||||
interface IProps {
|
||||
StartingDifficulty: number;
|
||||
@ -33,12 +34,12 @@ export function Victory(props: IProps): React.ReactElement {
|
||||
router.toCity();
|
||||
}
|
||||
|
||||
const soa = Factions[FactionNames.ShadowsOfAnarchy];
|
||||
const repGain = calculateTradeInformationRepReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty);
|
||||
const moneyGain = calculateSellInformationCashReward(player, props.Reward, props.MaxLevel, props.StartingDifficulty);
|
||||
const infiltrationRepGain = calculateInfiltratorsRepReward(player, props.StartingDifficulty);
|
||||
const infiltrationRepGain = calculateInfiltratorsRepReward(player, soa, props.StartingDifficulty);
|
||||
|
||||
const infiltratorFaction = Factions[FactionNames.Infiltrators];
|
||||
const isMemberOfInfiltrators = infiltratorFaction && infiltratorFaction.isMember;
|
||||
const isMemberOfInfiltrators = player.factions.includes(FactionNames.ShadowsOfAnarchy);
|
||||
|
||||
function sell(): void {
|
||||
handleInfiltrators();
|
||||
@ -58,9 +59,9 @@ export function Victory(props: IProps): React.ReactElement {
|
||||
}
|
||||
|
||||
function handleInfiltrators(): void {
|
||||
player.hasCompletedAnInfiltration = true;
|
||||
inviteToFaction(Factions[FactionNames.ShadowsOfAnarchy]);
|
||||
if (isMemberOfInfiltrators) {
|
||||
infiltratorFaction.playerReputation += infiltrationRepGain;
|
||||
soa.playerReputation += infiltrationRepGain;
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,7 +76,7 @@ export function Victory(props: IProps): React.ReactElement {
|
||||
You{" "}
|
||||
{isMemberOfInfiltrators ? (
|
||||
<>
|
||||
have gained {formatNumber(infiltrationRepGain, 2)} rep for {FactionNames.Infiltrators} and{" "}
|
||||
have gained {formatNumber(infiltrationRepGain, 2)} rep for {FactionNames.ShadowsOfAnarchy} and{" "}
|
||||
</>
|
||||
) : (
|
||||
<></>
|
||||
|
@ -64,10 +64,10 @@ export function WireCuttingGame(props: IMinigameProps): React.ReactElement {
|
||||
const [wires] = useState(generateWires(difficulty));
|
||||
const [cutWires, setCutWires] = useState(new Array(wires.length).fill(false));
|
||||
const [questions] = useState(generateQuestion(wires, difficulty));
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.SecurityWireContacts, true);
|
||||
const hasAugment = Player.hasAugmentation(AugmentationNames.KnowledgeOfApollo, true);
|
||||
|
||||
function checkWire(wireNum: number): boolean {
|
||||
return !questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1));
|
||||
return questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1));
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
@ -110,9 +110,15 @@ export function WireCuttingGame(props: IMinigameProps): React.ReactElement {
|
||||
<Typography key={i}>{question.toString()}</Typography>
|
||||
))}
|
||||
<Typography>
|
||||
{new Array(wires.length).fill(0).map((_, i) => (
|
||||
<span key={i}> {i + 1} </span>
|
||||
))}
|
||||
{new Array(wires.length).fill(0).map((_, i) => {
|
||||
const isCorrectWire = checkWire(i + 1);
|
||||
const color = hasAugment && !isCorrectWire ? Settings.theme.disabled : Settings.theme.primary;
|
||||
return (
|
||||
<span key={i} style={{ color: color }}>
|
||||
{i + 1}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</Typography>
|
||||
{new Array(8).fill(0).map((_, i) => (
|
||||
<div key={i}>
|
||||
|
@ -2492,12 +2492,6 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
|
||||
bladeburner_stamina_gain_mult: Player.bladeburner_stamina_gain_mult,
|
||||
bladeburner_analysis_mult: Player.bladeburner_analysis_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_damage_reduction_mult: Player.infiltration_damage_reduction_mult,
|
||||
bitNodeN: Player.bitNodeN,
|
||||
totalPlaytime: Player.totalPlaytime,
|
||||
playtimeSinceLastAug: Player.playtimeSinceLastAug,
|
||||
|
@ -16,6 +16,8 @@ import {
|
||||
calculateSellInformationCashReward,
|
||||
calculateTradeInformationRepReward,
|
||||
} from "../Infiltration/formulas/victory";
|
||||
import { FactionNames } from "../Faction/data/FactionNames";
|
||||
import { Factions } from "../Faction/Factions";
|
||||
|
||||
export function NetscriptInfiltration(
|
||||
player: IPlayer,
|
||||
@ -47,7 +49,7 @@ export function NetscriptInfiltration(
|
||||
reward: {
|
||||
tradeRep: calculateTradeInformationRepReward(player, reward, maxLevel, difficulty),
|
||||
sellCash: calculateSellInformationCashReward(player, reward, maxLevel, difficulty),
|
||||
infiltratorRep: calculateInfiltratorsRepReward(player, difficulty),
|
||||
infiltratorRep: calculateInfiltratorsRepReward(player, Factions[FactionNames.ShadowsOfAnarchy], difficulty),
|
||||
},
|
||||
difficulty: difficulty,
|
||||
};
|
||||
|
@ -73,7 +73,6 @@ export interface IPlayer {
|
||||
terminalCommandHistory: string[];
|
||||
lastUpdate: number;
|
||||
totalPlaytime: number;
|
||||
hasCompletedAnInfiltration: boolean;
|
||||
|
||||
// Stats
|
||||
hacking: number;
|
||||
@ -124,12 +123,6 @@ export interface IPlayer {
|
||||
bladeburner_stamina_gain_mult: number;
|
||||
bladeburner_analysis_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_damage_reduction_mult: number;
|
||||
|
||||
createProgramReqLvl: number;
|
||||
factionWorkType: string;
|
||||
|
@ -83,7 +83,6 @@ export class PlayerObject implements IPlayer {
|
||||
lastUpdate: number;
|
||||
lastSave: number;
|
||||
totalPlaytime: number;
|
||||
hasCompletedAnInfiltration: boolean;
|
||||
|
||||
// Stats
|
||||
hacking: number;
|
||||
@ -134,12 +133,6 @@ export class PlayerObject implements IPlayer {
|
||||
bladeburner_stamina_gain_mult: number;
|
||||
bladeburner_analysis_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_damage_reduction_mult: number;
|
||||
|
||||
createProgramReqLvl: number;
|
||||
factionWorkType: string;
|
||||
@ -472,13 +465,6 @@ export class PlayerObject implements IPlayer {
|
||||
this.bladeburner_analysis_mult = 1; //Field Analysis Onl;
|
||||
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_damage_reduction_mult = 1;
|
||||
|
||||
// Sleeves & Re-sleeving
|
||||
this.sleeves = [];
|
||||
this.sleevesFromCovenant = 0; // # of Duplicate sleeves purchased from the covenan;
|
||||
@ -491,7 +477,6 @@ export class PlayerObject implements IPlayer {
|
||||
this.lastUpdate = 0;
|
||||
this.lastSave = 0;
|
||||
this.totalPlaytime = 0;
|
||||
this.hasCompletedAnInfiltration = false;
|
||||
|
||||
this.playtimeSinceLastAug = 0;
|
||||
this.playtimeSinceLastBitnode = 0;
|
||||
|
@ -7,7 +7,7 @@ import { Augmentation } from "../../Augmentation/Augmentation";
|
||||
|
||||
import { calculateEntropy } from "../Grafting/EntropyAccumulation";
|
||||
|
||||
export function hasAugmentation(this: IPlayer, aug: string | Augmentation, includeQueued = false): boolean {
|
||||
export function hasAugmentation(this: IPlayer, aug: string | Augmentation, ignoreQueued = false): boolean {
|
||||
const augName: string = aug instanceof Augmentation ? aug.name : aug;
|
||||
|
||||
for (const owned of this.augmentations) {
|
||||
@ -16,7 +16,7 @@ export function hasAugmentation(this: IPlayer, aug: string | Augmentation, inclu
|
||||
}
|
||||
}
|
||||
|
||||
if (!includeQueued) {
|
||||
if (!ignoreQueued) {
|
||||
for (const owned of this.queuedAugmentations) {
|
||||
if (owned.name === augName) {
|
||||
return true;
|
||||
|
@ -160,7 +160,6 @@ export function prestigeAugmentation(this: PlayerObject): void {
|
||||
this.workChaExpGained = 0;
|
||||
this.workRepGained = 0;
|
||||
this.workMoneyGained = 0;
|
||||
this.hasCompletedAnInfiltration = false;
|
||||
|
||||
this.timeWorked = 0;
|
||||
|
||||
@ -313,13 +312,6 @@ export function resetMultipliers(this: IPlayer): void {
|
||||
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_damage_reduction_mult = 1;
|
||||
}
|
||||
|
||||
export function hasProgram(this: IPlayer, programName: string): boolean {
|
||||
@ -2151,12 +2143,6 @@ export function checkForFactionInvitations(this: IPlayer): Faction[] {
|
||||
return allCompanies.includes(companyName) && getCompanyRep(companyName) > repNeeded;
|
||||
}
|
||||
|
||||
//Infiltrators
|
||||
const InfiltratorsFac = Factions[FactionNames.Infiltrators];
|
||||
if (this.hasCompletedAnInfiltration && !InfiltratorsFac.isMember && !InfiltratorsFac.alreadyInvited) {
|
||||
invitedFactions.push(InfiltratorsFac);
|
||||
}
|
||||
|
||||
//Illuminati
|
||||
const illuminatiFac = Factions[FactionNames.Illuminati];
|
||||
if (
|
||||
|
@ -56,7 +56,7 @@ function possibleJobs(player: IPlayer, sleeve: Sleeve): string[] {
|
||||
|
||||
function possibleFactions(player: IPlayer, sleeve: Sleeve): string[] {
|
||||
// Array of all factions that other sleeves are working for
|
||||
const forbiddenFactions = [FactionNames.Bladeburners as string, FactionNames.Infiltrators as string];
|
||||
const forbiddenFactions = [FactionNames.Bladeburners as string, FactionNames.ShadowsOfAnarchy as string];
|
||||
if (player.gang) {
|
||||
forbiddenFactions.push(player.gang.facName);
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ import { SxProps } from "@mui/system";
|
||||
import { PlayerObject } from "./PersonObjects/Player/PlayerObject";
|
||||
import { pushGameSaved } from "./Electron";
|
||||
import { defaultMonacoTheme } from "./ScriptEditor/ui/themes";
|
||||
import { FactionNames } from "./Faction/data/FactionNames";
|
||||
import { Faction } from "./Faction/Faction";
|
||||
|
||||
/* SaveObject.js
|
||||
* Defines the object used to save/load games
|
||||
@ -398,6 +400,9 @@ function evaluateVersionCompatibility(ver: string | number): void {
|
||||
if (ver < 15) {
|
||||
(Settings as any).EditorTheme = { ...defaultMonacoTheme };
|
||||
}
|
||||
if (ver < 16) {
|
||||
Factions[FactionNames.ShadowsOfAnarchy] = new Faction(FactionNames.ShadowsOfAnarchy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,18 +495,6 @@ export function CharacterStats(): React.ReactElement {
|
||||
noMargin
|
||||
/>
|
||||
)}
|
||||
{player.factions.includes(FactionNames.Infiltrators) && (
|
||||
<MultiplierTable
|
||||
color={Settings.theme.primary}
|
||||
rows={[
|
||||
["Infiltrator Rep reward", player.infiltration_rep_mult],
|
||||
["Infiltration sell", player.infiltration_sell_mult],
|
||||
["Infiltration trade", player.infiltration_trade_mult],
|
||||
["Infiltration minigame timer", player.infiltration_timer_mult],
|
||||
["Infiltration minigame damage reduction", -1 * (1 - player.infiltration_damage_reduction_mult)],
|
||||
]}
|
||||
/>
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
</Paper>
|
||||
|
Loading…
Reference in New Issue
Block a user