hwm_battlelinks

Быстрые ссылки на итоги боя; начало, конец, чат боя (by Demin)

  1. // ==UserScript==
  2. // @name hwm_battlelinks
  3. // @author Demin
  4. // @namespace Demin
  5. // @description Быстрые ссылки на итоги боя; начало, конец, чат боя (by Demin)
  6. // @homepage https://greasyfork.org/users/1602-demin
  7. // @icon http://i.imgur.com/LZJFLgt.png
  8. // @version 3.6
  9. // @encoding utf-8
  10. // @include http://*heroeswm.ru/*
  11. // @include http://178.248.235.15/*
  12. // @include http://*lordswm.com/*
  13. // @include http://*hwmguide.ru/*
  14. // @exclude */rightcol.php*
  15. // @exclude */ch_box.php*
  16. // @exclude */chat*
  17. // @exclude */ticker.html*
  18. // @exclude */frames*
  19. // @exclude */brd.php*
  20. // @exclude */auction.php*
  21. // @grant GM_deleteValue
  22. // @grant GM_getValue
  23. // @grant GM_listValues
  24. // @grant GM_setValue
  25. // @grant GM_addStyle
  26. // @grant GM_log
  27. // @grant GM_openInTab
  28. // @grant GM_xmlhttpRequest
  29. // ==/UserScript==
  30.  
  31. // (c) 2010-2015, demin ( http://www.heroeswm.ru/pl_info.php?id=15091 )
  32.  
  33. (function() {
  34. setTimeout(function() {
  35.  
  36. var version = '3.6';
  37.  
  38.  
  39. var blank = ' target="_blank"';
  40. //var blank = '';
  41.  
  42.  
  43. if (typeof GM_deleteValue != 'function') {
  44. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  45. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  46. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  47.  
  48. this.GM_addStyle=function (key) {
  49. var style = document.createElement('style');
  50. style.textContent = key;
  51. document.querySelector("head").appendChild(style);
  52. }
  53.  
  54. this.GM_xmlhttpRequest=function (details) {
  55. function setupEvent(xhr, url, eventName, callback) {
  56. xhr[eventName] = function() {
  57. var isComplete = xhr.readyState == 4;
  58. var responseState = {
  59. responseText: xhr.responseText,
  60. readyState: xhr.readyState,
  61. responseHeaders: isComplete ? xhr.getAllResponseHeaders() : "",
  62. status: isComplete ? xhr.status : 0,
  63. statusText: isComplete ? xhr.statusText : "",
  64. finalUrl: isComplete ? url : ""
  65. };
  66. callback(responseState);
  67. };
  68. }
  69. var xhr = new XMLHttpRequest();
  70. var eventNames = ["onload", "onerror", "onreadystatechange"];
  71. for (var i = 0; i < eventNames.length; i++) {
  72. var eventName = eventNames[i];
  73. if (eventName in details) {
  74. setupEvent(xhr, details.url, eventName, details[eventName]);
  75. }
  76. }
  77. xhr.open(details.method, details.url);
  78. if (details.overrideMimeType) {
  79. xhr.overrideMimeType(details.overrideMimeType);
  80. }
  81. if (details.headers) {
  82. for (var header in details.headers) {
  83. xhr.setRequestHeader(header, details.headers[header]);
  84. }
  85. }
  86. xhr.send(details.data ? details.data : null);
  87. }
  88. }
  89.  
  90.  
  91. var script_num = 92536;
  92. var script_name = 'hwm_battlelinks: Быстрые ссылки на итоги боя; начало, конец, чат боя (by Demin)';
  93. // see down
  94.  
  95. var url_cur = location.href;
  96. var url = 'http://'+location.hostname+'/';
  97.  
  98.  
  99. var a = document.querySelectorAll("a[href*='warid=']");
  100. var warid = /warid=(\d+)/;
  101. var ai, warid_ai, bt;
  102.  
  103. if ( url=='http://www.heroeswm.ru/' || url=='http://qrator.heroeswm.ru/' || url=='http://178.248.235.15/' || url=='http://www.lordswm.com/' ) { update_n(version,script_num,script_name); }
  104. else { url = 'http://www.heroeswm.ru/'; }
  105.  
  106. for ( var i=a.length; i--; ) {
  107. ai = a[i];
  108. if ( warid_ai = warid.exec(ai) ) {
  109. warid_ai = warid_ai[1];
  110. bt = document.createElement('span');
  111.  
  112. bt.innerHTML = '&nbsp;[<a href="'+url+'war.php?lt=-1&warid='+warid_ai+'"'+blank+'>#</a>'+
  113. '&nbsp;<a href="'+url+'battlechat.php?warid='+warid_ai+'"'+blank+'>chat</a>'+
  114. '&nbsp;<a href="'+url+'war.php?warid='+warid_ai+'"'+blank+'>$</a>'+
  115. '&nbsp;<a href="'+url+'battle.php?lastturn=-3&warid='+warid_ai+'"'+blank+'>E</a>]';
  116.  
  117. ai.parentNode.insertBefore(bt, ai.nextSibling);
  118. addEvent(ai, "click", show_result);
  119. }
  120. }
  121.  
  122. function show_result(event)
  123. {
  124. event = event || window.event;
  125. event.preventDefault ? event.preventDefault() : (event.returnValue=false);
  126. var ai = event.target || event.srcElement;
  127.  
  128. while ( !warid.exec(ai.href) ) { ai = ai.parentNode; }
  129. // for home page (once) && pl_info page (in battle) (twice)
  130. warid_ai = warid.exec(ai.href)[1];
  131.  
  132. GM_addStyle('\
  133. #war_result table, #war_result td {background-image: none; text-align: left; border: 0px; margin: 0px; padding: 0px; line-height: 16px; border-collapse: separate;}\
  134. #war_result td, #war_result a, #war_result b {FONT-SIZE: 9pt; COLOR: #592C08; FONT-FAMILY: verdana, geneva, arial cyr;}\
  135. #war_result font {FONT-SIZE: 9pt; FONT-FAMILY: verdana, geneva, arial cyr}\
  136. ');
  137.  
  138. var newdiv = $('war_result');
  139. if ( !newdiv ) {
  140. newdiv = document.createElement('div');
  141. newdiv.setAttribute('id', 'war_result');
  142. with ( newdiv.style ) {
  143. position = 'absolute';
  144. borderStyle = 'solid';
  145. borderColor = '#000000';
  146. borderWidth = '2px';
  147. padding = '0px';
  148. zIndex = '3';
  149. }
  150. }
  151.  
  152. newdiv.style.left = event.pageX + 5;
  153. newdiv.style.top = event.pageY + 5;
  154.  
  155. newdiv.innerHTML = '<table cellspacing=4 cellpadding=0 bgcolor="#f5f3ea"><tr>'+
  156. '<td align="left">warid: '+warid_ai+
  157.  
  158. '&nbsp;[<a href="'+url+'war.php?lt=-1&warid='+warid_ai+'"'+blank+'>#</a>'+
  159. '&nbsp;<a href="'+url+'battlechat.php?warid='+warid_ai+'"'+blank+'>chat</a>'+
  160. '&nbsp;<a href="'+url+'war.php?warid='+warid_ai+'"'+blank+'>$</a>'+
  161. '&nbsp;<a href="'+url+'battle.php?lastturn=-3&warid='+warid_ai+'"'+blank+'>E</a>]'+
  162.  
  163. '</td><td width=100></td>'+
  164. '<td align="right" id="close_div_result" title="Close" style="text-align: right;">[x]</td></tr>'+
  165. '<tr><td align="left" id="war_result_cont" colspan="3"><br>'+loaders()+'</td></tr>'+
  166. '</table>';
  167.  
  168. ai.parentNode.insertBefore(newdiv, ai.nextSibling);
  169. addEvent($("close_div_result"), "click", div_close_result);
  170.  
  171. /*
  172. if ( url != 'http://'+location.hostname+'/' ) {
  173. var div = $('war_result_cont');
  174. div.innerHTML = '<br>Не выполнимо на данном домене';
  175. return;
  176. }
  177. */
  178.  
  179. GM_xmlhttpRequest
  180. ({
  181. method: "GET",
  182. url: url + 'battle.php?lastturn=-2&warid=' + warid_ai,
  183. onload: function(obj)
  184. {
  185. handleHttpResponseWid(obj);
  186. }
  187. });
  188.  
  189. /*
  190. var objXMLHttpReqWid = new XMLHttpRequest();
  191. objXMLHttpReqWid.open('GET', url + 'battle.php?lastturn=-2&warid=' + warid_ai, true);
  192. //objXMLHttpReqWid.overrideMimeType("text/plain; charset=windows-1251");
  193. objXMLHttpReqWid.onreadystatechange = function() { handleHttpResponseWid(objXMLHttpReqWid); }
  194. objXMLHttpReqWid.send(null);
  195. */
  196.  
  197. }
  198.  
  199. function div_close_result() {
  200. var temp_rez = $('war_result');
  201. temp_rez.parentNode.removeChild(temp_rez);
  202. }
  203.  
  204. function handleHttpResponseWid(obj) {
  205. if ( obj.readyState != 4 ) return;
  206. var div = $('war_result_cont');
  207. if ( obj.status != 200 ) {
  208. div.innerHTML = "<br>Http error "+String(obj.status);
  209. return;
  210. }
  211. var arr = obj.responseText.split(";/", 2);
  212.  
  213. var lwm = 0;
  214. if ( url.match('lordswm') ) {
  215. var regexp_exp = /(\d+) exp/;
  216. var regexp_skill = /(\d*\.?\d+) skill/;
  217. var err = "Parse error.";
  218.  
  219. lwm = 1;
  220. var pos = arr[0].indexOf('#f_en');
  221. if ( pos==-1 ) { lwm = 0; pos = arr[0].indexOf('f<font size="18"><b>'); } // esli staryi boj na lwm.com do ob'edinenija
  222. } else {
  223. var regexp_exp = /(\d+) опыт/;
  224. var regexp_skill = /(\d*\.?\d+) умение/;
  225. var err = "Результаты боя не найдены.";
  226.  
  227. var pos = arr[0].indexOf('f<font size="18"><b>');
  228. }
  229.  
  230. if ( pos==-1 ) {
  231. div.innerHTML = "<br>" + err;
  232. return;
  233. }
  234.  
  235. if ( lwm==1 ) {
  236. var tmp = arr[0].substr(pos+5);
  237. } else {
  238. var tmp = arr[0].substr(pos+1);
  239. }
  240.  
  241. tmp = tmp.substr(0, tmp.indexOf('|#')).replace(/ size="18"/g, '').replace(/font color="/g, 'font style="color: ');
  242.  
  243. arr = tmp.split("<br");
  244. var exp1, um1;
  245. for (var i in arr) {
  246. if ( exp1 = regexp_exp.exec( arr[i] ) ) {
  247. um1 = regexp_skill.exec( arr[i] )[1];
  248. if ( um1 != 0 ) {
  249. arr[i] = arr[i].slice(0, -1) + " (" + Math.ceil( exp1[1] / um1 ) + ").";
  250. }
  251. }
  252. }
  253.  
  254. div.innerHTML = '<br>' + arr.join("<br");
  255. }
  256.  
  257. function loaders() {
  258. return '<img border="0" align="absmiddle" height="11" src="data:image/gif;base64,'+
  259. 'R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREQAR'+
  260. 'AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F'+
  261. 'VFNDQVBFMi4wAwEAAAAh+QQFBwAQACwAAAAAEAAQAAAFdyAkQgGJJOWoQgIjBM8jkKsoPEzgyMGs'+
  262. 'CjPDw7ADpkQBxRDmSCRetpRA6Rj4kFBkgLC4IlUGhbNQIwXOYYWCXDufzYPDMaoKGBoKb886OjAK'+
  263. 'dgZAAgQkfCwzAgsDBAUCgl8jAQkHEAVkAoA1AgczlyIDczUDA2UhACH5BAUHABAALAAAAAAPABAA'+
  264. 'AAVjICSO0IGIATkqIiMKDaGKC8Q49jPMYsE0hQdrlABCGgvT45FKiRKQhWA0mPKGPAgBcTjsspBC'+
  265. 'AoH4gl+FmXNEUEBVAYHToJAVZK/XWoQQDAgBZioHaX8igigFKYYQVlkCjiMhACH5BAUHABAALAAA'+
  266. 'AAAQAA8AAAVgICSOUGGQqIiIChMESyo6CdQGdRqUENESI8FAdFgAFwqDISYwPB4CVSMnEhSej+Fo'+
  267. 'gNhtHyfRQFmIol5owmEta/fcKITB6y4choMBmk7yGgSAEAJ8JAVDgQFmKUCCZnwhACH5BAUHABAA'+
  268. 'LAAAAAAQABAAAAViICSOYkGe4hFAiSImAwotB+si6Co2QxvjAYHIgBAqDoWCK2Bq6A40iA4yYMgg'+
  269. 'NZKwGFgVCAQZotFwwJIF4QnxaC9IsZNgLtAJDKbraJCGzPVSIgEDXVNXA0JdgH6ChoCKKCEAIfkE'+
  270. 'BQcAEAAsAAAAABAADgAABUkgJI7QcZComIjPw6bs2kINLB5uW9Bo0gyQx8LkKgVHiccKVdyRlqjF'+
  271. 'SAApOKOtR810StVeU9RAmLqOxi0qRG3LptikAVQEh4UAACH5BAUHABAALAAAAAAQABAAAAVxICSO'+
  272. '0DCQKBQQonGIh5AGB2sYkMHIqYAIN0EDRxoQZIaC6bAoMRSiwMAwCIwCggRkwRMJWKSAomBVCc5l'+
  273. 'UiGRUBjO6FSBwWggwijBooDCdiFfIlBRAlYBZQ0PWRANaSkED1oQYHgjDA8nM3kPfCmejiEAIfkE'+
  274. 'BQcAEAAsAAAAABAAEAAABWAgJI6QIJCoOIhFwabsSbiFAotGMEMKgZoB3cBUQIgURpFgmEI0EqjA'+
  275. 'CYXwiYJBGAGBgGIDWsVicbiNEgSsGbKCIMCwA4IBCRgXt8bDACkvYQF6U1OADg8mDlaACQtwJCEA'+
  276. 'IfkEBQcAEAAsAAABABAADwAABV4gJEKCOAwiMa4Q2qIDwq4wiriBmItCCREHUsIwCgh2q8MiyEKO'+
  277. 'DK7ZbHCoqqSjWGKI1d2kRp+RAWGyHg+DQUEmKliGx4HBKECIMwG61AgssAQPKA19EAxRKz4QCVIh'+
  278. 'ACH5BAUHABAALAAAAAAQABAAAAVjICSOUBCQqHhCgiAOKyqcLVvEZOC2geGiK5NpQBAZCilgAYFM'+
  279. 'ogo/J0lgqEpHgoO2+GIMUL6p4vFojhQNg8rxWLgYBQJCASkwEKLC17hYFJtRIwwBfRAJDk4Obwsi'+
  280. 'dEkrWkkhACH5BAUHABAALAAAAQAQAA8AAAVcICSOUGAGAqmKpjis6vmuqSrUxQyPhDEEtpUOgmgY'+
  281. 'ETCCcrB4OBWwQsGHEhQatVFhB/mNAojFVsQgBhgKpSHRTRxEhGwhoRg0CCXYAkKHHPZCZRAKUERZ'+
  282. 'MAYGMCEAIfkEBQcAEAAsAAABABAADwAABV0gJI4kFJToGAilwKLCST6PUcrB8A70844CXenwILRk'+
  283. 'IoYyBRk4BQlHo3FIOQmvAEGBMpYSop/IgPBCFpCqIuEsIESHgkgoJxwQAjSzwb1DClwwgQhgAVVM'+
  284. 'IgVyKCEAIfkECQcAEAAsAAAAABAAEAAABWQgJI5kSQ6NYK7Dw6xr8hCw+ELC85hCIAq3Am0U6JUK'+
  285. 'jkHJNzIsFAqDqShQHRhY6bKqgvgGCZOSFDhAUiWCYQwJSxGHKqGAE/5EqIHBjOgyRQELCBB7EAQH'+
  286. 'fySDhGYQdDWGQyUhADs=">';
  287. }
  288.  
  289. function $(id) { return document.querySelector("#"+id); }
  290.  
  291. function addEvent(elem, evType, fn) {
  292. if (elem.addEventListener) {
  293. elem.addEventListener(evType, fn, false);
  294. }
  295. else if (elem.attachEvent) {
  296. elem.attachEvent("on" + evType, fn);
  297. }
  298. else {
  299. elem["on" + evType] = fn;
  300. }
  301. }
  302.  
  303. function update_n(a,b,c,d,e){if(e){e++}else{e=1;d=(Number(GM_getValue(b+'_update_script_last2','0'))||0)}if(e>3){return}var f=new Date().getTime();var g=document.querySelector('#update_demin_script2');if(g){if((d+86400000<f)||(d>f)){g=g.innerHTML;if(/100000=1.1/.exec(g)){var h=new RegExp(b+'=(\\d+\\.\\d+)=(\\d+)').exec(g);var i=/url7=([^%]+)/.exec(g);if(a&&h&&i){if(Number(h[1])>Number(a))setTimeout(function(){if(confirm('\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u0430: "'+c+'".\n\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E \u0441\u0435\u0439\u0447\u0430\u0441?\n\nThere is an update available for the script: "'+c+'".\nWould you like install the script now?')){if(typeof GM_openInTab=='function'){GM_openInTab(i[1].replace(/\s/g,'')+h[2])}else{window.open(i[1].replace(/\s/g,'')+h[2],'_blank')}}},500)}GM_setValue(b+'_update_script_last2',''+f)}else{setTimeout(function(){update_n(a,b,c,d,e)},1000)}}}else{var j=document.querySelector('body');if(j){var k=GM_getValue(b+'_update_script_array2');if(e==1&&((d+86400000<f)||(d>f)||!k)){if(k){GM_deleteValue(b+'_update_script_array2')}setTimeout(function(){update_n(a,b,c,d,e)},1000);return}var l=document.createElement('div');l.id='update_demin_script2';l.setAttribute('style','position: absolute; width: 0px; height: 0px; top: 0px; left: 0px; display: none;');l.innerHTML='';j.appendChild(l);if((d+86400000<f)||(d>f)||!k){var m=new XMLHttpRequest();m.open('GET','photo_pl_photos.php?aid=1777'+'&rand='+(Math.random()*100),true);m.onreadystatechange=function(){update(m,a,b,c,d,e)};m.send(null)}else{document.querySelector('#update_demin_script2').innerHTML=k;setTimeout(function(){update_n(a,b,c,d,e)},10)}}}}function update(a,b,c,d,e,f){if(a.readyState==4&&a.status==200){a=a.responseText;var g=/(\d+=\d+\.\d+(=\d+)*)/g;var h='';var i=/(url7=[^%]+\%)/.exec(a);if(i){h+=i[1]}while((i=g.exec(a))!=null){if(h.indexOf(i[1])==-1){h+=' '+i[1]}};GM_setValue(c+'_update_script_array2',''+h);var j=document.querySelector('#update_demin_script2');if(j){j.innerHTML=h;setTimeout(function(){update_n(b,c,d,e,f)},10)}}}
  304.  
  305. }, 100);
  306. })();