hwm_exp_ability

Высчитывание экспоумки для взятия ап умки на своем уровне

当前为 2015-11-16 提交的版本,查看 最新版本

  1. //
  2. // ==UserScript==
  3. // @name hwm_exp_ability
  4. // @author Pahan https://gf.qytechs.cn/uk/users/18377-pahan
  5. // @namespace hwm_pahan
  6. // @description Высчитывание экспоумки для взятия ап умки на своем уровне
  7. // @homepage https://gf.qytechs.cn/uk/scripts/13724-hwm-exp-ability
  8. // @icon http://dcdn.heroeswm.ru/avatars/30/nc-5/30547.gif
  9. // @version 1.12
  10. // @encoding utf-8
  11. // @include http://*.heroeswm.ru/home.php*
  12. // @include http://*lordswm.com/home.php*
  13. // @include http://178.248.235.15/home.php*
  14. // @grant GM_deleteValue
  15. // @grant GM_getValue
  16. // @grant GM_listValues
  17. // @grant GM_setValue
  18. // @grant GM_addStyle
  19. // @grant GM_log
  20. // @grant GM_openInTab
  21. // @grant GM_xmlhttpRequest
  22. // ==/UserScript==
  23.  
  24. var version = '1.12';
  25. var str_url = 'https://gf.qytechs.cn/uk/scripts/13724-hwm-exp-ability';
  26. var str_script_name = 'Експоумка';
  27. var str_url_aut = '/sms-create.php?mailto=Pahan&subject=Скрипт: '+str_script_name+' v'+version+'. Найдена ошибка:';
  28.  
  29. if (typeof GM_deleteValue != 'function') {
  30. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  31. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  32. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  33.  
  34. this.GM_addStyle=function (key) {
  35. var style = document.createElement('style');
  36. style.textContent = key;
  37. document.querySelector("head").appendChild(style);
  38. }
  39. }
  40. if (typeof GM_listValues != 'function') {
  41. this.GM_listValues=function () {
  42. var values = [];
  43. for (var i=0; i<localStorage.length; i++) {
  44. values.push(localStorage.key(i));
  45. }
  46. return values;
  47. }
  48. }
  49.  
  50. function addEvent(elem, evType, fn) {
  51. if (elem.addEventListener) {
  52. elem.addEventListener(evType, fn, false);
  53. }
  54. else if (elem.attachEvent) {
  55. elem.attachEvent("on" + evType, fn);
  56. }
  57. else {
  58. elem["on" + evType] = fn;
  59. }
  60. }
  61.  
  62. function $(id) { return document.querySelector(id); }
  63.  
  64. function URLAttrValueGet(attr_name, aurl)
  65. {
  66. attr_name = attr_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  67. var regexS = "[\\?&]" + attr_name + "=([^&#]*)";
  68. var regex = new RegExp( regexS );
  69. var results = regex.exec( aurl );
  70. if( results == null )
  71. return "";
  72. else
  73. return results[1];
  74. }
  75.  
  76. function Assert(ACondition, AMessage)
  77. {
  78. if (ACondition)
  79. return;
  80. localStorage['trade.status'] = 'Stoped';
  81. alert('ERROR: ' + AMessage);
  82. throw new Error(AMessage);
  83. }
  84.  
  85. function Trim(AText)
  86. {
  87. return AText.replace(/^\s+|\s+$|^(&nbsp;)+|(&nbsp;)+$/g, '');
  88. }
  89.  
  90. function FloatFormat(AFloat)
  91. {
  92. return Math.round(AFloat).toString();
  93. }
  94.  
  95. var expelem;
  96.  
  97. function GetExp()
  98. {
  99. res = -1;
  100.  
  101. var list = document.getElementsByTagName("b");
  102. for(var i = 0; i < list.length; i++)
  103. {
  104. var elem = list[i];
  105. if (elem.innerHTML.indexOf('\u0411\u043E\u0435\u0432\u043E\u0439\u0020\u0443\u0440\u043E\u0432\u0435\u043D\u044C') === 0)
  106. {
  107. var subindex = Array.prototype.indexOf.call(elem.parentNode.childNodes, elem);
  108. expelem = elem.parentNode.childNodes[subindex + 2];
  109. res = parseInt(expelem.innerHTML.replace(/,/g, ''));
  110. break;
  111. }
  112. }
  113. return res;
  114. }
  115.  
  116. function GetCurrentFractAbility(AElem)
  117. {
  118. var sublist = AElem.getElementsByTagName("b");
  119. if (sublist.length > 0)
  120. {
  121. var subitem = sublist[0];
  122. var subindex = Array.prototype.indexOf.call(subitem.parentNode.childNodes, subitem);
  123. var regex = /\((\d+.\d+)\)/;
  124. var regex_res = regex.exec(subitem.parentNode.childNodes[subindex + 1].textContent);
  125. if (regex_res)
  126. {
  127. var LAbility = parseFloat(regex_res[1]);
  128. var LAbilityToUp = parseFloat(subitem.parentNode.childNodes[subindex + 2].innerHTML);
  129. var LArray = subitem.parentNode.childNodes[subindex].innerHTML.split(': ');
  130. var LFration = LArray[0];
  131. var LAbilityLevel = parseInt(LArray[1]);
  132. return {Ability: LAbility, AbilityToUp: LAbilityToUp, Fraction: LFration,
  133. AbilityLevel: LAbilityLevel, IsCurrent: true, IsMain: false};
  134. }
  135. }
  136. }
  137.  
  138. function GetAllFractions()
  139. {
  140. var LTD = GetTD();
  141. var LResult = new Array(GetCurrentFractAbility(LTD));
  142. var LMaxAbl = LResult[0];
  143. for(i = 0; i < LTD.childNodes.length; i++)
  144. {
  145. var cur_el = LTD.childNodes[i];
  146. var html = Trim(cur_el.textContent);
  147. var regex = /\: \d+ \((\d+.\d+)\)/;
  148. var regex_res = regex.exec(html);
  149. if(regex_res)
  150. {
  151. cur_abil = parseFloat(regex_res[1]);
  152. if (html.indexOf('\u0413\u0438\u043B\u044C\u0434\u0438\u044F') === -1)
  153. {
  154. var next_el = cur_el.parentNode.childNodes[i + 1];
  155. if (next_el.tagName == 'FONT')
  156. {
  157. var LAbility = cur_abil;
  158. var LAbilityToUp = parseFloat(next_el.innerHTML);
  159. var LArray = Trim(next_el.previousSibling.textContent).split(': ');
  160. var LFration = LArray[0];
  161. var LAbilityLevel = parseInt(LArray[1].split(' (')[0]);
  162. var LNew = {Ability: LAbility, AbilityToUp: LAbilityToUp, Fraction: LFration,
  163. AbilityLevel: LAbilityLevel, IsCurrent: false, IsMain: false};
  164. LResult.push(LNew);
  165. if (LMaxAbl.Ability < LNew.Ability)
  166. LMaxAbl = LNew;
  167. }
  168. }
  169. }
  170. }
  171. LMaxAbl.IsMain = true;
  172.  
  173. return LResult;
  174. }
  175.  
  176. function GetTD()
  177. {
  178. var list = document.getElementsByTagName("td");
  179. for(var i = 0; i < list.length; i++)
  180. {
  181. var elem = list[i];
  182. // alert(elem.innerHTML);
  183. if( (Trim(elem.innerHTML).indexOf('\u0420\u044B\u0446\u0430\u0440\u044C\u003A') === 0)
  184. || (Trim(elem.innerHTML).indexOf('<b>\u0420\u044B\u0446\u0430\u0440\u044C\u003A') === 0)
  185. )
  186. {
  187. return elem;
  188. }
  189. }
  190. }
  191.  
  192. function GetAbilityToUpInfo()
  193. {
  194. var LFract = GetFraction(GM_getValue('selected_fract', ''), GetAllFractions());
  195. if (LFract.AbilityLevel < 12)
  196. {
  197. var LSelectedLevel = Math.max(parseInt(GM_getValue('selected_level', 0)), (LFract.AbilityLevel + 1));
  198. //Умение фракции (12 уровней)
  199. var racial_skill_lvl = [20,50,90,160,280,500,900,1600,2900,5300,9600,17300];
  200. var LAbilityToUp = racial_skill_lvl[LSelectedLevel - 1] - LFract.Ability;
  201. return {AbilityToUp: LAbilityToUp, Fraction: LFract.Fraction, Level: LSelectedLevel};
  202. }
  203. }
  204.  
  205. function close_setting_form() {
  206. bg = $('#bgOverlayEA') ;
  207. bgc = $('#bgCenterEA') ;
  208. if( bg ) {
  209. bg.style.display = bgc.style.display = 'none' ;
  210. }
  211. MainProcess();
  212. }
  213.  
  214. function abil_fractions_changed()
  215. {
  216. GM_setValue('selected_fract', $("#hwm_exp_abil_fractions").value);
  217. GM_deleteValue('selected_level');
  218. UpdateAbilLevels();
  219. }
  220.  
  221. function GetFraction(AName, AAllFractions)
  222. {
  223. for(i = 0; i < AAllFractions.length; i++)
  224. {
  225. var LFract = AAllFractions[i];
  226. if ((AName == '') && LFract.IsMain || (AName != '') && (LFract.Fraction == AName))
  227. return LFract;
  228. }
  229. }
  230.  
  231. function UpdateAbilLevels()
  232. {
  233. var LSelect = $("#hwm_exp_abil_levels");
  234. LSelect.innerHTML = '';
  235.  
  236. var LFract = GetFraction($("#hwm_exp_abil_fractions").value, GetAllFractions());
  237. var LSelectedLevel = parseInt(GM_getValue('selected_level', 0));
  238. for(i = LFract.AbilityLevel + 1; i <= 12; i++)
  239. {
  240. var option = document.createElement("option");
  241. option.value = i;
  242. option.text = i;
  243. if (i == LSelectedLevel)
  244. option.selected = '1';
  245. LSelect.add(option);
  246. }
  247. }
  248.  
  249. function abil_levels_changed()
  250. {
  251. GM_setValue('selected_level', $("#hwm_exp_abil_levels").value);
  252. }
  253.  
  254. function open_setting_form()
  255. {
  256. bg = $('#bgOverlayEA') ;
  257. bgc = $('#bgCenterEA') ;
  258. if( !bg ) {
  259. bg = document.createElement('div') ;
  260. bg.id = 'bgOverlayEA' ;
  261. document.body.appendChild( bg );
  262. bg.style.position = 'absolute' ;
  263. bg.style.left = '0';
  264. bg.style.width = '100%';
  265. bg.style.height = '100%';
  266. bg.style.background = "#000000";
  267. bg.style.opacity = "0.5";
  268. bg.addEventListener( "click", close_setting_form , false );
  269.  
  270. bgc = document.createElement('div') ;
  271. bgc.id = 'bgCenterEA' ;
  272. document.body.appendChild( bgc );
  273. bgc.style.position = 'absolute' ;
  274. bgc.style.width = '600px';
  275. bgc.style.background = "#F6F3EA";
  276. bgc.style.left = ( ( document.body.offsetWidth - 400 ) / 2 ) + 'px' ;
  277. bgc.style.zIndex = "1105";
  278. }
  279. bgc.innerHTML =
  280. '<div style="border:1px solid #abc;padding:5px;margin:2px;">' +
  281. ' <div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_closeEA" title="Закрыть">x</div>' +
  282. ' <center>' +
  283. ' <table>' +
  284. ' <tr>' +
  285. ' <td colspan="2"><b>'+str_script_name+' <font style="color:#0070FF;">'+version+'</font></b><hr/></td>' +
  286. ' </tr>' +
  287. ' <tr>' +
  288. ' <td colspan="2"><b>Настройки:</b></td>' +
  289. ' </tr>' +
  290. ' <tr>' +
  291. ' </tr>' +
  292. ' <tr>' +
  293. ' <td colspan="2"><b>Выберите фракцию и уровень умелки который хотите взять на этом уровне:</b></td>' +
  294. ' </tr>' +
  295. ' <tr>' +
  296. ' <td>Фракция</td>' +
  297. ' <td>' +
  298. ' <select style="width:220;" id="hwm_exp_abil_fractions"></select>' +
  299. ' </td>' +
  300. ' </tr>' +
  301. ' <tr>' +
  302. ' <td>Уровень умелки</td>' +
  303. ' <td>' +
  304. ' <select style="width:220;" id="hwm_exp_abil_levels"></select>' +
  305. ' </td>' +
  306. ' </tr>' +
  307. ' <tr><td colspan="2"><hr/></td></tr>' +
  308. ' <tr>' +
  309. ' <td colspan="2" style="font-weight:bold;font-size:10px;" >' +
  310. ' <a style="font-weight:bold;font-size:10px;" href="'+str_url+'">Проверить обновление скрипта.</a>' +
  311. ' <a style="font-weight:bold;font-size:10px;" href="'+str_url_aut+'">Сообщить автору о найденной ошибке.</a>' +
  312. ' </td>' +
  313. ' </tr>' +
  314. ' <tr>' +
  315. ' <td colspan="2" style="font-weight:bold;font-size:10px;" >' +
  316. ' Автор: <a style="font-weight:bold;font-size:10px;" href="http://www.heroeswm.ru/pl_info.php?id=30547">Pahan.</a>' +
  317. ' </td>' +
  318. ' </tr>' +
  319. ' </table>' +
  320. ' </center>' +
  321. '</div>';
  322. $("#bt_closeEA").addEventListener( "click", close_setting_form , false );
  323.  
  324. bg.style.top = (-document.body.scrollTop)+'px';
  325. bgc.style.top = ( document.body.scrollTop + 100 ) + 'px';
  326. bg.style.display = bgc.style.display = 'block' ;
  327.  
  328. var LFractSelect = $("#hwm_exp_abil_fractions");
  329. addEvent(LFractSelect, 'change', abil_fractions_changed);
  330. var LAllFractions = GetAllFractions();
  331. var LSelectedFract = GM_getValue('selected_fract', '');
  332. for(i = 0; i < LAllFractions.length; i++)
  333. {
  334. var LFract = LAllFractions[i];
  335. var option = document.createElement("option");
  336. option.value = LFract.Fraction;
  337. option.text = LFract.Fraction + (LFract.IsMain ? ' (Основа)' : '') +
  338. (!LFract.IsMain && LFract.IsCurrent ? ' (Играете сейчас)' : '');
  339. if ((LSelectedFract == '') && LFract.IsMain
  340. || (LSelectedFract != '') && (LFract.Fraction == LSelectedFract)
  341. )
  342. {
  343. option.selected = '1';
  344. }
  345. LFractSelect.add(option);
  346. }
  347.  
  348. var LLevelSelect = $("#hwm_exp_abil_levels");
  349. addEvent(LLevelSelect, 'change', abil_levels_changed);
  350. UpdateAbilLevels();
  351. }
  352.  
  353. function MainProcess()
  354. {
  355. var LAbilityToUpInfo = GetAbilityToUpInfo();
  356. if (LAbilityToUpInfo)
  357. {
  358. var expoability = FloatFormat(GetExp() / LAbilityToUpInfo.AbilityToUp);
  359. if (expelem)
  360. {
  361. if (!$("#hwm_exp_abil_options"))
  362. {
  363. expelem.innerHTML = expelem.innerHTML + ' ' +
  364. '<a style="text-decoration:none;cursor:pointer;font-weight:bold;font-size:8px;" id="hwm_exp_abil_options">(' +
  365. '<font color="red">' +
  366. '<span id="hwm_exp_abil_el" />' +
  367. '</font>)' +
  368. '</a>';
  369. }
  370. $("#hwm_exp_abil_options").addEventListener( "click", open_setting_form , false );
  371. var LEl = $("#hwm_exp_abil_el");
  372. LEl.innerHTML = expoability;
  373. LEl.title =
  374. 'Что б взять ' + LAbilityToUpInfo.Level + 'ю умелку фракции ' + LAbilityToUpInfo.Fraction + ' до апа уровня\n'+
  375. 'Вам нужно набрать ' + LAbilityToUpInfo.AbilityToUp + ' умения с соотношением ' + expoability;
  376. }
  377. }
  378. }
  379.  
  380. window.addEventListener('load', MainProcess, false);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址