mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-10 01:33:54 +01:00
Final minor changes for v0.44.0
This commit is contained in:
parent
d2762a99b1
commit
f1e43a86db
2
dist/engine.bundle.js
vendored
2
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
122
dist/vendor.bundle.js
vendored
122
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
@ -3,6 +3,44 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
v0.44.0 - 2/26/2019
|
||||
-------------------
|
||||
* Bladeburner Changes:
|
||||
** Reduced the amount of rank needed to earn a skill point
|
||||
** Reduced the effects of the "Reaper" and "Evasive System" skills
|
||||
** Increased the effect of the "Hyperdrive" and "Hands of Midas" skills
|
||||
** Slightly increased the rate which the skill point cost rises for almost all skills
|
||||
** The "Overlock" Skill now has a maximum level of 90 instead of 95
|
||||
** Money earned from Contracts increased by 400%
|
||||
** Changed the way population affects success rate. Extreme populations now have less dramatic effects
|
||||
** Added two new General Actions: Diplomacy and Hyperbolic Regeneration Chamber
|
||||
** Lowered the rep and money cost of the "Blade's Simulacrum" augmentation
|
||||
** Significantly decreased the initial amount of Contracts/Operations (the "Contracts/Operations remaining" value)
|
||||
** Decreased the rate at which the amount of Contracts/Operations increases over time
|
||||
** Decreased the number of successes you need to increase the max level of a Contract/Operation
|
||||
** Increased the average number of Synthoid communities each city has
|
||||
** Reduced the amount by which a successful raid will decrease the population of a city
|
||||
** The "riots" event will now increase the chaos of a city by a greater amount
|
||||
** Significantly increased the effect that Agility and Dexterity have on action time
|
||||
* Added new BitNode multipliers:
|
||||
* HomeComputerRamCost - Affects how much it costs to upgrade home computer's RAM
|
||||
* DaedalusAugsRequirement - Affects how many Augmentations you need in order to get invited to Daedalus
|
||||
* FourSigmaMarketDataCost - Affects how much it costs to unlock the stock market's 4S Market Data
|
||||
* FourSigmaMarketDataApiCost - Affects how much it costs to unlock the stock market's 4S Market Data API
|
||||
* A few minor changes to BitNode multipliers across the board (mostly for the new multipliers)
|
||||
* 'The Covenant' now requires 20 total Augmentations to get invited, rather than 30
|
||||
* You can now purchase permanent Duplicate Sleeves from 'The Covenant'. This requires Source-File 10, and you must be in BN-10 or after
|
||||
* You can now track where all of your money comes from in the 'Stats' page
|
||||
* Increased the money gained from Coding Contracts by 50%
|
||||
* getCharacterInformation() function now returns the player's HP and max HP
|
||||
* Bug Fix: You can no longer disconnect the enemy's connections in Hacking Missions
|
||||
* Bug Fix: Duplicate Sleeve faction reputation gain is now properly affected by faction favor
|
||||
* Bug Fix: After installing Augmentations, the Terminal display will now correctly show the current server as "home"
|
||||
* Bug Fix: Fixed an exploit where you could change the duration of timed functions (e.g. hack, weaken) in NetscriptJS
|
||||
* Bug Fix: You should now properly be able to use the ServerProfile.exe program
|
||||
* Bug Fix: Prevented exploit that allowed you to accept faction invites programmatically through NetscriptJS
|
||||
* Bug Fix: Faction invitations for megacorporations should now work properly
|
||||
|
||||
v0.43.1 - 2/11/2019
|
||||
-------------------
|
||||
* Terminal changes:
|
||||
|
@ -1954,7 +1954,7 @@ function initAugmentations() {
|
||||
resetAugmentation(BladeArmorIPU);
|
||||
|
||||
var BladesSimulacrum = new Augmentation({
|
||||
name:AugmentationNames.BladesSimulacrum, repCost: 1e3, moneyCost: 100e9,
|
||||
name:AugmentationNames.BladesSimulacrum, repCost: 500, moneyCost: 30e9,
|
||||
info:"A highly-advanced matter phase-shifter module that is embedded " +
|
||||
"in the brainstem and cerebellum. This augmentation allows " +
|
||||
"the user to project and control a holographic simulacrum within an " +
|
||||
|
@ -45,35 +45,36 @@ const DifficultyToTimeFactor = 10; //Action Difficulty divided by this to
|
||||
//The difficulty multiplier affects stamina loss and hp loss of an action. Also affects
|
||||
//experience gain. Its formula is:
|
||||
//difficulty ^ exponentialFactor + difficulty / linearFactor
|
||||
const DiffMultExponentialFactor = 0.28;
|
||||
const DiffMultLinearFactor = 650;
|
||||
const DiffMultExponentialFactor = 0.28;
|
||||
const DiffMultLinearFactor = 650;
|
||||
|
||||
// These factors are used to calculate action time.
|
||||
// They affect how much action time is reduced based on your agility and dexterity
|
||||
const EffAgiLinearFactor = 38e3;
|
||||
const EffDexLinearFactor = 38e3;
|
||||
const EffAgiExponentialFactor = 0.033;
|
||||
const EffDexExponentialFactor = 0.03;
|
||||
const EffAgiLinearFactor = 10e3;
|
||||
const EffDexLinearFactor = 10e3;
|
||||
const EffAgiExponentialFactor = 0.04;
|
||||
const EffDexExponentialFactor = 0.035;
|
||||
|
||||
const BaseRecruitmentTimeNeeded = 300; //Base time needed (s) to complete a Recruitment action
|
||||
const BaseRecruitmentTimeNeeded = 300; //Base time needed (s) to complete a Recruitment action
|
||||
|
||||
const PopulationThreshold = 1e9; //Population at which success rates start being affected
|
||||
const ChaosThreshold = 50; //City chaos level after which it starts making tasks harder
|
||||
const PopulationThreshold = 1e9; // Population which determines baseline success rate
|
||||
const PopulationExponent = 0.7; // Exponent that influences how different populations affect success rate
|
||||
const ChaosThreshold = 50; //City chaos level after which it starts making tasks harder
|
||||
|
||||
const BaseStatGain = 1; //Base stat gain per second
|
||||
const BaseIntGain = 0.001; //Base intelligence stat gain
|
||||
const BaseStatGain = 1; //Base stat gain per second
|
||||
const BaseIntGain = 0.001; //Base intelligence stat gain
|
||||
|
||||
const ActionCountGrowthPeriod = 480; //Time (s) it takes for action count to grow by its specified value
|
||||
const ActionCountGrowthPeriod = 480; //Time (s) it takes for action count to grow by its specified value
|
||||
|
||||
const RankToFactionRepFactor = 2; //Delta Faction Rep = this * Delta Rank
|
||||
const RankNeededForFaction = 25;
|
||||
const RankToFactionRepFactor = 2; //Delta Faction Rep = this * Delta Rank
|
||||
const RankNeededForFaction = 25;
|
||||
|
||||
const ContractSuccessesPerLevel = 3; //How many successes you need to level up a contract
|
||||
const OperationSuccessesPerLevel = 2.5; //How many successes you need to level up an op
|
||||
const ContractSuccessesPerLevel = 3; //How many successes you need to level up a contract
|
||||
const OperationSuccessesPerLevel = 2.5; //How many successes you need to level up an op
|
||||
|
||||
const RanksPerSkillPoint = 3; //How many ranks needed to get 1 Skill Point
|
||||
const RanksPerSkillPoint = 3; //How many ranks needed to get 1 Skill Point
|
||||
|
||||
const ContractBaseMoneyGain = 100e3; //Base Money Gained per contract
|
||||
const ContractBaseMoneyGain = 250e3; //Base Money Gained per contract
|
||||
|
||||
const HrcHpGain = 2; // HP gained from Hyperbolic Regeneration Chamber
|
||||
const HrcStaminaGain = 0.1; // Stamina gained from Hyperbolic Regeneration Chamber
|
||||
@ -497,9 +498,9 @@ Action.prototype.getSuccessChance = function(inst, params={}) {
|
||||
if (!(this instanceof BlackOperation)) {
|
||||
var city = inst.getCurrentCity();
|
||||
if (params.est) {
|
||||
competence *= (city.popEst / PopulationThreshold);
|
||||
competence *= Math.pow((city.popEst / PopulationThreshold), PopulationExponent);
|
||||
} else {
|
||||
competence *= (city.pop / PopulationThreshold);
|
||||
competence *= Math.pow((city.pop / PopulationThreshold), PopulationExponent);
|
||||
}
|
||||
|
||||
//Too high of a chaos results in lower chances
|
||||
@ -1407,7 +1408,6 @@ Bladeburner.prototype.completeAction = function() {
|
||||
break;
|
||||
case ActionTypes["Diplomacy"]:
|
||||
var eff = this.getDiplomacyEffectiveness();
|
||||
console.log(`Diplomacy Effectiveness: ${eff}`);
|
||||
this.getCurrentCity().chaos *= eff;
|
||||
if (this.getCurrentCity().chaos < 0) { this.getCurrentCity().chaos = 0; }
|
||||
if (this.logging.general) {
|
||||
@ -1547,7 +1547,7 @@ Bladeburner.prototype.getRecruitmentSuccessChance = function() {
|
||||
|
||||
Bladeburner.prototype.getDiplomacyEffectiveness = function() {
|
||||
// Returns a decimal by which the city's chaos level should be multiplied (e.g. 0.98)
|
||||
const CharismaLinearFactor = 4e3;
|
||||
const CharismaLinearFactor = 1e3;
|
||||
const CharismaExponentialFactor = 0.045;
|
||||
|
||||
const charismaEff = Math.pow(Player.charisma, CharismaExponentialFactor) + Player.charisma / CharismaLinearFactor;
|
||||
@ -1656,7 +1656,7 @@ Bladeburner.prototype.randomEvent = function() {
|
||||
}
|
||||
} else if (chance <= 0.9) {
|
||||
//Less Synthoids, 20%
|
||||
var percentage = getRandomInt(5, 20) / 100;
|
||||
var percentage = getRandomInt(8, 20) / 100;
|
||||
var count = Math.round(sourceCity.pop * percentage);
|
||||
sourceCity.pop -= count;
|
||||
if (this.logging.events) {
|
||||
@ -3882,7 +3882,7 @@ function initBladeburner() {
|
||||
name:SkillNames.EvasiveSystem,
|
||||
desc:"Each level of this skill increases your effective " +
|
||||
"dexterity and agility for Bladeburner actions by 4%",
|
||||
baseCost: 2, costInc: 1.2,
|
||||
baseCost: 2, costInc: 2.1,
|
||||
effDex: 4, effAgi: 4
|
||||
});
|
||||
Skills[SkillNames.Datamancer] = new Skill({
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {IMap} from "./types";
|
||||
|
||||
export let CONSTANTS: IMap<any> = {
|
||||
Version: "0.43.1",
|
||||
Version: "0.44.0",
|
||||
|
||||
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
|
||||
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
|
||||
@ -517,16 +517,17 @@ export let CONSTANTS: IMap<any> = {
|
||||
** Increased the effect of the "Hyperdrive" and "Hands of Midas" skills
|
||||
** Slightly increased the rate which the skill point cost rises for almost all skills
|
||||
** The "Overlock" Skill now has a maximum level of 90 instead of 95
|
||||
** Money earned from Contracts increased by 100%
|
||||
** Money earned from Contracts increased by 400%
|
||||
** Changed the way population affects success rate. Extreme populations now have less dramatic effects
|
||||
** Added two new General Actions: Diplomacy and Hyperbolic Regeneration Chamber
|
||||
** Lowered the rep cost of the "Blade's Simulacrum" augmentation, but increased the price
|
||||
** Lowered the rep and money cost of the "Blade's Simulacrum" augmentation
|
||||
** Significantly decreased the initial amount of Contracts/Operations (the "Contracts/Operations remaining" value)
|
||||
** Decreased the rate at which the amount of Contracts/Operations increases over time
|
||||
** Decreased the number of successes you need to increase the max level of a Contract/Operation
|
||||
** Increased the average number of Synthoid communities each city has
|
||||
** Reduced the amount by which a successful raid will decrease the population of a city
|
||||
** The "riots" event will now increase the chaos of a city by a greater amount
|
||||
** Slightly increased the effect that Agility and Dexterity have on action time
|
||||
** Significantly increased the effect that Agility and Dexterity have on action time
|
||||
|
||||
* Added new BitNode multipliers:
|
||||
** HomeComputerRamCost - Affects how much it costs to upgrade home computer's RAM
|
||||
@ -541,10 +542,12 @@ export let CONSTANTS: IMap<any> = {
|
||||
* Increased the money gained from Coding Contracts by 50%
|
||||
* getCharacterInformation() function now returns the player's HP and max HP
|
||||
* Bug Fix: You can no longer disconnect the enemy's connections in Hacking Missions
|
||||
* Bug Fix: Duplicate Sleeve faction reputation gain is now properly affected by faction favor
|
||||
* Bug Fix: After installing Augmentations, the Terminal display will now correctly show the current server as "home"
|
||||
* Bug Fix: Fixed an exploit where you could change the duration of timed functions (e.g. hack, weaken) in NetscriptJS
|
||||
* Bug Fix: You should now properly be able to use the ServerProfile.exe program
|
||||
* Bug Fix: Prevented exploit that allowed you to accept faction invites programmatically through NetscriptJS
|
||||
* Bug Fix: Faction invitations for megacorporations should now work properly
|
||||
`
|
||||
|
||||
}
|
||||
|
@ -267,7 +267,19 @@ export function createDevMenu() {
|
||||
Player.queueAugmentation(augmentationsDropdown.options[augmentationsDropdown.selectedIndex].value);
|
||||
},
|
||||
innerText: "Queue Augmentation",
|
||||
})
|
||||
});
|
||||
|
||||
const giveAllAugmentationsButton = createElement("button", {
|
||||
class: "std-button",
|
||||
clickListener: () => {
|
||||
for (const i in AugmentationNames) {
|
||||
const augName = AugmentationNames[i];
|
||||
Player.queueAugmentation(augName);
|
||||
}
|
||||
},
|
||||
display: "block",
|
||||
innerText: "Queue All Augmentations",
|
||||
});
|
||||
|
||||
// Source Files
|
||||
const sourceFilesHeader = createElement("h2", { innerText: "Source-Files" });
|
||||
@ -621,6 +633,7 @@ export function createDevMenu() {
|
||||
devMenuContainer.appendChild(augmentationsHeader);
|
||||
devMenuContainer.appendChild(augmentationsDropdown);
|
||||
devMenuContainer.appendChild(augmentationsQueueButton);
|
||||
devMenuContainer.appendChild(giveAllAugmentationsButton);
|
||||
devMenuContainer.appendChild(sourceFilesHeader);
|
||||
devMenuContainer.appendChild(removeSourceFileDropdown);
|
||||
devMenuContainer.appendChild(removeSourceFileButton);
|
||||
|
@ -139,7 +139,7 @@ function displayFactionContent(factionName) {
|
||||
var hackDivWrapper = createElement("div", {class:"faction-work-div-wrapper"});
|
||||
hackDiv.appendChild(hackDivWrapper);
|
||||
hackDivWrapper.appendChild(createElement("a", {
|
||||
class:"a-link-button", innerText:"Hacking Contracts",
|
||||
class:"std-button", innerText:"Hacking Contracts",
|
||||
clickListener:()=>{
|
||||
Player.startFactionHackWork(faction);
|
||||
return false;
|
||||
@ -158,7 +158,7 @@ function displayFactionContent(factionName) {
|
||||
var fieldWorkDivWrapper = createElement("div", {class:"faction-work-div-wrapper"});
|
||||
fieldWorkDiv.appendChild(fieldWorkDivWrapper);
|
||||
fieldWorkDivWrapper.appendChild(createElement("a", {
|
||||
class:"a-link-button", innerText:"Field Work",
|
||||
class:"std-button", innerText:"Field Work",
|
||||
clickListener:()=>{
|
||||
Player.startFactionFieldWork(faction);
|
||||
return false;
|
||||
@ -177,7 +177,7 @@ function displayFactionContent(factionName) {
|
||||
var securityWorkDivWrapper = createElement("div", {class:"faction-work-div-wrapper"});
|
||||
securityWorkDiv.appendChild(securityWorkDivWrapper);
|
||||
securityWorkDivWrapper.appendChild(createElement("a", {
|
||||
class:"a-link-button", innerText:"Security Work",
|
||||
class:"std-button", innerText:"Security Work",
|
||||
clickListener:()=>{
|
||||
Player.startFactionSecurityWork(faction);
|
||||
return false;
|
||||
@ -215,7 +215,7 @@ function displayFactionContent(factionName) {
|
||||
},
|
||||
});
|
||||
donateDivWrapper.appendChild(createElement("a", {
|
||||
class:"a-link-button", innerText:"Donate Money",
|
||||
class:"std-button", innerText:"Donate Money",
|
||||
clickListener:()=>{
|
||||
var amt = parseFloat(donateAmountInput.value);
|
||||
if (isNaN(amt) || amt < 0) {
|
||||
@ -236,25 +236,6 @@ function displayFactionContent(factionName) {
|
||||
donateDivWrapper.appendChild(donateRepGain);
|
||||
elements.push(donateDiv);
|
||||
|
||||
//Purchase Augmentations
|
||||
elements.push(createElement("pre", {
|
||||
innerHTML: "<br>As your reputation with this faction rises, you will " +
|
||||
"unlock Augmentations, which you can purchase to enhance " +
|
||||
"your abilities.<br><br>"
|
||||
}));
|
||||
elements.push(createElement("a", {
|
||||
class:"std-button",
|
||||
innerText:"Purchase Augmentations",
|
||||
margin: "5px",
|
||||
clickListener:()=>{
|
||||
Engine.hideAllContent();
|
||||
Engine.Display.factionAugmentationsContent.style.display = "block";
|
||||
|
||||
displayFactionAugmentations(factionName);
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
|
||||
//Gang (BitNode-2)
|
||||
if (Player.bitNodeN == 2 && (factionName == "Slum Snakes" || factionName == "Tetrads" ||
|
||||
factionName == "The Syndicate" || factionName == "The Dark Army" || factionName == "Speakers for the Dead" ||
|
||||
@ -337,10 +318,10 @@ function displayFactionContent(factionName) {
|
||||
|
||||
// Purchase Sleeves from Covenant
|
||||
if (factionName === "The Covenant" && Player.bitNodeN >= 10 && SourceFileFlags[10]) {
|
||||
const covenantPurchaseSleevesDiv = createElement("div", { class: "faction-work-div" });
|
||||
const covenantPurchaseSleevesDivWrapper = createElement("div", { class: "faction-wkro-div-wrapper" });
|
||||
const covenantPurchaseSleevesDiv = createElement("div", { class: "faction-work-div", display: "inline" });
|
||||
const covenantPurchaseSleevesDivWrapper = createElement("div", { class: "faction-work-div-wrapper" });
|
||||
covenantPurchaseSleevesDiv.appendChild(covenantPurchaseSleevesDivWrapper);
|
||||
covenantPurchaseSleevesDivWrapper.appendChild(createElement("button", {
|
||||
covenantPurchaseSleevesDivWrapper.appendChild(createElement("a", {
|
||||
class: "std-button",
|
||||
innerText: "Purchase Duplicate Sleeves",
|
||||
clickListener: () => {
|
||||
@ -354,6 +335,29 @@ function displayFactionContent(factionName) {
|
||||
elements.push(covenantPurchaseSleevesDiv);
|
||||
}
|
||||
|
||||
//Purchase Augmentations
|
||||
const purchaseAugmentationsDiv = createElement("div", { class: "faction-work-div", display: "inline" });
|
||||
const purchaseAugmentationsDivWrapper = createElement("div", { class: "faction-work-div-wrapper" });
|
||||
purchaseAugmentationsDiv.appendChild(purchaseAugmentationsDivWrapper);
|
||||
purchaseAugmentationsDivWrapper.appendChild(createElement("a", {
|
||||
class:"std-button",
|
||||
innerText:"Purchase Augmentations",
|
||||
margin: "5px",
|
||||
clickListener:()=>{
|
||||
Engine.hideAllContent();
|
||||
Engine.Display.factionAugmentationsContent.style.display = "block";
|
||||
|
||||
displayFactionAugmentations(factionName);
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
purchaseAugmentationsDivWrapper.appendChild(createElement("pre", {
|
||||
innerHTML: "<br>As your reputation with this faction rises, you will " +
|
||||
"unlock Augmentations, which you can purchase to enhance " +
|
||||
"your abilities.<br><br>"
|
||||
}));
|
||||
elements.push(purchaseAugmentationsDiv);
|
||||
|
||||
// Determine if actions should be possible
|
||||
donateDiv.style.display = faction.favor >= Math.floor(CONSTANTS.BaseFavorToDonate * BitNodeMultipliers.RepToDonateToFaction) ? "inline" : "none";
|
||||
|
||||
|
@ -338,13 +338,19 @@ export class Sleeve extends Person {
|
||||
*/
|
||||
getRepGain(p: IPlayer): number {
|
||||
if (this.currentTask === SleeveTaskType.Faction) {
|
||||
let favorMult: number = 1;
|
||||
const fac: Faction | null = Factions[this.currentTaskLocation];
|
||||
if (fac != null) {
|
||||
favorMult = 1 + (fac!.favor / 100);
|
||||
}
|
||||
|
||||
switch (this.factionWorkType) {
|
||||
case FactionWorkType.Hacking:
|
||||
return this.getFactionHackingWorkRepGain() * (this.shock / 100);
|
||||
return this.getFactionHackingWorkRepGain() * (this.shock / 100) * favorMult;
|
||||
case FactionWorkType.Field:
|
||||
return this.getFactionFieldWorkRepGain() * (this.shock / 100);
|
||||
return this.getFactionFieldWorkRepGain() * (this.shock / 100) * favorMult;
|
||||
case FactionWorkType.Security:
|
||||
return this.getFactionSecurityWorkRepGain() * (this.shock / 100);
|
||||
return this.getFactionSecurityWorkRepGain() * (this.shock / 100) * favorMult;
|
||||
default:
|
||||
console.warn(`Invalid Sleeve.factionWorkType property in Sleeve.getRepGain(): ${this.factionWorkType}`);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user