您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hacks, and color mod v1 by Vaakir with the colod mod v2 from nitrogem35
- //******************************************************** GATS:IO SCRIPT ********************************************************************/
- // ==UserScript==
- // @name Gats.io - Vaakir's hack pack GUI
- // @namespace http://tampermonkey.net/
- // @version 3.0
- // @description Hacks, and color mod v1 by Vaakir with the colod mod v2 from nitrogem35
- // @author Vaakir youtube & nitrogem35
- // @run-at document-end
- // @match https://gats.io/
- // @grant none
- // ==/UserScript==
- // COMMENT : I got bored, okay? So I just made a GUI for some of the scripts, hope y'all like it, I'm satisfied :>
- // GATS DEVELOPER : (translate) Ich werde wahrscheinlich diese .io-Spiele verlassen, das Ändern der Funktion [Namen] reicht aus, um dieses Skript zu patchen. Bis das passiert, trololol :joy:
- // GATS DEVELOPER : Im probably leaving gonna these .io games, changing the function [names] is enough to patch this script. Untill that happens, trololol :joy:
- (function() {
- let overlayHTML = `
- <link href="https://fonts.googleapis.com/css?family=Orbitron:900" rel="stylesheet"/>
- <div id="box">
- <div class="ou" id="box2">
- <p style="color:white;">⚡ Gats.io Full Hack pack ⚡</p>
- <p id="ytlink"><a href="https://www.youtube.com/channel/UC2m-9cAoT8EEO2dqWlk4Yfw" target="_blank">Vaakir Youtube</a></p>
- <section><label>Aimbot [Right click]</label> <input id="aimbot" type="checkbox" value="#0000ff"></section>
- <section><label>Zoom [mousewheel] </label><div class="checked"></div></section>
- <section><label>Mine detection </label><div class="checked"></div></section>
- <section><label>Ghost detection </label><div class="checked"></div></section>
- <section><label>Silencer detection </label><div class="checked"></div></section>
- <section><label>Crate</label> <input id="acrate" type="color" value="#dfbf9f"></section>
- <section><label>Long Crate</label> <input id="alongCrate" type="color" value="#bec8dd"></section>
- <section><label>Crate Border</label> <input id="acrateborder" type="color" value="#808080"></section>
- <section><label>Long Crate Border</label> <input id="alongcrateborder" type="color" value="#808080"></section>
- <section><label>Player Crate Border</label> <input id="playercrateborder" type="color" value="#808080"></section>
- <section><label>Random Crate Colors</label> <input id="arandom" type="checkbox" value="#0000ff"></section>
- <section><label>Random Crate Borders</label> <input id="arandom2" type="checkbox" value="#0000ff"></section>
- <section><label>Seizure Mode</label> <input id="seizure" type="checkbox" value="#0000ff"></section>
- <section><label>Vaakir Mode</label> <input id="vaakirmode" type="checkbox" value="#0000ff"></section>
- <section><label>Reset To Defaults</label> <input id="default" type="checkbox" value="#0000ff"></section>
- <section><label>Multiboxing </label><div class="checked notchecked"></div></section>
- <section><label>Auto upgrading </label><div class="checked notchecked"></div></section>
- <section><label>Scrolling text </label><div class="checked notchecked"></div></section>
- </div>
- <button class="ou" id="accordian">Toggle</button>
- </div>
- <style>
- #box {
- z-index: 10;
- position: absolute;
- bottom: 10vh;
- left: 10px;}
- #box2 {
- padding: 15px;
- margin-bottom: 5px}
- section {
- display: flex;
- justify-content: space-between;margin:5px;}
- .ou {
- background-color: rgba(85,85,85,0.5);
- letter-spacing: 3px;
- font-weight: bold;
- font-size: 15px;
- font-family: Orbitron;
- color:white;}
- p { text-align: center;border-bottom:1px solid white;}
- #ytlink { border:0;}
- #ytlink a{ color:lime;}
- #accordian {
- width: 100%;
- border:0;}
- label { font-weight: bold;}
- input {
- margin-top: auto;
- margin-bottom: auto;
- transform: scale(1.3);}
- input:hover { cursor: pointer;}
- input:focus { box-shadow: 0 0 10px #9ecaed;}
- input[type=checkbox] { transform: scale(2.2);outline=none;}
- input[type=radio] { border-top: auto;}
- input[type=color] { width: 50px;}
- .checked {
- height: 20px;
- width: 20px;
- box-shadow: -1px -2px 5px gray;
- border: 3px solid gray;
- background-color: green;
- margin-top: auto;
- margin-bottom: auto;
- box-shadow: 2 2 2px #a0a0a0;
- width:20px;
- transform: scale(1.5);}
- .notchecked { background-color: red;}
- </style>
- `
- // Usefull functions..
- function get(x) { return document.getElementById(x); }
- function rColor() { return rgbToHex(Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255)); }
- function componentToHex(c) { var hex = c.toString(16);return hex.length == 1 ? "0" + hex : hex; }
- function rgbToHex(r, g, b) { return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); }
- // Setting up the html div
- let overlay = document.createElement("div");
- overlay.innerHTML = overlayHTML;
- document.body.appendChild(overlay);
- // Getting variables from div by id's
- let acrate = get("acrate"),
- alongCrate = get("alongCrate"),
- acrateborder = get("acrateborder"),
- alongcrateborder = get("alongcrateborder"),
- aplayercrateborder = get("playercrateborder"),
- ran = get("arandom"),
- ran2 = get("arandom2"),
- seizure = get("seizure"),
- defaults = get("default"),
- acc = get("accordian"),
- vaakirmod = get("vaakirmode"),
- aimbot = get("aimbot");
- let loop = undefined;
- let defaultColors = ["#dfbf9f","#bec8dd","#808080"];
- let zoom = 1;
- let initAimbot = false;
- // Color picker on change
- alongCrate.onchange = function() { window.longCrate[0][1][1][3] = this.value; }
- acrate.onchange = function() { window.crate[0][1][1][3] = this.value; }
- acrateborder.onchange = function() { window.crate[0][0][1][3] = this.value; }
- alongcrateborder.onchange = function() { window.longCrate[0][0][1][3] = this.value; }
- aplayercrateborder.onchange = function() { window.userCrate[0][0][1][3] = this.value; }
- ran.onclick = function() {
- if (this.checked) {
- let c=rColor(), c2=rColor();
- window.crate[0][1][1][3]=c; acrate.value=c;
- window.longCrate[0][1][1][3]=c2;alongCrate.value=c2;
- this.checked = false;
- }
- }
- ran2.onclick = function() {
- if (this.checked) {
- let c=rColor(), c2=rColor(), c3=rColor();
- window.crate[0][0][1][3]=c;acrateborder.value=c;
- window.longCrate[0][0][1][3]=c2;alongcrateborder.value=c2;
- window.userCrate[0][0][1][3]=c3;aplayercrateborder.value=c3;
- this.checked = false;
- }
- }
- seizure.onclick = function() {
- if(!loop) {
- loop = setInterval(function(){
- let c=rColor(), c2=rColor();
- window.crate[0][1][1][3] =c;acrate.value=c;
- window.longCrate[0][1][1][3]=c2;alongCrate.value=c2;
- let e=rColor(), e2=rColor(), e3=rColor();
- window.crate[0][0][1][3]=e;acrateborder.value=e;
- window.longCrate[0][0][1][3]=e2;alongcrateborder.value=e2;
- window.userCrate[0][0][1][3]=e3;aplayercrateborder.value=e3;
- }, 100)
- }
- else { clearInterval(loop); loop=undefined; }
- }
- defaults.onclick = function() {
- if (this.checked) {
- window.crate[0][1][1][3] = defaultColors[0]; acrate.value = defaultColors[0];
- window.crate[0][0][1][3] = defaultColors[2]; acrateborder.value = defaultColors[2];
- window.longCrate[0][1][1][3] = defaultColors[1]; alongCrate.value = defaultColors[1];
- window.longCrate[0][0][1][3] = defaultColors[2]; alongcrateborder.value = defaultColors[2];
- window.userCrate[0][0][1][3] = defaultColors[2]; aplayercrateborder.value = defaultColors[2];
- this.checked = false;
- }
- }
- vaakirmod.onclick = function() {
- window.crate[0][0][1][3] = "#4dd8f0"; acrate.value = "#4dd8f0";
- window.crate[0][1][1][3] = "#b1e9f9"; acrateborder.value = "#b1e9f9";
- window.longCrate[0][0][1][3] = "#303030"; alongCrate.value = "#303030";
- window.longCrate[0][1][1][3] = "#646464"; alongcrateborder.value = "#646464";
- this.checked = false;
- }
- // Toggle functionality
- acc.onclick = function() {
- let panel = get("box2");
- if (panel.style.display == "grid") panel.style.display = "none";
- else { panel.style.display = "grid"; }
- }
- // Zoom hack on mousewheel scrolling
- window.addEventListener("wheel", function(e) {
- let dir = Math.sign(e.deltaY);
- if (dir== 1) {j7*=1.1;j8*=1.1;a1();zoom*=1.1;}
- if (dir==-1) {j7*=0.95;j8*=0.95;a1();zoom*=0.95;}
- });
- // The script just commits suicide without a timeout apparantly. Bc of (0) data
- setTimeout(function(){
- // Shows landmines
- landMine[0].forEach((a,i)=>{landMine[0][i][1][3]="#000000"});
- // Shows camos
- setInterval(()=>{Object.keys(RD.pool).forEach((a,i)=>{
- if(RD.pool[i].ghillie){RD.pool[i].ghillie=0;RD.pool[i].invincible=1}
- })},30);
- // Shows silencers
- setInterval(()=>{Object.keys(RC.pool).forEach((a,i)=>{
- if(RC.pool[i].silenced){RC.pool[i].silenced=0}
- })},30);
- }, 3000);
- // Aimbot w/tracers [I know, I know, the code could be prettified, but fuck that, lemme just publish it as it is, I have other projects calling..]
- let hw = document.getElementById("canvas");
- let can1 = document.createElement("canvas");
- can1.id = "c1"; can1.width = 1224; can1.height = 768;
- can1.style.zIndex = 1; can1.style.position = "absolute";
- document.getElementsByTagName("body")[0].appendChild(can1);
- let myctx = can1.getContext("2d");
- aimbot.onclick = function() {
- if (this.checked == false) myctx.clearRect(0, 0, can1.width, can1.height);
- }
- // Right click to switch aimbot on/off
- document.addEventListener('contextmenu', function(e) {
- if (e.which == 3) {
- if (aimbot.checked) {
- aimbot.checked=false;
- myctx.clearRect(0, 0, can1.width, can1.height);
- } else aimbot.checked = true;
- }
- });
- // Im fully aware I could optimize and shorten this down 2 times
- setInterval(function(){
- if (aimbot.checked) {
- can1.width = hw.width;
- can1.height = hw.height;
- let enemies = [];
- let me = RD.pool[c3];
- for(let player of Object.values(RD.pool)) {
- if(!player.activated) continue
- if(player.id == me.id) continue
- if(player.teamCode) if(player.teamCode == me.teamCode) continue
- if(player.hp == 0) continue
- enemies.push(player)
- }
- let diX;
- let diY;
- let num = 0;
- let dis = 10000;
- for (let i = 0;i<enemies.length;i++) {
- let ndis = Math.sqrt( (enemies[i].x-RD.pool[c3].x)**2 + (enemies[i].y-RD.pool[c3].y)**2 );
- if (ndis < dis) {
- dis = ndis;
- num = i;
- }
- }
- dis /= 35;
- let playerScreenPos = c2.getRelPos(RD.pool[c3]);
- playerScreenPos.x *= j5;
- playerScreenPos.y *= j5;
- let angle = RD.pool[c3].mouseAngle*(Math.PI / 180);
- let playerGunPos = {
- x: playerScreenPos.x+Math.cos(angle-Math.PI/18)*(80*j5),
- y: playerScreenPos.y+Math.sin(angle-Math.PI/18)*(80*j6)
- };
- if (enemies.length >= 1) {
- diX = (enemies[num].x-RD.pool[c3].x)+playerScreenPos.x;
- diY = (enemies[num].y-RD.pool[c3].y)+playerScreenPos.y;
- let newY, newX, me=RD.pool[c3];
- // Not necessary but, yk, I found it pretty usefull
- if (enemies[num].dashing == 0) {
- newX = diX+enemies[num].spdX*dis;
- newY = diY+enemies[num].spdY*dis;
- } else {
- newX = diX;
- newY = diY;
- }
- if (aimbot.checked) {a57({clientX:newX,clientY:newY});}
- }
- myctx.strokeStyle = "red";
- myctx.lineWidth = 3;
- for (let i=0;i<enemies.length;i++) {
- dis = Math.sqrt( (enemies[i].x-RD.pool[c3].x)**2 + (enemies[i].y-RD.pool[c3].y)**2 )/35;
- diX = (enemies[i].x-RD.pool[c3].x)+playerScreenPos.x+enemies[i].spdX*dis;
- diY = (enemies[i].y-RD.pool[c3].y)+playerScreenPos.y+enemies[i].spdY*dis
- myctx.moveTo(playerGunPos.x,playerGunPos.y);
- myctx.lineTo(diX,diY);
- myctx.stroke();
- }
- }
- });
- })();