Player Progression Tracker

Stores player attributes for the Deeproute.com online football game

目前为 2014-08-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Player Progression Tracker
  3. // @namespace Deep Route
  4. // @author Triplex
  5. // @version 1.0
  6. // @description Stores player attributes for the Deeproute.com online football game
  7. // @include http://deeproute.com/default.asp?js=oneplayer&lookatplayer=*&leagueno=*
  8. // @include http://deeproute.com/default.asp?js=oneplayer&lookatplayer=*&myleagueno=*
  9. // @include http://deeproute.com/?js=oneplayer&lookatplayer=*&leagueno=*
  10. // @include http://deeproute.com/?js=oneplayer&lookatplayer=*&myleagueno=*
  11. // @include http://deeproute.com/default.asp?js=rosters&myleagueno=*&myteamno=*
  12. // @include http://deeproute.com/?js=rosters&myleagueno=*&myteamno=*
  13. // @include http://deeproute.com/?js=oneplayer&leagueno=*&lookatplayer=*
  14. // @include http://deeproute.com/default.asp?js=oneplayer&leagueno=*&lookatplayer=*
  15. // ==/UserScript==
  16.  
  17. var prefix="DR_progress";
  18. var run=0, attr=[], attrstr="", lgno=0, playerid=0, curryear=-1, counter=0, pidlist=[];
  19.  
  20. function addtr(intable, incol, isBold) {
  21.  
  22. var tr1 = document.createElement("tr"), color;
  23. intable.appendChild(tr1);
  24.  
  25. if (counter++%2==0) color='#FFFFDD';
  26. else color='#EEFFFF';
  27.  
  28. for (var x=0; x<incol.length; x++) {
  29.  
  30. var td1 = document.createElement("td");
  31. td1.setAttribute('align','center');
  32. var newDiv = document.createElement('div');
  33. newDiv.innerHTML=incol[x];
  34. td1.appendChild(newDiv);
  35. if (isBold || x==0) td1.setAttribute('style', 'font-weight: bold;');
  36. td1.setAttribute('bgcolor', color);
  37.  
  38. tr1.appendChild(td1);
  39. }
  40.  
  41. }
  42.  
  43.  
  44. function parseData(instr) {
  45.  
  46. var ptr1=0, ptr2, ptr3, year, str1;
  47.  
  48. alldata=[];
  49.  
  50. while (1) {
  51. ptr2=instr.indexOf(":", ptr1);
  52. ptr3=instr.indexOf(".", ptr2+1);
  53. if (ptr2<0 || ptr3<0) break;
  54. var tmp=new Array (1);
  55. year=parseInt(instr.substring(ptr1, ptr2));
  56. str1=instr.substring(ptr2+1, ptr3);
  57. ptr1=ptr3+1;
  58. tmp[0]=year;
  59.  
  60. for (var x=0; x<str1.length; x+=2) {
  61. ptr2=str1.substring(x, x+2);
  62. if (ptr2.substring(0, 1) == '0') {
  63. ptr3=ptr2.substring(1, 2);
  64. ptr2=ptr3;
  65. }
  66. tmp[tmp.length]=parseInt(ptr2);
  67. }
  68.  
  69. alldata[alldata.length]=tmp;
  70. }
  71.  
  72.  
  73. for (var x=0; x<alldata.length; x++)
  74. for (var y=x+1; y<alldata.length; y++)
  75. if (alldata[x][0] > alldata[y][0]) {
  76. var tmp0=alldata[x];
  77. alldata[x]=alldata[y];
  78. alldata[y]=tmp0;
  79. }
  80.  
  81. }
  82.  
  83. function constructCols(inname, index1, index2) {
  84.  
  85. var cols=[];
  86. cols[0]=inname;
  87.  
  88. for (var x=0; x<alldata.length; x++)
  89. cols[x+1]=(alldata[x][index1]).toString() + "/" + (alldata[x][index2]).toString();
  90.  
  91. cols[cols.length]=(attr[index1-1]).toString() + "/" + (attr[index2-1]).toString();
  92. return cols;
  93. }
  94.  
  95.  
  96. function print_progression() {
  97.  
  98. var indexstr=prefix+"_"+lgno+"_"+playerid;
  99. var storedata=GM_getValue(indexstr);
  100. var divptr=document.getElementById("progress_mesg"), cols;
  101.  
  102. if (storedata==null || storedata=="deleted")
  103. divptr.innerHTML="No historical data is saved previously or data of this player is deleted";
  104. else if (run==1)
  105. divptr.innerHTML="Progression table is displayed already";
  106. else {
  107.  
  108. run=1;
  109. parseData(storedata);
  110.  
  111. var outtable = document.createElement("table");
  112. outtable.setAttribute("border","1");
  113. outtable.setAttribute("cellspacing","0");
  114. outtable.setAttribute('style','width: 100%');
  115. outtable.setAttribute('id',"combine table");
  116.  
  117. cols=[];
  118. cols[0]="Season";
  119. for (var x=0; x<alldata.length; x++)
  120. cols[x+1]=alldata[x][0];
  121. cols[cols.length]="Current";
  122.  
  123. addtr(outtable, cols, 1);
  124. addtr(outtable, constructCols("Overall", 187, 188) ,0);
  125. addtr(outtable, constructCols("Strength/Size", 9, 10) ,0);
  126. addtr(outtable, constructCols("Stamina", 49, 50) ,0);
  127. addtr(outtable, constructCols("Toughness", 51, 52) ,0);
  128. addtr(outtable, constructCols("Athleticism", 57, 58) ,0);
  129. addtr(outtable, constructCols("Intelligence", 11, 12) ,0);
  130. addtr(outtable, constructCols("Leadership", 13, 14) ,0);
  131. addtr(outtable, constructCols("Discipline", 27, 28) ,0);
  132. addtr(outtable, constructCols("Clutch", 23, 24) ,0);
  133. addtr(outtable, constructCols("Consistency", 53, 54) ,0);
  134. addtr(outtable, constructCols("Passing Arm", 1, 2) ,0);
  135. addtr(outtable, constructCols("Passing Accuracy", 3, 4) ,0);
  136. addtr(outtable, constructCols("Handle Snap", 63, 64) ,0);
  137. addtr(outtable, constructCols("Escapability", 5, 6) ,0);
  138. addtr(outtable, constructCols("Speed/Size", 33, 34) ,0);
  139. addtr(outtable, constructCols("Footwork", 35, 36) ,0);
  140. addtr(outtable, constructCols("Cover Skills/Size", 81, 82) ,0);
  141. addtr(outtable, constructCols("Protect ball", 37, 38) ,0);
  142. addtr(outtable, constructCols("Shed Blocker", 59, 60) ,0);
  143. addtr(outtable, constructCols("Pass Catching", 15, 16) ,0);
  144. addtr(outtable, constructCols("Route", 17, 18) ,0);
  145. addtr(outtable, constructCols("First Step", 25, 26) ,0);
  146. addtr(outtable, constructCols("Run Blocking", 19, 20) ,0);
  147. addtr(outtable, constructCols("Pass Blocking", 21, 22) ,0);
  148. addtr(outtable, constructCols("Snapping", 61, 62) ,0);
  149. addtr(outtable, constructCols("Motor", 7, 8) ,0);
  150. addtr(outtable, constructCols("Read Opposition", 55, 56) ,0);
  151. addtr(outtable, constructCols("Tackling", 29, 30) ,0);
  152. addtr(outtable, constructCols("Leaping", 31, 32) ,0);
  153. addtr(outtable, constructCols("Feel Pressure", 45, 46) ,0);
  154. addtr(outtable, constructCols("Find Opening", 47, 48) ,0);
  155. addtr(outtable, constructCols("FG Accuracy", 41, 42) ,0);
  156. addtr(outtable, constructCols("Kicking Strength", 39, 40) ,0);
  157. addtr(outtable, constructCols("Punting Accuracy", 43, 44) ,0);
  158.  
  159. divptr.innerHTML="Player Progression:";
  160.  
  161. var divptr=document.getElementById("progress_mesg");
  162. divptr.parentNode.insertBefore(outtable, divptr.nextSibling);
  163. }
  164.  
  165.  
  166. }
  167.  
  168. function save_data() {
  169.  
  170. var indexstr=prefix+"_"+lgno+"_"+playerid;
  171. var storedata=GM_getValue(indexstr);
  172.  
  173. if ((storedata==null || storedata=="deleted") && attr!="" && curryear!=-1) {
  174. GM_setValue(indexstr, curryear.toString()+":"+attrstr+".");
  175. var divptr=document.getElementById("progress_mesg");
  176. divptr.innerHTML="Attributes Saved";
  177. }
  178. else if (curryear!=-1) {
  179. parseData(storedata);
  180. var found=0;
  181. for (var x=0; x<alldata.length; x++)
  182. if (alldata[x][0] == curryear) {
  183. found=1;
  184. break;
  185. }
  186.  
  187. var divptr=document.getElementById("progress_mesg");
  188.  
  189. if (found==0) {
  190. GM_setValue(indexstr, storedata+curryear.toString()+":"+attrstr+".");
  191. divptr.innerHTML="Attributes Saved";
  192. }
  193. else divptr.innerHTML="This season's attributes are already saved";
  194. }
  195. else {
  196. var divptr=document.getElementById("progress_mesg");
  197. divptr.innerHTML="Save failed: Can't find current year info in the page. Try saving whole team instead";
  198. }
  199. }
  200.  
  201. function save_all() {
  202. for (var x=0; x<pidlist.length; x++) {
  203.  
  204. var indexstr=prefix+"_"+lgno+"_"+pidlist[x];
  205. var str1="pattnoinj"+pidlist[x];
  206. var attsptr=document.getElementsByName(str1);
  207. var atts=attsptr[0].value.toString();
  208. var storedata=GM_getValue(indexstr);
  209.  
  210. if (storedata==null || storedata=="deleted")
  211. GM_setValue(indexstr, curryear.toString()+":"+atts+".");
  212. else {
  213.  
  214. parseData(storedata);
  215. var found=0;
  216. for (var y=0; y<alldata.length; y++)
  217. if (alldata[y][0] == curryear) {
  218. found=1;
  219. break;
  220. }
  221.  
  222. if (found==0)
  223. GM_setValue(indexstr, storedata+curryear.toString()+":"+atts+".");
  224. }
  225. }
  226.  
  227. var divptr=document.getElementById("progress_all_mesg");
  228. divptr.innerHTML="Attributes of all players saved";
  229.  
  230. }
  231.  
  232. function delete_all() {
  233. var shouldDelete = confirm("are you sure you want to delete all records?");
  234. if (shouldDelete == true) {
  235. for (var x=0; x<pidlist.length; x++) {
  236. var indexstr=prefix+"_"+lgno+"_"+pidlist[x];
  237. var storedata=GM_getValue(indexstr);
  238. if (storedata!=null)
  239. GM_setValue(indexstr, "deleted");
  240. }
  241.  
  242. var divptr=document.getElementById("progress_all_mesg");
  243. divptr.innerHTML="Attribuite records deleted";
  244. }
  245.  
  246. }
  247.  
  248. function delete_data() {
  249. var shouldDelete = confirm("are you sure you want to delete this player's records?");
  250. if (shouldDelete == true) {
  251. var indexstr=prefix+"_"+lgno+"_"+playerid;
  252. GM_setValue(indexstr, "deleted");
  253. var divptr=document.getElementById("progress_mesg");
  254. divptr.innerHTML="Old data deleted";
  255. }
  256. }
  257.  
  258. window.setTimeout( function() {
  259.  
  260. var url=window.location.toString();
  261.  
  262. if (url.indexOf("oneplayer",0) >= 0) {
  263.  
  264.  
  265. var buttontable = document.createElement('table');
  266. buttontable.setAttribute('cellspacing', '0');
  267. buttontable.setAttribute('cellpadding', '0');
  268. buttontable.setAttribute('id', 'track_table');
  269.  
  270. var newtr=document.createElement('tr');
  271. buttontable.appendChild(newtr);
  272. var newtd1 = document.createElement('td');
  273. newtd1.setAttribute('colspan', '10');
  274. var newDiv2 = document.createElement('div');
  275. newDiv2.align = 'center';
  276. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Show Progression">';
  277. newDiv2.addEventListener('click', function() { print_progression(); }, true);
  278. newtd1.appendChild(newDiv2);
  279. newtr.appendChild(newtd1);
  280.  
  281. newtd1 = document.createElement('td');
  282. newtd1.setAttribute('colspan', '10');
  283. newDiv2 = document.createElement('div');
  284. newDiv2.align = 'center';
  285. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Save current season\'s Attributes">';
  286. newDiv2.addEventListener('click', function() { save_data(); }, true);
  287. newtd1.appendChild(newDiv2);
  288. newtr.appendChild(newtd1);
  289.  
  290. newtd1 = document.createElement('td');
  291. newtd1.setAttribute('colspan', '10');
  292. newDiv2 = document.createElement('div');
  293. newDiv2.align = 'center';
  294. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Delete saved data">';
  295. newDiv2.addEventListener('click', function() { delete_data(); }, true);
  296. newtd1.appendChild(newDiv2);
  297. newtr.appendChild(newtd1);
  298.  
  299. var newDiv = document.createElement('div');
  300. newDiv.setAttribute("id", "progress_mesg");
  301. newDiv.innerHTML='&nbsp;';
  302.  
  303.  
  304. var target = document.getElementById('hili1');
  305. if (target) {
  306.  
  307. target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.
  308. parentNode.parentNode.parentNode.insertBefore(newDiv, target.parentNode.parentNode.parentNode.parentNode.
  309. parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);
  310.  
  311.  
  312. target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.
  313. parentNode.parentNode.parentNode.insertBefore(buttontable, target.parentNode.parentNode.parentNode.parentNode.
  314. parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);
  315. }
  316. var ptr1, ptr2, ptr3, input=document.body.innerHTML, lgptr=document.getElementById("mylgno"), yearptr=document.getElementById("hiyear");
  317.  
  318. if (lgptr!=null) lgno=lgptr.value;
  319. var yearptr1=document.getElementById("thisyear");
  320. if (yearptr1!=null) curryear=parseInt(yearptr1.value);
  321. else {
  322. if (yearptr!=null) {
  323. curryear=parseInt(yearptr.value);
  324. if (curryear<10) curryear=-1;
  325. }
  326. }
  327.  
  328. ptr1=input.indexOf("By Game Stats");
  329. if (ptr1>=0) {
  330. ptr2=input.lastIndexOf("\">", ptr1);
  331. ptr3=input.lastIndexOf("lookatplayer=", ptr1);
  332. if (ptr3>=0 && ptr2>ptr3)
  333. playerid=parseInt(input.substring(ptr3+13, ptr2));
  334. }
  335.  
  336. ptr1=input.indexOf("attsnoinj", 0);
  337. attrstr="";
  338.  
  339. if (ptr1>=0) {
  340. ptr2=input.indexOf("value=\"", ptr1);
  341. ptr3=input.indexOf("\"", ptr2+7);
  342. if (ptr2>=0 && ptr3>ptr2) {
  343.  
  344. attrstr=input.substring(ptr2+7, ptr3);
  345. for (var x=0; x<attrstr.length; x+=2) {
  346. ptr1=attrstr.substring(x, x+2);
  347. if (ptr1.substring(0, 1) == '0') {
  348. ptr2=ptr1.substring(1, 2);
  349. ptr1=ptr2;
  350. }
  351. attr[attr.length]=parseInt(ptr1);
  352. }
  353. }
  354. }
  355. }
  356. else if (url.indexOf("rosters",0) >= 0) {
  357.  
  358. var lgptr=document.getElementById("mylgno"), pids=document.getElementsByName("pid"), yearptr=document.getElementById("myseason");
  359. var currptr=0, ptr1, ptr2, str1;
  360.  
  361. if (lgptr!=null) lgno=lgptr.value;
  362. if (yearptr!=null) curryear=parseInt(yearptr.value);
  363.  
  364. str1=(pids[0].value).toString();
  365.  
  366. while (1) {
  367. ptr1=str1.indexOf("!", currptr);
  368. ptr2=str1.indexOf(" ", ptr1+1);
  369. if (ptr1<0 || ptr2<0) break;
  370. pidlist[pidlist.length]=parseInt(str1.substring(ptr1+1, ptr2));
  371. currptr=ptr2;
  372. }
  373.  
  374. var buttontable = document.createElement('table');
  375. buttontable.setAttribute('cellspacing', '0');
  376. buttontable.setAttribute('cellpadding', '0');
  377. buttontable.setAttribute('id', 'track_table');
  378.  
  379. var newtr=document.createElement('tr');
  380. buttontable.appendChild(newtr);
  381. var newtd1 = document.createElement('td');
  382. newtd1.setAttribute('colspan', '10');
  383. var newDiv2 = document.createElement('div');
  384. newDiv2.align = 'center';
  385. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Record all players\' attributes">';
  386. newDiv2.addEventListener('click', function() { save_all(); }, true);
  387. newtd1.appendChild(newDiv2);
  388. newtr.appendChild(newtd1);
  389.  
  390. newtr=document.createElement('tr');
  391. buttontable.appendChild(newtr);
  392. newtd1 = document.createElement('td');
  393. newtd1.setAttribute('colspan', '10');
  394. newDiv2 = document.createElement('div');
  395. newDiv2.align = 'center';
  396. newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Delete all players\' records">';
  397. newDiv2.addEventListener('click', function() { delete_all(); }, true);
  398. newtd1.appendChild(newDiv2);
  399. newtr.appendChild(newtd1);
  400.  
  401. var newDiv = document.createElement('div');
  402. newDiv.setAttribute("id", "progress_all_mesg");
  403. newDiv.innerHTML='&nbsp;';
  404.  
  405. var target = document.getElementById('storeme');
  406.  
  407. if (target) {
  408.  
  409. target.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(newDiv,
  410. target.parentNode.parentNode.parentNode.parentNode.nextSibling);
  411.  
  412. target.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(buttontable,
  413. target.parentNode.parentNode.parentNode.parentNode.nextSibling);
  414. }
  415. }
  416.  
  417.  
  418. }, 200);