您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A simple bot that farms gold in digdig.io
当前为
- // ==UserScript==
- // @name DigDig.IO Gold Bot
- // @namespace https://tampermonkey.net/
- // @version 0.0.6
- // @description A simple bot that farms gold in digdig.io
- // @author Zertalious (Zert)
- // @match *://digdig.io/*
- // @icon https://www.google.com/s2/favicons?domain=digdig.io
- // @grant none
- // @run-at document-end
- // ==/UserScript==
- const chunkSize = 32;
- const goldPositions = [];
- let isDead = false;
- let isRunning = false;
- let health = 0;
- let border = null;
- const chunks = [];
- let serverIndex = 0;
- const servers = [];
- const modes = [ 'ffa', 'teams', 'maze' ];
- let angle = Math.random() * Math.PI * 2;
- init();
- async function init() {
- for ( let i = 0; i < modes.length; i ++ ) {
- const response = await fetch( 'https://api.n.m28.io/endpoint/digdig-' + modes[ i ] + '/findEach' );
- const json = await response.json();
- for ( let key in json.servers ) {
- servers.push( json.servers[ key ].id );
- }
- }
- isRunning = true;
- window.addEventListener( 'keyup', function ( event ) {
- if ( String.fromCharCode( event.keyCode ) === 'B' ) {
- isRunning = ! isRunning;
- setTimeout( function () {
- setAttack( isRunning );
- }, 0 );
- }
- } );
- }
- window.requestAnimationFrame = new Proxy( window.requestAnimationFrame, {
- apply( target, thisArgs, args ) {
- if ( isRunning === true ) {
- args[ 0 ] = new Proxy( args[ 0 ], {
- apply( target, thisArgs, args ) {
- isDead = false;
- healthX.length = 0;
- health = 0;
- border = null;
- goldPositions.length = 0;
- Reflect.apply( ...arguments );
- if ( isDead === true || health <= 0 ) {
- pressEnter();
- return;
- }
- setAttack( true );
- if ( goldPositions.length > 0 ) {
- let target;
- if ( border !== null ) {
- const [ bx, by, br ] = border;
- for ( let i = 0; i < goldPositions.length; i ++ ) {
- const [ x, y ] = goldPositions[ i ];
- if ( Math.hypot( x - bx, y - by ) < br ) {
- mouseMove( x, y );
- break;
- }
- }
- } else {
- mouseMove(
- goldPositions[ 0 ][ 0 ],
- goldPositions[ 0 ][ 1 ]
- );
- }
- return;
- }
- mouseMove(
- ( Math.cos( angle ) * 0.5 + 0.5 ) * window.innerWidth,
- ( Math.sin( angle ) * 0.5 + 0.5 ) * window.innerHeight
- );
- if ( health <= 0.05 ) {
- angle = Math.random() * Math.PI * 2;
- serverIndex = ( serverIndex + 1 ) % servers.length;
- cp6.forceServerID( servers[ serverIndex ] );
- while ( chunks.length > 0 ) {
- chunks.shift().golds.length = 0;
- }
- }
- }
- } );
- }
- return Reflect.apply( ...arguments );
- }
- } );
- const Context = CanvasRenderingContext2D.prototype;
- Context.arc = new Proxy( Context.arc, {
- apply( target, thisArgs, [ x, y, r ] ) {
- if ( thisArgs.fillStyle === '#222222' && x !== 0 && y !== 0 ) {
- border = [ x, y, r ];
- }
- return Reflect.apply( ...arguments );
- }
- } );
- Context.drawImage = new Proxy( Context.drawImage, {
- apply( target, thisArgs, [ { golds } ] ) {
- if ( golds !== undefined ) {
- const { a, d, e, f } = thisArgs.getTransform();
- for ( let i = 0; i < golds.length; i ++ ) {
- const [ m, n ] = golds[ i ];
- goldPositions.push( [
- m / 32 * a + e,
- n / 32 * d + f
- ] );
- }
- }
- return Reflect.apply( ...arguments );
- }
- } );
- const healthX = [];
- const params = {
- apply( target, thisArgs, [ x ] ) {
- healthX[ target.name === 'moveTo' ? 0 : 1 ] = x;
- return Reflect.apply( ...arguments );
- }
- };
- Context.moveTo = new Proxy( Context.moveTo, params );
- Context.lineTo = new Proxy( Context.lineTo, params );
- Context.stroke = new Proxy( Context.stroke, {
- apply( target, thisArgs, args ) {
- if ( thisArgs.strokeStyle === '#75dd34' ) {
- health = ( healthX[ 0 ] - healthX[ 1 ] ) / ( 2 * healthX[ 0 ] );
- }
- return Reflect.apply( ...arguments );
- }
- } );
- const OffscreenContext = typeof OffscreenCanvasRenderingContext2D !== 'undefined' ?
- OffscreenCanvasRenderingContext2D.prototype : Context;
- OffscreenContext.fillRect = new Proxy( OffscreenContext.fillRect, {
- apply( target, thisArgs, args ) {
- if ( thisArgs.fillStyle === '#000000' ) {
- isDead = true;
- }
- return Reflect.apply( ...arguments );
- }
- } );
- OffscreenContext.putImageData = new Proxy( OffscreenContext.putImageData, {
- apply( target, thisArgs, [ { data } ] ) {
- if ( thisArgs.canvas.width === chunkSize && thisArgs.canvas.height === chunkSize ) {
- thisArgs.canvas.golds = [];
- for ( let i = 0; i < data.length; i += 4 ) {
- if ( isGoldColor( data[ i ], data[ i + 1 ], data[ i + 2 ] ) ) {
- const index = i / 4;
- thisArgs.canvas.golds.push( [
- index % chunkSize,
- Math.floor( index / chunkSize )
- ] );
- }
- }
- chunks.push( thisArgs.canvas );
- }
- return Reflect.apply( ...arguments );
- }
- } );
- OffscreenContext.fillRect = new Proxy( OffscreenContext.fillRect, {
- apply( target, thisArgs, [ x, y, width, height ] ) {
- if ( thisArgs.canvas.width === chunkSize && thisArgs.canvas.height === chunkSize ) {
- if ( thisArgs.canvas.golds === undefined ) {
- thisArgs.canvas.golds = [];
- }
- if ( isGoldColor( thisArgs.fillStyle ) ) {
- thisArgs.canvas.golds.push( [ x, y ] );
- }
- }
- return Reflect.apply( ...arguments );
- }
- } );
- OffscreenContext.clearRect = new Proxy( OffscreenContext.clearRect, {
- apply( target, thisArgs, [ x, y, width, height ] ) {
- if ( thisArgs.canvas.golds !== undefined ) {
- if ( width === 32 && height === 32 ) {
- thisArgs.canvas.golds.length = 0;
- } else {
- for ( let i = 0; i < thisArgs.canvas.golds.length; i ++ ) {
- const [ m, n ] = thisArgs.canvas.golds[ i ];
- if ( m === x && n === y ) {
- thisArgs.canvas.golds.splice( i, 1 );
- break;
- }
- }
- }
- }
- return Reflect.apply( ...arguments );
- }
- } );
- function isGoldColor( r, g, b ) {
- if ( arguments.length === 1 ) {
- g = parseInt( r.substring( 3, 5 ), 16 );
- b = parseInt( r.substring( 5, 7 ), 16 );
- r = parseInt( r.substring( 1, 3 ), 16 );
- }
- return Math.hypot( 0xa5 - r, 0x9e - g, 0x15 - b ) < 25;
- }
- function pressEnter() {
- keyEvent( 'keydown', 13 );
- keyEvent( 'keyup', 13 );
- }
- function setAttack( bool ) {
- keyEvent( bool !== false ? 'keydown' : 'keyup', 32 );
- }
- function setHeal( bool ) {
- keyEvent( bool !== false ? 'keydown' : 'keyup', 16 );
- }
- function keyEvent( type, keyCode ) {
- window.dispatchEvent( new KeyboardEvent( type, { keyCode } ) );
- }
- function mouseMove( clientX, clientY ) {
- window.Module.canvas.dispatchEvent(
- new MouseEvent( 'mousemove', {
- clientX,
- clientY
- } )
- );
- }