mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-29 19:13:49 +01:00
Merge pull request #2593 from Ornedan/steam-achievement-spam
Fix steam achievement spam
This commit is contained in:
commit
e3b805eaf2
@ -2,19 +2,25 @@
|
|||||||
const greenworks = require("./greenworks");
|
const greenworks = require("./greenworks");
|
||||||
const log = require("electron-log");
|
const log = require("electron-log");
|
||||||
|
|
||||||
function enableAchievementsInterval(window) {
|
async function enableAchievementsInterval(window) {
|
||||||
// If the Steam API could not be initialized on game start, we'll abort this.
|
// If the Steam API could not be initialized on game start, we'll abort this.
|
||||||
if (global.greenworksError) return;
|
if (global.greenworksError) return;
|
||||||
|
|
||||||
// This is backward but the game fills in an array called `document.achievements` and we retrieve it from
|
// This is backward but the game fills in an array called `document.achievements` and we retrieve it from
|
||||||
// here. Hey if it works it works.
|
// here. Hey if it works it works.
|
||||||
const steamAchievements = greenworks.getAchievementNames();
|
const steamAchievements = greenworks.getAchievementNames();
|
||||||
|
log.debug(`All Steam achievements ${JSON.stringify(steamAchievements)}`);
|
||||||
|
const playerAchieved = (await Promise.all(steamAchievements.map(checkSteamAchievement))).filter(name => !!name);
|
||||||
|
log.debug(`Player has Steam achievements ${JSON.stringify(playerAchieved)}`);
|
||||||
const intervalID = setInterval(async () => {
|
const intervalID = setInterval(async () => {
|
||||||
try {
|
try {
|
||||||
const playerAchievements = await window.webContents.executeJavaScript("document.achievements");
|
const playerAchievements = await window.webContents.executeJavaScript("document.achievements");
|
||||||
for (const ach of playerAchievements) {
|
for (const ach of playerAchievements) {
|
||||||
if (!steamAchievements.includes(ach)) continue;
|
if (!steamAchievements.includes(ach)) continue; // Don't try activating achievements that don't exist Steam-side
|
||||||
|
if (playerAchieved.includes(ach)) continue; // Don't spam achievements that have already been recorded
|
||||||
|
log.info(`Granting Steam achievement ${ach}`);
|
||||||
greenworks.activateAchievement(ach, () => undefined);
|
greenworks.activateAchievement(ach, () => undefined);
|
||||||
|
playerAchieved.push(ach);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(error);
|
log.error(error);
|
||||||
@ -28,6 +34,15 @@ function enableAchievementsInterval(window) {
|
|||||||
window.achievementsIntervalID = intervalID;
|
window.achievementsIntervalID = intervalID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkSteamAchievement(name) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
greenworks.getAchievement(name, playerHas => resolve(playerHas ? name : ""), err => {
|
||||||
|
log.warn(`Failed to get Steam achievement ${name} status: ${err}`);
|
||||||
|
resolve("");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function disableAchievementsInterval(window) {
|
function disableAchievementsInterval(window) {
|
||||||
if (window.achievementsIntervalID) {
|
if (window.achievementsIntervalID) {
|
||||||
clearInterval(window.achievementsIntervalID);
|
clearInterval(window.achievementsIntervalID);
|
||||||
|
Loading…
Reference in New Issue
Block a user