SetsMaster

Наборы армии, навыков и оружия – 3 в 1

目前为 2021-12-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name SetsMaster
  3. // @namespace Tamozhnya1
  4. // @author Demin
  5. // @description Наборы армии, навыков и оружия – 3 в 1
  6. // @homepage https://greasyfork.org/en/scripts/35222-setsmaster
  7. // @icon https://i.imgur.com/LZJFLgt.png
  8. // @version 3.10
  9. // @encoding utf-8
  10. // @include https://www.heroeswm.ru/*
  11. // @include https://www.lordswm.com/*
  12. // @include http://178.248.235.15/*
  13. // @exclude /^https{0,1}:\/\/(www\.(heroeswm\.ru|lordswm\.com)|178\.248\.235\.15)\/(login|war|cgame|frames|chat|chatonline|ch_box|chat_line|ticker|chatpost)\.php*/
  14. // @exclude https://www.heroeswm.ru/radio_files/*
  15. // @exclude https://www.heroeswm.ru/ticker.html*
  16. // @exclude https://www.lordswm.com/radio_files/*
  17. // @exclude https://www.lordswm.com/ticker.html*
  18. // @exclude http://178.248.235.15/radio_files/*
  19. // @exclude http://178.248.235.15/ticker.html*
  20. // @exclude */rightcol.php*
  21. // @exclude */ch_box.php*
  22. // @exclude */chat*
  23. // @exclude */ticker.html*
  24. // @exclude */frames*
  25. // @exclude */brd.php*
  26. // @grant GM_deleteValue
  27. // @grant GM_getValue
  28. // @grant GM_listValues
  29. // @grant GM_setValue
  30. // @grant GM_addStyle
  31. // @grant GM_log
  32. // @grant GM_openInTab
  33. // @license MIT
  34. // ==/UserScript==
  35.  
  36. // (c) 2012-2015, demin ( https://www.heroeswm.ru/pl_info.php?id=15091 )
  37. // (c) 2012,2015, Tamozhnya1
  38. // (c) 2017, перф. 10.10.2017 v3.8: *вместо nick привзяка к id_payler из рекордов охоты; *6 строк наборов в инвентаре.
  39. // (c) 2018, Небылица. 14.04.2018 v3.9: исправление сохранения наборов армии в связи с переводом на HTML
  40. // (c) 2018, CheckT: исправление @exclude, дуальность flash-HTML, https
  41. // (c) 2021, перф. 21.12.2021 v3.10: *изменился список комплектов; *изменился размер logob_0eng_.jpg (см logobEngChild)
  42. // old homepage https://greasyfork.org/en/scripts/40636-setsmaster
  43.  
  44. (function() {
  45.  
  46. var hide_perks = false;
  47. var refreshing_pages = true;
  48.  
  49. //GM_log ("Start")
  50. //alert ("Start")
  51. if(isLoggedOff())
  52. return;
  53.  
  54. if (typeof GM_deleteValue != 'function') {
  55. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  56. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  57. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  58.  
  59. this.GM_addStyle=function (key) {
  60. var style = document.createElement('style');
  61. style.textContent = key;
  62. document.querySelector("head").appendChild(style);
  63. }
  64. }
  65. if (typeof GM_listValues != 'function') {
  66. this.GM_listValues=function () {
  67. var values = [];
  68. for (var i=0; i<localStorage.length; i++) {
  69. values.push(localStorage.key(i));
  70. }
  71. return values;
  72. }
  73. }
  74.  
  75. var url_cur = location.href;
  76. var url = location.protocol+'//'+location.hostname+'/';
  77.  
  78. var GlobalCultureName = url.match('lordswm') ? "en-US" : "ru-RU",
  79. Strings = {
  80. "ru-RU" : {
  81. Army : "Армия",
  82. Save : "Сохранить",
  83. Add : "Добавить",
  84. SetName : "Наименование набора",
  85. Delete : "Удалить",
  86. Talents : "Навыки",
  87. SavePerkSetAlert : 'Сначала выберите навыки и нажмите "Принять"',
  88. Weapon : "Оружие",
  89. RemoveAll : "Снять все",
  90. },
  91. "en-US" : {
  92. Army : "Army",
  93. Save : "Save",
  94. Add : "Add",
  95. SetName : "Set name",
  96. Delete : "Delete",
  97. Talents : "Talents",
  98. SavePerkSetAlert : 'Please select skills and click on "Accept"',
  99. Weapon : "Weapon",
  100. RemoveAll : "Un-equip all",
  101. }
  102. },
  103. LocalizedString = Strings[GlobalCultureName];
  104.  
  105. var nick = getPlayerId()+'_';
  106.  
  107. if ( !(document.querySelector("body") && nick) ) { return; }
  108.  
  109. var frak, frak_class, temp_nick = nick;
  110. //nick = encodeURIComponent(nick);
  111.  
  112. if ( location.pathname=='/home.php' ) {
  113. frak = /\/f\/(r\d+)\.png/.exec( document.querySelector("body").innerHTML );
  114.  
  115. if ( frak ) {
  116. frak = frak[1] + "_";
  117. GM_setValue( nick+"frak", frak );
  118. }
  119. } else if ( location.pathname=='/castle.php' ) {
  120. function frak_and_class(frak, temp_fract) {
  121. for (var i=0, temp_fract_len=temp_fract.length, temp_fr; i<temp_fract_len; i++) {
  122. temp_fr = temp_fract[i].value;
  123. if ( !temp_fr ) { frak = false; break; }
  124.  
  125. frak += 1;
  126. if ( temp_fr != frak ) {
  127. break;
  128. } else if ( i+1 == temp_fract_len ) {
  129. frak += 1;
  130. }
  131. }
  132. return frak;
  133. }
  134.  
  135. frak = frak_and_class(-1, document.querySelectorAll("select[name='fract'] > option"));
  136. frak_class = frak_and_class(-2, document.querySelectorAll("select[name='classid'] > option"));
  137.  
  138. if ( frak!==false && frak_class!==false && frak>=0 ) {
  139. if ( frak_class < 0 ) frak_class = 0;
  140. frak = "r" + ( frak_class * 100 + frak ) + "_";
  141. GM_setValue( nick+"frak", frak );
  142. } else {
  143. frak = false;
  144. }
  145. }
  146.  
  147. if ( !frak ) frak = GM_getValue( nick+"frak" );
  148. if ( !frak ) { return; }
  149. //GM_log (frak);
  150. var menuId = "menuSets";
  151. /************************************************************************************************************/
  152. armySet = {
  153. oid : 2,
  154. id : "armySet",
  155. name : "<a href='army.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Army + "</a>",
  156. currentSetName : nick + frak + "currentArmySet",
  157. currentSetNumber : undefined,
  158. sets : new Array(),
  159. setObjects : new Array(),
  160. menuItems : {},
  161. currentMenuItem : undefined,
  162. menu : undefined,
  163. savedSetIdsConst : nick + frak + "savedArmySetIds",
  164. savedSetConst : nick + frak + "savedArmySet",
  165. refreshingPages : "home.php;army.php;pl_info.php",
  166. army_now : new Array(),
  167.  
  168. getSets : function () {
  169. for (var i = 0; i < this.setObjects.length; i++) {
  170. var setObject = this.setObjects[i];
  171. if (setObject) {
  172. var setName = setObject.name;
  173. var army = setObject.army;
  174.  
  175. var setTitle = "";
  176. for (var j = 0; j < army.length; j++) {
  177. setTitle += (army[j] == "" ? "0" : army[j]) + "+";
  178. }
  179. setTitle = setTitle.substring(0, setTitle.length - 1);
  180.  
  181. var data = "";
  182. for (var j = 0; j < army.length; j++) {
  183. data = "countv" + (j + 1) + "=" + (army[j] == "" ? "0" : army[j]) + (data == "" ? "" : "&") + data;
  184. }
  185. this.sets[i] = {
  186. number : parseInt(setObject.oid),
  187. name : setName,
  188. title : setTitle,
  189. method : "POST",
  190. url : "army_apply.php",
  191. data : data,
  192. contentType : "application/x-www-form-urlencoded"
  193. };
  194. }
  195. }
  196. },
  197. init : function () {
  198. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  199. var savedSetIdsStr = GM_getValue(this.savedSetIdsConst);
  200. var setIds = new Array();
  201. if (savedSetIdsStr) {
  202. setIds = savedSetIdsStr.split("|");
  203. }
  204. for (var i = 0; i < setIds.length; i++) {
  205. if (setIds[i] == "") {
  206. continue;
  207. }
  208. var setStr = GM_getValue(this.savedSetConst + setIds[i]);
  209. if (!setStr) {
  210. continue;
  211. }
  212. var setData = setStr.split("|");
  213. this.setObjects[i] = {
  214. oid : setIds[i],
  215. name : setData[7],
  216. fraction : setData[8],
  217. army : new Array()
  218. };
  219. for (var j = 0; j < 7; j++) {
  220. this.setObjects[i].army[j] = setData[j];
  221. }
  222. }
  223. if (/\/army.php$/.test(location.href)) {
  224. this.drawSetsTable();
  225. }
  226. },
  227. drawSetsTable : function () {
  228. var div = addElement("center", document.querySelector("body"));
  229. addElement("br", div);
  230. var htmlTable = addElement("table", div, {
  231. bgcolor : "#959595",
  232. bordercolor : "#f5c137",
  233. border : "1px"
  234. });
  235. this.drawTableHeader(htmlTable);
  236. for (var i = 0; i < this.setObjects.length; i++) {
  237. if (this.setObjects[i]) {
  238. this.drawSetsRow(htmlTable, this.setObjects[i]);
  239. }
  240. }
  241. var saveButton = addElement("input", div, { type : "button", value : LocalizedString.Save });
  242. saveButton.addEventListener("click", this.saveSets, false);
  243. var addButton = addElement("input", div, { type : "button", value : LocalizedString.Add });
  244. addButton.addEventListener("click", this.addSet, false);
  245. },
  246. drawTableHeader : function (htmlTable) {
  247. var flash = document.querySelector("object > param[value*='recruitarmy.swf']");
  248. if(flash){
  249. flash = flash.parentNode.querySelector("param[name='FlashVars']");
  250. var flashVars = flash.value.substr(8);
  251. var sets = flashVars.split(";M");
  252. }else{
  253. var armyInfoScript = document.querySelectorAll("table[cellpadding='0'][border='0'][cellspacing='0'][width='970']")[1].firstChild.firstChild.firstChild.firstChild.nextSibling;
  254. htmlTable.style.borderCollapse = "collapse";
  255. }
  256.  
  257. var tr = addElement("tr", htmlTable);
  258. var th = addElement("td", tr);
  259.  
  260. th.style.fontWeight = "bold";
  261. th.innerHTML = LocalizedString.SetName;
  262. th.style.textAlign = "center";
  263.  
  264. for (var i = 0; i < 7 /*sets.length*/; i++) {
  265. th = addElement("td", tr);
  266. th.style.fontWeight = "bold";
  267. th.style.width = "68px";
  268. th.style.wordWrap = "break-word";
  269. th.style.textAlign = "center";
  270.  
  271. if(flash){
  272. if(sets[i]){
  273. var set = sets[i].split("|");
  274. this.army_now.push(Number(sets[i].split(":")[1].substr(57,3)));
  275. if (url.match('lordswm')) {
  276. th.innerHTML = set[2].split("#")[1];
  277. } else {
  278. th.innerHTML = set[2].split("#")[0];
  279. }
  280. }
  281. }else{
  282. var unitNumberRegExp = new RegExp("obj\\[" + (i+1) + "\\]\\['nownumberd'\\]\\s=\\s(\\d+?);"),
  283. unitNumber = parseInt(armyInfoScript.innerHTML.match(unitNumberRegExp)[1]),
  284. unitNameRegExp = new RegExp("obj\\[" + (i+1) + "\\]\\['name'\\]\\s=\\s'(.+?)';"),
  285. unitNameArr = armyInfoScript.innerHTML.match(unitNameRegExp),
  286. unitName = (unitNameArr !== null) ? unitNameArr[1] : "";
  287.  
  288. this.army_now.push(unitNumber);
  289. th.innerHTML = unitName;
  290. }
  291. }
  292. while ( this.army_now.length < 7 ) { this.army_now.push(""); }
  293. },
  294. drawSetsRow : function (htmlTable, setObject) {
  295. var tr = addElement("tr", htmlTable, {
  296. oid : setObject.oid
  297. });
  298. var td = addElement("td", tr);
  299. var input = addElement("input", td, {
  300. value : setObject.name,
  301. size : 22
  302. });
  303. for (var i = 0; i < setObject.army.length; i++) {
  304. td = addElement("td", tr);
  305. input = addElement("input", td, { value : setObject.army[i], size : 10 });
  306. }
  307.  
  308. td = addElement("td", tr);
  309. var delButton = addElement("input", td, { type : "button", value : "x", title : LocalizedString.Delete });
  310. delButton.addEventListener("click", this.deleteSet, false);
  311. },
  312. saveSets : function () {
  313. var table = this.previousSibling;
  314. var setIdsStr = "";
  315. for (var i = 1; i < table.rows.length; i++) {
  316. var setStr = "";
  317. var row = table.rows[i];
  318. var oid = row.getAttribute("oid");
  319. setIdsStr = setIdsStr + "|" + oid;
  320. for (var j = 1; j <= 7; j++) {
  321. setStr = setStr + "|" + row.cells[j].firstChild.value;
  322. }
  323. setStr = setStr + "|" + row.cells[0].firstChild.value;
  324. setStr = setStr + "|" + "";
  325. GM_setValue(armySet.savedSetConst + oid, setStr.substr(1));
  326. }
  327. if (setIdsStr && setIdsStr != "") {
  328. GM_setValue(armySet.savedSetIdsConst, setIdsStr.substr(1));
  329.  
  330. // udalit' udalennye komplekty
  331. if (typeof GM_listValues == 'function') {
  332. var clear_d = GM_listValues();
  333. var clear_d_len = clear_d.length;
  334. var num_id_regexp = new RegExp(armySet.savedSetConst + '(\\d+)');
  335. var num_id;
  336. for (var i = clear_d_len; i--; ) {
  337. num_id = num_id_regexp.exec(clear_d[i]);
  338. if (num_id && !setIdsStr.match(num_id[1])) {
  339. GM_deleteValue(clear_d[i]);
  340. }
  341. }
  342. }
  343. } else {
  344. GM_deleteValue(armySet.savedSetIdsConst);
  345. GM_deleteValue(armySet.currentSetName);
  346.  
  347. // udalit' udalennye komplekty
  348. if (typeof GM_listValues == 'function') {
  349. var clear_d = GM_listValues();
  350. var clear_d_len = clear_d.length;
  351. var num_id_regexp = new RegExp(armySet.savedSetConst + '(\\d+)');
  352. var num_id;
  353. for (var i = clear_d_len; i--; ) {
  354. num_id = num_id_regexp.exec(clear_d[i]);
  355. if (num_id) {
  356. GM_deleteValue(clear_d[i]);
  357. }
  358. }
  359. }
  360. }
  361. },
  362. addSet : function () {
  363. var table = this.previousSibling.previousSibling;
  364.  
  365. var setTitle = "";
  366. for (var j = 0, j_len = armySet.army_now.length; j < j_len; j++) {
  367. setTitle += (armySet.army_now[j] == "" ? "0" : armySet.army_now[j]) + "+";
  368. }
  369. setTitle = setTitle.slice(0, -1);
  370.  
  371. armySet.drawSetsRow(table, {
  372. oid : (new Date()).getTime(),
  373. name : setTitle,
  374. // army : ["", "", "", "", "", "", ""]
  375. army : armySet.army_now
  376. });
  377. },
  378. deleteSet : function () {
  379. var table = this.parentNode.parentNode.parentNode;
  380. var row = this.parentNode.parentNode;
  381. table.removeChild(row);
  382. },
  383. }
  384. /***********************************************************************************************************/
  385. //GM_log ("skillSet")
  386.  
  387. skillSet = {
  388. oid : 1,
  389. id : "skillSet",
  390. name : "<a href='skillwheel.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Talents + "</a>",
  391. currentSetName : nick + frak + "currentSkillSet",
  392. currentSetNumber : undefined,
  393. sets : new Array(),
  394. setObjects : new Array(),
  395. menuItems : {},
  396. currentMenuItem : undefined,
  397. menu : undefined,
  398. refreshingPages : "home.php;inventory.php;skillwheel.php;pl_info.php",
  399.  
  400. getSets : function () {
  401. var setRefs = document.querySelectorAll("a[href^='skillwheel.php?setuserperk']");
  402. for(var i = 0; i < setRefs.length; i++) {
  403. this.sets[i] = { number : i, name : setRefs[i].innerHTML, title : '', method : "GET", url : setRefs[i].href }
  404. setRefs[i].addEventListener("click", markCurrentEventHandler, false);
  405. setRefs[i].setAttribute("number", i);
  406. setRefs[i].setAttribute("oid", this.oid);
  407. }
  408. },
  409. init : function () {
  410. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  411. }
  412. }
  413. /************************************************************************************************************/
  414. weaponSet = {
  415. oid : 0,
  416. id : "weaponSet",
  417. name : "<a href='inventory.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Weapon + "</a>",
  418. currentSetName : nick + "currentWeaponSet",
  419. currentSetNumber : undefined,
  420. sets : new Array(),
  421. menuItems : {},
  422. currentMenuItem : undefined,
  423. menu : undefined,
  424. refreshingPages : "home.php;inventory.php;pl_info.php",
  425.  
  426. getSets : function () {
  427. this.sets[0] = { number : 0, name : LocalizedString.RemoveAll, method : "GET", url : "inventory.php?all_off=100" }
  428. for (var i = 1; i <= 10; i++) {
  429. var setName = GM_getValue(nick + "weaponSet" + i);
  430. if (setName) {
  431. this.sets[i] = { number : i, name : setName, method : "GET", url : "inventory.php?all_on=" + i, headers : null }
  432. }
  433. }
  434. },
  435. init : function () {
  436. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  437. if (/inventory.php/.test(location.href)) {
  438. //GM_log ("init_invertory");
  439. var a = document.querySelector("a[href^='inventory.php?all_off=']");
  440. if ( a ) {
  441. a.addEventListener("click", markCurrentEventHandler, false);
  442. a.setAttribute("number", 0);
  443. a.setAttribute("oid", this.oid);
  444.  
  445. var all_armorkit_btn = document.querySelectorAll("div.btn_standard");
  446. //GM_log (all_armorkit_btn.length);
  447. var FilledSets = new Array();
  448. for (var i = 0; i < all_armorkit_btn.length; i++) {
  449. a = all_armorkit_btn[i];
  450. //GM_log (a.getAttribute("set_id"));
  451. a.addEventListener("click", markCurrentEventHandler, false);
  452. // var setNumber = i+1;
  453. // var setNumber = parseInt(a.id.substr(12)); // отрезаем "armorkit_btn"
  454. var setNumber = a.getAttribute("set_id");
  455. a.setAttribute("number", setNumber);
  456. a.setAttribute("oid", this.oid);
  457. GM_setValue(nick + "weaponSet" + setNumber, a.innerHTML);
  458. FilledSets[setNumber] = setNumber;
  459. }
  460. for (var i = 1; i <= 10; i++) {
  461. if (!FilledSets[i]) {
  462. GM_deleteValue(nick + "weaponSet" + i);
  463. }
  464. }
  465.  
  466.  
  467.  
  468.  
  469. /* var all_on = document.querySelectorAll("a[href^='inventory.php?all_on=']");
  470. //GM_log (all_on.length);
  471.  
  472. var FilledSets = new Array();
  473. for (var i = 0; i < all_on.length; i++) {
  474. a = all_on[i];
  475. a.addEventListener("click", markCurrentEventHandler, false);
  476. var href_subs = a.href.substr(a.href.indexOf("all_on=") + 7);
  477. var idx_ampersand = href_subs.indexOf("all_on=");
  478. var all_on_str;
  479. if(idx_ampersand == -1)
  480. all_on_str = href_subs;
  481. else
  482. all_on_str = href_subs.substr(0, idx_ampersand);
  483. var setNumber = parseInt(all_on_str);
  484. a.setAttribute("number", setNumber);
  485. a.setAttribute("oid", this.oid);
  486. GM_setValue(nick + "weaponSet" + setNumber, a.innerHTML);
  487. FilledSets[setNumber] = setNumber;
  488. }
  489. for (var i = 1; i <= 10; i++) {
  490. if (!FilledSets[i]) {
  491. GM_deleteValue(nick + "weaponSet" + i);
  492. }
  493. }
  494. */
  495. }
  496. }
  497. }
  498. }
  499.  
  500. /************************************************************************************************************/
  501. var setObjects = new Array();
  502. setObjects[weaponSet.oid] = weaponSet;
  503. setObjects[armySet.oid] = armySet;
  504. setObjects[skillSet.oid] = skillSet;
  505. var timer;
  506.  
  507. main();
  508.  
  509. function main() {
  510. var menuId = "menuSetsTable";
  511. var logobEngChild = document.querySelector("img[width='100'][height='26']");
  512. //GM_log ("logobEngChild0");
  513. if (!logobEngChild) {
  514. var logobEngChild = document.querySelector("img[width='101'][height='26']");
  515. // return;
  516. }
  517. //GM_log ("logobEngChild1");
  518. var styleObject = { borderColor : "#f5c137", background : "#6b6b69", color : "#f5c137" }
  519. if (document.querySelector("img[src*='i/top_ny']")) {
  520. styleObject.background = "#003399";
  521. }
  522. var offSet = -55;
  523. for (var i = 0; i < setObjects.length; i++) {
  524. if (!setObjects[i]) {
  525. continue;
  526. }
  527. var currentSetObject = setObjects[i];
  528. if (currentSetObject.init) {
  529. currentSetObject.init();
  530. }
  531. currentSetObject.getSets();
  532.  
  533. if (i > 0) {
  534. offSet += $(menuId + (i - 1) + "Header").clientWidth;
  535. }
  536. var menuHeaderStyleObject = {
  537. position : "absolute",
  538. margin : "2px 0px 0px " + offSet + "px",
  539. background : styleObject.background,
  540. color : styleObject.color,
  541. border : "1px solid " + styleObject.borderColor,
  542. "font-weight" : "bold",
  543. padding : "2px 6px 4px 5px",
  544. "z-index" : (url_cur.match('photo_pl_photos') ? "0" : "2")
  545. }
  546. var menuHeader = addElement("div", logobEngChild.parentNode, { id : menuId + i + "Header", headerId : menuId + i + "Header", menuId : menuId + i }, menuHeaderStyleObject);
  547. var aLevel1 = addElement("b", menuHeader, {}, "color: #f5c137;");
  548. // aLevel1.style.cursor = "pointer";
  549. aLevel1.innerHTML = currentSetObject.name;
  550. currentSetObject.menu = aLevel1;
  551.  
  552. var menuContent = addElement("div", menuHeader, { id : menuId + i, headerId : menuId + i + "Header", menuId : menuId + i }, "position: relative; padding: 6px 3px 2px 3px; white-space: nowrap;");
  553. menuHeader.addEventListener("mouseover", showMenu, false);
  554. menuHeader.addEventListener("mouseout", hideMenu, false);
  555. menuContent.addEventListener("mouseover", showMenuCont, false);
  556. menuContent.addEventListener("mouseout", hideMenu, false);
  557.  
  558. for (var j = 0; j < currentSetObject.sets.length; j++) {
  559. var currentSet = currentSetObject.sets[j];
  560. if (!currentSet) {
  561. continue;
  562. }
  563. var liLevel2 = addElement(url_cur.match('photo_pl_photos') ? "div" : "li", menuContent, { type: "disc", title: currentSetObject.title || "" });
  564. var aLevel2 = addElement("b", liLevel2, currentSet, "color: #f5c137;");
  565. aLevel2.style.cursor = "pointer";
  566. aLevel2.innerHTML = currentSet.name;
  567. aLevel2.addEventListener("click", applySet, false);
  568.  
  569. aLevel2.setAttribute("oid", currentSetObject.oid);
  570. if (currentSet.number == currentSetObject.currentSetNumber) {
  571. markCurrent(aLevel2);
  572. }
  573. currentSetObject.menuItems[j] = aLevel2;
  574. }
  575. $(menuId + i).style.width = ($(menuId + i).clientWidth + 20) + "px";
  576. $(menuId + i).style.display = "none";
  577. }
  578.  
  579. if ( hide_perks ) {
  580. hide_perks = document.querySelectorAll("a[href='skillwheel.php'] > font");
  581. var temp_i;
  582. for ( var i in hide_perks ) {
  583. temp_i = hide_perks[i];
  584. if ( temp_i && temp_i.innerHTML && ( temp_i.innerHTML.indexOf("Ў")!=-1 || temp_i.innerHTML.indexOf("▼")!=-1 ) ) { //"&#9660;"
  585. while ( temp_i.tagName != 'TD' ) { temp_i = temp_i.parentNode; }
  586. temp_i.style.display = 'none';
  587.  
  588. // восстанавливаем отступ
  589. var temp_td = document.createElement('td');
  590. temp_td.height = "6px";
  591. temp_i.parentNode.appendChild(temp_td);
  592.  
  593. break;
  594. }
  595. }
  596. }
  597. }
  598. function showMenu() {
  599. var menu = $(this.getAttribute("menuId"));
  600. timer = setTimeout(function () {
  601. if (menu) {
  602. menu.style.display = "block";
  603. }
  604. }, 100);
  605. }
  606. function showMenuCont() {
  607. var menu = $(this.getAttribute("menuId"));
  608. if (menu) {
  609. menu.style.display = "block";
  610. }
  611. }
  612. function hideMenu() {
  613. if (timer) {
  614. clearTimeout(timer);
  615. }
  616. var menu = $(this.getAttribute("menuId"));
  617. if (menu) {
  618. menu.style.display = "none";
  619. }
  620. }
  621. function markCurrentEventHandler(e) {
  622. var obj = setObjects[this.getAttribute("oid")];
  623. var menuItemToMark = obj.menuItems[this.getAttribute("number")];
  624. markCurrent(menuItemToMark);
  625. }
  626. function markCurrent(el) {
  627. var obj = setObjects[el.getAttribute("oid")];
  628. GM_setValue(obj.currentSetName, el.getAttribute("number"));
  629. el.style.color = '#0f0';
  630. if (obj.currentMenuItem && obj.currentMenuItem != el) {
  631. obj.currentMenuItem.style.color = "#f5c137";
  632. }
  633. obj.currentMenuItem = el;
  634. }
  635. function applySet() {
  636. markCurrent(this);
  637. var obj = setObjects[parseInt(this.getAttribute("oid"))];
  638. var _this = this;
  639. var title = this.innerHTML;
  640. this.innerHTML += " " + getLoadGif();
  641. var objXMLHttpReqSM = new XMLHttpRequest();
  642. objXMLHttpReqSM.open(this.getAttribute("method"), this.getAttribute("url"), true);
  643. objXMLHttpReqSM.onreadystatechange = function () {
  644. var readyState = (document.getElementById('click_div_infoperk') ? 4 : 2);
  645. //link to InfoPerk script: если этот скрипт есть, мы на главной и ждём полной загрузки страницы - чтобы перерисовать таблицы
  646. if (objXMLHttpReqSM.readyState == readyState) {
  647. objXMLHttpReqSM.abort();
  648. _this.innerHTML = title;
  649. if(refreshing_pages && obj.refreshingPages) {
  650. var pages = obj.refreshingPages.split(';');
  651. for(var i = 0; i < pages.length; i++) {
  652. if(location.href.indexOf(pages[i]) > -1) {
  653. window.location.href = window.location.href;
  654. }
  655. }
  656. }
  657. if(document.getElementById('click_div_infoperk')) //link to InfoPerk script
  658. document.getElementById('click_div_infoperk').click();
  659. }
  660. };
  661.  
  662. var contentType = this.getAttribute("contentType");
  663. if (contentType) {
  664. objXMLHttpReqSM.setRequestHeader('Content-type', contentType);
  665. }
  666. objXMLHttpReqSM.send(this.getAttribute("data"));
  667.  
  668. return false;
  669. }
  670. function addElement(type, parent, data, style) {
  671. var el = document.createElement(type);
  672. if (parent) {
  673. parent.appendChild(el);
  674. }
  675. if (data) {
  676. for (var key in data) {
  677. el.setAttribute(key, data[key]);
  678. }
  679. }
  680. if (style && el.id) {
  681. var styleStr = "";
  682. if (typeof(style) == "string") {
  683. styleStr = style;
  684. } else {
  685. for (var key in style) {
  686. styleStr += key + ": " + style[key] + "; ";
  687. }
  688. }
  689. GM_addStyle("#" + el.id + "{" + styleStr + "}");
  690. }
  691. return el;
  692. }
  693. function getLoadGif() {
  694. return '<img border="0" align="absmiddle" height="11" src="data:image/gif;base64,' +
  695. 'R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREQAR' +
  696. 'AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F' +
  697. 'VFNDQVBFMi4wAwEAAAAh+QQFBwAQACwAAAAAEAAQAAAFdyAkQgGJJOWoQgIjBM8jkKsoPEzgyMGs' +
  698. 'CjPDw7ADpkQBxRDmSCRetpRA6Rj4kFBkgLC4IlUGhbNQIwXOYYWCXDufzYPDMaoKGBoKb886OjAK' +
  699. 'dgZAAgQkfCwzAgsDBAUCgl8jAQkHEAVkAoA1AgczlyIDczUDA2UhACH5BAUHABAALAAAAAAPABAA' +
  700. 'AAVjICSO0IGIATkqIiMKDaGKC8Q49jPMYsE0hQdrlABCGgvT45FKiRKQhWA0mPKGPAgBcTjsspBC' +
  701. 'AoH4gl+FmXNEUEBVAYHToJAVZK/XWoQQDAgBZioHaX8igigFKYYQVlkCjiMhACH5BAUHABAALAAA' +
  702. 'AAAQAA8AAAVgICSOUGGQqIiIChMESyo6CdQGdRqUENESI8FAdFgAFwqDISYwPB4CVSMnEhSej+Fo' +
  703. 'gNhtHyfRQFmIol5owmEta/fcKITB6y4choMBmk7yGgSAEAJ8JAVDgQFmKUCCZnwhACH5BAUHABAA' +
  704. 'LAAAAAAQABAAAAViICSOYkGe4hFAiSImAwotB+si6Co2QxvjAYHIgBAqDoWCK2Bq6A40iA4yYMgg' +
  705. 'NZKwGFgVCAQZotFwwJIF4QnxaC9IsZNgLtAJDKbraJCGzPVSIgEDXVNXA0JdgH6ChoCKKCEAIfkE' +
  706. 'BQcAEAAsAAAAABAADgAABUkgJI7QcZComIjPw6bs2kINLB5uW9Bo0gyQx8LkKgVHiccKVdyRlqjF' +
  707. 'SAApOKOtR810StVeU9RAmLqOxi0qRG3LptikAVQEh4UAACH5BAUHABAALAAAAAAQABAAAAVxICSO' +
  708. '0DCQKBQQonGIh5AGB2sYkMHIqYAIN0EDRxoQZIaC6bAoMRSiwMAwCIwCggRkwRMJWKSAomBVCc5l' +
  709. 'UiGRUBjO6FSBwWggwijBooDCdiFfIlBRAlYBZQ0PWRANaSkED1oQYHgjDA8nM3kPfCmejiEAIfkE' +
  710. 'BQcAEAAsAAAAABAAEAAABWAgJI6QIJCoOIhFwabsSbiFAotGMEMKgZoB3cBUQIgURpFgmEI0EqjA' +
  711. 'CYXwiYJBGAGBgGIDWsVicbiNEgSsGbKCIMCwA4IBCRgXt8bDACkvYQF6U1OADg8mDlaACQtwJCEA' +
  712. 'IfkEBQcAEAAsAAABABAADwAABV4gJEKCOAwiMa4Q2qIDwq4wiriBmItCCREHUsIwCgh2q8MiyEKO' +
  713. 'DK7ZbHCoqqSjWGKI1d2kRp+RAWGyHg+DQUEmKliGx4HBKECIMwG61AgssAQPKA19EAxRKz4QCVIh' +
  714. 'ACH5BAUHABAALAAAAAAQABAAAAVjICSOUBCQqHhCgiAOKyqcLVvEZOC2geGiK5NpQBAZCilgAYFM' +
  715. 'ogo/J0lgqEpHgoO2+GIMUL6p4vFojhQNg8rxWLgYBQJCASkwEKLC17hYFJtRIwwBfRAJDk4Obwsi' +
  716. 'dEkrWkkhACH5BAUHABAALAAAAQAQAA8AAAVcICSOUGAGAqmKpjis6vmuqSrUxQyPhDEEtpUOgmgY' +
  717. 'ETCCcrB4OBWwQsGHEhQatVFhB/mNAojFVsQgBhgKpSHRTRxEhGwhoRg0CCXYAkKHHPZCZRAKUERZ' +
  718. 'MAYGMCEAIfkEBQcAEAAsAAABABAADwAABV0gJI4kFJToGAilwKLCST6PUcrB8A70844CXenwILRk' +
  719. 'IoYyBRk4BQlHo3FIOQmvAEGBMpYSop/IgPBCFpCqIuEsIESHgkgoJxwQAjSzwb1DClwwgQhgAVVM' +
  720. 'IgVyKCEAIfkECQcAEAAsAAAAABAAEAAABWQgJI5kSQ6NYK7Dw6xr8hCw+ELC85hCIAq3Am0U6JUK' +
  721. 'jkHJNzIsFAqDqShQHRhY6bKqgvgGCZOSFDhAUiWCYQwJSxGHKqGAE/5EqIHBjOgyRQELCBB7EAQH' +
  722. 'fySDhGYQdDWGQyUhADs=">';
  723. }
  724.  
  725. function $(id) { return document.querySelector("#"+id); }
  726.  
  727. function addEvent(elem, evType, fn) {
  728. if (elem.addEventListener) {
  729. elem.addEventListener(evType, fn, false);
  730. }
  731. else if (elem.attachEvent) {
  732. elem.attachEvent("on" + evType, fn);
  733. }
  734. else {
  735. elem["on" + evType] = fn;
  736. }
  737. }
  738.  
  739. function isLoggedOff(){
  740. return location.pathname == '/';
  741. }
  742.  
  743. function getI(xpath,elem){return document.evaluate(xpath,(elem?elem:document),null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);}
  744.  
  745. function getPlayerId(){
  746. var hunter_ref = getI("//a[contains(@href, 'pl_hunter_stat')]");
  747. //min 2 для home; min 1 для остальных - если включены выпадающие вкладки
  748. //min 1 для home; min 0 для остальных - если отключены выпадающие вкладки
  749. if ( !hunter_ref || hunter_ref.snapshotLength == 0 || (hunter_ref.snapshotLength == 1 && location.pathname == '/home.php') ) {
  750. //отключены вкладки или разлогин
  751. var ids=/pl_id=(\d+)/.exec(document.cookie);
  752. return ids ? ids[1] : 'unknown';
  753. } else {
  754. return hunter_ref.snapshotItem(0).href.split('?id=')[1];
  755. }
  756. }
  757.  
  758. })();