HWM - Resourses as images, clickable links Style Mod

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

目前为 2018-11-25 提交的版本。查看 最新版本

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