Coord MZ

Allows you to get/set coordinates of your players within your tactics

  1. // ==UserScript==
  2. // @name Coord MZ
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.4
  5. // @description Allows you to get/set coordinates of your players within your tactics
  6. // @author Murder
  7. // @match https://www.managerzone.com/?p=tactics*
  8. // @icon https://image.flaticon.com/icons/png/512/147/147215.png
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. var coordsContainerAux = document.getElementById('formation-container');
  15. var input = '<input id=\"**id**\" type=\"text\" style=\"width: 20px\" value=\"**val**\">';
  16. var _x = '--';
  17. var _y = '--';
  18.  
  19. if(allowed()) {
  20. var coordsContainer = document.getElementById('formation-container');
  21. var m = "<div><span style=\"font-weight: 600\">" + allowed() + "</span></div>";
  22. wrapCoordinates();
  23. var node = createElementFromHTML(m);
  24. coordsContainer.appendChild(node);
  25. }
  26. else if(isSoccer()) {
  27. var murder = 'murder';
  28. var test = window.btoa(murder);
  29. var test2 = window.atob(test);
  30. enableActionsForAllTabs();
  31. enableActionForAltTactics();
  32. addEventsToPlayers();
  33. drawCoordinates();
  34. document.addEventListener("keydown", setKeys);
  35. document.addEventListener("click", clickEvent);
  36. }
  37.  
  38. function addEventsToPlayers() {
  39. var checkExist = setInterval(function() {
  40. if (document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable').length) {
  41. var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable');
  42. for (var i = 0; i < players.length; ++i) {
  43. players[i].addEventListener('click', setCoordsLabel, false);
  44. players[i].addEventListener('keydown', setCoordsLabel, false);
  45. }
  46. clearInterval(checkExist);
  47. }
  48. }, 1000);
  49.  
  50. }
  51.  
  52. function setCoordsLabel(player) {
  53. getOffset(player.path[1]);
  54. drawCoordinates();
  55. }
  56.  
  57. function getOffset( el ) {
  58. _y = el.offsetTop - 54;
  59. _x = el.offsetLeft;
  60. }
  61.  
  62. function drawCoordinates() {
  63. let coord = document.getElementById('divCoords');
  64. if(coord) {
  65. coord.parentElement.removeChild(coord);
  66. }
  67.  
  68. var coordsContainer = document.getElementById('formation-container');
  69. var divCoords = "<div id=\"divCoords\"><span style=\"font-weight: 600\">Player position: **coords**</span></div>";
  70. wrapCoordinates();
  71. var node = createElementFromHTML(divCoords.replace('**coords**', _x + _y));
  72. coordsContainer.appendChild(node);
  73. applyCoordinates();
  74. }
  75.  
  76. function createElementFromHTML(htmlString) {
  77. var div = document.createElement('div');
  78. div.innerHTML = htmlString.trim();
  79.  
  80. // Change this to div.childNodes to support multiple top-level nodes
  81. return div.firstChild;
  82. }
  83.  
  84. function applyCoordinates() {
  85. var inpX = document.getElementById('inputX');
  86. var inpY = document.getElementById('inputY');
  87.  
  88. inpX.addEventListener('keyup', setPlayerPosition, false);
  89. inpY.addEventListener('keyup', setPlayerPosition, false);
  90. }
  91.  
  92. function setPlayerPosition(input) {
  93. var c = input.currentTarget.id === 'inputX' ? 'x' : 'y';
  94. let selectedInput = c === 'x' ? document.getElementById('inputX') : document.getElementById('inputY');
  95. //get selected player
  96. var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected');
  97. var playerCollision = document.getElementsByClassName('fieldpos ui-selected fieldpos-collision');
  98. if(players.length) {
  99. let xVal = c === 'x' ? input.currentTarget.value : document.getElementById('inputX').value;
  100. let yVal = c === 'y' ? input.currentTarget.value : document.getElementById('inputY').value;
  101.  
  102. if(isInRange(c == 'x' ? xVal : yVal, c)) {
  103. removeBorder(selectedInput);
  104. players[0].style.left = xVal + "px";
  105. players[0].style.top = (parseInt(yVal) + 54) + "px";
  106. }
  107. else {
  108. addBorder(selectedInput);
  109. }
  110. }
  111. else if(playerCollision.length) {
  112. let xVal = c === 'x' ? input.currentTarget.value : document.getElementById('inputX').value;
  113. let yVal = c === 'y' ? input.currentTarget.value : document.getElementById('inputY').value;
  114.  
  115. if(isInRange(c == 'x' ? xVal : yVal, c)) {
  116. removeBorder(selectedInput);
  117. playerCollision[0].style.left = xVal + "px";
  118. playerCollision[0].style.top = (parseInt(yVal) + 54) + "px";
  119. }
  120. else {
  121. addBorder(selectedInput);
  122. }
  123. }
  124. }
  125.  
  126. function wrapCoordinates() {
  127. var inpX = input.replace('**id**','inputX').replace('**val**', _x);
  128. var inpY = input.replace('**id**','inputY').replace('**val**', _y);
  129. _x = '<span style=\"color: green\"> X: </span>' + inpX;
  130. _y = '<span style=\"color: blue\"> Y: </span>' + inpY;
  131. }
  132.  
  133. function isInRange(number, coordinate) {
  134. if(!isNaN(number)) {
  135. var integer = parseInt(number);
  136. if(coordinate == 'x') {
  137. return integer <= 193 && integer >= 0;
  138. }
  139. else if(coordinate == 'y') {
  140. return integer <= 258 && integer >= 0;
  141. }
  142. else {
  143. return false;
  144. }
  145. }
  146. else {
  147. return false;
  148. }
  149. }
  150.  
  151. function setKeys(key) {
  152. if((key.keyCode === 37 || key.keyCode === 38 || key.keyCode === 39 || key.keyCode === 40)
  153. && (key.currentTarget.activeElement.localName != 'input')) {
  154.  
  155. var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected');
  156. var playerCollision = document.getElementsByClassName('fieldpos ui-selected fieldpos-collision');
  157. //player selected with or without collision
  158. if(players.length) {
  159. _y = players[0].offsetTop - 54;
  160. _x = players[0].offsetLeft;
  161. }
  162. else if (playerCollision.length) {
  163. _y = playerCollision[0].offsetTop - 54;
  164. _x = playerCollision[0].offsetLeft;
  165. }
  166. else {
  167. _y = '--';
  168. _x = '--';
  169. }
  170.  
  171. drawCoordinates();
  172. }
  173. }
  174.  
  175. function clickEvent(ev) {
  176. if(ev.currentTarget.activeElement.localName === 'select') {
  177. return false;
  178. }
  179. var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected');
  180. var playerCollision = document.getElementsByClassName('fieldpos ui-selected fieldpos-collision');
  181. if(!players.length && !playerCollision.length) {
  182. _y = '--';
  183. _x = '--';
  184. drawCoordinates();
  185. }
  186. }
  187.  
  188. function enableActionsForAllTabs() {
  189. var tabs = document.getElementsByClassName('ui-state-default ui-corner-top');
  190. let ttta = document.getElementById('ttta');
  191. let tttb = document.getElementById('tttb');
  192. ttta.addEventListener('click',restart);
  193. tttb.addEventListener('click',restart);
  194.  
  195. for (var i = 0; i < tabs.length; ++i) {
  196. tabs[i].addEventListener("click", function() {
  197. addEventsToPlayers();
  198. enableActionForAltTactics();
  199. });
  200. }
  201. }
  202.  
  203. function enableActionForAltTactics() {
  204. var altTactics = document.getElementById('formation_select');
  205. altTactics.addEventListener('change',tacticChange);
  206. }
  207.  
  208. function tacticChange() {
  209. let resetBtn = document.getElementById('reset_formation');
  210. let copyBtn = document.getElementById('replace_starting_formation');
  211.  
  212. resetBtn.addEventListener('click',restart);
  213. copyBtn.addEventListener('click',restart);
  214.  
  215. restart();
  216. }
  217.  
  218. function restart() {
  219. _y = '--';
  220. _x = '--';
  221. addEventsToPlayers();
  222. drawCoordinates();
  223. }
  224.  
  225. function addBorder(input) {
  226. input.style.border = 'solid 4px red';
  227. }
  228. function allowed(){let G=!1,b=[{u:"ZGllZ29jYXBhbm8=",m:"VXN0ZWQgbm8gdGllbmUgcGVybWl0aWRvIHVzYXIgbGEgaGVycmFtaWVudGEgZGFkbyBxdWUgcG9zZWUgbeFzIGRlIHVuYSBjdWVudGEu"},{u:"bWF4d2VsbHNtYXJ0ODE=",m:"RWwgc2lzdGVtYSBoYSBkZXRlY3RhZG8gcXVlIHVzdGVkIGVzIGRlbWFzaWFkbyB0cmFtcG9zbyBwYXJhIHVzYXIgZXN0YSBoZXJyYW1pZW50YS4="},{u:"bHVra2s0MQ==",m:"VXN0ZWQgZXMgdW4gdHJhbXBvc28geSBubyB0aWVuZSBwZXJtaXRpZG8gdXNhciBsYSBoZXJyYW1pZW50YS4="},{u:"ZGFya2xpbmU=",m:"RWwgc2lzdGVtYSBoYSBkZXRlY3RhZG8gcXVlIHVzdGVkIGVzIHVuIHBlbG90dWRvIHkgbm8gdGllbmUgcGVybWl0aWRvIHVzYXIgbGEgaGVycmFtaWVudGEu"},{u:"a2luZXNpbzEw",m:"TG9zIHBlbG90dWRvcyBjb21vIHZvcyBubyB0aWVuZW4gcGVybWl0aWRvIHVzYXIgbGEgaGVycmFtaWVudGEgcG9yIGhhYmVyIGFycnVpbmFkbyBlbCBmb3JvLg=="},{u:"bXVyZGVy",m:"TG9zIHBlbG90dWRvcyBjb21vIHZvcyBubyB0aWVuZW4gcGVybWl0aWRvIHVzYXIgbGEgaGVycmFtaWVudGEgcG9yIGhhYmVyIGFycnVpbmFkbyBlbCBmb3JvLg=="}],V=document.getElementById("header-username").textContent;for(var g=0;g<b.length;++g)window.atob(b[g].u)===V&&(G=window.atob(b[g].m));return G}
  229. function removeBorder(input) {
  230. input.style.border = null;
  231. }
  232.  
  233. function isSoccer() {
  234. let response = false;
  235. let sport = document.getElementById('tactics_box');
  236. for(var i = 0; i < sport.classList.length; ++i) {
  237. if(sport.classList[i] == 'soccer') {
  238. response = true;
  239. }
  240. }
  241. return response;
  242. }
  243.  
  244. })();