Before you install, Greasy Fork would like you to know that this script contains antifeatures, which are things there for the script author's benefit, rather than yours.
Acest script va injecta reclame pe site-urile care le vizitezi.
Greasy Fork is available in English.
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 ); } } } );