mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-18 04:05:46 +01:00
allbuild commit e6d14eff
This commit is contained in:
parent
e6d14eff68
commit
3e4f26ac0a
4
dist/main.bundle.js
vendored
4
dist/main.bundle.js
vendored
File diff suppressed because one or more lines are too long
2
dist/main.bundle.js.map
vendored
2
dist/main.bundle.js.map
vendored
File diff suppressed because one or more lines are too long
42
dist/vendor.bundle.js
vendored
42
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vendor.bundle.js.map
vendored
2
dist/vendor.bundle.js.map
vendored
File diff suppressed because one or more lines are too long
@ -3,6 +3,82 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
v2.0.0 - 2022-07-19 Work rework
|
||||
-------------------------------
|
||||
|
||||
API break rewards
|
||||
|
||||
* Everyone is awarded 10 NFG.
|
||||
* All work in progress program is auto completed.
|
||||
* All work in progress crafting is auto completed without adding entropy.
|
||||
|
||||
Work (Create program / Work for faction / Studying / etc ...)
|
||||
|
||||
* Working has been rebuilt from the grounds up. The motivation for that change is that all
|
||||
different types of work all required different cached variables on the main Player object.
|
||||
This caused a lot of bugs and crashes. It's been reworked in such a way as to prevent bugs
|
||||
and make it nearly trivial to add new kinds of work. However, since this caused a few API break
|
||||
I've decided to mark this version following semver protocols and call it 2.0.0
|
||||
* Crime can be unfocused and auto loops, no more spam clicking.
|
||||
* All work type give their reward immediately. No need to stop work to bank rewards like reputation.
|
||||
* Faction and Company work no longer have a time limit.
|
||||
* Company work no longer reduces rep gain by half for quitting early.
|
||||
* Company faction require 400k rep to join (from 200k)
|
||||
* Backdooring company server reduces faction requirement to 300k.
|
||||
* All work generally no longer keep track of cumulative gains like exp and reputation since it's applied instantly.
|
||||
* getPlayer returns way less fields but does return the new 'currentWork' field.
|
||||
|
||||
API breaks
|
||||
|
||||
* workForCompany argument 'companyName' is now not-optional
|
||||
* commitCrime now has 'focus' optional parameter
|
||||
* using getScriptIncome to get total income has been separated to getTotalScriptIncome.
|
||||
* using getScriptExpGain to get total income has been separated to getTotalScriptExpGain.
|
||||
* scp has it's 2 last argument reversed, the signature is now (files, destination, optional_source)
|
||||
* ns.connect and other singularity function are no longer available at the top level.
|
||||
They were already hidden from documentation but now they're gone.
|
||||
* stock.buy and stock.sell were renamed to stock.buyStock and stock.sellStock because 'buy' and 'sell'
|
||||
are very common tokens.
|
||||
* corporation.bribe no longer allows to give shares as bribe.
|
||||
|
||||
Netscript
|
||||
|
||||
* Add singularity.getCurrentWork
|
||||
* Add singularity.getAugmentationBasePrice
|
||||
* Add sleeve.getSleeveAugmentationPrice
|
||||
* Add sleeve.getSleeveAugmentationRepReq
|
||||
* Fix infiltration.getInfiltrationLocations
|
||||
* Singularity.goToLocation support for non-city-specific locations (@Ansopedian)
|
||||
* All corporation functions are synchronous. Job assignment only works on the following cycle. (@stalefishies)
|
||||
* Add batch functionality to NS spendHashes API (@undeemiss)
|
||||
* Fix #3661 Add missing memory property to Sleeve API (@borisflagell)
|
||||
* FIX#3732 Cannot assign two sleeve on "Take on contracts" regardless of contract type. (@borisflagell)
|
||||
|
||||
Corporation
|
||||
|
||||
* Dividend fixes and exposing dividends info via scripts (@stalefishies)
|
||||
* Add big number format support in some Corporation's modal (@borisflagell)
|
||||
* Fix #3261 Industry overview number formatting (@nickofolas)
|
||||
|
||||
Multipliers
|
||||
|
||||
* The main player object was also plagues with a million fields all called '*_mult'. Representing the different multipliers
|
||||
* These have been refactored in a field called 'mults'.
|
||||
|
||||
Misc.
|
||||
|
||||
* #3596 Enhanced terminal command parsing (@RevanProdigalKnight)
|
||||
* Fix #3366 Sleeve UI would sometimes displays the wrong stat while working out. (@borisflagell)
|
||||
* Two new encryption themed contracts - caesar and vigenere (@Markus-D-M)
|
||||
* Fixes #3132 several Sleeve can no longer works concurrently in the same company (@borisflagell)
|
||||
* FIX #3514 Clear recently killed tab on BN end event (@Daniel-Barbera)
|
||||
* HammingCodes description and implementation fixes (@s2ks)
|
||||
* FIX #3794 Sleeve were getting less shocked when hospitalized (was positive, should have detrimental) (@borisflagell)
|
||||
* Fix #3803 Servers can no longer have duplicate IPs (@crimsonhawk47)
|
||||
* Fix #3854 ctrl+c does not clear terminal input (@evil-tim)
|
||||
* Nerf noodle bar, obviously.
|
||||
|
||||
|
||||
v1.6.3 - 2022-04-01 Few stanek fixes
|
||||
------------------------------------
|
||||
|
||||
|
@ -57,8 +57,7 @@ getPlayer
|
||||
|
||||
The reason for that is that these fields are all, in one way or another, included in the new work field 'currentWork'.
|
||||
Some of these values are also irrelevant.
|
||||
'currentWork' will be one of many different kind of value. For example when creating a program it will have a programName field.
|
||||
One field that all kinds of work have in common is 'type' which denotes the current kind of work.
|
||||
Take a look at the new singularity.getCurrentWork function.
|
||||
|
||||
All fields ending in _mult have been moved to the 'mults' struct.
|
||||
For example: getPlayer().hacking_skill_mult is now getPlayer().mults.hacking_skill
|
||||
|
@ -272,10 +272,11 @@ v2.0.0 - 2022-07-19 Work rework
|
||||
|
||||
Netscript
|
||||
|
||||
* Add getAugmentationBasePrice
|
||||
* Add getSleeveAugmentationPrice
|
||||
* Add getSleeveAugmentationRepReq
|
||||
* Fix getInfiltrationLocations
|
||||
* Add singularity.getCurrentWork
|
||||
* Add singularity.getAugmentationBasePrice
|
||||
* Add sleeve.getSleeveAugmentationPrice
|
||||
* Add sleeve.getSleeveAugmentationRepReq
|
||||
* Fix infiltration.getInfiltrationLocations
|
||||
* Singularity.goToLocation support for non-city-specific locations (@Ansopedian)
|
||||
* All corporation functions are synchronous. Job assignment only works on the following cycle. (@stalefishies)
|
||||
* Add batch functionality to NS spendHashes API (@undeemiss)
|
||||
|
@ -203,6 +203,7 @@ const singularity = {
|
||||
setFocus: SF4Cost(0.1),
|
||||
b1tflum3: SF4Cost(16),
|
||||
destroyW0r1dD43m0n: SF4Cost(32),
|
||||
getCurrentWork: SF4Cost(0.5),
|
||||
};
|
||||
|
||||
// Gang API
|
||||
|
@ -1278,5 +1278,9 @@ export function NetscriptSingularity(player: IPlayer, workerScript: WorkerScript
|
||||
runAfterReset(callbackScript);
|
||||
}, 0);
|
||||
},
|
||||
getCurrentWork: () => (): any | null => {
|
||||
if (!player.currentWork) return null;
|
||||
return player.currentWork.APICopy();
|
||||
},
|
||||
};
|
||||
}
|
||||
|
9
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
9
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
@ -2344,6 +2344,15 @@ export interface Singularity {
|
||||
* @param callbackScript - Name of the script to launch in the next BN.
|
||||
*/
|
||||
destroyW0r1dD43m0n(nextBN: number, callbackScript?: string): void;
|
||||
|
||||
/**
|
||||
* Get the current work the player is doing.
|
||||
* @remarks
|
||||
* RAM cost: 0.5 GB * 16/4/1
|
||||
*
|
||||
* @returns - An object representing the current work. Fields depend on the kind of work.
|
||||
*/
|
||||
getCurrentWork(): any | null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -12,18 +12,18 @@ import { Work, WorkType } from "./Work";
|
||||
import { applyWorkStats, newWorkStats, sumWorkStats, WorkStats } from "./WorkStats";
|
||||
|
||||
export enum ClassType {
|
||||
StudyComputerScience = "StudyComputerScience",
|
||||
DataStructures = "DataStructures",
|
||||
Networks = "Networks",
|
||||
Algorithms = "Algorithms",
|
||||
StudyComputerScience = "STUDYCOMPUTERSCIENCE",
|
||||
DataStructures = "DATASTRUCTURES",
|
||||
Networks = "NETWORKS",
|
||||
Algorithms = "ALGORITHMS",
|
||||
|
||||
Management = "Management",
|
||||
Leadership = "Leadership",
|
||||
Management = "MANAGEMENT",
|
||||
Leadership = "LEADERSHIP",
|
||||
|
||||
GymStrength = "GymStrength",
|
||||
GymDefense = "GymDefense",
|
||||
GymDexterity = "GymDexterity",
|
||||
GymAgility = "GymAgility",
|
||||
GymStrength = "GYMSTRENGTH",
|
||||
GymDefense = "GYMDEFENSE",
|
||||
GymDexterity = "GYMDEXTERITY",
|
||||
GymAgility = "GYMAGILITY",
|
||||
}
|
||||
|
||||
export interface Class {
|
||||
@ -179,6 +179,15 @@ export class ClassWork extends Work {
|
||||
}
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
classType: this.classType,
|
||||
location: this.location,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the current object to a JSON save state.
|
||||
*/
|
||||
|
@ -54,6 +54,14 @@ export class CompanyWork extends Work {
|
||||
);
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
companyName: this.companyName,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the current object to a JSON save state.
|
||||
*/
|
||||
|
@ -101,6 +101,14 @@ export class CreateProgramWork extends Work {
|
||||
}
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
programName: this.programName,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the current object to a JSON save state.
|
||||
*/
|
||||
|
@ -9,6 +9,51 @@ import { CrimeType } from "../utils/WorkType";
|
||||
import { Work, WorkType } from "./Work";
|
||||
import { newWorkStats, scaleWorkStats, WorkStats } from "./WorkStats";
|
||||
|
||||
enum newCrimeType {
|
||||
SHOPLIFT = "SHOPLIFT",
|
||||
ROBSTORE = "ROBSTORE",
|
||||
MUG = "MUG",
|
||||
LARCENY = "LARCENY",
|
||||
DRUGS = "DRUGS",
|
||||
BONDFORGERY = "BONDFORGERY",
|
||||
TRAFFICKARMS = "TRAFFICKARMS",
|
||||
HOMICIDE = "HOMICIDE",
|
||||
GRANDTHEFTAUTO = "GRANDTHEFTAUTO",
|
||||
KIDNAP = "KIDNAP",
|
||||
ASSASSINATION = "ASSASSINATION",
|
||||
HEIST = "HEIST",
|
||||
}
|
||||
|
||||
const convertCrimeType = (crimeType: CrimeType): newCrimeType => {
|
||||
switch (crimeType) {
|
||||
case CrimeType.Shoplift:
|
||||
return newCrimeType.SHOPLIFT;
|
||||
case CrimeType.RobStore:
|
||||
return newCrimeType.ROBSTORE;
|
||||
case CrimeType.Mug:
|
||||
return newCrimeType.MUG;
|
||||
case CrimeType.Larceny:
|
||||
return newCrimeType.LARCENY;
|
||||
case CrimeType.Drugs:
|
||||
return newCrimeType.DRUGS;
|
||||
case CrimeType.BondForgery:
|
||||
return newCrimeType.BONDFORGERY;
|
||||
case CrimeType.TraffickArms:
|
||||
return newCrimeType.TRAFFICKARMS;
|
||||
case CrimeType.Homicide:
|
||||
return newCrimeType.HOMICIDE;
|
||||
case CrimeType.GrandTheftAuto:
|
||||
return newCrimeType.GRANDTHEFTAUTO;
|
||||
case CrimeType.Kidnap:
|
||||
return newCrimeType.KIDNAP;
|
||||
case CrimeType.Assassination:
|
||||
return newCrimeType.ASSASSINATION;
|
||||
case CrimeType.Heist:
|
||||
return newCrimeType.HEIST;
|
||||
}
|
||||
return newCrimeType.SHOPLIFT;
|
||||
};
|
||||
|
||||
interface CrimeWorkParams {
|
||||
crimeType: CrimeType;
|
||||
singularity: boolean;
|
||||
@ -72,7 +117,7 @@ export class CrimeWork extends Work {
|
||||
let karma = crime.karma;
|
||||
const success = determineCrimeSuccess(player, crime.type);
|
||||
if (success) {
|
||||
player.gainMoney(gains.money, "crime");
|
||||
player.gainMoney(gains.money * player.mults.crime_money, "crime");
|
||||
player.numPeopleKilled += crime.kills;
|
||||
player.gainIntelligenceExp(gains.intExp);
|
||||
} else {
|
||||
@ -88,8 +133,16 @@ export class CrimeWork extends Work {
|
||||
player.karma -= karma * focusPenalty;
|
||||
}
|
||||
|
||||
finish(player: IPlayer, cancelled: boolean): void {
|
||||
if (cancelled) return;
|
||||
finish(): void {
|
||||
/** nothing to do */
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
crimeType: convertCrimeType(this.crimeType),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -83,6 +83,15 @@ export class FactionWork extends Work {
|
||||
}
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
factionWorkType: this.factionWorkType,
|
||||
factionName: this.factionName,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the current object to a JSON save state.
|
||||
*/
|
||||
|
@ -84,6 +84,14 @@ export class GraftingWork extends Work {
|
||||
}
|
||||
}
|
||||
|
||||
APICopy(): Record<string, unknown> {
|
||||
return {
|
||||
type: this.type,
|
||||
cyclesWorked: this.cyclesWorked,
|
||||
augmentation: this.augmentation,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the current object to a JSON save state.
|
||||
*/
|
||||
|
@ -14,6 +14,7 @@ export abstract class Work {
|
||||
|
||||
abstract process(player: IPlayer, cycles: number): boolean;
|
||||
abstract finish(player: IPlayer, cancelled: boolean): void;
|
||||
abstract APICopy(): Record<string, unknown>;
|
||||
abstract toJSON(): IReviverValue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user