Paper.IO Enhanced

Zoom cheat, game speed change cheat

目前为 2023-01-10 提交的版本。查看 最新版本

// ==UserScript==
// @name Paper.IO Enhanced
// @namespace -
// @version 1.0.1
// @description Zoom cheat, game speed change cheat
// @author NotYou
// @match *://paper-io.com/*
// @match *://www.paper-io.com/*
// @run-at document-start
// @license GPL-3.0-or-later
// @grant none
// @icon data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe8MAYnvDAHp7wwB6e8MAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHvDAMp7wwD/e8MA/3vDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7wwDKe8MA/3vDAP97wwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfcQAyn3EAP99xAD/fcQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIHGAMqBxgD/gcYA/4HGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHyQDKh8kA/4fJAP+HyQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjcwAyo3MAP+NzAD/jcwAsI7MAJSOzACUhrgAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJPPAMqTzwD/k88A/5PPAP+TzwD/k88A/4q5DfqKtxdaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACb0wDKm9MA/5vTAP+b0wD/m9MA/5vTAP+Rvif/kLss+pG8MVoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAodYDyqHWA/+h1gP/oNYBhp/VAFyf1QBcnc4X7J3OGP+ezhf6oNMOIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKnaKMqp2ij/qdoo/6naKEAAAAAAAAAAAKnaKOKp2ij/qdoo/6naKCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv3UHKr91B/6/dQf+v3UFAAAAAAAAAAACv3UHir91B/6/dQf+v3UEqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9VclK/UX/+v1F//tN1WwrXgVK614FSur9Ve9q/UX/+v1F7gsdpUEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/QbASx0XCisdFx/7nfY/+64mD/uuJg/7LTb/+x0XDgsNBtIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtdN3ArbUeqK+4W//v+Rt/7/kbf+31nngtdN4IgAAAAAAAAAAAAAAALXTdwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC614AEweR2QMLmdELC5nRCvNt8GgAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAPH/AADx/wAA8f8AAPH/AADx/wAA8D8AAPAfAADwDwAA8McAAPHHAADxxwAA8AcAAPgPAAD8HwAA//8AAA==
// ==/UserScript==

(function() {
    let minimalZoom = 0.5
    let maximalZoom = 3.5

    let minimalGameSpeed = 10
    let maximalGameSpeed = 200

    // Do NOT edit code below

    let css = `
    #get_random_name {
      width: 60px;
      height: 60px;
      left: -70px;
      background: rgb(255, 255, 255);
      position: absolute;
      box-shadow: rgb(151, 151, 151) 0 6px 0;
      background-image: url(https://cdn-icons-png.flaticon.com/512/1714/1714041.png);
      background-size: 70% 70%;
      background-repeat: no-repeat;
      background-position: 50% 50%;
      filter: grayscale(1);
    }

    #get_random_name:active {
      box-shadow: none;
      top: 6px;
    }`

    class CookieControl {
        getEntries() {
            return document.cookie.replace(/\s/g, '').split(';').map(e => e.split('='))
        }

        set(name, value) {
            document.cookie = encodeURIComponent(name.trim()) + '=' + encodeURIComponent(value.trim())
        }

        get(name) {
            let entries = this.getEntries()

            return entries.find(e => e[0] === name)[1]
        }
    }

    let cookies = CookieControl.prototype

    waitForProperty(window, 'paper2').then(() => {
        let paper = window.paper2

        waitForProperty(paper, 'game').then(() => {
            let config = paper.game.config
            let scene = paper.configs.paper2_classic
            let game = paper.game

            // Get Random Name

            let username = document.querySelector('.username')

            username.insertAdjacentHTML('beforebegin', '<div id="get_random_name"></div>')

            document.querySelector('#get_random_name').addEventListener('click', () => {
                let name = getRandomName()

                username.querySelector('input').value = name
                cookies.set('paperio_username', name)
            })

            window.addEventListener('wheel', e => {
                let isPositive = e.deltaY > 0

                if(e.ctrlKey) {
                    e.preventDefault()

                    // Game Speed Cheat

                    config.unitSpeed += isPositive ? -2.5 : 2.5

                    let current = config.unitSpeed

                    config.unitSpeed = correctValue(current, minimalGameSpeed, maximalGameSpeed)
                } else {

                    // Zoom Cheat

                    scene.maxScale += isPositive ? -0.5 : 0.5

                    let current = scene.maxScale

                    scene.maxScale = correctValue(current, minimalZoom, maximalZoom)
                }
            })

            // Movement Cheat

            let listenersData = ['w', 'a', 's', 'd']

            listenersData.forEach((e, i) => {
                addKeyListener(e, i > 1 ? false : true, i % 2 === 0 ? 'y' : 'x')
            })

            // Nerd Stuff

            let styleNode = document.createElement('style')
            styleNode.appendChild(document.createTextNode(css))
            document.head.appendChild(styleNode)

            function addKeyListener(key, isNegative, coordinate) {
                let code = 'Key' + key.toUpperCase()
                let randomValue = Math.floor(Math.random() * 18)

                window.addEventListener('keydown', e => {
                    if(e.code === code) {
                        let player = game.player

                        if(player) {
                            player.position[coordinate] += randomValue * (isNegative ? -1 : 1)
                        }
                    }
                })
            }

            function getRandomName() {
                let namesPool = game.nameManager.pool

                return namesPool[Math.floor(Math.random() * namesPool.length)]
            }

            function correctValue(currentValue, minimalValue, maximalValue) {
                return Math.max(minimalValue, Math.min(maximalValue, currentValue))
            }
        })
    })

    function waitForProperty(target, prop) {
        return new Promise(res => {
            let interval = setInterval(() => {
                if(target[prop]) {
                    clearInterval(interval)
                    return res(target[prop])
                }
            }, 1e3)
        })
    }
})()