mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-17 23:08:36 +02:00
@@ -3,6 +3,21 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
v1.6.3 - 2022-04-01 Few stanek fixes
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Stanek Gift
|
||||||
|
|
||||||
|
* Has a minimum size of 2x3
|
||||||
|
* Active Fragment property 'avgCharge' renamed to 'highestCharge'
|
||||||
|
* Formula for fragment effect updated to make 561% more sense.
|
||||||
|
Now you can charge to your heart content.
|
||||||
|
* Logs for the 'chargeFragment' function updated.
|
||||||
|
|
||||||
|
Misc.
|
||||||
|
|
||||||
|
* Nerf noodle bar.
|
||||||
|
|
||||||
v1.6.0 - 2022-03-29 Grafting
|
v1.6.0 - 2022-03-29 Grafting
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ documentation_title = '{0} Documentation'.format(project)
|
|||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '1.6'
|
version = '1.6'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '1.6.0'
|
release = '1.6.3'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
106
src/Constants.ts
106
src/Constants.ts
@@ -116,8 +116,8 @@ export const CONSTANTS: {
|
|||||||
TotalNumBitNodes: number;
|
TotalNumBitNodes: number;
|
||||||
LatestUpdate: string;
|
LatestUpdate: string;
|
||||||
} = {
|
} = {
|
||||||
VersionString: "1.6.1",
|
VersionString: "1.6.3",
|
||||||
VersionNumber: 12,
|
VersionNumber: 13,
|
||||||
|
|
||||||
// Speed (in ms) at which the main loop is updated
|
// Speed (in ms) at which the main loop is updated
|
||||||
_idleSpeed: 200,
|
_idleSpeed: 200,
|
||||||
@@ -287,105 +287,19 @@ export const CONSTANTS: {
|
|||||||
TotalNumBitNodes: 24,
|
TotalNumBitNodes: 24,
|
||||||
|
|
||||||
LatestUpdate: `
|
LatestUpdate: `
|
||||||
v1.6.0 - 2022-03-29 Grafting
|
v1.6.3 - 2022-04-01 Few stanek fixes
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
** Vitalife secret lab **
|
Stanek Gift
|
||||||
|
|
||||||
* A new mechanic called Augmentation Grafting has been added. Resleeving has been removed.
|
* Has a minimum size of 2x3
|
||||||
* Credit to @nickofolas for his incredible work.
|
* Active Fragment property 'avgCharge' renamed to 'highestCharge'
|
||||||
|
* Formula for fragment effect updated to make 561% more sense.
|
||||||
|
Now you can charge to your heart content.
|
||||||
|
* Logs for the 'chargeFragment' function updated.
|
||||||
|
|
||||||
** Stanek **
|
Misc.
|
||||||
|
|
||||||
* BREAKING: Many functions in the stanek API were renamed in order to avoid name collision with things like Map.prototype.get
|
|
||||||
|
|
||||||
** UI **
|
|
||||||
|
|
||||||
* Major update to Sleeve, Gang UI, and Create Program (@nickofolas)
|
|
||||||
* re-add pre tags to support slash n in prompt (@jacktose)
|
|
||||||
* Tabelize linked output of 'ls' (@Master-Guy)
|
|
||||||
* Add the ability to filter open scripts (@phyzical)
|
|
||||||
* Add minHeight to editor tabs (@nickofolas)
|
|
||||||
* Properly expand gang equipment cards to fill entire screen (@nickofolas)
|
|
||||||
* Add shortcut to Faction augmentations page from FactionsRoot (@nickofolas)
|
|
||||||
* Fix extra space on editor tabs (@nickofolas)
|
|
||||||
* Present offline message as list (@DSteve595)
|
|
||||||
* add box showing remaining augments per faction (@jjayeon)
|
|
||||||
* Add tab switching support to vim mode (@JParisFerrer)
|
|
||||||
* Show current task on gang management screen (@zeddrak)
|
|
||||||
* Fix for ui of gang members current task when set via api (@phyzical)
|
|
||||||
* Don't hide irrelevant materials if their stock is not empty and hide irrelevant divisions from Export (@SagePtr)
|
|
||||||
* Fix regex to enable alpha transparency hex codes (8 digits) (@surdaft)
|
|
||||||
|
|
||||||
** API **
|
|
||||||
|
|
||||||
* Added dark web functions to ns api
|
|
||||||
* BREAKING: purchaseTor() should returns true if player already has Tor. (@DavidGrinberg, @waffleattack)
|
|
||||||
* Implement getBonusTime in Corporation API (@t-wolfeadam)
|
|
||||||
* Added functions to purchase TIX and WSI (@incubusnb)
|
|
||||||
* purchaseSleeveAug checks shock value (@incubusnb)
|
|
||||||
* Fix bug with hacknet api
|
|
||||||
* Fix spendHashes bug
|
|
||||||
* Added 0 cost of asleep() (@Master-Guy)
|
|
||||||
* Fix some misleading corporation errors (@TheRealMaxion)
|
|
||||||
* expose the inBladeburner on the player object (@phyzical)
|
|
||||||
* added ram charge for stanek width and height (@phyzical)
|
|
||||||
* Fix sufficient player money check to buy back shares. (@ChrissiQ)
|
|
||||||
* Fix Static Ram Circumventing for some NS functions (@CrafterKolyan)
|
|
||||||
* added CorporationSoftCap to NetscriptDefinitions (@phyzical)
|
|
||||||
* Added definition of autocomplete() 'data' argument. (@tigercat2000)
|
|
||||||
* Adding support for text/select options in Prompt command (@PhilipArmstead)
|
|
||||||
* Added the ability to exportGame via api (@phyzical)
|
|
||||||
|
|
||||||
** Arcade **
|
|
||||||
|
|
||||||
* Added an arcade to New Tokyo where you can play a 4 year old version of bitburner.
|
|
||||||
|
|
||||||
** Misc. **
|
|
||||||
|
|
||||||
* Add a warning triggered while auto-saves are off. (@MartinFournier)
|
|
||||||
* Log info for field analysis now displays actual rank gained. (@ApamNapat)
|
|
||||||
* Removed BladeburnerSkillCost from skill point cost description. (@ApamNapat)
|
|
||||||
* Fix handling for UpArrow in bladeburner console. (@dowinter)
|
|
||||||
* Add GitHub action to check PRs for generated files. (@MartinFournier)
|
|
||||||
* Cap Staneks gift at 25x25 to prevent crashes. (@waffleattack)
|
|
||||||
* Remove old & unused files from repository. (@MartinFournier)
|
|
||||||
* Factions on the factions screens are sorted by story progress / type. (@phyzical)
|
|
||||||
* Fix log manager not picking up new runs of scripts. (@phyzical)
|
|
||||||
* Added prettier to cicd.
|
|
||||||
* UI improvements (@phyzical)
|
|
||||||
* Documentation / Typos (@nanogyth, @Master-Guy, @incubusnb, @ApamNapat, @phyzical, @SagePtr)
|
|
||||||
* Give player code a copy of Division.upgrades instead of the live object (@Ornedan)
|
|
||||||
* Fix bug with small town achievement.
|
|
||||||
* Fix bug with purchaseSleeveAug (@phyzical)
|
|
||||||
* Check before unlocking corp upgrade (@gianfun)
|
|
||||||
* General codebase improvements. (@phyzical, @Master-Guy, @ApamNapat)
|
|
||||||
* Waiting on promises in NS1 no longer freezes the script. (@Master-Guy)
|
|
||||||
* Fix bug with missing ramcost for tFormat (@TheMas3212)
|
|
||||||
* Fix crash with new prompt
|
|
||||||
* Quick fix to prevent division by 0 in terminal (@Master-Guy)
|
|
||||||
* removed ip references (@phyzical, @Master-Guy)
|
|
||||||
* Terminal now supports 'ls -l'
|
|
||||||
* Fix negative number formatting (@Master-Guy)
|
|
||||||
* Fix unique ip generation (@InDieTasten)
|
|
||||||
* remove terminal command theme from docs (@phyzical)
|
|
||||||
* Fix 'Augmentations Left' with gang factions (@nickofolas)
|
|
||||||
* Attempt to fix 'bladeburner.process()' early routing issue (@MartinFournier)
|
|
||||||
* work in progress augment fix (@phyzical)
|
|
||||||
* Fixes missing space in Smart Supply (@TheRealMaxion)
|
|
||||||
* Change license to Apache 2 with Commons Clause
|
|
||||||
* updated regex sanitization (@mbrannen)
|
|
||||||
* Sleeve fix for when faction isnt found (@phyzical)
|
|
||||||
* Fix editor "close" naming (@phyzical)
|
|
||||||
* Fix bug with sleeves where some factions would be listed as workable. (@phyzical)
|
|
||||||
* Fix research tree of product industries post-prestige (@pd)
|
|
||||||
* Added a check for exisiting industry type before expanding (@phyzical)
|
|
||||||
* fix hackAnalyzeThreads returning infinity (@chrisrabe)
|
|
||||||
* Make growthAnalyze more accurate (@dwRchyngqxs)
|
|
||||||
* Add 'Zoom -> Reset Zoom' command to Steam (@smolgumball)
|
|
||||||
* Add hasOwnProperty check to GetServer (@SagePtr)
|
|
||||||
* Speed up employee productivity calculation (@pd)
|
|
||||||
* Field Work and Security Work benefit from 'share' (@SagePtr)
|
|
||||||
* Nerf noodle bar.
|
* Nerf noodle bar.
|
||||||
`,
|
`,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export interface IActiveFragmentParams {
|
|||||||
|
|
||||||
export class ActiveFragment {
|
export class ActiveFragment {
|
||||||
id: number;
|
id: number;
|
||||||
avgCharge: number;
|
highestCharge: number;
|
||||||
numCharge: number;
|
numCharge: number;
|
||||||
rotation: number;
|
rotation: number;
|
||||||
x: number;
|
x: number;
|
||||||
@@ -21,14 +21,14 @@ export class ActiveFragment {
|
|||||||
this.id = params.fragment.id;
|
this.id = params.fragment.id;
|
||||||
this.x = params.x;
|
this.x = params.x;
|
||||||
this.y = params.y;
|
this.y = params.y;
|
||||||
this.avgCharge = 0;
|
this.highestCharge = 0;
|
||||||
this.numCharge = 0;
|
this.numCharge = 0;
|
||||||
this.rotation = params.rotation;
|
this.rotation = params.rotation;
|
||||||
} else {
|
} else {
|
||||||
this.id = -1;
|
this.id = -1;
|
||||||
this.x = -1;
|
this.x = -1;
|
||||||
this.y = -1;
|
this.y = -1;
|
||||||
this.avgCharge = -1;
|
this.highestCharge = -1;
|
||||||
this.numCharge = -1;
|
this.numCharge = -1;
|
||||||
this.rotation = -1;
|
this.rotation = -1;
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ export class ActiveFragment {
|
|||||||
const fragment = FragmentById(this.id);
|
const fragment = FragmentById(this.id);
|
||||||
if (fragment === null) throw new Error("ActiveFragment id refers to unknown Fragment.");
|
if (fragment === null) throw new Error("ActiveFragment id refers to unknown Fragment.");
|
||||||
const c = new ActiveFragment({ x: this.x, y: this.y, rotation: this.rotation, fragment: fragment });
|
const c = new ActiveFragment({ x: this.x, y: this.y, rotation: this.rotation, fragment: fragment });
|
||||||
c.avgCharge = this.avgCharge;
|
c.highestCharge = this.highestCharge;
|
||||||
c.numCharge = this.numCharge;
|
c.numCharge = this.numCharge;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { FactionNames } from '../Faction/data/FactionNames';
|
import { FactionNames } from "../Faction/data/FactionNames";
|
||||||
import { Fragment } from "./Fragment";
|
import { Fragment } from "./Fragment";
|
||||||
import { ActiveFragment } from "./ActiveFragment";
|
import { ActiveFragment } from "./ActiveFragment";
|
||||||
import { FragmentType } from "./FragmentType";
|
import { FragmentType } from "./FragmentType";
|
||||||
@@ -19,19 +19,23 @@ export class StaneksGift implements IStaneksGift {
|
|||||||
fragments: ActiveFragment[] = [];
|
fragments: ActiveFragment[] = [];
|
||||||
|
|
||||||
baseSize(): number {
|
baseSize(): number {
|
||||||
return StanekConstants.BaseSize + BitNodeMultipliers.StaneksGiftExtraSize + Player.sourceFileLvl(13)
|
return StanekConstants.BaseSize + BitNodeMultipliers.StaneksGiftExtraSize + Player.sourceFileLvl(13);
|
||||||
}
|
}
|
||||||
|
|
||||||
width(): number {
|
width(): number {
|
||||||
return Math.min(Math.floor(this.baseSize() / 2 + 1),StanekConstants.MaxSize);
|
return Math.max(2, Math.min(Math.floor(this.baseSize() / 2 + 1), StanekConstants.MaxSize));
|
||||||
}
|
}
|
||||||
height(): number {
|
height(): number {
|
||||||
return Math.min(Math.floor(this.baseSize() / 2 + 0.6),StanekConstants.MaxSize);
|
return Math.max(3, Math.min(Math.floor(this.baseSize() / 2 + 0.6), StanekConstants.MaxSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
charge(player: IPlayer, af: ActiveFragment, threads: number): void {
|
charge(player: IPlayer, af: ActiveFragment, threads: number): void {
|
||||||
af.avgCharge = (af.numCharge * af.avgCharge + threads) / (af.numCharge + 1);
|
if (threads > af.highestCharge) {
|
||||||
af.numCharge++;
|
af.numCharge = (af.highestCharge * af.numCharge) / threads + 1;
|
||||||
|
af.highestCharge = threads;
|
||||||
|
} else {
|
||||||
|
af.numCharge += threads / af.highestCharge;
|
||||||
|
}
|
||||||
|
|
||||||
const cotmg = Factions[FactionNames.ChurchOfTheMachineGod];
|
const cotmg = Factions[FactionNames.ChurchOfTheMachineGod];
|
||||||
cotmg.playerReputation += (player.faction_rep_mult * (Math.pow(threads, 0.95) * (cotmg.favor + 100))) / 1000;
|
cotmg.playerReputation += (player.faction_rep_mult * (Math.pow(threads, 0.95) * (cotmg.favor + 100))) / 1000;
|
||||||
@@ -66,7 +70,7 @@ export class StaneksGift implements IStaneksGift {
|
|||||||
for (const neighboor of neighboors) {
|
for (const neighboor of neighboors) {
|
||||||
boost *= neighboor.fragment().power;
|
boost *= neighboor.fragment().power;
|
||||||
}
|
}
|
||||||
return CalculateEffect(fragment.avgCharge, fragment.numCharge, fragment.fragment().power, boost);
|
return CalculateEffect(fragment.highestCharge, fragment.numCharge, fragment.fragment().power, boost);
|
||||||
}
|
}
|
||||||
|
|
||||||
canPlace(rootX: number, rootY: number, rotation: number, fragment: Fragment): boolean {
|
canPlace(rootX: number, rootY: number, rotation: number, fragment: Fragment): boolean {
|
||||||
@@ -126,7 +130,7 @@ export class StaneksGift implements IStaneksGift {
|
|||||||
|
|
||||||
clearCharge(): void {
|
clearCharge(): void {
|
||||||
this.fragments.forEach((f) => {
|
this.fragments.forEach((f) => {
|
||||||
f.avgCharge = 0;
|
f.highestCharge = 0;
|
||||||
f.numCharge = 0;
|
f.numCharge = 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,9 +48,7 @@ export function FragmentInspector(props: IProps): React.ReactElement {
|
|||||||
}
|
}
|
||||||
const f = props.fragment.fragment();
|
const f = props.fragment.fragment();
|
||||||
|
|
||||||
let charge = `${numeralWrapper.formatStaneksGiftCharge(props.fragment.avgCharge)} avg. * ${
|
let charge = numeralWrapper.formatStaneksGiftCharge(props.fragment.highestCharge * props.fragment.numCharge);
|
||||||
props.fragment.numCharge
|
|
||||||
} times`;
|
|
||||||
let effect = "N/A";
|
let effect = "N/A";
|
||||||
// Boosters and cooling don't deal with heat.
|
// Boosters and cooling don't deal with heat.
|
||||||
if ([FragmentType.Booster, FragmentType.None, FragmentType.Delete].includes(f.type)) {
|
if ([FragmentType.Booster, FragmentType.None, FragmentType.Delete].includes(f.type)) {
|
||||||
|
|||||||
@@ -27,20 +27,20 @@ export function Stanek(): React.ReactElement {
|
|||||||
|
|
||||||
function addCharge(): void {
|
function addCharge(): void {
|
||||||
staneksGift.fragments.forEach((f) => {
|
staneksGift.fragments.forEach((f) => {
|
||||||
f.avgCharge = 1e21;
|
f.highestCharge = 1e21;
|
||||||
f.numCharge = 1e21;
|
f.numCharge = 1e21;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function modCharge(modify: number): (x: number) => void {
|
function modCharge(modify: number): (x: number) => void {
|
||||||
return function (cycles: number): void {
|
return function (cycles: number): void {
|
||||||
staneksGift.fragments.forEach((f) => (f.avgCharge += cycles * modify));
|
staneksGift.fragments.forEach((f) => (f.highestCharge += cycles * modify));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetCharge(): void {
|
function resetCharge(): void {
|
||||||
staneksGift.fragments.forEach((f) => {
|
staneksGift.fragments.forEach((f) => {
|
||||||
f.avgCharge = 0;
|
f.highestCharge = 0;
|
||||||
f.numCharge = 0;
|
f.numCharge = 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
2
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
2
src/ScriptEditor/NetscriptDefinitions.d.ts
vendored
@@ -4089,7 +4089,7 @@ export interface Fragment {
|
|||||||
*/
|
*/
|
||||||
export interface ActiveFragment {
|
export interface ActiveFragment {
|
||||||
id: number;
|
id: number;
|
||||||
avgCharge: number;
|
highestCharge: number;
|
||||||
numCharge: number;
|
numCharge: number;
|
||||||
rotation: number;
|
rotation: number;
|
||||||
x: number;
|
x: number;
|
||||||
|
|||||||
Reference in New Issue
Block a user