Files
bitburner-src/electron/achievements.js

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,
};