OGame RaidsTable

Tableau de raids

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

  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.5
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. // Compatibility OGame 6.0.8
  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. Element.prototype.hasClass = function(className) {
  21. return this.className && new RegExp("(^|\\s)" + className + "(\\s|$)").test(this.className);
  22. };
  23. function trim(string)
  24. {return string.replace(/(^\s*)|(\s*$)/g,'');}
  25. function numberWithCommas(x)
  26. {
  27. return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
  28. }
  29.  
  30. function removeElement(node)
  31. {
  32. node.parentNode.removeChild(node);
  33. }
  34.  
  35. function extractRess(res)
  36. {
  37. if(/:/.test(res.textContent)) {
  38. res =trim(res.textContent.split(':')[1]);
  39. }
  40. else {
  41. res=trim(res.textContent);
  42. }
  43. if(/^[0-9]{1,3}\.[0-9]{3}$/.test(res))
  44. res=res.replace(/\./g,'');
  45. else if (/^[0-9]{1,3}(\.|,)[0-9]{1,3}Md/.test(res))
  46. res=res.replace(/,/g,'.').replace(/Md/g,'')*1000000000;
  47. else if (/^[0-9]{1,3}(\.|,)[0-9]{1,3}M/.test(res))
  48. res=res.replace(/,/g,'.').replace(/M/g,'')*1000000;
  49. return parseInt(res);
  50. }
  51. function raidsTable_init()
  52. {
  53. if(document.querySelector('#chatBar'))
  54. {
  55. var uiid20_ul = document.querySelector("#ui-id-20 .tab_inner:first-child");
  56. }
  57. else
  58. {
  59. var uiid20_ul = document.querySelector("#ui-id-14 .tab_inner:first-child");
  60. }
  61. var raidsTable = document.querySelector("#raidsTable_container");
  62. // on affiche le tableau s'il n'existe pas déjà
  63. if (uiid20_ul && !raidsTable)
  64. {
  65. // on récupère tous les messages
  66. var computed_messages = [];
  67. var total_resources = 0;
  68. var total_pt = 0;
  69. var total_gt = 0;
  70. var raw_messages = uiid20_ul.querySelectorAll('li.msg'), i;
  71. for(i = 0; i < raw_messages.length; i++)
  72. {
  73. var current_raw_message = raw_messages[i];
  74. var computed_message_built = {};
  75. if(current_raw_message.querySelectorAll('.espionageDefText').length == 0)
  76. {
  77. // message id
  78. computed_message_built.id = current_raw_message.getAttribute('data-msg-id');
  79. // joueur
  80. var player = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[0];
  81. var player_html_nodes = player.children;
  82. var player_html = "", k = 0;
  83. for(k = 1; k < player_html_nodes.length-1; k++)
  84. {
  85. if(k > 1)
  86. {
  87. player_html += ' ';
  88. }
  89. player_html += player_html_nodes[k].innerHTML
  90. }
  91. computed_message_built.player = player_html;
  92. // coordonnées
  93. var coordinates_node = current_raw_message.querySelectorAll('.msg_head')[0].querySelectorAll('.msg_title')[0].querySelectorAll('a')[0];
  94. computed_message_built.coordinates_url = coordinates_node.getAttribute('href');
  95. var planetIcon = '';
  96. if(coordinates_node.querySelectorAll('figure')[0].hasClass('moon'))
  97. {
  98. planetIcon = ' <figure class="planetIcon moon tooltip js_hideTipOnMobile" title=""></figure>';
  99. }
  100. computed_message_built.coordinates = coordinates_node.innerHTML.match(/\[.+\]/)[0] + planetIcon;
  101. // activité
  102. var activity_node = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('.compacting')[0].querySelectorAll('.fright')[0];
  103. computed_message_built.activity_min = "";
  104. computed_message_built.activity_color = 'inherit';
  105. if(activity_node.querySelectorAll('font')[0])
  106. {
  107. computed_message_built.activity_min = activity_node.querySelectorAll('font')[0].innerHTML.match(/\d+/)[0] + 'm.';
  108. computed_message_built.activity_color = activity_node.querySelectorAll('font')[0].getAttribute('color');
  109. computed_message_built.player += ' <span style="color:'+computed_message_built.activity_color+'">'+computed_message_built.activity_min+'</span>';
  110. }
  111. // pourcentage butin
  112. try
  113. {
  114. var booty = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[2].querySelectorAll('span')[0];
  115. booty = booty.innerHTML;
  116. var regex = /[\d\.]+/g;
  117. booty = booty.match(regex)[0];
  118. booty = parseInt(booty);
  119. //booty = current_raw_message.getElementsByClassName('ctn ctn4')[3].textContent.replace(/[^0-9]/g,'');
  120. computed_message_built.booty = booty;
  121. }
  122. catch(err)
  123. {
  124. var booty = 100;
  125. computed_message_built.booty = booty;
  126. }
  127. // ressources
  128. var ress = current_raw_message.getElementsByClassName('resspan');
  129. var metal = extractRess(ress[0]);
  130. var crystal = extractRess(ress[1]);
  131. var deut = extractRess(ress[2]);
  132. var resources = parseInt(booty/100*(metal+crystal+deut));
  133. total_resources += resources;
  134. var fret = parseInt(resources*1.1);
  135. computed_message_built.raw_resources = resources;
  136. computed_message_built.resources = numberWithCommas(resources);
  137. // gt
  138. computed_message_built.gt = Math.round(fret/25000);
  139. total_gt += computed_message_built.gt;
  140. // pt
  141. computed_message_built.pt = Math.round(fret/5000);
  142. total_pt += computed_message_built.pt;
  143.  
  144. // liens transporteurs
  145. var link=current_raw_message.getElementsByClassName('msg_actions clearfix')[0].getElementsByTagName('a')[2].href;
  146. var APIkey = current_raw_message.getElementsByClassName('icon_apikey')[0].title.split('-')[3];
  147. computed_message_built.linkGT = link+'&am203='+computed_message_built.gt+'&addGT='+APIkey;
  148. computed_message_built.linkPT = link+'&am202='+computed_message_built.pt+'&addGT='+APIkey;
  149. // flotte
  150. try
  151. {
  152. var fleet = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[3].querySelectorAll('span')[0].getAttribute('title');
  153. computed_message_built.fleet = fleet;
  154. }
  155. catch(err)
  156. {
  157. var fleet = undefined;
  158. computed_message_built.fleet = fleet;
  159. }
  160.  
  161. // recycleurs
  162. if(fleet !== undefined)
  163. {
  164. recycler = computed_message_built.fleet.replace(/\./g , '');
  165. recycler = recycler/20000;
  166. computed_message_built.recycler_30 = Math.round(recycler*0.3);
  167. computed_message_built.recycler_50 = Math.round(recycler*0.5);
  168. computed_message_built.recycler_60 = Math.round(recycler*0.6);
  169. computed_message_built.recycler_70 = Math.round(recycler*0.7);
  170. }
  171. // défense
  172. try
  173. {
  174. var defense = current_raw_message.querySelectorAll('.msg_content')[0].querySelectorAll('div')[3].querySelectorAll('span')[1].getAttribute('title');
  175. computed_message_built.defense = defense;
  176. }
  177. catch(err)
  178. {
  179. var defense = undefined;
  180. computed_message_built.defense = defense;
  181. }
  182. // bouton d'attaque
  183. var attack_button = current_raw_message.querySelectorAll('.msg_actions')[0].querySelectorAll('a')[2].getAttribute('href');
  184. computed_message_built.attack_button = attack_button;
  185. // détails
  186. var more_button = current_raw_message.querySelectorAll('.msg_actions')[0].querySelectorAll('a');
  187. more_button = more_button[more_button.length-1].getAttribute('href');
  188. computed_message_built.more_button = more_button;
  189. if(i%2 == 0)
  190. {
  191. current_raw_message.style.backgroundColor = '#111';
  192. }
  193. current_raw_message.setAttribute('id', 'anchor'+computed_message_built.id);
  194. computed_messages.push(computed_message_built);
  195. }
  196. }
  197. if(computed_messages.length > 0)
  198. {
  199. // re-ordonnement
  200. computed_messages.sort(function(a, b) {
  201. if(a.raw_resources > b.raw_resources)
  202. {
  203. return -1;
  204. }
  205. else
  206. {
  207. return 1;
  208. }
  209. return 0;
  210. });
  211. // construction du tableau
  212. var table = '<div style="text-align: center">Pillage : '+numberWithCommas(total_resources)+' | PT : '+numberWithCommas(total_pt)+' | GT : '+numberWithCommas(total_gt)+'</div>';
  213. table += '<table id="raidsTable" class="content_table">';
  214. table += '<tr class="ct_head_row">';
  215. table += '<th class="ct_th">#</th>';
  216. table += '<th class="ct_th">Joueur</th>';
  217. table += '<th class="ct_th">Position</th>';
  218. table += '<th class="ct_th">Flotte</th>';
  219. table += '<th class="ct_th">Défense</th>';
  220. table += '<th class="ct_th">Pillage</th>';
  221. table += '<th class="ct_th">GT</th>';
  222. table += '<th class="ct_th">PT</th>';
  223. table += '<th class="ct_th"></th>';
  224. table += '<th class="ct_th"></th>';
  225. table += '<th class="ct_th"></th>';
  226. table += '</tr>';
  227. var j;
  228. for(j = 0; j < computed_messages.length; j++)
  229. {
  230. var tr_class = j%2 == 0 ? 'odd' : 'even';
  231. var tr_row = j+1;
  232. var current_computed_message = computed_messages[j];
  233. var attack = '<a href="'+current_computed_message.attack_button+'">';
  234. attack += '<span class="icon_nf icon_attack"></span>';
  235. attack += '</a>';
  236. var del_button = '<li class="msg" data-msg-id="' + current_computed_message.id + '">';
  237. 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);">'; //
  238. del_button += '<span title="" class="icon_nf icon_refuse js_actionKill tooltip js_hideTipOnMobile"></span>';
  239. del_button += '</a></li>';
  240.  
  241. 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>';
  242. var recycler_title = "Aucune info.";
  243. var fleet_title = "NaN";
  244. if(current_computed_message.fleet !== undefined)
  245. {
  246. recycler_title = "<b><u>Recycleurs nécessaires</u></b>";
  247. recycler_title += "<br />30% : " + current_computed_message.recycler_30;
  248. recycler_title += "<br />50% : " + current_computed_message.recycler_50;
  249. recycler_title += "<br />60% : " + current_computed_message.recycler_60;
  250. recycler_title += "<br />70% : " + current_computed_message.recycler_70;
  251. fleet_title = current_computed_message.fleet;
  252. }
  253. var defense_title = "NaN";
  254. if(current_computed_message.defense !== undefined)
  255. {
  256. var defense_title = current_computed_message.defense;
  257. }
  258.  
  259. table += '<tr class="' + tr_class + '" id="msg_'+current_computed_message.id+'" data-id="'+current_computed_message.id+'">';
  260. table += '<td class="ct_td"><a href="#anchor'+current_computed_message.id+'">#'+tr_row+'</a></td>';
  261. table += '<td class="ct_td">' + current_computed_message.player + '</td>';
  262. table += '<td class="ct_td"><a href="' + current_computed_message.coordinates_url + '">' + current_computed_message.coordinates + '</a></td>';
  263. table += '<td class="ct_td tooltipLeft" title="'+recycler_title+'">' + fleet_title + '</td>';
  264. table += '<td class="ct_td">' + current_computed_message.defense + '</td>';
  265. table += '<td class="ct_td tooltipLeft" title="'+current_computed_message.booty+'%">' + current_computed_message.resources + '</td>';
  266. table += '<td class="ct_td"><a href="'+current_computed_message.linkGT+'">' + current_computed_message.gt + '</a></td>';
  267. table += '<td class="ct_td"><a href="'+current_computed_message.linkPT+'">' + current_computed_message.pt + '</a></td>';
  268. table += '<td class="ct_td">'+attack+'</td>';
  269. table += '<td class="ct_td">'+more_button+'</td>';
  270. table += '<td class="ct_td">'+del_button+'</td>';
  271. table += '</tr>';
  272. }
  273. table += '</table>';
  274. var containerElement = document.createElement("div");
  275. containerElement.innerHTML = table;
  276. containerElement.id ='raidsTable_container';
  277. containerElement.style.clear = 'both';
  278. uiid20_ul.insertBefore(containerElement, uiid20_ul.firstChild);
  279. }
  280. }
  281. }
  282. setInterval(raidsTable_init, 50);
  283. })();