Powerline.io Axis Shifter
当前为
// ==UserScript==
// @name Powerline Axis Shifter
// @author Rumini - Discord: rumini
// @description Powerline.io Axis Shifter
// @version 1.3
// @match *://powerline.io/*
// @icon https://i.imgur.com/bfcFQF7.png
// @grant unsafeWindow
// @license MIT
// @run-at document-start
// @namespace https://greasyfork.org/users/1356205
// ==/UserScript==
if (window.location.href === 'https://powerline.io/') {
window.location.href = 'https://powerline.io/maindev.html';
}
(function () {
'use strict';
const DIRECTION_UP = 1;
const DIRECTION_LEFT = 2;
const DIRECTION_DOWN = 3;
const DIRECTION_RIGHT = 4;
function waitForGame(callback) {
if (typeof Snake !== 'undefined' && typeof localPlayer !== 'undefined' && typeof input !== 'undefined') {
callback();
} else {
setTimeout(() => waitForGame(callback), 100);
}
}
function teleportTurn(direction, x, y, fakelag1, fakelag2) {
if (antiLagEnabled) {
if (0) {
localPlayer.setTurnPoint(direction, x, y);
} else {
var timeNow = +new Date();
var deltaTime = timeNow - lastTurnTime;
lastTurnTime = timeNow;
if (deltaTime < 30) {
fakelag1 += 30;
}
var selectedPoint = localPlayer.addTurnPoint(direction, fakelag1);
}
if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
x = -x;
else
y = -y;
localPlayer.x = x / GAME_SCALE;
localPlayer.y = -y / GAME_SCALE;
localPlayer.headPos.x = x / GAME_SCALE;
localPlayer.headPos.y = -y / GAME_SCALE;
var coord;
if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
coord = x / GAME_SCALE;
else
coord = -y / GAME_SCALE;
network.sendTurnPoint(direction, coord);
} else {
network.sendDirection(direction);
}
}
function syncTurn(direction, x, y, fakelag1, fakelag2) {
if (antiLagEnabled) {
if (0) {
localPlayer.setTurnPoint(direction, x, y);
} else {
var timeNow = +new Date();
var deltaTime = timeNow - lastTurnTime;
lastTurnTime = timeNow;
if (deltaTime < 30) {
fakelag1 += 30;
}
var selectedPoint = localPlayer.addTurnPoint(direction, fakelag1);
x = selectedPoint.x * GAME_SCALE;
y = selectedPoint.y * GAME_SCALE;
}
var coord;
if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
coord = x / GAME_SCALE;
else
coord = -y / GAME_SCALE;
network.sendTurnPoint(direction, coord);
} else {
network.sendDirection(direction);
}
}
function sendSyncTurn(snake) {
if (localPlayer) {
var x = snake.headPos.x;
var y = snake.headPos.y;
var fakelag1 = globalWebLag;
var fakelag2 = 0;
switch (input.direction) {
case DIRECTION_UP:
case DIRECTION_DOWN:
input.direction = x >= 0 ? DIRECTION_RIGHT : DIRECTION_LEFT;
break;
case DIRECTION_LEFT:
case DIRECTION_RIGHT:
input.direction = y >= 0 ? DIRECTION_DOWN : DIRECTION_UP;
break;
}
syncTurn(input.direction, x, y, fakelag1, fakelag2);
}
}
function sendTeleportTurn(snake) {
if (localPlayer) {
var x = snake.headPos.x;
var y = snake.headPos.y;
var fakelag1 = globalWebLag;
var fakelag2 = 0;
input.direction = snake.direction;
teleportTurn(input.direction, x, y, fakelag1, fakelag2);
}
}
function teleport() {
const snake = localPlayer;
if (!snake) return;
const actions = [
{ func: sendSyncTurn, delay: 0 },
{ func: sendTeleportTurn, delay: 10 },
];
let cumulativeDelay = 0;
actions.forEach(action => {
cumulativeDelay += action.delay;
setTimeout(() => {
action.func(snake);
}, cumulativeDelay);
});
}
waitForGame(() => {
document.addEventListener('keydown', e => {
if (e.key === 'j') {
teleport();
hud.showTip("Teleported!", 1000);
}
});
});
})();