mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 06:18:42 +02:00
49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const { ipcMain } = require("electron");
|
|
const { steamworksClient } = require("./steamworksUtils");
|
|
const log = require("electron-log");
|
|
|
|
function enableSyncingAchievements() {
|
|
// If the Steam API could not be initialized on game start, we'll abort this.
|
|
if (!steamworksClient) {
|
|
return;
|
|
}
|
|
const allSteamAchievements = steamworksClient.achievement.names();
|
|
log.silly(`All Steam achievements ${JSON.stringify(allSteamAchievements)}`);
|
|
const steamAchievements = allSteamAchievements.filter((achievement) =>
|
|
steamworksClient.achievement.isActivated(achievement),
|
|
);
|
|
log.debug(`Player has Steam achievements ${JSON.stringify(steamAchievements)}`);
|
|
|
|
ipcMain.on("activate-achievements", async (_event, data) => {
|
|
if (!data || !Array.isArray(data.achievements)) {
|
|
log.info("Achievement list is invalid. Data:", data);
|
|
return;
|
|
}
|
|
try {
|
|
for (const achievement of data.achievements) {
|
|
// Don't try activating achievements that don't exist Steam-side
|
|
if (!allSteamAchievements.includes(achievement)) {
|
|
continue;
|
|
}
|
|
// Don't spam achievements that have already been recorded
|
|
if (steamAchievements.includes(achievement)) {
|
|
continue;
|
|
}
|
|
log.info(`Granting Steam achievement ${achievement}`);
|
|
if (steamworksClient.achievement.activate(achievement)) {
|
|
steamAchievements.push(achievement);
|
|
} else {
|
|
log.warn(`Cannot grant Steam achievement ${achievement}`);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
log.error(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
enableSyncingAchievements,
|
|
};
|