diff --git a/src/Constants.ts b/src/Constants.ts index e1d324ad4..0a659a30c 100644 --- a/src/Constants.ts +++ b/src/Constants.ts @@ -513,11 +513,15 @@ export let CONSTANTS: IMap = { * Gang Changes: ** UI now displays your chance to win a clash with other gangs ** Added getChanceToWinClash() function to the Gang API + ** Added getEquipmentType() function to the Gang API ** Added several new hacking-based equipment and Augmentations ** Rebalanced several equipment/upgrades to give less defense + ** Wanted level gain rate is now be slightly higher for all tasks + ** Rebalanced parameters for "hacking" tasks * Added new Main Menu configuration in .fconf: "compact" * Added the terminal command 'expr', which can be used to evaluate simple mathematical expressions + * Bug Fix: Can no longer purchase duplicate equipment/Augmentations through gang.purchaseEquipment() * Bug Fix: scp() should no longer throw errors when used with 2-arguments and an array of files * Bug Fix: Coding Contracts no longer give money in BitNode-8 * Bug Fix: In Bladeburner, you can no longer start a BlackOp through the Netscript API if it has already been completed diff --git a/src/Gang.js b/src/Gang.js index 0475cccd7..3661be240 100644 --- a/src/Gang.js +++ b/src/Gang.js @@ -272,11 +272,11 @@ Gang.prototype.processTerritoryAndPowerGains = function(numCycles=1) { if (gainRoll < 0.5) { // Multiplicative gain (50% chance) // This is capped per cycle, to prevent it from getting out of control - const multiplicativeGain = AllGangs[name].power * 0.008; - AllGangs[name].power += Math.min(0.9, multiplicativeGain); + const multiplicativeGain = AllGangs[name].power * 0.005; + AllGangs[name].power += Math.min(0.85, multiplicativeGain); } else { // Additive gain (50% chance) - const additiveGain = 0.5 * gainRoll * AllGangs[name].territory; + const additiveGain = 0.75 * gainRoll * AllGangs[name].territory; AllGangs[name].power += (additiveGain); } } @@ -681,7 +681,7 @@ GangMember.prototype.calculateWantedLevelGain = function(gang) { if (task.baseWanted < 0) { return 0.5 * task.baseWanted * statWeight * territoryMult; } else { - return 7 * task.baseWanted / (3 * statWeight * territoryMult); + return 7 * task.baseWanted / (Math.pow(3 * statWeight * territoryMult, 0.8)); } } @@ -809,6 +809,11 @@ GangMember.prototype.buyUpgrade = function(upg, player, gang) { if (!(upg instanceof GangMemberUpgrade)) { return false; } + // Prevent purchasing of already-owned upgrades + if (this.augmentations.includes(upg.name) || this.upgrades.includes(upg.name)) { + return false; + } + if (player.money.lt(upg.getCost(gang))) { return false; } player.loseMoney(upg.getCost(gang)); if (upg.type === "g") { diff --git a/src/data/gangmembertasks.ts b/src/data/gangmembertasks.ts index e810b92ad..16732c5ab 100644 --- a/src/data/gangmembertasks.ts +++ b/src/data/gangmembertasks.ts @@ -49,56 +49,56 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isCombat: false, isHacking: true, name: "Ransomware", - params: {baseRespect: 0.00005, baseWanted: 0.00001, baseMoney: 1, hackWeight: 100, difficulty: 1}, + params: {baseRespect: 0.00005, baseWanted: 0.0001, baseMoney: 1, hackWeight: 100, difficulty: 1}, }, { desc: "Assign this gang member to attempt phishing scams and attacks

Earns money - Slightly increases respect - Slightly increases wanted level", isCombat: false, isHacking: true, name: "Phishing", - params: {baseRespect: 0.00008, baseWanted: 0.001, baseMoney: 2.5, hackWeight: 85, chaWeight: 15, difficulty: 3.5}, + params: {baseRespect: 0.00008, baseWanted: 0.003, baseMoney: 2.5, hackWeight: 85, chaWeight: 15, difficulty: 3.5}, }, { desc: "Assign this gang member to attempt identity theft

Earns money - Increases respect - Increases wanted level", isCombat: false, isHacking: true, name: "Identity Theft", - params: {baseRespect: 0.0001, baseWanted: 0.01, baseMoney: 6, hackWeight: 80, chaWeight: 20, difficulty: 5}, + params: {baseRespect: 0.0001, baseWanted: 0.075, baseMoney: 6, hackWeight: 80, chaWeight: 20, difficulty: 5}, }, { desc: "Assign this gang member to carry out DDoS attacks

Increases respect - Increases wanted level", isCombat: false, isHacking: true, name: "DDoS Attacks", - params: {baseRespect: 0.0004, baseWanted: 0.05, hackWeight: 100, difficulty: 8}, + params: {baseRespect: 0.0004, baseWanted: 0.2, hackWeight: 100, difficulty: 8}, }, { desc: "Assign this gang member to create and distribute malicious viruses

Increases respect - Increases wanted level", isCombat: false, isHacking: true, name: "Plant Virus", - params: {baseRespect: 0.0006, baseWanted: 0.05, hackWeight: 100, difficulty: 12}, + params: {baseRespect: 0.0006, baseWanted: 0.4, hackWeight: 100, difficulty: 12}, }, { desc: "Assign this gang member to commit financial fraud and digital counterfeiting

Earns money - Slightly increases respect - Slightly increases wanted level", isCombat: false, isHacking: true, name: "Fraud & Counterfeiting", - params: {baseRespect: 0.0005, baseWanted: 0.1, baseMoney: 15, hackWeight: 80, chaWeight: 20, difficulty: 20}, + params: {baseRespect: 0.0004, baseWanted: 0.3, baseMoney: 15, hackWeight: 80, chaWeight: 20, difficulty: 20}, }, { desc: "Assign this gang member to launder money

Earns money - Increases respect - Increases wanted level", isCombat: false, isHacking: true, name: "Money Laundering", - params: {baseRespect: 0.0006, baseWanted: 0.2, baseMoney: 40, hackWeight: 75, chaWeight: 25, difficulty: 25}, + params: {baseRespect: 0.001, baseWanted: 1.25, baseMoney: 120, hackWeight: 75, chaWeight: 25, difficulty: 25}, }, { desc: "Assign this gang member to commit acts of cyberterrorism

Greatly increases respect - Greatly increases wanted level", isCombat: false, isHacking: true, name: "Cyberterrorism", - params: {baseRespect: 0.001, baseWanted: 0.5, hackWeight: 80, chaWeight: 20, difficulty: 36}, + params: {baseRespect: 0.01, baseWanted: 6, hackWeight: 80, chaWeight: 20, difficulty: 36}, }, { desc: "Assign this gang member to be an ethical hacker for corporations

Earns money - Lowers wanted level", @@ -140,7 +140,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Strongarm Civilians", params: { - baseRespect: 0.00004, baseWanted: 0.0035, baseMoney: 2.5, + baseRespect: 0.00004, baseWanted: 0.02, baseMoney: 2.5, hackWeight: 10, strWeight: 25, defWeight: 25, dexWeight: 20, agiWeight: 10, chaWeight: 10, difficulty: 5, territory: { @@ -156,7 +156,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Run a Con", params: { - baseRespect: 0.00012, baseWanted: 0.04, baseMoney: 15, + baseRespect: 0.00012, baseWanted: 0.05, baseMoney: 15, strWeight: 5, defWeight: 5, agiWeight: 25, dexWeight: 25, chaWeight: 40, difficulty: 14, }, @@ -167,7 +167,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Armed Robbery", params: { - baseRespect: 0.00014, baseWanted: 0.08, baseMoney: 38, + baseRespect: 0.00014, baseWanted: 0.1, baseMoney: 38, hackWeight: 20, strWeight: 15, defWeight: 15, agiWeight: 10, dexWeight: 20, chaWeight: 20, difficulty: 20, }, @@ -178,7 +178,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Traffick Illegal Arms", params: { - baseRespect: 0.0002, baseWanted: 0.18, baseMoney: 58, + baseRespect: 0.0002, baseWanted: 0.24, baseMoney: 58, hackWeight: 15, strWeight: 20, defWeight: 20, dexWeight: 20, chaWeight: 25, difficulty: 32, territory: { @@ -194,7 +194,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Threaten & Blackmail", params: { - baseRespect: 0.0002, baseWanted: 0.1, baseMoney: 24, + baseRespect: 0.0002, baseWanted: 0.125, baseMoney: 24, hackWeight: 25, strWeight: 25, dexWeight: 25, chaWeight: 25, difficulty: 28, }, @@ -205,7 +205,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Human Trafficking", params: { - baseRespect: 0.004, baseWanted: 1, baseMoney: 120, + baseRespect: 0.004, baseWanted: 1.25, baseMoney: 120, hackWeight: 30, strWeight: 5, defWeight: 5, dexWeight: 30, chaWeight: 30, difficulty: 36, territory: { @@ -221,7 +221,7 @@ export const gangMemberTasksMetadata: IGangMemberTaskMetadata[] = [ isHacking: false, name: "Terrorism", params: { - baseRespect: 0.01, baseWanted: 5, + baseRespect: 0.01, baseWanted: 6, hackWeight: 20, strWeight: 20, defWeight: 20, dexWeight: 20, chaWeight: 20, difficulty: 36, territory: {