Advertisement
Guest User

Untitled

a guest
Jul 1st, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.52 KB | None | 0 0
  1. // ==UserScript==
  2. // @name richard.kolisek
  3. // @version 1.8
  4. // @description utility
  5. // @grant none
  6. // @require http://code.jquery.com/jquery-1.10.2.min.js
  7. // @include http://www.meliorannis.com/*
  8. // ==/UserScript==
  9.  
  10. var searchHoursInPast;
  11.  
  12. var percentColors = [
  13. { pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },
  14. { pct: 0.5, color: { r: 168, g: 168, b: 168 } },
  15. { pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ];
  16.  
  17. var percentToColor = function(pct)
  18. {
  19. for (var i = 0; i < percentColors.length; i++)
  20. {
  21. if (pct <= percentColors[i].pct)
  22. {
  23. var lower = (i === 0) ? percentColors[i] : percentColors[i - 1];
  24. var upper = (i === 0) ? percentColors[i + 1] : percentColors[i];
  25. var range = upper.pct - lower.pct;
  26. var rangePct = (pct - lower.pct) / range;
  27. var pctLower = 1 - rangePct;
  28. var pctUpper = rangePct;
  29.  
  30. var color =
  31. {
  32. r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),
  33. g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),
  34. b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)
  35. };
  36.  
  37. return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';
  38. }
  39. }
  40. };
  41.  
  42. function getLastDbValue(id, property)
  43. {
  44. var dbValues = localStorage[id];
  45. if (dbValues)
  46. {
  47. dbValues = JSON.parse(dbValues);
  48. dbValues.reverse();
  49.  
  50. for (var i in dbValues) {
  51.  
  52. var hourDifference = Math.abs(new Date() - new Date(dbValues[i].date)) / 36e5;
  53. if (searchHoursInPast && hourDifference > searchHoursInPast)
  54. {
  55. if (dbValues[i][property])
  56. return dbValues[i][property];
  57. }
  58. else if (!searchHoursInPast)
  59. {
  60. if (dbValues[i][property])
  61. return dbValues[i][property];
  62. }
  63. }
  64. }
  65.  
  66. return -1;
  67. }
  68.  
  69. function renderChangesValue(id, power, area, powerPos, areaPos, row, ot, otPos)
  70. {
  71. var powerDb = getLastDbValue(id, 'power');
  72. var areaDb = getLastDbValue(id, 'area');
  73. var otDb = getLastDbValue(id, 'ot');
  74.  
  75. var columns = $(row).children();
  76.  
  77. var powerColumn = $(columns[powerPos]);
  78. powerColumn.append(renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb, true));
  79.  
  80. var dlg = document.getElementById(id + '-power-dialog');
  81.  
  82. $('#' + id + '-power').click(function() {
  83. dlg.style.display = 'block';
  84. });
  85.  
  86. $('#' + id + '-power-dialog').click(function() {
  87. dlg.style.display = "none";
  88. });
  89.  
  90. if(areaPos)
  91. {
  92. var areaColumn = $(columns[areaPos]);
  93. areaColumn.append(renrerValue(id, 'area', area, areaDb==-1 ? area : areaDb, false));
  94. }
  95.  
  96. if (otPos)
  97. {
  98. var otPlus = Number(ot) - Number(otDb);
  99.  
  100. if (otPlus && otPlus > 0)
  101. {
  102. var otColumn = $(columns[otPos]);
  103. otColumn.append('(<span class="to-remove" style="color: rgb(0, 255, 0);">+' + otPlus + '</span>)');
  104. }
  105. }
  106. }
  107.  
  108. function renrerValue(id, type, value, valueDb, isPercent)
  109. {
  110.  
  111. var percent = Math.round(percent * 10) / 10;
  112. percent = (value / (valueDb / 100) - 100).toFixed(1) + '%';
  113.  
  114. var val = (Math.round((value - valueDb) / 100) / 10) + 'k';
  115.  
  116. var element = '<font size="2" class="to-remove">(<span id="' + id + '-' + type + '" class="' + type +'">' + (isPercent ? percent : val) + '</span>)';
  117. var dialog =
  118. '<div id="' + id + '-' + type + '-dialog" class="' + type + '-dialog to-remove" style="display: none; position: fixed; z-index: 1;left: 0;top: 0;width: 100%;height: 100%;overflow: auto;background-color: rgb(0,0,0);background-color: rgba(0,0,0,0.4);">' +
  119. '<div style="background-color: #fefefe;margin: 15% auto;padding: 20px;border: 1px solid #888;width: 30%;">' +
  120. '<table border="1" style="width:100%;"><tr style="text-align: left;"><td>Čas</td><td>Síla</td><td>Rozloha</td><td>O.T</td></tr>';
  121.  
  122. var storage = localStorage[id];
  123.  
  124. if (storage) {
  125. var data = JSON.parse(storage);
  126. data.reverse();
  127.  
  128. for (var i in data) {
  129. dialog = dialog + '<tr style="text-align: left;"><td>' + formatDate(data[i].date) +
  130. '</td><td>' + data[i].power + '</td><td>' + data[i].area + '</td><td>' + data[i].ot + '</td></tr>';
  131. }
  132. }
  133.  
  134. dialog = dialog + '</table></div></dialog>';
  135.  
  136. return element + dialog;
  137. }
  138.  
  139. function formatDate(date)
  140. {
  141. var d = new Date(date);
  142. return [d.getDate(), (d.getMonth()+1)].join('.') + ' ' +
  143. [ d.getHours(), d.getMinutes()].join(':');
  144. }
  145.  
  146. function spies()
  147. {
  148. var table = $('#spies_report');
  149.  
  150. if (table)
  151. {
  152. var id = table.find('sup').text().replace('(', '').replace(')', '');
  153. var powerColumn = table.find('td:contains("Síla provincie")').next();
  154. var power = powerColumn.text();
  155. var powerMine = $('#LS_power_value').text();
  156.  
  157. var powerDb = getLastDbValue(id, 'power');
  158. powerColumn.append(renrerValue(id, 'power', power, powerDb==-1 ? power : powerDb));
  159. powerColumn.append('<a id="adjustArmy">Pripravit armadu na utok</a>');
  160.  
  161. $('#adjustArmy').click(
  162. function() {
  163. localStorage.powerDiff = ((Number(powerMine) / 100) * 80) - Number(power);
  164. window.location.href = $( "a:contains('Armáda')" ).attr('href');
  165. });
  166. }
  167.  
  168. $('#calculator_wrapper_bottom').append('<label>Nazev jednotky stitu</label>');
  169. $('#calculator_wrapper_bottom').append('<input type="text" id="shieldUnit" />');
  170. $('#calculator_wrapper_bottom').append('<label>Sila 1 jednotky stitu</label>');
  171. $('#calculator_wrapper_bottom').append('<input type="text" id="shieldUnitPower" />');
  172.  
  173. $('#shieldUnit').val(localStorage.shieldUnit ? localStorage.shieldUnit : '');
  174. $('#shieldUnit').on("change keyup paste", function() { localStorage.shieldUnit = $('#shieldUnit').val();});
  175.  
  176. $('#shieldUnitPower').val(localStorage.shieldUnitPower ? localStorage.shieldUnitPower : '');
  177. $('#shieldUnitPower').on("change keyup paste", function() { localStorage.shieldUnitPower = $('#shieldUnitPower').val();});
  178.  
  179. if (localStorage.powerDiff && localStorage.powerDiff !== '' && localStorage.shieldUnit && localStorage.shieldUnitPower)
  180. {
  181. if (localStorage.powerDiff < 0)
  182. {
  183. var value = $($('select')[1]).find('option:contains(' + localStorage.shieldUnit + ')').val();
  184. $($('select')[1]).val(value);
  185. $($('input[name="kolik"]')[1]).val(Math.abs(Math.round(localStorage.powerDiff / localStorage.shieldUnitPower)));
  186. }
  187. else
  188. {
  189. var value = $($('select')[0]).find('option:contains(' + localStorage.shieldUnit + ')').val();
  190. $($('select')[0]).val(value);
  191. $($('input[name="kolik"]')[0]).val(Math.abs(Math.round(localStorage.powerDiff / localStorage.shieldUnitPower)));
  192. }
  193.  
  194. localStorage.powerDiff = '';
  195. }
  196. }
  197.  
  198. function main()
  199. {
  200. var tables = $('table:contains("Síla"):contains("ID")');
  201.  
  202. $.each(
  203. tables,
  204. function (i, table)
  205. {
  206.  
  207. var rows = $(table).find('tr');
  208.  
  209. var headRow = rows.filter(
  210. function(index, row)
  211. {
  212. return $(row).find('td:contains("ID")').length==1;
  213. }
  214. );
  215.  
  216. var idPos;
  217. var powerPos;
  218. var areaPos;
  219. var otPos;
  220.  
  221. var headColumns = $(headRow).find('td');
  222. $.each(headColumns,
  223. function (index, value)
  224. {
  225. var text = $(value).text().trim();
  226. console.log('head text: -' + text + '-');
  227. if(text==='ID')
  228. idPos = index;
  229. if(text.indexOf("Síla")===0)
  230. powerPos = index;
  231. if(text==='Rozloha' || text === 'hAR')
  232. areaPos = index;
  233. if(text==='O.T.')
  234. otPos = index;
  235. if (text === 'Titul')
  236. $('td:nth-child(' + (index + 1) + ')').hide();
  237.  
  238. }
  239. );
  240.  
  241. console.log('powerPos: ' + powerPos);
  242. console.log('areaPos: ' + areaPos);
  243. console.log('otPos: ' + otPos);
  244.  
  245. $.each(rows,
  246. function (index, value)
  247. {
  248. if (index > 0) // skip header row
  249. {
  250. var columns = $(value).children();
  251. var id = $(columns[idPos]).children("span").clone().children().remove().end().text().trim();
  252. var power = $(columns[powerPos]).text().split('*').join('').trim();
  253. var area;
  254. var ot;
  255.  
  256. if(areaPos)
  257. area = $(columns[areaPos]).text().trim();
  258. if(otPos)
  259. ot = $(columns[otPos]).text().trim();
  260.  
  261. renderChangesValue(id, power, area, powerPos, areaPos, value, ot, otPos);
  262.  
  263. if(!isNaN(parseFloat(id)))
  264. {
  265. var data = localStorage[id];
  266. var array = [];
  267.  
  268. var lastDbValPower = getLastDbValue(id, 'power');
  269. var lastDbValOt = getLastDbValue(id, 'ot');
  270. var lastDbValArea = getLastDbValue(id, 'area');
  271. var dataChanged = true;
  272.  
  273. if (lastDbValPower || lastDbValOt)
  274. dataChanged = (power && power !== lastDbValPower) || (ot && ot !== lastDbValOt) || (area && area !== lastDbValArea);
  275.  
  276. if(data)
  277. array= JSON.parse(data);
  278.  
  279. if (dataChanged && power)
  280. {
  281. array.push({"power" : power, "area" : area, "date" : Date(), "ot": ot});
  282. localStorage[id] = JSON.stringify(array);
  283. }
  284. }
  285. }
  286. }
  287. );
  288. }
  289. );
  290.  
  291. colorPercentages('.power');
  292. colorPercentages('.area');
  293. }
  294.  
  295. function colorPercentages(selector)
  296. {
  297. var percentElements = $(selector);
  298. var percentValues = $.map(
  299. percentElements,
  300. function(value)
  301. {
  302. return $(value).text().replace('k','').replace('%', '');
  303. }
  304. );
  305. var percentMax = Math.max.apply(Math, percentValues);
  306. var percentMin = Math.min.apply(Math, percentValues);
  307.  
  308. percentMax = percentMax === 0 ? 1 : percentMax;
  309. percentMin = percentMin === 0 ? 1 : percentMin;
  310.  
  311. $.each(
  312. percentElements,
  313. function(index, value)
  314. {
  315.  
  316. var currentValue = $(value).text().replace('k','').replace('%', '');
  317. var relativePercent = 0;
  318.  
  319. if(currentValue >= 0)
  320. {
  321. relativePercent = 50 + (Math.abs(currentValue) / (Math.abs(percentMax) / 50));
  322. }
  323. else
  324. {
  325. relativePercent = 50 - (Math.abs(currentValue) / (Math.abs(percentMin) / 50));
  326. }
  327.  
  328. $(value).css('color', percentToColor(relativePercent / 100));
  329. }
  330. );
  331. }
  332.  
  333. function renderHistoryTextField()
  334. {
  335. var tables = $('table:contains("Síla"):contains("ID")');
  336. $.each(
  337. tables,
  338. function (i, table)
  339. {
  340. $(table).after("<label>Pocet hodin do zadu</label><input id='hour-field' type='text'/>");
  341. });
  342.  
  343. $('#hour-field').change(function() {
  344. searchHoursInPast = Number($( this ).val().trim());
  345. $( ".to-remove" ).remove();
  346. main();
  347. });
  348. }
  349.  
  350. function kokotMeasure()
  351. {
  352. if (!localStorage['kokotMeasure'])
  353. localStorage['kokotMeasure'] = 0;
  354. localStorage['kokotMeasure'] = Number(localStorage['kokotMeasure']) + 1;
  355. $('body').append('<label style="position: absolute; left: 0; top: 0;">Jak velky jsi kokot: ' + localStorage['kokotMeasure'] + '</div>');
  356. }
  357.  
  358. function myPower()
  359. {
  360. var power = $('#LS_power_value').text();
  361. var powerDb = Number(localStorage.me);
  362. var powerDifference = (power - powerDb);
  363.  
  364. if (powerDifference)
  365. {
  366. $('#LS_power_value').append('<span id="powerId" style="padding-left: 5px;">' + powerDifference + '</span>');
  367.  
  368. if (powerDifference < 0)
  369. {
  370. $('#powerId').css('color', 'RGB(255, 0, 0)');
  371. }
  372. else
  373. {
  374. $('#powerId').css('color', 'RGB(0, 255, 0)');
  375. }
  376. }
  377.  
  378. localStorage.me = power;
  379. }
  380.  
  381. function renderShieldStackPerc()
  382. {
  383. var shieldPwrElem = $('#econ_units_list').find('tr.tr_even:first > td:nth-child(6)');
  384. var shieldPwr = Number(shieldPwrElem.text());
  385. var totalPwr = Number($('#econ_units_list').find('.tr_econ_summary > td:nth-child(3)').text());
  386.  
  387. if (shieldPwr && totalPwr)
  388. {
  389. var shieldPerc = (100 * shieldPwr) / totalPwr;
  390.  
  391. shieldPwrElem.append(' (<span style="color: RGB(0, 255, 0);">' + shieldPerc.toFixed(1) + '%</span>)');
  392. }
  393. }
  394.  
  395. function renderNotes()
  396. {
  397. $('#calculator_wrapper_bottom').append('<textarea rows="4" cols="50" id="notes"></textarea>');
  398. $('#notes').val(localStorage.notes ? localStorage.notes : '');
  399. $('#notes').on("change keyup paste", function() {
  400. localStorage.notes = $('#notes').val();
  401. });
  402. }
  403.  
  404. function getPlayer() {
  405. return $('#player_detail').find('.governor').text().trim();
  406. }
  407.  
  408. var apiKey = 'axde8wuFzZUNAeK1UMqaovDhD49TCa5X';
  409. var database = 'https://api.mlab.com/api/1/databases/ma/';
  410. var csColl = database + "collections/cs?apiKey=" + apiKey;
  411.  
  412. // make ajax get to load all cs from DB and pass it to callback
  413. // usage: getAllCs(function(data) {...})
  414. function getAllCs(callback) {
  415. $.get(csColl, callback);
  416. }
  417.  
  418. // remove all player cs
  419. function removePlayerCs(player, successCallback) {
  420. $.ajax({url: csColl + '&q={"player":"' + player + '"}',
  421. data: JSON.stringify([]),
  422. type: "PUT",
  423. contentType: "application/json",
  424. success: successCallback});
  425. }
  426.  
  427. // insert given cs to database
  428. function insertPlayerCs(player, id, regent, aliance, time, power, pass, protection, result) {
  429. var cs = {
  430. "id": id,
  431. "regent": regent,
  432. "aliance": aliance,
  433. "time": time,
  434. "power": power,
  435. "pass": pass,
  436. "protection": protection,
  437. "result": result,
  438. "player": player,
  439. "lastUpdate": new Date()
  440. };
  441.  
  442. $.ajax({url: csColl,
  443. data: JSON.stringify(cs),
  444. type: "POST",
  445. contentType: "application/json" });
  446. }
  447.  
  448. function updateAllCs() {
  449. var player = getPlayer();
  450. var csRows = $('div.attacks_list_wrapper:contains(Bráněné útoky)').find('.attacks_table > tbody > tr[class!="heading"]:contains(nevráceno)');
  451.  
  452. if (csRows.length) {
  453. removePlayerCs(player, function() {
  454. $.each(csRows, function (i, csRow) {
  455. var id = $(csRow).find('td.attacks_id').text().split(" ")[0].trim();
  456. var regent = $(csRow).find('td.attacks_regent').text().trim();
  457. var aliance = $(csRow).find('td.attacks_aliance').text().trim();
  458. var time = $(csRow).find('td.attacks_time').text().split(" ")[0].trim().replace('(', '').replace(')', '');
  459. var power = $(csRow).find('td.attacks_pwr').text().split("(")[0].trim();
  460. var pass = $(csRow).find('td.attacks_pass').text().trim();
  461. var protection = $(csRow).find('td.attacks_attack').text().indexOf("*") != -1;
  462. var attacker = $(csRow).find('td.attacks_attacker').text().trim();
  463. var defender = $(csRow).find('td.attacks_defender').text().trim();
  464. var result = attacker + " : " + defender;
  465.  
  466. insertPlayerCs(player, id, regent, aliance, time, power, pass, protection, result);
  467. });
  468. });
  469. }
  470. }
  471.  
  472. function renderCs() {
  473. function groupCsByPlayer(csArray) {
  474. var csByPlayer = {};
  475.  
  476. for (var i = 0; i < csArray.length; i++) {
  477. if (!csByPlayer[csArray[i].player])
  478. csByPlayer[csArray[i].player] = [];
  479. csByPlayer[csArray[i].player].push(csArray[i]);
  480. }
  481.  
  482. return csByPlayer;
  483. }
  484.  
  485. function getPlayerCsTable(player, cs) {
  486. var tableStart =
  487. '<div class="attacks_list_wrapper">' +
  488. '<div class="attacks_wrapper">' +
  489. '<div class="attacks_type_wrapper">' + player + '</div>' +
  490. '<table class="attacks_table"><tbody>' +
  491. '<tr class="heading">' +
  492. '<td class="attacks_id">ID</td>' +
  493. '<td class="attacks_regent">Regent</td>' +
  494. '<td class="attacks_aliance">Aliance</td>' +
  495. '<td class="attacks_time">Doba od útoku</td>' +
  496. '<td class="attacks_pwr">Síla</td>' +
  497. '<td class="attacks_pass">Status útoku</td>' +
  498. '<td class="attacks_protection"></td>' +
  499. '<td class="attacks_result">Ztráty útočník : obránce</td>' +
  500. '</tr>';
  501.  
  502. for (var i = 0; i < cs.length; i++) {
  503. tableStart = tableStart +
  504. '<tr>' +
  505. '<td class="attacks_id">' + cs[i].id + '</td>' +
  506. '<td class="attacks_regent">' + cs[i].regent + '</td>' +
  507. '<td class="attacks_aliance">' + cs[i].aliance + '</td>' +
  508. '<td class="attacks_time">' + cs[i].time + '</td>' +
  509. '<td class="attacks_pwr">' + cs[i].power + '</td>' +
  510. '<td class="attacks_pass">' + cs[i].pass + '</td>' +
  511. '<td class="attacks_protection">' + (cs[i].protection ? '*' : '') + '</td>' +
  512. '<td class="attacks_result">' + cs[i].result + '</td>' +
  513. '</tr>';
  514. }
  515.  
  516. var tableEnd = '</tbody></table></div></div>';
  517.  
  518. return tableStart + tableEnd;
  519. }
  520.  
  521. var csLink = $('#Attacks_list_detail a').attr("href").replace("vypis=utoky_detailne", "cs");
  522. $('#Attacks_list_detail').after('<li id="csLink"><a href="' + csLink + '">Cska</a></li>');
  523.  
  524. if (window.location.href.indexOf("cs") != -1) {
  525. $('#central_column_bottom').empty();
  526.  
  527. getAllCs(function(data) {
  528. var csByPlayer = groupCsByPlayer(data);
  529.  
  530. for (var player in csByPlayer) {
  531. if (csByPlayer.hasOwnProperty(player)) {
  532. $('#central_column_bottom').append(getPlayerCsTable(player, csByPlayer[player]));
  533. }
  534. }
  535. });
  536. }
  537. }
  538.  
  539. renderNotes();
  540. renderCs();
  541. renderShieldStackPerc();
  542. myPower();
  543. kokotMeasure();
  544. renderHistoryTextField();
  545. main();
  546. spies();
  547.  
  548. updateAllCs();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement