mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 06:18:42 +02:00
DNET: Adjust balance from player feedback (#2512)
This commit is contained in:
committed by
GitHub
parent
8f77dc2df0
commit
9279b16729
@@ -1895,6 +1895,20 @@ export const Augmentations: Record<AugmentationName, Augmentation> = (() => {
|
||||
prereqs: [AugmentationName.TheBoots],
|
||||
factions: [],
|
||||
},
|
||||
[AugmentationName.TheStaff]: {
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
info:
|
||||
"This skeletal augmentation greatly enhances the users durability and health. Inspired by the original Staff of Medicine that is said to " +
|
||||
"have been given to Daedalus as a reward for the completion of the Labyrinth, which all modern augments are a descendant of. ",
|
||||
stats:
|
||||
"This augmentation increases the stasis link limit by one, and raises charisma xp by 20% and defense by 30%.",
|
||||
charisma_exp: 1.2,
|
||||
defense: 1.3,
|
||||
isSpecial: true,
|
||||
prereqs: [AugmentationName.TheHammer],
|
||||
factions: [],
|
||||
},
|
||||
[AugmentationName.TheLaw]: {
|
||||
repCost: 1e4,
|
||||
moneyCost: 1e6,
|
||||
@@ -1908,7 +1922,7 @@ export const Augmentations: Record<AugmentationName, Augmentation> = (() => {
|
||||
hacking: 1.1,
|
||||
company_rep: 1.05,
|
||||
isSpecial: true,
|
||||
prereqs: [AugmentationName.TheHammer],
|
||||
prereqs: [AugmentationName.TheStaff],
|
||||
factions: [],
|
||||
},
|
||||
[AugmentationName.TheSword]: {
|
||||
|
||||
@@ -130,6 +130,7 @@ export enum AugmentationName {
|
||||
// Darknet lab augs (in order of acquisition)
|
||||
TheBrokenWings = "The W1ngs of Icarus",
|
||||
TheBoots = "The B00ts of Perseus",
|
||||
TheStaff = "The St4ff of Asclepius",
|
||||
TheHammer = "The H4mmer of Daedalus",
|
||||
TheLaw = "The L4w of Bayes",
|
||||
TheSword = "The B1ade of Solomonoff",
|
||||
|
||||
@@ -305,7 +305,7 @@ export const restartServer = (server: DarknetServer): void => {
|
||||
killServerScripts(server, "Server restarted.");
|
||||
const serverState = getServerState(server.hostname);
|
||||
serverState.authenticatedPIDs = [];
|
||||
serverState.serverLogs = [{ pid: -1, message: "Server restarted." }];
|
||||
serverState.serverLogs = [{ pid: -1, message: "Server restarting, terminating scripts..." }];
|
||||
server.backdoorInstalled = false;
|
||||
disconnectServer(server);
|
||||
addGuaranteedConnection(server);
|
||||
|
||||
@@ -62,8 +62,15 @@ export const getRewardFromCache = (server: DarknetServer, cacheName: string, sup
|
||||
};
|
||||
};
|
||||
|
||||
export const getCCTReward = (): string => {
|
||||
const contractCount = [2, 3, 4][Math.floor(Math.random() * 3)];
|
||||
export const getCCTReward = (difficulty: number): string => {
|
||||
if (Math.random() < difficulty * 0.2) {
|
||||
return getMoneyReward(difficulty);
|
||||
}
|
||||
|
||||
const contractCount = Math.floor(Math.min(20, difficulty) * 0.2 - 1.5 + Math.random() * 3);
|
||||
if (contractCount <= 0) {
|
||||
return getMoneyReward(difficulty);
|
||||
}
|
||||
tryGeneratingRandomContract(contractCount);
|
||||
return `New coding contracts are now available on the network!`;
|
||||
};
|
||||
|
||||
@@ -41,12 +41,11 @@ export const handleSuccessfulAuth = (server: DarknetServer, threads: number, pid
|
||||
server.hasAdminRights = true;
|
||||
addClue(server);
|
||||
|
||||
// TODO: balance coding contract chance
|
||||
if (Math.random() < 0.1 && server.difficulty > 2) {
|
||||
const cctChance = Math.min(0.12, 0.02 * (server.difficulty - 1));
|
||||
if (Math.random() < cctChance) {
|
||||
generateContract({ server: server.hostname });
|
||||
}
|
||||
|
||||
// TODO: balance cache chance
|
||||
const chance = 0.1 * 1.05 ** server?.difficulty;
|
||||
if (Math.random() < chance && !isLabyrinthServer(server.hostname)) {
|
||||
addCacheToServer(server);
|
||||
@@ -231,7 +230,8 @@ export const scaleDarknetVolatilityIncreases = (scalar: number) => {
|
||||
export const getStasisLinkLimit = (): number => {
|
||||
const brokenWingLimitIncrease = Player.hasAugmentation(AugmentationName.TheBrokenWings) ? 1 : 0;
|
||||
const hammerLimitIncrease = Player.hasAugmentation(AugmentationName.TheHammer) ? 1 : 0;
|
||||
return 1 + brokenWingLimitIncrease + hammerLimitIncrease;
|
||||
const staffLimitIncrease = Player.hasAugmentation(AugmentationName.TheStaff) ? 1 : 0;
|
||||
return 1 + brokenWingLimitIncrease + hammerLimitIncrease + staffLimitIncrease;
|
||||
};
|
||||
|
||||
export const getSetStasisLinkDuration = (): number => {
|
||||
|
||||
@@ -69,23 +69,31 @@ export const labData: Record<string, LabDetails> = {
|
||||
[SpecialServers.EternalLab]: {
|
||||
name: SpecialServers.EternalLab,
|
||||
depth: 29,
|
||||
cha: 2800,
|
||||
cha: 3000,
|
||||
mazeWidth: 60,
|
||||
mazeHeight: 40,
|
||||
manual: false,
|
||||
},
|
||||
[SpecialServers.EndlessLab]: {
|
||||
name: SpecialServers.EndlessLab,
|
||||
depth: 31,
|
||||
cha: 3500,
|
||||
mazeWidth: 60,
|
||||
mazeHeight: 40,
|
||||
manual: false,
|
||||
},
|
||||
[SpecialServers.FinalLab]: {
|
||||
name: SpecialServers.FinalLab,
|
||||
depth: 31,
|
||||
cha: 3200,
|
||||
depth: 36,
|
||||
cha: 4000,
|
||||
mazeWidth: 60,
|
||||
mazeHeight: 40,
|
||||
manual: false,
|
||||
},
|
||||
[SpecialServers.BonusLab]: {
|
||||
name: SpecialServers.BonusLab,
|
||||
depth: 31,
|
||||
cha: 3200,
|
||||
depth: 36,
|
||||
cha: 4000,
|
||||
mazeWidth: 60,
|
||||
mazeHeight: 40,
|
||||
manual: false,
|
||||
@@ -373,6 +381,7 @@ export const getLabAugReward = (): AugmentationName => {
|
||||
AugmentationName.TheBrokenWings,
|
||||
AugmentationName.TheBoots,
|
||||
AugmentationName.TheHammer,
|
||||
AugmentationName.TheStaff,
|
||||
AugmentationName.TheLaw,
|
||||
AugmentationName.TheSword,
|
||||
];
|
||||
@@ -409,12 +418,15 @@ const getCurrentLabName = () => {
|
||||
if (!hasAugment(AugmentationName.TheHammer)) {
|
||||
return SpecialServers.MercilessLab;
|
||||
}
|
||||
if (!hasAugment(AugmentationName.TheStaff)) {
|
||||
return SpecialServers.UberLab;
|
||||
}
|
||||
if (Player.bitNodeN === 15) {
|
||||
if (!hasAugment(AugmentationName.TheRedPill)) {
|
||||
return SpecialServers.UberLab;
|
||||
return SpecialServers.EternalLab;
|
||||
}
|
||||
if (!hasAugment(AugmentationName.TheLaw)) {
|
||||
return SpecialServers.EternalLab;
|
||||
return SpecialServers.EndlessLab;
|
||||
}
|
||||
if (!hasAugment(AugmentationName.TheSword)) {
|
||||
return SpecialServers.FinalLab;
|
||||
@@ -423,10 +435,10 @@ const getCurrentLabName = () => {
|
||||
}
|
||||
|
||||
if (!hasAugment(AugmentationName.TheLaw)) {
|
||||
return SpecialServers.UberLab;
|
||||
return SpecialServers.EternalLab;
|
||||
}
|
||||
if (!hasAugment(AugmentationName.TheSword)) {
|
||||
return SpecialServers.EternalLab;
|
||||
return SpecialServers.EndlessLab;
|
||||
}
|
||||
if (allowTRP && !hasAugment(AugmentationName.TheRedPill)) {
|
||||
return SpecialServers.FinalLab;
|
||||
|
||||
@@ -36,11 +36,13 @@ export const handlePhishingAttack = (ctx: NetscriptContext, server: DarknetServe
|
||||
} else if (Math.random() < moneyRewardChance) {
|
||||
const randomFactor = Math.random() * 0.3 + 0.9;
|
||||
const bonusTimeFactor = hasDarknetBonusTime() ? 1.3 : 1;
|
||||
const depthFactor = 0.1 + server.depth * 0.05;
|
||||
const moneyReward =
|
||||
1e4 *
|
||||
2000 *
|
||||
Player.mults.crime_money *
|
||||
depthFactor *
|
||||
threads *
|
||||
((50 + Player.skills.charisma) / 50) *
|
||||
((200 + Player.skills.charisma) / 200) *
|
||||
bonusTimeFactor *
|
||||
randomFactor *
|
||||
currentNodeMults.DarknetMoneyMultiplier;
|
||||
|
||||
@@ -15,6 +15,7 @@ export const SpecialServers = {
|
||||
MercilessLab: "m3rc1l3ss_l4byr1nth",
|
||||
UberLab: "ub3r_l4byr1nth",
|
||||
EternalLab: "et3rn4l_l4byr1nth",
|
||||
EndlessLab: "end13ss_l4byr1nth",
|
||||
FinalLab: "f1n4l_l4byr1nth",
|
||||
BonusLab: "b0nus_l4byr1nth",
|
||||
} as const;
|
||||
|
||||
@@ -33,6 +33,7 @@ const setupBN15Environment = (labAugCount: number) => {
|
||||
AugmentationName.TheBrokenWings,
|
||||
AugmentationName.TheBoots,
|
||||
AugmentationName.TheHammer,
|
||||
AugmentationName.TheStaff,
|
||||
AugmentationName.TheRedPill,
|
||||
AugmentationName.TheLaw,
|
||||
AugmentationName.TheSword,
|
||||
@@ -54,6 +55,7 @@ const setupNonBN15Environment = (labAugCount: number, hasSf15 = false, allowTRPI
|
||||
AugmentationName.TheBrokenWings,
|
||||
AugmentationName.TheBoots,
|
||||
AugmentationName.TheHammer,
|
||||
AugmentationName.TheStaff,
|
||||
AugmentationName.TheLaw,
|
||||
AugmentationName.TheSword,
|
||||
AugmentationName.TheRedPill,
|
||||
@@ -200,7 +202,7 @@ describe("Labyrinth Tests", () => {
|
||||
expect(labDetails.name).toEqual(SpecialServers.UberLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.UberLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.UberLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheLaw);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheStaff);
|
||||
});
|
||||
it("should attach eternal lab if the player has SF15 access and uber lab aug", () => {
|
||||
setupNonBN15Environment(4, true);
|
||||
@@ -209,10 +211,19 @@ describe("Labyrinth Tests", () => {
|
||||
expect(labDetails.name).toEqual(SpecialServers.EternalLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.EternalLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.EternalLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheLaw);
|
||||
});
|
||||
it("should attach endless lab if the player has SF15 access and endless lab aug", () => {
|
||||
setupNonBN15Environment(5, true);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.EndlessLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.EndlessLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.EndlessLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheSword);
|
||||
});
|
||||
it("should attach bonus lab, but not offer TRP, if the player has SF15 access and eternal lab aug, but the bitnode disables TRP in lab", () => {
|
||||
setupNonBN15Environment(5, true, false);
|
||||
setupNonBN15Environment(6, true, false);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.BonusLab);
|
||||
@@ -221,7 +232,7 @@ describe("Labyrinth Tests", () => {
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.NeuroFluxGovernor);
|
||||
});
|
||||
it("should attach bonus lab if the player has SF15 access and final lab aug", () => {
|
||||
setupNonBN15Environment(5, true, true);
|
||||
setupNonBN15Environment(6, true, true);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.FinalLab);
|
||||
@@ -230,7 +241,7 @@ describe("Labyrinth Tests", () => {
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheRedPill);
|
||||
});
|
||||
it("should attach bonus lab if the player has SF15 access and final lab aug", () => {
|
||||
setupNonBN15Environment(6, true, true);
|
||||
setupNonBN15Environment(7, true, true);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.BonusLab);
|
||||
@@ -275,7 +286,7 @@ describe("Labyrinth Tests", () => {
|
||||
expect(labDetails.name).toEqual(SpecialServers.UberLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.UberLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.UberLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheRedPill);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheStaff);
|
||||
});
|
||||
it("should attach eternal lab if the player has SF15 access and uber lab aug", () => {
|
||||
setupBN15Environment(4);
|
||||
@@ -284,10 +295,19 @@ describe("Labyrinth Tests", () => {
|
||||
expect(labDetails.name).toEqual(SpecialServers.EternalLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.EternalLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.EternalLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheRedPill);
|
||||
});
|
||||
it("should attach endless lab if the player has SF15 access and endless lab aug", () => {
|
||||
setupBN15Environment(5);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.EndlessLab);
|
||||
expect(labDetails.lab?.hostname).toEqual(SpecialServers.EndlessLab);
|
||||
expect(labDetails.lab?.requiredCharismaSkill).toEqual(labData[SpecialServers.EndlessLab].cha);
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheLaw);
|
||||
});
|
||||
it("should attach final lab if the player has SF15 access and eternal lab aug", () => {
|
||||
setupBN15Environment(5);
|
||||
setupBN15Environment(6);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.FinalLab);
|
||||
@@ -296,7 +316,7 @@ describe("Labyrinth Tests", () => {
|
||||
expect(getLabAugReward()).toEqual(AugmentationName.TheSword);
|
||||
});
|
||||
it("should attach bonus lab if the player has SF15 access and final lab aug", () => {
|
||||
setupBN15Environment(6);
|
||||
setupBN15Environment(7);
|
||||
const labDetails = getLabyrinthDetails();
|
||||
|
||||
expect(labDetails.name).toEqual(SpecialServers.BonusLab);
|
||||
|
||||
Reference in New Issue
Block a user