Powerline Axis Shifter

Powerline.io Axis Shifter

  1. // ==UserScript==
  2. // @name Powerline Axis Shifter
  3. // @author Rumini - Discord: rumini & ibo_kys
  4. // @description Powerline.io Axis Shifter
  5. // @version 1.3
  6. // @match *://powerline.io/*
  7. // @icon https://i.imgur.com/bfcFQF7.png
  8. // @grant unsafeWindow
  9. // @license MIT
  10. // @run-at document-start
  11. // @namespace https://greasyfork.org/users/1356205
  12. // ==/UserScript==
  13.  
  14. if (window.location.href === 'https://powerline.io/') {
  15. window.location.href = 'https://powerline.io/maindev.html';
  16. }
  17.  
  18. (function () {
  19. 'use strict';
  20.  
  21. const DIRECTION_UP = 1;
  22. const DIRECTION_LEFT = 2;
  23. const DIRECTION_DOWN = 3;
  24. const DIRECTION_RIGHT = 4;
  25.  
  26. function waitForGame(callback) {
  27. if (typeof Snake !== 'undefined' && typeof localPlayer !== 'undefined' && typeof input !== 'undefined') {
  28. callback();
  29. } else {
  30. setTimeout(() => waitForGame(callback), 100);
  31. }
  32. }
  33.  
  34. function teleportTurn(direction, x, y, fakelag1, fakelag2) {
  35. if (antiLagEnabled) {
  36. if (0) {
  37. localPlayer.setTurnPoint(direction, x, y);
  38. } else {
  39. var timeNow = +new Date();
  40. var deltaTime = timeNow - lastTurnTime;
  41. lastTurnTime = timeNow;
  42. if (deltaTime < 30) {
  43. fakelag1 += 30;
  44. }
  45. var selectedPoint = localPlayer.addTurnPoint(direction, fakelag1);
  46. }
  47.  
  48. if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
  49. x = -x;
  50. else
  51. y = -y;
  52.  
  53. localPlayer.x = x / GAME_SCALE;
  54. localPlayer.y = -y / GAME_SCALE;
  55.  
  56. localPlayer.headPos.x = x / GAME_SCALE;
  57. localPlayer.headPos.y = -y / GAME_SCALE;
  58.  
  59. var coord;
  60. if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
  61. coord = x / GAME_SCALE;
  62. else
  63. coord = -y / GAME_SCALE;
  64.  
  65. network.sendTurnPoint(direction, coord);
  66. } else {
  67. network.sendDirection(direction);
  68. }
  69. }
  70.  
  71. function syncTurn(direction, x, y, fakelag1, fakelag2) {
  72. if (antiLagEnabled) {
  73. if (0) {
  74. localPlayer.setTurnPoint(direction, x, y);
  75. } else {
  76. var timeNow = +new Date();
  77. var deltaTime = timeNow - lastTurnTime;
  78. lastTurnTime = timeNow;
  79. if (deltaTime < 30) {
  80. fakelag1 += 30;
  81. }
  82.  
  83. var selectedPoint = localPlayer.addTurnPoint(direction, fakelag1);
  84. x = selectedPoint.x * GAME_SCALE;
  85. y = selectedPoint.y * GAME_SCALE;
  86. }
  87.  
  88. var coord;
  89. if (direction == DIRECTION_UP || direction == DIRECTION_DOWN)
  90. coord = x / GAME_SCALE;
  91. else
  92. coord = -y / GAME_SCALE;
  93.  
  94. network.sendTurnPoint(direction, coord);
  95. } else {
  96. network.sendDirection(direction);
  97. }
  98. }
  99.  
  100. function sendSyncTurn(snake) {
  101. if (localPlayer) {
  102. var x = snake.headPos.x;
  103. var y = snake.headPos.y;
  104. var fakelag1 = globalWebLag;
  105. var fakelag2 = 0;
  106.  
  107. switch (input.direction) {
  108. case DIRECTION_UP:
  109. case DIRECTION_DOWN:
  110. input.direction = x >= 0 ? DIRECTION_RIGHT : DIRECTION_LEFT;
  111. break;
  112. case DIRECTION_LEFT:
  113. case DIRECTION_RIGHT:
  114. input.direction = y >= 0 ? DIRECTION_DOWN : DIRECTION_UP;
  115. break;
  116. }
  117.  
  118. syncTurn(input.direction, x, y, fakelag1, fakelag2);
  119. }
  120. }
  121.  
  122. function sendTeleportTurn(snake) {
  123. if (localPlayer) {
  124. var x = snake.headPos.x;
  125. var y = snake.headPos.y;
  126. var fakelag1 = globalWebLag;
  127. var fakelag2 = 0;
  128.  
  129. input.direction = snake.direction;
  130.  
  131. teleportTurn(input.direction, x, y, fakelag1, fakelag2);
  132. }
  133. }
  134.  
  135. function teleport() {
  136. const snake = localPlayer;
  137. if (!snake) return;
  138.  
  139. const actions = [
  140. { func: sendSyncTurn, delay: 0 },
  141. { func: sendTeleportTurn, delay: 10 },
  142. ];
  143.  
  144. let cumulativeDelay = 0;
  145.  
  146. actions.forEach(action => {
  147. cumulativeDelay += action.delay;
  148. setTimeout(() => {
  149. action.func(snake);
  150. }, cumulativeDelay);
  151. });
  152. }
  153.  
  154. waitForGame(() => {
  155. document.addEventListener('keydown', e => {
  156. if (e.key === 'j') {
  157. teleport();
  158. hud.showTip("Teleported!", 1000);
  159. }
  160. });
  161. });
  162. })();