HWM - Resourses as images, clickable links Style Mod

Заменяет текстовое описание ресурсов на изображения

  1. // ==UserScript==
  2. // @name HWM - Resourses as images, clickable links Style Mod
  3. // @namespace Resourses as images, clickable links to resources and timers
  4. // @author code: Dinozon2
  5. // @collaborator code: ElMarado; style: sw.East
  6. // @version 1.23
  7. // @description Заменяет текстовое описание ресурсов на изображения
  8. // @icon http://i.imgur.com/GScgZzY.jpg
  9. // @include https://www.heroeswm.*/pl_info.php*
  10. // @include *//178.248.235.15/pl_info.php*
  11. // @include *//*.lordswm.*/pl_info.php*
  12. // @grant GM_addStyle
  13. // @copyright 2013-2018, sw.East (https://www.heroeswm.ru/pl_info.php?id=3541252)
  14. // @license MIT
  15. // ==/UserScript==
  16.  
  17.  
  18. //ver 1.4
  19. // в плане: при продаже лота отображать картинку и цену (монеты)
  20. //ver 1.3
  21. // в плане: свободно рабочих мест
  22. //ver 1.23
  23. // [+] добавлено части имперского меча
  24. //ver 1.22
  25. // [+] добавлено отображение отрядов
  26. //ver 1.21
  27. // [+] выровнено отображение ресурсов
  28. // [+] обновлены картинки ресурсов
  29. // [*] добавлены артефакты империи, изменен код
  30. //ver 1.2
  31. // [+] добавлен таймер до начала битвы с сурвилургами
  32. // [+] в меню замены ссылки Битвы на Бои за территории
  33. // [*] переписан код, добавлена совместимость с таймерами охот/гв/гн
  34. //ver 1.1
  35. // [+] в шапке проставлены ссылки на закупку ресурсов на рынке
  36. //ver 1.0
  37. // [+] на странице персонажа ресурсы заменяются на изображения
  38.  
  39. /**
  40. * ============= Style =============
  41. */
  42.  
  43. GM_addStyle ( `
  44.  
  45. #box{
  46. width: 93%;
  47. height: 100%;
  48. margin: 5px 5px 0 10px;
  49. }
  50. #amount_slot{
  51. overflow: hidden;
  52. float: right;
  53. width: 48px;
  54. height: 48px;
  55. margin: 5px 5px 5px 0;
  56. padding: 0;
  57. border: 3px solid #fff;
  58. box-shadow: 0px 0px 5px #aaa;
  59. z-index: 1;
  60. }
  61. #amount_slot img {
  62. display: block;
  63. width: 42px;
  64. height: 42px;
  65. margin: 3px 0 0 3px;
  66. padding: 0;
  67. }
  68. #amount_slot a img {
  69. -webkit-transition: all 0.2s linear;
  70. -moz-transition: all 0.2s linear;
  71. -ms-transition: all 0.2s linear;
  72. -o-transition: all 0.2s linear;
  73. transition: all 0.2s linear;
  74. }
  75. #amount_slot:hover a img {
  76. -webkit-transform: scale(1.20,1.20);
  77. -moz-transform: scale(1.20,1.20);
  78. -ms-transform: scale(1.20,1.205);
  79. -o-transform: scale(1.20,1.20);
  80. transform: scale(1.20,1.20);
  81. opacity:1;
  82. }
  83. #amount_slot a{
  84. text-decoration: none;
  85. }
  86. .amount_wrap {
  87. position: absolute;
  88. min-width:14px;
  89. height: 13px;
  90. margin: -48px 0 0 -3px;
  91. padding:0 1px 1px;
  92. color:#fff;
  93. border:2px solid #fff;
  94. background:#222;
  95. -webkit-box-shadow: 1px 1px 1px #aaa;
  96. -moz-box-shadow: 1px 1px 1px #aaa;
  97. box-shadow: 1px 1px 1px #aaa;
  98. z-index: 15;
  99. font-size: 10px;
  100. text-align: center;
  101. text-decoration: none !important;
  102. text-shadow: 1px 1px 1px rgba(0,0,0, 0.8);
  103. cursor: pointer;
  104. opacity:.7;
  105. -webkit-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
  106. -moz-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
  107. -ms-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
  108. -o-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
  109. transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
  110. }
  111.  
  112. ` );
  113. /* Style End */
  114.  
  115.  
  116. var HTMLOut='<div id="box">';
  117.  
  118. var ElementsArray = [];
  119. ElementsArray['Кожа']= 'https://i.imgur.com/Xn82L25.png';
  120. ElementsArray['Сталь']= 'https://i.imgur.com/hwThTJE.png';
  121. ElementsArray['Никель']= 'https://i.imgur.com/6lHniay.png';
  122. ElementsArray['Волшебный порошок']= 'https://i.imgur.com/IuqF7rI.png';
  123. ElementsArray['Мифриловая руда']= 'https://i.imgur.com/dv6rzKn.png';
  124. ElementsArray['Обсидиан']= 'https://i.imgur.com/4yOWbK8.png';
  125. ElementsArray['Мифрил']= 'https://i.imgur.com/1Y1Z7Mq.png';
  126. ElementsArray['Орихалк']= 'https://i.imgur.com/qRGZzCs.png';
  127. ElementsArray['осколок метеорита']= 'meteorit';
  128. ElementsArray['абразив']= 'abrasive';
  129. ElementsArray['змеиный яд']= 'snake_poison';
  130. ElementsArray['клык тигра']= 'tiger_tusk';
  131. ElementsArray['ледяной кристалл']= 'ice_crystal';
  132. ElementsArray['лунный камень']= 'moon_stone';
  133. ElementsArray['огненный кристалл']= 'fire_crystal';
  134. ElementsArray['цветок ведьм']= 'witch_flower';
  135. ElementsArray['цветок ветров']= 'wind_flower';
  136. ElementsArray['цветок папоротника']= 'fern_flower';
  137. ElementsArray['ядовитый гриб']= 'badgrib';
  138. ElementsArray['Имперский арбалет']= 'part_imp_crossbow';
  139. ElementsArray['Имперские сапоги']= 'part_imp_boots';
  140. ElementsArray['Имперский щит']= 'part_imp_shield';
  141. ElementsArray['Имперский шлем']= 'part_imp_helmet';
  142. ElementsArray['Имперский амулет']= 'part_imp_amul';
  143. ElementsArray['Имперский доспех']= 'part_imp_armor';
  144. ElementsArray['Имперский меч']= 'part_imp_sword';
  145. ElementsArray['Части редкого отряда']= 'https://dcdn.heroeswm.ru/i/army_html/q_sign.png';
  146. ElementsArray['Части очень редкого отряда']= 'https://dcdn.heroeswm.ru/i/army_html/q_sign.png';
  147.  
  148. var a = document.body.getElementsByClassName("wb");
  149.  
  150. for (var i = 0, length = a.length; i < length; i++) {
  151. if (i in a) {
  152. // Находим блок с элементами
  153. if (a[i].innerHTML.indexOf('&nbsp;&nbsp;&nbsp;&nbsp;<b>') + 1){
  154. // создаем массив из строк:
  155. var text=a[i].innerHTML;
  156. console.log(a[i]);
  157. var arr = text.split('<br>');
  158. // очищаем строку от мусора
  159. for (var k=0,len=arr.length;k<len;k++) {
  160. if (k==Math.round((len-1)/2)) {HTMLOut = HTMLOut+'<div id="top">';}
  161. var line=arr[k];
  162.  
  163. line=line.replace('&nbsp;&nbsp;&nbsp;&nbsp;', '');
  164. line=line.replace('<b>', '');
  165. line=line.replace('</b>', '');
  166. var res = line.split(':');
  167. // res[0] - название элемента
  168. // res[1] - количество
  169.  
  170. if (res[1]>0) {
  171.  
  172. // фикс ширины
  173. if (res[1]>9999) var w_length = 39;
  174. else if (res[1]>999) var w_length = 31;
  175. else if (res[1]>99) var w_length = 24;
  176. else var w_length = 13;
  177.  
  178. if (res[0].indexOf('\u0418\u043c\u043f\u0435\u0440') !=-1) { // обработка имперских артов
  179. if(ElementsArray[res[0]].length<25){
  180.  
  181. HTMLOut = HTMLOut + '<div id="amount_slot">'+
  182. '<a href="/auction.php?cat=part&sort=0&art_type='+ElementsArray[res[0]]+'"> '+
  183. '<img src="/i/artifacts/parts/'+ElementsArray[res[0]]+'.png" alt="'+line+'" title="'+line+'">'+
  184. '</a>'+
  185. '<div class="amount_wrap" style="width:'+w_length+'px">'+res[1]+'</div>'+
  186. '</div>';
  187. } else {
  188. HTMLOut = HTMLOut + '<div id="amount_slot">'+
  189. '<a href="#"> '+
  190. '<img src="'+ElementsArray[res[0]]+'" alt="'+line+'" title="'+line+'">'+
  191. '</a>'+
  192. '<div class="amount_wrap" style="width:'+w_length+'px">'+res[1]+'</div>'+
  193. '</div>';
  194. }
  195. } else { // остальные ресурсы
  196. if(ElementsArray[res[0]].length>25){
  197. HTMLOut = HTMLOut + '<div id="amount_slot">'+
  198. '<a href="#"> '+
  199. '<img src="'+ElementsArray[res[0]]+'" alt="'+line+'" title="'+line+'">'+
  200. '</a>'+
  201. '<div class="amount_wrap" style="width:'+w_length+'px">'+res[1]+'</div>'+
  202. '</div>';
  203. } else {
  204. HTMLOut = HTMLOut + '<div id="amount_slot">'+
  205. '<a href="/auction.php?cat=elements&sort=0&art_type='+ElementsArray[res[0]]+'"> '+
  206. '<img src="/i/'+ElementsArray[res[0]]+'.gif" alt="'+line+'" title="'+line+'"> '+
  207. '</a>'+
  208. '<div class="amount_wrap" style="width:'+w_length+'px">'+res[1]+'</div>'+
  209. '</div>';
  210. }
  211. }
  212. }
  213. }
  214.  
  215. HTMLOut = HTMLOut+'</div>';
  216. // Выводим на страницу
  217. a[i].innerHTML = HTMLOut;
  218. }
  219. }
  220. }
  221. var a = document.body.getElementsByTagName("img");
  222.  
  223. for (var i = 0, length = a.length; i < length; i++) {
  224. //if (i in a) {
  225. if (a[i].title=="Древесина"){
  226. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=1>'+a[i].outerHTML+'</a>';
  227. } else if (a[i].title=="Руда"){
  228. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=2>'+a[i].outerHTML+'</a>';
  229. } else if (a[i].title=="Ртуть"){
  230. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=3>'+a[i].outerHTML+'</a>';
  231. } else if (a[i].title=="Сера"){
  232. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=4>'+a[i].outerHTML+'</a>';
  233. } else if (a[i].title=="Кристаллы"){
  234. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=5>'+a[i].outerHTML+'</a>';
  235. } else if (a[i].title=="Самоцветы"){
  236. a[i].outerHTML = '<a href=/auction.php?cat=res&sort=0&type=6>'+a[i].outerHTML+'</a>';
  237. } else if (a[i].title=="Золото"){
  238. a[i].outerHTML = a[i].outerHTML;
  239. }
  240.  
  241. }
  242.  
  243. // замена ссылок на Битвы
  244. var a = document.body.getElementsByTagName("a");
  245. for (var i = 0, length = a.length; i < length; i++) {
  246.  
  247. if (a[i].getAttribute('href')=='bselect.php') {
  248. a[i].setAttribute('href','mapwars.php');
  249. }
  250.  
  251. // ver 1.3 - количество свободных мест на предприятиях
  252. //if (a[i].getAttribute('href').indexOf('object')+1){
  253. // alert(a[i].getAttribute('href'));
  254. //};
  255. }
  256.  
  257. var zayvok=0;
  258. var freecell=0;
  259. var allcell=0;
  260. var timetogo = 0;
  261. var cnt=0;
  262. var alreadyin = 0;
  263. var freecellavaibale = 0;
  264. var bb = document.getElementsByTagName("title");
  265.  
  266.  
  267. // таймер до начала боя с Сурвилургами только на странице боев
  268.  
  269. //if (window.location.pathname == '/map.php'){ }
  270. if (window.location.pathname == '/mapwars.php'){
  271.  
  272. // узнаем количество свободных мест
  273. var f = document.body.getElementsByTagName("font");
  274. for (var x = 0, length = f.length; x < length; x++) {
  275.  
  276. // всего вступило участников
  277. if (f[x].getAttribute('style')=='font-size:9px;'){
  278. if(0==f[x].innerHTML.indexOf('[')){
  279. cnt=cnt+1;
  280. }
  281. }
  282.  
  283. // всего защит
  284. if (f[x].innerHTML.indexOf('Сурвилурги')+1) {
  285. zayvok=zayvok+1;
  286. }
  287.  
  288. if (f[x].innerHTML=='Вы уже в заявке, ожидайте начала битвы!') {
  289. alreadyin = 1;
  290. }
  291.  
  292. }
  293.  
  294. // свободных мест
  295. freecell = (Math.ceil(cnt/21)*21)-cnt;
  296.  
  297. // всего мест
  298. allcell = Math.ceil(cnt/21)*21;
  299.  
  300. var c = document.body.getElementsByTagName("td");
  301. for (var i = 0, length = c.length; i < length; i++) {
  302.  
  303. if (c[i].innerHTML.length==37&&c[i].getAttribute('class')=='wb') {
  304.  
  305. // если больше нет свободных мест и игрок не успле зайти смотрим следующую ближайшую заявку
  306. if (alreadyin==0&&freecell==0) {continue;}
  307.  
  308. //красное время
  309. redtime = c[i].innerHTML[21] + c[i].innerHTML[22] + c[i].innerHTML[23] + c[i].innerHTML[24] + c[i].innerHTML[25];
  310.  
  311. // еще не в заявке -> считаем свободные слоты
  312. var b = document.body.getElementsByTagName("b");
  313. for (var bi = 0, length = b.length; bi < length; bi++) {
  314.  
  315. if(b[bi].innerHTML=='[Вступить]'){// есть свободные места
  316.  
  317. // замена заголовка/////////////////////////// freecell allcell
  318. // узнаем сколько осталось до начала
  319. var h = new Date();
  320. startmin = c[i].innerHTML[24] + c[i].innerHTML[25];
  321. startmin = parseInt(startmin);
  322. curmin = h.getMinutes();
  323.  
  324. timetogo = startmin - curmin;
  325. if (timetogo<0){
  326. timetogo = timetogo + 60;
  327. }
  328.  
  329. bb[0].innerHTML = freecell + ' ('+ timetogo +' мин) свободно';
  330. var freecellavaibale =1;
  331. //Math.round(freecell/allcell*100)
  332.  
  333. break;
  334. }
  335.  
  336. }
  337.  
  338. //if (freecellavaibale) { // уже в заявке - > начало через x минут.
  339.  
  340.  
  341. if (alreadyin){
  342.  
  343. // узнаем сколько осталось до начала
  344. var h = new Date();
  345. startmin = c[i].innerHTML[24] + c[i].innerHTML[25];
  346. startmin = parseInt(startmin);
  347. curmin = h.getMinutes();
  348.  
  349. timetogo = startmin - curmin;
  350. if (timetogo<0){
  351. timetogo = timetogo + 60;
  352. }
  353. // замена заголовка///////////////////////////
  354. bb[0].innerHTML = timetogo + ' мин до вступления на защиту';
  355. }
  356. // break;
  357. //}
  358.  
  359. // "обычное" время
  360. } else if (c[i].innerHTML.length==5&&c[i].getAttribute('class')=='wb') {
  361. // обычное время - ищем первое и стоп
  362.  
  363. // узнаем сколько осталось до начала
  364. if (c[i].innerHTML.indexOf(':')+1) {
  365. var txt=c[i].innerHTML;
  366. txt.toString();
  367. txt.split(':');
  368. var h = new Date();
  369. var curmin = h.getMinutes();
  370. var dtime1 = parseInt(txt[3]+txt[4])-15;
  371. if (dtime1>curmin) {
  372. dif = dtime1 - curmin;
  373. } else {
  374. dif = 60 + dtime1 - curmin;
  375. }
  376.  
  377. // dif - осталось минут до боя
  378. // замена заголовка///////////////////////////
  379. bb[0].innerHTML = dif + ' мин до вступления на защиту';
  380. }
  381.  
  382. break;
  383. }
  384. }
  385. }