mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-30 03:23:48 +01:00
Merge pull request #2561 from Feodoric/hacknet-server-cheevos
Hacknet server achievements
This commit is contained in:
commit
ff2f8849fa
@ -34,6 +34,7 @@ export interface Achievement {
|
|||||||
Secret?: boolean;
|
Secret?: boolean;
|
||||||
Condition: () => boolean;
|
Condition: () => boolean;
|
||||||
Visible?: () => boolean;
|
Visible?: () => boolean;
|
||||||
|
AdditionalUnlock?: string[]; // IDs of achievements that should be awarded when awarding this one
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PlayerAchievement {
|
export interface PlayerAchievement {
|
||||||
@ -510,12 +511,14 @@ export const achievements: IMap<Achievement> = {
|
|||||||
Icon: "HASHNET",
|
Icon: "HASHNET",
|
||||||
Visible: () => hasAccessToSF(Player, 9),
|
Visible: () => hasAccessToSF(Player, 9),
|
||||||
Condition: () => hasHacknetServers(Player) && Player.hacknetNodes.length > 0,
|
Condition: () => hasHacknetServers(Player) && Player.hacknetNodes.length > 0,
|
||||||
|
AdditionalUnlock: [achievementData.FIRST_HACKNET_NODE.ID],
|
||||||
},
|
},
|
||||||
ALL_HACKNET_SERVER: {
|
ALL_HACKNET_SERVER: {
|
||||||
...achievementData["ALL_HACKNET_SERVER"],
|
...achievementData["ALL_HACKNET_SERVER"],
|
||||||
Icon: "HASHNETALL",
|
Icon: "HASHNETALL",
|
||||||
Visible: () => hasAccessToSF(Player, 9),
|
Visible: () => hasAccessToSF(Player, 9),
|
||||||
Condition: () => hasHacknetServers(Player) && Player.hacknetNodes.length === HacknetServerConstants.MaxServers,
|
Condition: () => hasHacknetServers(Player) && Player.hacknetNodes.length === HacknetServerConstants.MaxServers,
|
||||||
|
AdditionalUnlock: [achievementData["30_HACKNET_NODE"].ID],
|
||||||
},
|
},
|
||||||
MAX_HACKNET_SERVER: {
|
MAX_HACKNET_SERVER: {
|
||||||
...achievementData["MAX_HACKNET_SERVER"],
|
...achievementData["MAX_HACKNET_SERVER"],
|
||||||
@ -537,12 +540,14 @@ export const achievements: IMap<Achievement> = {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
AdditionalUnlock: [achievementData.MAX_HACKNET_NODE.ID],
|
||||||
},
|
},
|
||||||
HACKNET_SERVER_1B: {
|
HACKNET_SERVER_1B: {
|
||||||
...achievementData["HACKNET_SERVER_1B"],
|
...achievementData["HACKNET_SERVER_1B"],
|
||||||
Icon: "HASHNETMONEY",
|
Icon: "HASHNETMONEY",
|
||||||
Visible: () => hasAccessToSF(Player, 9),
|
Visible: () => hasAccessToSF(Player, 9),
|
||||||
Condition: () => hasHacknetServers(Player) && Player.moneySourceB.hacknet >= 1e9,
|
Condition: () => hasHacknetServers(Player) && Player.moneySourceB.hacknet >= 1e9,
|
||||||
|
AdditionalUnlock: [achievementData.HACKNET_NODE_10M.ID],
|
||||||
},
|
},
|
||||||
MAX_CACHE: {
|
MAX_CACHE: {
|
||||||
...achievementData["MAX_CACHE"],
|
...achievementData["MAX_CACHE"],
|
||||||
@ -759,13 +764,14 @@ export const achievements: IMap<Achievement> = {
|
|||||||
// { ID: "FLIGHT.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.Flight.name) },
|
// { ID: "FLIGHT.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.Flight.name) },
|
||||||
|
|
||||||
export function calculateAchievements(): void {
|
export function calculateAchievements(): void {
|
||||||
const availableAchievements = Object.values(achievements)
|
|
||||||
.filter((a) => a.Condition())
|
|
||||||
.map((a) => a.ID);
|
|
||||||
const playerAchievements = Player.achievements.map((a) => a.ID);
|
const playerAchievements = Player.achievements.map((a) => a.ID);
|
||||||
const newAchievements = availableAchievements.filter((a) => !playerAchievements.includes(a));
|
|
||||||
|
|
||||||
for (const id of newAchievements) {
|
const missingAchievements = Object.values(achievements)
|
||||||
|
.filter((a) => !playerAchievements.includes(a.ID) && a.Condition())
|
||||||
|
// callback returns array of achievement id and id of any in the additional list, flatmap means we have only a 1D array
|
||||||
|
.flatMap((a) => [a.ID, ...(a.AdditionalUnlock || [])]);
|
||||||
|
|
||||||
|
for (const id of missingAchievements) {
|
||||||
Player.giveAchievement(id);
|
Player.giveAchievement(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user