mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-18 05:33:54 +01:00
Updated version to v0.41.0. Bug fixes for Gang API. Some Gang API functions now log. Final rebalancing for gang rework
This commit is contained in:
parent
23494a162e
commit
ea3b13b286
56961
dist/engine.bundle.js
vendored
56961
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
111030
dist/vendor.bundle.js
vendored
111030
dist/vendor.bundle.js
vendored
File diff suppressed because one or more lines are too long
@ -3,6 +3,40 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
v0.41.0 - 10/29/2018
|
||||||
|
--------------------
|
||||||
|
* WARNING: In NetscriptJS, defining a function called print() is no longer possible
|
||||||
|
* Gang Mechanic Changes (BitNode-2):
|
||||||
|
* Added a Gang Netscript API
|
||||||
|
* Added new 'ascension' mechanic for Gang Members
|
||||||
|
* The first three gang members are now 'free' (can be recruited instantly)
|
||||||
|
* Maximum number of increased Gang Members increased from 20 to 30
|
||||||
|
* Changed the formula for calculating respect needed to recruit the next gang member
|
||||||
|
* Added a new category of upgrades for Gang Members: Augmentations
|
||||||
|
* Non-Augmentation Gang member upgrades are now significantly weaker
|
||||||
|
* Reputation for your Gang faction can no longer be gained through Infiltration
|
||||||
|
* Re-worked the territory 'warfare' mechanic so that player can choose when to engage in it
|
||||||
|
* Gang Members can now be killed during territory 'warfare'
|
||||||
|
* Changed BitNode-2 Multipliers to make hacking slightly less profitable
|
||||||
|
* Gang Member Equipment + Upgrades now get cheaper as your gang grows in power and respect
|
||||||
|
* The effects of Source-File 2 are now slightly more powerful
|
||||||
|
* RAM Cost of accessing the global document object lowered from 100 GB to 25 GB
|
||||||
|
* RAM Cost to use Singularity Functions outside of BitNode-4 lowered by 75%. They now only cost twice as much as they do in BitNode-4
|
||||||
|
* b1t_flum3.exe now takes significantly less time to create
|
||||||
|
* Crimes commited through Singularity function no longer give half money/exp
|
||||||
|
* Improved number formatting for Player 'work' actions (including crimes, etc.). These numbers should also adhere to locale settings now (by Kline-)
|
||||||
|
* The order that Augmentations are listed in (when purchasing from Faction and viewing your Augmentations) is now saved and persists when choosing different orders
|
||||||
|
* getCharacterInformation() Singularity function now returns multiplier information (from Augmentations/Source Files)
|
||||||
|
* Bug Fix: Calling print() in NetscriptJS no longer brings up the print dialog
|
||||||
|
* Bug Fix: Fixed a bug that sometimes caused a blank black screen when destroying/resetting/switching BitNodes
|
||||||
|
* Bug Fix: Netscript calls that throw errors will now no longer cause the 'concurrent calls' error if they are caught in the script. i.e. try/catch should now work properly in scripts
|
||||||
|
* Bug Fix: Fixed a bug where sometimes the NeuroFlux Governor Augmentation level would be incorrectly calculated when the game was loaded
|
||||||
|
* Bug Fix: Fixed a bug where calling the scp() Netscript function with invalid hostname/ips would throw an unclear error message
|
||||||
|
* Bug Fix: Bladeburner API function getActionCountRemaining() should now work properly for BlackOps
|
||||||
|
* Bug Fix: Black Ops can no longer be attempted out-of-order or without the required rank via Bladeburner API
|
||||||
|
* Bug Fix: Dynamic RAM Calculation now properly accounts for number of threads
|
||||||
|
* RAM cost for basic Netscript functions added to documentation (by CBJamo)
|
||||||
|
|
||||||
v0.40.5 - 10/09/2018
|
v0.40.5 - 10/09/2018
|
||||||
--------------------
|
--------------------
|
||||||
* Added codingcontract.getContractType() Netscript function
|
* Added codingcontract.getContractType() Netscript function
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Bitburner - development</title>
|
<title>Bitburner</title>
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="dist/apple-touch-icon.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="dist/apple-touch-icon.png">
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="dist/favicon-32x32.png">
|
<link rel="icon" type="image/png" sizes="32x32" href="dist/favicon-32x32.png">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="dist/favicon-16x16.png">
|
<link rel="icon" type="image/png" sizes="16x16" href="dist/favicon-16x16.png">
|
||||||
@ -471,8 +471,7 @@
|
|||||||
|
|
||||||
<!-- Tutorial content -->
|
<!-- Tutorial content -->
|
||||||
<div id="tutorial-container" class="generic-menupage-container">
|
<div id="tutorial-container" class="generic-menupage-container">
|
||||||
<a id="tutorial-getting-started-link" class="a-link-button"
|
<a id="tutorial-getting-started-link" class="a-link-button" href="http://bitburner.wikia.com/wiki/Chapt3rs_Guide_to_Getting_Started_with_Bitburner" target="_blank"> Getting Started </a>
|
||||||
href="http://bitburner.wikia.com/wiki/Chapt3rs_Guide_to_Getting_Started_with_Bitburner" target="_blank"> Getting Started </a>
|
|
||||||
<a id="tutorial-networking-link" class="a-link-button"> Servers & Networking </a>
|
<a id="tutorial-networking-link" class="a-link-button"> Servers & Networking </a>
|
||||||
<a id="tutorial-hacking-link" class="a-link-button"> Hacking </a>
|
<a id="tutorial-hacking-link" class="a-link-button"> Hacking </a>
|
||||||
<a id="tutorial-scripts-link" class="a-link-button"> Scripts </a>
|
<a id="tutorial-scripts-link" class="a-link-button"> Scripts </a>
|
||||||
@ -481,8 +480,7 @@
|
|||||||
<a id="tutorial-jobs-link" class="a-link-button"> Companies and Infiltration </a>
|
<a id="tutorial-jobs-link" class="a-link-button"> Companies and Infiltration </a>
|
||||||
<a id="tutorial-factions-link" class="a-link-button"> Factions </a>
|
<a id="tutorial-factions-link" class="a-link-button"> Factions </a>
|
||||||
<a id="tutorial-augmentations-link" class="a-link-button"> Augmentations </a>
|
<a id="tutorial-augmentations-link" class="a-link-button"> Augmentations </a>
|
||||||
<a id="tutorial-shortcuts-link" class="a-link-button"
|
<a id="tutorial-shortcuts-link" class="a-link-button" href="https://bitburner.wikia.com/wiki/Shortcuts" target="_blank"> Keyboard Shortcuts </a>
|
||||||
href="https://bitburner.wikia.com/wiki/Shortcuts" target="_blank"> Keyboard Shortcuts </a>
|
|
||||||
|
|
||||||
<a id="tutorial-back-button" class="a-link-button"> Back </a>
|
<a id="tutorial-back-button" class="a-link-button"> Back </a>
|
||||||
<p id="tutorial-text"> </p>
|
<p id="tutorial-text"> </p>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
let CONSTANTS = {
|
let CONSTANTS = {
|
||||||
Version: "0.40.5",
|
Version: "0.41.0",
|
||||||
|
|
||||||
//Max level for any skill, assuming no multipliers. Determined by max numerical value in javascript for experience
|
//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
|
//and the skill level formula in Player.js. Note that all this means it that when experience hits MAX_INT, then
|
||||||
|
@ -31,7 +31,7 @@ import {yesNoBoxCreate, yesNoTxtInpBoxCreate,
|
|||||||
yesNoTxtInpBoxClose, yesNoBoxOpen} from "../utils/YesNoBox";
|
yesNoTxtInpBoxClose, yesNoBoxOpen} from "../utils/YesNoBox";
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
const GangRespectToReputationRatio = 2; // Respect is divided by this to get rep gain
|
const GangRespectToReputationRatio = 5; // Respect is divided by this to get rep gain
|
||||||
const MaximumGangMembers = 30;
|
const MaximumGangMembers = 30;
|
||||||
const GangRecruitCostMultiplier = 2;
|
const GangRecruitCostMultiplier = 2;
|
||||||
const CyclesPerTerritoryAndPowerUpdate = 100;
|
const CyclesPerTerritoryAndPowerUpdate = 100;
|
||||||
@ -273,7 +273,7 @@ Gang.prototype.processTerritoryAndPowerGains = function(numCycles=1) {
|
|||||||
// Multiplicative gain (50% chance)
|
// Multiplicative gain (50% chance)
|
||||||
// This is capped per cycle, to prevent it from getting out of control
|
// This is capped per cycle, to prevent it from getting out of control
|
||||||
const multiplicativeGain = AllGangs[name].power * 0.008;
|
const multiplicativeGain = AllGangs[name].power * 0.008;
|
||||||
AllGangs[name].power += Math.min(1, multiplicativeGain);
|
AllGangs[name].power += Math.min(0.9, multiplicativeGain);
|
||||||
} else {
|
} else {
|
||||||
// Additive gain (50% chance)
|
// Additive gain (50% chance)
|
||||||
const additiveGain = 0.5 * gainRoll * AllGangs[name].territory;
|
const additiveGain = 0.5 * gainRoll * AllGangs[name].territory;
|
||||||
@ -357,6 +357,7 @@ Gang.prototype.getRespectNeededToRecruitMember = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Gang.prototype.recruitMember = function(name) {
|
Gang.prototype.recruitMember = function(name) {
|
||||||
|
name = String(name);
|
||||||
if (name === "" || !this.canRecruitMember()) { return false; }
|
if (name === "" || !this.canRecruitMember()) { return false; }
|
||||||
|
|
||||||
// Check for already-existing names
|
// Check for already-existing names
|
||||||
|
@ -107,8 +107,13 @@ var possibleLogs = {
|
|||||||
getServerGrowth: true,
|
getServerGrowth: true,
|
||||||
getServerNumPortsRequired: true,
|
getServerNumPortsRequired: true,
|
||||||
getServerRam: true,
|
getServerRam: true,
|
||||||
|
// TIX API
|
||||||
buyStock: true,
|
buyStock: true,
|
||||||
sellStock: true,
|
sellStock: true,
|
||||||
|
shortStock: true,
|
||||||
|
sellShort: true,
|
||||||
|
|
||||||
|
// Singularity Functions
|
||||||
purchaseServer: true,
|
purchaseServer: true,
|
||||||
deleteServer: true,
|
deleteServer: true,
|
||||||
universityCourse: true,
|
universityCourse: true,
|
||||||
@ -125,12 +130,18 @@ var possibleLogs = {
|
|||||||
donateToFaction: true,
|
donateToFaction: true,
|
||||||
createProgram: true,
|
createProgram: true,
|
||||||
commitCrime: true,
|
commitCrime: true,
|
||||||
shortStock: true,
|
|
||||||
sellShort: true,
|
// Bladeburner API
|
||||||
startAction: true,
|
startAction: true,
|
||||||
upgradeSkill: true,
|
upgradeSkill: true,
|
||||||
setTeamSize: true,
|
setTeamSize: true,
|
||||||
joinBladeburnerFaction: true,
|
joinBladeburnerFaction: true,
|
||||||
|
|
||||||
|
// Gang API
|
||||||
|
recruitMember: true,
|
||||||
|
setMemberTask: true,
|
||||||
|
purchaseEquipment: true,
|
||||||
|
setTerritoryWarfare: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
//Used to check and set flags for every Source File, despite the name of the function
|
//Used to check and set flags for every Source File, despite the name of the function
|
||||||
@ -3647,7 +3658,7 @@ function NetscriptFunctions(workerScript) {
|
|||||||
strength: member.str,
|
strength: member.str,
|
||||||
strengthEquipMult: member.str_mult,
|
strengthEquipMult: member.str_mult,
|
||||||
strengthAscensionMult: member.str_asc_mult,
|
strengthAscensionMult: member.str_asc_mult,
|
||||||
task: member.task.name,
|
task: member.task,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3679,7 +3690,16 @@ function NetscriptFunctions(workerScript) {
|
|||||||
nsGang.checkGangApiAccess(workerScript, "recruitMember");
|
nsGang.checkGangApiAccess(workerScript, "recruitMember");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return Player.gang.recruitMember(name);
|
const res = Player.gang.recruitMember(name);
|
||||||
|
if (workerScript.shouldLog("recruitMember")) {
|
||||||
|
if (res) {
|
||||||
|
workerScript.log(`Successfully recruited Gang Member ${name}`);
|
||||||
|
} else {
|
||||||
|
workerScript.log(`Failed to recruit Gang Member ${name}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
throw makeRuntimeRejectMsg(workerScript, nsGang.unknownGangApiExceptionMessage("recruitMember", e));
|
throw makeRuntimeRejectMsg(workerScript, nsGang.unknownGangApiExceptionMessage("recruitMember", e));
|
||||||
}
|
}
|
||||||
@ -3709,7 +3729,16 @@ function NetscriptFunctions(workerScript) {
|
|||||||
try {
|
try {
|
||||||
for (const member of Player.gang.members) {
|
for (const member of Player.gang.members) {
|
||||||
if (member.name === memberName) {
|
if (member.name === memberName) {
|
||||||
return member.assignToTask(taskName);
|
const res = member.assignToTask(taskName);
|
||||||
|
if (workerScript.shouldLog("setMemberTask")) {
|
||||||
|
if (res) {
|
||||||
|
workerScript.log(`Successfully assigned Gang Member ${memberName} to ${taskName} task`);
|
||||||
|
} else {
|
||||||
|
workerScript.log(`Failed to assign Gang Member ${memberName} to ${taskName} task. ${memberName} is now Unassigned`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3755,7 +3784,16 @@ function NetscriptFunctions(workerScript) {
|
|||||||
try {
|
try {
|
||||||
for (const member in Player.gang.members) {
|
for (const member in Player.gang.members) {
|
||||||
if (member.name === memberName) {
|
if (member.name === memberName) {
|
||||||
return member.buyUpgrade(equipName, Player, Player.gang);
|
const res = member.buyUpgrade(equipName, Player, Player.gang);
|
||||||
|
if (workerScript.shouldLog("purchaseEquipment")) {
|
||||||
|
if (res) {
|
||||||
|
workerScript.log(`Purchased ${equipName} for Gang member ${memberName}`);
|
||||||
|
} else {
|
||||||
|
workerScript.log(`Failed to purchase ${equipName} for Gang member ${memberName}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3795,8 +3833,14 @@ function NetscriptFunctions(workerScript) {
|
|||||||
try {
|
try {
|
||||||
if (engage) {
|
if (engage) {
|
||||||
Player.gang.territoryWarfareEngaged = true;
|
Player.gang.territoryWarfareEngaged = true;
|
||||||
|
if (workerScript.shouldLog("setTerritoryWarfare")) {
|
||||||
|
workerScript.log("Engaging in Gang Territory Warfare");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Player.gang.territoryWarfareEngaged = false;
|
Player.gang.territoryWarfareEngaged = false;
|
||||||
|
if (workerScript.shouldLog("setTerritoryWarfare")) {
|
||||||
|
workerScript.log("Disengaging in Gang Territory Warfare");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
throw makeRuntimeRejectMsg(workerScript, nsGang.unknownGangApiExceptionMessage("setTerritoryWarfare", e));
|
throw makeRuntimeRejectMsg(workerScript, nsGang.unknownGangApiExceptionMessage("setTerritoryWarfare", e));
|
||||||
|
@ -205,7 +205,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
|
|||||||
isHacking: false,
|
isHacking: false,
|
||||||
name: "Human Trafficking",
|
name: "Human Trafficking",
|
||||||
params: {
|
params: {
|
||||||
baseRespect: 0.005, baseWanted: 0.4, baseMoney: 120,
|
baseRespect: 0.004, baseWanted: 1, baseMoney: 120,
|
||||||
hackWeight: 30, strWeight: 5, defWeight: 5, dexWeight: 30, chaWeight: 30,
|
hackWeight: 30, strWeight: 5, defWeight: 5, dexWeight: 30, chaWeight: 30,
|
||||||
difficulty: 36,
|
difficulty: 36,
|
||||||
territory: {
|
territory: {
|
||||||
@ -221,7 +221,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [
|
|||||||
isHacking: false,
|
isHacking: false,
|
||||||
name: "Terrorism",
|
name: "Terrorism",
|
||||||
params: {
|
params: {
|
||||||
baseRespect: 0.01, baseWanted: 1.5,
|
baseRespect: 0.01, baseWanted: 5,
|
||||||
hackWeight: 20, strWeight: 20, defWeight: 20, dexWeight: 20, chaWeight: 20,
|
hackWeight: 20, strWeight: 20, defWeight: 20, dexWeight: 20, chaWeight: 20,
|
||||||
difficulty: 36,
|
difficulty: 36,
|
||||||
territory: {
|
territory: {
|
||||||
|
Loading…
Reference in New Issue
Block a user