// ==UserScript==
// @name hwm_leader_sets
// @namespace Striker
// @author Striker
// @version 0.3.1
// @description Наборы армии для ГЛ
// @include https://www.heroeswm.ru/leader_*army.php*
// @include https://www.lordswm.com/leader_*army.php*
// @include https://my.lordswm.com/leader_*army.php*
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
(function() {
if(typeof unsafeWindow != "object" || typeof unsafeWindow.max_leader != "number" || typeof GM_getValue != "function") {
alert("hwm_leader_sets unsupported browser");
return;
}
var pl_id = document.cookie.match(/pl_id=(\d+)/)[1];
var lang = location.hostname.match("lords") ? true : false;
var div = addElement("center", document.querySelector("#hwm_no_zoom"));
var addButton = addElement("input", div, { type: "button", value: lang ? "Add" : "Добавить" });
var cancelButton = addElement("input", div, { type: "button", value: lang ? "Cancel" : "Отмена" });
var saveButton = addElement("input", div, { type: "button", value: lang ? "Save" : "Сохранить" });
addButton.addEventListener("click", addArmyRow, false);
cancelButton.addEventListener("click", loadSavedSets, false);
saveButton.addEventListener("click", saveArmy, false);
addElement("br", div);
var mainTable = addElement("table", div, { style: "border: hidden; border-collapse: collapse; vertical-align: bottom;" });
var tempArmySets;
loadSavedSets();
function loadSavedSets() {
var savedString = GM_getValue(pl_id, "skeleton:6~goblin:10~imp:4;goblinus:37~peasant:35~gremlin:5~troglodyte:25;defender:20~pixel:150~crossman:67");
tempArmySets = [];
while(mainTable.firstChild) mainTable.removeChild(mainTable.firstChild);
if(savedString === '') return;
savedString = savedString.replace(/(\w+):/g, function(m, g1) {
for(var i = 1; i < obj.length; i++)
if(obj[i]['monster_id'] === g1) return i + ':';
return m;
});
DrawArmyRow(savedString);
}
function DrawArmyRow(setString) {
setString.split(';').forEach(function(cSet) {
tempArmySets.push(cSet);
var totalCost = 0;
var r_tr = addElement("tr", mainTable);
var td = addElement("td", r_tr, { style: "border: 2px dotted black; cursor: pointer;" });
cSet.replace(/(\w+):(\d+)/g, function(m, g1, g2) {
var linkNotId = isNaN(g1);
var link = parseInt(g1);
var count = parseInt(g2);
var problem = '';
var rarity = 1;
var portrait = 'army_html/q_sign'
if(!isNaN(g1)) {
rarity = obj[link]['rarity'];
portrait = 'portraits/' + obj[link]['lname'] + 'p33';
totalCost += count * obj[link]['cost'];
if(count * obj[link]['cost'] > max_leader_by_stack) problem = 'red';
if(obj[link]['count'] < count) problem = 'cornflowerblue';
}
td.innerHTML += '<div class="cre_creature"><div class="cre_mon_parent">' + '<img src="https://dcdn.heroeswm.ru/i/army_html/fon_lvl' + rarity + '.png" width="60" height="50" class="cre_mon_image2">' +
'<img src="https://dcdn.heroeswm.ru/i/' + portrait + '.png" width="60" height="50" class="cre_mon_image1">' +
'<img src="https://dcdn.heroeswm.ru/i/army_html/frame_lvl' + rarity + '.png" width="60" height="50" class="cre_mon_image2" border="0"></div>' +
(problem ? '<div class="cre_amount" style="top: 0px;left: 1px;text-align: left;font-size: 40px;line-height: 50px;color: ' + problem + ';">!</div>' : '') +
'<div class="cre_amount">' + count + '</div></div>';
});
td.addEventListener("click", function() { setArmy(this.parentNode.rowIndex); }, false);
var td_button = addElement("td", r_tr, { style: "border: 2px dotted black;" });
var button = addElement("input", td_button, { type: "button", value: "X" });
if(totalCost > max_leader) button.style.color = 'red';
button.addEventListener("click", function() { delArmyRow(this.parentNode.parentNode); }, false);
});
}
function delArmyRow(row) {
tempArmySets.splice(row.rowIndex, 1);
mainTable.removeChild(row);
}
function addArmyRow() {
var currSet = [];
for(var i = 1; i < obj_army.length; i++) {
if(obj_army[i]['link'] && obj_army[i]['count']) currSet.push(obj_army[i]['link'] + ':' + obj_army[i]['count']);
}
if(currSet.length) DrawArmyRow(currSet.join('~'));
}
function setArmy(rowId) {
for(var i = 7; i; i--) {
obj_army[i]['link'] = 0;
obj_army[i]['count'] = 0;
}
tempArmySets[rowId].replace(/(\w+):(\d+)/g, function(m, g1, g2) {
if(!isNaN(g1)) {
i += 1;
var link = parseInt(g1);
var count = parseInt(g2);
obj_army[i]['link'] = link;
obj_army[i]['count'] = obj[link]['count'] < count ? obj[link]['count'] : (count * obj[link]['cost'] > max_leader_by_stack ? parseInt(max_leader_by_stack / obj[link]['cost']) : count);
}
});
show_details(obj_army[i]['link']);
while(last_leader < 0) { //фикс превышения суммарного лидерства
show_details(obj_army[i]['link']);
i -= 1;
}
}
function saveArmy() {
GM_setValue(pl_id, tempArmySets.join(';').replace(/(\w+):/g, function(m, g1) {
return isNaN(g1) ? m : obj[g1]['monster_id'] + ':';
}));
}
function addElement(type, parent, data) {
var el = document.createElement(type);
if(parent) {
parent.appendChild(el);
}
if(data) {
for(var key in data) {
el.setAttribute(key, data[key]);
}
}
return el;
}
})();