🏠 返回首頁 

Greasy Fork is available in English.

GN_ResourcesCost

Подсчет стоимости ресурсов в золоте

  1. // ==UserScript==
  2. // @name GN_ResourcesCost
  3. // @namespace Gradient
  4. // @description Подсчет стоимости ресурсов в золоте
  5. // @include /^https{0,1}:\/\/(www\.heroeswm\.ru|178\.248\.235\.15)\/.+/
  6. // @exclude /^https{0,1}:\/\/(www\.heroeswm\.ru|178\.248\.235\.15)\/(login|war|cgame|frames|chat|chatonline|ch_box|chat_line|ticker|chatpost|chat2020|battlechat|campaign)\.php.*/
  7. // @version 1.0.4
  8. // ==/UserScript==
  9. "use strict";
  10. //----------------------------------------------------------------------------//
  11. var script_name = 'GN_ResourcesCost'; // Enter your script name here
  12. //----------------------------------------------------------------------------//
  13. (function(){ try{ // wrapper start
  14. //----------------------------------------------------------------------------//
  15. // UnifiedLibrary 1.7.0 start
  16. //----------------------------------------------------------------------------//
  17. //----------------------------------------------------------------------------//
  18. // SysUtils
  19. //----------------------------------------------------------------------------//
  20. var GN_SysUtils = new SysUtils(script_name);
  21. var SU = GN_SysUtils;
  22. //----------------------------------------------------------------------------//
  23. function SysUtils(name){ // wrapper start
  24. //----------------------------------------------------------------------------//
  25. this.show_error = function(error_string, use_alert){
  26. if(use_alert)
  27. alert(error_string);
  28. throw new Error(error_string);
  29. };
  30. if(arguments.length != 1)
  31. this.show_error('Wrong SysUtils arguments');
  32. if(!arguments[0])
  33. this.show_error('Empty SysUtils argument');
  34. //----------------------------------------------------------------------------//
  35. this.load_value = function(value, def){
  36. var div = document.getElementById('GN_GM_Handler');
  37. div.setAttribute('desc', value);
  38. div.setAttribute('operation', 'load');
  39. div.click();
  40. if(div.getAttribute('state') != 'complete')
  41. this.show_error('Ошибка при загрузке значения');
  42. return (div.getAttribute('is_null') == 'true' ? def : div.getAttribute('value'));
  43. };
  44. //----------------------------------------------------------------------------//
  45. var current_id = null;
  46. //----------------------------------------------------------------------------//
  47. function check_mandatory_scripts(alerter){
  48. var persistent_storage_sign = document.getElementById('GN_GM_Handler');
  49. var common_values_sign = document.getElementById('GN_CommonValuesSign');
  50. var alert_sign = document.getElementById('GN_AlertSign');
  51. if(!alert_sign){
  52. alert_sign = document.createElement('div');
  53. alert_sign.id = 'GN_AlertSign';
  54. alert_sign.setAttribute('alerted', 'false');
  55. document.body.appendChild(alert_sign);
  56. }
  57. var alerted = alert_sign.getAttribute('alerted') != 'false';
  58. if(!persistent_storage_sign){
  59. alert_sign.setAttribute('alerted', 'true');
  60. alerter('Скрипт ' + name + ' требует для своей работы скрипт управления данными (GN_PersistentStorage), который должен стоять первым в порядке выполнения скриптов.\n'
  61. + 'Подробнее здесь: "https://greasyfork.org/ru/scripts/14049-Как-устанавливать-скрипты-читать-здесь"', !alerted);
  62. }
  63. if(!common_values_sign){
  64. alert_sign.setAttribute('alerted', 'true');
  65. alerter('Скрипт ' + name + ' требует для своей работы скрипт, хранящий данные (GN_CommonValuesFiller), который должен стоять вторым в порядке выполнения скриптов.\n'
  66. + 'Подробнее здесь: "https://greasyfork.org/ru/scripts/14049-Как-устанавливать-скрипты-читать-здесь"', !alerted);
  67. }
  68. }
  69. this.check_login = function(){
  70. var re = /.*?pl_id=(\d+)[^\d]*?/gmi;
  71. var matches = re.exec(document.cookie.toString());
  72. if(matches){
  73. current_id = +matches[1];
  74. check_mandatory_scripts(this.show_error);
  75. }
  76. };
  77. //----------------------------------------------------------------------------//
  78. this.check_login();
  79. //----------------------------------------------------------------------------//
  80. } // wrapper end
  81. //----------------------------------------------------------------------------//
  82. // CommonValues
  83. //----------------------------------------------------------------------------//
  84. var GN_CommonValues = new CommonValues();
  85. //----------------------------------------------------------------------------//
  86. function CommonValues(){ // wrapper start
  87. //----------------------------------------------------------------------------//
  88. // Basic resources
  89. //----------------------------------------------------------------------------//
  90. this.basic_resources = JSON.parse(SU.load_value('GN_CommonValues_BasicResources', '[]'));
  91. //----------------------------------------------------------------------------//
  92. } // wrapper end
  93. //----------------------------------------------------------------------------//
  94. // UnifiedLibrary end
  95. //----------------------------------------------------------------------------//
  96. var CV = GN_CommonValues;
  97. start_work();
  98. //----------------------------------------------------------------------------//
  99. function start_work(){
  100. var market_link = '/auction.php?cat=res&sort=0&type=';
  101. var gold_tds = document.querySelectorAll('td > img[width="24"][height="24"][src*="gold.png"]');
  102. var trs = [];
  103. for(var i = 0; i < gold_tds.length; ++i){
  104. var count = gold_tds[i].parentNode.parentNode.childElementCount;
  105. var td_count = gold_tds[i].parentNode.parentNode.querySelectorAll('tr > td').length;
  106. if(count > 2 && count % 2 === 0 && count == td_count)
  107. trs.push(gold_tds[i].parentNode.parentNode);
  108. }
  109. trs.forEach(function(current){
  110. var amount = 0;
  111. var tds = current.querySelectorAll('tr > td');
  112. for(var i = 0; i < tds.length; i += 2){
  113. var res_td = tds[i];
  114. var count_td = tds[i + 1];
  115. var img = res_td.querySelector('img');
  116. var resource = resource_by_name(img.title);
  117. if(resource){
  118. amount += resource.min_price * +count_td.textContent.replace(/,/g, '');
  119. if(resource.market_type)
  120. res_td.innerHTML = '<a href="' + market_link + resource.market_type + '">' + res_td.innerHTML + '</a>'; // NB inner
  121. }
  122. }
  123. var td = tds[0];
  124. td.firstChild.setAttribute('title', 'Сумма ресурсов в золоте: ' + amount);
  125. });
  126. }
  127. //----------------------------------------------------------------------------//
  128. function resource_by_name(name){
  129. var resources = CV.basic_resources;
  130. for(var i = 0; i < resources.length; ++i)
  131. if(resources[i].name == name)
  132. return resources[i];
  133. return null;
  134. }
  135. //----------------------------------------------------------------------------//
  136. } catch(e){
  137. alert('Ошибка в скрипте ' + script_name + ', обратитесь к разработчику:\n' + e);
  138. throw e;
  139. }}()); // wrapper end
  140. //----------------------------------------------------------------------------//