OGame RaidsTable

Tableau de raids

当前为 2015-10-28 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name OGame RaidsTable
  3. // @description Tableau de raids
  4. // @description:en Raids table
  5. // @namespace Xanatos
  6. // @include http://*.ogame.gameforge.com/game/index.php?page=messages*
  7. // @exclude http://*.ogame.gameforge.com/game/index.php?page=messages*messageId*
  8. // @version 1.9.0
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. // Compatibility OGame 6.0.7
  13.  
  14. // images
  15. var more_infos = '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzRBNTJDRTU3NzY2MTFFNUExQTFGRDU3NkE5QzM1RTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzRBNTJDRTY3NzY2MTFFNUExQTFGRDU3NkE5QzM1RTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNEE1MkNFMzc3NjYxMUU1QTFBMUZENTc2QTlDMzVFOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNEE1MkNFNDc3NjYxMUU1QTFBMUZENTc2QTlDMzVFOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpQjHhcAAAN6SURBVHjarFbNThRBEK7qbXZhgXUhkEiIeiCgj4B34lt415MXDlxMPBhCohdPPIB3HsBw10cgQU9iYhQDLOCyuzNd9k9Vd8+skGAc2ExPT3V19fdVfTVIRLB4b3W12WrtNHVro9FQHTsVL0S48XK2uY08G2N6g+Fg3/62jr8eHuLC8srD9lT7U2dusduenQOlNZAx1hh5Ifmx3G/eNNmUZQFXF2dwdvLj9LLfX9eocHvmznx3ojUJo2EfYAi3vmwY9m88CN1swXRnvtu/+ratFcDGZHsWDBU2JIjmFJ3IWNmxCe/YCNnI8DuxA7Zz4ynrWyE+0faondIUPir+9z8Uh6Tss12IZXrBfmRDotLPe26tnQvAvUM7X1oa7EYz2uNvH8KLdBoPBoW7TDqbzWdPIzRvdt+HNbyJTwQONgZNxnOnY6oQxdMAb2pTgiHBACnVSDB2jYTP3iNXMi98EYdLvBFy6HGe7wZgjO4QLTB3iV1iH+LFoaadpc35eNZ4CgxpkDsfPxDDiyFQzBCJhHK664g/CUR2Y/feEGeUpO/fCqcM8wZ8YCRZy1XrfKJqBI58MgCfik9BAh0FrIUjIqrtY1K2+egTT0gBQkUqncjzIwmBICszvBj3GkuGKMMzlQdwAoUSCGqBSw/WaG5hyUrGqKJXLzefw79er9/uxqxzknZ6/N1mHScDGXMt6be9JBvBQxf8aWReAkf/YRfwyu3ploL1DDrorHJDMRpAkoe0Y52ZV1sv0njnXa1+woJc5PVEC3onPwN0DjaTQZcEM2zsa4vGQfXSBVKYmBW4ZC1VJUiyTmrAjVIfStU0DhGLmy8JYLiQ4arKlo7HjgRmskoY/QdZqRGYr3H1ZiudMlUVjoIEyYlq0OW1cS3pFEg3lOpN9qnnlZY2TZJ1dXWrJMh46w5qgRXbUMfMrwkc4d37azQ904HB1e/UUvPuKtjn3RCp8j4FKJtBFOTmZBsuz3uuTVDP7trJ8aesmfm7ST0q8JJzB7FBih5KrG6ZKV1m0oWyerXvvliIRTBAQexQnmVsUp+yY5Olr2+CJvnwY686pcvODzi/vPKopRsfG3qia8qyotCpX+afLJL6aT7T92illLLfCg2noafDonisfh19PhgU5fpgONwzVJ6HCKURphOKlOSfSmKHWZdONVaeD0bDPef7+OjLwR8BBgD83p/V5NpKbgAAAABJRU5ErkJggg=="/>';
  16.  
  17. // app
  18. (function()
  19. {
  20. function trim(string)
  21. {return string.replace(/(^\s*)|(\s*$)/g,'');}
  22. function numberWithCommas(x)
  23. {
  24. return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
  25. }
  26.  
  27. function removeElement(node)
  28. {
  29. node.parentNode.removeChild(node);
  30. }
  31.  
  32. function extractRess(res)
  33. {
  34. if(/:/.test(res.textContent)) {
  35. res =trim(res.textContent.split(':')[1]);
  36. }
  37. else {
  38. res=trim(res.textContent);
  39. }
  40. if(/^[0-9]{1,3}\.[0-9]{3}$/.test(res))
  41. res=res.replace(/\./g,'');
  42. else if (/^[0-9]{1,3}(\.|,)[0-9]{1,3}Md/.test(res))
  43. res=res.replace(/,/g,'.').replace(/Md/g,'')*1000000000;
  44. else if (/^[0-9]{1,3}(\.|,)[0-9]{1,3}M/.test(res))
  45. res=res.replace(/,/g,'.').replace(/M/g,'')*1000000;
  46. return parseInt(res);
  47. }
  48. function raidsTable_init()
  49. {
  50. if(document.querySelector('#chatBar'))
  51. {
  52. var uiid20_ul = document.querySelector("#ui-id-20 .tab_inner:first-child");
  53. }
  54. else
  55. {
  56. var uiid20_ul = document.querySelector("#ui-id-14 .tab_inner:first-child");
  57. }
  58. var raidsTable = document.querySelector("#raidsTable_container");
  59. // on affiche le tableau s'il n'existe pas déjà
  60. if (uiid20_ul && !raidsTable)
  61. {
  62. // on récupère tous les messages
  63. var computed_messages = [];
  64. var total_resources = 0;
  65. var total_pt = 0;
  66. var total_gt = 0;
  67. var raw_messages = uiid20_ul.querySelectorAll('li.msg'), i;
  68. for(i = 0; i < raw_messages.length; i++)
  69. {
  70. var current_raw_message = raw_messages[i];
  71. var computed_message_built = {};
  72. if(current_raw_message.querySelectorAll('.espionageDefText').length == 0)
  73. {
  74. // message id
  75. computed_message_built.id = current_raw_message.getAttribute('data-msg-id');
  76. // joueur et coordonnées
  77. var player = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[0];
  78. var player_html_nodes = player.children;
  79. var player_html = "", k = 0;
  80. for(k = 1; k < player_html_nodes.length-1; k++)
  81. {
  82. if(k > 1)
  83. {
  84. player_html += ' ';
  85. }
  86. player_html += player_html_nodes[k].innerHTML
  87. }
  88. computed_message_built.player = player_html;
  89. // pourcentage butin
  90. try
  91. {
  92. var booty = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[2].querySelectorAll('span')[0];
  93. booty = booty.innerHTML;
  94. var regex = /[\d\.]+/g;
  95. booty = booty.match(regex)[0];
  96. booty = parseInt(booty);
  97. //booty = current_raw_message.getElementsByClassName('ctn ctn4')[3].textContent.replace(/[^0-9]/g,'');
  98. computed_message_built.booty = booty;
  99. }
  100. catch(err)
  101. {
  102. var booty = 100;
  103. computed_message_built.booty = booty;
  104. }
  105. // ressources
  106. var ress = current_raw_message.getElementsByClassName('resspan');
  107. var metal = extractRess(ress[0]);
  108. var crystal = extractRess(ress[1]);
  109. var deut = extractRess(ress[2]);
  110. var resources = parseInt(booty/100*(metal+crystal+deut));
  111. total_resources += resources;
  112. var fret = parseInt(resources*1.1);
  113. computed_message_built.raw_resources = resources;
  114. computed_message_built.resources = numberWithCommas(resources);
  115. // gt
  116. computed_message_built.gt = Math.round(fret/25000);
  117. total_gt += computed_message_built.gt;
  118. // pt
  119. computed_message_built.pt = Math.round(fret/5000);
  120. total_pt = computed_message_built.pt;
  121.  
  122. // liens transporteurs
  123. var link=current_raw_message.getElementsByClassName('msg_actions clearfix')[0].getElementsByTagName('a')[2].href;
  124. var APIkey = current_raw_message.getElementsByClassName('icon_apikey')[0].title.split('-')[3];
  125. computed_message_built.linkGT = link+'&am203='+computed_message_built.gt+'&addGT='+APIkey;
  126. computed_message_built.linkPT = link+'&am202='+computed_message_built.pt+'&addGT='+APIkey;
  127. // flotte
  128. try
  129. {
  130. var fleet = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[3].querySelectorAll('span')[0].getAttribute('title');
  131. computed_message_built.fleet = fleet;
  132. }
  133. catch(err)
  134. {
  135. var fleet = undefined;
  136. computed_message_built.fleet = fleet;
  137. }
  138.  
  139. // recycleurs
  140. if(fleet !== undefined)
  141. {
  142. recycler = computed_message_built.fleet.replace(/\./g , '');
  143. recycler = recycler/20000;
  144. computed_message_built.recycler_30 = Math.round(recycler*0.3);
  145. computed_message_built.recycler_50 = Math.round(recycler*0.5);
  146. computed_message_built.recycler_60 = Math.round(recycler*0.6);
  147. computed_message_built.recycler_70 = Math.round(recycler*0.7);
  148. }
  149. // défense
  150. try
  151. {
  152. var defense = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[3].querySelectorAll('span')[1].getAttribute('title');
  153. computed_message_built.defense = defense;
  154. }
  155. catch(err)
  156. {
  157. var defense = undefined;
  158. computed_message_built.defense = defense;
  159. }
  160. // bouton d'attaque
  161. var attack_button = current_raw_message.querySelectorAll('.msg_actions')[0].querySelectorAll('a')[2].getAttribute('href');
  162. computed_message_built.attack_button = attack_button;
  163. // détails
  164. var more_button = current_raw_message.querySelectorAll('.msg_actions')[0].querySelectorAll('a');
  165. more_button = more_button[more_button.length-1].getAttribute('href');
  166. computed_message_built.more_button = more_button;
  167. if(i%2 == 0)
  168. {
  169. current_raw_message.style.backgroundColor = '#111';
  170. }
  171. current_raw_message.setAttribute('id', 'anchor'+computed_message_built.id);
  172. computed_messages.push(computed_message_built);
  173. }
  174. }
  175. if(computed_messages.length > 0)
  176. {
  177. // re-ordonnement
  178. computed_messages.sort(function(a, b) {
  179. if(a.raw_resources > b.raw_resources)
  180. {
  181. return -1;
  182. }
  183. else
  184. {
  185. return 1;
  186. }
  187. return 0;
  188. });
  189. // construction du tableau
  190. var table = '<div style="text-align: center">Pillage : '+numberWithCommas(total_resources)+' | PT : '+numberWithCommas(total_pt)+' | GT : '+numberWithCommas(total_gt)+'</div>';
  191. table += '<table id="raidsTable" class="content_table">';
  192. table += '<tr class="ct_head_row">';
  193. table += '<th class="ct_th">#</th>';
  194. table += '<th class="ct_th">Joueur</th>';
  195. table += '<th class="ct_th">Flotte</th>';
  196. table += '<th class="ct_th">Défense</th>';
  197. table += '<th class="ct_th">Pillage</th>';
  198. table += '<th class="ct_th">GT</th>';
  199. table += '<th class="ct_th">PT</th>';
  200. table += '<th class="ct_th"></th>';
  201. table += '<th class="ct_th"></th>';
  202. table += '<th class="ct_th"></th>';
  203. table += '</tr>';
  204. var j;
  205. for(j = 0; j < computed_messages.length; j++)
  206. {
  207. var tr_class = j%2 == 0 ? 'odd' : 'even';
  208. var tr_row = j+1;
  209. var current_computed_message = computed_messages[j];
  210. var attack = '<a href="'+current_computed_message.attack_button+'">';
  211. attack += '<span class="icon_nf icon_attack"></span>';
  212. attack += '</a>';
  213. var del_button = '<li class="msg" data-msg-id="' + current_computed_message.id + '">';
  214. del_button += '<a class="fright" onclick="this.parentNode.parentNode.parentNode.style.display=\'none\';document.querySelector(\'#anchor' + current_computed_message.id + '\').style.display=\'none\'" href="javascript:void(0);">'; //
  215. del_button += '<span title="" class="icon_nf icon_refuse js_actionKill tooltip js_hideTipOnMobile"></span>';
  216. del_button += '</a></li>';
  217.  
  218. var more_button = '<a class="fright txt_link overlay" data-overlay-title="Plus de détails" href="'+current_computed_message.more_button+'">'+more_infos+'</a>';
  219. var recycler_title = "Aucune info.";
  220. var fleet_title = "NaN";
  221. if(current_computed_message.fleet !== undefined)
  222. {
  223. recycler_title = "<b><u>Recycleurs nécessaires</u></b>";
  224. recycler_title += "<br />30% : " + current_computed_message.recycler_30;
  225. recycler_title += "<br />50% : " + current_computed_message.recycler_50;
  226. recycler_title += "<br />60% : " + current_computed_message.recycler_60;
  227. recycler_title += "<br />70% : " + current_computed_message.recycler_70;
  228. fleet_title = current_computed_message.fleet;
  229. }
  230. var defense_title = "NaN";
  231. if(current_computed_message.defense !== undefined)
  232. {
  233. var defense_title = current_computed_message.defense;
  234. }
  235.  
  236. table += '<tr class="' + tr_class + '" id="msg_'+current_computed_message.id+'" data-id="'+current_computed_message.id+'">';
  237. table += '<td class="ct_td"><a href="#anchor'+current_computed_message.id+'">#'+tr_row+'</a></td>';
  238. table += '<td class="ct_td">' + current_computed_message.player + '</td>';
  239. table += '<td class="ct_td tooltipLeft" title="'+recycler_title+'">' + fleet_title + '</td>';
  240. table += '<td class="ct_td">' + current_computed_message.defense + '</td>';
  241. table += '<td class="ct_td tooltipLeft" title="'+current_computed_message.booty+'%">' + current_computed_message.resources + '</td>';
  242. table += '<td class="ct_td"><a href="'+current_computed_message.linkGT+'">' + current_computed_message.gt + '</a></td>';
  243. table += '<td class="ct_td"><a href="'+current_computed_message.linkPT+'">' + current_computed_message.pt + '</a></td>';
  244. table += '<td class="ct_td">'+attack+'</td>';
  245. table += '<td class="ct_td">'+more_button+'</td>';
  246. table += '<td class="ct_td">'+del_button+'</td>';
  247. table += '</tr>';
  248. }
  249. table += '</table>';
  250. var containerElement = document.createElement("div");
  251. containerElement.innerHTML = table;
  252. containerElement.id ='raidsTable_container';
  253. containerElement.style.clear = 'both';
  254. uiid20_ul.insertBefore(containerElement, uiid20_ul.firstChild);
  255. }
  256. }
  257. }
  258. setInterval(raidsTable_init, 50);
  259. })();