From ef29c5bfe4ad667b75eaaa991785f3312f5b0215 Mon Sep 17 00:00:00 2001 From: Aymeric Date: Thu, 27 Oct 2022 15:59:11 +0200 Subject: [PATCH 1/2] Add autoAchievement Auto complete achievements for Route, Gyms and Dungeons Original Credit: Bowbylone Script Modified by: Dionisos94 --- enhancedautoclicker.user.js | 172 ++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) diff --git a/enhancedautoclicker.user.js b/enhancedautoclicker.user.js index ff24683e..2629e1f4 100644 --- a/enhancedautoclicker.user.js +++ b/enhancedautoclicker.user.js @@ -30,7 +30,9 @@ var allSelectedGym = 0; var gymState; var gymSelect; var dungeonState; +var achievementState; var dungeonSelect; +var achievementSelect; var foundBoss = false; var foundBossX; var foundBossY; @@ -81,18 +83,35 @@ function initAutoClicker() { + + + + + + + + ` battleView.before(elemAC) document.getElementById('gym-select').value = gymSelect; document.getElementById('dungeon-select').value = dungeonSelect; + document.getElementById('achievement-select').value = achievementSelect; document.getElementById('auto-click-start').addEventListener('click', () => { toggleAutoClick(); }); document.getElementById('auto-gym-start').addEventListener('click', event => { toggleAutoGym(event); }); document.getElementById('auto-dungeon-start').addEventListener('click', event => { toggleAutoDungeon(event); }); + document.getElementById('auto-achievement-start').addEventListener('click', event => { toggleAutoAchievement(event); }); document.getElementById('gym-select').addEventListener('change', event => { changeSelectedGym(event); }); document.getElementById('dungeon-select').addEventListener('change', event => { changeSelectedDungeon(event); }); + document.getElementById('achievement-select').addEventListener('change', event => { changeSelectedAchievement(event); }); document.getElementById('auto-click-delay').addEventListener('change', event => { changeClickDelay(event); }); addGlobalStyle('#auto-click-info { display: flex;flex-direction: row;justify-content: center; }'); @@ -145,6 +164,14 @@ function toggleAutoDungeon(event) { localStorage.setItem('autoDungeonState', dungeonState); } +function toggleAutoAchievement(event) { + const element = event.target; + achievementState = !achievementState; + achievementState ? element.classList.replace('btn-danger', 'btn-success') : element.classList.replace('btn-success', 'btn-danger'); + element.textContent = `Auto Achievement [${achievementState ? 'ON' : 'OFF'}]`; + localStorage.setItem('autoAchievementState', achievementState); +} + function changeSelectedGym(event) { const element = event.target; if (gymSelect != +element.value) { @@ -161,6 +188,14 @@ function changeSelectedDungeon(event) { } } +function changeSelectedAchievement() { + const element = event.target; + if (achievementSelect != +element.value) { + achievementSelect = +element.value; + localStorage.setItem("selectedAchievement", achievementSelect); + } +} + function getRandomInt(max) { return Math.floor(Math.random() * max); } @@ -223,6 +258,11 @@ function autoClicker() { bossCoords.length = 0 } + //Auto Achievement checking + if (achievementState) { + autoAchievement(); + } + // Click while in a gym battle if (App.game.gameState === GameConstants.GameState.gym) { GymBattle.clickAttack(); @@ -373,6 +413,124 @@ function autoDungeon() { } } +function autoAchievement() +{ + + let currentRoute = player.route(); + let currentRegion = player.region; + let currentDungeon = player.town().dungeon?.name; + let currentGym = player.town().name; + + //Route + if(achievementSelect == 0) + { + let newRoute = getNextRoute(); + currentRoute = player.route(); + if(newRoute && newRoute.number != currentRoute || newRoute.region != currentRegion) + { + currentRoute = newRoute.number; + currentRegion = newRoute.region; + + if(newRoute.region != player.subregion) + { + player.subregion = newRoute.subRegion; + } + MapHelper.moveToRoute(newRoute.number, newRoute.region); + } + } + //Gym + + else if(achievementSelect == 1) + { + //Toggle Auto Gym ON + + if (gymState === false) { + document.getElementById("auto-gym-start").click(); + } + + let newGym = getNextGym(); + if(newGym && newGym != currentGym) + { + //ToggleAutoGym(); + currentGym = newGym; + MapHelper.moveToTown(newGym); + } + + } + + //Dungeon + else if(achievementSelect == 2) + { + //Toggle Auto Dungeon ON + if (dungeonState === false) { + document.getElementById("auto-dungeon-start").click(); + } + + //Move + let newDungeon = getNextDungeon(); + if(newDungeon && newDungeon != currentDungeon) + { + //ToggleAutoDungeon(); + currentDungeon = newDungeon; + MapHelper.moveToTown(newDungeon); + } + } +} + +function getNextRoute() +{ + let regionRoutes = Routes.getRoutesByRegion(player.region); + for(let j = 0; j < regionRoutes.length; j ++) + { + if(getDefeatedOnRoute(player.region, regionRoutes[j].number) < GameConstants.ACHIEVEMENT_DEFEAT_ROUTE_VALUES[GameConstants.ACHIEVEMENT_DEFEAT_ROUTE_VALUES.length-1]) + { + return regionRoutes[j]; + } + } +} + +function getNextGym() +{ + let regionGyms = GameConstants.RegionGyms[player.region]; + for(let j = 0; j < regionGyms.length; j ++) + { + if(getDefeatedOnGym(regionGyms[j]) < GameConstants.ACHIEVEMENT_DEFEAT_GYM_VALUES[GameConstants.ACHIEVEMENT_DEFEAT_GYM_VALUES.length-1]) + { + return regionGyms[j]; + } + } +} + +function getNextDungeon() +{ + let regionDungeons = GameConstants.RegionDungeons[player.region]; + for(let j = 0; j < regionDungeons.length; j ++) + { + let defeated = getDefeatedOnDungeon(regionDungeons[j]); + + if(getDefeatedOnDungeon(regionDungeons[j]) < GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES.length-1]) + { + return regionDungeons[j]; + } + } +} + +function getDefeatedOnRoute(region, route) +{ + return App.game.statistics.routeKills[region][route](); +} + +function getDefeatedOnGym(gymName) +{ + return App.game.statistics.gymsDefeated[GameConstants.getGymIndex(gymName)](); +} + +function getDefeatedOnDungeon(dungeonName) +{ + return App.game.statistics.dungeonsCleared[GameConstants.getDungeonIndex(dungeonName)](); +} + + function scan(dungeonBoard) { /*var bossCoords = [] var playerCoords = []*/ @@ -486,6 +644,12 @@ if (!validParse(localStorage.getItem('selectedGym'))) { if (!validParse(localStorage.getItem('autoDungeonState'))) { localStorage.setItem("autoDungeonState", false); } +if (!validParse(localStorage.getItem('autoAchievementState'))) { + localStorage.setItem("autoAchievementState", false); +} +if (!validParse(localStorage.getItem('selectedAchievement'))) { + localStorage.setItem("selectedAchievement", 0); +} if (!validParse(localStorage.getItem('selectedDungeon'))) { localStorage.setItem("selectedDungeon", 0); } @@ -503,7 +667,15 @@ try { localStorage.setItem("autoDungeonState", false); } +try { + achievementState = JSON.parse(localStorage.getItem('autoAchievementState')); +} catch (error) { + achievementState = false + localStorage.setItem("autoAchievementState", false); +} + dungeonSelect = JSON.parse(localStorage.getItem('selectedDungeon')); +achievementSelect = JSON.parse(localStorage.getItem('selectedAchievement')); delayAutoClick = JSON.parse(localStorage.getItem('delayAutoClick')); clickDPS = clickState ? JSON.parse(localStorage.getItem('storedClickDPS')) : 0; From 37cd308624c331666b4000f23da7814e115baf38 Mon Sep 17 00:00:00 2001 From: Aymeric Date: Thu, 27 Oct 2022 23:06:52 +0200 Subject: [PATCH 2/2] BugFix: - Move player subregion to match gym or dungeon subregion - deactivate autogym/dungeon if autoachievement is deactivated --- enhancedautoclicker.user.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/enhancedautoclicker.user.js b/enhancedautoclicker.user.js index 2629e1f4..a7e7a1ff 100644 --- a/enhancedautoclicker.user.js +++ b/enhancedautoclicker.user.js @@ -170,6 +170,15 @@ function toggleAutoAchievement(event) { achievementState ? element.classList.replace('btn-danger', 'btn-success') : element.classList.replace('btn-success', 'btn-danger'); element.textContent = `Auto Achievement [${achievementState ? 'ON' : 'OFF'}]`; localStorage.setItem('autoAchievementState', achievementState); + + // Deactivate AutoGym and AutoDungeon that could have been triggered + if(gymState === true){ + document.getElementById("auto-gym-start").click(); + } + + if(dungeonState === true){ + document.getElementById("auto-dungeon-start").click(); + } } function changeSelectedGym(event) { @@ -439,11 +448,10 @@ function autoAchievement() } } //Gym - + else if(achievementSelect == 1) { //Toggle Auto Gym ON - if (gymState === false) { document.getElementById("auto-gym-start").click(); } @@ -451,8 +459,8 @@ function autoAchievement() let newGym = getNextGym(); if(newGym && newGym != currentGym) { - //ToggleAutoGym(); currentGym = newGym; + player.subregion = TownList[newGym].subRegion; MapHelper.moveToTown(newGym); } @@ -470,8 +478,8 @@ function autoAchievement() let newDungeon = getNextDungeon(); if(newDungeon && newDungeon != currentDungeon) { - //ToggleAutoDungeon(); currentDungeon = newDungeon; + player.subregion = TownList[newDungeon].subRegion; MapHelper.moveToTown(newDungeon); } } @@ -506,8 +514,6 @@ function getNextDungeon() let regionDungeons = GameConstants.RegionDungeons[player.region]; for(let j = 0; j < regionDungeons.length; j ++) { - let defeated = getDefeatedOnDungeon(regionDungeons[j]); - if(getDefeatedOnDungeon(regionDungeons[j]) < GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES[GameConstants.ACHIEVEMENT_DEFEAT_DUNGEON_VALUES.length-1]) { return regionDungeons[j];