mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-18 21:53:50 +01:00
build fix, lint, remove some instanceof checks
This commit is contained in:
parent
81412db02e
commit
38063f62a7
@ -1,6 +1,6 @@
|
||||
import { Augmentation } from "./Augmentation";
|
||||
import { StaticAugmentations } from "./StaticAugmentations";
|
||||
import { PlayerOwnedAugmentation, IPlayerOwnedAugmentation } from "./PlayerOwnedAugmentation";
|
||||
import { PlayerOwnedAugmentation } from "./PlayerOwnedAugmentation";
|
||||
import { AugmentationNames } from "./data/AugmentationNames";
|
||||
|
||||
import { CONSTANTS } from "../Constants";
|
||||
@ -71,7 +71,7 @@ function resetAugmentation(aug: Augmentation): void {
|
||||
AddToStaticAugmentations(aug);
|
||||
}
|
||||
|
||||
function applyAugmentation(aug: IPlayerOwnedAugmentation, reapply = false): void {
|
||||
function applyAugmentation(aug: PlayerOwnedAugmentation, reapply = false): void {
|
||||
const staticAugmentation = StaticAugmentations[aug.name];
|
||||
|
||||
// Apply multipliers
|
||||
@ -146,8 +146,8 @@ function augmentationExists(name: string): boolean {
|
||||
return StaticAugmentations.hasOwnProperty(name);
|
||||
}
|
||||
|
||||
export function isRepeatableAug(aug: Augmentation): boolean {
|
||||
const augName = aug instanceof Augmentation ? aug.name : aug;
|
||||
export function isRepeatableAug(aug: Augmentation | string): boolean {
|
||||
const augName = typeof aug === "string" ? aug : aug.name;
|
||||
return augName === AugmentationNames.NeuroFluxGovernor;
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,3 @@ export class PlayerOwnedAugmentation {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
export interface IPlayerOwnedAugmentation {
|
||||
level: number;
|
||||
name: string;
|
||||
}
|
||||
|
@ -18,12 +18,12 @@ interface IProps {
|
||||
}
|
||||
|
||||
export function PurchaseAugmentationModal(props: IProps): React.ReactElement {
|
||||
if (typeof props.aug === "undefined" || typeof props.faction === "undefined") {
|
||||
if (!props.aug || !props.faction) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
function buy(): void {
|
||||
if (!isRepeatableAug(props.aug as Augmentation) && Player.hasAugmentation(props.aug as Augmentation)) {
|
||||
if (!props.aug || (!isRepeatableAug(props.aug) && Player.hasAugmentation(props.aug.name))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import { BladeburnerConstants } from "./data/Constants";
|
||||
import { numeralWrapper } from "../ui/numeralFormat";
|
||||
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
||||
import { addOffset } from "../utils/helpers/addOffset";
|
||||
import { Faction } from "../Faction/Faction";
|
||||
import { Factions, factionExists } from "../Faction/Factions";
|
||||
import { calculateHospitalizationCost } from "../Hospital/Hospital";
|
||||
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
||||
@ -113,9 +112,7 @@ export class Bladeburner {
|
||||
|
||||
getCurrentCity(): City {
|
||||
const city = this.cities[this.city];
|
||||
if (!(city instanceof City)) {
|
||||
throw new Error("Bladeburner.getCurrentCity() did not properly return a City object");
|
||||
}
|
||||
if (!city) throw new Error("Invalid city in Bladeburner.getCurrentCity()");
|
||||
return city;
|
||||
}
|
||||
|
||||
@ -541,7 +538,7 @@ export class Bladeburner {
|
||||
case 3: {
|
||||
const skillName = args[2];
|
||||
const skill = Skills[skillName];
|
||||
if (skill == null || !(skill instanceof Skill)) {
|
||||
if (!skill) {
|
||||
this.postToConsole("Invalid skill name (Note that it is case-sensitive): " + skillName);
|
||||
break;
|
||||
}
|
||||
@ -683,10 +680,7 @@ export class Bladeburner {
|
||||
".",
|
||||
);
|
||||
} else if (flag.toLowerCase().includes("en")) {
|
||||
if (
|
||||
!(this.automateActionLow instanceof ActionIdentifier) ||
|
||||
!(this.automateActionHigh instanceof ActionIdentifier)
|
||||
) {
|
||||
if (!this.automateActionLow || !this.automateActionHigh) {
|
||||
return this.log("Failed to enable automation. Actions were not set");
|
||||
}
|
||||
this.automateEnabled = true;
|
||||
@ -897,9 +891,7 @@ export class Bladeburner {
|
||||
// Choose random source/destination city for events
|
||||
const sourceCityName = BladeburnerConstants.CityNames[getRandomInt(0, 5)];
|
||||
const sourceCity = this.cities[sourceCityName];
|
||||
if (!(sourceCity instanceof City)) {
|
||||
throw new Error("sourceCity was not a City object in Bladeburner.randomEvent()");
|
||||
}
|
||||
if (!sourceCity) throw new Error("Invalid sourceCity in Bladeburner.randomEvent()");
|
||||
|
||||
let destCityName = BladeburnerConstants.CityNames[getRandomInt(0, 5)];
|
||||
while (destCityName === sourceCityName) {
|
||||
@ -907,9 +899,7 @@ export class Bladeburner {
|
||||
}
|
||||
const destCity = this.cities[destCityName];
|
||||
|
||||
if (!(sourceCity instanceof City) || !(destCity instanceof City)) {
|
||||
throw new Error("sourceCity/destCity was not a City object in Bladeburner.randomEvent()");
|
||||
}
|
||||
if (!sourceCity || !destCity) throw new Error("Invalid sourceCity or destCity in Bladeburner.randomEvent()");
|
||||
|
||||
if (chance <= 0.05) {
|
||||
// New Synthoid Community, 5%
|
||||
@ -1621,7 +1611,7 @@ export class Bladeburner {
|
||||
const bladeburnersFactionName = FactionNames.Bladeburners;
|
||||
if (factionExists(bladeburnersFactionName)) {
|
||||
const bladeburnerFac = Factions[bladeburnersFactionName];
|
||||
if (!(bladeburnerFac instanceof Faction)) {
|
||||
if (!bladeburnerFac) {
|
||||
throw new Error(
|
||||
`Could not properly get ${FactionNames.Bladeburners} Faction object in ${FactionNames.Bladeburners} UI Overview Faction button`,
|
||||
);
|
||||
@ -1650,7 +1640,7 @@ export class Bladeburner {
|
||||
if (this.actionTimeToComplete <= 0) {
|
||||
throw new Error(`Invalid actionTimeToComplete value: ${this.actionTimeToComplete}, type; ${this.action.type}`);
|
||||
}
|
||||
if (!(this.action instanceof ActionIdentifier)) {
|
||||
if (!this.action) {
|
||||
throw new Error("Bladeburner.action is not an ActionIdentifier Object");
|
||||
}
|
||||
|
||||
@ -2018,9 +2008,7 @@ export class Bladeburner {
|
||||
// Chaos goes down very slowly
|
||||
for (const cityName of BladeburnerConstants.CityNames) {
|
||||
const city = this.cities[cityName];
|
||||
if (!(city instanceof City)) {
|
||||
throw new Error("Invalid City object when processing passive chaos reduction in Bladeburner.process");
|
||||
}
|
||||
if (!city) throw new Error("Invalid city when processing passive chaos reduction in Bladeburner.process");
|
||||
city.chaos -= 0.0001 * seconds;
|
||||
city.chaos = Math.max(0, city.chaos);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ export function initCompanies(): void {
|
||||
for (const companyName of Object.keys(Companies)) {
|
||||
const company = Companies[companyName];
|
||||
const oldCompany = oldCompanies[companyName];
|
||||
if (!(oldCompany instanceof Company)) {
|
||||
if (!oldCompany) {
|
||||
// New game, so no OldCompanies data
|
||||
company.favor = 0;
|
||||
} else {
|
||||
|
@ -88,11 +88,7 @@ export class Company {
|
||||
}
|
||||
|
||||
hasPosition(pos: CompanyPosition | string): boolean {
|
||||
if (pos instanceof CompanyPosition) {
|
||||
return this.companyPositions[pos.name] != null;
|
||||
} else {
|
||||
return this.companyPositions[pos] != null;
|
||||
}
|
||||
return this.companyPositions[typeof pos === "string" ? pos : pos.name] != null;
|
||||
}
|
||||
|
||||
hasAgentPositions(): boolean {
|
||||
|
@ -361,7 +361,7 @@ export function ThrowParty(corp: Corporation, office: OfficeSpace, costPerEmploy
|
||||
|
||||
export function PurchaseWarehouse(corp: Corporation, division: Industry, city: string): void {
|
||||
if (corp.funds < CorporationConstants.WarehouseInitialCost) return;
|
||||
if (division.warehouses[city] instanceof Warehouse) return;
|
||||
if (division.warehouses[city]) return;
|
||||
division.warehouses[city] = new Warehouse({
|
||||
corp: corp,
|
||||
industry: division,
|
||||
@ -439,7 +439,7 @@ export function MakeProduct(
|
||||
designCost: designInvest,
|
||||
advCost: marketingInvest,
|
||||
});
|
||||
if (products[product.name] instanceof Product) {
|
||||
if (products[product.name]) {
|
||||
throw new Error(`You already have a product with this name!`);
|
||||
}
|
||||
|
||||
@ -470,10 +470,10 @@ export function Research(division: Industry, researchName: string): void {
|
||||
for (let i = 0; i < CorporationConstants.Cities.length; ++i) {
|
||||
const city = CorporationConstants.Cities[i];
|
||||
const warehouse = division.warehouses[city];
|
||||
if (!(warehouse instanceof Warehouse)) {
|
||||
if (!warehouse) {
|
||||
continue;
|
||||
}
|
||||
if (Player.corporation instanceof Corporation) {
|
||||
if (Player.corporation) {
|
||||
// Stores cycles in a "buffer". Processed separately using Engine Counters
|
||||
warehouse.updateSize(Player.corporation, division);
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { CorporationState } from "./CorporationState";
|
||||
import { CorporationUnlockUpgrade, CorporationUnlockUpgrades } from "./data/CorporationUnlockUpgrades";
|
||||
import { CorporationUpgrade, CorporationUpgrades } from "./data/CorporationUpgrades";
|
||||
import { Warehouse } from "./Warehouse";
|
||||
import { CorporationConstants } from "./data/Constants";
|
||||
import { Industry } from "./Industry";
|
||||
|
||||
@ -331,7 +330,7 @@ export class Corporation {
|
||||
for (const city of Object.keys(industry.warehouses)) {
|
||||
const warehouse = industry.warehouses[city];
|
||||
if (warehouse === 0) continue;
|
||||
if (industry.warehouses.hasOwnProperty(city) && warehouse instanceof Warehouse) {
|
||||
if (industry.warehouses.hasOwnProperty(city) && warehouse) {
|
||||
warehouse.updateSize(this, industry);
|
||||
}
|
||||
}
|
||||
|
@ -355,9 +355,7 @@ export class Industry {
|
||||
for (let i = 0; i < CorporationConstants.Cities.length; ++i) {
|
||||
const city = CorporationConstants.Cities[i];
|
||||
const warehouse = this.warehouses[city];
|
||||
if (!(warehouse instanceof Warehouse)) {
|
||||
continue;
|
||||
}
|
||||
if (!warehouse) continue;
|
||||
|
||||
const materials = warehouse.materials;
|
||||
|
||||
@ -413,10 +411,7 @@ export class Industry {
|
||||
let employeeSalary = 0;
|
||||
for (const officeLoc of Object.keys(this.offices)) {
|
||||
const office = this.offices[officeLoc];
|
||||
if (office === 0) continue;
|
||||
if (office instanceof OfficeSpace) {
|
||||
employeeSalary += office.process(marketCycles, corporation, this);
|
||||
}
|
||||
if (office) employeeSalary += office.process(marketCycles, corporation, this);
|
||||
}
|
||||
this.thisCycleExpenses = this.thisCycleExpenses + employeeSalary;
|
||||
|
||||
@ -467,7 +462,7 @@ export class Industry {
|
||||
for (let i = 0; i < CorporationConstants.Cities.length; ++i) {
|
||||
//If this industry has a warehouse in this city, process the market
|
||||
//for every material this industry requires or produces
|
||||
if (this.warehouses[CorporationConstants.Cities[i]] instanceof Warehouse) {
|
||||
if (this.warehouses[CorporationConstants.Cities[i]]) {
|
||||
const wh = this.warehouses[CorporationConstants.Cities[i]];
|
||||
if (wh === 0) continue;
|
||||
for (const name of Object.keys(reqMats)) {
|
||||
@ -527,7 +522,7 @@ export class Industry {
|
||||
const office = this.offices[city];
|
||||
if (office === 0) continue;
|
||||
|
||||
if (this.warehouses[city] instanceof Warehouse) {
|
||||
if (this.warehouses[city]) {
|
||||
const warehouse = this.warehouses[city];
|
||||
if (warehouse === 0) continue;
|
||||
|
||||
@ -893,7 +888,7 @@ export class Industry {
|
||||
if (corporation.divisions[foo].name === exp.ind) {
|
||||
const expIndustry = corporation.divisions[foo];
|
||||
const expWarehouse = expIndustry.warehouses[exp.city];
|
||||
if (!(expWarehouse instanceof Warehouse)) {
|
||||
if (!expWarehouse) {
|
||||
console.error(`Invalid export! ${expIndustry.name} ${exp.city}`);
|
||||
break;
|
||||
}
|
||||
@ -936,7 +931,7 @@ export class Industry {
|
||||
|
||||
//Produce Scientific Research based on R&D employees
|
||||
//Scientific Research can be produced without a warehouse
|
||||
if (office instanceof OfficeSpace) {
|
||||
if (office) {
|
||||
this.sciResearch.qty +=
|
||||
0.004 *
|
||||
Math.pow(office.employeeProd[EmployeePositions.RandD], 0.5) *
|
||||
@ -975,7 +970,7 @@ export class Industry {
|
||||
for (const prodName of Object.keys(this.products)) {
|
||||
if (this.products.hasOwnProperty(prodName)) {
|
||||
const prod = this.products[prodName];
|
||||
if (prod instanceof Product && prod.fin) {
|
||||
if (prod && prod.fin) {
|
||||
revenue += this.processProduct(marketCycles, prod, corporation);
|
||||
}
|
||||
}
|
||||
@ -991,7 +986,7 @@ export class Industry {
|
||||
const office = this.offices[city];
|
||||
if (office === 0) continue;
|
||||
const warehouse = this.warehouses[city];
|
||||
if (warehouse instanceof Warehouse) {
|
||||
if (warehouse) {
|
||||
switch (this.state) {
|
||||
case "PRODUCTION": {
|
||||
//Calculate the maximum production of this material based
|
||||
@ -1195,7 +1190,7 @@ export class Industry {
|
||||
if (state === "EXPORT") {
|
||||
for (let i = 0; i < CorporationConstants.Cities.length; ++i) {
|
||||
const city = CorporationConstants.Cities[i];
|
||||
if (!(this.warehouses[city] instanceof Warehouse)) {
|
||||
if (!this.warehouses[city]) {
|
||||
continue;
|
||||
}
|
||||
const warehouse = this.warehouses[city];
|
||||
|
@ -3,8 +3,6 @@
|
||||
import React, { useState } from "react";
|
||||
|
||||
import { CorporationConstants } from "../data/Constants";
|
||||
import { Material } from "../Material";
|
||||
import { Product } from "../Product";
|
||||
import { Warehouse } from "../Warehouse";
|
||||
import { SmartSupplyModal } from "./modals/SmartSupplyModal";
|
||||
import { ProductElem } from "./ProductElem";
|
||||
@ -92,7 +90,7 @@ function WarehouseRoot(props: IProps): React.ReactElement {
|
||||
// Create React components for materials
|
||||
const mats = [];
|
||||
for (const matName of Object.keys(props.warehouse.materials)) {
|
||||
if (!(props.warehouse.materials[matName] instanceof Material)) continue;
|
||||
if (!props.warehouse.materials[matName]) continue;
|
||||
// Only create UI for materials that are relevant for the industry or in stock
|
||||
const isInStock = props.warehouse.materials[matName].qty > 0;
|
||||
const isRelevant = isRelevantMaterial(matName, division);
|
||||
@ -113,7 +111,7 @@ function WarehouseRoot(props: IProps): React.ReactElement {
|
||||
if (division.makesProducts && Object.keys(division.products).length > 0) {
|
||||
for (const productName of Object.keys(division.products)) {
|
||||
const product = division.products[productName];
|
||||
if (!(product instanceof Product)) continue;
|
||||
if (!product) continue;
|
||||
products.push(
|
||||
<ProductElem rerender={props.rerender} city={props.currentCity} key={productName} product={product} />,
|
||||
);
|
||||
@ -217,7 +215,7 @@ function WarehouseRoot(props: IProps): React.ReactElement {
|
||||
}
|
||||
|
||||
export function IndustryWarehouse(props: IProps): React.ReactElement {
|
||||
if (props.warehouse instanceof Warehouse) {
|
||||
if (props.warehouse) {
|
||||
return <WarehouseRoot {...props} />;
|
||||
} else {
|
||||
return <EmptyWarehouse rerender={props.rerender} city={props.currentCity} />;
|
||||
|
@ -2,7 +2,6 @@
|
||||
// (right-side panel in the Industry UI)
|
||||
import React, { useState } from "react";
|
||||
|
||||
import { OfficeSpace } from "../OfficeSpace";
|
||||
import { Material } from "../Material";
|
||||
import { Warehouse } from "../Warehouse";
|
||||
import { ExportModal } from "./modals/ExportModal";
|
||||
@ -45,7 +44,7 @@ export function MaterialElem(props: IMaterialProps): React.ReactElement {
|
||||
const mat = props.mat;
|
||||
const markupLimit = mat.getMarkupLimit();
|
||||
const office = division.offices[city];
|
||||
if (!(office instanceof OfficeSpace)) {
|
||||
if (!office) {
|
||||
throw new Error(`Could not get OfficeSpace object for this city (${city})`);
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,6 @@ import React, { useState } from "react";
|
||||
|
||||
import { Warehouse } from "../../Warehouse";
|
||||
import { SetSmartSupply, SetSmartSupplyUseLeftovers } from "../../Actions";
|
||||
import { Material } from "../../Material";
|
||||
import { dialogBoxCreate } from "../../../ui/React/DialogBox";
|
||||
import { Modal } from "../../../ui/React/Modal";
|
||||
import { useDivision } from "../Context";
|
||||
@ -62,7 +61,7 @@ export function SmartSupplyModal(props: IProps): React.ReactElement {
|
||||
// Create React components for materials
|
||||
const mats = [];
|
||||
for (const matName of Object.keys(props.warehouse.materials)) {
|
||||
if (!(props.warehouse.materials[matName] instanceof Material)) continue;
|
||||
if (!props.warehouse.materials[matName]) continue;
|
||||
if (!Object.keys(division.reqMats).includes(matName)) continue;
|
||||
mats.push(<Leftover key={matName} warehouse={props.warehouse} matName={matName} />);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { Player } from "./Player";
|
||||
import { Bladeburner } from "./Bladeburner/Bladeburner";
|
||||
import { AugmentationNames } from "./Augmentation/data/AugmentationNames";
|
||||
|
||||
import React, { useEffect } from "react";
|
||||
@ -42,11 +41,11 @@ export function DevMenuRoot(): React.ReactElement {
|
||||
<Servers />
|
||||
<Companies />
|
||||
|
||||
{Player.bladeburner instanceof Bladeburner && <BladeburnerElem />}
|
||||
{Player.bladeburner && <BladeburnerElem />}
|
||||
|
||||
{Player.inGang() && <Gang />}
|
||||
{Player.gang && <Gang />}
|
||||
|
||||
{Player.hasCorporation() && <Corporation />}
|
||||
{Player.corporation && <Corporation />}
|
||||
|
||||
<CodingContracts />
|
||||
|
||||
|
@ -38,9 +38,7 @@ export function joinFaction(faction: Faction): void {
|
||||
|
||||
//Determine what factions you are banned from now that you have joined this faction
|
||||
for (const enemy of factionInfo.enemies) {
|
||||
if (Factions[enemy] instanceof Faction) {
|
||||
Factions[enemy].isBanned = true;
|
||||
}
|
||||
if (Factions[enemy]) Factions[enemy].isBanned = true;
|
||||
}
|
||||
for (let i = 0; i < Player.factionInvitations.length; ++i) {
|
||||
if (Player.factionInvitations[i] == faction.name || Factions[Player.factionInvitations[i]].isBanned) {
|
||||
|
@ -43,9 +43,6 @@ export function initFactions(): void {
|
||||
//Faction object and deletes the old Faction Object from "Factions". Then
|
||||
//reinserts the new Faction object
|
||||
function resetFaction(newFactionObject: Faction): void {
|
||||
if (!(newFactionObject instanceof Faction)) {
|
||||
throw new Error("Invalid argument 'newFactionObject' passed into resetFaction()");
|
||||
}
|
||||
const factionName: string = newFactionObject.name;
|
||||
if (factionExists(factionName)) {
|
||||
newFactionObject.favor = Factions[factionName].favor;
|
||||
|
@ -102,7 +102,7 @@ function MainPage({ faction, rerender, onAugmentations }: IMainProps): React.Rea
|
||||
|
||||
// We have a special flag for whether the player this faction is the player's
|
||||
// gang faction because if the player has a gang, they cannot do any other action
|
||||
const isPlayersGang = Player.inGang() && Player.getGangName() === faction.name;
|
||||
const isPlayersGang = Player.gang && Player.getGangName() === faction.name;
|
||||
|
||||
// Flags for whether special options (gang, sleeve purchases, donate, etc.)
|
||||
// should be shown
|
||||
|
@ -16,7 +16,7 @@ export function GangButton({ faction }: IProps): React.ReactElement {
|
||||
if (
|
||||
!GangConstants.Names.includes(faction.name) || // not even a gang
|
||||
!Player.isAwareOfGang() || // doesn't know about gang
|
||||
(Player.inGang() && Player.getGangName() !== faction.name) // already in another gang
|
||||
(Player.gang && Player.getGangName() !== faction.name) // already in another gang
|
||||
) {
|
||||
return <></>;
|
||||
}
|
||||
@ -28,7 +28,7 @@ export function GangButton({ faction }: IProps): React.ReactElement {
|
||||
description: "",
|
||||
};
|
||||
|
||||
if (Player.inGang()) {
|
||||
if (Player.gang) {
|
||||
data = {
|
||||
enabled: true,
|
||||
title: "Manage Gang",
|
||||
|
@ -4,7 +4,6 @@
|
||||
* balance point to keep them from running out of control
|
||||
*/
|
||||
|
||||
import { Faction } from "../Faction/Faction";
|
||||
import { Factions } from "../Faction/Factions";
|
||||
|
||||
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
||||
@ -123,7 +122,7 @@ export class Gang {
|
||||
this.respect += gain;
|
||||
// Faction reputation gains is respect gain divided by some constant
|
||||
const fac = Factions[this.facName];
|
||||
if (!(fac instanceof Faction)) {
|
||||
if (!fac) {
|
||||
dialogBoxCreate(
|
||||
"ERROR: Could not get Faction associates with your gang. This is a bug, please report to game dev",
|
||||
);
|
||||
|
@ -3,7 +3,6 @@
|
||||
*/
|
||||
import React, { useState, useEffect } from "react";
|
||||
|
||||
import { HashManager } from "../HashManager";
|
||||
import { HashUpgrades } from "../HashUpgrades";
|
||||
|
||||
import { Hashes } from "../../ui/React/Hashes";
|
||||
@ -29,7 +28,7 @@ export function HashUpgradeModal(props: IProps): React.ReactElement {
|
||||
}, []);
|
||||
|
||||
const hashManager = Player.hashManager;
|
||||
if (!(hashManager instanceof HashManager)) {
|
||||
if (!hashManager) {
|
||||
throw new Error(`Player does not have a HashManager)`);
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ function constructLocation(p: IConstructorParams): Location {
|
||||
throw new Error(`Invalid constructor parameters for Location. No 'name' property`);
|
||||
}
|
||||
|
||||
if (Locations[p.name] instanceof Location) {
|
||||
if (Locations[p.name]) {
|
||||
console.warn(`Property with name ${p.name} already exists and is being overwritten`);
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,6 @@ import { Locations } from "../Locations";
|
||||
import { LocationName } from "../data/LocationNames";
|
||||
|
||||
import { Companies } from "../../Company/Companies";
|
||||
import { CompanyPosition } from "../../Company/CompanyPosition";
|
||||
import { CompanyPositions } from "../../Company/CompanyPositions";
|
||||
import * as posNames from "../../Company/data/companypositionnames";
|
||||
|
||||
@ -174,7 +173,7 @@ export function CompanyLocation(props: IProps): React.ReactElement {
|
||||
}
|
||||
|
||||
const pos = companyPosition;
|
||||
if (pos instanceof CompanyPosition) {
|
||||
if (pos) {
|
||||
Player.startWork(
|
||||
new CompanyWork({
|
||||
singularity: false,
|
||||
|
@ -350,7 +350,7 @@ export function NetscriptBladeburner(): InternalAPI<INetscriptBladeburner> {
|
||||
if (BitNodeMultipliers.BladeburnerRank === 0) {
|
||||
return false; // Disabled in this bitnode
|
||||
}
|
||||
if (Player.bladeburner instanceof Bladeburner) {
|
||||
if (Player.bladeburner) {
|
||||
return true; // Already member
|
||||
} else if (
|
||||
Player.skills.strength >= 100 &&
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { FactionNames } from "../Faction/data/FactionNames";
|
||||
import { GangConstants } from "../Gang/data/Constants";
|
||||
import { Player as player } from "../Player";
|
||||
import { Player } from "../Player";
|
||||
import { Gang } from "../Gang/Gang";
|
||||
import { AllGangs } from "../Gang/AllGangs";
|
||||
import { GangMemberTasks } from "../Gang/GangMemberTasks";
|
||||
@ -22,18 +22,14 @@ import {
|
||||
import { InternalAPI, NetscriptContext } from "../Netscript/APIWrapper";
|
||||
|
||||
export function NetscriptGang(): InternalAPI<IGang> {
|
||||
const checkGangApiAccess = function (ctx: NetscriptContext): void {
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Must have joined gang");
|
||||
const hasAccess = gang instanceof Gang;
|
||||
if (!hasAccess) {
|
||||
throw helpers.makeRuntimeErrorMsg(ctx, `You do not currently have a Gang`);
|
||||
}
|
||||
/** Functions as an API check and also returns the gang object */
|
||||
const getGang = function (ctx: NetscriptContext): Gang {
|
||||
if (!Player.gang) throw helpers.makeRuntimeErrorMsg(ctx, "Must have joined gang", "API ACCESS");
|
||||
return Player.gang;
|
||||
};
|
||||
|
||||
const getGangMember = function (ctx: NetscriptContext, name: string): GangMember {
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Must have joined gang");
|
||||
const gang = getGang(ctx);
|
||||
for (const member of gang.members) if (member.name === name) return member;
|
||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid gang member: '${name}'`);
|
||||
};
|
||||
@ -54,27 +50,23 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
const faction = helpers.string(ctx, "faction", _faction);
|
||||
// this list is copied from Faction/ui/Root.tsx
|
||||
|
||||
if (!player.canAccessGang() || !GangConstants.Names.includes(faction)) return false;
|
||||
if (player.inGang()) return false;
|
||||
if (!player.factions.includes(faction)) return false;
|
||||
if (!Player.canAccessGang() || !GangConstants.Names.includes(faction)) return false;
|
||||
if (Player.gang) return false;
|
||||
if (!Player.factions.includes(faction)) return false;
|
||||
|
||||
const isHacking = faction === FactionNames.NiteSec || faction === FactionNames.TheBlackHand;
|
||||
player.startGang(faction, isHacking);
|
||||
Player.startGang(faction, isHacking);
|
||||
return true;
|
||||
},
|
||||
inGang: () => (): boolean => {
|
||||
return player.inGang();
|
||||
return Player.gang ? true : false;
|
||||
},
|
||||
getMemberNames: (ctx: NetscriptContext) => (): string[] => {
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
return gang.members.map((member) => member.name);
|
||||
},
|
||||
getGangInformation: (ctx: NetscriptContext) => (): GangGenInfo => {
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
return {
|
||||
faction: gang.facName,
|
||||
isHacking: gang.isHackingGang,
|
||||
@ -91,7 +83,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
};
|
||||
},
|
||||
getOtherGangInformation: (ctx: NetscriptContext) => (): GangOtherInfo => {
|
||||
checkGangApiAccess(ctx);
|
||||
getGang(ctx);
|
||||
const cpy: Record<string, GangOtherInfoObject> = {};
|
||||
for (const gang of Object.keys(AllGangs)) {
|
||||
cpy[gang] = Object.assign({}, AllGangs[gang]);
|
||||
@ -103,9 +95,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_memberName: unknown): GangMemberInfo => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
const member = getGangMember(ctx, memberName);
|
||||
return {
|
||||
name: member.name,
|
||||
@ -155,18 +145,14 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
};
|
||||
},
|
||||
canRecruitMember: (ctx: NetscriptContext) => (): boolean => {
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
return gang.canRecruitMember();
|
||||
},
|
||||
recruitMember:
|
||||
(ctx: NetscriptContext) =>
|
||||
(_memberName: unknown): boolean => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
const recruited = gang.recruitMember(memberName);
|
||||
if (recruited) {
|
||||
ctx.workerScript.log("gang.recruitMember", () => `Successfully recruited Gang Member '${memberName}'`);
|
||||
@ -177,9 +163,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
return recruited;
|
||||
},
|
||||
getTaskNames: (ctx: NetscriptContext) => (): string[] => {
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
const tasks = gang.getAllTaskNames();
|
||||
tasks.unshift("Unassigned");
|
||||
return tasks;
|
||||
@ -189,10 +173,8 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(_memberName: unknown, _taskName: unknown): boolean => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
const taskName = helpers.string(ctx, "taskName", _taskName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = getGang(ctx);
|
||||
const member = getGangMember(ctx, memberName);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
if (!gang.getAllTaskNames().includes(taskName)) {
|
||||
ctx.workerScript.log(
|
||||
"gang.setMemberTask",
|
||||
@ -221,23 +203,21 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_taskName: unknown): GangTaskStats => {
|
||||
const taskName = helpers.string(ctx, "taskName", _taskName);
|
||||
checkGangApiAccess(ctx);
|
||||
getGang(ctx);
|
||||
const task = getGangTask(ctx, taskName);
|
||||
const copy = Object.assign({}, task);
|
||||
copy.territory = Object.assign({}, task.territory);
|
||||
return copy;
|
||||
},
|
||||
getEquipmentNames: (ctx: NetscriptContext) => (): string[] => {
|
||||
checkGangApiAccess(ctx);
|
||||
getGang(ctx);
|
||||
return Object.keys(GangMemberUpgrades);
|
||||
},
|
||||
getEquipmentCost:
|
||||
(ctx: NetscriptContext) =>
|
||||
(_equipName: unknown): number => {
|
||||
const equipName = helpers.string(ctx, "equipName", _equipName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
const upg = GangMemberUpgrades[equipName];
|
||||
if (upg === null) return Infinity;
|
||||
return gang.getUpgradeCost(upg);
|
||||
@ -246,7 +226,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_equipName: unknown): string => {
|
||||
const equipName = helpers.string(ctx, "equipName", _equipName);
|
||||
checkGangApiAccess(ctx);
|
||||
getGang(ctx);
|
||||
const upg = GangMemberUpgrades[equipName];
|
||||
if (upg == null) return "";
|
||||
return upg.getType();
|
||||
@ -255,7 +235,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_equipName: unknown): EquipmentStats => {
|
||||
const equipName = helpers.string(ctx, "equipName", _equipName);
|
||||
checkGangApiAccess(ctx);
|
||||
getGang(ctx);
|
||||
const equipment = GangMemberUpgrades[equipName];
|
||||
if (!equipment) {
|
||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid equipment: ${equipName}`);
|
||||
@ -268,9 +248,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(_memberName: unknown, _equipName: unknown): boolean => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
const equipName = helpers.string(ctx, "equipName", _equipName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
getGang(ctx);
|
||||
const member = getGangMember(ctx, memberName);
|
||||
const equipment = GangMemberUpgrades[equipName];
|
||||
if (!equipment) return false;
|
||||
@ -293,9 +271,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_memberName: unknown): GangMemberAscension | undefined => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
const member = getGangMember(ctx, memberName);
|
||||
if (!member.canAscend()) return;
|
||||
return gang.ascendMember(member, ctx.workerScript);
|
||||
@ -304,9 +280,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_memberName: unknown): GangMemberAscension | undefined => {
|
||||
const memberName = helpers.string(ctx, "memberName", _memberName);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
getGang(ctx);
|
||||
const member = getGangMember(ctx, memberName);
|
||||
if (!member.canAscend()) return;
|
||||
return {
|
||||
@ -318,9 +292,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_engage: unknown): void => {
|
||||
const engage = !!_engage;
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
if (engage) {
|
||||
gang.territoryWarfareEngaged = true;
|
||||
ctx.workerScript.log("gang.setTerritoryWarfare", () => "Engaging in Gang Territory Warfare");
|
||||
@ -333,9 +305,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
(ctx: NetscriptContext) =>
|
||||
(_otherGang: unknown): number => {
|
||||
const otherGang = helpers.string(ctx, "otherGang", _otherGang);
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
if (AllGangs[otherGang] == null) {
|
||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid gang: ${otherGang}`);
|
||||
}
|
||||
@ -346,9 +316,7 @@ export function NetscriptGang(): InternalAPI<IGang> {
|
||||
return playerPower / (otherPower + playerPower);
|
||||
},
|
||||
getBonusTime: (ctx: NetscriptContext) => (): number => {
|
||||
checkGangApiAccess(ctx);
|
||||
const gang = player.gang;
|
||||
if (gang === null) throw new Error("Should not be called without Gang");
|
||||
const gang = getGang(ctx);
|
||||
return Math.round(gang.storedCycles / 5) * 1000;
|
||||
},
|
||||
};
|
||||
|
@ -19,7 +19,6 @@ import {
|
||||
} from "../ScriptEditor/NetscriptDefinitions";
|
||||
|
||||
import { findCrime } from "../Crime/CrimeHelpers";
|
||||
import { CompanyPosition } from "../Company/CompanyPosition";
|
||||
import { CompanyPositions } from "../Company/CompanyPositions";
|
||||
import { DarkWebItems } from "../DarkWeb/DarkWebItems";
|
||||
import { CityName } from "../Locations/data/CityNames";
|
||||
@ -76,9 +75,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
|
||||
const getCompany = function (ctx: NetscriptContext, name: string): Company {
|
||||
const company = Companies[name];
|
||||
if (company == null || !(company instanceof Company)) {
|
||||
throw helpers.makeRuntimeErrorMsg(ctx, `Invalid company name: '${name}'`);
|
||||
}
|
||||
if (!company) throw helpers.makeRuntimeErrorMsg(ctx, `Invalid company name: '${name}'`);
|
||||
return company;
|
||||
};
|
||||
|
||||
@ -784,7 +781,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
const focus = !!_focus;
|
||||
|
||||
// Make sure its a valid company
|
||||
if (companyName == null || companyName === "" || !(Companies[companyName] instanceof Company)) {
|
||||
if (companyName == null || companyName === "" || !Companies[companyName]) {
|
||||
helpers.log(ctx, () => `Invalid company: '${companyName}'`);
|
||||
return false;
|
||||
}
|
||||
@ -798,7 +795,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
// Check to make sure company position data is valid
|
||||
const companyPositionName = Player.jobs[companyName];
|
||||
const companyPosition = CompanyPositions[companyPositionName];
|
||||
if (companyPositionName === "" || !(companyPosition instanceof CompanyPosition)) {
|
||||
if (companyPositionName === "" || !companyPosition) {
|
||||
helpers.log(ctx, () => "You do not have a job");
|
||||
return false;
|
||||
}
|
||||
@ -953,7 +950,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
const faction = getFaction(ctx, facName);
|
||||
|
||||
// if the player is in a gang and the target faction is any of the gang faction, fail
|
||||
if (Player.inGang() && faction.name === Player.getGangFaction().name) {
|
||||
if (Player.gang && faction.name === Player.getGangFaction().name) {
|
||||
helpers.log(ctx, () => `You can't work for '${facName}' because youre managing a gang for it`);
|
||||
return false;
|
||||
}
|
||||
@ -1071,7 +1068,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
helpers.log(ctx, () => `You can't donate to '${facName}' because you aren't a member`);
|
||||
return false;
|
||||
}
|
||||
if (Player.inGang() && faction.name === Player.getGangFaction().name) {
|
||||
if (Player.gang && faction.name === Player.getGangFaction().name) {
|
||||
helpers.log(ctx, () => `You can't donate to '${facName}' because youre managing a gang for it`);
|
||||
return false;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as personMethods from "./PersonMethods";
|
||||
import { IPlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentation";
|
||||
import { PlayerOwnedAugmentation } from "../Augmentation/PlayerOwnedAugmentation";
|
||||
import { CityName } from "../Locations/data/CityNames";
|
||||
import { calculateSkill } from "./formulas/skill";
|
||||
import { calculateIntelligenceBonus } from "./formulas/intelligence";
|
||||
@ -33,8 +33,8 @@ export abstract class Person {
|
||||
mults = defaultMultipliers();
|
||||
|
||||
/** Augmentations */
|
||||
augmentations: IPlayerOwnedAugmentation[] = [];
|
||||
queuedAugmentations: IPlayerOwnedAugmentation[] = [];
|
||||
augmentations: PlayerOwnedAugmentation[] = [];
|
||||
queuedAugmentations: PlayerOwnedAugmentation[] = [];
|
||||
|
||||
/** City that the person is in */
|
||||
city: CityName = CityName.Sector12;
|
||||
|
@ -198,6 +198,6 @@ export function updateSkillLevels(this: Person): void {
|
||||
this.hp.current = Math.round(this.hp.max * ratio);
|
||||
}
|
||||
|
||||
export function hasAugmentation(this: Person, augName: string, ignoreQueued: boolean = false) {
|
||||
export function hasAugmentation(this: Person, augName: string, ignoreQueued = false) {
|
||||
return this.augmentations.some((a) => a.name === augName && (ignoreQueued || !this.queuedAugmentations.includes(a)));
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ import { PlayerOwnedSourceFile } from "../../SourceFile/PlayerOwnedSourceFile";
|
||||
import { Exploit } from "../../Exploits/Exploit";
|
||||
|
||||
import { LocationName } from "../../Locations/data/LocationNames";
|
||||
import { IPlayerOwnedAugmentation } from "../../Augmentation/PlayerOwnedAugmentation";
|
||||
import { Corporation } from "../../Corporation/Corporation";
|
||||
import { Gang } from "../../Gang/Gang";
|
||||
import { Bladeburner } from "../../Bladeburner/Bladeburner";
|
||||
|
@ -6,10 +6,7 @@ export function canAccessBladeburner(this: PlayerObject): boolean {
|
||||
}
|
||||
|
||||
export function inBladeburner(this: PlayerObject): boolean {
|
||||
if (this.bladeburner == null) {
|
||||
return false;
|
||||
}
|
||||
return this.bladeburner instanceof Bladeburner;
|
||||
return Boolean(this.bladeburner);
|
||||
}
|
||||
|
||||
export function startBladeburner(this: PlayerObject): void {
|
||||
|
@ -10,10 +10,7 @@ export function canAccessCorporation(this: PlayerObject): boolean {
|
||||
}
|
||||
|
||||
export function hasCorporation(this: PlayerObject): boolean {
|
||||
if (this.corporation == null) {
|
||||
return false;
|
||||
}
|
||||
return this.corporation instanceof Corporation;
|
||||
return Boolean(this.corporation);
|
||||
}
|
||||
|
||||
export function startCorporation(this: PlayerObject, corpName: string, additionalShares = 0): void {
|
||||
|
@ -21,41 +21,22 @@ export function isAwareOfGang(this: PlayerObject): boolean {
|
||||
|
||||
export function getGangFaction(this: PlayerObject): Faction {
|
||||
const gang = this.gang;
|
||||
if (gang === null) {
|
||||
throw new Error("Cannot get gang faction because player is not in a gang.");
|
||||
}
|
||||
if (gang === null) throw new Error("Cannot get gang faction because player is not in a gang.");
|
||||
|
||||
const fac = Factions[gang.facName];
|
||||
if (fac == null) {
|
||||
throw new Error(`Gang has invalid faction name: ${gang.facName}`);
|
||||
}
|
||||
if (fac == null) throw new Error(`Gang has invalid faction name: ${gang.facName}`);
|
||||
|
||||
return fac;
|
||||
}
|
||||
|
||||
export function getGangName(this: PlayerObject): string {
|
||||
if (!this.inGang()) return "";
|
||||
const gang = this.gang;
|
||||
if (gang === null) {
|
||||
throw new Error("Cannot get gang faction because player is not in a gang.");
|
||||
}
|
||||
return gang.facName;
|
||||
return gang ? gang.facName : "";
|
||||
}
|
||||
|
||||
export function hasGangWith(this: PlayerObject, facName: string): boolean {
|
||||
if (!this.inGang()) return false;
|
||||
const gang = this.gang;
|
||||
if (gang === null) {
|
||||
throw new Error("Cannot get gang faction because player is not in a gang.");
|
||||
}
|
||||
return gang.facName === facName;
|
||||
}
|
||||
|
||||
export function inGang(this: PlayerObject): boolean {
|
||||
if (this.gang == null || this.gang == undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.gang instanceof Gang;
|
||||
return gang ? gang.facName === facName : false;
|
||||
}
|
||||
|
||||
export function startGang(this: PlayerObject, factionName: string, hacking: boolean): void {
|
||||
@ -67,3 +48,7 @@ export function startGang(this: PlayerObject, factionName: string, hacking: bool
|
||||
}
|
||||
fac.playerReputation = 0;
|
||||
}
|
||||
|
||||
export function inGang(this: PlayerObject) {
|
||||
return Boolean(this.gang);
|
||||
}
|
||||
|
@ -105,15 +105,7 @@ export function prestigeAugmentation(this: PlayerObject): void {
|
||||
this.sleeves.push(new Sleeve());
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.sleeves.length; ++i) {
|
||||
if (this.sleeves[i] instanceof Sleeve) {
|
||||
if (this.sleeves[i].shock >= 100) {
|
||||
this.sleeves[i].synchronize();
|
||||
} else {
|
||||
this.sleeves[i].shockRecovery();
|
||||
}
|
||||
}
|
||||
}
|
||||
this.sleeves.forEach((sleeve) => (sleeve.shock >= 100 ? sleeve.synchronize() : sleeve.shockRecovery()));
|
||||
|
||||
this.lastUpdate = new Date().getTime();
|
||||
|
||||
@ -137,13 +129,7 @@ export function prestigeSourceFile(this: PlayerObject): void {
|
||||
this.prestigeAugmentation();
|
||||
this.karma = 0;
|
||||
// Duplicate sleeves are reset to level 1 every Bit Node (but the number of sleeves you have persists)
|
||||
for (let i = 0; i < this.sleeves.length; ++i) {
|
||||
if (this.sleeves[i] instanceof Sleeve) {
|
||||
this.sleeves[i].prestige();
|
||||
} else {
|
||||
this.sleeves[i] = new Sleeve();
|
||||
}
|
||||
}
|
||||
this.sleeves.forEach((sleeve) => sleeve.prestige());
|
||||
|
||||
if (this.bitNodeN === 10) {
|
||||
for (let i = 0; i < this.sleeves.length; i++) {
|
||||
@ -284,7 +270,7 @@ export function hospitalize(this: PlayerObject): number {
|
||||
//the applyToCompany() Netscript Singularity function
|
||||
export function applyForJob(this: PlayerObject, entryPosType: CompanyPosition, sing = false): boolean {
|
||||
const company = Companies[this.location]; //Company being applied to
|
||||
if (!(company instanceof Company)) {
|
||||
if (!company) {
|
||||
console.error(`Could not find company that matches the location: ${this.location}. Player.applyToCompany() failed`);
|
||||
return false;
|
||||
}
|
||||
@ -1131,7 +1117,7 @@ export function gainCodingContractReward(this: PlayerObject, reward: ICodingCont
|
||||
/* eslint-disable no-case-declarations */
|
||||
switch (reward.type) {
|
||||
case CodingContractRewardType.FactionReputation:
|
||||
if (reward.name == null || !(Factions[reward.name] instanceof Faction)) {
|
||||
if (reward.name == null || !Factions[reward.name]) {
|
||||
// If no/invalid faction was designated, just give rewards to all factions
|
||||
reward.type = CodingContractRewardType.FactionReputationAll;
|
||||
return this.gainCodingContractReward(reward);
|
||||
@ -1156,14 +1142,12 @@ export function gainCodingContractReward(this: PlayerObject, reward: ICodingCont
|
||||
|
||||
const gainPerFaction = Math.floor(totalGain / factions.length);
|
||||
for (const facName of factions) {
|
||||
if (!(Factions[facName] instanceof Faction)) {
|
||||
continue;
|
||||
}
|
||||
if (!Factions[facName]) continue;
|
||||
Factions[facName].playerReputation += gainPerFaction;
|
||||
}
|
||||
return `Gained ${gainPerFaction} reputation for each of the following factions: ${factions.toString()}`;
|
||||
case CodingContractRewardType.CompanyReputation: {
|
||||
if (reward.name == null || !(Companies[reward.name] instanceof Company)) {
|
||||
if (reward.name == null || !Companies[reward.name]) {
|
||||
//If no/invalid company was designated, just give rewards to all factions
|
||||
reward.type = CodingContractRewardType.FactionReputationAll;
|
||||
return this.gainCodingContractReward(reward);
|
||||
|
@ -24,7 +24,6 @@ import { Contracts } from "../../Bladeburner/data/Contracts";
|
||||
|
||||
import { CONSTANTS } from "../../Constants";
|
||||
|
||||
import { Faction } from "../../Faction/Faction";
|
||||
import { Factions } from "../../Faction/Factions";
|
||||
|
||||
import { CityName } from "../../Locations/data/CityNames";
|
||||
@ -307,7 +306,7 @@ export class Sleeve extends Person {
|
||||
* Returns boolean indicating success
|
||||
*/
|
||||
workForCompany(companyName: string): boolean {
|
||||
if (!(Companies[companyName] instanceof Company) || Player.jobs[companyName] == null) {
|
||||
if (!Companies[companyName] || Player.jobs[companyName] == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -327,7 +326,7 @@ export class Sleeve extends Person {
|
||||
*/
|
||||
workForFaction(factionName: string, workType: string): boolean {
|
||||
const faction = Factions[factionName];
|
||||
if (factionName === "" || !faction || !(faction instanceof Faction) || !Player.factions.includes(factionName)) {
|
||||
if (factionName === "" || !faction || !Player.factions.includes(factionName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ export function findPurchasableAugs(this: Sleeve): Augmentation[] {
|
||||
|
||||
// If player is in a gang, then we return all augs that the player
|
||||
// has enough reputation for (since that gang offers all augs)
|
||||
if (Player.inGang()) {
|
||||
if (Player.gang) {
|
||||
const fac = Player.getGangFaction();
|
||||
const gangAugs = getFactionAugmentationsFiltered(fac);
|
||||
|
||||
|
@ -4,11 +4,9 @@ import { StaticAugmentations } from "./Augmentation/StaticAugmentations";
|
||||
import { augmentationExists, initAugmentations } from "./Augmentation/AugmentationHelpers";
|
||||
import { AugmentationNames } from "./Augmentation/data/AugmentationNames";
|
||||
import { initBitNodeMultipliers } from "./BitNode/BitNode";
|
||||
import { Bladeburner } from "./Bladeburner/Bladeburner";
|
||||
import { Companies, initCompanies } from "./Company/Companies";
|
||||
import { resetIndustryResearchTrees } from "./Corporation/IndustryData";
|
||||
import { Programs } from "./Programs/Programs";
|
||||
import { Faction } from "./Faction/Faction";
|
||||
import { Factions, initFactions } from "./Faction/Factions";
|
||||
import { joinFaction } from "./Faction/FactionHelpers";
|
||||
import { updateHashManagerCapacity } from "./Hacknet/HacknetHelpers";
|
||||
@ -108,11 +106,9 @@ export function prestigeAugmentation(): void {
|
||||
|
||||
// Gang
|
||||
const gang = Player.gang;
|
||||
if (Player.inGang() && gang !== null) {
|
||||
if (gang) {
|
||||
const faction = Factions[gang.facName];
|
||||
if (faction instanceof Faction) {
|
||||
joinFaction(faction);
|
||||
}
|
||||
if (faction) joinFaction(faction);
|
||||
const penalty = 0.95;
|
||||
for (const m of gang.members) {
|
||||
m.hack_asc_points *= penalty;
|
||||
@ -130,7 +126,7 @@ export function prestigeAugmentation(): void {
|
||||
}
|
||||
|
||||
// Cancel Bladeburner action
|
||||
if (Player.bladeburner instanceof Bladeburner) {
|
||||
if (Player.bladeburner) {
|
||||
Player.bladeburner.prestige();
|
||||
}
|
||||
|
||||
|
@ -97,9 +97,8 @@ class BitburnerSaveObject {
|
||||
this.LastExportBonus = JSON.stringify(ExportBonus.LastExportBonus);
|
||||
this.StaneksGiftSave = JSON.stringify(staneksGift);
|
||||
|
||||
if (Player.inGang()) {
|
||||
this.AllGangsSave = JSON.stringify(AllGangs);
|
||||
}
|
||||
if (Player.gang) this.AllGangsSave = JSON.stringify(AllGangs);
|
||||
|
||||
const saveString = btoa(unescape(encodeURIComponent(JSON.stringify(this))));
|
||||
|
||||
return saveString;
|
||||
@ -724,7 +723,7 @@ function loadGame(saveString: string): boolean {
|
||||
console.error("ERROR: Failed to parse last export bonus Settings " + err);
|
||||
}
|
||||
}
|
||||
if (Player.inGang() && saveObj.hasOwnProperty("AllGangsSave")) {
|
||||
if (Player.gang && saveObj.hasOwnProperty("AllGangsSave")) {
|
||||
try {
|
||||
loadAllGangs(saveObj.AllGangsSave);
|
||||
} catch (e) {
|
||||
|
@ -164,15 +164,8 @@ export class BaseServer {
|
||||
}
|
||||
|
||||
removeContract(contract: CodingContract | string): void {
|
||||
if (contract instanceof CodingContract) {
|
||||
this.contracts = this.contracts.filter((c) => {
|
||||
return c.fn !== contract.fn;
|
||||
});
|
||||
} else {
|
||||
this.contracts = this.contracts.filter((c) => {
|
||||
return c.fn !== contract;
|
||||
});
|
||||
}
|
||||
const index = this.contracts.findIndex((c) => c.fn === (typeof contract === "string" ? contract : contract.fn));
|
||||
if (index > -1) this.contracts.splice(index, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6,10 +6,8 @@ import { initAugmentations } from "./Augmentation/AugmentationHelpers";
|
||||
import { AugmentationNames } from "./Augmentation/data/AugmentationNames";
|
||||
import { initBitNodeMultipliers } from "./BitNode/BitNode";
|
||||
import { initDarkWebItems } from "./DarkWeb/DarkWebItems";
|
||||
import { Bladeburner } from "./Bladeburner/Bladeburner";
|
||||
import { generateRandomContract } from "./CodingContractGenerator";
|
||||
import { initCompanies } from "./Company/Companies";
|
||||
import { Corporation } from "./Corporation/Corporation";
|
||||
import { CONSTANTS } from "./Constants";
|
||||
import { Factions, initFactions } from "./Faction/Factions";
|
||||
import { staneksGift } from "./CotMG/Helper";
|
||||
@ -101,28 +99,20 @@ const Engine: {
|
||||
processStockPrices(numCycles);
|
||||
}
|
||||
|
||||
// Gang, if applicable
|
||||
if (Player.inGang() && Player.gang !== null) {
|
||||
Player.gang.process(numCycles);
|
||||
}
|
||||
// Gang
|
||||
if (Player.gang) Player.gang.process(numCycles);
|
||||
|
||||
// Staneks gift
|
||||
staneksGift.process(numCycles);
|
||||
|
||||
// Corporation
|
||||
if (Player.corporation instanceof Corporation) {
|
||||
// Stores cycles in a "buffer". Processed separately using Engine Counters
|
||||
Player.corporation.storeCycles(numCycles);
|
||||
}
|
||||
if (Player.corporation) Player.corporation.storeCycles(numCycles);
|
||||
|
||||
if (Player.bladeburner instanceof Bladeburner) {
|
||||
Player.bladeburner.storeCycles(numCycles);
|
||||
}
|
||||
// Bladeburner
|
||||
if (Player.bladeburner) Player.bladeburner.storeCycles(numCycles);
|
||||
|
||||
// Sleeves
|
||||
for (let i = 0; i < Player.sleeves.length; ++i) {
|
||||
Player.sleeves[i].process(numCycles);
|
||||
}
|
||||
Player.sleeves.forEach((sleeve) => sleeve.process(numCycles));
|
||||
|
||||
// Counters
|
||||
Engine.decrementAllCounters(numCycles);
|
||||
@ -205,11 +195,11 @@ const Engine: {
|
||||
Engine.Counters.messages = 150;
|
||||
}
|
||||
}
|
||||
if (Player.corporation instanceof Corporation) {
|
||||
if (Player.corporation) {
|
||||
Player.corporation.process();
|
||||
}
|
||||
if (Engine.Counters.mechanicProcess <= 0) {
|
||||
if (Player.bladeburner instanceof Bladeburner) {
|
||||
if (Player.bladeburner) {
|
||||
try {
|
||||
Player.bladeburner.process();
|
||||
} catch (e) {
|
||||
@ -328,39 +318,25 @@ const Engine: {
|
||||
}
|
||||
|
||||
// Gang progress for BitNode 2
|
||||
const gang = Player.gang;
|
||||
if (Player.inGang() && gang !== null) {
|
||||
gang.process(numCyclesOffline);
|
||||
}
|
||||
if (Player.gang) Player.gang.process(numCyclesOffline);
|
||||
|
||||
// Corporation offline progress
|
||||
if (Player.corporation instanceof Corporation) {
|
||||
Player.corporation.storeCycles(numCyclesOffline);
|
||||
}
|
||||
if (Player.corporation) Player.corporation.storeCycles(numCyclesOffline);
|
||||
|
||||
// Bladeburner offline progress
|
||||
if (Player.bladeburner instanceof Bladeburner) {
|
||||
Player.bladeburner.storeCycles(numCyclesOffline);
|
||||
}
|
||||
if (Player.bladeburner) Player.bladeburner.storeCycles(numCyclesOffline);
|
||||
|
||||
staneksGift.process(numCyclesOffline);
|
||||
|
||||
// Sleeves offline progress
|
||||
for (let i = 0; i < Player.sleeves.length; ++i) {
|
||||
Player.sleeves[i].process(numCyclesOffline);
|
||||
}
|
||||
Player.sleeves.forEach((sleeve) => sleeve.process(numCyclesOffline));
|
||||
|
||||
// Update total playtime
|
||||
const time = numCyclesOffline * CONSTANTS._idleSpeed;
|
||||
if (Player.totalPlaytime == null) {
|
||||
Player.totalPlaytime = 0;
|
||||
}
|
||||
if (Player.playtimeSinceLastAug == null) {
|
||||
Player.playtimeSinceLastAug = 0;
|
||||
}
|
||||
if (Player.playtimeSinceLastBitnode == null) {
|
||||
Player.playtimeSinceLastBitnode = 0;
|
||||
}
|
||||
Player.totalPlaytime ??= 0;
|
||||
Player.playtimeSinceLastAug ??= 0;
|
||||
Player.playtimeSinceLastBitnode ??= 0;
|
||||
|
||||
Player.totalPlaytime += time;
|
||||
Player.playtimeSinceLastAug += time;
|
||||
Player.playtimeSinceLastBitnode += time;
|
||||
|
@ -4,7 +4,6 @@ import Typography from "@mui/material/Typography";
|
||||
import { uniqueId } from "lodash";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Companies } from "../Company/Companies";
|
||||
import { Company } from "../Company/Company";
|
||||
import { CONSTANTS } from "../Constants";
|
||||
import { LocationName } from "../Locations/data/LocationNames";
|
||||
import { Locations } from "../Locations/Locations";
|
||||
@ -430,7 +429,7 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
|
||||
if (isCompanyWork(Player.currentWork)) {
|
||||
const comp = Companies[Player.currentWork.companyName];
|
||||
if (comp == null || !(comp instanceof Company)) {
|
||||
if (comp) {
|
||||
workInfo = {
|
||||
buttons: {
|
||||
cancel: () => Router.toTerminal(),
|
||||
|
Loading…
Reference in New Issue
Block a user