HWM - Resourses as images, clickable links Style Mod

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

目前为 2018-11-28 提交的版本,查看 最新版本

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