OGame: Resources on Transit

OGame: Displays resources on transit

  1. // ==UserScript==
  2. // @name OGame: Resources on Transit
  3. // @namespace https://greasyfork.org/users/4668-black-cat
  4. // @description OGame: Displays resources on transit
  5. // @version 5.4
  6. // @creator Black Cat
  7. // @include http://*.ogame.gameforge.com/game/index.php?page=overview*
  8. // @include http://*.ogame.gameforge.com/game/index.php?page=movement*
  9. // ==/UserScript==
  10.  
  11. var strFunc = (function(){
  12. var language = document.querySelector("meta[name=ogame-language]").getAttribute("content");
  13. var strTitle,strTotal,strLoading;
  14. switch (language) {
  15. case "fr":
  16. strTitle = "Ressources en transit";
  17. strTotal = "Total:";
  18. strLoading = "Chargement...";
  19. break;
  20. default:
  21. strTitle = "Resources on transit";
  22. strTotal = "Total:";
  23. strLoading = "Loading...";
  24. break;
  25. }
  26. var arrstrResources = [];
  27. $("#resources .tooltipHTML").each(function () {
  28. var title = $(this).attr("title") || $(this).data("tipped_restore_title");
  29. if (title) {
  30. arrstrResources.push(title.split("|")[0]);
  31. }
  32. });
  33.  
  34. var addDots = function(nb) {
  35. nb = nb + "";
  36. while (/\d{4}/.test(nb)) {
  37. nb = nb.replace(/(\d+)(\d{3})/,"$1.$2");
  38. }
  39. return nb;
  40. }
  41.  
  42. var sort_planets = function(a,b) {
  43. /(\d*):(\d*):(\d*)/.exec(a);
  44. var galaxy1 = parseInt(RegExp.$1);
  45. var system1 = parseInt(RegExp.$2);
  46. var planet1 = parseInt(RegExp.$3);
  47. /(\d*):(\d*):(\d*)/.exec(b);
  48. var galaxy2 = parseInt(RegExp.$1);
  49. var system2 = parseInt(RegExp.$2);
  50. var planet2 = parseInt(RegExp.$3);
  51. if (galaxy1 > galaxy2) return 1;
  52. else if (galaxy1 < galaxy2) return -1;
  53. if (system1 > system2) return 1;
  54. else if (system1 < system2) return -1;
  55. if (planet1 > planet2) return 1;
  56. else if (planet1 < planet2) return -1;
  57. return 0;
  58. }
  59.  
  60. var refresh = "data:image/png;base64,R0lGODlhEAAQAOYAAGB6jpGmtdXe5V54jXGKntrh5vDz9nCJnYedrqu7x/3+/+3w8+zw9LfFz/L1+GZ/k3ePo/7//42gsI2isrC+ycjT22uDlsDM1aGwvXONoIacreHm64ugsai2wpaotq+8x6GywHWOodri5pCltWF7j/Dz9crU3HSNoI+jsdDa4IqfrnmSpNjh6K+9yevv8/j5++Xq7qu4w2J7kMjU3HmRpKi5xtzi6KW0v3iNn7rFzvr7/bzJ04SaqnaMnsjU3X+VpgAAAP///2+JnVx2iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAdxgEBDg4SFhYKGiYqGMoM/D4tDODc+FB4MPIoAMS8uJhtBQTskiQA5HRYDLQpBOiqRgz0oGB8SsItCubq7vLscGidCB728AgsFFTTEuwmhLCsEGQECAb0QBiUOMCkiETYIxDUjEw0zFyAhy+q6QOu7QIEAOw==";
  61.  
  62. var isPageMovement = (document.location.href.indexOf("page=movement") != -1);
  63.  
  64. var clearFloat = document.createElement("div");
  65. clearFloat.className = "clearfloat";
  66. var mydiv = document.createElement("div");
  67. mydiv.id = "resourcesontransitWrapper";
  68. mydiv.style.width = "667px";
  69. mydiv.style.cssFloat = "left";
  70. mydiv.style.overflow = "auto";
  71. var header = "<div id='resourcesontransitHeader' style='background: url(\"http://gf1.geo.gfsrv.net/cdn63/10e31cd5234445e4084558ea3506ea.gif\") no-repeat scroll 0 0 transparent; height: 28px; padding: 0 20px; position: relative; text-align: center;'><h3 style='color: #6F9FC8; font-size: 11px; font-weight: 700; margin: 0; padding: 9px 0 0;'>" + (!isPageMovement?"<a href='javascript:void(0);' id='resourcesontransitRefresh'><img style='vertical-align:middle;' src='" + refresh + "' /></a> ":"") + strTitle + "</h3></div>";
  72. var content = "<div id='resourcesontransitContent' style='background: url(\"http://gf1.geo.gfsrv.net/cdn9e/4f73643e86a952be4aed7fdd61805a.gif\") repeat-y scroll 5px 0 transparent; text-align:center; padding-top: 5px;'></div>";
  73. var footer = "<div id='resourcesontransitFooter' style='background: url(\"http://gf1.geo.gfsrv.net/cdn30/aa3e8edec0a2681915b3c9c6795e6f.gif\") no-repeat scroll 2px 0 transparent; height: 17px;'></div>";
  74. mydiv.innerHTML = header + content + footer;
  75. var inhalt = document.getElementById("inhalt");
  76. inhalt.appendChild(mydiv);
  77. inhalt.appendChild(clearFloat.cloneNode(false));
  78. var resourcesontransitContent = document.getElementById("resourcesontransitContent");
  79.  
  80. var resources = {};
  81. var resourcesNames = ["","",""];
  82. var displayResourcesOnTransit = function() {
  83. var rightMenu = document.getElementById("rechts");
  84. var activeLink = rightMenu.getElementsByClassName("active")[0];
  85. var thisCoords;
  86. if (activeLink) {
  87. thisCoords = activeLink.parentNode.getElementsByClassName("planet-koords")[0].textContent;
  88. } else {
  89. thisCoords = rightMenu.getElementsByClassName("planet-koords")[0].textContent;
  90. }
  91. thisCoords = $.trim(thisCoords);
  92. var thisResources = [0,0,0];
  93. thisResources[0] = parseInt(document.getElementById("resources_metal").innerHTML.replace(/\D/g, ''));
  94. thisResources[1] = parseInt(document.getElementById("resources_crystal").innerHTML.replace(/\D/g, ''));
  95. thisResources[2] = parseInt(document.getElementById("resources_deuterium").innerHTML.replace(/\D/g, ''));
  96.  
  97. var planets = [];
  98. for (var i in resources) {
  99. planets.push(i);
  100. }
  101. planets.sort(sort_planets);
  102.  
  103. var table = document.createElement("table");
  104. table.style.borderCollapse = "collapse";
  105. table.style.marginLeft = "auto";
  106. table.style.marginRight = "auto";
  107. table.cellSpacing = "0";
  108. table.cellPadding = "0";
  109. var tr1 = document.createElement("tr");
  110. var th1 = document.createElement("th");
  111. th1.style.textAlign = "center";
  112. th1.style.padding = "3px";
  113. th1.style.color = "#6F9FC8";
  114. var td1 = document.createElement("td");
  115. td1.style.textAlign = "right";
  116. td1.style.border = "1px solid #A26D00";
  117. td1.style.padding = "3px";
  118. var tr = tr1.cloneNode(false);
  119. var th = th1.cloneNode(false);
  120. th.textContent = " ";
  121. tr.appendChild(th);
  122. th1.style.border = "1px solid #A26D00";
  123. for (var k=0;k<planets.length;k++) {
  124. var i = planets[k];
  125. th = th1.cloneNode(false);
  126. th.textContent = i;
  127. tr.appendChild(th);
  128. }
  129. th = th1.cloneNode(false);
  130. th.textContent = strTotal;
  131. tr.appendChild(th);
  132. table.appendChild(tr);
  133. var td;
  134. var sum;
  135. for (var j=0;j<3;j++) {
  136. if (resourcesNames[j] != "") {
  137. sum = 0;
  138. tr = tr1.cloneNode(false);
  139. th = th1.cloneNode(false);
  140. th.textContent = resourcesNames[j];
  141. tr.appendChild(th);
  142. for (var k=0;k<planets.length;k++) {
  143. var i = planets[k];
  144. var tmp = resources[i][j];
  145. sum += tmp;
  146. td = td1.cloneNode(false);
  147. td.textContent = addDots(tmp);
  148. if (i == thisCoords) {
  149. td.className = "tooltipRight js_hideTipOnMobile";
  150. td.title = addDots(tmp+thisResources[j]);
  151. }
  152. tr.appendChild(td);
  153. }
  154. td = td1.cloneNode(false);
  155. td.textContent = addDots(sum);
  156. tr.appendChild(td);
  157. table.appendChild(tr);
  158. }
  159. }
  160. tr = tr1.cloneNode(false);
  161. th = th1.cloneNode(false);
  162. th.textContent = strTotal;
  163. tr.appendChild(th);
  164. sum = 0;
  165. for (var k=0;k<planets.length;k++) {
  166. var i = planets[k];
  167. var tmp = resources[i][0] + resources[i][1] + resources[i][2];
  168. sum += tmp;
  169. td = td1.cloneNode(false);
  170. td.textContent = addDots(tmp);
  171. if (i == thisCoords) {
  172. td.className = "tooltipRight js_hideTipOnMobile";
  173. td.title = addDots(tmp+thisResources[0]+thisResources[1]+thisResources[2]);
  174. }
  175. tr.appendChild(td);
  176. }
  177. td = td1.cloneNode(false);
  178. td.textContent = addDots(sum);
  179. tr.appendChild(td);
  180. table.appendChild(tr);
  181. resourcesontransitContent.innerHTML = "";
  182. resourcesontransitContent.appendChild(table);
  183. }
  184.  
  185. if (isPageMovement) {
  186. mydiv.style.marginTop = "5px";
  187. $("#inhalt .fleetDetails").each(function () {
  188. var fleetDetails = $(this);
  189. if (isMobile) {
  190. var metal = 0;
  191. var cristal = 0;
  192. var deuterium = 0;
  193. fleetDetails.find(".fleet_details > ul.fleet_detail_list > li").each(function () {
  194. var div = $(this).find("div").eq(0);
  195. if (div.hasClass("metal")) {
  196. metal = parseInt($(this).text().replace(/\D/g, ""));
  197. } else if (div.hasClass("crystal")) {
  198. cristal = parseInt($(this).text().replace(/\D/g, ""));
  199. } else if (div.hasClass("deuterium")) {
  200. deuterium = parseInt($(this).text().replace(/\D/g, ""));
  201. }
  202. });
  203. resourcesNames = [arrstrResources[0],arrstrResources[1],arrstrResources[2]];
  204. if (metal + cristal + deuterium > 0) {
  205. var detailsClass = fleetDetails.find(".route a span").eq(0).attr("class");
  206. var isReverse = (detailsClass.indexOf("reverse")!=-1);
  207. var missionId = fleetDetails.attr("data-mission-type");
  208. var coords;
  209. if (isReverse || (missionId != 3 && missionId != 4 && missionId != 7)) {
  210. coords = fleetDetails.find(".origin .coords").eq(0).text();
  211. } else {
  212. coords = fleetDetails.find(".destination .coords").eq(0).text();
  213. }
  214. coords = $.trim(coords);
  215. if (resources[coords]) {
  216. metal += resources[coords][0];
  217. cristal += resources[coords][1];
  218. deuterium += resources[coords][2];
  219. }
  220. resources[coords] = [metal,cristal,deuterium];
  221. }
  222. } else {
  223. var href = fleetDetails.find(".route a").eq(0).attr("href");
  224. var tooltip = $(href);
  225. var tooltip_th = tooltip.find("th").eq(1);
  226. if (tooltip_th.length > 0) {
  227. var tooltip_tr = tooltip_th.parent().nextAll();
  228. var metal = parseInt(tooltip_tr.eq(0).find("td").eq(1).text().replace(/\D/g, ""));
  229. var cristal = parseInt(tooltip_tr.eq(1).find("td").eq(1).text().replace(/\D/g, ""));
  230. var deuterium = parseInt(tooltip_tr.eq(2).find("td").eq(1).text().replace(/\D/g, ""));
  231. if (resourcesNames[0] == "") {
  232. resourcesNames[0] = tooltip_tr.eq(0).find("td").eq(0).text();
  233. resourcesNames[1] = tooltip_tr.eq(1).find("td").eq(0).text();
  234. resourcesNames[2] = tooltip_tr.eq(2).find("td").eq(0).text();
  235. }
  236. if (metal + cristal + deuterium > 0) {
  237. var detailsClass = fleetDetails.find(".route a").eq(0).attr("class");
  238. var isReverse = (detailsClass.indexOf("reverse")!=-1);
  239. var missionId = fleetDetails.attr("data-mission-type");
  240. var coords;
  241. if (isReverse || (missionId != 3 && missionId != 4 && missionId != 7)) {
  242. coords = fleetDetails.find(".originCoords").eq(0).text();
  243. } else {
  244. coords = fleetDetails.find(".destinationCoords").eq(0).text();
  245. }
  246. coords = $.trim(coords);
  247. if (resources[coords]) {
  248. metal += resources[coords][0];
  249. cristal += resources[coords][1];
  250. deuterium += resources[coords][2];
  251. }
  252. resources[coords] = [metal,cristal,deuterium];
  253. }
  254. }
  255. }
  256. });
  257. displayResourcesOnTransit();
  258. } else {
  259. var readEvents = function() {
  260. resources = {};
  261. resourcesNames = ["","",""];
  262. var idRequested = ","; //only those on the way out
  263. $("#eventContent .eventFleet").each(function () {
  264. var eventFleet = $(this);
  265. var td;
  266. if (isMobile) {
  267. td = eventFleet.find("td.detailsFleet");
  268. } else {
  269. td = eventFleet.find("td[class^='icon_movement']");
  270. }
  271. var tooltip = td.find("span.tooltip").eq(0);
  272. var title = tooltip.attr("title") || tooltip.data("tipped_restore_title");
  273. if (title) {
  274. var eventId = eventFleet.attr("id").replace(/\D/g, '');
  275. var isReverse;
  276. if (isMobile) {
  277. isReverse = !(tooltip.find("span").eq(0).hasClass("icon_movement"));
  278. } else {
  279. isReverse = !(tooltip.parent().hasClass("icon_movement"));
  280. }
  281. if (!isReverse || idRequested.indexOf(","+(parseInt(eventId)-1)+",") == -1) {
  282. var missionId = eventFleet.attr("data-mission-type");
  283. if (isReverse || missionId == 3 || missionId == 4 || missionId == 7) {
  284. var coords;
  285. if (isReverse) {
  286. coords = eventFleet.find(".coordsOrigin").eq(0).text().replace(/^[^[]*\[/,"[");
  287. } else {
  288. idRequested += eventId + ",";
  289. coords = eventFleet.find(".destCoords").eq(0).text().replace(/^[^[]*\[/,"[");
  290. }
  291. coords = $.trim(coords);
  292. var tooltip_th = title.replace(/\n/g,"").split("<th");
  293. if (tooltip_th[2]) {
  294. var tooltip_td = tooltip_th[2].split("<td");
  295. var metal = parseInt(tooltip_td[2].replace(/^[^>]*>([^<]*).*$/,"$1").replace(/\D/g, ""));
  296. var cristal = parseInt(tooltip_td[4].replace(/^[^>]*>([^<]*).*$/,"$1").replace(/\D/g, ""));
  297. var deuterium = parseInt(tooltip_td[6].replace(/^[^>]*>([^<]*).*$/,"$1").replace(/\D/g, ""));
  298. if (resourcesNames[0] == "") {
  299. resourcesNames[0] = tooltip_td[1].replace(/^[^>]*>([^<]*).*$/,"$1");
  300. resourcesNames[1] = tooltip_td[3].replace(/^[^>]*>([^<]*).*$/,"$1");
  301. resourcesNames[2] = tooltip_td[5].replace(/^[^>]*>([^<]*).*$/,"$1");
  302. }
  303. if (metal + cristal + deuterium > 0) {
  304. if (resources[coords]) {
  305. metal += resources[coords][0];
  306. cristal += resources[coords][1];
  307. deuterium += resources[coords][2];
  308. }
  309. resources[coords] = [metal,cristal,deuterium];
  310. }
  311. }
  312. }
  313. }
  314. }
  315. });
  316. displayResourcesOnTransit();
  317. }
  318.  
  319. mydiv.style.marginBottom = "5px";
  320.  
  321. $(document).ajaxSuccess(function(e,xhr,settings){
  322. var page = settings.url.replace(/^.*page=([a-zA-Z]*).*$/,"$1");
  323. if (page != "eventList") return;
  324.  
  325. readEvents();
  326. });
  327.  
  328. var resourcesontransitRefresh = document.getElementById("resourcesontransitRefresh");
  329. resourcesontransitRefresh.addEventListener(
  330. "click",
  331. function () {
  332. resourcesontransitContent.innerHTML = strLoading;
  333. $("#eventboxContent").html('<img height="16" width="16" src="/cdn/img/ajax-loader.gif" />');
  334. $.get(eventlistLink, function (data) {
  335. $("#eventboxContent").html(data);
  336. toggleEvents.loaded=true;
  337. });
  338. },
  339. false
  340. );
  341.  
  342. if ($("#eventboxContent").is(":visible")) {
  343. readEvents();
  344. }
  345. }
  346. }).toString();
  347.  
  348. var script = document.createElement("script");
  349. script.setAttribute("type","text/javascript");
  350. script.text = "(" + strFunc + ")();";
  351. document.body.appendChild(script);
  352.