mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-18 04:05:46 +01:00
Fix tons of typos
This commit is contained in:
parent
f8a3a046de
commit
f6f023eeb4
@ -7,5 +7,5 @@ presence, as indicated by the Bladeburners' ability to destroy it via force.
|
||||
Also, hydroflame (irl) has stated that the glitch in Ishima is the physical
|
||||
location of the World Daemon in a node. When the player destroys a BitNode, it is
|
||||
currently unknown what becomes of it, or the people trapped within. However, based
|
||||
on the way jump3r and Deadalus help the player to destroy it, doing so is somehow
|
||||
on the way jump3r and Daedalus help the player to destroy it, doing so is somehow
|
||||
aligned with their goals.
|
@ -101,7 +101,7 @@ export function removeAlias(name: string): boolean {
|
||||
export function substituteAliases(origCommand: string): string {
|
||||
const commandArray = origCommand.split(" ");
|
||||
if (commandArray.length > 0) {
|
||||
// For the alias and unalias commands, dont substite
|
||||
// For the alias and unalias commands, don't substitute
|
||||
if (commandArray[0] === "unalias" || commandArray[0] === "alias") {
|
||||
return commandArray.join(" ");
|
||||
}
|
||||
|
@ -607,7 +607,7 @@ export class Augmentation {
|
||||
return Generic_toJSON("Augmentation", this);
|
||||
}
|
||||
|
||||
// Initiatizes a Augmentation object from a JSON save state.
|
||||
// Initializes a Augmentation object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): Augmentation {
|
||||
return Generic_fromJSON(Augmentation, value.data);
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ export function getGenericAugmentationPriceMultiplier(): number {
|
||||
return Math.pow(getBaseAugmentationPriceMultiplier(), Player.queuedAugmentations.length);
|
||||
}
|
||||
|
||||
//Resets an Augmentation during (re-initizliation)
|
||||
//Resets an Augmentation during (re-initialization)
|
||||
function resetAugmentation(aug: Augmentation): void {
|
||||
aug.addToFactions(aug.factions);
|
||||
const name = aug.name;
|
||||
|
@ -150,8 +150,8 @@ export const initSoAAugmentations = (): Augmentation[] => [
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"Extra-occular neurons taken from old martial art master. Injecting them gives the user the ability to " +
|
||||
"predict the enemy's attack before they even know it themself.",
|
||||
"Extra-ocular neurons taken from old martial art master. Injecting them gives the user the ability to " +
|
||||
"predict the enemy's attack before they even know it themselves.",
|
||||
stats: (
|
||||
<>This augmentation makes the Slash minigame easier by showing you via an indicator when the slash in coming.</>
|
||||
),
|
||||
@ -617,7 +617,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
||||
info:
|
||||
"Electrical signals are used to induce a new, artificial form of myelinogenesis in the human body. " +
|
||||
"This process results in the proliferation of new, synthetic myelin sheaths in the nervous " +
|
||||
"system. These myelin sheaths can propogate neuro-signals much faster than their organic " +
|
||||
"system. These myelin sheaths can propagate neuro-signals much faster than their organic " +
|
||||
"counterparts, leading to greater processing speeds and better brain function.",
|
||||
hacking_speed: 1.03,
|
||||
hacking_exp: 1.1,
|
||||
@ -1519,7 +1519,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
||||
moneyCost: 2e9,
|
||||
info:
|
||||
"A 'Probability Computation Matrix' is installed in the frontal cortex. This implant " +
|
||||
"uses advanced mathematical algorithims to rapidly identify and compute statistical " +
|
||||
"uses advanced mathematical algorithms to rapidly identify and compute statistical " +
|
||||
"outcomes of nearly every situation.",
|
||||
charisma: 1.0777,
|
||||
charisma_exp: 1.0777,
|
||||
@ -1535,7 +1535,7 @@ export const initGeneralAugmentations = (): Augmentation[] => [
|
||||
name: AugmentationNames.INFRARet,
|
||||
repCost: 7.5e3,
|
||||
moneyCost: 3e7,
|
||||
info: "A tiny chip that sits behind the retinae. This implant lets the user visually detect infrared radiation.",
|
||||
info: "A tiny chip that sits behind the retina. This implant lets the user visually detect infrared radiation.",
|
||||
crime_success: 1.25,
|
||||
crime_money: 1.1,
|
||||
dexterity: 1.1,
|
||||
@ -1932,7 +1932,7 @@ export const initBladeburnerAugmentations = (): Augmentation[] => [
|
||||
"weaponized by Bladeburner units to be used against Synthoids.",
|
||||
stats: (
|
||||
<>
|
||||
This augmentation allows you to perform Bladeburner actions and other actions (such as working, commiting
|
||||
This augmentation allows you to perform Bladeburner actions and other actions (such as working, committing
|
||||
crimes, etc.) at the same time.
|
||||
</>
|
||||
),
|
||||
|
@ -36,7 +36,7 @@ const NeuroFluxDisplay = (): React.ReactElement => {
|
||||
<Typography variant="h5">Bitburner blood donation community program</Typography>
|
||||
<Typography>
|
||||
The blood donation program is a continuous real life event started on 2022-04-01. To participate simply go
|
||||
donate blood, plasma, or platelets to your local organisation and take a picture as proof (hide your personal
|
||||
donate blood, plasma, or platelets to your local organization and take a picture as proof (hide your personal
|
||||
information). Then send the proof to hydroflame on reddit or discord.
|
||||
</Typography>
|
||||
<Typography>Currently accumulated {CONSTANTS.Donations} donations.</Typography>
|
||||
|
@ -83,7 +83,7 @@ export interface IBitNodeMultipliers {
|
||||
|
||||
/**
|
||||
* Influences how much money is produced by Hacknet Nodes.
|
||||
* Influeces the hash rate of Hacknet Servers (unlocked in BitNode-9)
|
||||
* Influences the hash rate of Hacknet Servers (unlocked in BitNode-9)
|
||||
*/
|
||||
HacknetNodeMoney: number;
|
||||
|
||||
@ -130,7 +130,7 @@ export interface IBitNodeMultipliers {
|
||||
/** Influences the growth percentage per cycle against a server. */
|
||||
ServerGrowthRate: number;
|
||||
|
||||
/** Influences the maxmimum money that a server can grow to. */
|
||||
/** Influences the maximum money that a server can grow to. */
|
||||
ServerMaxMoney: number;
|
||||
|
||||
/** Influences the initial money that a server starts with. */
|
||||
|
@ -299,7 +299,7 @@ function StanekMults({ mults }: IMultsProps): React.ReactElement {
|
||||
|
||||
const extraSize = mults.StaneksGiftExtraSize.toFixed(3);
|
||||
const rows: IBNMultRows = {
|
||||
StnakesGiftPowerMultiplier: { name: "Gift Power" },
|
||||
StaneksGiftPowerMultiplier: { name: "Gift Power" },
|
||||
StaneksGiftExtraSize: {
|
||||
name: "Base Size Modifier",
|
||||
content: `${mults.StaneksGiftExtraSize > defaultMultipliers.StaneksGiftExtraSize ? `+${extraSize}` : extraSize}`,
|
||||
|
@ -696,7 +696,7 @@ export class Bladeburner {
|
||||
|
||||
// Set variables
|
||||
if (args.length === 4) {
|
||||
const variable = args[1].toLowerCase(); // allows Action Type to be with or without capitalisation.
|
||||
const variable = args[1].toLowerCase(); // allows Action Type to be with or without capitalization.
|
||||
const val = args[2];
|
||||
|
||||
let highLow = false; // True for high, false for low
|
||||
@ -1416,7 +1416,7 @@ export class Bladeburner {
|
||||
|
||||
this.resetAction(); // Stop regardless of success or fail
|
||||
|
||||
// Calculate team lossses
|
||||
// Calculate team losses
|
||||
if (teamCount >= 1) {
|
||||
const losses = getRandomInt(1, teamLossMax);
|
||||
this.teamSize -= losses;
|
||||
@ -1645,7 +1645,7 @@ export class Bladeburner {
|
||||
}
|
||||
|
||||
// If the previous action went past its completion time, add to the next action
|
||||
// This is not added inmediatly in case the automation changes the action
|
||||
// This is not added immediately in case the automation changes the action
|
||||
this.actionTimeCurrent += seconds + this.actionTimeOverflow;
|
||||
this.actionTimeOverflow = 0;
|
||||
if (this.actionTimeCurrent >= this.actionTimeToComplete) {
|
||||
@ -2382,7 +2382,7 @@ export class Bladeburner {
|
||||
return Generic_toJSON("Bladeburner", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Bladeburner object from a JSON save state. */
|
||||
/** Initializes a Bladeburner object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Bladeburner {
|
||||
return Generic_fromJSON(Bladeburner, value.data);
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ export class City {
|
||||
|
||||
improvePopulationEstimateByCount(n: number): void {
|
||||
if (isNaN(n)) {
|
||||
throw new Error("NaN passeed into City.improvePopulationEstimateByCount()");
|
||||
throw new Error("NaN passed into City.improvePopulationEstimateByCount()");
|
||||
}
|
||||
if (this.popEst < this.pop) {
|
||||
this.popEst += n;
|
||||
@ -162,7 +162,7 @@ export class City {
|
||||
return Generic_toJSON("City", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a City object from a JSON save state. */
|
||||
/** Initializes a City object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): City {
|
||||
return Generic_fromJSON(City, value.data);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ export const BlackOperations: {
|
||||
<>
|
||||
Several months ago Titan Laboratories' Bioengineering department was infiltrated by Synthoids. As far as we
|
||||
know, Titan Laboratories' management has no knowledge about this. We don't know what the Synthoids are up to,
|
||||
but the research that they could be conducting using Titan Laboraties' vast resources is potentially very
|
||||
but the research that they could be conducting using Titan Laboratories' vast resources is potentially very
|
||||
dangerous.
|
||||
<br />
|
||||
<br />
|
||||
@ -215,7 +215,7 @@ export const BlackOperations: {
|
||||
desc: (
|
||||
<>
|
||||
DreamSense Technologies is an advertising company that uses special technology to transmit their ads into the
|
||||
people's dreams and subconcious. They do this using broadcast transmitter towers. Based on information from our
|
||||
people's dreams and subconscious. They do this using broadcast transmitter towers. Based on information from our
|
||||
agents and informants in {CityName.Chongqing}, we have reason to believe that one of the broadcast towers there
|
||||
has been compromised by Synthoids and is being used to spread pro-Synthoid propaganda.
|
||||
<br />
|
||||
|
@ -79,7 +79,7 @@ export function Stats(props: IProps): React.ReactElement {
|
||||
<br />
|
||||
Once your stamina falls below 50% of its max value, it begins to negatively affect the success rate of
|
||||
your contracts/operations. This penalty is shown in the overview panel. If the penalty is 15%, then this
|
||||
means your success rate would be multipled by 85% (100 - 15).
|
||||
means your success rate would be multiplied by 85% (100 - 15).
|
||||
<br />
|
||||
<br />
|
||||
Your max stamina and stamina gain rate can also be increased by training, or through skills and
|
||||
@ -123,7 +123,8 @@ export function Stats(props: IProps): React.ReactElement {
|
||||
<Tooltip
|
||||
title={
|
||||
<Typography>
|
||||
This is your Bladeburner divison's estimate of how many Synthoid communities exist in your current city.
|
||||
This is your Bladeburner division's estimate of how many Synthoid communities exist in your current
|
||||
city.
|
||||
</Typography>
|
||||
}
|
||||
>
|
||||
|
@ -70,7 +70,7 @@ export class Blackjack extends React.Component<Record<string, never>, State> {
|
||||
return;
|
||||
}
|
||||
|
||||
// Take money from player right away so that player's dont just "leave" to avoid the loss (I mean they could
|
||||
// Take money from player right away so that players don't just "leave" to avoid the loss (I mean they could
|
||||
// always reload without saving but w.e) TODO: Save/Restore the RNG state to limit the value of save-scumming.
|
||||
win(-this.state.bet);
|
||||
|
||||
@ -128,7 +128,7 @@ export class Blackjack extends React.Component<Record<string, never>, State> {
|
||||
valuesUnder21.sort((a, b) => a - b);
|
||||
return valuesUnder21[valuesUnder21.length - 1];
|
||||
} else {
|
||||
// Just return the first value. It doesnt really matter anyways since hand is buted
|
||||
// Just return the first value. It doesn't really matter anyways since hand is busted.
|
||||
return handValues[0];
|
||||
}
|
||||
};
|
||||
@ -248,7 +248,7 @@ export class Blackjack extends React.Component<Record<string, never>, State> {
|
||||
bet: 0,
|
||||
betInput,
|
||||
wagerInvalid: true,
|
||||
wagerInvalidHelperText: "Must bet a postive amount",
|
||||
wagerInvalidHelperText: "Must bet a positive amount",
|
||||
});
|
||||
} else if (wager > MAX_BET) {
|
||||
this.setState({
|
||||
|
@ -21,7 +21,7 @@ export class Deck {
|
||||
return this.cards.shift() as Card; // Guaranteed to return a Card since we throw an Error if array is empty
|
||||
}
|
||||
|
||||
// Draws a card, resetting the deck beforehands if the Deck is empty
|
||||
// Draws a card, resetting the deck beforehand if the Deck is empty
|
||||
safeDrawCard(): Card {
|
||||
if (this.cards.length === 0) {
|
||||
this.reset();
|
||||
|
@ -166,7 +166,7 @@ export class CodingContract {
|
||||
return Generic_toJSON("CodingContract", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a CodingContract from a JSON save state. */
|
||||
/** Initializes a CodingContract from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): CodingContract {
|
||||
return Generic_fromJSON(CodingContract, value.data);
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ export class Company {
|
||||
return Generic_toJSON("Company", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Company from a JSON save state. */
|
||||
/** Initializes a Company from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Company {
|
||||
return Generic_fromJSON(Company, value.data);
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import * as posNames from "./companypositionnames";
|
||||
|
||||
export const companyPositionMetadata: IConstructorParams[] = [
|
||||
{
|
||||
name: posNames.SoftwareCompanyPositions[0], // Software Enginering Intern
|
||||
name: posNames.SoftwareCompanyPositions[0], // Software Engineering Intern
|
||||
nextPosition: posNames.SoftwareCompanyPositions[1], // Junior Software Engineer
|
||||
baseSalary: 33,
|
||||
charismaEffectiveness: 15,
|
||||
@ -168,7 +168,7 @@ export const companyPositionMetadata: IConstructorParams[] = [
|
||||
},
|
||||
{
|
||||
name: posNames.NetworkEngineerCompanyPositions[0], // Network Engineer
|
||||
nextPosition: posNames.NetworkEngineerCompanyPositions[1], // Network Adminsitrator
|
||||
nextPosition: posNames.NetworkEngineerCompanyPositions[1], // Network Administrator
|
||||
baseSalary: 121,
|
||||
charismaEffectiveness: 15,
|
||||
charismaExpGain: 0.05,
|
||||
|
@ -61,7 +61,7 @@ export class Corporation {
|
||||
|
||||
addFunds(amt: number): void {
|
||||
if (!isFinite(amt)) {
|
||||
console.error("Trying to add invalid amount of funds. Report to a developper.");
|
||||
console.error("Trying to add invalid amount of funds. Report to a developer.");
|
||||
return;
|
||||
}
|
||||
this.funds = this.funds + amt;
|
||||
@ -451,7 +451,7 @@ export class Corporation {
|
||||
return Generic_toJSON("Corporation", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Corporation object from a JSON save state. */
|
||||
/** Initializes a Corporation object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Corporation {
|
||||
return Generic_fromJSON(Corporation, value.data);
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ export class CorporationState {
|
||||
return Generic_toJSON("CorporationState", this);
|
||||
}
|
||||
|
||||
// Initiatizes a CorporationState object from a JSON save state.
|
||||
// Initializes a CorporationState object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): CorporationState {
|
||||
return Generic_fromJSON(CorporationState, value.data);
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ export class Employee {
|
||||
const prodBase = this.mor * this.hap * this.ene * 1e-6;
|
||||
let prodMult = 0;
|
||||
switch (this.pos) {
|
||||
//Calculate productivity based on position. This is multipled by prodBase
|
||||
//Calculate productivity based on position. This is multiplied by prodBase
|
||||
//to get final value
|
||||
case EmployeePositions.Operations:
|
||||
prodMult = 0.6 * effInt + 0.1 * effCha + this.exp + 0.5 * effCre + effEff;
|
||||
|
@ -39,7 +39,7 @@ export class Industry {
|
||||
|
||||
/* The following are factors for how much production/other things are increased by
|
||||
different factors. The production increase always has diminishing returns,
|
||||
and they are all reprsented by exponentials of < 1 (e.g x ^ 0.5, x ^ 0.8)
|
||||
and they are all represented by exponentials of < 1 (e.g x ^ 0.5, x ^ 0.8)
|
||||
The number for these represent the exponential. A lower number means more
|
||||
diminishing returns */
|
||||
reFac = 0; //Real estate Factor
|
||||
@ -386,7 +386,7 @@ export class Industry {
|
||||
this.state = state;
|
||||
|
||||
//At the start of a cycle, store and reset revenue/expenses
|
||||
//Then calculate salaries and processs the markets
|
||||
//Then calculate salaries and process the markets
|
||||
if (state === "START") {
|
||||
if (isNaN(this.thisCycleRevenue) || isNaN(this.thisCycleExpenses)) {
|
||||
console.error("NaN in Corporation's computed revenue/expenses");
|
||||
@ -895,7 +895,7 @@ export class Industry {
|
||||
|
||||
// Make sure theres enough space in warehouse
|
||||
if (expWarehouse.sizeUsed >= expWarehouse.size) {
|
||||
// Warehouse at capacity. Exporting doesnt
|
||||
// Warehouse at capacity. Exporting doesn't
|
||||
// affect revenue so just return 0's
|
||||
return [0, 0];
|
||||
} else {
|
||||
@ -1079,7 +1079,7 @@ export class Industry {
|
||||
// Reverse engineer the 'maxSell' formula
|
||||
// 1. Set 'maxSell' = prod
|
||||
// 2. Substitute formula for 'markup'
|
||||
// 3. Solve for 'sCost'roduct.pCost = sCost
|
||||
// 3. Solve for 'sCost', product.pCost = sCost
|
||||
const numerator = markupLimit;
|
||||
const sqrtNumerator = prod;
|
||||
const sqrtDenominator =
|
||||
@ -1289,7 +1289,7 @@ export class Industry {
|
||||
const researchTree = IndustryResearchTrees[this.type];
|
||||
if (researchTree === undefined) throw new Error(`Invalid industry "${this.type}"`);
|
||||
|
||||
// Since ResearchTree data isnt saved, we'll update the Research Tree data
|
||||
// Since ResearchTree data isn't saved, we'll update the Research Tree data
|
||||
// based on the stored 'researched' property in the Industry object
|
||||
if (Object.keys(researchTree.researched).length !== Object.keys(this.researched).length) {
|
||||
for (const research of Object.keys(this.researched)) {
|
||||
@ -1374,7 +1374,7 @@ export class Industry {
|
||||
return Generic_toJSON("Industry", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Industry object from a JSON save state. */
|
||||
/** Initializes a Industry object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Industry {
|
||||
return Generic_fromJSON(Industry, value.data);
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ export class Material {
|
||||
return Generic_toJSON("Material", this);
|
||||
}
|
||||
|
||||
// Initiatizes a Material object from a JSON save state.
|
||||
// Initializes a Material object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): Material {
|
||||
return Generic_fromJSON(Material, value.data);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ export class Product {
|
||||
|
||||
// Variables for handling the creation process of this Product
|
||||
fin = false; // Whether this Product has finished being created
|
||||
prog = 0; // Creation progress - A number betwee 0-100 representing percentage
|
||||
prog = 0; // Creation progress - A number between 0-100 representing percentage
|
||||
createCity = ""; // City in which the product is/was being created
|
||||
designCost = 0; // How much money was invested into designing this Product
|
||||
advCost = 0; // How much money was invested into advertising this Product
|
||||
@ -267,7 +267,7 @@ export class Product {
|
||||
return Generic_toJSON("Product", this);
|
||||
}
|
||||
|
||||
// Initiatizes a Product object from a JSON save state.
|
||||
// Initializes a Product object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): Product {
|
||||
return Generic_fromJSON(Product, value.data);
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ export class Node {
|
||||
return this;
|
||||
}
|
||||
|
||||
// Recursively search chilren
|
||||
// Recursively search children
|
||||
let res = null;
|
||||
for (let i = 0; i < this.children.length; ++i) {
|
||||
res = this.children[i].findNode(text);
|
||||
|
@ -108,7 +108,7 @@ export class Warehouse {
|
||||
return Generic_toJSON("Warehouse", this);
|
||||
}
|
||||
|
||||
// Initiatizes a Warehouse object from a JSON save state.
|
||||
// Initializes a Warehouse object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): Warehouse {
|
||||
return Generic_fromJSON(Warehouse, value.data);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ export enum CorporationUnlockUpgradeIndex {
|
||||
}
|
||||
|
||||
// Corporation Unlock Upgrades
|
||||
// Upgrades for entire corporation, unlocks features, either you have it or you dont
|
||||
// Upgrades for entire corporation, unlocks features, either you have it or you don't.
|
||||
export const CorporationUnlockUpgrades: Record<CorporationUnlockUpgradeIndex, CorporationUnlockUpgrade> = {
|
||||
//Lets you export goods
|
||||
[CorporationUnlockUpgradeIndex.Export]: {
|
||||
|
@ -24,7 +24,7 @@ export const researchMetadata: IConstructorParams[] = [
|
||||
name: "Automatic Drug Administration",
|
||||
cost: 10e3,
|
||||
desc:
|
||||
"Research how to automatically administer performance-enhacing drugs to all of " +
|
||||
"Research how to automatically administer performance-enhancing drugs to all of " +
|
||||
"your employees. This unlocks Drug-related Research.",
|
||||
},
|
||||
{
|
||||
|
@ -121,7 +121,7 @@ function ManualManagement(props: IProps): React.ReactElement {
|
||||
props.rerender();
|
||||
}
|
||||
|
||||
// Numeraljs formatter
|
||||
// Numeral.js formatter
|
||||
const nf = "0.000";
|
||||
|
||||
// Employee stats (after applying multipliers)
|
||||
|
@ -132,7 +132,7 @@ export function IndustryOverview(props: IProps): React.ReactElement {
|
||||
<Tooltip
|
||||
title={
|
||||
<>
|
||||
<Typography>Total multiplier for this industrys sales due to its awareness and popularity</Typography>
|
||||
<Typography>Total multiplier for this industry's sales due to its awareness and popularity</Typography>
|
||||
<StatsTable
|
||||
rows={[
|
||||
["Awareness Bonus:", "x" + numeralWrapper.formatReallyBigNumber(Math.pow(awarenessFac, 0.85))],
|
||||
|
@ -48,9 +48,9 @@ export function MaterialElem(props: IMaterialProps): React.ReactElement {
|
||||
throw new Error(`Could not get OfficeSpace object for this city (${city})`);
|
||||
}
|
||||
|
||||
// Numeraljs formatter
|
||||
// Numeral.js formatter
|
||||
const nf = "0.000";
|
||||
const nfB = "0.000a"; // For numbers that might be biger
|
||||
const nfB = "0.000a"; // For numbers that might be bigger
|
||||
|
||||
// Total gain or loss of this material (per second)
|
||||
const totalGain = mat.buy + mat.prd + mat.imp - mat.sll - mat.totalExp;
|
||||
|
@ -38,7 +38,7 @@ export function ProductElem(props: IProductProps): React.ReactElement {
|
||||
const city = props.city;
|
||||
const product = props.product;
|
||||
|
||||
// Numeraljs formatters
|
||||
// Numeral.js formatters
|
||||
const nf = "0.000";
|
||||
const nfB = "0.000a"; // For numbers that might be big
|
||||
|
||||
|
@ -61,9 +61,9 @@ export class ActiveFragment {
|
||||
return this.fragment().fullAt(worldX - this.x, worldY - this.y, this.rotation);
|
||||
}
|
||||
|
||||
neighboors(): number[][] {
|
||||
neighbors(): number[][] {
|
||||
return this.fragment()
|
||||
.neighboors(this.rotation)
|
||||
.neighbors(this.rotation)
|
||||
.map((cell) => [this.x + cell[0], this.y + cell[1]]);
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ export class ActiveFragment {
|
||||
return Generic_toJSON("ActiveFragment", this);
|
||||
}
|
||||
|
||||
/** Initializes an acive fragment from a JSON save state */
|
||||
/** Initializes an active fragment from a JSON save state */
|
||||
static fromJSON(value: IReviverValue): ActiveFragment {
|
||||
return Generic_fromJSON(ActiveFragment, value.data);
|
||||
}
|
||||
|
@ -47,8 +47,8 @@ export class Fragment {
|
||||
return this.shape[0].length;
|
||||
}
|
||||
|
||||
// List of direct neighboors of this fragment.
|
||||
neighboors(rotation: number): number[][] {
|
||||
// List of direct neighbors of this fragment.
|
||||
neighbors(rotation: number): number[][] {
|
||||
const candidates: number[][] = [];
|
||||
|
||||
const add = (x: number, y: number): void => {
|
||||
@ -58,7 +58,7 @@ export class Fragment {
|
||||
};
|
||||
for (let y = 0; y < this.height(rotation); y++) {
|
||||
for (let x = 0; x < this.width(rotation); x++) {
|
||||
// This cell is full, add all it's neighboors.
|
||||
// This cell is full, add all it's neighbors.
|
||||
if (!this.fullAt(x, y, rotation)) continue;
|
||||
add(x - 1, y);
|
||||
add(x + 1, y);
|
||||
|
@ -58,19 +58,19 @@ export class StaneksGift extends BaseGift {
|
||||
}
|
||||
|
||||
effect(fragment: ActiveFragment): number {
|
||||
// Find all the neighbooring cells
|
||||
const cells = fragment.neighboors();
|
||||
// find the neighbooring active fragments.
|
||||
// Find all the neighboring cells
|
||||
const cells = fragment.neighbors();
|
||||
// find the neighboring active fragments.
|
||||
const maybeFragments = cells.map((n) => this.fragmentAt(n[0], n[1]));
|
||||
|
||||
// Filter out undefined with typescript "Type guard". Whatever
|
||||
let neighboors = maybeFragments.filter((v: ActiveFragment | undefined): v is ActiveFragment => !!v);
|
||||
let neighbors = maybeFragments.filter((v: ActiveFragment | undefined): v is ActiveFragment => !!v);
|
||||
|
||||
neighboors = neighboors.filter((fragment) => fragment.fragment().type === FragmentType.Booster);
|
||||
neighbors = neighbors.filter((fragment) => fragment.fragment().type === FragmentType.Booster);
|
||||
let boost = 1;
|
||||
|
||||
neighboors = neighboors.filter((v, i, s) => s.indexOf(v) === i);
|
||||
for (const neighboor of neighboors) {
|
||||
neighbors = neighbors.filter((v, i, s) => s.indexOf(v) === i);
|
||||
for (const neighboor of neighbors) {
|
||||
boost *= neighboor.fragment().power;
|
||||
}
|
||||
return CalculateEffect(fragment.highestCharge, fragment.numCharge, fragment.fragment().power, boost);
|
||||
|
@ -1,10 +1,10 @@
|
||||
/*
|
||||
The game cannot block every possible exploits. Specially since one of them is
|
||||
that you can just edit your save file and that's impragmatic to prevent.
|
||||
that you can just edit your save file and that's impractical to prevent.
|
||||
|
||||
So instead we have source file minus 1. It is not obtained by destroying a
|
||||
BitNode but instead it is awarded when the player finds innovative ways to break
|
||||
the game, this serves 2 purpose, [one] the developpers don't have to spend time
|
||||
the game, this serves 2 purpose, [one] the developers don't have to spend time
|
||||
trying to implement anti-cheat measures and [two] finding ways to break a
|
||||
hacking game is very much in the spirit of the game.
|
||||
Source-File minus 1 is extremely weak because it can be fully level up quickly.
|
||||
|
@ -65,7 +65,7 @@ export class Faction {
|
||||
return Generic_toJSON("Faction", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Faction object from a JSON save state. */
|
||||
/** Initializes a Faction object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Faction {
|
||||
return Generic_fromJSON(Faction, value.data);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ export const MiscPage = (): React.ReactElement => {
|
||||
<>
|
||||
Improved Bash emulation mode. Setting this to 1 enables several new Terminal shortcuts and features that
|
||||
more closely resemble a real Bash-style shell. Note that when this mode is enabled, the default browser
|
||||
shortcuts are overriden by the new Bash shortcuts.
|
||||
shortcuts are overridden by the new Bash shortcuts.
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
@ -62,7 +62,7 @@ export class Gang {
|
||||
// limit is reached, and then calculates and applies the gains only at that limit
|
||||
this.storedCycles = 0;
|
||||
|
||||
// Separate variable to keep track of cycles for Territry + Power gang, which
|
||||
// Separate variable to keep track of cycles for Territory + Power gang, which
|
||||
// happens on a slower "clock" than normal processing
|
||||
this.storedTerritoryAndPowerCycles = 0;
|
||||
|
||||
@ -399,7 +399,7 @@ export class Gang {
|
||||
return Generic_toJSON("Gang", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Gang object from a JSON save state. */
|
||||
/** Initializes a Gang object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Gang {
|
||||
return Generic_fromJSON(Gang, value.data);
|
||||
}
|
||||
|
@ -324,7 +324,7 @@ export class GangMember {
|
||||
return Generic_toJSON("GangMember", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a GangMember object from a JSON save state. */
|
||||
/** Initializes a GangMember object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): GangMember {
|
||||
return Generic_fromJSON(GangMember, value.data);
|
||||
}
|
||||
|
@ -57,9 +57,9 @@ export class GangMemberTask {
|
||||
this.difficulty = params.difficulty ? params.difficulty : 1;
|
||||
|
||||
// Territory Factors. Exponential factors that dictate how territory affects gains
|
||||
// Formula: Territory Mutiplier = (Territory * 100) ^ factor / 100
|
||||
// Formula: Territory Multiplier = (Territory * 100) ^ factor / 100
|
||||
// So factor should be > 1 if something should scale exponentially with territory
|
||||
// and should be < 1 if it should have diminshing returns
|
||||
// and should be < 1 if it should have diminishing returns
|
||||
this.territory = params.territory ? params.territory : { money: 1, respect: 1, wanted: 1 };
|
||||
}
|
||||
}
|
||||
|
@ -400,9 +400,9 @@ function processAllHacknetServerEarnings(numCycles: number): number {
|
||||
// hacknetNodes array only contains the IP addresses of the servers.
|
||||
// Also, update the hash rate before processing
|
||||
const ip = Player.hacknetNodes[i];
|
||||
if (ip instanceof HacknetNode) throw new Error(`player nodes should not be HacketNode`);
|
||||
if (ip instanceof HacknetNode) throw new Error(`player nodes should not be HacknetNode`);
|
||||
const hserver = GetServer(ip);
|
||||
if (!(hserver instanceof HacknetServer)) throw new Error(`player nodes shoud not be Server`);
|
||||
if (!(hserver instanceof HacknetServer)) throw new Error(`player nodes should not be Server`);
|
||||
hserver.updateHashRate(Player.mults.hacknet_node_money);
|
||||
const h = hserver.process(numCycles);
|
||||
hashes += h;
|
||||
@ -536,7 +536,7 @@ export function purchaseHashUpgrade(upgName: string, upgTarget: string, count =
|
||||
break;
|
||||
}
|
||||
case "Exchange for Bladeburner Rank": {
|
||||
// This will throw if player isnt in Bladeburner
|
||||
// This will throw if player isn't in Bladeburner
|
||||
const bladeburner = Player.bladeburner;
|
||||
if (bladeburner === null) {
|
||||
Player.hashManager.refundUpgrade(upgName, count);
|
||||
@ -546,7 +546,7 @@ export function purchaseHashUpgrade(upgName: string, upgTarget: string, count =
|
||||
break;
|
||||
}
|
||||
case "Exchange for Bladeburner SP": {
|
||||
// This will throw if player isnt in Bladeburner
|
||||
// This will throw if player isn't in Bladeburner
|
||||
const bladeburner = Player.bladeburner;
|
||||
if (bladeburner === null) {
|
||||
Player.hashManager.refundUpgrade(upgName, count);
|
||||
|
@ -125,7 +125,7 @@ export class HacknetNode implements IHacknetNode {
|
||||
return Generic_toJSON("HacknetNode", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a HacknetNode object from a JSON save state. */
|
||||
/** Initializes a HacknetNode object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): HacknetNode {
|
||||
return Generic_fromJSON(HacknetNode, value.data);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ export class HacknetServer extends BaseServer implements IHacknetNode {
|
||||
// Total number of hashes earned by this server
|
||||
totalHashesGenerated = 0;
|
||||
|
||||
// Flag indicating wehther this is a purchased server
|
||||
// Flag indicating whether this is a purchased server
|
||||
purchasedByPlayer = true;
|
||||
|
||||
constructor(params: IConstructorParams = { hostname: "", ip: createRandomIp() }) {
|
||||
|
@ -150,7 +150,7 @@ export class HashManager {
|
||||
return Generic_toJSON("HashManager", this);
|
||||
}
|
||||
|
||||
// Initiatizes a HashManager object from a JSON save state.
|
||||
// Initializes a HashManager object from a JSON save state.
|
||||
static fromJSON(value: IReviverValue): HashManager {
|
||||
return Generic_fromJSON(HashManager, value.data);
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ interface IProps {
|
||||
export function GameTimer(props: IProps): React.ReactElement {
|
||||
const [v, setV] = useState(100);
|
||||
const totalMillis =
|
||||
(!props.ignoreAugment_WKSharmonizer && player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.3 : 1) *
|
||||
(!props.ignoreAugment_WKSharmonizer && Player.hasAugmentation(AugmentationNames.WKSharmonizer, true) ? 1.3 : 1) *
|
||||
props.millis;
|
||||
|
||||
const tick = 200;
|
||||
|
@ -94,11 +94,11 @@ export const Literatures: Record<string, Literature> = {};
|
||||
"productivity and bolstering the global economy. Stemming from humanity's desire for technological advancement, optimism " +
|
||||
"and excitement about the future had never been higher.<br><br>" +
|
||||
"All of that excitement and optimism quickly turned to fear, panic, and dread in 2070, when a terrorist group " +
|
||||
`called Ascendis Totalis hacked into ${FactionNames.OmniTekIncorporated} and uploaded a rogue AI into severeal of their Synthoid manufacturing facilities. ` +
|
||||
`called Ascendis Totalis hacked into ${FactionNames.OmniTekIncorporated} and uploaded a rogue AI into several of their Synthoid manufacturing facilities. ` +
|
||||
`This hack went undetected and for months ${FactionNames.OmniTekIncorporated} unknowingly churned out legions of Synthoids embedded with this ` +
|
||||
"rogue AI. Then, on December 24th, 2070, Omnica activated dormant protocols in the rogue AI, causing all of the " +
|
||||
"infected Synthoids to immediately launch a military campaign to seek and destroy all of humanity.<br><br>" +
|
||||
"What ensued was the deadlist conflict in human history. This crisis, now commonly known as the Synthoid Uprising, " +
|
||||
"What ensued was the deadliest conflict in human history. This crisis, now commonly known as the Synthoid Uprising, " +
|
||||
"resulted in almost ten billion deaths over the course of a year. Despite the nations of the world banding together " +
|
||||
"to combat the threat, the MK-VI Synthoids were simply stronger, faster, more intelligent, and more adaptable than humans, " +
|
||||
"outsmarting them at every turn.<br><br>" +
|
||||
@ -170,7 +170,7 @@ export const Literatures: Record<string, Literature> = {};
|
||||
"Proponents for this simulated reality theory often point to how advanced our technology has become, " +
|
||||
"as well as the incredibly fast pace at which it has advanced over the past decades. The amount of computing " +
|
||||
"power available to us has increased over 100-fold since 2060 due to the development of nanoprocessors and " +
|
||||
"quantum computers. Artifical Intelligence has advanced to the point where our entire lives are controlled " +
|
||||
"quantum computers. Artificial Intelligence has advanced to the point where our entire lives are controlled " +
|
||||
"by robots and machines that handle our day-to-day activities such as autonomous transportation and scheduling. " +
|
||||
"If we consider the pace at which this technology has advanced and assume that these developments continue, it's " +
|
||||
"reasonable to assume that at some point in the future our technology would be advanced enough that " +
|
||||
@ -246,7 +246,7 @@ export const Literatures: Record<string, Literature> = {};
|
||||
"CIA director David Glarow says it's too early to know " +
|
||||
"whether these figures indicate the beginning of a sustained increase in crime rates, or whether " +
|
||||
"the year was just an unfortunate outlier. He states that many intelligence and law enforcement " +
|
||||
"agents have noticed an increase in organized crime activites, and believes that these figures may " +
|
||||
"agents have noticed an increase in organized crime activities, and believes that these figures may " +
|
||||
`be the result of an uprising from criminal organizations such as ${FactionNames.TheSyndicate} or the ${FactionNames.SlumSnakes}.`;
|
||||
Literatures[fn] = new Literature(title, fn, txt);
|
||||
|
||||
@ -260,7 +260,7 @@ export const Literatures: Record<string, Literature> = {};
|
||||
"that the Singularity would arrive by 2045. " +
|
||||
"And yet here we are, more than three decades later, where most would agree that we have not " +
|
||||
"yet reached a point where computers and machines are vastly more intelligent than we are. So what gives?<br><br>" +
|
||||
"The answer is that we have reached the Singularity, just not in the way we expected. The artifical superintelligence " +
|
||||
"The answer is that we have reached the Singularity, just not in the way we expected. The artificial superintelligence " +
|
||||
"that was predicted by Kurzweil and others exists in the world today - in the form of Augmentations. " +
|
||||
"Yes, those Augmentations that the rich and powerful keep to themselves enable humans " +
|
||||
"to become superintelligent beings. The Singularity did not lead to a world where " +
|
||||
@ -426,7 +426,7 @@ export const Literatures: Record<string, Literature> = {};
|
||||
"continent.<br><br>" +
|
||||
`Not much else is known about the ${FactionNames.Tetrads}, or about the efforts the Asian governments and corporations are making ` +
|
||||
`to take down this large new crime organization. Many believe that the ${FactionNames.Tetrads} have infiltrated the governments ` +
|
||||
"and powerful corporations in Asia, which has helped faciliate their recent rapid rise.";
|
||||
"and powerful corporations in Asia, which has helped facilitate their recent rapid rise.";
|
||||
Literatures[fn] = new Literature(title, fn, txt);
|
||||
|
||||
title = "The Secret War";
|
||||
|
@ -215,7 +215,7 @@ export function SpecialLocation(props: IProps): React.ReactElement {
|
||||
<Typography>
|
||||
<i>
|
||||
Allison "Mother" Stanek: ..can ...you hear them too ...? Come now, don't be shy and let me get a closer
|
||||
look at you. Yes wonderful, I see my creation has taken root without consquence or much ill effect it
|
||||
look at you. Yes wonderful, I see my creation has taken root without consequence or much ill effect it
|
||||
seems. Curious, Just how much of a machine's soul do you house in that body?
|
||||
</i>
|
||||
</Typography>
|
||||
|
@ -22,11 +22,13 @@ function sendMessage(msg: Message, forced = false): void {
|
||||
|
||||
function showMessage(name: MessageFilenames): void {
|
||||
const msg = Messages[name];
|
||||
if (!(msg instanceof Message)) throw new Error("trying to display unexistent message");
|
||||
if (!(msg instanceof Message)) throw new Error("trying to display nonexistent message");
|
||||
dialogBoxCreate(
|
||||
<>
|
||||
Message received from unknown sender:<i>{msg.msg}</i>This message was saved as {msg.filename} onto your home
|
||||
computer.
|
||||
Message received from unknown sender:
|
||||
<br />
|
||||
<br />
|
||||
<i>{msg.msg}</i>This message was saved as {msg.filename} onto your home computer.
|
||||
</>,
|
||||
);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ function wrapFunction(
|
||||
const functionPath = tree.join(".");
|
||||
const functionName = tree.pop();
|
||||
if (typeof functionName !== "string") {
|
||||
throw helpers.makeBasicErrorMsg(workerScript, "Failure occured while wrapping netscript api", "INITIALIZATION");
|
||||
throw helpers.makeBasicErrorMsg(workerScript, "Failure occurred while wrapping netscript api", "INITIALIZATION");
|
||||
}
|
||||
const ctx = {
|
||||
workerScript,
|
||||
@ -89,7 +89,7 @@ export function wrapAPILayer(
|
||||
function setNestedProperty(root: any, value: unknown, ...tree: string[]): void {
|
||||
let target = root;
|
||||
const key = tree.pop();
|
||||
if (!key) throw new Error("Failure occured while wrapping netscript api (setNestedProperty)");
|
||||
if (!key) throw new Error("Failure occurred while wrapping netscript api (setNestedProperty)");
|
||||
for (const branch of tree) {
|
||||
target[branch] ??= {};
|
||||
target = target[branch];
|
||||
|
@ -2,7 +2,7 @@ import { workerScripts } from "./WorkerScripts";
|
||||
|
||||
let pidCounter = 1;
|
||||
|
||||
/** Find and return the next availble PID for a script */
|
||||
/** Find and return the next available PID for a script */
|
||||
export function generateNextPid(): number {
|
||||
let tempCounter = pidCounter;
|
||||
|
||||
|
@ -24,7 +24,7 @@ import {
|
||||
numCycleForGrowth,
|
||||
numCycleForGrowthCorrected,
|
||||
processSingleServerGrowth,
|
||||
safetlyCreateUniqueServer,
|
||||
safelyCreateUniqueServer,
|
||||
} from "./Server/ServerHelpers";
|
||||
import { getPurchaseServerCost, getPurchaseServerLimit, getPurchaseServerMaxRam } from "./Server/ServerPurchases";
|
||||
import { Server } from "./Server/Server";
|
||||
@ -1363,7 +1363,7 @@ const base: InternalAPI<NS> = {
|
||||
helpers.log(ctx, () => `Not enough money to purchase server. Need ${numeralWrapper.formatMoney(cost)}`);
|
||||
return "";
|
||||
}
|
||||
const newServ = safetlyCreateUniqueServer({
|
||||
const newServ = safelyCreateUniqueServer({
|
||||
ip: createUniqueRandomIp(),
|
||||
hostname: hostnameStr,
|
||||
organizationName: "",
|
||||
|
@ -786,7 +786,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure player is actually employed at the comapny
|
||||
// Make sure player is actually employed at the company
|
||||
if (!Object.keys(Player.jobs).includes(companyName)) {
|
||||
helpers.log(ctx, () => `You do not have a job at '${companyName}'`);
|
||||
return false;
|
||||
@ -815,7 +815,7 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
Player.stopFocusing();
|
||||
Router.toTerminal();
|
||||
}
|
||||
helpers.log(ctx, () => `Began working at '${companyName}' as a '${companyPositionName}'`);
|
||||
helpers.log(ctx, () => `Began working at '${companyName}' with position '${companyPositionName}'`);
|
||||
return true;
|
||||
},
|
||||
applyToCompany: (ctx: NetscriptContext) =>
|
||||
@ -878,7 +878,10 @@ export function NetscriptSingularity(): InternalAPI<ISingularity> {
|
||||
// return false;
|
||||
// }
|
||||
if (res) {
|
||||
helpers.log(ctx, () => `You were offered a new job at '${companyName}' as a '${Player.jobs[companyName]}'`);
|
||||
helpers.log(
|
||||
ctx,
|
||||
() => `You were offered a new job at '${companyName}' with position '${Player.jobs[companyName]}'`,
|
||||
);
|
||||
} else {
|
||||
helpers.log(ctx, () => `You failed to get a new job/promotion at '${companyName}' in the '${field}' field.`);
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ export async function compile(script: Script, scripts: Script[]): Promise<Script
|
||||
//If we're already in the middle of compiling (script.module has not resolved yet), wait for the previous compilation to finish
|
||||
//If script.module is null, this does nothing.
|
||||
await script.module;
|
||||
//If multiple compiles were called on the same script before a compilation could be completed this ensures only one complilation is actually performed.
|
||||
//If multiple compiles were called on the same script before a compilation could be completed this ensures only one compilation is actually performed.
|
||||
if (!script.queueCompile) return script.module as Promise<ScriptModule>;
|
||||
script.queueCompile = false;
|
||||
script.updateRamUsage(scripts);
|
||||
|
@ -124,7 +124,7 @@ async function startNetscript1Script(workerScript: WorkerScript): Promise<void>
|
||||
}
|
||||
|
||||
/* Since the JS Interpreter used for Netscript 1.0 only supports ES5, the keyword
|
||||
'import' throws an error. However, since we want to support import funtionality
|
||||
'import' throws an error. However, since we want to support import functionality
|
||||
we'll implement it ourselves by parsing the Nodes in the AST out.
|
||||
|
||||
@param code - The script's code
|
||||
@ -338,7 +338,7 @@ function createAndAddWorkerScript(runningScriptObj: RunningScript, server: BaseS
|
||||
// Once the code finishes (either resolved or rejected, doesnt matter), set its
|
||||
// running status to false
|
||||
.then(function () {
|
||||
// On natural death, the earnings are transfered to the parent if it still exists.
|
||||
// On natural death, the earnings are transferred to the parent if it still exists.
|
||||
if (parent && !parent.env.stopFlag) {
|
||||
parent.scriptRef.onlineExpGained += runningScriptObj.onlineExpGained;
|
||||
parent.scriptRef.onlineMoneyMade += runningScriptObj.onlineMoneyMade;
|
||||
@ -448,7 +448,7 @@ export function runScriptFromScript(
|
||||
// Check if the script exists and if it does run it
|
||||
for (let i = 0; i < server.scripts.length; ++i) {
|
||||
if (!areFilesEqual(server.scripts[i].filename, scriptname)) continue;
|
||||
// Check for admin rights and that there is enough RAM availble to run
|
||||
// Check for admin rights and that there is enough RAM available to run
|
||||
const script = server.scripts[i];
|
||||
let ramUsage = script.ramUsage;
|
||||
threads = Math.floor(Number(threads));
|
||||
|
@ -164,7 +164,7 @@ export class PlayerObject extends Person {
|
||||
return Generic_toJSON("PlayerObject", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a PlayerObject object from a JSON save state. */
|
||||
/** Initializes a PlayerObject object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): PlayerObject {
|
||||
return Generic_fromJSON(PlayerObject, value.data);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import { isSleeveCompanyWork } from "../Sleeve/Work/SleeveCompanyWork";
|
||||
import { calculateSkillProgress as calculateSkillProgressF, ISkillProgress } from "../formulas/skill";
|
||||
import { GetServer, AddToAllServers, createUniqueRandomIp } from "../../Server/AllServers";
|
||||
import { Server } from "../../Server/Server";
|
||||
import { safetlyCreateUniqueServer } from "../../Server/ServerHelpers";
|
||||
import { safelyCreateUniqueServer } from "../../Server/ServerHelpers";
|
||||
|
||||
import { SpecialServers } from "../../Server/data/SpecialServers";
|
||||
import { applySourceFile } from "../../SourceFile/applySourceFile";
|
||||
@ -48,7 +48,7 @@ import { serverMetadata } from "../../Server/data/servers";
|
||||
|
||||
export function init(this: PlayerObject): void {
|
||||
/* Initialize Player's home computer */
|
||||
const t_homeComp = safetlyCreateUniqueServer({
|
||||
const t_homeComp = safelyCreateUniqueServer({
|
||||
adminRights: true,
|
||||
hostname: "home",
|
||||
ip: createUniqueRandomIp(),
|
||||
@ -279,7 +279,7 @@ export function applyForJob(this: PlayerObject, entryPosType: CompanyPosition, s
|
||||
|
||||
if (!this.isQualified(company, pos)) {
|
||||
if (!sing) {
|
||||
dialogBoxCreate("Unfortunately, you do not qualify for this position<br>" + getJobRequirementText(company, pos));
|
||||
dialogBoxCreate("Unfortunately, you do not qualify for this position\n" + getJobRequirementText(company, pos));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -305,7 +305,7 @@ export function applyForJob(this: PlayerObject, entryPosType: CompanyPosition, s
|
||||
dialogBoxCreate("You are already at the highest position for your field! No promotion available");
|
||||
} else {
|
||||
const reqText = getJobRequirementText(company, nextPos);
|
||||
dialogBoxCreate("Unfortunately, you do not qualify for a promotion<br>" + reqText);
|
||||
dialogBoxCreate("Unfortunately, you do not qualify for a promotion\n" + reqText);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -314,7 +314,7 @@ export function applyForJob(this: PlayerObject, entryPosType: CompanyPosition, s
|
||||
this.jobs[company.name] = pos.name;
|
||||
|
||||
if (!sing) {
|
||||
dialogBoxCreate("Congratulations! You were offered a new job at " + company.name + " as a " + pos.name + "!");
|
||||
dialogBoxCreate(`Congratulations! You were offered a new job at ${company.name} for position ${pos.name}!`);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -781,7 +781,7 @@ export function checkForFactionInvitations(this: PlayerObject): Faction[] {
|
||||
invitedFactions.push(kuaigonginternationalFac);
|
||||
}
|
||||
|
||||
//Fulcrum Secret Technologies - If u've unlocked fulcrum secret technolgoies server and have a high rep with the company
|
||||
//Fulcrum Secret Technologies - If you've unlocked fulcrum secret technologies server and have a high rep with the company
|
||||
const fulcrumsecrettechonologiesFac = Factions[FactionNames.FulcrumSecretTechnologies];
|
||||
const fulcrumSecretServer = GetServer(SpecialServers.FulcrumSecretTechnologies);
|
||||
if (!(fulcrumSecretServer instanceof Server))
|
||||
|
@ -54,7 +54,7 @@ export class Sleeve extends Person {
|
||||
/**
|
||||
* Sleeve shock. Number between 0 and 100
|
||||
* Trauma/shock that comes with being in a sleeve. Experience earned
|
||||
* is multipled by shock%. This gets applied before synchronization
|
||||
* is multiplied by shock%. This gets applied before synchronization
|
||||
*
|
||||
* Reputation earned is also multiplied by shock%
|
||||
*/
|
||||
@ -482,7 +482,7 @@ export class Sleeve extends Person {
|
||||
return Generic_toJSON("Sleeve", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a Sleeve object from a JSON save state. */
|
||||
/** Initializes a Sleeve object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): Sleeve {
|
||||
return Generic_fromJSON(Sleeve, value.data);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ export class SleeveBladeburnerWork extends Work {
|
||||
return Generic_toJSON("SleeveBladeburnerWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a BladeburnerWork object from a JSON save state. */
|
||||
/** Initializes a BladeburnerWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveBladeburnerWork {
|
||||
return Generic_fromJSON(SleeveBladeburnerWork, value.data);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ export class SleeveClassWork extends Work {
|
||||
return Generic_toJSON("SleeveClassWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a ClassWork object from a JSON save state. */
|
||||
/** Initializes a ClassWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveClassWork {
|
||||
return Generic_fromJSON(SleeveClassWork, value.data);
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ export class SleeveCompanyWork extends Work {
|
||||
return Generic_toJSON("SleeveCompanyWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a CompanyWork object from a JSON save state. */
|
||||
/** Initializes a CompanyWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveCompanyWork {
|
||||
return Generic_fromJSON(SleeveCompanyWork, value.data);
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ export class SleeveCrimeWork extends Work {
|
||||
return Generic_toJSON("SleeveCrimeWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a RecoveryWork object from a JSON save state. */
|
||||
/** Initializes a RecoveryWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveCrimeWork {
|
||||
return Generic_fromJSON(SleeveCrimeWork, value.data);
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ export class SleeveFactionWork extends Work {
|
||||
return Generic_toJSON("SleeveFactionWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a FactionWork object from a JSON save state. */
|
||||
/** Initializes a FactionWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveFactionWork {
|
||||
return Generic_fromJSON(SleeveFactionWork, value.data);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ export class SleeveInfiltrateWork extends Work {
|
||||
return Generic_toJSON("SleeveInfiltrateWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a BladeburnerWork object from a JSON save state. */
|
||||
/** Initializes a BladeburnerWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveInfiltrateWork {
|
||||
return Generic_fromJSON(SleeveInfiltrateWork, value.data);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ export class SleeveRecoveryWork extends Work {
|
||||
return Generic_toJSON("SleeveRecoveryWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a RecoveryWork object from a JSON save state. */
|
||||
/** Initializes a RecoveryWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveRecoveryWork {
|
||||
return Generic_fromJSON(SleeveRecoveryWork, value.data);
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ export class SleeveSupportWork extends Work {
|
||||
return Generic_toJSON("SleeveSupportWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a BladeburnerWork object from a JSON save state. */
|
||||
/** Initializes a BladeburnerWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveSupportWork {
|
||||
return Generic_fromJSON(SleeveSupportWork, value.data);
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ export class SleeveSynchroWork extends Work {
|
||||
return Generic_toJSON("SleeveSynchroWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a SynchroWork object from a JSON save state. */
|
||||
/** Initializes a SynchroWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): SleeveSynchroWork {
|
||||
return Generic_fromJSON(SleeveSynchroWork, value.data);
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ export function prestigeSourceFile(flume: boolean): void {
|
||||
}
|
||||
}
|
||||
|
||||
// Give levels of NeuroFluxGoverner for Source-File 12. Must be done here before Augmentations are recalculated
|
||||
// Give levels of NeuroFluxGovernor for Source-File 12. Must be done here before Augmentations are recalculated
|
||||
if (Player.sourceFileLvl(12) > 0) {
|
||||
Player.augmentations.push({
|
||||
name: AugmentationNames.NeuroFluxGovernor,
|
||||
|
@ -32,7 +32,7 @@ import { pushGameSaved } from "./Electron";
|
||||
import { defaultMonacoTheme } from "./ScriptEditor/ui/themes";
|
||||
import { FactionNames } from "./Faction/data/FactionNames";
|
||||
import { Faction } from "./Faction/Faction";
|
||||
import { safetlyCreateUniqueServer } from "./Server/ServerHelpers";
|
||||
import { safelyCreateUniqueServer } from "./Server/ServerHelpers";
|
||||
import { SpecialServers } from "./Server/data/SpecialServers";
|
||||
import { v2APIBreak } from "./utils/v2APIBreak";
|
||||
|
||||
@ -461,7 +461,7 @@ function evaluateVersionCompatibility(ver: string | number): void {
|
||||
// Create the darkweb for everyone but it won't be linked
|
||||
const dw = GetServer(SpecialServers.DarkWeb);
|
||||
if (!dw) {
|
||||
const darkweb = safetlyCreateUniqueServer({
|
||||
const darkweb = safelyCreateUniqueServer({
|
||||
ip: createUniqueRandomIp(),
|
||||
hostname: SpecialServers.DarkWeb,
|
||||
organizationName: "",
|
||||
|
@ -41,7 +41,7 @@ export class Script {
|
||||
dependencies: ScriptUrl[] = [];
|
||||
dependents: ScriptReference[] = [];
|
||||
|
||||
// Amount of RAM this Script requres to run
|
||||
// Amount of RAM this Script requires to run
|
||||
ramUsage = 0;
|
||||
ramUsageEntries?: RamUsageEntry[];
|
||||
|
||||
|
32
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
32
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
@ -339,7 +339,7 @@ export interface HacknetNodeConstants {
|
||||
BaseCost: number;
|
||||
/** Base cost per level */
|
||||
LevelBaseCost: number;
|
||||
/** Base cost to incrase RAM */
|
||||
/** Base cost to increase RAM */
|
||||
RamBaseCost: number;
|
||||
/** Base cost to increase cores */
|
||||
CoreBaseCost: number;
|
||||
@ -1297,7 +1297,7 @@ export interface TIX {
|
||||
* Cancel order for stocks.
|
||||
* @remarks
|
||||
* RAM cost: 2.5 GB
|
||||
* Cancels an oustanding Limit or Stop order on the stock market.
|
||||
* Cancels an outstanding Limit or Stop order on the stock market.
|
||||
*
|
||||
* The ability to use limit and stop orders is **not** immediately available to the player and
|
||||
* must be unlocked later on in the game.
|
||||
@ -1777,9 +1777,9 @@ export interface Singularity {
|
||||
* RAM cost: 3 GB * 16/4/1
|
||||
*
|
||||
*
|
||||
* Returns an array with the name of all Factions you currently have oustanding invitations from.
|
||||
* Returns an array with the name of all Factions you currently have outstanding invitations from.
|
||||
*
|
||||
* @returns Array with the name of all Factions you currently have oustanding invitations from.
|
||||
* @returns Array with the name of all Factions you currently have outstanding invitations from.
|
||||
*/
|
||||
checkFactionInvitations(): string[];
|
||||
|
||||
@ -1969,10 +1969,10 @@ export interface Singularity {
|
||||
* RAM cost: 5 GB * 16/4/1
|
||||
*
|
||||
*
|
||||
* This function returns your chance of success at commiting the specified crime.
|
||||
* This function returns your chance of success at committing the specified crime.
|
||||
*
|
||||
* @param crime - Name of crime.
|
||||
* @returns Chance of success at commiting the specified crime.
|
||||
* @returns Chance of success at committing the specified crime.
|
||||
*/
|
||||
getCrimeChance(crime: string): number;
|
||||
|
||||
@ -2621,7 +2621,7 @@ export interface Hacknet {
|
||||
* @param upgName - Name of the upgrade of Hacknet Node.
|
||||
* @param upgTarget - Object to which upgrade applies. Required for certain upgrades.
|
||||
* @param count - Number of upgrades to buy at once. Defaults to 1 if not specified.
|
||||
* For compatability reasons, upgTarget must be specified, even if it is not used, in order to specify count.
|
||||
* For compatibility reasons, upgTarget must be specified, even if it is not used, in order to specify count.
|
||||
* @returns True if the upgrade is successfully purchased, and false otherwise.
|
||||
*/
|
||||
spendHashes(upgName: string, upgTarget?: string, count?: number): boolean;
|
||||
@ -3599,7 +3599,7 @@ export interface Sleeve {
|
||||
*
|
||||
* Returns false if an invalid action is specified.
|
||||
*
|
||||
* @param sleeveNumber - Index of the sleeve to start commiting crime.
|
||||
* @param sleeveNumber - Index of the sleeve to start committing crime.
|
||||
* @param name - Name of the crime. Must be an exact match.
|
||||
* @returns True if this action was set successfully, false otherwise.
|
||||
*/
|
||||
@ -6155,7 +6155,7 @@ export interface NS {
|
||||
* @remarks
|
||||
* RAM cost: 0 GB
|
||||
*
|
||||
* Deleta all data from the underlying queue.
|
||||
* Delete all data from the underlying queue.
|
||||
*
|
||||
* @param handle - Port to clear.
|
||||
*/
|
||||
@ -6397,8 +6397,8 @@ export interface NS {
|
||||
*
|
||||
* see: https://github.com/alexei/sprintf.js
|
||||
* @param format - String to format.
|
||||
* @param args - Formating arguments.
|
||||
* @returns Formated text.
|
||||
* @param args - Formatting arguments.
|
||||
* @returns Formatted text.
|
||||
*/
|
||||
sprintf(format: string, ...args: any[]): string;
|
||||
|
||||
@ -6409,8 +6409,8 @@ export interface NS {
|
||||
*
|
||||
* see: https://github.com/alexei/sprintf.js
|
||||
* @param format - String to format.
|
||||
* @param args - Formating arguments.
|
||||
* @returns Formated text.
|
||||
* @param args - Formatting arguments.
|
||||
* @returns Formatted text.
|
||||
*/
|
||||
vsprintf(format: string, args: any[]): string;
|
||||
|
||||
@ -6420,13 +6420,13 @@ export interface NS {
|
||||
* RAM cost: 0 GB
|
||||
*
|
||||
* Converts a number into a string with the specified formatter.
|
||||
* This uses the numeraljs library, so the formatters must be compatible with that.
|
||||
* This uses the numeral.js library, so the formatters must be compatible with that.
|
||||
* This is the same function that the game itself uses to display numbers.
|
||||
*
|
||||
* see: http://numeraljs.com/
|
||||
* @param n - Number to format.
|
||||
* @param format - Formatter.
|
||||
* @returns Formated number.
|
||||
* @returns Formatted number.
|
||||
*/
|
||||
nFormat(n: number, format: string): string;
|
||||
|
||||
@ -7187,7 +7187,7 @@ interface CorporationInfo {
|
||||
numShares: number;
|
||||
/** Cooldown until shares can be sold again */
|
||||
shareSaleCooldown: number;
|
||||
/** Amount of aqcuirable shares. */
|
||||
/** Amount of acquirable shares. */
|
||||
issuedShares: number;
|
||||
/** Price of the shares */
|
||||
sharePrice: number;
|
||||
|
@ -221,7 +221,7 @@ export function Root(props: IProps): React.ReactElement {
|
||||
});
|
||||
} catch {}
|
||||
} else if (!options.vim) {
|
||||
// Whem vim mode is disabled
|
||||
// When vim mode is disabled
|
||||
vimEditor?.dispose();
|
||||
setVimEditor(null);
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ export function createUniqueRandomIp(): string {
|
||||
return ip;
|
||||
}
|
||||
|
||||
// Saftely add a Server to the AllServers map
|
||||
// Safely add a Server to the AllServers map
|
||||
export function AddToAllServers(server: Server | HacknetServer): void {
|
||||
if (GetServer(server.hostname)) {
|
||||
console.warn(`Hostname of the server thats being added: ${server.hostname}`);
|
||||
|
@ -49,7 +49,7 @@ export abstract class BaseServer {
|
||||
// IP Address. Must be unique
|
||||
ip = "";
|
||||
|
||||
// Flag indicating whether player is curently connected to this server
|
||||
// Flag indicating whether player is currently connected to this server
|
||||
isConnectedTo = false;
|
||||
|
||||
// RAM (GB) available on this server
|
||||
@ -90,7 +90,7 @@ export abstract class BaseServer {
|
||||
// Text files on this server
|
||||
textFiles: TextFile[] = [];
|
||||
|
||||
// Flag indicating wehther this is a purchased server
|
||||
// Flag indicating whether this is a purchased server
|
||||
purchasedByPlayer = false;
|
||||
|
||||
constructor(params: IConstructorParams = { hostname: "", ip: createRandomIp() }) {
|
||||
@ -232,7 +232,6 @@ export abstract class BaseServer {
|
||||
this.maxRam = ram;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
updateRamUsed(ram: number): void {
|
||||
this.ramUsed = ram;
|
||||
}
|
||||
@ -252,7 +251,7 @@ export abstract class BaseServer {
|
||||
|
||||
/**
|
||||
* Write to a script file
|
||||
* Overwrites existing files. Creates new files if the script does not eixst
|
||||
* Overwrites existing files. Creates new files if the script does not exist.
|
||||
*/
|
||||
writeToScriptFile(fn: string, code: string): writeResult {
|
||||
const ret = { success: false, overwritten: false };
|
||||
|
@ -15,7 +15,7 @@ import { isValidNumber } from "../utils/helpers/isValidNumber";
|
||||
* Constructs a new server, while also ensuring that the new server
|
||||
* does not have a duplicate hostname/ip.
|
||||
*/
|
||||
export function safetlyCreateUniqueServer(params: IConstructorParams): Server {
|
||||
export function safelyCreateUniqueServer(params: IConstructorParams): Server {
|
||||
let hostname: string = params.hostname.replace(/ /g, `-`);
|
||||
|
||||
if (params.ip != null && ipExists(params.ip)) {
|
||||
@ -118,7 +118,7 @@ export function numCycleForGrowthCorrected(server: Server, targetMoney: number,
|
||||
*
|
||||
* A change of variable will do. The idea is to add an equation introducing a new variable (w here) in the form c = f(w) (for some f)
|
||||
* With this equation we will eliminate all references to c, then solve for w and plug the result in the new equation to get c.
|
||||
* The change of variable performed here should get rid of the unwanted terms mentionned above, c = w/(ln(b)*t) - o should help.
|
||||
* The change of variable performed here should get rid of the unwanted terms mentioned above, c = w/(ln(b)*t) - o should help.
|
||||
* This change of variable is allowed because whatever the value of c is, there is a value of w such that this equation holds:
|
||||
* w = (c + o)*ln(b)*t (see how we used the terms we wanted to eliminate in order to build this variable change)
|
||||
*
|
||||
@ -130,7 +130,7 @@ export function numCycleForGrowthCorrected(server: Server, targetMoney: number,
|
||||
* Finally we invert the variable change: c = W(n * ln(b) * t * b^(o*t))/(ln(b)*t) - o
|
||||
*
|
||||
* There is still an issue left: b^(o*t) doesn't fit inside a double precision float
|
||||
* because the typical amount of money on servers is arround 10^6~10^9
|
||||
* because the typical amount of money on servers is around 10^6~10^9
|
||||
* We need to get an approximation of W without computing the power when o is huge
|
||||
* Thankfully an approximation giving ~30% error uses log immediately so we will use
|
||||
* W(n * ln(b) * t * b^(o*t)) ~= log(n * ln(b) * t * b^(o*t)) = log(n * ln(b) * t) + log(exp(ln(b) * o * t))
|
||||
@ -179,7 +179,7 @@ export function numCycleForGrowthCorrected(server: Server, targetMoney: number,
|
||||
* The main question to ask when using this method is "does it converges?"
|
||||
* (are the approximations getting better?), if it does then it does quickly.
|
||||
* DOES IT CONVERGES? In the present case it does. The reason why doesn't help explaining the algorithm.
|
||||
* If you are intrested then check out the wikipedia page.
|
||||
* If you are interested then check out the wikipedia page.
|
||||
*/
|
||||
const bt = exponentialBase ** threadMultiplier;
|
||||
let corr = Infinity;
|
||||
|
@ -3,7 +3,7 @@
|
||||
* the home computer
|
||||
*/
|
||||
import { AddToAllServers, createUniqueRandomIp } from "./AllServers";
|
||||
import { safetlyCreateUniqueServer } from "./ServerHelpers";
|
||||
import { safelyCreateUniqueServer } from "./ServerHelpers";
|
||||
|
||||
import { BitNodeMultipliers } from "../BitNode/BitNodeMultipliers";
|
||||
import { CONSTANTS } from "../Constants";
|
||||
@ -75,7 +75,7 @@ export function purchaseServer(hostname: string, ram: number, cost: number): voi
|
||||
}
|
||||
|
||||
// Create server
|
||||
const newServ = safetlyCreateUniqueServer({
|
||||
const newServ = safelyCreateUniqueServer({
|
||||
adminRights: true,
|
||||
hostname: hostname,
|
||||
ip: createUniqueRandomIp(),
|
||||
|
@ -33,7 +33,7 @@ export class Order {
|
||||
invalidArgs = true;
|
||||
}
|
||||
if (invalidArgs) {
|
||||
throw new Error(`Invalid constructor paramters for Order`);
|
||||
throw new Error(`Invalid constructor parameters for Order`);
|
||||
}
|
||||
|
||||
this.stockSymbol = stockSymbol;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* How many stock market 'ticks' before a 'cycle' is triggered.
|
||||
* A 'tick' is whenver stock prices update
|
||||
* A 'tick' is whenever stock prices update
|
||||
*/
|
||||
export const TicksPerCycle = 75;
|
||||
|
@ -35,7 +35,7 @@ export function getBuyTransactionCost(stock: Stock, shares: number, posType: Pos
|
||||
* Calculate the TOTAL amount of money gained from a sale (NOT net profit). This accounts
|
||||
* for spread and commission.
|
||||
* @param {Stock} stock - Stock being sold
|
||||
* @param {number} shares - Number of sharse being transacted
|
||||
* @param {number} shares - Number of shares being transacted
|
||||
* @param {PositionTypes} posType - Long or short position
|
||||
* @returns {number | null} Amount of money gained from transaction. Returns null for an invalid transaction
|
||||
*/
|
||||
@ -64,7 +64,7 @@ export function getSellTransactionGain(stock: Stock, shares: number, posType: Po
|
||||
* Processes a stock's change in forecast & second-order forecast
|
||||
* whenever it is transacted
|
||||
* @param {Stock} stock - Stock being sold
|
||||
* @param {number} shares - Number of sharse being transacted
|
||||
* @param {number} shares - Number of shares being transacted
|
||||
* @param {PositionTypes} posType - Long or short position
|
||||
*/
|
||||
export function processTransactionForecastMovement(stock: Stock, shares: number): void {
|
||||
|
@ -180,7 +180,7 @@ export function StockTicker(props: IProps): React.ReactElement {
|
||||
function handleOrderTypeChange(e: SelectChangeEvent<string>): void {
|
||||
const val = e.target.value;
|
||||
|
||||
// The select value returns a string. Afaik TypeScript doesnt make it easy
|
||||
// The select value returns a string. Afaik TypeScript doesn't make it easy
|
||||
// to convert that string back to an enum type so we'll just do this for now
|
||||
switch (val) {
|
||||
case SelectorOrderType.Limit:
|
||||
|
@ -20,7 +20,7 @@ type IProps = {
|
||||
function LongPosition(props: IProps): React.ReactElement {
|
||||
const stock = props.stock;
|
||||
|
||||
// Caculate total returns
|
||||
// Calculate total returns
|
||||
const totalCost = stock.playerShares * stock.playerAvgPx;
|
||||
const gains = (stock.getBidPrice() - stock.playerAvgPx) * stock.playerShares;
|
||||
let percentageGains = gains / totalCost;
|
||||
@ -57,7 +57,7 @@ function LongPosition(props: IProps): React.ReactElement {
|
||||
function ShortPosition(props: IProps): React.ReactElement {
|
||||
const stock = props.stock;
|
||||
|
||||
// Caculate total returns
|
||||
// Calculate total returns
|
||||
const totalCost = stock.playerShortShares * stock.playerAvgShortPx;
|
||||
const gains = (stock.playerAvgShortPx - stock.getAskPrice()) * stock.playerShortShares;
|
||||
let percentageGains = gains / totalCost;
|
||||
|
@ -47,7 +47,7 @@ export function StockTickers(props: IProps): React.ReactElement {
|
||||
for (const stockMarketProp of Object.keys(props.stockMarket)) {
|
||||
const val = props.stockMarket[stockMarketProp];
|
||||
if (val instanceof Stock) {
|
||||
// Skip if there's a filter and the stock isnt in that filter
|
||||
// Skip if there's a filter and the stock isn't in that filter
|
||||
if (watchlistSymbols.length > 0 && !watchlistSymbols.includes(val.symbol)) {
|
||||
continue;
|
||||
}
|
||||
@ -57,7 +57,7 @@ export function StockTickers(props: IProps): React.ReactElement {
|
||||
orders = [];
|
||||
}
|
||||
|
||||
// Skip if we're in portfolio mode and the player doesnt own this or have any active orders
|
||||
// Skip if we're in portfolio mode and the player doesn't own this or have any active orders
|
||||
if (tickerDisplayMode === TickerDisplayMode.Portfolio) {
|
||||
if (val.playerShares === 0 && val.playerShortShares === 0 && orders.length === 0) {
|
||||
continue;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* React component for the tickers configuration section of the Stock Market UI.
|
||||
* This config lets you change the way stock tickers are displayed (watchlist,
|
||||
* all/portoflio mode, etc)
|
||||
* all/portfolio mode, etc)
|
||||
*/
|
||||
import * as React from "react";
|
||||
import Typography from "@mui/material/Typography";
|
||||
|
@ -2,7 +2,7 @@ import { KEY } from "../utils/helpers/keyCodes";
|
||||
import { substituteAliases } from "../Alias";
|
||||
// Helper function to parse individual arguments into number/boolean/string as appropriate
|
||||
function parseArg(arg: string): string | number | boolean {
|
||||
// Handles all numbers including hexadecimal, octal, and binary representations, returning NaN on an unparseable string
|
||||
// Handles all numbers including hexadecimal, octal, and binary representations, returning NaN on an unparsable string
|
||||
const asNumber = Number(arg);
|
||||
if (!isNaN(asNumber)) {
|
||||
return asNumber;
|
||||
|
@ -464,7 +464,7 @@ export class Terminal {
|
||||
this.contractOpen = true;
|
||||
const res = await contract.prompt();
|
||||
|
||||
//Check if the contract still exists by the time the promise is fullfilled
|
||||
//Check if the contract still exists by the time the promise is fulfilled
|
||||
if (serv.getContract(contractName) == null) {
|
||||
this.contractOpen = false;
|
||||
return this.error("Contract no longer exists (Was it solved by a script?)");
|
||||
|
@ -60,7 +60,7 @@ export function cp(args: (string | number | boolean)[], server: BaseServer): voi
|
||||
return;
|
||||
}
|
||||
if (tRes.overwritten) {
|
||||
Terminal.print(`WARNING: ${dst} already exists and will be overwriten`);
|
||||
Terminal.print(`WARNING: ${dst} already exists and will be overwritten`);
|
||||
Terminal.print(`${dst} overwritten`);
|
||||
return;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ export function mv(args: (string | number | boolean)[], server: BaseServer): voi
|
||||
return;
|
||||
}
|
||||
|
||||
// Command doesnt work if script is running
|
||||
// Command doesn't work if script is running
|
||||
if (server.isRunning(sourcePath)) {
|
||||
Terminal.error(`Cannot use 'mv' on a script that is running`);
|
||||
return;
|
||||
@ -59,7 +59,7 @@ export function mv(args: (string | number | boolean)[], server: BaseServer): voi
|
||||
if (destFile != null) {
|
||||
// Already exists, will be overwritten, so we'll delete it
|
||||
|
||||
// Command doesnt work if script is running
|
||||
// Command doesn't work if script is running
|
||||
if (server.isRunning(destPath)) {
|
||||
Terminal.error(`Cannot use 'mv' on a script that is running`);
|
||||
return;
|
||||
|
@ -44,7 +44,7 @@ export function runScript(commandArgs: (string | number | boolean)[], server: Ba
|
||||
if (server.scripts[i].filename !== scriptName) {
|
||||
continue;
|
||||
}
|
||||
// Check for admin rights and that there is enough RAM availble to run
|
||||
// Check for admin rights and that there is enough RAM available to run
|
||||
const script = server.scripts[i];
|
||||
script.server = server.hostname;
|
||||
const ramUsage = script.ramUsage * numThreads;
|
||||
|
@ -41,7 +41,7 @@ export function scp(args: (string | number | boolean)[], server: BaseServer): vo
|
||||
return;
|
||||
}
|
||||
if (tRes.overwritten) {
|
||||
Terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwriten`);
|
||||
Terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwritten`);
|
||||
Terminal.print(`${scriptname} overwritten on ${destServer.hostname}`);
|
||||
return;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ export async function determineAllPossibilitiesForTabCompletion(
|
||||
if (evaledParentDirPath === "/") {
|
||||
evaledParentDirPath = null;
|
||||
} else if (evaledParentDirPath == null) {
|
||||
// do nothing for some reason tests dont like this?
|
||||
// do nothing for some reason tests don't like this?
|
||||
// return allPos; // Invalid path
|
||||
} else {
|
||||
evaledParentDirPath += "/";
|
||||
|
@ -60,7 +60,7 @@ export function tabCompletion(
|
||||
const longestStartSubstr = longestCommonStart(allPossibilities);
|
||||
/**
|
||||
* If the longest common starting substring of remaining possibilities is the same
|
||||
* as whatevers already in terminal, just list all possible options. Otherwise,
|
||||
* as whatever's already in terminal, just list all possible options. Otherwise,
|
||||
* change the input in the terminal to the longest common starting substr
|
||||
*/
|
||||
if (arg === "") {
|
||||
|
@ -67,7 +67,7 @@ export class TextFile {
|
||||
this.text = txt;
|
||||
}
|
||||
|
||||
/** Initiatizes a TextFile from a JSON save state. */
|
||||
/** Initializes a TextFile from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): TextFile {
|
||||
return Generic_fromJSON(TextFile, value.data);
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ export class ClassWork extends Work {
|
||||
return Generic_toJSON("ClassWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a ClassWork object from a JSON save state. */
|
||||
/** Initializes a ClassWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): ClassWork {
|
||||
return Generic_fromJSON(ClassWork, value.data);
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ export class CompanyWork extends Work {
|
||||
return Generic_toJSON("CompanyWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a CompanyWork object from a JSON save state. */
|
||||
/** Initializes a CompanyWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): CompanyWork {
|
||||
return Generic_fromJSON(CompanyWork, value.data);
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ export class CreateProgramWork extends Work {
|
||||
return Generic_toJSON("CreateProgramWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a CreateProgramWork object from a JSON save state. */
|
||||
/** Initializes a CreateProgramWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): CreateProgramWork {
|
||||
return Generic_fromJSON(CreateProgramWork, value.data);
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ export class CrimeWork extends Work {
|
||||
return Generic_toJSON("CrimeWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a CrimeWork object from a JSON save state. */
|
||||
/** Initializes a CrimeWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): CrimeWork {
|
||||
return Generic_fromJSON(CrimeWork, value.data);
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ export class FactionWork extends Work {
|
||||
return Generic_toJSON("FactionWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a FactionWork object from a JSON save state. */
|
||||
/** Initializes a FactionWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): FactionWork {
|
||||
return Generic_fromJSON(FactionWork, value.data);
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ export class GraftingWork extends Work {
|
||||
return Generic_toJSON("GraftingWork", this);
|
||||
}
|
||||
|
||||
/** Initiatizes a GraftingWork object from a JSON save state. */
|
||||
/** Initializes a GraftingWork object from a JSON save state. */
|
||||
static fromJSON(value: IReviverValue): GraftingWork {
|
||||
return Generic_fromJSON(GraftingWork, value.data);
|
||||
}
|
||||
|
@ -1444,7 +1444,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [
|
||||
coloring[initialVertex] = 0;
|
||||
const frontier: number[] = [initialVertex];
|
||||
|
||||
//Propogate the coloring throughout the component containing v greedily
|
||||
//Propagate the coloring throughout the component containing v greedily
|
||||
while (frontier.length > 0) {
|
||||
const v: number = frontier.pop() || 0;
|
||||
const neighbors: number[] = neighbourhood(v);
|
||||
@ -1728,7 +1728,7 @@ export const codingContractTypesMetadata: ICodingContractTypeMetadata[] = [
|
||||
return [
|
||||
"Vigenère cipher is a type of polyalphabetic substitution. It uses ",
|
||||
"the Vigenère square to encrypt and decrypt plaintext with a keyword.\n\n",
|
||||
" Vignenère square:\n",
|
||||
" Vigenère square:\n",
|
||||
" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \n",
|
||||
" +----------------------------------------------------\n",
|
||||
" A | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \n",
|
||||
|
@ -196,7 +196,7 @@ function ansiCodeStyle(code: string | null): Record<string, any> {
|
||||
} else if (codePart == 4) {
|
||||
style.textDecoration = "underline";
|
||||
}
|
||||
// Forground Color (x8)
|
||||
// Foreground Color (x8)
|
||||
else if (30 <= codePart && codePart < 38) {
|
||||
if (COLOR_MAP_BRIGHT[codePart % 10]) {
|
||||
style.color = COLOR_MAP_BRIGHT[codePart % 10];
|
||||
@ -208,7 +208,7 @@ function ansiCodeStyle(code: string | null): Record<string, any> {
|
||||
style.backgroundColor = COLOR_MAP_DARK[codePart % 10];
|
||||
}
|
||||
}
|
||||
// Forground Color (x256)
|
||||
// Foreground Color (x256)
|
||||
else if (codePart == 38) {
|
||||
nextStyleKey = "color";
|
||||
}
|
||||
|
@ -156,10 +156,10 @@ function LogWindow(props: IProps): React.ReactElement {
|
||||
// setTimeout(() => {
|
||||
// const server = GetServer(script.server);
|
||||
// if (server === null) return;
|
||||
// const exisitingScript = findRunningScript(script.filename, script.args, server);
|
||||
// if (exisitingScript) {
|
||||
// exisitingScript.logs = script.logs.concat(exisitingScript.logs)
|
||||
// setScript(exisitingScript)
|
||||
// const existingScript = findRunningScript(script.filename, script.args, server);
|
||||
// if (existingScript) {
|
||||
// existingScript.logs = script.logs.concat(existingScript.logs)
|
||||
// setScript(existingScript)
|
||||
// }
|
||||
// rerender();
|
||||
// }, 100)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user