Перед установкой, Greasy Fork хочет предупредить вас о наличии в скрипте нежелательной функциональности — то есть функциональности, которая полезна автору скрипта, а не вам.
Этот скрипт вставляет рекламу на посещаемые вами сайты.
Get all skins and ability to zoom in paper.io
// ==UserScript== // @name Paper.IO Skins & Zoom Hack // @namespace http://tampermonkey.net/ // @version 0.2 // @description Get all skins and ability to zoom in paper.io // @author Zertalious (Zert) // @match *://paper-io.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=paper.io // @grant none // @antifeature ads // @run-at document-start // ==/UserScript== Object.defineProperty( window, 'shop', { get() { return this._shop; }, set( shop ) { console.log( 'SHOP!!', shop ); Object.defineProperty( shop, 'btnsData', { set( btnsData ) { for ( let i = 0; i < btnsData.length; i ++ ) { Object.defineProperty( btnsData[ i ], 'status', { get() { if ( this._status === 'locked' ) { return 'open'; } return this._status; }, set( value ) { this._status = value; } } ); } console.log( 'btnsData!!!', btnsData ); this._btnsData = btnsData; }, get() { return this._btnsData; } } ) this._shop = shop; } } ); Object.defineProperty( window, 'checkShouldUnlockSkin', { get() { return function () { return true; } } } ); let scale = 1; window.addEventListener( 'DOMContentLoaded', function () { const value = parseInt( new URLSearchParams( window.location.search ).get( 'showAd' ), 16 ); const shouldShowAd = isNaN( value ) || Date.now() - value < 0 || Date.now() - value > 10 * 60 * 1000; const el = document.createElement( 'div' ); el.innerHTML = `<style> .dialog { position: absolute; left: 50%; top: 50%; padding: 20px; background: rgba(0, 0, 0, 0.8); border: 6px solid rgba(0, 0, 0, 0.2); color: #fff; transform: translate(-50%, -50%); text-align: center; z-index: 999999; } .dialog * { color: #fff; } .dialog-close { position: absolute; right: 5px; top: 5px; width: 20px; height: 20px; opacity: 0.5; cursor: pointer; } .dialog-close:before, .dialog-close:after { content: ' '; position: absolute; left: 50%; top: 50%; width: 100%; height: 20%; transform: translate(-50%, -50%) rotate(-45deg); background: #fff; } .dialog-close:after { transform: translate(-50%, -50%) rotate(45deg); } .dialog-close:hover { opacity: 1; } .btn { cursor: pointer; padding: 0.4em; background: red; border-bottom: 5px solid rgba(0, 0, 0, 0.2); } .btn:active { transform: scale(0.8); } </style> <div class="dialog">${shouldShowAd ? `<big>Loading ad...</big>` : `<div class="dialog-close" onclick="this.parentNode.style.display='none';"></div> <big>Skins & Zoom Cheat</big> <br> Use the shop to equip any skin you like. <br> Scroll to zoom. <br> <br> By Zertalious <br> <br> <div style="display: grid; grid-template-columns: 1fr 1fr; grid-gap: 5px;"> <div class="btn" onclick="window.open('https://discord.gg/K24Zxy88VM', '_blank')">Discord</div> <div class="btn" onclick="window.open('https://www.instagram.com/zertalious/', '_blank')">Instagram</div> <div class="btn" onclick="window.open('https://twitter.com/Zertalious', '_blank')">Twitter</div> <div class="btn" onclick="window.open('https://greasyfork.org/en/users/662330-zertalious', '_blank')">More scripts</div> </div> ` } </div>`; while ( el.children.length > 0 ) { document.body.appendChild( el.children[ 0 ] ); } if ( shouldShowAd ) { const url = new URL( window.location.href ); url.searchParams.set( 'showAd', Date.now().toString( 16 ) ); url.searchParams.set( 'scriptVersion', GM.info.script.version ); window.location.href = 'https://zertalious.xyz?ref=' + new TextEncoder().encode( url.href ).toString(); } const zoomEl = document.getElementById( 'the_game' ); zoomEl.style.transformOrigin = '0 0'; document.addEventListener( 'wheel', function ( event ) { scale *= event.deltaY > 0 ? 0.9 : 1.1; zoomEl.style.transform = 'scale(' + scale + ')'; zoomEl.style.width = window.innerWidth / scale + 'px'; zoomEl.style.height = window.innerHeight / scale + 'px'; } ); } ); CanvasRenderingContext2D.prototype.clearRect = new Proxy( CanvasRenderingContext2D.prototype.clearRect, { apply( target, thisArgs, args ) { Reflect.apply( ...arguments ); if ( args[ 2 ] === window.innerWidth && args[ 3 ] === window.innerHeight ) { thisArgs.restore(); thisArgs.save(); const f = ( 0.5 - scale * 0.5 ); thisArgs.translate( window.innerWidth * f, window.innerHeight * f ); thisArgs.scale( scale, scale ); } } } );