Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.41 KB | None | 0 0
  1. // ==UserScript==
  2. // @name MA - hlidka
  3. // @version 2.0
  4. // @description utility
  5. // @grant none
  6. // @require http://code.jquery.com/jquery-1.10.2.min.js
  7. // @require https://canvasjs.com/assets/script/canvasjs.min.js
  8. // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js
  9. // @include http://www.meliorannis.com/*
  10. // @include https://speed.meliorannis.com/*
  11. // ==/UserScript==
  12.  
  13. Array.prototype.diff = function(a) {
  14. return this.filter(function(i) {return a.indexOf(i) < 0;});
  15. };
  16.  
  17. var percentColors = [
  18. { pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },
  19. { pct: 0.5, color: { r: 168, g: 168, b: 168 } },
  20. { pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ];
  21.  
  22. var percentToColor = function(pct)
  23. {
  24. for (var i = 0; i < percentColors.length; i++)
  25. {
  26. if (pct <= percentColors[i].pct)
  27. {
  28. var lower = (i === 0) ? percentColors[i] : percentColors[i - 1];
  29. var upper = (i === 0) ? percentColors[i + 1] : percentColors[i];
  30. var range = upper.pct - lower.pct;
  31. var rangePct = (pct - lower.pct) / range;
  32. var pctLower = 1 - rangePct;
  33. var pctUpper = rangePct;
  34.  
  35. var color =
  36. {
  37. r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),
  38. g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),
  39. b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)
  40. };
  41.  
  42. return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';
  43. }
  44. }
  45. };
  46.  
  47. function getLastDbValue(id, property, searchHoursInPast)
  48. {
  49. var dbValues = localStorage[id];
  50. if (dbValues)
  51. {
  52. dbValues = JSON.parse(dbValues);
  53.  
  54. if (!searchHoursInPast)
  55. {
  56. dbValues.reverse();
  57. }
  58.  
  59. for (var i in dbValues) {
  60.  
  61. var hourDifference = Math.abs(new Date() - new Date(dbValues[i].date)) / (1000 * 60 * 60);
  62. if (searchHoursInPast && hourDifference < searchHoursInPast && dbValues[i][property])
  63. {
  64. if (dbValues[i][property])
  65. return dbValues[i][property];
  66. }
  67. else if (!searchHoursInPast && dbValues[i][property])
  68. {
  69. if (dbValues[i][property])
  70. return dbValues[i][property];
  71. }
  72. }
  73. }
  74. }
  75.  
  76. function renderChangesValue(id, power, area, powerPos, areaPos, row, ot, otPos, pastValueResolver)
  77. {
  78. var powerDb = pastValueResolver(id, 'power');
  79. var areaDb = pastValueResolver(id, 'area');
  80. var otDb = pastValueResolver(id, 'ot');
  81.  
  82. var columns = $(row).children();
  83.  
  84. var powerColumn = $(columns[powerPos]);
  85. renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb, true, powerColumn);
  86.  
  87. $('#' + id + '-dialog').click(function() {
  88. $('#' + id + '-dialog').css("display", "none");
  89. });
  90.  
  91. if(areaPos)
  92. {
  93. var areaColumn = $(columns[areaPos]);
  94. renrerValue(id, 'area', area, areaDb==-1 ? area : areaDb, false, areaColumn);
  95. }
  96.  
  97. if (otPos)
  98. {
  99. var otPlus = Number(ot) - Number(otDb);
  100.  
  101. if (otPlus || otPlus > -1)
  102. {
  103. var otColumn = $(columns[otPos]);
  104. renrerValue(id, 'ot', otPlus, otPlus, false, otColumn);
  105. }
  106. }
  107. }
  108.  
  109. function renrerValue(id, type, value, valueDb, isPercent, whereToRender)
  110. {
  111.  
  112. var percent = Math.round(percent * 10) / 10;
  113. percent = (value / (valueDb / 100) - 100).toFixed(1) + '%';
  114.  
  115. var val = (Math.round((value - valueDb) / 100) / 10) + 'k';
  116.  
  117. if (type === 'ot')
  118. {
  119. val = value;
  120. }
  121.  
  122. var element = '<font size="2" class="to-remove">(<span id="' + id + '-' + type + '" class="' + type +'">' + (isPercent ? percent : val) + '</span>)';
  123. whereToRender.append(element);
  124. whereToRender.click(function()
  125. {
  126. var storage = localStorage[id];
  127. var fakeRowId = 'fakeRow' + id;
  128.  
  129. if (storage && $('#' + fakeRowId).length === 0)
  130. {
  131. var data = JSON.parse(storage);
  132. data.reverse();
  133.  
  134. $('<tr class="fakeRow"><td colspan="20" >' +
  135. '<div id="' + fakeRowId + '"style="background-color: white; width: 100%;"></div>' +
  136. '</td></tr>').insertAfter($(whereToRender.parent()));
  137.  
  138. renderChart(data, 'power', id, $('#' + fakeRowId), 24);
  139. renderChart(data, 'area', id, $('#' + fakeRowId), 24);
  140. renderChart(data, 'ot', id, $('#' + fakeRowId), 24);
  141. }
  142. else
  143. {
  144. $('.fakeRow').remove();
  145. }
  146.  
  147. });
  148. }
  149.  
  150. function renderChart(data, type, id, elemtToAppend, hoursBack)
  151. {
  152. var chartId = type + 'Chart' + id;
  153.  
  154. $(elemtToAppend).append('<div id="' + chartId + '" style="height: 200px; width: 100%;"/>');
  155. $('#' + id).click(event => event.stopPropagation());
  156.  
  157. var datasets = createDataSet(data, type, hoursBack);
  158.  
  159. var chart = new CanvasJS.Chart(chartId, {
  160. animationEnabled: false,
  161. zoomEnabled: true,
  162. title: {
  163. text: type
  164. },
  165. axisX: {
  166. title: "Time"
  167. },
  168. axisY: {
  169. title: type,
  170. includeZero: false
  171. },
  172. data: [{
  173. type: "line",
  174. name: type,
  175. xValueType: "dateTime",
  176. xValueFormatString: "DD MMM hh:mm TT",
  177. yValueFormatString: "#,##0.##",
  178. dataPoints: datasets
  179. }]
  180. });
  181.  
  182. chart.render();
  183. }
  184.  
  185. function createDataSet(data, type, hoursBack)
  186. {
  187. var clearData = $(data).filter(
  188. function(index, row)
  189. {
  190. var hourDiff = Math.round(((new Date() - new Date(row.date)) / 36e5) * 10) / 10;
  191. return row[type] && hourDiff < hoursBack;
  192. });
  193.  
  194. var chartData=[];
  195.  
  196. var yesterday = new Date(new Date().getTime() - (hoursBack * 60 * 60 * 1000));
  197. chartData.push({x : yesterday, y : null});
  198.  
  199. $.each(clearData, function(index, packet)
  200. {
  201. if (packet[type])
  202. {
  203. chartData.push({x : new Date(packet.date), y : parseFloat(packet[type])});
  204. }
  205. });
  206. chartData.push({x : new Date(new Date().getTime() + 60 * 1000), y : null});
  207.  
  208. return chartData;
  209. }
  210.  
  211. function formatDate(date)
  212. {
  213. var d = new Date(date);
  214. return [d.getDate(), (d.getMonth()+1)].join('.') + ' ' +
  215. [ d.getHours(), d.getMinutes()].join(':');
  216. }
  217.  
  218. function spies()
  219. {
  220. var table = $('#spies_report');
  221.  
  222. if (table)
  223. {
  224. var id = table.find('sup').text().replace('(', '').replace(')', '');
  225. var powerColumn = table.find('td:contains("Síla provincie")').next();
  226. var power = Number(powerColumn.text().split('(')[0]);
  227. var powerMine = Number($('.value_power').text());
  228.  
  229. var powerDb = getLastDbValue(id, 'power');
  230.  
  231. if (powerColumn.length !== 0)
  232. {
  233. powerColumn.append('<br/><a id="adjustArmy" style="color: green;">Pripravit armadu</a>');
  234. renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb, true, powerColumn);
  235. }
  236.  
  237. $('#adjustArmy').click(
  238. function() {
  239. localStorage.powerDiff = (power * 1.245) - powerMine;
  240. window.location.href = $( "a:contains('Armáda')" ).attr('href');
  241. });
  242. }
  243.  
  244. $('#left_column_wrapper').append('<label>Nazev jednotky stitu</label><br/>');
  245. $('#left_column_wrapper').append('<input type="text" id="shieldUnit" style="width: 120px;" />');
  246.  
  247. $('#shieldUnit').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  248. $('#shieldUnit').val(localStorage.shieldUnit ? localStorage.shieldUnit : '');
  249. $('#shieldUnit').on("change keyup paste", function() { localStorage.shieldUnit = $('#shieldUnit').val();});
  250.  
  251. if (localStorage.powerDiff && localStorage.powerDiff !== '' && localStorage.shieldUnit)
  252. {
  253. var selectUnit = $($('select')[1]).find('option:contains(' + localStorage.shieldUnit + ')').val();
  254. var unitPower = Number($('#army_table_army tr:contains(' + localStorage.shieldUnit + ') .army_unit_power').text());
  255. var unitExp = Number($('#army_table_army tr:contains(' + localStorage.shieldUnit + ') .army_unit_exp').text().replace('%', '').trim());
  256.  
  257. var oneUnitPower;
  258.  
  259. if (localStorage.powerDiff < 0)
  260. {
  261. oneUnitPower = (unitPower / 100) * unitExp;
  262. $($('select')[0]).val(selectUnit);
  263. $($('input[name="kolik"]')[0]).val(Math.abs(Math.round(localStorage.powerDiff / oneUnitPower)));
  264. $($('input[name="kolik"]')[0]).change();
  265. }
  266. else
  267. {
  268. oneUnitPower = unitPower * 0.4;
  269. $($('select')[1]).val(selectUnit);
  270. $($('input[name="kolik"]')[1]).val(Math.abs(Math.round(localStorage.powerDiff / oneUnitPower)));
  271. $($('input[name="kolik"]')[1]).change();
  272. }
  273.  
  274. localStorage.powerDiff = '';
  275. }
  276. }
  277.  
  278. function makeTableOrderable()
  279. {
  280. var tables = $('table:not("#attacks_units_selection")');
  281.  
  282. $.each(
  283. tables,
  284. function (i, table)
  285. {
  286.  
  287. var headRow = $(table).find('.heading');
  288.  
  289. var headColumns = $(headRow).find('td:not(:contains("Protekce"))');
  290. $.each(headColumns,
  291. function (index, value)
  292. {
  293. $(value).click(function(){
  294. var table = $(this).parents('table').eq(0)
  295. var rows = table.find('tr:not(".playerUnits"):gt(0)').toArray().sort(comparer($(this).index()))
  296. this.asc = !this.asc
  297. if (!this.asc){rows = rows.reverse()}
  298. for (var i = 0; i < rows.length; i++){table.append(rows[i])}
  299. })
  300. });
  301. });
  302.  
  303. function comparer(index) {
  304. return function(a, b) {
  305. var valA = getCellValue(a, index);
  306. var valB = getCellValue(b, index);
  307.  
  308. if ($.isNumeric(valA.replace(" ", "").replace(/ *\([^)]*\) */g, "")))
  309. {
  310. valA = valA.replace(" ", "").replace(/ *\([^)]*\) */g, "");
  311. valB = valB.replace(" ", "").replace(/ *\([^)]*\) */g, "");
  312. }
  313.  
  314. return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB);
  315. }
  316. }
  317. function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
  318. }
  319.  
  320. function renderTableInfo(table, pastValueResolver, updateDbData)
  321. {
  322. var rows = $(table).find('tr:not(".playerUnits")');
  323.  
  324. var headRow = $(table).find('.heading');
  325.  
  326. var idPos;
  327. var namePos;
  328. var powerPos;
  329. var areaPos;
  330. var otPos;
  331. var protPos;
  332.  
  333. var headColumns = $(headRow).find('td');
  334. if(headColumns.length === 0)
  335. headColumns = $(headRow).find('th');
  336. $.each(headColumns,
  337. function (index, value)
  338. {
  339. var text = $(value).text().trim();
  340. if(text==='ID')
  341. idPos = index;
  342. if(text==='Regent')
  343. namePos = index;
  344. if(text.indexOf("Síla")===0)
  345. powerPos = index;
  346. if(text==='Rozloha' || text === 'hAR')
  347. areaPos = index;
  348. if(text==='O.T.')
  349. otPos = index;
  350. if(text===' Protekce')
  351. protPos = index;
  352.  
  353. });
  354.  
  355. $.each(rows,
  356. function (index, value)
  357. {
  358. if (index > 0) // skip header row
  359. {
  360. var columns = $(value).children();
  361. var id = $(columns[idPos]).children("span").clone().children().remove().end().text().trim();
  362.  
  363. if (!id)
  364. {
  365. id = $(columns[idPos]).text().trim();
  366. }
  367.  
  368. var name = $(columns[namePos]).text().trim();
  369. var power = $(columns[powerPos]).text().split('*').join('').trim();
  370. var area;
  371. var ot;
  372. var prot;
  373.  
  374. if(areaPos)
  375. area = $(columns[areaPos]).text().trim();
  376. if(otPos)
  377. ot = $(columns[otPos]).text().trim();
  378. if (protPos)
  379. prot = $(value).find('.listings_prot_mil').length === 1 ? "true" : "false";
  380.  
  381. renderChangesValue(id, power, area, powerPos, areaPos, value, ot, otPos, pastValueResolver);
  382.  
  383. if(!isNaN(parseFloat(id)))
  384. {
  385. var data = localStorage[id];
  386. var array = [];
  387.  
  388. var lastDbValPower;
  389. var lastDbValOt;
  390. var lastDbValArea;
  391. var lastDbValProt;
  392. var dataChanged = true;
  393.  
  394. if(data)
  395. {
  396. array = JSON.parse(data);
  397. lastDbValPower = array[array.length-1]['power'];
  398. lastDbValOt = array[array.length-1]['ot'];
  399. lastDbValArea = array[array.length-1]['area'];
  400. lastDbValProt = array[array.length-1]['prot'];
  401. }
  402.  
  403. if (lastDbValPower || lastDbValOt || lastDbValArea)
  404. dataChanged = (typeof power !== "undefined" && power !== lastDbValPower) ||
  405. (typeof ot !== "undefined" && ot !== lastDbValOt) ||
  406. (typeof area !== "undefined" && area !== lastDbValArea) ||
  407. (typeof prot !== "undefined" && prot !== lastDbValProt);
  408.  
  409. if (updateDbData)
  410. {
  411. if (dataChanged)
  412. {
  413. array.push({"power" : power, "area" : area, "date" : Date(), "ot" : ot, "name": name, "prot" : prot});
  414. localStorage[id] = JSON.stringify(array);
  415. }
  416. else if (array.length > 0)
  417. {
  418. array[array.length-1].date = new Date();
  419. localStorage[id] = JSON.stringify(array);
  420. }
  421. }
  422. }
  423. }
  424. });
  425.  
  426. colorPercentages(table, '.power');
  427. colorPercentages(table, '.area');
  428. colorPercentages(table, '.ot');
  429. }
  430.  
  431. function main()
  432. {
  433. var tables = $('table:contains("Síla"):contains("ID"):not(.onlinePlayers):not(#search_results_table)');
  434.  
  435. var pastValueResolver = (id, prop) => getLastDbValue(id, prop);
  436. $.each(tables, function (i, table) { renderTableInfo(table, pastValueResolver, true); });
  437. }
  438.  
  439. function colorPercentages(table, selector)
  440. {
  441. var percentElements = $(table).find(selector);
  442. var percentValues = $.map(
  443. percentElements,
  444. function(value)
  445. {
  446. return $(value).text().replace('k','').replace('%', '').replace('(', '').replace(')', '');
  447. }
  448. );
  449. var percentMax = Math.max.apply(Math, percentValues);
  450. var percentMin = Math.min.apply(Math, percentValues);
  451.  
  452. percentMax = percentMax === 0 ? 1 : percentMax;
  453. percentMin = percentMin === 0 ? 1 : percentMin;
  454.  
  455. $.each(
  456. percentElements,
  457. function(index, value)
  458. {
  459.  
  460. var currentValue = $(value).text().replace('k','').replace('%', '').replace('(', '').replace(')', '');
  461. var relativePercent = 0;
  462.  
  463. if(currentValue >= 0)
  464. {
  465. relativePercent = 50 + (Math.abs(currentValue) / (Math.abs(percentMax) / 50));
  466. }
  467. else
  468. {
  469. relativePercent = 50 - (Math.abs(currentValue) / (Math.abs(percentMin) / 50));
  470. }
  471.  
  472. $(value).css('color', percentToColor(relativePercent / 100));
  473. }
  474. );
  475. }
  476.  
  477. function renderHistoryTextField()
  478. {
  479. var tables = $('table:contains("Síla"):contains("ID"):not(.onlinePlayers):not(#search_results_table)');
  480.  
  481. $.each(
  482. tables,
  483. function (i, table)
  484. {
  485. $(table).after("<label>Pocet hodin do zadu</label><input id='hour-field" + i + "' type='text'/>");
  486. $('#hour-field' + i).change(function()
  487. {
  488. var searchHoursInPast = Number($( this ).val().trim());
  489. var pastValueResolver = (id, prop) => getLastDbValue(id, prop, searchHoursInPast);
  490.  
  491. $(table).find(".to-remove").remove();
  492. renderTableInfo(table, pastValueResolver, false);
  493. });
  494. });
  495. }
  496.  
  497. function kokotMeasure()
  498. {
  499. if (!localStorage.kokotMeasure)
  500. localStorage.kokotMeasure = 0;
  501. localStorage.kokotMeasure = Number(localStorage.kokotMeasure) + 1;
  502. $('body').append('<label style="position: absolute; left: 0; top: 0;">Jak velky jsi kokot: ' + localStorage.kokotMeasure + '</div>');
  503. }
  504.  
  505. function myPower()
  506. {
  507. var power = $('.value_power').text();
  508. var powerDb = Number(localStorage.me);
  509. var powerDifference = (power - powerDb);
  510.  
  511. if (powerDifference)
  512. {
  513. $('#LS_power_value').append('<span id="powerId" style="padding-left: 5px;">' + powerDifference + '</span>');
  514.  
  515. if (powerDifference < 0)
  516. {
  517. $('#powerId').css('color', 'RGB(255, 0, 0)');
  518.  
  519. document.title = 'Pokles o ' + powerDifference;
  520. beep(powerDifference);
  521. }
  522. else
  523. {
  524. $('#powerId').css('color', 'RGB(0, 255, 0)');
  525. }
  526. }
  527.  
  528. localStorage.me = power;
  529. }
  530.  
  531. function beep(difference)
  532. {
  533. if (localStorage.powerDiffEnabled === "true" && Math.abs(difference) > Number(localStorage.powerDiffTreshold))
  534. {
  535. sendSlackNotification($('#governor').text() + ' difference ' + difference);
  536. (new Audio('http://www.freespecialeffects.co.uk/soundfx/music/trumpets.wav')).play();
  537. }
  538. }
  539.  
  540. function checkNewMessage()
  541. {
  542. if (!localStorage.powerDiffTreshold)
  543. {
  544. localStorage.powerDiffTreshold = 0;
  545. }
  546.  
  547. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">New message notifier</label>');
  548.  
  549. $('#left_column_wrapper').append('<input id="messageNotifier" type="checkbox"/><br/>');
  550. $('#messageNotifier').prop('checked', localStorage.messageNotifier === "true");
  551. $('#messageNotifier').on("change keyup paste", function() {localStorage.messageNotifier = $("#messageNotifier").is(':checked');});
  552.  
  553. if ($('.new_post').length > 0 && localStorage.messageNotifier === "true")
  554. {
  555. sendSlackNotification($('#governor').text() + ' nova posta');
  556. (new Audio('https://www.mediacollege.com/downloads/sound-effects/star-trek/tng/tng-worf-incomingmessage.wav')).play();
  557. }
  558. }
  559.  
  560. function renderShieldStackPerc()
  561. {
  562. var shieldPwrElem = $('#econ_units_list').find('tr.tr_even:first > td:nth-child(6)');
  563. var shieldPwr = Number(shieldPwrElem.text());
  564. var totalPwr = Number($('#econ_units_list').find('.tr_econ_summary > td:nth-child(3)').text());
  565.  
  566. if (shieldPwr && totalPwr)
  567. {
  568. var shieldPerc = (100 * shieldPwr) / totalPwr;
  569.  
  570. shieldPwrElem.append(' (<span style="color: RGB(0, 255, 0);">' + shieldPerc.toFixed(1) + '%</span>)');
  571. }
  572. }
  573.  
  574. function renderNotes()
  575. {
  576. $('#left_column_wrapper').append('<br/><label>Notes</label><br/>');
  577. $('#left_column_wrapper').append('<textarea rows="4" cols="50" id="notes"></textarea>');
  578. $('#notes').val(localStorage.notes ? localStorage.notes : '');
  579. $('#notes').on("change keyup paste", function() {
  580. localStorage.notes = $('#notes').val();
  581. });
  582. }
  583.  
  584.  
  585. function formatDuration(duration) {
  586. var seconds = duration / 1000;
  587.  
  588. if (seconds > 60) {
  589. var minutes = seconds / 60;
  590.  
  591. if (minutes > 60) {
  592. var hours = Math.trunc(minutes / 60);
  593.  
  594. if (hours > 24) {
  595. var days = Math.trunc((minutes / 60) / 24);
  596.  
  597. return "před " + days + "d " + Math.trunc(hours - (24*days)) + "h";
  598. } else {
  599. return "před " + hours + "h " + Math.trunc(minutes - (60*hours)) + "m";
  600. }
  601. } else {
  602. return "před " + minutes.toFixed(0) + "m";
  603. }
  604. } else {
  605. return "před " + seconds + "s";
  606. }
  607. }
  608.  
  609. function renderPlayers() {
  610.  
  611. function getPlayerTable(players) {
  612. var currentTime = new Date();
  613.  
  614. var tableStart =
  615. '<table id="listings_table_top20"><tbody>' +
  616. '<tr class="heading">' +
  617. '<td class="attacks_id">ID</td>' +
  618. '<td class="attacks_regent">Regent</td>' +
  619. '<td class="attacks_pwr">Síla</td>' +
  620. '<td class="attacks_protection"></td>' +
  621. '<td class="attacks_time">Čas vložení</td>' +
  622. '</tr>';
  623.  
  624. for (var i = 0; i < players.length; i++) {
  625. tableStart = tableStart +
  626. '<tr>' +
  627. '<td class="attacks_id">' + players[i].id + '</td>' +
  628. '<td class="attacks_regent">' + players[i].name + '</td>' +
  629. '<td class="attacks_pwr">' + players[i].power + '</td>' +
  630. '<td class="attacks_protection">' + (players[i].protection ? '*' : '') + '</td>' +
  631. '<td class="attacks_time">' + (formatDuration(Math.abs(currentTime - new Date(players[i].lastUpdate)))) + '</td></tr>';
  632. }
  633.  
  634. var tableEnd = '</tbody></table></div></div>';
  635.  
  636. return tableStart + tableEnd;
  637. }
  638.  
  639. var playersLink = $('#Attacks_list_detail a').attr("href").replace("vypis=utoky_detailne", "players");
  640. $('#Attacks_list_detail').after('<li id="playersLink"><a href="' + playersLink + '">Hráči</a></li>');
  641.  
  642. if (window.location.href.indexOf("players") != -1) {
  643. $('#central_column_bottom').empty();
  644.  
  645. getAllPlayers(function(data) {
  646. $('#central_column_bottom').append(getPlayerTable(data));
  647. });
  648. }
  649. }
  650.  
  651. function autorefresh()
  652. {
  653.  
  654. $('#left_column_wrapper').append('<br/><label>Auto hlidka (sec)</label><br/>');
  655. $('#left_column_wrapper').append('<input id="watchInterval" type="text" style="width: 120px;">');
  656. $('#left_column_wrapper').append('<input id="autoWatch" type="checkbox"/><br/>');
  657. $('#left_column_wrapper').append('<label>Bestiar</label><input id="autowatchBestiar" type="checkbox"/><br/>');
  658. $('#left_column_wrapper').append('<label>Cska</label><input id="autowatchCs" type="checkbox"/><br/>');
  659. $('#left_column_wrapper').append('<label>Armada</label><input id="autowatchArmy" type="checkbox"/><br/>');
  660. $('#left_column_wrapper').append('<label>Hospodareni</label><input id="autowatchHospodareni" type="checkbox"/><br/>');
  661. $('#left_column_wrapper').append('<label>Top hliny</label><input id="autowatchTopArea" type="checkbox"/><br/>');
  662. $('#left_column_wrapper').append('<label>Vase umisteni</label><input id="autowatchYourPlacing" type="checkbox"/><br/>');
  663. $('#left_column_wrapper').append('<label>Mozne cile</label><input id="autowatchAllowedTargets" type="checkbox"/><br/>');
  664.  
  665. $('#autoWatch').css('position', 'absolute');
  666. $('#autoWatch').css('top', '20px');
  667. $('#autoWatch').css('left', '5px');
  668.  
  669. $('#watchInterval').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  670. $('#watchInterval').val(localStorage.watchInterval ? localStorage.watchInterval : '');
  671. $('#watchInterval').on("change keyup paste", function() { localStorage.watchInterval = $('#watchInterval').val();});
  672.  
  673. addCheckboxDbListener('autoWatch');
  674. addCheckboxDbListener('autowatchBestiar');
  675. addCheckboxDbListener('autowatchCs');
  676. addCheckboxDbListener('autowatchArmy');
  677. addCheckboxDbListener('autowatchHospodareni');
  678. addCheckboxDbListener('autowatchTopArea');
  679. addCheckboxDbListener('autowatchYourPlacing');
  680. addCheckboxDbListener('autowatchAllowedTargets');
  681.  
  682. var timer;
  683.  
  684. if (localStorage.autoWatch === "true")
  685. {
  686. timer = startTimer();
  687. }
  688.  
  689. $('#autoWatch').on("change keyup paste",
  690. function()
  691. {
  692. if ($("#autoWatch").is(':checked'))
  693. {
  694. timer = startTimer();
  695. }
  696. else if(timer)
  697. {
  698. clearInterval(timer);
  699. }
  700. });
  701. }
  702.  
  703. function addCheckboxDbListener(id)
  704. {
  705. $('#' + id).prop('checked', localStorage[id] === "true");
  706. $('#' + id).on("change keyup paste", function() { localStorage[id] = $("#" + id).is(':checked')});
  707. }
  708.  
  709. function startTimer()
  710. {
  711. var counter = Number(localStorage.watchInterval) * 1000;
  712. var timer = setTimeout(
  713. function()
  714. {
  715. var settingArray = ['autowatchBestiar', 'autowatchCs', 'autowatchArmy', 'autowatchHospodareni', 'autowatchTopArea', 'autowatchYourPlacing', 'autowatchAllowedTargets'];
  716. settingArray = settingArray.filter(setting => localStorage[setting] === 'true')
  717.  
  718. var type = settingArray[Math.floor(Math.random() * settingArray.length)];;
  719.  
  720. console.log(type);
  721.  
  722. if (type === 'autowatchBestiar')
  723. {
  724. window.location.href = $( "a:contains('Bestiář')" ).attr('href');
  725. }
  726. else if (type === 'autowatchCs')
  727. {
  728. window.location.href = $( "a:contains('Výpis útoků')" ).attr('href');
  729. }
  730. else if (type === 'autowatchArmy')
  731. {
  732. window.location.href = $( "a:contains('Armáda')" ).attr('href');
  733. }
  734. else if (type === 'autowatchHospodareni')
  735. {
  736. window.location.href = $( "a:contains('Hospodaření')" ).attr('href');
  737. }
  738. else if (type === 'autowatchTopArea')
  739. {
  740. window.location.href = $( "a:contains('Možné cíle')" ).attr('href').replace('&prehled=mozne_cile', '&prehled=podle_pozemku');
  741. }
  742. else if (type === 'autowatchYourPlacing')
  743. {
  744. window.location.href = $( "a:contains('Možné cíle')" ).attr('href').replace('&prehled=mozne_cile', '&prehled=vase_umisteni');
  745. }
  746. else if (type === 'autowatchAllowedTargets')
  747. {
  748. window.location.href = $( "a:contains('Možné cíle')" ).attr('href');
  749. }
  750.  
  751. timer = setTimeout(this, 1000 + counter * Math.random());
  752. }, (2500 + counter * Math.random()));
  753.  
  754. return timer;
  755. }
  756.  
  757. function powerDiffAlarm()
  758. {
  759. if (!localStorage.powerDiffTreshold)
  760. {
  761. localStorage.powerDiffTreshold = 0;
  762. }
  763.  
  764. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Power alarm (power)</label>');
  765.  
  766. $('#left_column_wrapper').append('<input id="powerDiffEnabled" type="checkbox"/><br/>');
  767. $('#powerDiffEnabled').prop('checked', localStorage.powerDiffEnabled === "true");
  768. $('#powerDiffEnabled').on("change keyup paste", function() {localStorage.powerDiffEnabled = $("#powerDiffEnabled").is(':checked');});
  769.  
  770. $('#left_column_wrapper').append('<input id="powerDiffTreshold" type="text" style="width: 120px;"><br/>');
  771. $('#powerDiffTreshold').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  772. $('#powerDiffTreshold').val(localStorage.powerDiffTreshold);
  773. $('#powerDiffTreshold').on("change keyup paste", function() { localStorage.powerDiffTreshold = $('#powerDiffTreshold').val();});
  774. }
  775.  
  776. function checkBestiar()
  777. {
  778. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Bestiar check (unit.exp,unit2.exp)</label>');
  779.  
  780. $('#left_column_wrapper').append('<input id="bestiarEnabled" type="checkbox"/><br/>');
  781. $('#bestiarEnabled').prop('checked', localStorage.bestiarEnabled === "true");
  782. $('#bestiarEnabled').on("change keyup paste", function() { localStorage.bestiarEnabled = $("#bestiarEnabled").is(':checked'); });
  783.  
  784. $('#left_column_wrapper').append('<textarea id="bestiarText" rows="2" cols="50"><br/>');
  785.  
  786. $('#bestiarText').val(localStorage.bestiarText ? localStorage.bestiarText : '');
  787. $('#bestiarText').on("change keyup paste", function() { localStorage.bestiarText = $('#bestiarText').val();});
  788.  
  789. if (window.location.pathname.includes("obchod") && localStorage.bestiarText && localStorage.bestiarEnabled === "true")
  790. {
  791. var unitExpPairs = localStorage.bestiarText.split(",");
  792. var count = 0;
  793.  
  794. $.each(unitExpPairs,
  795. function(index, unitExpPair)
  796. {
  797. var unit = unitExpPair.split(".")[0].trim();
  798. var exp = Number(unitExpPair.split(".")[1].trim());
  799. var stack;
  800.  
  801. if (unit.includes("#"))
  802. {
  803. stack = unit.split('#')[1].trim();
  804. unit = unit.split('#')[0].trim();
  805. }
  806.  
  807. // unit elements
  808. var elements = $("#beast_shop tr:not(.best_me_buyer):contains('" + unit + "')");
  809.  
  810. elements = elements.filter(
  811. function(i, el)
  812. {
  813. var expEl = $(el).find(".beast_shop_unit_exp");
  814. var stackV = $(el).find(".beast_shop_unit_stack");
  815.  
  816. return exp <= Number($(expEl).text().replace('%', '')) && stack <= Number($(stackV).text());
  817. }
  818. );
  819.  
  820. $.each(elements,
  821. function(index, el)
  822. {
  823. $(el).css('background-color', 'darkred');
  824. });
  825.  
  826. // contains unit
  827. if (elements.length !== 0)
  828. {
  829. if (unit === 'Str')
  830. {
  831. unit = "Shooter stack bigger " + stack;
  832. }
  833.  
  834. var url = 'http://api.voicerss.org/?key=9ed0aef9a2c64bc5abd65ca333588164&c=wav&hl=ru-ru&src=' + unit;
  835.  
  836. setTimeout(function(){
  837. (new Audio(url)).play();}, 1000 * count);
  838. count++;
  839. }
  840. }
  841. );
  842. }
  843. }
  844.  
  845. function checkCs() {
  846.  
  847. if (!localStorage.csEnabled)
  848. {
  849. localStorage.csEnabled = "true";
  850. }
  851.  
  852. if (!localStorage.csTreasholdPercentage)
  853. {
  854. localStorage.csTreasholdPercentage = 5;
  855. }
  856.  
  857. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Cs treashold diff %</label>');
  858. $('#left_column_wrapper').append('<input id="csEnabled" type="checkbox"/>');
  859. $('#left_column_wrapper').append('<input type="text" id="csTreasholdPercentage" style="width: 120px;"/><br/>');
  860.  
  861.  
  862. $('#csEnabled').prop('checked', localStorage.csEnabled === "true");
  863. $('#csEnabled').on("change keyup paste", function() {localStorage.csEnabled = $("#csEnabled").is(':checked');});
  864. $('#csTreasholdPercentage').val(localStorage.csTreasholdPercentage ? localStorage.csTreasholdPercentage : '');
  865. $('#csTreasholdPercentage').on("change keyup paste", function() { localStorage.csTreasholdPercentage = $('#csTreasholdPercentage').val();});
  866.  
  867. var csList = $(".attacks_list_wrapper:contains('Bráněné útoky') > .attacks_wrapper > .attacks_table > tbody > tr:not('.heading'):contains('nevráceno')");
  868. var count = 0;
  869.  
  870. $.each(csList, function (i, cs) {
  871. var name = $(cs).find('.attacks_regent').text().trim();
  872. var id = $(cs).find('.attacks_id .tt_player').clone().children().remove().end().text().trim();
  873. var powerDb = getLastDbValue(id, 'power');
  874. var power = $(cs).find('.attacks_pwr').text().trim();
  875. var powerDiff = power - powerDb;
  876. var powerDiffPerc = (powerDiff / power) * 100;
  877.  
  878. console.log('cs ' + cs + ' id ' + id + ' powerdiff: ' + powerDiff);
  879.  
  880. if (localStorage.csEnabled === "true" && powerDiffPerc < 0 && Math.abs(powerDiffPerc) >= Number(localStorage.csTreasholdPercentage)) {
  881. var url = 'http://soundbible.com/grab.php?id=2103&type=wav';
  882.  
  883. sendSlackNotification(name + ' spadl o ' + powerDiff);
  884.  
  885. setTimeout(function() {
  886. (new Audio(url)).play();}, 1000 * count);
  887. count++;
  888. }
  889. });
  890. }
  891.  
  892. function renderPlayersOnline()
  893. {
  894.  
  895. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Online player treshold (h)</label>');
  896.  
  897. $('#left_column_wrapper').append('<input id="onlinePlayerEnabled" type="checkbox"/><br/>');
  898. $('#onlinePlayerEnabled').prop('checked', localStorage.onlinePlayerEnabled === "true");
  899. $('#onlinePlayerEnabled').on("change keyup paste", function(){localStorage.onlinePlayerEnabled = $("#onlinePlayerEnabled").is(':checked');});
  900.  
  901. $('#left_column_wrapper').append('<input type="text" id="onlinePlayerTreshold" style="width: 120px;" /><br/>');
  902.  
  903. $('#onlinePlayerTreshold').val(localStorage.onlinePlayerTreshold ? localStorage.onlinePlayerTreshold : '');
  904. $('#onlinePlayerTreshold').on("change keyup paste", function() { localStorage.onlinePlayerTreshold = $('#onlinePlayerTreshold').val();});
  905.  
  906. if (!localStorage.onlinePlayerTreshold)
  907. {
  908. localStorage.onlinePlayerTreshold = 0.5;
  909. }
  910.  
  911. if (localStorage.onlinePlayerEnabled !== "true")
  912. {
  913. return;
  914. }
  915.  
  916. var treshold = Number(localStorage.onlinePlayerTreshold);
  917. var changedValues = Array.apply(0, new Array(localStorage.length))
  918. .map(function (o, i) {return localStorage.key(i);})
  919. .filter(function(i){return /^\d+$/.test(i)})
  920. .map(function(id)
  921. {
  922. var otVal = getLastDbValue(id, "ot", treshold);
  923. var areaVal = getLastDbValue(id, "area", treshold);
  924. var powerVal = getLastDbValue(id, "power", treshold);
  925. var dateVal = getLastDbValue(id, "date", treshold);
  926.  
  927. if ((typeof otVal !== 'undefined' && otVal !== getLastDbValue(id, "ot")) ||
  928. (typeof areaVal !== 'undefined' && areaVal !== getLastDbValue(id, "area")) ||
  929. (typeof powerVal !== 'undefined' && powerVal !== getLastDbValue(id, "power")))
  930. {
  931. var result = {};
  932. result["id"] = id;
  933. result["timeDiff"] = Math.abs(new Date() - new Date(dateVal));
  934. if (powerVal)
  935. {
  936. result["power"] = powerVal;
  937. }
  938. if (areaVal)
  939. {
  940. result["area"] = areaVal;
  941. }
  942. if (otVal)
  943. {
  944. result["ot"] = otVal;
  945. }
  946. return result;
  947. }
  948. })
  949. .filter(val => val)
  950. .sort((a, b) => (a.timeDiff > b.timeDiff) ? 1 : -1);;
  951.  
  952. var tableContent = changedValues.map(function(val)
  953. {
  954. var powerDb = getLastDbValue(val.id, 'power');
  955. var areaDb = getLastDbValue(val.id, 'area');
  956. var name = getLastDbValue(val.id, 'name');
  957. var timeDiff = val.timeDiff;
  958. var otsDiff = getLastDbValue(val.id, 'ot') - getLastDbValue(val.id, 'ot', treshold);
  959.  
  960. var protDb = getLastDbValue(val.id, 'prot') === 'true' ? '*' : '';
  961. return '<tr><td class="onlineIds">' + val.id + '</td><td style="word-break: break-all;">' + name + protDb + '</td><td>' +
  962. powerDb + '</td><td>' + areaDb + '</td><td>+' +
  963. otsDiff + '</td><td>' + formatDuration(timeDiff) + '</td></tr>';
  964. })
  965. .join('');
  966.  
  967. $(document.body).append('<table id="onlinePlayers" class="onlinePlayers" style="bottom: 0;width: 300px; position: fixed;right: 0px;background-color: black;overflow-y: scroll;max-height: 100%;">' +
  968. '<tr class="heading"><td>ID</td><td>Name</td><td>Síla</td><td>hAR</td><td>TU</td><td><td></tr>' +
  969. tableContent +
  970. '</table>');
  971.  
  972. var selectedIds = localStorage["selectedIds"] ? JSON.parse(localStorage["selectedIds"]) : [];
  973. var onlineIds = $('.onlineIds').map(function(){
  974. return $.trim($(this).text());
  975. }).get();
  976.  
  977. var selectedOnlineIds = selectedIds
  978. .filter(id => onlineIds.includes(id))
  979. .filter(function(item, pos, self) {return self.indexOf(item) == pos;}); // remove redundances;
  980.  
  981. // remove non online from map
  982. localStorage["selectedIds"] = JSON.stringify(selectedOnlineIds);
  983. selectedOnlineIds.forEach(id => markTableRowWithId(id, true));
  984.  
  985. $('.onlineIds').on('click', function(event)
  986. {
  987. var id = $(event.target).text().trim();
  988. var selectedIds = JSON.parse(localStorage["selectedIds"]);
  989. if (selectedIds.includes(id))
  990. {
  991. selectedIds.pop(id);
  992. markTableRowWithId(id, false);
  993. }
  994. else
  995. {
  996. selectedIds.push(id);
  997. markTableRowWithId(id, true);
  998. }
  999. localStorage["selectedIds"] = JSON.stringify(selectedIds);
  1000. });
  1001.  
  1002. var pastValueResolver = (id, prop) =>
  1003. {
  1004. return getLastDbValue(id, prop, treshold);
  1005. }
  1006. renderTableInfo($('#onlinePlayers'), pastValueResolver, false);
  1007. }
  1008.  
  1009. function markTableRowWithId(id, mark)
  1010. {
  1011. var tr = $('table:contains("ID")').find('tr:contains("' + id +'")');
  1012. if (tr && mark)
  1013. {
  1014. $(tr).css("background-color", "#9400D3");
  1015. $('html, body').animate({
  1016. scrollTop: ($(tr).first().offset().top)
  1017. },10);
  1018. }
  1019. else if (tr)
  1020. {
  1021. $(tr).css("background-color", "");
  1022. }
  1023. }
  1024.  
  1025. function sendSlackNotification(message)
  1026. {
  1027. // general channel
  1028. var channel = "https://hooks.slack.com/services/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";
  1029.  
  1030. var player = $('#governor').text();
  1031.  
  1032. if (player === 'princezna Xena')
  1033. {
  1034. channel = "https://hooks.slack.com/services/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";
  1035. }
  1036. else if (player === 'Jeina')
  1037. {
  1038. channel = "https://hooks.slack.com/services/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";
  1039. }
  1040.  
  1041. $.ajax({
  1042. data: 'payload=' + JSON.stringify({
  1043. "text": message
  1044. }),
  1045. dataType: 'json',
  1046. processData: false,
  1047. type: 'POST',
  1048. url: channel
  1049. });
  1050. }
  1051.  
  1052. function isLogged()
  1053. {
  1054. return $('#player_detail').length > 0
  1055. }
  1056.  
  1057. function autoLoginSettings()
  1058. {
  1059. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Auto login (s)</label>');
  1060. $('#left_column_wrapper').append('<input id="autoLogin" type="checkbox"/>');
  1061. $('#left_column_wrapper').append('<input type="text" id="autoLoginInterval" style="width: 120px;"/><br/>');
  1062.  
  1063. $('#autoLogin').prop('checked', localStorage.autoLogin === "true");
  1064. $('#autoLogin').on("change keyup paste", function() {localStorage.autoLogin = $("#autoLogin").is(':checked');});
  1065. $('#autoLoginInterval').val(localStorage.autoLoginInterval ? localStorage.autoLoginInterval : '');
  1066. $('#autoLoginInterval').on("change keyup paste", function() { localStorage.autoLoginInterval = $('#autoLoginInterval').val();});
  1067. }
  1068.  
  1069. function agregateByProp(prop)
  1070. {
  1071. var groupedValues = Array.apply(0, new Array(localStorage.length))
  1072. .map(function (o, i) {return localStorage.key(i);})
  1073. .filter(function(i){return /^\d+$/.test(i)})
  1074. .map(function(id)
  1075. {
  1076. var values = JSON.parse(localStorage[id]);
  1077.  
  1078. var agregated = values
  1079. .filter(val => val[prop])
  1080. .map(val => ({date : val.date, value : val[prop]}))
  1081. .reduce(aggregateByHour, {});
  1082.  
  1083. return Object.values(agregated)
  1084. .map(val => val[0]);
  1085. })
  1086. .flatMap(val => val)
  1087. .reduce(aggregateByHour, {});
  1088.  
  1089.  
  1090. return Object.values(groupedValues).map(val =>
  1091. {
  1092. var size = val.length;
  1093. var date = val[0].date;
  1094. var average = val.filter(a => a)
  1095. .filter(a => a.value)
  1096. .map(a => a.value)
  1097. .filter(a => a !== '-1')
  1098. .filter(function(a){return /^\d+$/.test(a)})
  1099. .reduce((a,b) => Number(a) + Number(b), 0) / size;
  1100. return {date : date, average : average};
  1101. })
  1102. .sort((a, b) => (new Date(a.date) > new Date(b.date)) ? 1 : -1);
  1103. }
  1104.  
  1105. function aggregateByHour(acc, val2)
  1106. {
  1107. var date = new Date(val2.date);
  1108. var yearWeek = moment(date).year() + '-' + moment(date).week() + '-' + moment(date).day()+ '-' + moment(date).hour();
  1109. if (typeof acc[yearWeek] === 'undefined') {
  1110. acc[yearWeek] = [];
  1111. }
  1112.  
  1113. acc[yearWeek].push(val2);
  1114. return acc;
  1115. }
  1116.  
  1117. function renderMeliorGraph()
  1118. {
  1119. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Average graphs</label>');
  1120. $('#left_column_wrapper').append('<input id="averageGraphEnabled" type="checkbox"/>');
  1121.  
  1122. $('#averageGraphEnabled').on("change keyup paste", function()
  1123. {
  1124. var areaValues = agregateByProp('area');
  1125. renderChart(areaValues, 'average', 'areaGraph', $('#footer'), 24 * 9);
  1126.  
  1127. var powerValues = agregateByProp('power');
  1128. renderChart(powerValues, 'average', 'powerGraph', $('#footer'), 24 * 9);
  1129.  
  1130. var otValues = agregateByProp('ot');
  1131. renderChart(otValues, 'average', 'otGraph', $('#footer'), 24 * 9);
  1132. });
  1133.  
  1134. }
  1135.  
  1136. function removeProtectionRows()
  1137. {
  1138. $('td:contains("Protekce")').prepend('<input id="protRemoveCheckbox" type="checkbox"/>');
  1139.  
  1140. $('#protRemoveCheckbox').on("change keyup paste", function(event)
  1141. {
  1142. if (this.checked)
  1143. {
  1144. $('table:contains("Síla"):contains("ID")').find('tr:not(".playerUnits")').has('.listings_prot_mil').hide();
  1145. }
  1146. else
  1147. {
  1148. $('table:contains("Síla"):contains("ID")').find('tr:not(".playerUnits")').has('.listings_prot_mil').show();
  1149. }
  1150.  
  1151. event.stopPropagation();
  1152. });
  1153. }
  1154.  
  1155. function parseAndRenderBattleForId()
  1156. {
  1157. $.each($('.post_msg_body:contains("Všechna kola boje")'), (index, renderTo) =>
  1158. {
  1159.  
  1160. var hisAttacks = $(renderTo).find('.attack_round_4').find('.his_unit_attacks')
  1161. .filter((index, val) => !$(val).parent().hasClass('unit_strikes_back'))
  1162. .map((i, val) => parseText($(val).text()))
  1163. .filter(val => !val.firstUnit)
  1164. .filter(val => !val.secondUnit)
  1165. .sort((a, b) => b.firstCount - a.firstCount);
  1166.  
  1167. var mineAttacks = $(renderTo).find('.attack_round_4').find('.my_unit_attacks')
  1168. .filter((index, val) => !$(val).parent().hasClass('unit_strikes_back'))
  1169. .map((i, val) => parseText($(val).text()))
  1170. .filter(val => !val.firstUnit)
  1171. .filter(val => !val.secondUnit)
  1172. .sort((a, b) => b.firstCount - a.firstCount);
  1173.  
  1174. var idAtacker = $(renderTo).find('.fight_attacker').text().split('(')[1].replace(')', '').trim();
  1175. var idDeffender = $(renderTo).find('.fight_defender').text().split('(')[1].replace(')', '').trim();
  1176. var mineId = $('form').find('input[name="id"]').val().trim();
  1177.  
  1178. var hisUnits;
  1179.  
  1180. if (idAtacker === mineId)
  1181. {
  1182. hisUnits = hisAttacks.map((i,val) => ({unit : val.firstUnit, count : val.firstCount}));
  1183. localStorage['attack' + idDeffender] = JSON.stringify(hisUnits.toArray());
  1184. }
  1185. else
  1186. {
  1187. hisUnits = mineAttacks.map((i,val) => ({unit : val.firstUnit, count : val.firstCount}));
  1188. localStorage['attack' + idAtacker] = JSON.stringify(hisUnits.toArray());
  1189. }
  1190. });
  1191. }
  1192.  
  1193. function parseText(text)
  1194. {
  1195. var rows = text.trim().split("\n");
  1196. var unitAndCount;
  1197.  
  1198. if (rows[0].includes(' -> '))
  1199. {
  1200. unitAndCount = rows[0].split(' -> ');
  1201. }
  1202. else if (rows[0].includes(' => '))
  1203. {
  1204. unitAndCount = rows[0].split(' => ');
  1205. }
  1206.  
  1207. var firstUnitAndCount = unitAndCount[0].trim().split(' x ');
  1208. var secondUnitAndCount = unitAndCount[1] ? unitAndCount[1].trim().split(' x ') : '';
  1209.  
  1210. var firstCount = firstUnitAndCount[0] ? firstUnitAndCount[0].trim() : '1';
  1211. var firstUnit = firstUnitAndCount[1] ? firstUnitAndCount[1].trim() : firstUnitAndCount[0].trim();
  1212.  
  1213. if (!firstUnitAndCount[1])
  1214. {
  1215. firstCount = '1';
  1216. }
  1217.  
  1218. var secondCount = secondUnitAndCount[0] ? secondUnitAndCount[0].trim() : '1';
  1219. var secondUnit = secondUnitAndCount[1] ? secondUnitAndCount[1].trim() : secondUnitAndCount[0];
  1220.  
  1221. if (!secondUnitAndCount[1])
  1222. {
  1223. secondCount = '1';
  1224. }
  1225.  
  1226. return {firstCount : firstCount, firstUnit : firstUnit, secondCount : secondCount , secondUnit : secondUnit};
  1227. }
  1228.  
  1229. function parseUnitStats()
  1230. {
  1231. var rows = $('.JednotkyMa').find('tr');
  1232.  
  1233. $.each(rows,
  1234. function (index, value)
  1235. {
  1236. if (index > 0) // skip header row
  1237. {
  1238. var columns = $(value).children();
  1239. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1240. {
  1241. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1242. var name = $(columns[1]).text().trim();
  1243. var relativeDmg = $(columns[2]).text().trim();
  1244. var relativeDef = $(columns[3]).text().trim();
  1245. var relativeLife = $(columns[4]).text().trim();
  1246.  
  1247. var result = {};
  1248. if (localStorage['unit' + id])
  1249. {
  1250. result = JSON.parse(localStorage['unit' + id]);
  1251. }
  1252.  
  1253. result.id = id;
  1254. result.name = name;
  1255. result.dmg = relativeDmg;
  1256. result.def = relativeDef;
  1257. result.life = relativeLife;
  1258.  
  1259. localStorage['unit' + id] = JSON.stringify(result);
  1260. }
  1261. }
  1262. }
  1263. );
  1264.  
  1265. rows = $('.JednotkyMa2').find('tr');
  1266.  
  1267. $.each(rows,
  1268. function (index, value)
  1269. {
  1270. if (index > 0) // skip header row
  1271. {
  1272. var columns = $(value).children();
  1273. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1274. {
  1275. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1276. var ini = $(columns[1]).text().trim();
  1277. var pwr = $(columns[2]).text().trim();
  1278. var phb = $(columns[3]).text().trim();
  1279. var type = $(columns[4]).text().trim();
  1280.  
  1281. var result = {};
  1282. if (localStorage['unit' + id])
  1283. {
  1284. result = JSON.parse(localStorage['unit' + id]);
  1285. }
  1286.  
  1287. result.id = id;
  1288. result.ini = ini;
  1289. result.pwr = pwr;
  1290. result.phb = phb;
  1291. result.type = type;
  1292.  
  1293. localStorage['unit' + id] = JSON.stringify(result);
  1294. }
  1295. }
  1296. }
  1297. );
  1298. }
  1299.  
  1300. function renderNoteForPlayer()
  1301. {
  1302. $.each($('.tt_player'), (index, renderTo) =>
  1303. {
  1304. // how to get id?
  1305. var id = $(renderTo).text().trim().substring(0,4);
  1306.  
  1307. var popup = $(renderTo).find('.tooltip');
  1308.  
  1309. $(popup).css('background-color', 'black');
  1310. if ($(popup).find('textarea').length === 0)
  1311. {
  1312. $(popup).find('.tooltip_attack_power').append('<div style="font-size: 25px; padding-top: 20px;" id="sqlInj' + id + '">Vyhledat info</div>');
  1313.  
  1314. $('#sqlInj' + id).click(() =>
  1315. {
  1316. localStorage.sqlHracId = id;
  1317. $('#SearchText').val("aaa' union select id,spravce,zbyva_tu,mana,zlato,1,1,1,1 from users where id=" + localStorage.sqlHracId + " limit 100#");
  1318. $('#SearchButton').click();
  1319. });
  1320.  
  1321. $(popup).append('<br/><label>Notes for player</label><br/>');
  1322. $(popup).append('<textarea rows="4" cols="50" id="notes' + id + '"></textarea>');
  1323. $('#notes' + id).val(localStorage["notes" + id] ? localStorage["notes" + id] : '');
  1324. $('#notes' + id).on("change keyup paste click", function(event)
  1325. {
  1326. localStorage["notes" + id] = $('#notes' + id).val();
  1327. event.stopPropagation();
  1328. });
  1329.  
  1330. $(popup).append('<br/><label>AttackUnits for player</label><br/>');
  1331. $(popup).append(renderPlayersUnits(id));
  1332. }
  1333. });
  1334. }
  1335.  
  1336. function renderPlayersUnits(id)
  1337. {
  1338. $('.tooltip').css('min-width', '450px');
  1339. var table = '<table><tr class="playerUnits"><td>Name</td><td>Count</td><td>Power</td><td>Dmg rel.</td><td>Ini rel.</td><td>AT</td><td>Phb</td><td>Type</td></tr>';
  1340.  
  1341. if (localStorage["attack" + id])
  1342. {
  1343. var unitCountMap = JSON.parse(localStorage["attack" + id]);
  1344.  
  1345. unitCountMap.forEach(val =>
  1346. {
  1347. var unit = val.unit;
  1348. var count = val.count;
  1349. table += '<tr class="playerUnits"><td>' + unit + '</td>';
  1350. table += '<td>' + count + '</td>';
  1351.  
  1352. if (localStorage[unit])
  1353. {
  1354. var unitData = JSON.parse(localStorage[unit]);
  1355. table += '<td>' + (getUnitPowerByName(unit, count)).toFixed(0) + '</td>';
  1356. table += '<td>' + Number(unitData.relativeDmg) + '</td>';
  1357. table += '<td>' + Number(unitData.relativeIni) + '</td>';
  1358. table += '<td>' + (unitData.attackType === 'Bojová' ? 'B' : 'S') + '</td>';
  1359. table += '<td>' + unitData.php + '</td>';
  1360. table += '<td>' + (unitData.type === 'Pozemní' ? 'P' : 'L') + '</td></tr>';
  1361. }
  1362. });
  1363. }
  1364.  
  1365. return table;
  1366. }
  1367.  
  1368. function getUnitPowerByName(unitName, count)
  1369. {
  1370. var data = JSON.parse(localStorage[unitName]);
  1371.  
  1372. if (data.attackType === 'Bojová')
  1373. {
  1374. return Number(data.power) * 0.5 * count;
  1375. }
  1376. else
  1377. {
  1378. return Number(data.power) * 1 * count;
  1379. }
  1380. }
  1381.  
  1382. function parseSpiesInfo()
  1383. {
  1384. if ($('.spies_item_info').length > 0)
  1385. {
  1386. var power = $($('tr:contains("Síla provincie")').children()[1]).text().trim().replace(' ', '');
  1387. var id = $($('tr:contains("Provincie")').children()[1]).text().trim().split('(')[1].replace(')', '').trim();
  1388. var area = $($('tr:contains("Rozloha")').children()[1]).text().trim().replace(' ', '').split('(')[0].trim();
  1389.  
  1390. var array= JSON.parse(localStorage[id]);
  1391.  
  1392. array.push({"power" : power, "area" : area, "date" : Date()});
  1393. localStorage[id] = JSON.stringify(array);
  1394. }
  1395. }
  1396.  
  1397. function signature()
  1398. {
  1399. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Shittalk</label><br/>');
  1400. $('#left_column_wrapper').append('<textarea id="shittalk"/><br/>');
  1401.  
  1402. $('#shittalk').val(localStorage.shittalk ? localStorage.shittalk : '');
  1403. $('#shittalk').on("change keyup paste", function() { localStorage.shittalk = $('#shittalk').val();});
  1404.  
  1405. var shittalk = $('#attacks_message textarea');
  1406. if (shittalk)
  1407. {
  1408. shittalk.val(localStorage.shittalk);
  1409. }
  1410. }
  1411.  
  1412. function searchSqlEnahance()
  1413. {
  1414. $('#search_detail').css('style', 'onlinePlayers');
  1415. $('#searches').find("input[name*='hledat']").attr('maxlength', '1000');
  1416. $('#search_results_table .tr_summary').remove();
  1417. $('#searches').prepend('<label>Hrac Id</label><input type="text" id="sqlHracId" /><label id="playerName">' + getLastDbValue(localStorage.sqlHracId, 'name') + '</label>');
  1418.  
  1419. $('#searches').prepend('<br/>');
  1420.  
  1421. $('#sqlHracId').val(localStorage.sqlHracId ? localStorage.sqlHracId : '');
  1422. $('#sqlHracId').on("change keyup paste", function() {
  1423. {
  1424. localStorage.sqlHracId = $('#sqlHracId').val();
  1425. $("#playerName").html(getLastDbValue($('#sqlHracId').val(), 'name'));
  1426. }
  1427. });
  1428.  
  1429.  
  1430. // zpravy hrace
  1431. addSqlInjection('Zpravy', () => "aaa' union select odesilatel_id,kdy,telo,1,1,1,1,1,1 from ma_posta" + whereClause('odesilatel_id') + " order by 2 desc limit 100#",
  1432. ['Kdo', 'Kdy', 'Telo', '']);
  1433.  
  1434. addSqlInjection('Armada', () => "aaa' union select id_jednotky, pocet_jedn, zkusenost,1,1,1,1,1,1 from jedn" + whereClause('id_user') + " limit 100#",
  1435. ['Idcko', 'Pocet', 'Zkusenost', 'Sila', 'Zraneni', 'Zivotnost', 'Iniciativa']);
  1436.  
  1437. addSqlInjection('Vypis', () => "aaa' union select id,spravce,zbyva_tu,mana,zlato,1,1,1,1 from users" + whereClause('id') + " limit 100#",
  1438. ["idcko", 'Regent', 'Zbyva tu', 'Mana', 'Zlato', '','','']);
  1439.  
  1440. if (localStorage.sqlHracId)
  1441. {
  1442. addSqlInjection('Protekce', () => "aaa' union all (select 'Utok',koho,kdy,1,1,1,1,1,1 from utoky" + whereClause('kdo') + " order by 3 desc limit 10)" +
  1443. "union all (select 'Obrana',kdo,kdy,1,1,1,1,1,1 from utoky" + whereClause('koho') + " and je_to_prvoutok=1 and vyhral!=" + localStorage.sqlHracId +" order by 3 desc limit 3) order by 3 desc#",
  1444. ["Typ utoku", 'Kdo', 'Kdy', '', '', '','','']);
  1445. }
  1446.  
  1447. if (localStorage.sqlHracId)
  1448. {
  1449. addSqlInjection('KouzlaVObrane', () => "aaa' " +
  1450. "union all (select 1,(select nazev from kouzla where id=id_kzl),ucinek,(select mana_sesl from kouzla where id=id_kzl),1,1,1,1,1 from kzl where id_user=" + localStorage.sqlHracId +" and id_kzl in (select id_kzl_1 from obrana" + whereClause('id_user') + "))" +
  1451. "union all (select 2,(select nazev from kouzla where id=id_kzl),ucinek,(select mana_sesl from kouzla where id=id_kzl),1,1,1,1,1 from kzl where id_user=" + localStorage.sqlHracId +" and id_kzl in (select id_kzl_2 from obrana" + whereClause('id_user') + "))" +
  1452. "union all (select 3,(select nazev from kouzla where id=id_kzl),ucinek,(select mana_sesl from kouzla where id=id_kzl),1,1,1,1,1 from kzl where id_user=" + localStorage.sqlHracId +" and id_kzl in (select id_kzl_3 from obrana" + whereClause('id_user') + "))" +
  1453. "union all (select 4,(select nazev from kouzla where id=id_kzl),ucinek,(select mana_sesl from kouzla where id=id_kzl),1,1,1,1,1 from kzl where id_user=" + localStorage.sqlHracId +" and id_kzl in (select id_kzl_4 from obrana" + whereClause('id_user') + "))" +
  1454. "#",
  1455. ["Kolo", 'Kouzlo', 'Ucinek', 'Mana', '', '','','']);
  1456. }
  1457.  
  1458. if (localStorage.sqlHracId)
  1459. {
  1460. addSqlInjection('Ochrany', () => "aaa' union select barva,zvyseny_r,do_tahu,(select odehrano_tahu from users" + whereClause('id') + "),1,1,1,1,1 from rezisty" + whereClause('id_user') + " limit 6#",
  1461. ["Barva", 'Ucinek', 'Zbyva tu', 'Odehrano TU', '', '','','']);
  1462. }
  1463.  
  1464. if (localStorage.sqlHracId)
  1465. {
  1466. addSqlInjection('Ozivko', () => "aaa' union select koho,kdy,kvalita_cile,1,1,1,1,1,1 from utoky where kdo=" + localStorage.sqlHracId + " and je_to_prvoutok=1 order by 2 desc limit 10#",
  1467. ["Koho", 'Kdy', 'Kvalita', '', '', '','','']);
  1468. }
  1469.  
  1470. if (localStorage.sqlHracId)
  1471. {
  1472. addSqlInjection('JehoPodpory', () => "aaa' " +
  1473. "union (select id_user,id_jednotky,pocet_jedn,zkusenost,priorita_pomoci,1,1,1,1 from jedn where id_user in (" +
  1474. "select vojen1 from ally" + whereClause('id_user') + " and 1 in (select obrana_pakt_1 from obrana" + whereClause('id_user') + ")" +
  1475. ") order by 5 desc limit 2)" +
  1476.  
  1477. "union (select id_user,id_jednotky,pocet_jedn,zkusenost,priorita_pomoci,1,1,1,1 from jedn where id_user in (" +
  1478. "select vojen2 from ally" + whereClause('id_user') + " and 1 in (select obrana_pakt_2 from obrana" + whereClause('id_user') + ")" +
  1479. ") order by 5 desc limit 2)" +
  1480.  
  1481. "union (select id_user,id_jednotky,pocet_jedn,zkusenost,priorita_pomoci,1,1,1,1 from jedn where id_user in (" +
  1482. "select vojen3 from ally"+ whereClause('id_user') + " and 1 in (select obrana_pakt_3 from obrana" + whereClause('id_user') + ")" +
  1483. ") order by 5 desc limit 2)" +
  1484.  
  1485. "union (select id_user,id_jednotky,pocet_jedn,zkusenost,priorita_pomoci,1,1,1,1 from jedn where id_user in (" +
  1486. "select vojen4 from ally" + whereClause('id_user') + " and 1 in (select obrana_pakt_4 from obrana" + whereClause('id_user') + ")" +
  1487. ") order by 5 desc limit 2)#",
  1488. ["Od koho", 'Jednotka', 'Pocet', 'Zkusenost', 'Priorita', 'Sila','','']);
  1489. }
  1490.  
  1491. if (localStorage.sqlHracId)
  1492. {
  1493. addSqlInjection('OnlineCheck', () => "aaa' union select id_user, last_click,cyklus,1,1,1,1,1,1 from antiscript_kontrola where id_user='" + localStorage.sqlHracId + "' order by 3 desc limit 1#",
  1494. ["idcko", 'Last click', '', '', '', '','','']);
  1495. }
  1496.  
  1497. if (localStorage.sqlHracId)
  1498. {
  1499. addSqlInjection('NocniKlid', () => "aaa' union select start_time,end_time,1,1,1,1,1,1,1 from nocni_klid where id_user=" + localStorage.sqlHracId + "#",
  1500. ["Od kdy", 'Do kdy', '', '', '', '','','']);
  1501. }
  1502.  
  1503. $('#searches').prepend('<br/>');
  1504. addSqlInjection('JednotkyMa', () => "aaa' union select id, jmeno, dmg, brneni, zivoty, iniciativa ,1,1,1 from jednotky#",
  1505. ['idcko', 'jmeno', 'dmg', 'brneni', 'zivoty', 'iniciativa']);
  1506.  
  1507. addSqlInjection('JednotkyMa2', () => "aaa' union select id, iniciativa, power, pohybl, druh, 1 ,1,1,1 from jednotky#",
  1508. ['idcko', 'Iniciativa', 'Power', 'Pohyblivost', 'Druh', '']);
  1509. }
  1510.  
  1511. function whereClause(colName)
  1512. {
  1513. if (localStorage.sqlHracId)
  1514. {
  1515. return " where " + colName + "=" + localStorage.sqlHracId;
  1516. }
  1517. return '';
  1518. }
  1519.  
  1520. function addSqlInjection(id, sqlInjection, cols)
  1521. {
  1522. $('#searches').prepend('<span style="color: #a8a8a8; margin: 5px; padding: 5px; margin-bottom: 10px; display: inline-block; border: 1px solid #a8a8a8; background: #323232;" id="' + id + '">' + id + '</span>');
  1523.  
  1524. $('#' + id).click(function()
  1525. {
  1526. $('#searches').find("input[name*='hledat']").val(sqlInjection());
  1527. $($('#searches').find('button:contains("Vyhledat")')).click();
  1528. });
  1529.  
  1530. if (sqlInjection() === $("input[name*='hledat']").val())
  1531. {
  1532. $('#' + id).css('background-color', 'white');
  1533. $('#search_results_table').addClass(id);
  1534. cols.forEach((name, index) =>
  1535. {
  1536. $($('#search_results_table').find('.heading > td')[index]).html(name);
  1537. });
  1538. }
  1539. }
  1540.  
  1541. function replaceJehoPodpory()
  1542. {
  1543. var rows = $('.JehoPodpory').find('tr');
  1544.  
  1545. $.each(rows,
  1546. function (index, value)
  1547. {
  1548. if (index > 0) // skip header row
  1549. {
  1550. var columns = $(value).children();
  1551.  
  1552. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1553. {
  1554. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1555. var name = getLastDbValue(id, 'name');
  1556.  
  1557. $(columns[0]).html(id + " " + name);
  1558. }
  1559.  
  1560. if ($(columns[1]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1561. {
  1562. var id = $(columns[1]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1563. var result = {};
  1564.  
  1565. if (localStorage['unit' + id])
  1566. {
  1567. result = JSON.parse(localStorage['unit' + id]);
  1568. }
  1569.  
  1570. var exp = Number($(columns[3]).text().trim());
  1571. var count = Number($(columns[2]).text().trim());
  1572. var pwr = result.pwr;
  1573.  
  1574. $(columns[5]).html(Math.floor((exp / 100) * count * pwr));
  1575.  
  1576. $(columns[1]).html(result.name);
  1577. }
  1578. }
  1579. }
  1580. );
  1581.  
  1582.  
  1583. removeSearchColumns($('.JehoPodpory'), 3);
  1584. }
  1585.  
  1586. function replaceZpravy()
  1587. {
  1588. var rows = $('.Zpravy').find('tr');
  1589. removeSearchColumns($('.Zpravy'), 6);
  1590.  
  1591. $.each(rows,
  1592. function (index, value)
  1593. {
  1594. if (index > 0) // skip header row
  1595. {
  1596. var columns = $(value).children();
  1597.  
  1598. resolvePlayerNameForId(columns, 0);
  1599. }
  1600. }
  1601. );
  1602. }
  1603.  
  1604. function resolvePlayerNameForId(columns, position)
  1605. {
  1606. if ($(columns[position]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1607. {
  1608. var id = $(columns[position]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1609. var name = getLastDbValue(id, 'name');
  1610.  
  1611. $(columns[position]).html(id + " " + name);
  1612. }
  1613. }
  1614.  
  1615. function replaceNocniKlid()
  1616. {
  1617. removeSearchColumns($('.NocniKlid'), 7);
  1618. }
  1619.  
  1620. function replaceDateInOzivko()
  1621. {
  1622. var rows = $('.Ozivko').find('tr');
  1623.  
  1624. removeSearchColumns($('.Ozivko'), 6);
  1625.  
  1626. $.each(rows,
  1627. function (index, value)
  1628. {
  1629. if (index > 0) // skip header row
  1630. {
  1631. var columns = $(value).children();
  1632.  
  1633. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1634. {
  1635. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1636. var name = getLastDbValue(id, 'name');
  1637.  
  1638. $(columns[0]).html(id + " " + name);
  1639.  
  1640. var date = new Date($(columns[1]).html() * 1000);
  1641. $(columns[1]).html(formatDuration(new Date() - date));
  1642.  
  1643. if ((new Date() - date) / (60 * 60 * 1000) > 24)
  1644. {
  1645. $(value).remove();
  1646. }
  1647.  
  1648. }
  1649. }
  1650. }
  1651. );
  1652. }
  1653.  
  1654. function replaceOnlineCheck()
  1655. {
  1656. var rows = $('.OnlineCheck').find('tr');
  1657.  
  1658. removeSearchColumns($('.OnlineCheck'), 7);
  1659.  
  1660. $.each(rows,
  1661. function (index, value)
  1662. {
  1663. if (index > 0) // skip header row
  1664. {
  1665. var columns = $(value).children();
  1666.  
  1667. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1668. {
  1669. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1670. var name = getLastDbValue(id, 'name');
  1671.  
  1672. $(columns[0]).html(id + " " + name);
  1673.  
  1674. var date = new Date($(columns[1]).html() * 1000);
  1675. $(columns[1]).html(formatDuration(new Date() - date));
  1676. }
  1677. }
  1678. }
  1679. );
  1680. }
  1681.  
  1682. function replaceProtekce()
  1683. {
  1684. var rows = $('.Protekce').find('tr');
  1685.  
  1686. removeSearchColumns($('.Protekce'), 6);
  1687.  
  1688. $.each(rows,
  1689. function (index, value)
  1690. {
  1691. if (index > 0) // skip header row
  1692. {
  1693. var columns = $(value).children();
  1694.  
  1695. if ($(columns[1]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1696. {
  1697. var id = $(columns[1]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1698. var name = getLastDbValue(id, 'name');
  1699.  
  1700. $(columns[1]).html(id + " " + name);
  1701.  
  1702. var date = new Date($(columns[2]).html() * 1000);
  1703. $(columns[2]).html(formatDuration(new Date() - date));
  1704. }
  1705. }
  1706. }
  1707. );
  1708. }
  1709.  
  1710. function replaceVypis()
  1711. {
  1712. removeSearchColumns($('.Vypis'));
  1713.  
  1714. if ($('.Vypis').length > 0)
  1715. {
  1716.  
  1717. var id = localStorage.sqlHracId;
  1718. var data = JSON.parse(localStorage[id]);
  1719.  
  1720. $('#central_column_wrapper').append('<br/>');
  1721. $('#central_column_wrapper').append('<br/>');
  1722.  
  1723. renderChart(data, 'power', id, $('#central_column_wrapper'), 4 * 24);
  1724. renderChart(data, 'area', id, $('#central_column_wrapper'), 4 * 24);
  1725. renderChart(data, 'ot', id, $('#central_column_wrapper'), 4 * 24);
  1726. }
  1727. }
  1728.  
  1729. function replaceIdInArmada()
  1730. {
  1731. var rows = $('.Armada').find('tr');
  1732.  
  1733. $($('.Armada').find('.heading td')[4]).attr('colspan',1);
  1734. $($('.Armada').find('.heading td')[6]).attr('colspan',1);
  1735.  
  1736. var dmgs = [];
  1737. var lifes = [];
  1738. var inis = [];
  1739. var counts = [];
  1740.  
  1741. $.each(rows,
  1742. function (index, value)
  1743. {
  1744. if (index > 0) // skip header row
  1745. {
  1746. var columns = $(value).children();
  1747.  
  1748. if ($(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g))
  1749. {
  1750. var id = $(columns[0]).text().trim().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1751.  
  1752. var result = {};
  1753. if (localStorage['unit' + id])
  1754. {
  1755. result = JSON.parse(localStorage['unit' + id]);
  1756. }
  1757.  
  1758. var exp = $(columns[2]).text().trim();
  1759. var count = Number($(columns[1]).text().trim());
  1760. counts.push({val : count, index : index});
  1761.  
  1762. $(columns[0]).html(result.name);
  1763. $(columns[2]).html(Math.round(exp));
  1764. $(columns[3]).html(Math.round(result.pwr * (exp / 100) * count));
  1765.  
  1766. var dmg = Math.round(result.dmg * count);
  1767. $(columns[4]).html(dmg);
  1768. dmgs.push({val : dmg, index : index});
  1769.  
  1770. $(columns[5]).remove();
  1771.  
  1772. var life = Math.round(result.life * count);
  1773. $(columns[6]).html(life);
  1774. lifes.push({val : life, index : index});
  1775.  
  1776. var ini = Math.round(result.ini * count);
  1777. $(columns[7]).html(ini);
  1778. inis.push({val : ini, index : index});
  1779. }
  1780. }
  1781. }
  1782. );
  1783.  
  1784. counts.sort((a, b) => (a.val > b.val) ? -1 : 1).forEach((value, index) =>
  1785. {
  1786. var row = $(rows[value.index]);
  1787. var columns = $(row).children();
  1788. var column = $(columns[1]);
  1789. var prevIniVal = 0;
  1790. if (counts[index + 1])
  1791. {
  1792. prevIniVal = counts[index + 1].val;
  1793. }
  1794. var percent = Math.floor(100 - ((prevIniVal * 100) / value.val));
  1795. column.html(value.val + "<span style='color: " + percentToColor(percent / 100) +";'>(" + percent + ")</span>");
  1796. });
  1797.  
  1798. dmgs.sort((a, b) => (a.val > b.val) ? -1 : 1).forEach((value, index) =>
  1799. {
  1800. var row = $(rows[value.index]);
  1801. var columns = $(row).children();
  1802. var column = $(columns[4]);
  1803. var prevIniVal = 0;
  1804. if (dmgs[index + 1])
  1805. {
  1806. prevIniVal = dmgs[index + 1].val;
  1807. }
  1808. var percent = Math.floor(100 - ((prevIniVal * 100) / value.val));
  1809. column.html(value.val + "<span style='color: " + percentToColor(percent / 100) +";'>(" + percent + ")</span>");
  1810. });
  1811.  
  1812. lifes.sort((a, b) => (a.val > b.val) ? -1 : 1).forEach((value, index) =>
  1813. {
  1814. var row = $(rows[value.index]);
  1815. var columns = $(row).children();
  1816. var column = $(columns[5]);
  1817. var prevIniVal = 0;
  1818. if (lifes[index + 1])
  1819. {
  1820. prevIniVal = lifes[index + 1].val;
  1821. }
  1822. var percent = Math.floor(100 - ((prevIniVal * 100) / value.val));
  1823. column.html(value.val + "<span style='color: " + percentToColor(percent / 100) +";'>(" + percent + ")</span>");
  1824. });
  1825.  
  1826. inis.sort((a, b) => (a.val > b.val) ? -1 : 1).forEach((value, index) =>
  1827. {
  1828. var row = $(rows[value.index]);
  1829. var columns = $(row).children();
  1830. var column = $(columns[6]);
  1831. var prevIniVal = 0;
  1832. if (inis[index + 1])
  1833. {
  1834. prevIniVal = inis[index + 1].val;
  1835. }
  1836. var percent = Math.floor(100 - ((prevIniVal * 100) / value.val));
  1837. column.html(value.val + "<span style='color: " + percentToColor(percent / 100) +";'>(" + percent + ")</span>");
  1838. });
  1839.  
  1840. var powerSum = 0;
  1841. $.each(rows,
  1842. function (index, value)
  1843. {
  1844. if (index > 0) // skip header row
  1845. {
  1846. var columns = $(value).children();
  1847. powerSum += Number($(columns[3]).text());
  1848. }
  1849. });
  1850.  
  1851. $('.Armada').append('<div>Power sum: ' + powerSum + '</div>');
  1852. }
  1853.  
  1854.  
  1855. function replaceOchrany()
  1856. {
  1857. var rows = $('.Ochrany').find('tr');
  1858.  
  1859. removeSearchColumns($('.Ochrany'), 5);
  1860.  
  1861. $.each(rows,
  1862. function (index, value)
  1863. {
  1864. if (index > 0) // skip header row
  1865. {
  1866. var columns = $(value).children();
  1867.  
  1868. var toTu = $(columns[2]).text().trim();
  1869. var actualTu = $(columns[3]).text().trim();
  1870.  
  1871. $(columns[2]).html(toTu - actualTu);
  1872. if (toTu - actualTu < 0)
  1873. {
  1874. $(columns[1]).html('0');
  1875. }
  1876. }
  1877. }
  1878. );
  1879. }
  1880.  
  1881. function markRow()
  1882. {
  1883. $('table tr').hover(function() {
  1884. if ($(this).css("background-color") !== "rgb(0, 128, 0)")
  1885. {
  1886. $(this).css("background-color", "#2C3E50");
  1887. }
  1888. }, function() {
  1889. if ($(this).css("background-color") !== "rgb(0, 128, 0)")
  1890. {
  1891. $(this).css("background-color", "");
  1892. }
  1893. });
  1894. }
  1895.  
  1896. function markCsRows()
  1897. {
  1898. var attackTables = $('.attacks_table');
  1899.  
  1900. if (attackTables && attackTables.length > 0)
  1901. {
  1902. var trs = $(attackTables[1]).find('tr:contains("nevráceno")');
  1903. var ids = trs.map((index, tr) =>
  1904. {
  1905. return $($(tr).children()[1]).text().match(/^\d+|\d+\b|\d+(?=\w)/g).map(function (v) {return +v;})[0];
  1906. });
  1907.  
  1908. localStorage['cska'] = JSON.stringify(ids);
  1909. }
  1910.  
  1911. var csIdsl;
  1912.  
  1913. if (localStorage['cska'])
  1914. {
  1915. csIds1 = JSON.parse(localStorage['cska']);
  1916. }
  1917.  
  1918. if (csIds && csIds.length > 0)
  1919. {
  1920. Array.from(csIds).forEach(id =>
  1921. {
  1922. var rowsWithId = $('table:contains("ID"):not(".attacks_table")').find('.listings_id:contains("' + id +'")');
  1923. $(rowsWithId.closest('tr')).css('background-color', 'green');
  1924. });
  1925. }
  1926. }
  1927.  
  1928. function replaceKouzlaVObrane()
  1929. {
  1930. removeSearchColumns($('.KouzlaVObrane'), 5);
  1931. }
  1932.  
  1933. function removeSearchColumns(table, colsToRemove)
  1934. {
  1935. table.find('tr').find('td:eq(4),th:eq(4)').attr('colspan',1);
  1936. table.find('.heading').append('<td></td><td></td>');
  1937. table.find('tr').find('td:eq(6),th:eq(6)').attr('colspan',1);
  1938. table.find('tr').find('td:eq(7),th:eq(7)').attr('colspan',1);
  1939.  
  1940. if (!colsToRemove)
  1941. {
  1942. colsToRemove = 4;
  1943. }
  1944. for (var i = 0; i < colsToRemove; i++)
  1945. {
  1946. var colSize = table.find('.heading td').length;
  1947. removeTableColumn(table, colSize - 1);
  1948. }
  1949. }
  1950.  
  1951. function removeTableColumn(table, colNumber)
  1952. {
  1953. table.find('tr').find('td:eq(' + colNumber + '),th:eq(' + colNumber + ')').remove();
  1954. }
  1955.  
  1956. function parseMyStats()
  1957. {
  1958. var id = resolveMineId();
  1959. var population = $('#LS_population .value').text().trim();
  1960. var area = $('#LS_land .value').text().replace(' hAR', '').trim();
  1961. var gold = $('#LS_gold .value').text();
  1962. var glory = $('#LS_glory .value').text();
  1963. var power = $('#LS_power .value').text();
  1964.  
  1965. var array = JSON.parse(localStorage[id]);
  1966. array.push({"power" : power, "area" : area, "date" : Date(), "gold" : gold, "population": population, "glory" : glory});
  1967. localStorage[id] = JSON.stringify(array);
  1968.  
  1969. $('#credits_wrapper').append('<div id="showMineCharts" style="font-size: 20px;">Mine stats</div>')
  1970.  
  1971. $('#showMineCharts').click(() =>
  1972. {
  1973. renderChart(array, 'power', id, $('#credits_wrapper'), 168);
  1974. renderChart(array, 'area', id, $('#credits_wrapper'), 168);
  1975. renderChart(array, 'gold', id, $('#credits_wrapper'), 168);
  1976. renderChart(array, 'population', id, $('#credits_wrapper'), 168);
  1977. renderChart(array, 'glory', id, $('#credits_wrapper'), 168);
  1978. });
  1979.  
  1980. }
  1981.  
  1982. function resolveMineId()
  1983. {
  1984. return $($('#player_regent span')[1]).text().replace('(ID ', '').replace(')', '');
  1985. }
  1986.  
  1987. if (isLogged())
  1988. {
  1989. parseMyStats();
  1990. markCsRows();
  1991. markRow();
  1992. searchSqlEnahance();
  1993. parseSpiesInfo();
  1994. parseUnitStats();
  1995. replaceIdInArmada();
  1996. replaceDateInOzivko();
  1997. replaceJehoPodpory();
  1998. replaceOchrany();
  1999. replaceOnlineCheck();
  2000. replaceProtekce();
  2001. replaceZpravy();
  2002. replaceVypis();
  2003. replaceKouzlaVObrane();
  2004. replaceNocniKlid();
  2005.  
  2006. parseAndRenderBattleForId();
  2007. //renderMeliorGraph();
  2008. //autoLoginSettings();
  2009. //checkCs();
  2010. renderNoteForPlayer();
  2011. renderPlayersOnline();
  2012. makeTableOrderable();
  2013. renderNotes();
  2014. checkBestiar();
  2015. //powerDiffAlarm();
  2016. //renderPlayers();
  2017. renderShieldStackPerc();
  2018. //myPower();
  2019. //kokotMeasure();
  2020. //renderHistoryTextField();
  2021. main();
  2022. spies();
  2023. //autorefresh();
  2024. //checkNewMessage();
  2025. removeProtectionRows();
  2026. signature();
  2027. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement