PokeClicker Hacks

tab hack menu shiny rate and more...

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name       PokeClicker Hacks
// @author     fiammanda
// @version    1.20220222
// @grant      none
// @match      https://www.pokeclicker.com/
// @license    MIT
// @description tab hack menu shiny rate and more...
// @namespace https://greasyfork.org/users/1055144
// ==/UserScript==

let click = 0, hatch = 0;
const hacks = [
	[0, "catch rate", 10],
	["shiny", "shiny chance", 100],
	["roaming", "roaming chance", 10],
	["exp", "experience", 10],
	["eggStep", "egg step", 10],
	["money", "money", 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999],
	["dungeonToken", "dungeon token", 500000],
	["clickAttack", "player attack", 9000000000],
	["pokemonAttack", "pokemon attack", 100],
	[4, "berry growth", 100],
	[8, "berry mutation", 100],
	[9, "berry replant", 100],
	[7, "mine enery", 900000],
	[10, "mine damage", 900000],
	[11, "mine award", 900000]
]

const style = document.createElement("style");
style.innerHTML = `
	#game {
		max-width: 1500px;
	}
	#game .col-lg-3 {
		flex: 0 0 20%;
		max-width: 20%;
	}
	#game .col-lg-6 {
		flex: 0 0 40%;
		max-width: 40%;
	}
	#hack {
		font-size: .825rem;
		overflow: auto;
	}
	#hack img, #hack svg {
		width: 1rem;
		color: #222;
	}
	#hack table {
		table-layout:fixed;
	}
	#hack td {
		padding: .25rem 0;
	}
	#hack td.disabled {
		background: rgba(0,0,0,.03);
		pointer-events: none;
	}
	#hack td.disabled img, #hack td.disabled svg {
		opacity: .25;
	}
	#hack td:first-child {
		padding: .25rem;
		text-align: left;
	}
	#hack td[data-rate]::before {
		content: attr(data-rate) attr(data-multiplier);
		font-size: .75rem;
		white-space: nowrap;
	}
	#hack td[data-rate="0"]::before {
		content: "-";
	}
	#hack td[onclick] {
		width: 2rem;
		background: rgba(0,0,0,.05);
		transition: background .2s ease-in-out;
		cursor: pointer;
	}
	#hack td[onclick]:hover {
		background: rgba(0,0,0,.08);
	}
`;
document.body.append(style);

const hack = document.createElement("div");
hack.className = "col-lg-2 order-lg-first";
let html = `<div class="card border-secondary mb-3">
	<div class="card-header p-0" data-toggle="collapse" href="#hack" aria-expanded="true"><span>Hacks</span></div>
	<div id="hack" class="card-body show p-0">
		<table class="table table-bordered m-0">
			<tr>
				<td>catch time</td>
				<td onclick="this.classList.add('disabled');App.game.pokeballs.pokeballs[0].catchTime = 100"><img src="assets/images/pokeball/Pokeball.svg"></td>
				<td onclick="this.classList.add('disabled');App.game.pokeballs.pokeballs[1].catchTime = 100"><img src="assets/images/pokeball/Greatball.svg"></td>
				<td onclick="this.classList.add('disabled');App.game.pokeballs.pokeballs[2].catchTime = 100"><img src="assets/images/pokeball/Ultraball.svg"></td>
				<td onclick="this.classList.add('disabled');App.game.pokeballs.pokeballs[3].catchTime = 100"><img src="assets/images/pokeball/Masterball.svg"></td>
			</tr>
`;
hacks.forEach((h, i) => {
	html += `<tr><td colspan="2">${h[1]}</td><td data-multiplier="${h[2].toString().substring(1)}" data-rate="0"></td><td onclick="`;
	html += `let r = Number(this.previousSibling.dataset.rate) + 1;`;
	html += `this.previousSibling.dataset.rate = r;`;
	html += `this.nextSibling.classList.remove('disabled');`;
	if (i == 0 || i > 8) {
		html += `r = r * ${h[2]};`;
		html += `App.game.oakItems.itemList[${h[0]}].bonusList = [r,r,r,r,r,r];`;
		html += `App.game.oakItems.itemList[${h[0]}].inactiveBonus = r;`;
	} else {
		html += `r = r * ${h[2]} / Math.max((r - 1) * ${h[2]}, 1);`;
		html += `App.game.multiplier.addBonus('${h[0]}', () => r);`;
	}
	html += `"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 5.75V18.25"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.25 12L5.75 12"/></svg></td><td class="disabled" onclick="`;
	if (i == 0 || i > 8) {
		html += `App.game.oakItems.itemList[${h[0]}].bonusList = [10,10,10,10,10,10];`;
		html += `App.game.oakItems.itemList[${h[0]}].inactiveBonus = 10;`;
	} else {
		html += `let r = Number(this.previousSibling.previousSibling.dataset.rate);`;
		html += `App.game.multiplier.addBonus('${h[0]}', () => 1 / Math.max(r * ${h[2]}, 1));`;
	}
	html += `this.previousSibling.previousSibling.dataset.rate = 0;`;
	html += `this.classList.add('disabled');`;
	html += `"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.25 4.75L8.75 7L11.25 9.25"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12.75 19.25L15.25 17L12.75 14.75"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.75 7H13.25C16.5637 7 19.25 9.68629 19.25 13V13.25"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M14.25 17H10.75C7.43629 17 4.75 14.3137 4.75 11V10.75"/></svg></td></tr>`;
});
html += `
			<tr>
				<td colspan="3">auto click</td>
				<td onclick="this.classList.add('disabled');this.nextElementSibling.classList.remove('disabled');click=setInterval(()=>{4==App.game.gameState&&DungeonRunner.handleClick()},100)"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.25 12L5.75 5.75V18.25L18.25 12Z"/></svg></td>
				<td class="disabled" onclick="this.classList.add('disabled');this.previousElementSibling.classList.remove('disabled');clearInterval(click)"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.25 6.75V17.25"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M8.75 6.75V17.25"/></svg></td>
			<tr>
			</tr>
				<td colspan="3">auto hatch</td>
				<td onclick="this.classList.add('disabled');this.nextElementSibling.classList.remove('disabled');hatch=setInterval(function(){for(let a=App.game.party.caughtPokemon.filter(a=>!(a.breeding||100>a.level)&&!(-1<BreedingController.filter.category()&&a.category!=BreedingController.filter.category())&&!(-1<BreedingController.filter.shinyStatus()&&+a.shiny!==BreedingController.filter.shinyStatus()));App.game.breeding.hasFreeQueueSlot()&&a.length;)App.game.breeding.addPokemonToHatchery(a[0]),a.shift()},6e4)"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18.25 12L5.75 5.75V18.25L18.25 12Z"/></svg></td>
				<td class="disabled" onclick="this.classList.add('disabled');this.previousElementSibling.classList.remove('disabled');clearInterval(hatch)"><svg fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.25 6.75V17.25"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M8.75 6.75V17.25"/></svg></td>
			</tr>
		</table>
	</div>
</div>`;
html += `<div class="card sortable border-secondary mb-3" data-bind="visible: player.highestRegion">${document.getElementById("shortcutsContainer").innerHTML}</div>`;
hack.innerHTML = html;
document.getElementById("shortcutsContainer").remove();
document.querySelector(".justify-content-lg-center").prepend(hack);