Greasy Fork is available in English.
Сохранение последних введенных цен артов, уровней доступа, максимального количества боев за раз на складе; работа без перезагрузки страницы при сохранении новых параметров, изъятии артов со склада; сохранение всех цен и отправка всех артов в аренду одной кнопкой; выделение цветом неправильно проставленных параметров и другое.
Устаревшая версия за
// ==UserScript==// @name HWM_WH_Helper// @namespace Рианти// @description Сохранение последних введенных цен артов, уровней доступа, максимального количества боев за раз на складе; работа без перезагрузки страницы при сохранении новых параметров, изъятии артов со склада; сохранение всех цен и отправка всех артов в аренду одной кнопкой; выделение цветом неправильно проставленных параметров и другое.// @include http://www.heroeswm.ru/sklad_info.php?id=*&cat=*// @version 1.2// @grant GM_getValue// @grant GM_setValue// @grant GM_xmlhttpRequest// ==/UserScript==///settingsvar elementColorOnDifference = '#E97300';var defaultAccessLevel = 0;var checkerTimeout = 50; //ms//\settingsvar saveStack = [], removeStack = [], stackBusy = 0, dissasembly = 0;var constants = {disabledAccessLevel: '1000'};function serialize (form) {if (!form || form.nodeName !== "FORM") {return;}var i, j, q = [];for (i = form.elements.length - 1; i >= 0; i = i - 1) {if (form.elements[i].name === "") {continue;}switch (form.elements[i].nodeName) {case 'INPUT':switch (form.elements[i].type) {case 'text':case 'hidden':case 'password':case 'button':case 'reset':case 'submit':q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));break;case 'checkbox':case 'radio':if (form.elements[i].checked) {q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));}break;}break;case 'file':break;case 'TEXTAREA':q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));break;case 'SELECT':switch (form.elements[i].type) {case 'select-one':q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));break;case 'select-multiple':for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {if (form.elements[i].options[j].selected) {q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].options[j].value));}}break;}break;case 'BUTTON':switch (form.elements[i].type) {case 'reset':case 'submit':case 'button':q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));break;}break;}}return q.join("&");}var buttons = document.querySelectorAll('input[type="submit"][value="Сохранить"]');for(var i = 0; i < buttons.length; i++){buttons[i].onclick = function(e){e.preventDefault();e.target.value = 'Сохраняем..';e.target.disabled = true;stackBusy = 1;GM_xmlhttpRequest({overrideMimeType: 'text/plain; charset=windows-1251',synchronous: false,url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),method: "GET",onload: function(response){e.target.value = 'Сохранено';stackBusy = 0;}});};saveStack.push(buttons[i]);}buttons = document.querySelectorAll('input[type="submit"][value="Разобрать"]');for(i = 0; i < buttons.length; i++){var t = buttons[i].parentElement.parentElement.parentElement.innerHTML.split('uid=');var st = [], uid;for (var j = 1; j < t.length; j++){uid = t[j].substr(0, t[j].indexOf('&'));if(st.indexOf(uid) == -1) st.push(uid);}buttons[i].id = '-1|' + st.join('|');buttons[i].onclick = function(e){if (!e.ctrlKey && !dissasembly){e.traget.form.submit();return;}e.preventDefault();stackBusy = 1;e.target.value = 'Забираем..';e.target.disabled = true;disassemble(e);};removeStack.push(buttons[i]);}function disassemble(e) {if (e.target.id == '') {e.target.value = 'Забрано';stackBusy = 0;return;}var ids = e.target.id.split('|');var curId = ids.shift();e.target.id = ids.join('|');if (curId == '-1') {GM_xmlhttpRequest({overrideMimeType: 'text/plain; charset=windows-1251',synchronous: false,url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),method: "GET",onload: function (response) {disassemble(e);}});} else {var se = 'set_id=0&inv_id=' + curId + '&action=get_art&cat=0&sign=' + serialize(e.target.form).split('sign=')[1];GM_xmlhttpRequest({overrideMimeType: 'text/plain; charset=windows-1251',synchronous: false,url: 'http://www.heroeswm.ru/sklad_info.php?' + se,method: "GET",onload: function (response) {disassemble(e);}});}}buttons = document.querySelectorAll('input[type="submit"][value="Забрать"]');for(i = 0; i < buttons.length; i++){buttons[i].onclick = function(e){e.preventDefault();e.target.value = 'Забираем..';e.target.disabled = true;stackBusy = 1;GM_xmlhttpRequest({overrideMimeType: 'text/plain; charset=windows-1251',synchronous: false,url: 'http://www.heroeswm.ru/sklad_info.php?' + serialize(e.target.form),method: "GET",onload: function(response){e.target.value = 'Забрано';stackBusy = 0;}});};removeStack.push(buttons[i]);}var forms = document.querySelectorAll('input[type="submit"][value="Сохранить"]');for(i = 0; i < forms.length - 1; i++){var form = forms[i].parentElement.parentElement;var artId = form.querySelector('input[name="inv_id"]').value;var blimit = form.querySelector('select[name="blimit"]');var bcost = form.querySelector('input[name="bcost"]');var al = form.querySelector('select[name="al"]');var saved = JSON.parse(GM_getValue('saved' + artId, 'null'));if (saved){if(saved.blimit != null && blimit.selectedIndex != saved.blimit){blimit.title = 'Сейчас выставлено за: ' + blimit[blimit.selectedIndex].innerHTML;blimit.value = saved.blimit;blimit.style.color = elementColorOnDifference;}if(saved.bcost != null && bcost.value != saved.bcost){bcost.title = 'Текущее: ' + bcost.value;bcost.value = saved.bcost;bcost.style.color = elementColorOnDifference;}if(saved.al == constants.disabledAccessLevel) saved.al = 0;if(al.value == constants.disabledAccessLevel || (saved.al != null && al.value != saved.al)){al.title = 'Текущее: ' + al[al.selectedIndex].innerHTML;al.value = (saved.al != null ? saved.al : defaultAccessLevel);al.style.color = elementColorOnDifference;}}blimit.onchange = bcost.onchange = al.onchange = function(e){var form = e.target.form;var artId = form.parentNode.querySelector('input[name="inv_id"]').value;var saved = JSON.parse(GM_getValue('saved' + artId, '{}'));saved[e.target.name] = e.target.value;GM_setValue('saved' + artId, JSON.stringify(saved));}}if(document.location.href.indexOf('cat=4') == -1){var cell = document.querySelector('td[align="left"][colspan="3"]');var cellParent = cell.parentElement;cellParent.removeChild(cell);var td = document.createElement('td');cellParent.appendChild(td);td.align = 'center';td.innerHTML = '<input type="button" value="Сохр. всё" id="scr_save_all">';td = document.createElement('td');cellParent.appendChild(td);td = document.createElement('td');cellParent.appendChild(td);td.align = 'center';td.innerHTML = '<input type="button" value="Забр. всё" id="scr_remove_all">';document.getElementById('scr_save_all').onclick = saveAll;document.getElementById('scr_remove_all').onclick = removeAll;} else {var cell = document.querySelector('table.wb:nth-child(5) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(5)');cell.innerHTML = '<input type="button" value="Сохр. всё" id="scr_save_all">';cell.align = 'center';document.getElementById('scr_save_all').onclick = saveAll;}function saveAll(){if (!saveStack.length){document.location.reload();return;}if(stackBusy){setTimeout(saveAll, checkerTimeout);return;}var but = saveStack.shift();but.click();setTimeout(saveAll, checkerTimeout);}function removeAll(){if (!removeStack.length){document.location.reload();return;}if(stackBusy){setTimeout(removeAll, checkerTimeout);return;}dissasembly = 1;var but = removeStack.shift();but.click();setTimeout(removeAll, checkerTimeout);}document.onkeydown = function(e){if (e.ctrlKey) {var buttons = document.querySelectorAll('input[type="submit"][value="Разобрать"]');for (var i = 0; i < buttons.length; i++){buttons[i].className = 'dissassembly';buttons[i].value = 'Забрать';}}};document.onkeyup=function(e){if (!e.ctrlKey) {var buttons = document.querySelectorAll('input[type="submit"][value="Забрать"][class="dissassembly"]');for (var i = 0; i < buttons.length; i++){buttons[i].value = 'Разобрать';}}};