diff --git a/enhancedautoclicker.user.js b/enhancedautoclicker.user.js
index ff24683e..a7e7a1ff 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() {
#5
All
+
+
+
+
+
+ Auto Achievement [`+ achievementState + `]
+
+
+
+
+ Routes
+ Gyms
+ Dungeons
+
`
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,23 @@ 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);
+
+ // 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) {
const element = event.target;
if (gymSelect != +element.value) {
@@ -161,6 +197,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 +267,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 +422,121 @@ 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)
+ {
+ currentGym = newGym;
+ player.subregion = TownList[newGym].subRegion;
+ 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)
+ {
+ currentDungeon = newDungeon;
+ player.subregion = TownList[newDungeon].subRegion;
+ 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 ++)
+ {
+ 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 +650,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 +673,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;