ranking

Ranks teams for the Deeproute.com online football game

  1. // ==UserScript==
  2. // @name ranking
  3. // @namespace deeproute
  4. // @author Triplex
  5. // @version 1.1.1
  6. // @description Ranks teams for the Deeproute.com online football game
  7. // @include http://deeproute.com/default.asp?js=weekbyweek&*
  8. // @include http://deeproute.com/?js=weekbyweek&*
  9. // ==/UserScript==
  10.  
  11. var team=[], oppid=[], record=[], sos=[], rating=[], oldrating=[], sosrank=[], run=0, counter=0;
  12.  
  13. function findTeamID(inname)
  14. {
  15. for (var x=0; x<team.length; x++)
  16. if (team[x] == inname) return x;
  17. return -1;
  18. }
  19.  
  20. function getSOSRank(id) {
  21. for (var x=0; x<sosrank.length; x++)
  22. if (sosrank[x]==id) return x+1;
  23. return -1;
  24. }
  25.  
  26. function creatediv(str, idattr)
  27. {
  28. var tmp = document.createElement('div');
  29. tmp.setAttribute("id", idattr);
  30. tmp.innerHTML = "<span style='color:white'>" + str + "</span>";
  31. return tmp;
  32. }
  33.  
  34. function ranking() {
  35.  
  36. var win, loss, tie, total, target, str;
  37.  
  38. run=1;
  39.  
  40. for (var x=0; x<team.length; x++)
  41. rating[x]=oldrating[x]=sos[x]=0.0;
  42.  
  43. for (var x=0; x<team.length; x++) {
  44. win=loss=tie=0;
  45. for (var y=0; y<record[x].length; y++)
  46. if (record[x][y]==1) win++;
  47. else if (record[x][y]==-1) loss++;
  48. else tie++;
  49.  
  50. oldrating[x]=parseFloat(1.0 + win)/parseFloat(win+loss+tie+2);
  51. }
  52.  
  53. while (calc() == 0) ;
  54.  
  55. var order=new Array(team.length);
  56. for (var x=0; x<team.length; x++)
  57. order[x]=sosrank[x]=x;
  58.  
  59. for (var x=0; x<team.length; x++)
  60. for (var y=x+1; y<team.length; y++)
  61. if (rating[order[x]] < rating[order[y]]) {
  62. var tmp=order[x];
  63. order[x]=order[y];
  64. order[y]=tmp;
  65. }
  66.  
  67. for (var x=0; x<team.length; x++)
  68. for (var y=x+1; y<team.length; y++)
  69. if (sos[sosrank[x]] < sos[sosrank[y]]) {
  70. var tmp=sosrank[x];
  71. sosrank[x]=sosrank[y];
  72. sosrank[y]=tmp;
  73. }
  74.  
  75.  
  76. var newDiv1 = creatediv("(Rank).......(W-L-T).......(S.O.S)..............(Rating).......(Team Name)", "ranking0");
  77. target = document.getElementById('rank_button_table');
  78. if (target) target.parentNode.insertBefore(newDiv1, target.nextSibling);
  79.  
  80. for (var x=0; x<team.length; x++) {
  81.  
  82. win=loss=tie=0;
  83. for (var y=0; y<record[order[x]].length; y++)
  84. if (record[order[x]][y]==1) win++;
  85. else if (record[order[x]][y]==-1) loss++;
  86. else tie++;
  87.  
  88. var val0=parseInt(parseFloat(sos[order[x]])*10000.0);
  89. val0=parseFloat(val0) / 100.0;
  90. var val1=parseInt(parseFloat(rating[order[x]])*10000.0);
  91. val1=parseFloat(val1) / 100.0;
  92.  
  93. if (x<9) str="[0" + (x+1).toString() + "]...........";
  94. else str="[" + (x+1).toString() + "]...........";
  95.  
  96. str+=win.toString()+"-"+loss.toString()+"-"+tie.toString();
  97. if (win<10 && loss<10 && tie<10) str+="..";
  98. str+="........."+val0.toString()+" (#"+(getSOSRank(order[x])).toString()+")";
  99. for (var y=0; y<5-val0.toString().length+2-(getSOSRank(order[x])).toString().length; y++) str+="..";
  100. str+="........"+val1.toString();
  101. for (var y=0; y<5-val1.toString().length; y++) str+="..";
  102. str+="........"+team[order[x]];
  103.  
  104.  
  105. var newDiv = creatediv(str, "ranking"+(x+1).toString());
  106. target = document.getElementById("ranking" + x);
  107. if (target) target.parentNode.insertBefore(newDiv, target.nextSibling);
  108. }
  109. }
  110.  
  111. function calc() {
  112. var win, loss, tie, sum, diff=0.0;
  113.  
  114. for (var x=0; x<team.length; x++) {
  115. sum=0.0;
  116. for (var y=0; y<oppid[x].length; y++) {
  117. sum+=parseFloat(oldrating[oppid[x][y]-1]);
  118. }
  119. sos[x]=parseFloat(sum) / parseFloat(oppid[x].length);
  120. }
  121.  
  122. for (var x=0; x<team.length; x++) {
  123. win=loss=tie=0;
  124. for (var y=0; y<record[x].length; y++)
  125. if (record[x][y]==1) win++;
  126. else if (record[x][y]==-1) loss++;
  127. else tie++;
  128. total=win+loss+tie;
  129.  
  130. var rw=parseFloat(win-loss)/2.0 + sos[x]*parseFloat(total);
  131. rating[x]=parseFloat(rw+1)/parseFloat(total+2);
  132. }
  133.  
  134. for (var x=0; x<team.length; x++) {
  135. diff += parseFloat(Math.abs(rating[x] - oldrating[x]));
  136. }
  137.  
  138. if (diff < 0.0001) return 1;
  139.  
  140. for (var x=0; x<team.length; x++)
  141. oldrating[x]=rating[x];
  142.  
  143. return 0;
  144. }
  145.  
  146. window.setTimeout( function() {
  147.  
  148. var input=document.body.innerHTML, ptr1, ptr2, ptr3, startptr, endptr, id, name, id2, score1, score2;
  149.  
  150. ptr1=input.indexOf("\"teaminfo\"", 0);
  151. if (ptr1<0) ptr1=input.indexOf("teaminfo ", 0);
  152. endptr=input.indexOf("hidden", ptr1+8);
  153. endptr=input.indexOf("hidden", ptr1+8);
  154.  
  155. while (1) {
  156. ptr2=input.indexOf("!", ptr1);
  157. if (ptr2>endptr || ptr2<0) break;
  158. ptr3=input.indexOf("^", ptr2+1);
  159. id=parseInt(input.substring(ptr2+1, ptr3));
  160. ptr2=input.indexOf("^", ptr3+1);
  161. name=input.substring(ptr3+1, ptr2);
  162. team[id-1]=name;
  163. ptr1=ptr2;
  164. }
  165.  
  166. for (var x=0; x<team.length; x++) {
  167. record[x]=[];
  168. oppid[x]=[];
  169. }
  170.  
  171.  
  172. ptr1=startptr=input.indexOf("\"type-X\"", endptr);
  173. endptr=input.indexOf("\"type-P\"", ptr1+7);
  174. if (endptr==-1) endptr=input.indexOf("\"type-R\"", ptr1+7);
  175.  
  176.  
  177.  
  178. while (1) {
  179. ptr2=input.indexOf("Y!", ptr1);
  180. if (ptr2>endptr || ptr2<startptr) break;
  181. ptr3=input.indexOf("^", ptr2+2);
  182. id=parseInt(input.substring(ptr2+2, ptr3));
  183. ptr2=input.indexOf("^", ptr3+1);
  184. id2=parseInt(input.substring(ptr3+1, ptr2));
  185. ptr3=input.indexOf("^", ptr2+1);
  186. score1=parseInt(input.substring(ptr2+1, ptr3));
  187. ptr2=input.indexOf("^", ptr3+1);
  188. score2=parseInt(input.substring(ptr3+1, ptr2));
  189.  
  190.  
  191. record[id-1][record[id-1].length]=(score1 > score2) ? 1 : ((score1 < score2) ? -1 : 0);
  192. oppid[id-1][oppid[id-1].length]=id2;
  193. record[id2-1][record[id2-1].length]=(score1 < score2) ? 1 : ((score1 > score2) ? -1 : 0);
  194. oppid[id2-1][oppid[id2-1].length]=id;
  195. ptr1=ptr2;
  196. }
  197.  
  198. for (ptr1=ptr2=0; ptr2<record.length; ptr2++) {
  199. if (ptr1!=record[ptr2].length)
  200. if (ptr1==0) ptr1=record[ptr2].length;
  201. else if (ptr1<record[ptr2].length) ptr1=record[ptr2].length;
  202. }
  203.  
  204. if (ptr1==0) run=1;
  205.  
  206. var target = document.getElementById('imonstatus');
  207. var buttontable = document.createElement('table');
  208. buttontable.setAttribute('cellspacing', '0');
  209. buttontable.setAttribute('cellpadding', '0');
  210. buttontable.setAttribute('id', 'rank_button_table');
  211.  
  212. var newtr=document.createElement('tr');
  213. buttontable.appendChild(newtr);
  214. var newtd1 = document.createElement('td');
  215. newtd1.setAttribute('colspan', '10');
  216. var newDiv2 = document.createElement('div');
  217. newDiv2.align = 'center';
  218. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Ranking">';
  219. newDiv2.addEventListener('click', function() { if (run==0) ranking(); }, true);
  220. newtd1.appendChild(newDiv2);
  221. newtr.appendChild(newtd1);
  222.  
  223. if (target) target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(buttontable,
  224. target.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);
  225. }, 100);