Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 50.21 KB | None | 0 0
  1. // ==UserScript==
  2. // @name MA - hlidka
  3. // @version 1.8
  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. // ==/UserScript==
  11.  
  12. Array.prototype.diff = function(a) {
  13. return this.filter(function(i) {return a.indexOf(i) < 0;});
  14. };
  15.  
  16. var percentColors = [
  17. { pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },
  18. { pct: 0.5, color: { r: 168, g: 168, b: 168 } },
  19. { pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ];
  20.  
  21. var percentToColor = function(pct)
  22. {
  23. for (var i = 0; i < percentColors.length; i++)
  24. {
  25. if (pct <= percentColors[i].pct)
  26. {
  27. var lower = (i === 0) ? percentColors[i] : percentColors[i - 1];
  28. var upper = (i === 0) ? percentColors[i + 1] : percentColors[i];
  29. var range = upper.pct - lower.pct;
  30. var rangePct = (pct - lower.pct) / range;
  31. var pctLower = 1 - rangePct;
  32. var pctUpper = rangePct;
  33.  
  34. var color =
  35. {
  36. r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),
  37. g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),
  38. b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)
  39. };
  40.  
  41. return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';
  42. }
  43. }
  44. };
  45.  
  46. function getLastDbValue(id, property, searchHoursInPast)
  47. {
  48. var dbValues = localStorage[id];
  49. if (dbValues)
  50. {
  51. dbValues = JSON.parse(dbValues);
  52. dbValues.reverse();
  53.  
  54. for (var i in dbValues) {
  55.  
  56. var hourDifference = Math.abs(new Date() - new Date(dbValues[i].date)) / 36e5;
  57. if (searchHoursInPast && hourDifference > searchHoursInPast)
  58. {
  59. if (dbValues[i][property])
  60. return dbValues[i][property];
  61. }
  62. else if (!searchHoursInPast)
  63. {
  64. if (dbValues[i][property])
  65. return dbValues[i][property];
  66. }
  67. }
  68. }
  69.  
  70. return -1;
  71. }
  72.  
  73. function renderChangesValue(id, power, area, powerPos, areaPos, row, ot, otPos, pastValueResolver)
  74. {
  75. var powerDb = pastValueResolver(id, 'power');
  76. var areaDb = pastValueResolver(id, 'area');
  77. var otDb = pastValueResolver(id, 'ot');
  78.  
  79. var columns = $(row).children();
  80.  
  81. var powerColumn = $(columns[powerPos]);
  82. renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb, true, powerColumn);
  83.  
  84. $('#' + id + '-dialog').click(function() {
  85. $('#' + id + '-dialog').css("display", "none");
  86. });
  87.  
  88. if(areaPos)
  89. {
  90. var areaColumn = $(columns[areaPos]);
  91. renrerValue(id, 'area', area, areaDb==-1 ? area : areaDb, false, areaColumn);
  92. }
  93.  
  94. if (otPos)
  95. {
  96. var otPlus = Number(ot) - Number(otDb);
  97.  
  98. if (otPlus || otPlus > -1)
  99. {
  100. var otColumn = $(columns[otPos]);
  101. renrerValue(id, 'ot', otPlus, otPlus, false, otColumn);
  102. }
  103. }
  104. }
  105.  
  106. function renrerValue(id, type, value, valueDb, isPercent, whereToRender)
  107. {
  108.  
  109. var percent = Math.round(percent * 10) / 10;
  110. percent = (value / (valueDb / 100) - 100).toFixed(1) + '%';
  111.  
  112. var val = (Math.round((value - valueDb) / 100) / 10) + 'k';
  113.  
  114. if (type === 'ot')
  115. {
  116. val = value;
  117. }
  118.  
  119. var element = '<font size="2" class="to-remove">(<span id="' + id + '-' + type + '" class="' + type +'">' + (isPercent ? percent : val) + '</span>)';
  120. whereToRender.append(element);
  121. whereToRender.click(function()
  122. {
  123. var storage = localStorage[id];
  124. var fakeRowId = 'fakeRow' + id;
  125.  
  126. if (storage && $('#' + fakeRowId).length === 0)
  127. {
  128. var data = JSON.parse(storage);
  129. data.reverse();
  130.  
  131. $('<tr class="fakeRow"><td colspan="20" >' +
  132. '<div id="' + fakeRowId + '"style="background-color: white; width: 100%;"></div>' +
  133. '</td></tr>').insertAfter($(whereToRender.parent()));
  134.  
  135. renderChart(data, 'power', id, $('#' + fakeRowId), 24);
  136. renderChart(data, 'area', id, $('#' + fakeRowId), 24);
  137. renderChart(data, 'ot', id, $('#' + fakeRowId), 24);
  138. }
  139. else
  140. {
  141. $('.fakeRow').remove();
  142. }
  143.  
  144. });
  145. }
  146.  
  147. function renderChart(data, type, id, elemtToAppend, hoursBack)
  148. {
  149. var chartId = type + 'Chart' + id;
  150.  
  151. $(elemtToAppend).append('<div id="' + chartId + '" style="height: 200px; width: 100%;"/>');
  152. $('#' + id).click(event => event.stopPropagation());
  153.  
  154. var datasets = createDataSet(data, type, hoursBack);
  155.  
  156. var chart = new CanvasJS.Chart(chartId, {
  157. animationEnabled: false,
  158. zoomEnabled: true,
  159. title: {
  160. text: type
  161. },
  162. axisX: {
  163. title: "Time"
  164. },
  165. axisY: {
  166. title: type,
  167. includeZero: false
  168. },
  169. data: [{
  170. type: "line",
  171. name: type,
  172. xValueType: "dateTime",
  173. xValueFormatString: "DD MMM hh:mm TT",
  174. yValueFormatString: "#,##0.##",
  175. dataPoints: datasets
  176. }]
  177. });
  178.  
  179. chart.render();
  180. }
  181.  
  182. function createDataSet(data, type, hoursBack)
  183. {
  184. var clearData = $(data).filter(
  185. function(index, row)
  186. {
  187. var hourDiff = Math.round(((new Date() - new Date(row.date)) / 36e5) * 10) / 10;
  188. return row[type] && hourDiff < hoursBack;
  189. });
  190.  
  191. var chartData=[];
  192.  
  193. var yesterday = new Date(new Date().getTime() - (hoursBack * 60 * 60 * 1000));
  194.  
  195. $.each(clearData, function(index, packet)
  196. {
  197. if (packet[type])
  198. {
  199. chartData.push({x : new Date(packet.date), y : parseFloat(packet[type])});
  200. }
  201. });
  202.  
  203. return chartData;
  204. }
  205.  
  206. function formatDate(date)
  207. {
  208. var d = new Date(date);
  209. return [d.getDate(), (d.getMonth()+1)].join('.') + ' ' +
  210. [ d.getHours(), d.getMinutes()].join(':');
  211. }
  212.  
  213. function spies()
  214. {
  215. var table = $('#spies_report');
  216.  
  217. if (table)
  218. {
  219. var id = table.find('sup').text().replace('(', '').replace(')', '');
  220. var powerColumn = table.find('td:contains("Síla provincie")').next();
  221. var power = Number(powerColumn.text().split('(')[0]);
  222. var powerMine = Number($('.value_power').text());
  223.  
  224. var powerDb = getLastDbValue(id, 'power');
  225.  
  226. if (powerColumn.length !== 0)
  227. {
  228. powerColumn.append('<br/><a id="adjustArmy" style="color: green;">Pripravit armadu</a>');
  229. renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb, true, powerColumn);
  230. }
  231.  
  232. $('#adjustArmy').click(
  233. function() {
  234. localStorage.powerDiff = (power * 1.245) - powerMine;
  235. window.location.href = $( "a:contains('Armáda')" ).attr('href');
  236. });
  237. }
  238.  
  239. $('#left_column_wrapper').append('<label>Nazev jednotky stitu</label><br/>');
  240. $('#left_column_wrapper').append('<input type="text" id="shieldUnit" style="width: 120px;" />');
  241.  
  242. $('#shieldUnit').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  243. $('#shieldUnit').val(localStorage.shieldUnit ? localStorage.shieldUnit : '');
  244. $('#shieldUnit').on("change keyup paste", function() { localStorage.shieldUnit = $('#shieldUnit').val();});
  245.  
  246. if (localStorage.powerDiff && localStorage.powerDiff !== '' && localStorage.shieldUnit)
  247. {
  248. var selectUnit = $($('select')[1]).find('option:contains(' + localStorage.shieldUnit + ')').val();
  249. var unitPower = Number($('#army_table_army tr:contains(' + localStorage.shieldUnit + ') .army_unit_power').text());
  250. var unitExp = Number($('#army_table_army tr:contains(' + localStorage.shieldUnit + ') .army_unit_exp').text().replace('%', '').trim());
  251.  
  252. var oneUnitPower;
  253.  
  254. if (localStorage.powerDiff < 0)
  255. {
  256. oneUnitPower = (unitPower / 100) * unitExp;
  257. $($('select')[0]).val(selectUnit);
  258. $($('input[name="kolik"]')[0]).val(Math.abs(Math.round(localStorage.powerDiff / oneUnitPower)));
  259. $($('input[name="kolik"]')[0]).change();
  260. }
  261. else
  262. {
  263. oneUnitPower = unitPower * 0.4;
  264. $($('select')[1]).val(selectUnit);
  265. $($('input[name="kolik"]')[1]).val(Math.abs(Math.round(localStorage.powerDiff / oneUnitPower)));
  266. $($('input[name="kolik"]')[1]).change();
  267. }
  268.  
  269. localStorage.powerDiff = '';
  270. }
  271. }
  272.  
  273. function makeTableOrderable()
  274. {
  275. var tables = $('table:contains("Síla"):contains("ID")');
  276.  
  277. $.each(
  278. tables,
  279. function (i, table)
  280. {
  281.  
  282. var headRow = $(table).find('.heading');
  283.  
  284. var headColumns = $(headRow).find('td:not(:contains("Protekce"))');
  285. $.each(headColumns,
  286. function (index, value)
  287. {
  288. $(value).click(function(){
  289. var table = $(this).parents('table').eq(0)
  290. var rows = table.find('tr:not(".playerUnits"):gt(0)').toArray().sort(comparer($(this).index()))
  291. this.asc = !this.asc
  292. if (!this.asc){rows = rows.reverse()}
  293. for (var i = 0; i < rows.length; i++){table.append(rows[i])}
  294. })
  295. });
  296. });
  297.  
  298. function comparer(index) {
  299. return function(a, b) {
  300. var valA = getCellValue(a, index);
  301. var valB = getCellValue(b, index);
  302.  
  303. if ($.isNumeric(valA.replace(" ", "").replace(/ *\([^)]*\) */g, "")))
  304. {
  305. valA = valA.replace(" ", "").replace(/ *\([^)]*\) */g, "");
  306. valB = valB.replace(" ", "").replace(/ *\([^)]*\) */g, "");
  307. }
  308.  
  309. return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB);
  310. }
  311. }
  312. function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
  313. }
  314.  
  315. function renderTableInfo(table, pastValueResolver, updateDbData)
  316. {
  317. var rows = $(table).find('tr:not(".playerUnits")');
  318.  
  319. var headRow = $(table).find('.heading');
  320.  
  321. var idPos;
  322. var namePos;
  323. var powerPos;
  324. var areaPos;
  325. var otPos;
  326. var protPos;
  327.  
  328. var headColumns = $(headRow).find('td');
  329. if(headColumns.length === 0)
  330. headColumns = $(headRow).find('th');
  331. $.each(headColumns,
  332. function (index, value)
  333. {
  334. var text = $(value).text().trim();
  335. if(text==='ID')
  336. idPos = index;
  337. if(text==='Regent')
  338. namePos = index;
  339. if(text.indexOf("Síla")===0)
  340. powerPos = index;
  341. if(text==='Rozloha' || text === 'hAR')
  342. areaPos = index;
  343. if(text==='O.T.')
  344. otPos = index;
  345. if(text===' Protekce')
  346. protPos = index;
  347.  
  348. });
  349.  
  350. $.each(rows,
  351. function (index, value)
  352. {
  353. if (index > 0) // skip header row
  354. {
  355. var columns = $(value).children();
  356. var id = $(columns[idPos]).children("span").clone().children().remove().end().text().trim();
  357.  
  358. if (!id)
  359. {
  360. id = $(columns[idPos]).text().trim();
  361. }
  362.  
  363. var name = $(columns[namePos]).text().trim();
  364. var power = $(columns[powerPos]).text().split('*').join('').trim();
  365. var area;
  366. var ot;
  367. var prot;
  368.  
  369. if(areaPos)
  370. area = $(columns[areaPos]).text().trim();
  371. if(otPos)
  372. ot = $(columns[otPos]).text().trim();
  373. if (protPos)
  374. prot = $(value).find('.listings_prot_mil').length === 1 ? "true" : "false";
  375.  
  376. renderChangesValue(id, power, area, powerPos, areaPos, value, ot, otPos, pastValueResolver);
  377.  
  378. if(!isNaN(parseFloat(id)))
  379. {
  380. var data = localStorage[id];
  381. var array = [];
  382.  
  383. var lastDbValPower = getLastDbValue(id, 'power');
  384. var lastDbValOt = getLastDbValue(id, 'ot');
  385. var lastDbValArea = getLastDbValue(id, 'area');
  386. var lastDbValProt = getLastDbValue(id, 'prot');
  387. var dataChanged = true;
  388.  
  389. if (lastDbValPower || lastDbValOt)
  390. dataChanged = (typeof power !== "undefined" && power !== lastDbValPower) ||
  391. (typeof ot !== "undefined" && ot !== lastDbValOt) ||
  392. (typeof area !== "undefined" && area !== lastDbValArea) ||
  393. (typeof prot !== "undefined" && prot !== lastDbValProt);
  394.  
  395. if(data)
  396. array= JSON.parse(data);
  397.  
  398. if (updateDbData)
  399. {
  400. if (dataChanged)
  401. {
  402. array.push({"power" : power, "area" : area, "date" : Date(), "ot": ot, "name": name, "prot" : prot});
  403. localStorage[id] = JSON.stringify(array);
  404. }
  405. else if (array.length > 0)
  406. {
  407. array[array.length-1].date = new Date();
  408. localStorage[id] = JSON.stringify(array);
  409. }
  410. }
  411. }
  412. }
  413. });
  414.  
  415. colorPercentages(table, '.power');
  416. colorPercentages(table, '.area');
  417. colorPercentages(table, '.ot');
  418. }
  419.  
  420. function main()
  421. {
  422. var tables = $('table:contains("Síla"):contains("ID"):not(#onlinePlayers)');
  423.  
  424. var pastValueResolver = (id, prop) => getLastDbValue(id, prop);
  425. $.each(tables, function (i, table) { renderTableInfo(table, pastValueResolver, true); });
  426. }
  427.  
  428. function colorPercentages(table, selector)
  429. {
  430. var percentElements = $(table).find(selector);
  431. var percentValues = $.map(
  432. percentElements,
  433. function(value)
  434. {
  435. return $(value).text().replace('k','').replace('%', '').replace('(', '').replace(')', '');
  436. }
  437. );
  438. var percentMax = Math.max.apply(Math, percentValues);
  439. var percentMin = Math.min.apply(Math, percentValues);
  440.  
  441. percentMax = percentMax === 0 ? 1 : percentMax;
  442. percentMin = percentMin === 0 ? 1 : percentMin;
  443.  
  444. $.each(
  445. percentElements,
  446. function(index, value)
  447. {
  448.  
  449. var currentValue = $(value).text().replace('k','').replace('%', '').replace('(', '').replace(')', '');
  450. var relativePercent = 0;
  451.  
  452. if(currentValue >= 0)
  453. {
  454. relativePercent = 50 + (Math.abs(currentValue) / (Math.abs(percentMax) / 50));
  455. }
  456. else
  457. {
  458. relativePercent = 50 - (Math.abs(currentValue) / (Math.abs(percentMin) / 50));
  459. }
  460.  
  461. $(value).css('color', percentToColor(relativePercent / 100));
  462. }
  463. );
  464. }
  465.  
  466. function renderHistoryTextField()
  467. {
  468. var tables = $('table:contains("Síla"):contains("ID"):not(#onlinePlayers)');
  469.  
  470. $.each(
  471. tables,
  472. function (i, table)
  473. {
  474. $(table).after("<label>Pocet hodin do zadu</label><input id='hour-field" + i + "' type='text'/>");
  475. $('#hour-field' + i).change(function()
  476. {
  477. var searchHoursInPast = Number($( this ).val().trim());
  478. var pastValueResolver = (id, prop) => getLastDbValue(id, prop);
  479.  
  480. $(table).find(".to-remove").remove();
  481. renderTableInfo(table, pastValueResolver, false);
  482. });
  483. });
  484. }
  485.  
  486. function kokotMeasure()
  487. {
  488. if (!localStorage.kokotMeasure)
  489. localStorage.kokotMeasure = 0;
  490. localStorage.kokotMeasure = Number(localStorage.kokotMeasure) + 1;
  491. $('body').append('<label style="position: absolute; left: 0; top: 0;">Jak velky jsi kokot: ' + localStorage.kokotMeasure + '</div>');
  492. }
  493.  
  494. function myPower()
  495. {
  496. var power = $('.value_power').text();
  497. var powerDb = Number(localStorage.me);
  498. var powerDifference = (power - powerDb);
  499.  
  500. if (powerDifference)
  501. {
  502. $('#LS_power_value').append('<span id="powerId" style="padding-left: 5px;">' + powerDifference + '</span>');
  503.  
  504. if (powerDifference < 0)
  505. {
  506. $('#powerId').css('color', 'RGB(255, 0, 0)');
  507.  
  508. document.title = 'Pokles o ' + powerDifference;
  509. beep(powerDifference);
  510. }
  511. else
  512. {
  513. $('#powerId').css('color', 'RGB(0, 255, 0)');
  514. }
  515. }
  516.  
  517. localStorage.me = power;
  518. }
  519.  
  520. function beep(difference)
  521. {
  522. if (localStorage.powerDiffEnabled === "true" && Math.abs(difference) > Number(localStorage.powerDiffTreshold))
  523. {
  524. sendSlackNotification($('#governor').text() + ' difference ' + difference);
  525. (new Audio('http://www.freespecialeffects.co.uk/soundfx/music/trumpets.wav')).play();
  526. }
  527. }
  528.  
  529. function checkNewMessage()
  530. {
  531. if (!localStorage.powerDiffTreshold)
  532. {
  533. localStorage.powerDiffTreshold = 0;
  534. }
  535.  
  536. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">New message notifier</label>');
  537.  
  538. $('#left_column_wrapper').append('<input id="messageNotifier" type="checkbox"/><br/>');
  539. $('#messageNotifier').prop('checked', localStorage.messageNotifier === "true");
  540. $('#messageNotifier').on("change keyup paste", function() {localStorage.messageNotifier = $("#messageNotifier").is(':checked');});
  541.  
  542. if ($('.new_post').length > 0 && localStorage.messageNotifier === "true")
  543. {
  544. sendSlackNotification($('#governor').text() + ' nova posta');
  545. (new Audio('https://www.mediacollege.com/downloads/sound-effects/star-trek/tng/tng-worf-incomingmessage.wav')).play();
  546. }
  547. }
  548.  
  549. function renderShieldStackPerc()
  550. {
  551. var shieldPwrElem = $('#econ_units_list').find('tr.tr_even:first > td:nth-child(6)');
  552. var shieldPwr = Number(shieldPwrElem.text());
  553. var totalPwr = Number($('#econ_units_list').find('.tr_econ_summary > td:nth-child(3)').text());
  554.  
  555. if (shieldPwr && totalPwr)
  556. {
  557. var shieldPerc = (100 * shieldPwr) / totalPwr;
  558.  
  559. shieldPwrElem.append(' (<span style="color: RGB(0, 255, 0);">' + shieldPerc.toFixed(1) + '%</span>)');
  560. }
  561. }
  562.  
  563. function renderNotes()
  564. {
  565. $('#left_column_wrapper').append('<br/><label>Notes</label><br/>');
  566. $('#left_column_wrapper').append('<textarea rows="4" cols="50" id="notes"></textarea>');
  567. $('#notes').val(localStorage.notes ? localStorage.notes : '');
  568. $('#notes').on("change keyup paste", function() {
  569. localStorage.notes = $('#notes').val();
  570. });
  571. }
  572.  
  573.  
  574. function formatDuration(duration) {
  575. var seconds = (duration / 1000).toFixed(0);
  576.  
  577. if (seconds > 60) {
  578. var minutes = (seconds / 60).toFixed(0);
  579.  
  580. if (minutes > 60) {
  581. var hours = (minutes / 60).toFixed(0);
  582.  
  583. if (hours > 24) {
  584. var days = (hours / 24).toFixed(0);
  585.  
  586. return "před " + days + "d";
  587. } else {
  588. return "před " + hours + "h";
  589. }
  590. } else {
  591. return "před " + minutes + "m";
  592. }
  593. } else {
  594. return "před " + seconds + "s";
  595. }
  596. }
  597.  
  598. function renderPlayers() {
  599.  
  600. function getPlayerTable(players) {
  601. var currentTime = new Date();
  602.  
  603. var tableStart =
  604. '<table id="listings_table_top20"><tbody>' +
  605. '<tr class="heading">' +
  606. '<td class="attacks_id">ID</td>' +
  607. '<td class="attacks_regent">Regent</td>' +
  608. '<td class="attacks_pwr">Síla</td>' +
  609. '<td class="attacks_protection"></td>' +
  610. '<td class="attacks_time">Čas vložení</td>' +
  611. '</tr>';
  612.  
  613. for (var i = 0; i < players.length; i++) {
  614. tableStart = tableStart +
  615. '<tr>' +
  616. '<td class="attacks_id">' + players[i].id + '</td>' +
  617. '<td class="attacks_regent">' + players[i].name + '</td>' +
  618. '<td class="attacks_pwr">' + players[i].power + '</td>' +
  619. '<td class="attacks_protection">' + (players[i].protection ? '*' : '') + '</td>' +
  620. '<td class="attacks_time">' + (formatDuration(Math.abs(currentTime - new Date(players[i].lastUpdate)))) + '</td></tr>';
  621. }
  622.  
  623. var tableEnd = '</tbody></table></div></div>';
  624.  
  625. return tableStart + tableEnd;
  626. }
  627.  
  628. var playersLink = $('#Attacks_list_detail a').attr("href").replace("vypis=utoky_detailne", "players");
  629. $('#Attacks_list_detail').after('<li id="playersLink"><a href="' + playersLink + '">Hráči</a></li>');
  630.  
  631. if (window.location.href.indexOf("players") != -1) {
  632. $('#central_column_bottom').empty();
  633.  
  634. getAllPlayers(function(data) {
  635. $('#central_column_bottom').append(getPlayerTable(data));
  636. });
  637. }
  638. }
  639.  
  640. function autorefresh()
  641. {
  642.  
  643. $('#left_column_wrapper').append('<br/><label>Auto hlidka (sec)</label><br/>');
  644. $('#left_column_wrapper').append('<input id="watchInterval" type="text" style="width: 120px;">');
  645. $('#left_column_wrapper').append('<input id="autoWatch" type="checkbox"/><br/>');
  646. $('#left_column_wrapper').append('<label>Bestiar</label><input id="autowatchBestiar" type="checkbox"/><br/>');
  647. $('#left_column_wrapper').append('<label>Cska</label><input id="autowatchCs" type="checkbox"/><br/>');
  648. $('#left_column_wrapper').append('<label>Armada</label><input id="autowatchArmy" type="checkbox"/><br/>');
  649. $('#left_column_wrapper').append('<label>Hospodareni</label><input id="autowatchHospodareni" type="checkbox"/><br/>');
  650. $('#left_column_wrapper').append('<label>Top hliny</label><input id="autowatchTopArea" type="checkbox"/><br/>');
  651. $('#left_column_wrapper').append('<label>Vase umisteni</label><input id="autowatchYourPlacing" type="checkbox"/><br/>');
  652. $('#left_column_wrapper').append('<label>Mozne cile</label><input id="autowatchAllowedTargets" type="checkbox"/><br/>');
  653.  
  654. $('#autoWatch').css('position', 'absolute');
  655. $('#autoWatch').css('top', '20px');
  656. $('#autoWatch').css('left', '5px');
  657.  
  658. $('#watchInterval').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  659. $('#watchInterval').val(localStorage.watchInterval ? localStorage.watchInterval : '');
  660. $('#watchInterval').on("change keyup paste", function() { localStorage.watchInterval = $('#watchInterval').val();});
  661.  
  662. addCheckboxDbListener('autoWatch');
  663. addCheckboxDbListener('autowatchBestiar');
  664. addCheckboxDbListener('autowatchCs');
  665. addCheckboxDbListener('autowatchArmy');
  666. addCheckboxDbListener('autowatchHospodareni');
  667. addCheckboxDbListener('autowatchTopArea');
  668. addCheckboxDbListener('autowatchYourPlacing');
  669. addCheckboxDbListener('autowatchAllowedTargets');
  670.  
  671. var timer;
  672.  
  673. if (localStorage.autoWatch === "true")
  674. {
  675. timer = startTimer();
  676. }
  677.  
  678. $('#autoWatch').on("change keyup paste",
  679. function()
  680. {
  681. if ($("#autoWatch").is(':checked'))
  682. {
  683. timer = startTimer();
  684. }
  685. else if(timer)
  686. {
  687. clearInterval(timer);
  688. }
  689. });
  690. }
  691.  
  692. function addCheckboxDbListener(id)
  693. {
  694. $('#' + id).prop('checked', localStorage[id] === "true");
  695. $('#' + id).on("change keyup paste", function() { localStorage[id] = $("#" + id).is(':checked')});
  696. }
  697.  
  698. function startTimer()
  699. {
  700. var counter = Number(localStorage.watchInterval) * 1000;
  701. var timer = setTimeout(
  702. function()
  703. {
  704. var settingArray = ['autowatchBestiar', 'autowatchCs', 'autowatchArmy', 'autowatchHospodareni', 'autowatchTopArea', 'autowatchYourPlacing', 'autowatchAllowedTargets'];
  705. settingArray = settingArray.filter(setting => localStorage[setting] === 'true')
  706.  
  707. var type = settingArray[Math.floor(Math.random() * settingArray.length)];;
  708.  
  709. console.log(type);
  710.  
  711. if (type === 'autowatchBestiar')
  712. {
  713. window.location.href = $( "a:contains('Bestiář')" ).attr('href');
  714. }
  715. else if (type === 'autowatchCs')
  716. {
  717. window.location.href = $( "a:contains('Výpis útoků')" ).attr('href');
  718. }
  719. else if (type === 'autowatchArmy')
  720. {
  721. window.location.href = $( "a:contains('Armáda')" ).attr('href');
  722. }
  723. else if (type === 'autowatchHospodareni')
  724. {
  725. window.location.href = $( "a:contains('Hospodaření')" ).attr('href');
  726. }
  727. else if (type === 'autowatchTopArea')
  728. {
  729. window.location.href = $( "a:contains('Možné cíle')" ).attr('href').replace('&prehled=mozne_cile', '&prehled=podle_pozemku');
  730. }
  731. else if (type === 'autowatchYourPlacing')
  732. {
  733. window.location.href = $( "a:contains('Možné cíle')" ).attr('href').replace('&prehled=mozne_cile', '&prehled=vase_umisteni');
  734. }
  735. else if (type === 'autowatchAllowedTargets')
  736. {
  737. window.location.href = $( "a:contains('Možné cíle')" ).attr('href');
  738. }
  739.  
  740. timer = setTimeout(this, 1000 + counter * Math.random());
  741. }, (2500 + counter * Math.random()));
  742.  
  743. return timer;
  744. }
  745.  
  746. function powerDiffAlarm()
  747. {
  748. if (!localStorage.powerDiffTreshold)
  749. {
  750. localStorage.powerDiffTreshold = 0;
  751. }
  752.  
  753. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Power alarm (power)</label>');
  754.  
  755. $('#left_column_wrapper').append('<input id="powerDiffEnabled" type="checkbox"/><br/>');
  756. $('#powerDiffEnabled').prop('checked', localStorage.powerDiffEnabled === "true");
  757. $('#powerDiffEnabled').on("change keyup paste", function() {localStorage.powerDiffEnabled = $("#powerDiffEnabled").is(':checked');});
  758.  
  759. $('#left_column_wrapper').append('<input id="powerDiffTreshold" type="text" style="width: 120px;"><br/>');
  760. $('#powerDiffTreshold').css('background', 'url("/html/img/inputs_sprite.png") 0 0 no-repeat transparent');
  761. $('#powerDiffTreshold').val(localStorage.powerDiffTreshold);
  762. $('#powerDiffTreshold').on("change keyup paste", function() { localStorage.powerDiffTreshold = $('#powerDiffTreshold').val();});
  763. }
  764.  
  765. function checkBestiar()
  766. {
  767. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Bestiar check (unit.exp,unit2.exp)</label>');
  768.  
  769. $('#left_column_wrapper').append('<input id="bestiarEnabled" type="checkbox"/><br/>');
  770. $('#bestiarEnabled').prop('checked', localStorage.bestiarEnabled === "true");
  771. $('#bestiarEnabled').on("change keyup paste", function() { localStorage.bestiarEnabled = $("#bestiarEnabled").is(':checked'); });
  772.  
  773. $('#left_column_wrapper').append('<textarea id="bestiarText" rows="2" cols="50"><br/>');
  774.  
  775. $('#bestiarText').val(localStorage.bestiarText ? localStorage.bestiarText : '');
  776. $('#bestiarText').on("change keyup paste", function() { localStorage.bestiarText = $('#bestiarText').val();});
  777.  
  778. if (window.location.pathname.includes("obchod") && localStorage.bestiarText && localStorage.bestiarEnabled === "true")
  779. {
  780. var unitExpPairs = localStorage.bestiarText.split(",");
  781. var count = 0;
  782.  
  783. $.each(unitExpPairs,
  784. function(index, unitExpPair)
  785. {
  786. var unit = unitExpPair.split(".")[0].trim();
  787. var exp = Number(unitExpPair.split(".")[1].trim());
  788. var stack;
  789.  
  790. if (unit.includes("#"))
  791. {
  792. stack = unit.split('#')[1].trim();
  793. unit = unit.split('#')[0].trim();
  794. }
  795.  
  796. // unit elements
  797. var elements = $("#beast_shop tr:not(.best_me_buyer):contains('" + unit + "')");
  798.  
  799. elements = elements.filter(
  800. function(i, el)
  801. {
  802. var expEl = $(el).find(".beast_shop_unit_exp");
  803. var stackV = $(el).find(".beast_shop_unit_stack");
  804.  
  805. return exp <= Number($(expEl).text().replace('%', '')) && stack <= Number($(stackV).text());
  806. }
  807. );
  808.  
  809. $.each(elements,
  810. function(index, el)
  811. {
  812. $(el).css('background-color', 'darkred');
  813. });
  814.  
  815. // contains unit
  816. if (elements.length !== 0)
  817. {
  818. if (unit === 'Str')
  819. {
  820. unit = "Shooter stack bigger " + stack;
  821. }
  822.  
  823. var url = 'http://api.voicerss.org/?key=9ed0aef9a2c64bc5abd65ca333588164&c=wav&hl=ru-ru&src=' + unit;
  824.  
  825. setTimeout(function(){
  826. (new Audio(url)).play();}, 1000 * count);
  827. count++;
  828. }
  829. }
  830. );
  831. }
  832. }
  833.  
  834. function checkCs() {
  835.  
  836. if (!localStorage.csEnabled)
  837. {
  838. localStorage.csEnabled = "true";
  839. }
  840.  
  841. if (!localStorage.csTreasholdPercentage)
  842. {
  843. localStorage.csTreasholdPercentage = 5;
  844. }
  845.  
  846. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Cs treashold diff %</label>');
  847. $('#left_column_wrapper').append('<input id="csEnabled" type="checkbox"/>');
  848. $('#left_column_wrapper').append('<input type="text" id="csTreasholdPercentage" style="width: 120px;"/><br/>');
  849.  
  850.  
  851. $('#csEnabled').prop('checked', localStorage.csEnabled === "true");
  852. $('#csEnabled').on("change keyup paste", function() {localStorage.csEnabled = $("#csEnabled").is(':checked');});
  853. $('#csTreasholdPercentage').val(localStorage.csTreasholdPercentage ? localStorage.csTreasholdPercentage : '');
  854. $('#csTreasholdPercentage').on("change keyup paste", function() { localStorage.csTreasholdPercentage = $('#csTreasholdPercentage').val();});
  855.  
  856. var csList = $(".attacks_list_wrapper:contains('Bráněné útoky') > .attacks_wrapper > .attacks_table > tbody > tr:not('.heading'):contains('nevráceno')");
  857. var count = 0;
  858.  
  859. $.each(csList, function (i, cs) {
  860. var name = $(cs).find('.attacks_regent').text().trim();
  861. var id = $(cs).find('.attacks_id .tt_player').clone().children().remove().end().text().trim();
  862. var powerDb = getLastDbValue(id, 'power');
  863. var power = $(cs).find('.attacks_pwr').text().trim();
  864. var powerDiff = power - powerDb;
  865. var powerDiffPerc = (powerDiff / power) * 100;
  866.  
  867. console.log('cs ' + cs + ' id ' + id + ' powerdiff: ' + powerDiff);
  868.  
  869. if (localStorage.csEnabled === "true" && powerDiffPerc < 0 && Math.abs(powerDiffPerc) >= Number(localStorage.csTreasholdPercentage)) {
  870. var url = 'http://soundbible.com/grab.php?id=2103&type=wav';
  871.  
  872. sendSlackNotification(name + ' spadl o ' + powerDiff);
  873.  
  874. setTimeout(function() {
  875. (new Audio(url)).play();}, 1000 * count);
  876. count++;
  877. }
  878. });
  879. }
  880.  
  881. function renderPlayersOnline()
  882. {
  883.  
  884. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Online player treshold (h)</label>');
  885.  
  886. $('#left_column_wrapper').append('<input id="onlinePlayerEnabled" type="checkbox"/><br/>');
  887. $('#onlinePlayerEnabled').prop('checked', localStorage.onlinePlayerEnabled === "true");
  888. $('#onlinePlayerEnabled').on("change keyup paste", function(){localStorage.onlinePlayerEnabled = $("#onlinePlayerEnabled").is(':checked');});
  889.  
  890. $('#left_column_wrapper').append('<input type="text" id="onlinePlayerTreshold" style="width: 120px;" /><br/>');
  891.  
  892. $('#onlinePlayerTreshold').val(localStorage.onlinePlayerTreshold ? localStorage.onlinePlayerTreshold : '');
  893. $('#onlinePlayerTreshold').on("change keyup paste", function() { localStorage.onlinePlayerTreshold = $('#onlinePlayerTreshold').val();});
  894.  
  895. if (!localStorage.onlinePlayerTreshold)
  896. {
  897. localStorage.onlinePlayerTreshold = 0.5;
  898. }
  899.  
  900. if (localStorage.onlinePlayerEnabled !== "true")
  901. {
  902. return;
  903. }
  904.  
  905. var treshold = Number(localStorage.onlinePlayerTreshold);
  906. var changedValues = Array.apply(0, new Array(localStorage.length))
  907. .map(function (o, i) {return localStorage.key(i);})
  908. .filter(function(i){return /^\d+$/.test(i)})
  909. .map(function(id)
  910. {
  911. var otVal = getPreviousVal(id, treshold, "ot");
  912. var areaVal = getPreviousVal(id, treshold, "area");
  913. var powerVal = getPreviousVal(id, treshold, "power");
  914. var powerDb = getLastDbValue(id, 'power');
  915.  
  916. var dates = [otVal, areaVal, powerVal]
  917. .filter(val => val)
  918. .sort((a, b) => (a.date > b.date) ? 1 : -1);
  919.  
  920. if (dates && dates.length > 0)
  921. {
  922. var result = dates[0];
  923. result["id"] = id;
  924. result["timeDiff"] = Math.abs(new Date() - new Date(result.date));;
  925. if (powerVal)
  926. {
  927. result["power"] = powerVal.power;
  928. }
  929. if (areaVal)
  930. {
  931. result["area"] = areaVal.area;
  932. }
  933. if (otVal)
  934. {
  935. result["ot"] = otVal.ot;
  936. }
  937. return result;
  938. }
  939. })
  940. .filter(val => val)
  941. .sort((a, b) => (a.timeDiff > b.timeDiff) ? 1 : -1);;
  942.  
  943. var tableContent = changedValues.map(function(val)
  944. {
  945. var powerDb = getLastDbValue(val.id, 'power');
  946. var areaDb = getLastDbValue(val.id, 'area');
  947. var name = getLastDbValue(val.id, 'name');
  948. var timeDiff = val.timeDiff;
  949. var otsDiff = getLastDiff(val.id, treshold, "ot");
  950.  
  951. var protDb = getLastDbValue(val.id, 'prot') === 'true' ? '*' : '';
  952. return '<tr><td class="onlineIds">' + val.id + '</td><td style="word-break: break-all;">' + name + protDb + '</td><td>' +
  953. powerDb + '</td><td>' + areaDb + '</td><td>+' +
  954. otsDiff + '</td><td>' + formatDuration(timeDiff) + '</td></tr>';
  955. })
  956. .join('');
  957.  
  958. $(document.body).append('<table id="onlinePlayers" style="bottom: 0;width: 300px; position: fixed;right: 0px;background-color: black;overflow-y: scroll;max-height: 100%;">' +
  959. '<tr class="heading"><td>ID</td><td>Name</td><td>Síla</td><td>hAR</td><td>TU</td><td><td></tr>' +
  960. tableContent +
  961. '</table>');
  962.  
  963. var selectedIds = localStorage["selectedIds"] ? JSON.parse(localStorage["selectedIds"]) : [];
  964. var onlineIds = $('.onlineIds').map(function(){
  965. return $.trim($(this).text());
  966. }).get();
  967.  
  968. var selectedOnlineIds = selectedIds
  969. .filter(id => onlineIds.includes(id))
  970. .filter(function(item, pos, self) {return self.indexOf(item) == pos;}); // remove redundances;
  971.  
  972. // remove non online from map
  973. localStorage["selectedIds"] = JSON.stringify(selectedOnlineIds);
  974. selectedOnlineIds.forEach(id => markTableRowWithId(id, true));
  975.  
  976. $('.onlineIds').on('click', function(event)
  977. {
  978. var id = $(event.target).text().trim();
  979. var selectedIds = JSON.parse(localStorage["selectedIds"]);
  980. if (selectedIds.includes(id))
  981. {
  982. selectedIds.pop(id);
  983. markTableRowWithId(id, false);
  984. }
  985. else
  986. {
  987. selectedIds.push(id);
  988. markTableRowWithId(id, true);
  989. }
  990. localStorage["selectedIds"] = JSON.stringify(selectedIds);
  991. });
  992.  
  993. var pastValueResolver = (id, prop) =>
  994. {
  995. var filtered = changedValues.filter(val => val.id === id);
  996.  
  997. if (filtered && filtered[0][prop])
  998. {
  999. return filtered[0][prop];
  1000. }
  1001. return getLastDbValue(id, prop);
  1002. }
  1003. renderTableInfo($('#onlinePlayers'), pastValueResolver, false);
  1004. }
  1005.  
  1006. function markTableRowWithId(id, mark)
  1007. {
  1008. var tr = $('table:contains("ID")').find('tr:contains("' + id +'")');
  1009. if (tr && mark)
  1010. {
  1011. $(tr).css("background-color", "#9400D3");
  1012. $('html, body').animate({
  1013. scrollTop: ($(tr).first().offset().top)
  1014. },10);
  1015. }
  1016. else if (tr)
  1017. {
  1018. $(tr).css("background-color", "");
  1019. }
  1020. }
  1021.  
  1022.  
  1023. function getPreviousVal(id, treshold, property)
  1024. {
  1025. var arr = filterDbValuesByTimeTreashold(id, treshold);
  1026. var values = arr
  1027. .filter(function(val) {return val[property]})
  1028. .map(e => e[property])
  1029. .map((e, i, final) => final.indexOf(e) === i && i)
  1030. .filter(e => arr[e])
  1031. .map(e => arr[e]);
  1032.  
  1033. if (values.length > 1)
  1034. {
  1035. return values[1];
  1036. }
  1037. }
  1038.  
  1039. function getLastDiff(id, treshold, property)
  1040. {
  1041. var values = filterDbValuesByTimeTreashold(id, treshold)
  1042. .map(function(val) {return val[property]})
  1043. .filter(function(val) {return val})
  1044. .filter(function(item, pos, self) {return self.indexOf(item) == pos;}); // remove redundances
  1045.  
  1046. var diff = 0;
  1047.  
  1048. if (values.length > 1)
  1049. {
  1050. diff = values[0] - values[1];
  1051. }
  1052.  
  1053. return diff;
  1054. }
  1055.  
  1056. function filterDbValuesByTimeTreashold(id, treshold)
  1057. {
  1058. var dbValues = JSON.parse(localStorage[id]);
  1059.  
  1060. dbValues.reverse();
  1061. return dbValues.filter(function(i) {return ((Math.abs(new Date() - new Date(i.date)) + 1000) / 36e5) < treshold;});
  1062. }
  1063.  
  1064. function sendSlackNotification(message)
  1065. {
  1066. // general channel
  1067. var channel = "https://hooks.slack.com/services/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";
  1068.  
  1069. var player = $('#governor').text();
  1070.  
  1071. if (player === 'princezna Xena')
  1072. {
  1073. channel = "https://hooks.slack.com/services/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";
  1074. }
  1075. else if (player === 'Jeina')
  1076. {
  1077. channel = "https://hooks.slack.com/services/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";
  1078. }
  1079.  
  1080. $.ajax({
  1081. data: 'payload=' + JSON.stringify({
  1082. "text": message
  1083. }),
  1084. dataType: 'json',
  1085. processData: false,
  1086. type: 'POST',
  1087. url: channel
  1088. });
  1089. }
  1090.  
  1091. function searchEnhance()
  1092. {
  1093. // only for search page
  1094. if (window.location.href.includes('multifunc'))
  1095. {
  1096. var rows = $('#search_results_table').find('tr:not(.heading):not(.tr_summary)')
  1097.  
  1098. $.each(rows,
  1099. function(index, el)
  1100. {
  1101. var id = $($(el).children()[0]).text().trim().substring(0,4);
  1102. var powerCol = $(el).children()[4];
  1103. var atackCol = $(el).children()[7];
  1104. var power = Number($(powerCol).text().trim());
  1105. var powerMine = Number($('.value_power').text());
  1106.  
  1107. $(atackCol).append('<br/><a id="adjustArmy' + id +'" style="color: green;">Pripravit armadu</a>');
  1108. $('#adjustArmy' + id).click(
  1109. function() {
  1110. localStorage.powerDiff = (power * 1.245) - powerMine;
  1111. var win = window.open($("a:contains('Armáda')" ).attr('href'));
  1112. win.focus();
  1113. });
  1114. });
  1115.  
  1116. }
  1117. }
  1118.  
  1119. function isLogged()
  1120. {
  1121. return $('#player_detail').length > 0
  1122. }
  1123.  
  1124. function autoLoginSettings()
  1125. {
  1126. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Auto login (s)</label>');
  1127. $('#left_column_wrapper').append('<input id="autoLogin" type="checkbox"/>');
  1128. $('#left_column_wrapper').append('<input type="text" id="autoLoginInterval" style="width: 120px;"/><br/>');
  1129.  
  1130. $('#autoLogin').prop('checked', localStorage.autoLogin === "true");
  1131. $('#autoLogin').on("change keyup paste", function() {localStorage.autoLogin = $("#autoLogin").is(':checked');});
  1132. $('#autoLoginInterval').val(localStorage.autoLoginInterval ? localStorage.autoLoginInterval : '');
  1133. $('#autoLoginInterval').on("change keyup paste", function() { localStorage.autoLoginInterval = $('#autoLoginInterval').val();});
  1134. }
  1135.  
  1136. function agregateByProp(prop)
  1137. {
  1138. var groupedValues = Array.apply(0, new Array(localStorage.length))
  1139. .map(function (o, i) {return localStorage.key(i);})
  1140. .filter(function(i){return /^\d+$/.test(i)})
  1141. .map(function(id)
  1142. {
  1143. var values = JSON.parse(localStorage[id]);
  1144.  
  1145. var agregated = values
  1146. .filter(val => val[prop])
  1147. .map(val => ({date : val.date, value : val[prop]}))
  1148. .reduce(aggregateByHour, {});
  1149.  
  1150. return Object.values(agregated)
  1151. .map(val => val[0]);
  1152. })
  1153. .flatMap(val => val)
  1154. .reduce(aggregateByHour, {});
  1155.  
  1156.  
  1157. return Object.values(groupedValues).map(val =>
  1158. {
  1159. var size = val.length;
  1160. var date = val[0].date;
  1161. var average = val.filter(a => a)
  1162. .filter(a => a.value)
  1163. .map(a => a.value)
  1164. .filter(a => a !== '-1')
  1165. .filter(function(a){return /^\d+$/.test(a)})
  1166. .reduce((a,b) => Number(a) + Number(b), 0) / size;
  1167. return {date : date, average : average};
  1168. })
  1169. .sort((a, b) => (new Date(a.date) > new Date(b.date)) ? 1 : -1);
  1170. }
  1171.  
  1172. function aggregateByHour(acc, val2)
  1173. {
  1174. var date = new Date(val2.date);
  1175. var yearWeek = moment(date).year() + '-' + moment(date).week() + '-' + moment(date).day()+ '-' + moment(date).hour();
  1176. if (typeof acc[yearWeek] === 'undefined') {
  1177. acc[yearWeek] = [];
  1178. }
  1179.  
  1180. acc[yearWeek].push(val2);
  1181. return acc;
  1182. }
  1183.  
  1184. function renderMeliorGraph()
  1185. {
  1186. $('#left_column_wrapper').append('<br/><label style="padding-right: 25px;">Average graphs</label>');
  1187. $('#left_column_wrapper').append('<input id="averageGraphEnabled" type="checkbox"/>');
  1188.  
  1189. $('#averageGraphEnabled').on("change keyup paste", function()
  1190. {
  1191. var areaValues = agregateByProp('area');
  1192. renderChart(areaValues, 'average', 'areaGraph', $('#footer'), 24 * 9);
  1193.  
  1194. var powerValues = agregateByProp('power');
  1195. renderChart(powerValues, 'average', 'powerGraph', $('#footer'), 24 * 9);
  1196.  
  1197. var otValues = agregateByProp('ot');
  1198. renderChart(otValues, 'average', 'otGraph', $('#footer'), 24 * 9);
  1199. });
  1200.  
  1201. }
  1202.  
  1203. function removeProtectionRows()
  1204. {
  1205. $('td:contains("Protekce")').prepend('<input id="protRemoveCheckbox" type="checkbox"/>');
  1206.  
  1207. $('#protRemoveCheckbox').on("change keyup paste", function(event)
  1208. {
  1209. if (this.checked)
  1210. {
  1211. $('table:contains("Síla"):contains("ID")').find('tr:not(".playerUnits")').has('.listings_prot_mil').hide();
  1212. }
  1213. else
  1214. {
  1215. $('table:contains("Síla"):contains("ID")').find('tr:not(".playerUnits")').has('.listings_prot_mil').show();
  1216. }
  1217.  
  1218. event.stopPropagation();
  1219. });
  1220. }
  1221.  
  1222. function parseAndRenderBattleForId()
  1223. {
  1224. $.each($('.post_msg_body:contains("Všechna kola boje")'), (index, renderTo) =>
  1225. {
  1226.  
  1227. var hisAttacks = $(renderTo).find('.attack_round_4').find('.his_unit_attacks')
  1228. .filter((index, val) => !$(val).parent().hasClass('unit_strikes_back'))
  1229. .map((i, val) => parseText($(val).text()))
  1230. .filter(val => !val.firstUnit)
  1231. .filter(val => !val.secondUnit)
  1232. .sort((a, b) => b.firstCount - a.firstCount);
  1233.  
  1234. var mineAttacks = $(renderTo).find('.attack_round_4').find('.my_unit_attacks')
  1235. .filter((index, val) => !$(val).parent().hasClass('unit_strikes_back'))
  1236. .map((i, val) => parseText($(val).text()))
  1237. .filter(val => !val.firstUnit)
  1238. .filter(val => !val.secondUnit)
  1239. .sort((a, b) => b.firstCount - a.firstCount);
  1240.  
  1241. var idAtacker = $(renderTo).find('.fight_attacker').text().split('(')[1].replace(')', '').trim();
  1242. var idDeffender = $(renderTo).find('.fight_defender').text().split('(')[1].replace(')', '').trim();
  1243. var mineId = $('form').find('input[name="id"]').val().trim();
  1244.  
  1245. var hisUnits;
  1246.  
  1247. if (idAtacker === mineId)
  1248. {
  1249. hisUnits = hisAttacks.map((i,val) => ({unit : val.firstUnit, count : val.firstCount}));
  1250. localStorage['attack' + idDeffender] = JSON.stringify(hisUnits.toArray());
  1251. }
  1252. else
  1253. {
  1254. hisUnits = mineAttacks.map((i,val) => ({unit : val.firstUnit, count : val.firstCount}));
  1255. localStorage['attack' + idAtacker] = JSON.stringify(hisUnits.toArray());
  1256. }
  1257. });
  1258. }
  1259.  
  1260. function parseText(text)
  1261. {
  1262. var rows = text.trim().split("\n");
  1263. var unitAndCount;
  1264.  
  1265. if (rows[0].includes(' -> '))
  1266. {
  1267. unitAndCount = rows[0].split(' -> ');
  1268. }
  1269. else if (rows[0].includes(' => '))
  1270. {
  1271. unitAndCount = rows[0].split(' => ');
  1272. }
  1273.  
  1274. var firstUnitAndCount = unitAndCount[0].trim().split(' x ');
  1275. var secondUnitAndCount = unitAndCount[1] ? unitAndCount[1].trim().split(' x ') : '';
  1276.  
  1277. var firstCount = firstUnitAndCount[0] ? firstUnitAndCount[0].trim() : '1';
  1278. var firstUnit = firstUnitAndCount[1] ? firstUnitAndCount[1].trim() : firstUnitAndCount[0].trim();
  1279.  
  1280. if (!firstUnitAndCount[1])
  1281. {
  1282. firstCount = '1';
  1283. }
  1284.  
  1285. var secondCount = secondUnitAndCount[0] ? secondUnitAndCount[0].trim() : '1';
  1286. var secondUnit = secondUnitAndCount[1] ? secondUnitAndCount[1].trim() : secondUnitAndCount[0];
  1287.  
  1288. if (!secondUnitAndCount[1])
  1289. {
  1290. secondCount = '1';
  1291. }
  1292.  
  1293. return {firstCount : firstCount, firstUnit : firstUnit, secondCount : secondCount , secondUnit : secondUnit};
  1294. }
  1295.  
  1296. function parseUnitStats()
  1297. {
  1298. var rows =$('#units_help').find('tr');
  1299.  
  1300. $.each(rows,
  1301. function (index, value)
  1302. {
  1303. if (index > 0) // skip header row
  1304. {
  1305. var columns = $(value).children();
  1306. var name = $(columns[0]).text().trim();
  1307. var attackType = $(columns[3]).text().trim();
  1308. var php = $(columns[4]).text().trim();
  1309. var type = $(columns[5]).text().trim();
  1310. var relativeDmg = $(columns[9]).text().trim();
  1311. var relativeDef = $(columns[10]).text().trim();
  1312. var relativeLife = $(columns[11]).text().trim();
  1313. var relativeIni = $(columns[12]).text().trim();
  1314. var power = $(columns[16]).text().trim();
  1315.  
  1316. localStorage[name] = JSON.stringify({attackType : attackType, php : php, type : type, power : power,
  1317. relativeDmg : relativeDmg, relativeDef : relativeDef, relativeLife : relativeLife, relativeIni : relativeIni});
  1318. }
  1319. }
  1320. );
  1321. }
  1322.  
  1323. function renderNoteForPlayer()
  1324. {
  1325. $.each($('.tt_player'), (index, renderTo) =>
  1326. {
  1327. // how to get id?
  1328. var id = $(renderTo).text().trim().substring(0,4);
  1329.  
  1330. var popup = $(renderTo).find('.tooltip');
  1331.  
  1332. $(popup).css('background-color', 'black');
  1333. if ($(popup).find('textarea').length === 0)
  1334. {
  1335. $(popup).append('<br/><label>Notes for player</label><br/>');
  1336. $(popup).append('<textarea rows="4" cols="50" id="notes' + id + '"></textarea>');
  1337. $('#notes' + id).val(localStorage["notes" + id] ? localStorage["notes" + id] : '');
  1338. $('#notes' + id).on("change keyup paste click", function(event)
  1339. {
  1340. localStorage["notes" + id] = $('#notes' + id).val();
  1341. event.stopPropagation();
  1342. });
  1343.  
  1344. $(popup).append('<br/><label>AttackUnits for player</label><br/>');
  1345. $(popup).append(renderPlayersUnits(id));
  1346. }
  1347. });
  1348. }
  1349.  
  1350. function renderPlayersUnits(id)
  1351. {
  1352. $('.tooltip').css('min-width', '450px');
  1353. var table = '<table><tr class="playerUnits"><td>Name</td><td>Count</td><td>Power</td><td>Dmg rel.</td><td>Ini rel.</td><td>Attack type</td><td>Phb</td><td>Type</td></tr>';
  1354.  
  1355. if (localStorage["attack" + id])
  1356. {
  1357. var unitCountMap = JSON.parse(localStorage["attack" + id]);
  1358.  
  1359. unitCountMap.forEach(val =>
  1360. {
  1361. var unit = val.unit;
  1362. var count = val.count;
  1363. table += '<tr class="playerUnits"><td>' + unit + '</td>';
  1364. table += '<td>' + count + '</td>';
  1365.  
  1366. if (localStorage[unit])
  1367. {
  1368. var unitData = JSON.parse(localStorage[unit]);
  1369. table += '<td>' + (Number(unitData.power) * Number(count)).toFixed(0) + '</td>';
  1370. table += '<td>' + ((12 + Number(unitData.relativeDmg) * 5) * Number(unitData.power) * Number(count)).toFixed(0) + '</td>';
  1371. table += '<td>' + ((Number(unitData.relativeIni) + 1) * Number(count)).toFixed(0) + '</td>';
  1372. table += '<td>' + (unitData.attackType === 'Bojová' ? 'B' : 'S') + '</td>';
  1373. table += '<td>' + unitData.php + '</td>';
  1374. table += '<td>' + (unitData.type === 'Pozemní' ? 'P' : 'L') + '</td></tr>';
  1375. }
  1376. });
  1377. }
  1378.  
  1379. return table;
  1380. }
  1381.  
  1382. function getUnitPowerByName(unitName)
  1383. {
  1384. var data = JSON.parse(localStorage[unitName]);
  1385.  
  1386. if (data.attackType === 'Bojová')
  1387. {
  1388. return Number(data.power) * 0.5;
  1389. }
  1390. else
  1391. {
  1392. return Number(data.power) * 1;
  1393. }
  1394. }
  1395.  
  1396. if (isLogged())
  1397. {
  1398. parseUnitStats();
  1399. parseAndRenderBattleForId();
  1400. //renderMeliorGraph();
  1401. //autoLoginSettings();
  1402. searchEnhance();
  1403. //checkCs();
  1404. renderNoteForPlayer();
  1405. renderPlayersOnline();
  1406. makeTableOrderable();
  1407. renderNotes();
  1408. checkBestiar();
  1409. //powerDiffAlarm();
  1410. //renderPlayers();
  1411. renderShieldStackPerc();
  1412. //myPower();
  1413. //kokotMeasure();
  1414. //renderHistoryTextField();
  1415. main();
  1416. spies();
  1417. //autorefresh();
  1418. //checkNewMessage();
  1419. removeProtectionRows();
  1420. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement