Player Paths On Replay

Show Player paths on GLB replays.

目前为 2014-05-21 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Player Paths On Replay
  3. // @namespace pbr/ppor
  4. // @include http://*goallineblitz.com/game/replay.pl?game_id=*&pbp_id=*
  5. // @include http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=*
  6. // @copyright 2009, pabst
  7. // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
  8. // @version 14.01.30
  9. // @require http://userscripts.org/scripts/source/54630.user.js
  10. // @description Show Player paths on GLB replays.
  11. // ==/UserScript==
  12.  
  13. /*
  14. *
  15. * based on code by Cabrasher
  16. * pabst did this 08/06/26+
  17. *
  18. *
  19. */
  20.  
  21. var scriptName = "Player Paths";
  22. var scriptVersion = "14.01.30";
  23. var scriptWebpage = "http://userscripts.org/scripts/show/54519";
  24.  
  25. var tracedPlayers = new Array();
  26. var step = 2;
  27.  
  28. window.setTimeout( function() {
  29. init();
  30. }, 100);
  31.  
  32. function activate(e) {
  33. console.log("activate player tracing");
  34. lock();
  35.  
  36. tracemain();
  37.  
  38. unlock();
  39. }
  40.  
  41. function tracemain() {
  42. var icons = document.getElementsByClassName("o_icon");
  43. for (var i=0; i<icons.length; i++) {
  44. icons[i].firstChild.removeAttribute("onclick");
  45. icons[i].firstChild.removeAttribute("onmouseover");
  46. icons[i].firstChild.removeAttribute("onmouseout");
  47. }
  48. icons = document.getElementsByClassName("d_icon");
  49. for (var i=0; i<icons.length; i++) {
  50. icons[i].firstChild.removeAttribute("onclick");
  51. icons[i].firstChild.removeAttribute("onmouseover");
  52. icons[i].firstChild.removeAttribute("onmouseout");
  53. }
  54.  
  55. var paths = document.getElementsByClassName("player_path");
  56. while (paths.length > 0) {
  57. paths[0].parentNode.removeChild(paths[0]);
  58. paths = document.getElementsByClassName("player_path");
  59. }
  60. var o = document.getElementsByClassName("o_icon");
  61. for (var i=0; i<o.length; i++) {
  62. o[i].addEventListener("click",function (e) { playerClicked(e); }, false);
  63. }
  64. var o = document.getElementsByClassName("d_icon");
  65. for (var i=0; i<o.length; i++) {
  66. o[i].addEventListener("click",function (e) { playerClicked(e); }, false);
  67. }
  68.  
  69. for (var i=0; i<tracedPlayers.length; i++) {
  70. //console.log(i+" : "+tracedPlayers[i]);
  71. var target = document.getElementById("pos_dot_"+tracedPlayers[i]);
  72. if (target != null) {
  73. var btn = new Object();
  74. btn.target = target.firstChild;
  75. playerClicked(btn);
  76. }
  77. }
  78. }
  79.  
  80. function traceClear(div) {
  81. var inputs = [];
  82. while ((inputs = div.getElementsByTagName("input")).length > 0) {
  83. var box = inputs[0];
  84. box.parentNode.removeChild(box);
  85. }
  86. }
  87.  
  88. function playerClicked(elemInput) {
  89. //console.log(elemInput.target+" : "+elemInput.target.parentNode.id);
  90. var id = elemInput.target.parentNode.id.split("_")[2];
  91. if (document.getElementById("line_"+id) != null) {
  92. var d = document.getElementById("line_"+id);
  93. d.parentNode.removeChild(d);
  94. for (var i=0; i<tracedPlayers.length; i++) {
  95. if (tracedPlayers[i] == id) {
  96. tracedPlayers.splice(i,1);
  97. break;
  98. }
  99. }
  100. return;
  101. }
  102.  
  103. if (tracedPlayers.indexOf(id) == -1) {
  104. tracedPlayers.push(id);
  105. }
  106.  
  107. var play_data = unsafeWindow.play_data;
  108. var arrColors = new Array('black', 'blue', 'red', 'yellow', 'purple', 'orange',' aqua', 'bisque', 'darkgray', 'lightskyblue', 'magenta', 'greenyellow', 'mintcream', 'salmon', 'tan', 'turquoise', 'silver', 'slateblue', 'plum', 'orangered', 'hotpink', 'goldenrod', 'white');
  109. for (var pl=0; pl<play_data[0].length; pl++) {
  110.  
  111. if (play_data[0][pl].id == id) {
  112. var maxX = -1;
  113. var minX = 2000;
  114. var maxY = -1;
  115. var minY = 2000;
  116.  
  117. var color = arrColors[pl%arrColors.length];
  118. var link = elemInput.target.parentNode.parentNode.parentNode.childNodes[2];
  119. if (link.style.color != "") {
  120. color = link.style.color;
  121. }
  122. var p = pl;
  123. var idx = pl;
  124. var divArray = new Array();
  125. for (var cf=0; cf<play_data.length-3; cf++) {
  126. try {
  127. if (play_data[0][pl].id != play_data[cf+1][idx].id) {
  128. for (var i=0; i<play_data[cf+1].length; i++) {
  129. if (play_data[0][pl].id == play_data[cf+1][i].id) {
  130. idx = i;
  131. break;
  132. }
  133. }
  134. }
  135. var x1 = (play_data[cf][p].x)*3+20;
  136. var y1 = (play_data[cf][p].y)*3+40;
  137. var x2 = (play_data[cf+1][idx].x)*3+20;
  138. var y2 = (play_data[cf+1][idx].y)*3+40;
  139.  
  140. minX = Math.min(minX,x1);
  141. minX = Math.min(minX,x2);
  142. maxX = Math.max(maxX,x1);
  143. maxX = Math.max(maxX,x2);
  144. minY = Math.min(minY,y1);
  145. minY = Math.min(minY,y2);
  146. maxY = Math.max(maxY,y1);
  147. maxY = Math.max(maxY,y2);
  148.  
  149. if ((cf % step) == 0) {
  150. divArray.push(makeDiv(x1, y1, 2, 2, color));
  151. }
  152. p = idx;
  153. }
  154. catch (e) {
  155. console.log(e);
  156. }
  157. }
  158.  
  159. if (divArray.length > 0) {
  160. var mainDiv = document.createElement('div');
  161. mainDiv.className = "player_path";
  162. mainDiv.id = 'line_' + id;
  163. mainDiv.style.left = Math.round(minX)+"px";
  164. mainDiv.style.top = Math.round(minY)+"px";
  165. mainDiv.style.width = Math.round((maxX-minX)+1)+"px";
  166. mainDiv.style.height = Math.round((maxY-minY)+1)+"px";
  167. mainDiv.style.zIndex = 500;
  168.  
  169. for (var d=0; d<divArray.length; d++) {
  170. mainDiv.appendChild(divArray[d]);
  171. }
  172. document.getElementById('replay_area').appendChild(mainDiv);
  173. }
  174. }
  175. }
  176. }
  177.  
  178. function findPlayerToTrace(cf, id) {
  179. for (var pl=0; pl<play_data[cf].length; pl++) {
  180. if (play_data[cf][pl].id == id) {
  181. return pl;
  182. }
  183. }
  184. console.log("replayRewrite.trace : I shouldn't happen.");
  185. return -1;
  186. }
  187.  
  188. function makeDiv(x, y, w, h, backColor) {
  189. var newDiv = document.createElement('div');
  190. newDiv.style.left = x + 'px';
  191. newDiv.style.top = y + 'px';
  192. newDiv.style.width = w + 'px';
  193. newDiv.style.height = h + 'px';
  194. newDiv.style.zIndex = 500;
  195. newDiv.style.backgroundColor= backColor;
  196. newDiv.className='player_icon';
  197. newDiv.id='ds';
  198. return newDiv;
  199. }