Attributes On Roster Page

Adds more player info to the GLB roster page.

  1. // ==UserScript==
  2. // @name Attributes On Roster Page
  3. // @namespace pbr
  4. // @include http://goallineblitz.com/game/roster.pl?team_id=*
  5. // @include http://glb.warriorgeneral.com/game/roster.pl?team_id=*
  6. // @copyright 2010, pabst
  7. // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
  8. // @version 13.12.29
  9. // @description Adds more player info to the GLB roster page.
  10. // ==/UserScript==
  11.  
  12. window.setTimeout( function() {
  13. setupTabs();
  14.  
  15. var input = document.createElement("input");
  16. input.type = "button";
  17. input.value = "Load Attributes";
  18.  
  19. var content = document.getElementById("content_attributes");
  20. content.insertBefore(input, content.childNodes[0]);
  21.  
  22. input.addEventListener("click",main,false);
  23. }, 2000);
  24.  
  25. var totalPlayers = 0;
  26. var atts = ["Pos","Name","Eff","Age","Val","Fame","Str","Spd","Agi","Jmp","Sta","Vis", "Cnf","Blk","Tck","Thr","Cat","Car","Kck","Pnt"];
  27. var attNames = ["Strength","Speed","Agility","Jumping","Stamina","Vision","Confidence",
  28. "Blocking","Tackling","Throwing","Catching","Carrying","Kicking","Punting"];
  29.  
  30. function setupTabs() {
  31. var div = document.createElement("div");
  32. div.setAttribute("id","tab_attributes");
  33. div.setAttribute("class","subtab_off");
  34. div.innerHTML = "<a onclick=\"changeTab('attributes', 1)\" href=\"javascript:;\">Attributes</a>";
  35.  
  36. var content = document.createElement("div");
  37. content.setAttribute("id","content_attributes");
  38. content.setAttribute("class","content_container");
  39. content.style.display = "none"
  40. content.style.visibility = "hidden";
  41.  
  42. var titles = ["blah","Offense","Defense","Kicker"];
  43. for (var i=1; i<4; i++) {
  44. var title = document.createElement("div");
  45. title.setAttribute("class","medium_head");
  46. title.innerHTML = titles[i]+" Attributes";
  47. content.appendChild(title);
  48.  
  49. var table = document.createElement("table");
  50. table.setAttribute("class","players rowstyle-alternating_color2 onload-zebra no-arrow");
  51.  
  52. var thead = document.createElement("thead");
  53. var tr = document.createElement("tr");
  54. for (var j=0; j<atts.length; j++) {
  55. var th = document.createElement("th");
  56. th.setAttribute("class","sortable-numeric fd-column-"+j);
  57. th.innerHTML = "<a class=\"fdTableSortTrigger\" title=\"Sort on “"+atts[j]+"”\" href=\"#\">"+atts[j]+"</a>";
  58. tr.appendChild(th);
  59. }
  60. thead.appendChild(tr);
  61.  
  62. var roster = document.getElementById("fd-table-"+i);
  63. for (var j=1; j<roster.rows.length; j++) {
  64. //console.log(roster.rows[j].innerHTML);
  65. var tr = document.createElement("tr");
  66. tr.setAttribute("class","alternating_color"+(((j+1)%2)+1));
  67.  
  68. var td1 = document.createElement("td");
  69. td1.setAttribute("class",roster.rows[j].cells[7].className);
  70. td1.innerHTML = roster.rows[j].cells[7].innerHTML;
  71. tr.appendChild(td1);
  72.  
  73. var td2 = document.createElement("td");
  74. td2.setAttribute("class",roster.rows[j].cells[3].className);
  75. td2.innerHTML = roster.rows[j].cells[3].innerHTML.split("<img")[0];
  76. tr.appendChild(td2);
  77.  
  78. thead.appendChild(tr);
  79. }
  80.  
  81. table.appendChild(thead);
  82. table.rows[0].cells[0].setAttribute("class",table.rows[0].cells[0].getAttribute("class").replace("-numeric","-text"));
  83. table.rows[0].cells[1].setAttribute("class",table.rows[0].cells[1].getAttribute("class").replace("-numeric","-text"));
  84. table.rows[0].cells[1].style.width = "250px";
  85. content.appendChild(table);
  86.  
  87. }
  88.  
  89. document.getElementById("content").appendChild(content);
  90. var tabs = document.getElementsByClassName("tabs")[0];
  91. tabs.appendChild(div);
  92. }
  93.  
  94. function main() {
  95. var div = document.createElement("div");
  96. div.setAttribute("id","agefooter");
  97. document.getElementById("footer").appendChild(div);
  98.  
  99. var attContent = document.getElementById("content_attributes");
  100. var a = attContent.getElementsByTagName("a");
  101. for (var i=0; i<a.length; i++) {
  102. if (a[i].href.toString().indexOf("/game/player.pl") != -1) {
  103. if (a[i].parentNode.innerHTML.indexOf('class="cpu"') == -1) {
  104. totalPlayers++;
  105. }
  106. }
  107. }
  108.  
  109. var a = attContent.getElementsByTagName("a");
  110. for (var i=0; i<a.length; i++) {
  111. if (a[i].href.toString().indexOf("/game/player.pl") != -1) {
  112. if (a[i].parentNode.innerHTML.indexOf('class="cpu"') == -1) {
  113. getInetPage(a[i].href.toString(),handlePlayer);
  114. }
  115. }
  116. }
  117. }
  118.  
  119. function handlePlayer(address, page) {
  120. var div = document.createElement("div");
  121. div.innerHTML = page.responseText.replace(/<img/g,"<div").replace(/\/img/g,"/div>");
  122.  
  123. var attributes = new Array();
  124. var lvl = parseInt(div.getElementsByClassName("current_stats_value")[0].innerHTML);
  125. var eff = div.getElementsByClassName("current_stats_value")[0];
  126. eff = parseInt(eff.innerHTML.split("Level: ")[1]);
  127. if (eff > (lvl+5)) {
  128. attributes.push('<div style="color:blue">'+eff+'</div>');
  129. }
  130. else if (eff > (lvl+2)) {
  131. attributes.push('<div style="color:green">'+eff+'</div>');
  132. }
  133. else if (eff < (lvl-2)) {
  134. attributes.push('<div style="color:red">'+eff+'</div>');
  135. }
  136. else {
  137. attributes.push(eff);
  138. }
  139.  
  140. var fame = div.getElementsByClassName("current_stats_fame")[0];
  141. if (fame != null) fame = parseInt(fame.innerHTML);
  142. else fame = "";
  143.  
  144. var ftr = document.createElement("div");
  145. ftr.setAttribute("class","age");
  146. ftr.innerHTML = -1;
  147.  
  148. var age = parseFloat(div.getElementsByClassName("vital_data")[2].firstChild.innerHTML.split("d")[0]);
  149. attributes.push(age);
  150.  
  151. var val = parseFloat(div.getElementsByClassName("current_stats_value")[0].lastChild.firstChild.innerHTML);
  152. lvl=1; //fix me
  153. attributes.push((val/lvl).toFixed(1));
  154. ftr.innerHTML = age;
  155.  
  156. document.getElementById("agefooter").appendChild(ftr);
  157.  
  158. var atts = [];
  159. var list = div.getElementsByClassName("stat_head_tall");
  160. for (var i=0; i<list.length; i++) {
  161. atts[list[i].innerHTML.split(":")[0]] = parseFloat(list[i].nextSibling.innerHTML);
  162. }
  163. var tidx = div.getElementsByClassName("column_320").length-1;
  164. var table = div.getElementsByClassName("column_320")[tidx];
  165. // console.log(tidx+" --- "+table.innerHTML.slice(80));
  166. if (table != null) {
  167. var splits = table.innerHTML.split("<td>");
  168. for (var i=1; i<splits.length-1; i=i+2) {
  169. if (atts[splits[i].split("<")[0]] != null) {
  170. var a = atts[splits[i].split("<")[0]];
  171. var change = parseFloat(splits[i+1].split("<")[0]);
  172. // console.log(a+" + "+change+" = "+(a+change));
  173. atts[splits[i].split("<")[0]] = a+change;
  174. }
  175. }
  176. }
  177.  
  178. attributes.push(fame);
  179. var idx = 0;
  180. while (attributes.length < 18) {
  181. var val = atts[attNames[idx]];
  182. // console.log(attNames[idx]+" -- "+(idx)+" -- "+val);
  183. if (val == null) attributes.push("-");
  184. else attributes.push(val.toFixed(0));
  185. idx++;
  186. // console.log("atts="+attributes);
  187. }
  188.  
  189. try {
  190. var agent = div.getElementsByClassName("vital_data")[5].innerHTML;
  191. attributes.push(agent);
  192. }
  193. catch (e) {
  194. attributes.push("CPU");
  195. }
  196.  
  197. var attContent = document.getElementById("content_attributes");
  198. var a = attContent.getElementsByTagName("a");
  199. for (var i=0; i<a.length; i++) {
  200. if (a[i].href.toString() == address) {
  201. var tr = a[i].parentNode.parentNode.parentNode;
  202. for (var att=0; att<attributes.length-1; att++) {
  203. var td = document.createElement("td");
  204. td.innerHTML = "<div style='text-align:center'>"+attributes[att]+"</div>";
  205. tr.appendChild(td);
  206. }
  207. }
  208. }
  209.  
  210. var ages = document.getElementsByClassName("age");
  211. if (ages.length == totalPlayers) {
  212. var age = 0;
  213. var players = 0;
  214. for (var i=0; i<ages.length; i++) {
  215. if (parseInt(ages[i].innerHTML) > 0) {
  216. players++;
  217. age += parseInt(ages[i].innerHTML);
  218. }
  219. }
  220.  
  221. var div = document.createElement("div");
  222. div.setAttribute("style", "width: 300px; float: left");
  223. var child = document.createElement("div");
  224. child.setAttribute("class","small_head");
  225. child.innerHTML = "Avg. Player Age:";
  226. div.appendChild(child);
  227. div.innerHTML += (age/players).toFixed(0);
  228.  
  229. var cont = document.getElementsByClassName("content_container")[0];
  230. cont.insertBefore(div, cont.childNodes[cont.childNodes.length-4]);
  231.  
  232. document.getElementById("footer").removeChild(document.getElementById("agefooter"));
  233. }
  234. }
  235.  
  236. function getInetPage(address, func) {
  237. // console.log("getInetPage : "+address);
  238. var req = new XMLHttpRequest();
  239. req.open( 'GET', address, true );
  240. req.onload = function() {
  241. if (this.status != 200) {
  242. alert("pbr gm script: Error "+this.status+" loading "+address);
  243. }
  244. else {
  245. // console.log("loaded: "+address)
  246. func(address,this);
  247. }
  248. };
  249.  
  250. req.send(null);
  251. return req;
  252. }
  253.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址