// ==UserScript==
// @name SetsMaster
// @author Tamozhnya1
// @namespace Tamozhnya1
// @description Наборы армии, навыков и оружия - 3 в 1 (by Tamozhnya1 & Demin)
// @homepage https://greasyfork.org/users/1602-demin
// @icon http://i.imgur.com/LZJFLgt.png
// @version 4.5
// @encoding utf-8
// @include http://*heroeswm.ru/*
// @include http://178.248.235.15/*
// @include http://209.200.152.144/*
// @include http://*lordswm.com/*
// @exclude */rightcol.php*
// @exclude */ch_box.php*
// @exclude */chat*
// @exclude */ticker.html*
// @exclude */frames*
// @exclude */brd.php*
// @grant GM_deleteValue
// @grant GM_getValue
// @grant GM_listValues
// @grant GM_setValue
// @grant GM_addStyle
// @grant GM_log
// @grant GM_openInTab
// @license MIT
// ==/UserScript==
// (c) 2012-2015, demin ( http://www.heroeswm.ru/pl_info.php?id=15091 )
// (c) 2012, Tamozhnya1
ensureGmMethods();
var version = '4.5',
url_cur = location.href,
url = 'http://' + location.hostname + '/',
script_num = 124512,
script_name = "SetsMaster: Наборы армии, навыков и оружия - 3 в 1 (by Demin & Tamozhnya1)",
nick,
frak,
menuId = "menuSets";
GlobalCultureName = url.match('lordswm') ? "en-US" : "ru-RU",
Strings = {
"ru-RU": {
Army: ustring("Армия"),
Save: ustring("Сохранить"),
Add: ustring("Добавить"),
AddCurrent: ustring("Добавить текущий"),
SetName: ustring("Наименование набора"),
Delete: ustring("Удалить"),
Talents: ustring("Навыки"),
SavePerkSetAlert: ustring('Сначала выберите навыки и нажмите "Принять"'),
Weapon: ustring("Оружие"),
RemoveAll: ustring("Снять все"),
EnterJpg: "enter0.jpg",
SignInTitle: "Войти",
Castle: "Замок",
Task: ustring("Задание")
},
"en-US": {
Army: "Army",
Save: "Save",
Add: "Add",
AddCurrent: "Add current",
SetName: "Set name",
Delete: "Delete",
Talents: "Talents",
SavePerkSetAlert: 'Please select skills and click on "Accept"',
Weapon: "Weapon",
RemoveAll: "Un-equip all",
EnterJpg: "enter0_eng.jpg",
SignInTitle: "Sign in",
Castle: "Castle",
Task: "Task"
}
},
LocalizedString = Strings[GlobalCultureName];
CalculateUserNameAndFaction();
//update_n(version, script_num, script_name);
/************************************************************************************************************/
var armySet = {
oid: 2,
id: "armySet",
name: "<a href='army.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Army + "</a>",
currentSetName: "currentArmySet",
currentSetNumber: undefined,
sets: new Array(),
setObjects: new Array(),
menuItems: {},
currentMenuItem: undefined,
menu: undefined,
savedSetIdsConst: "savedArmySetIds",
savedSetConst: "savedArmySet",
refreshingPages: "home.php;army.php;pl_info.php",
setsTable: null,
getSets: function () {
this.sets.length = 0;
for(var i = 0; i < this.setObjects.length; i++) {
var setObject = this.setObjects[i];
if(setObject) {
var setName = setObject.name;
var army = setObject.army;
var setTitle = "";
for(var j = 0; j < army.length; j++) {
setTitle += (army[j] == "" ? "0" : army[j]) + "+";
}
setTitle = setTitle.substring(0, setTitle.length - 1);
var data = "";
for(var j = 0; j < army.length; j++) {
data = "countv" + (j + 1) + "=" + (army[j] == "" ? "0" : army[j]) + (data == "" ? "" : "&") + data;
}
this.sets[i] = {
number: parseInt(setObject.oid),
name: setName,
title: setTitle,
method: "POST",
url: "army_apply.php",
data: data,
contentType: "application/x-www-form-urlencoded"
};
}
}
},
init: function () {
this.currentSetNumber = GM_getValue(nick + frak + this.currentSetName, -1);
var savedSetIdsStr = GM_getValue(nick + frak + this.savedSetIdsConst);
var setIds = new Array();
if(savedSetIdsStr) {
setIds = savedSetIdsStr.split("|");
}
//alert(setIds.length + " " + savedSetIdsStr)
this.setObjects.length = 0;
for(var i = 0; i < setIds.length; i++) {
if(setIds[i] == "") {
continue;
}
var setStr = GM_getValue(nick + frak + this.savedSetConst + setIds[i]);
if(!setStr) {
continue;
}
var setData = setStr.split("|");
this.setObjects[i] = {
oid: setIds[i],
name: setData[7],
fraction: setData[8],
army: new Array()
};
for(var j = 0; j < 7; j++) {
this.setObjects[i].army[j] = setData[j];
}
}
if(/\/army.php$/.test(location.href)) {
this.drawSetsTable();
}
},
drawSetsTable: function () {
var div = addElement("center", document.querySelector("body"));
addElement("br", div);
this.setsTable = addElement("table", div, { bgcolor: "#959595", bordercolor: "#f5c137", border: "1px" });
this.drawTableHeader();
for (var i = 0; i < this.setObjects.length; i++) {
if (this.setObjects[i]) {
this.drawSetsRow(this.setObjects[i]);
}
}
var saveButton = addElement("input", div, { type: "button", value: LocalizedString.Save });
saveButton.addEventListener("click", this.saveSets);
var addButton = addElement("input", div, { type: "button", value: LocalizedString.Add });
addButton.addEventListener("click", this.addSet);
var addButton = addElement("input", div, { type: "button", value: LocalizedString.AddCurrent });
addButton.addEventListener("click", this.addCurrentSet);
},
drawTableHeader: function () {
if(!this.setsTable) {
return;
}
var units = window.wrappedJSObject.obj;
var tr = addElement("tr", this.setsTable);
var th = addElement("td", tr);
th.style.fontWeight = "bold";
th.innerHTML = LocalizedString.SetName;
for (var i = 1; i <= 7; i++) {
th = addElement("td", tr);
th.style.fontWeight = "bold";
th.innerHTML = units[i]['name'];
}
},
drawSetsRow: function (setObject) {
if(!this.setsTable) {
return;
}
var tr = addElement("tr", this.setsTable, {
oid : setObject.oid
});
var td = addElement("td", tr);
var input = addElement("input", td, {
value : setObject.name,
size : 22
});
for (var i = 0; i < setObject.army.length; i++) {
td = addElement("td", tr);
input = addElement("input", td, { value : setObject.army[i], size : 5 });
}
td = addElement("td", tr);
var delButton = addElement("input", td, { type : "button", value : "x", title : LocalizedString.Delete });
delButton.addEventListener("click", this.deleteSet);
},
saveSets: function () {
var table = armySet.setsTable;
var setIdsStr = "";
for (var i = 1; i < table.rows.length; i++) {
var setStr = "";
var row = table.rows[i];
var oid = row.getAttribute("oid");
setIdsStr = setIdsStr + "|" + oid;
for (var j = 1; j <= 7; j++) {
setStr = setStr + "|" + row.cells[j].firstChild.value;
}
setStr = setStr + "|" + row.cells[0].firstChild.value;
setStr = setStr + "|" + "";
GM_setValue(nick + frak + armySet.savedSetConst + oid, setStr.substr(1));
}
if (setIdsStr && setIdsStr != "") {
GM_setValue(nick + frak + armySet.savedSetIdsConst, setIdsStr.substr(1));
// udalit' udalennye komplekty
if (typeof GM_listValues == 'function') {
var clear_d = GM_listValues();
var clear_d_len = clear_d.length;
var num_id_regexp = new RegExp(nick + frak + armySet.savedSetConst + '(\\d+)');
var num_id;
for (var i = clear_d_len; i--; ) {
num_id = num_id_regexp.exec(clear_d[i]);
if (num_id && !setIdsStr.match(num_id[1])) {
GM_deleteValue(clear_d[i]);
}
}
}
} else {
GM_deleteValue(nick + frak + armySet.savedSetIdsConst);
GM_deleteValue(armySet.currentSetName);
// udalit' udalennye komplekty
if (typeof GM_listValues == 'function') {
var clear_d = GM_listValues();
var clear_d_len = clear_d.length;
var num_id_regexp = new RegExp(nick + frak + armySet.savedSetConst + '(\\d+)');
var num_id;
for (var i = clear_d_len; i--; ) {
num_id = num_id_regexp.exec(clear_d[i]);
if (num_id) {
GM_deleteValue(clear_d[i]);
}
}
}
}
},
addSet: function () {
armySet.drawSetsRow({
oid : (new Date()).getTime(),
name : "",
army : ["", "", "", "", "", "", ""]
});
},
addCurrentSet: function () {
var units = window.wrappedJSObject.obj;
var army = {
oid : (new Date()).getTime(),
name : "",
army : [units[1]['nownumberd'], units[2]['nownumberd'], units[3]['nownumberd'], units[4]['nownumberd'], units[5]['nownumberd'], units[6]['nownumberd'], units[7]['nownumberd']]
};
armySet.drawSetsRow(army);
},
deleteSet: function () {
var table = this.parentNode.parentNode.parentNode;
var row = this.parentNode.parentNode;
table.removeChild(row);
}
};
/***********************************************************************************************************/
var skillSet = {
oid: 1,
id: "skillSet",
name: "<a href='skillwheel.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Talents + "</a>",
currentSetName: "currentSkillSet",
currentSetNumber: undefined,
sets: new Array(),
menuItems: {},
currentMenuItem: undefined,
menu: undefined,
refreshingPages: "skillwheel.php;pl_info.php",
getSets: function () {
var setRefs = document.querySelectorAll("a[href^='skillwheel.php?setuserperk']");
for(var i = 0; i < setRefs.length; i++) {
this.sets[i] = { number: i, name: setRefs[i].innerHTML, title: '', method: "GET", url: setRefs[i].href }
addSetChangerListener(setRefs[i], this.oid, i);
}
},
init: function () {
this.currentSetNumber = GM_getValue(nick + frak + this.currentSetName, -1);
}
};
/************************************************************************************************************/
var weaponSet = {
oid: 0,
id: "weaponSet",
name: "<a href='inventory.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Weapon + "</a>",
currentSetName: nick + "currentWeaponSet",
currentSetNumber: undefined,
sets: new Array(),
menuItems: {},
currentMenuItem: undefined,
menu: undefined,
refreshingPages: "home.php;inventory.php;pl_info.php",
refreshingConditions: function() {
if(/map.php/.test(location.href)) {
var bolds = document.querySelectorAll("b");
for(var i = 0; i < bolds.length; i++) {
if(bolds[i].innerText.includes(LocalizedString.Task)) {
return true;
}
}
var neut_right_block = document.querySelector("div[id='neut_right_block']");
if(neut_right_block) {
return true;
}
}
return false;
},
getSets: function() {
this.sets[0] = { number: 0, name: LocalizedString.RemoveAll, method: "GET", url: "inventory.php?all_off=100" }
for (var i = 1; i <= 5; i++) {
var setName = GM_getValue(nick + "weaponSet" + i);
if (setName) {
this.sets[i] = { number: i, name: setName, method: "GET", url: "inventory.php?all_on=" + i, headers: null }
}
}
},
init: function() {
this.currentSetNumber = GM_getValue(this.currentSetName, -1);
if(/inventory.php/.test(location.href)) {
var undressDiv = document.querySelector("div[id ='undress_all_div']");
addSetChangerListener(undressDiv, this.oid, 0);
var setDivs = document.querySelectorAll("div[set_div_id]");
for(var i = 0; i < setDivs.length; i++) {
var setNumber = setDivs[i].getAttribute("set_div_id");
if(setDivs[i].hasAttribute("onclick")) {
addSetChangerListener(setDivs[i], this.oid, setNumber);
GM_setValue(nick + "weaponSet" + setNumber, setDivs[i].innerText);
} else {
GM_deleteValue(nick + "weaponSet" + setNumber);
}
}
}
this.findSetChangersAndAddListener();
},
findSetChangersAndAddListener: function() {
var setRefs = document.querySelectorAll("a[href^='inventory.php?all_off=100']");
for(var i = 0; i < setRefs.length; i++) {
addSetChangerListener(setRefs[i], this.oid, 0);
}
var setRefs = document.querySelectorAll("a[href*='inventory.php?all_on=']");
for(var i = 0; i < setRefs.length; i++) {
var weaponSetReference = setRefs[i];
var setNumber = weaponSetReference.getAttribute("href").split("all_on=")[1];
addSetChangerListener(weaponSetReference, this.oid, setNumber);
}
}
};
/************************************************************************************************************/
var castlesSet = {
oid: 3,
id: "castle",
name: "<a href='castle.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Castle + "</a>",
currentSetName: nick + "currentCastle",
currentSetNumber: undefined,
sets: new Array(),
menuItems: {},
currentMenuItem: undefined,
menu: undefined,
availableCastleNames: "availableCastleNames",
refreshingPages: "home.php;army.php;pl_info.php;castle.php",
userCastleSign: undefined,
userCastleSignName: "userCastleSign",
refreshingConditions: function() {
return false;
},
getSets: function() {
let serializedCastlesInfo = GM_getValue(nick + this.availableCastleNames);
if(serializedCastlesInfo) {
let castles = serializedCastlesInfo.split("&");
for(var i = 0; i < castles.length; i++) {
let castleName = castles[i].split("=")[0];
let castleNumber = castles[i].split("=")[1];
this.sets[i] = { number: castleNumber, name: castleName, method: "GET" };
if(this.userCastleSign) {
this.sets[i].url = "castle.php?change_clr_to=" + castleNumber + "&sign=" + this.userCastleSign;
}
}
}
},
init: function () {
this.initCastlesList();
this.currentSetNumber = GM_getValue(this.currentSetName, -1);
this.userCastleSign = GM_getValue(nick + this.userCastleSignName);
this.findSetChangersAndAddListener();
},
initCastlesList: function () {
if(!/castle.php/.test(location.href)) {
return;
}
let castleNamesDivs = document.querySelectorAll("div.castle_faction_div_inside");
let serializedCastlesInfo = "";
for(let castleNamesDivIndex = 0; castleNamesDivIndex < castleNamesDivs.length; castleNamesDivIndex++) {
let castleNameDiv = castleNamesDivs[castleNamesDivIndex];
let castleName = castleNameDiv.getAttribute("hint");
let castleSelectRef = castleNameDiv.firstChild.getAttribute("href");
let castleNumber = castleSelectRef.split("=")[1];
serializedCastlesInfo = serializedCastlesInfo + (serializedCastlesInfo == "" ? "" : "&") + castleName + "=" + castleNumber;
}
GM_setValue(nick + this.availableCastleNames, serializedCastlesInfo);
let castle_yes_no_dialogDiv = document.querySelector("div.castle_yes_no_dialog");
if(castle_yes_no_dialogDiv) {
let changeCastleRef = castle_yes_no_dialogDiv.querySelector("a[href*='castle.php?change_clr_to']");
if(changeCastleRef) {
let userCastleSign = changeCastleRef.getAttribute("href").split("?")[1].split("&")[1].split("=")[1];
GM_setValue(nick + this.userCastleSignName, userCastleSign);
}
}
},
findSetChangersAndAddListener: function() {
let setRefs = document.querySelectorAll("a[href*='castle.php?change_clr_to']");
for(let i = 0; i < setRefs.length; i++) {
let changeCastleRef = setRefs[i];
let setNumber = changeCastleRef.getAttribute("href").split("?")[1].split("&")[0].split("=")[1];
addSetChangerListener(changeCastleRef, this.oid, setNumber);
}
},
setChanged: function(newSetNumber) {
frak = "r" + newSetNumber + "_";
GM_setValue(nick + "frak", frak);
main();
}
};
/************************************************************************************************************/
var setObjects = new Array();
setObjects[weaponSet.oid] = weaponSet;
setObjects[armySet.oid] = armySet;
setObjects[skillSet.oid] = skillSet;
setObjects[castlesSet.oid] = castlesSet;
var timer;
if(document.querySelector("body") && nick && frak) {
main();
}
function main() {
var menuId = "menuSetsTable";
var logobEngChild = document.querySelector("img[src*='logob_eng']");
if(!logobEngChild) {
return;
}
var styleObject = { borderColor : "#f5c137", background : "#6b6b69", color : "#f5c137", "z-index": "100" }
if(document.querySelector("img[src*='i/top_ny']")) {
styleObject.background = "#003399";
}
var offSet = -106;
for(var i = 0; i < setObjects.length; i++) {
if(!setObjects[i]) {
continue;
}
var currentSetObject = setObjects[i];
if(currentSetObject.init) {
currentSetObject.init();
}
currentSetObject.getSets();
if(i > 0) {
offSet += $(menuId + (i - 1) + "Header").clientWidth;
}
var menuHeaderStyleObject = {
position: "absolute",
margin: "2px 0px 0px " + offSet + "px",
background: styleObject.background,
color: styleObject.color,
border: "1px solid " + styleObject.borderColor,
"font-weight": "bold",
padding: "2px 6px 4px 5px",
"z-index": (url_cur.match('photo_pl_photos') ? "0" : "100")
}
var menuHeader = document.getElementById(menuId + i + "Header");
if(menuHeader) {
menuHeader.remove();
}
menuHeader = addElement("div", logobEngChild.parentNode, { id: menuId + i + "Header", headerId: menuId + i + "Header", menuId: menuId + i }, menuHeaderStyleObject);
var aLevel1 = addElement("b", menuHeader, {}, "color: #f5c137;");
// aLevel1.style.cursor = "pointer";
aLevel1.innerHTML = currentSetObject.name;
currentSetObject.menu = aLevel1;
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;");
menuHeader.addEventListener("mouseover", showMenu, false);
menuHeader.addEventListener("mouseout", hideMenu, false);
menuContent.addEventListener("mouseover", showMenuCont, false);
menuContent.addEventListener("mouseout", hideMenu, false);
for(var j = 0; j < currentSetObject.sets.length; j++) {
var currentSet = currentSetObject.sets[j];
if(!currentSet) {
continue;
}
var liLevel2 = addElement(url_cur.match('photo_pl_photos') ? "div" : "li", menuContent, { type: "disc", title: currentSetObject.title || "" });
var aLevel2 = addElement("b", liLevel2, currentSet, "color: #f5c137;");
aLevel2.style.cursor = "pointer";
aLevel2.innerHTML = currentSet.name;
if(currentSet.url) {
aLevel2.addEventListener("click", applySet, false);
}
aLevel2.setAttribute("oid", currentSetObject.oid);
if(currentSet.number == currentSetObject.currentSetNumber) {
markCurrent(aLevel2);
}
currentSetObject.menuItems[j] = aLevel2;
}
$(menuId + i).style.width = ($(menuId + i).clientWidth + 20) + "px";
$(menuId + i).style.display = "none";
}
}
function showMenu() {
var menu = $(this.getAttribute("menuId"));
timer = setTimeout(function () {
if (menu) {
menu.style.display = "block";
}
}, 100);
}
function showMenuCont() {
var menu = $(this.getAttribute("menuId"));
if (menu) {
menu.style.display = "block";
}
}
function hideMenu() {
if (timer) {
clearTimeout(timer);
}
var menu = $(this.getAttribute("menuId"));
if (menu) {
menu.style.display = "none";
}
}
function markCurrentEventHandler(e) {
var obj = setObjects[this.getAttribute("oid")];
var menuItemToMark = obj.menuItems[this.getAttribute("number")];
markCurrent(menuItemToMark);
}
function markCurrent(el) {
var obj = setObjects[el.getAttribute("oid")];
GM_setValue(obj.currentSetName, el.getAttribute("number"));
el.style.color = '#0f0';
if (obj.currentMenuItem && obj.currentMenuItem != el) {
obj.currentMenuItem.style.color = "#f5c137";
}
obj.currentMenuItem = el;
}
function addSetChangerListener(htmlElement, setObjectId, setNumber) {
htmlElement.addEventListener("click", markCurrentEventHandler, false);
htmlElement.setAttribute("number", setNumber);
htmlElement.setAttribute("oid", setObjectId);
}
function applySet() {
markCurrent(this);
var obj = setObjects[parseInt(this.getAttribute("oid"))];
var setNumber = this.getAttribute("number");
var _this = this;
var title = this.innerHTML;
this.innerHTML += " " + getLoadGif();
var objXMLHttpReqSM = new XMLHttpRequest();
objXMLHttpReqSM.open(this.getAttribute("method"), this.getAttribute("url"), true);
objXMLHttpReqSM.onreadystatechange = function () {
if (objXMLHttpReqSM.readyState == 2) {
objXMLHttpReqSM.abort();
_this.innerHTML = title;
if(typeof(obj.setChanged) == "function") {
obj.setChanged(setNumber);
}
if(obj.refreshingPages) {
var pages = obj.refreshingPages.split(';');
for(var i = 0; i < pages.length; i++) {
if(location.href.indexOf(pages[i]) > -1) {
window.location.href = window.location.href;
}
}
}
if(obj.refreshingConditions && obj.refreshingConditions()) {
window.location.href = window.location.href;
}
}
};
var contentType = this.getAttribute("contentType");
if (contentType) {
objXMLHttpReqSM.setRequestHeader('Content-type', contentType);
}
objXMLHttpReqSM.send(this.getAttribute("data"));
return false;
}
function addElement(type, parent, data, style) {
var el = document.createElement(type);
if (parent) {
parent.appendChild(el);
}
if (data) {
for (var key in data) {
el.setAttribute(key, data[key]);
}
}
if (style && el.id) {
var styleStr = "";
if (typeof(style) == "string") {
styleStr = style;
} else {
for (var key in style) {
styleStr += key + ": " + style[key] + "; ";
}
}
GM_addStyle("#" + el.id + "{" + styleStr + "}");
}
return el;
}
function getLoadGif() {
return '<img border="0" align="absmiddle" height="11" src="data:image/gif;base64,' +
'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' +
'fySDhGYQdDWGQyUhADs=">';
}
function $(id) {
return document.querySelector("#" + id);
}
function addEvent(elem, evType, fn) {
if (elem.addEventListener) {
elem.addEventListener(evType, fn, false);
} else if (elem.attachEvent) {
elem.attachEvent("on" + evType, fn);
} else {
elem["on" + evType] = fn;
}
}
function update_n(a, b, c, d, e) {
if (e) {
e++
} else {
e = 1;
d = (Number(GM_getValue(b + '_update_script_last2', '0')) || 0)
}
if (e > 3) {
return
}
var f = new Date().getTime();
var g = document.querySelector('#update_demin_script2');
if (g) {
if ((d + 86400000 < f) || (d > f)) {
g = g.innerHTML;
if (/100000=1.1/.exec(g)) {
var h = new RegExp(b + '=(\\d+\\.\\d+)=(\\d+)').exec(g);
var i = /url7=([^%]+)/.exec(g);
if (a && h && i) {
if (Number(h[1]) > Number(a))
setTimeout(function () {
if (confirm('\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u0430: "' + c + '".\n\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E \u0441\u0435\u0439\u0447\u0430\u0441?\n\nThere is an update available for the script: "' + c + '".\nWould you like install the script now?')) {
if (typeof GM_openInTab == 'function') {
GM_openInTab(i[1].replace(/\s/g, '') + h[2])
} else {
window.open(i[1].replace(/\s/g, '') + h[2], '_blank')
}
}
}, 500)
}
GM_setValue(b + '_update_script_last2', '' + f)
} else {
setTimeout(function () {
update_n(a, b, c, d, e)
}, 1000)
}
}
} else {
var j = document.querySelector('body');
if (j) {
var k = GM_getValue(b + '_update_script_array2');
if (e == 1 && ((d + 86400000 < f) || (d > f) || !k)) {
if (k) {
GM_deleteValue(b + '_update_script_array2')
}
setTimeout(function () {
update_n(a, b, c, d, e)
}, 1000);
return
}
var l = document.createElement('div');
l.id = 'update_demin_script2';
l.setAttribute('style', 'position: absolute; width: 0px; height: 0px; top: 0px; left: 0px; display: none;');
l.innerHTML = '';
j.appendChild(l);
if ((d + 86400000 < f) || (d > f) || !k) {
var m = new XMLHttpRequest();
m.open('GET', 'photo_pl_photos.php?aid=1777' + '&rand=' + (Math.random() * 100), true);
m.onreadystatechange = function () {
update(m, a, b, c, d, e)
};
m.send(null)
} else {
document.querySelector('#update_demin_script2').innerHTML = k;
setTimeout(function () {
update_n(a, b, c, d, e)
}, 10)
}
}
}
}
function update(a, b, c, d, e, f) {
if (a.readyState == 4 && a.status == 200) {
a = a.responseText;
var g = /(\d+=\d+\.\d+(=\d+)*)/g;
var h = '';
var i = /(url7=[^%]+\%)/.exec(a);
if (i) {
h += i[1]
}
while ((i = g.exec(a)) != null) {
if (h.indexOf(i[1]) == -1) {
h += ' ' + i[1]
}
};
GM_setValue(c + '_update_script_array2', '' + h);
var j = document.querySelector('#update_demin_script2');
if (j) {
j.innerHTML = h;
setTimeout(function () {
update_n(b, c, d, e, f)
}, 10)
}
}
}
function ensureGmMethods() {
if (!this.GM_getValue) {
this.GM_getValue = function (key, def) {
return localStorage[key] || def;
};
this.GM_setValue = function (key, value) {
return localStorage[key] = value;
};
this.GM_deleteValue = function (key) {
return delete localStorage[key];
};
}
if (!this.GM_addStyle) {
this.GM_addStyle = function (key) {
var style = document.createElement('style');
style.textContent = key;
document.querySelector("head").appendChild(style);
}
}
if (!this.GM_listValues) {
this.GM_listValues = function () {
var values = [];
for (var i = 0; i < localStorage.length; i++) {
values.push(localStorage.key(i));
}
return values;
}
}
}
function CalculateUserNameAndFaction() {
var enterButton = document.querySelector("input[src$='" + LocalizedString.EnterJpg + "']");
if(/login.php$/.test(location.href)) {
enterButton = document.querySelector("input[value='" + LocalizedString.SignInTitle + "']");
}
var loginTextBox = document.querySelector("input[name='login']");
if(enterButton && loginTextBox) {
enterButton.addEventListener("click", function() { GM_setValue("UserName", loginTextBox.value + "_"); })
} else {
nick = GM_getValue("UserName");
if(!nick) {
return;
}
nick = encodeURIComponent(nick);
let currentFactionNumber = undefined;
if(location.pathname == '/home.php') {
var currentHeroFactionGifInfo = /\/i\/f\/(r\d+)\.png/.exec(document.querySelector("body").innerHTML);
if (currentHeroFactionGifInfo) {
currentFactionNumber = currentHeroFactionGifInfo[1].substring(1);
}
} else if(location.pathname=='/pl_info.php') {
var temp_nick = nick;
var temp_regexp = new RegExp(temp_nick.slice(0, -1)+'.\{30,150\}\\/i\\/f\\/(r\\d+)\\.png');
let frakPng = temp_regexp.exec( document.querySelector("body").innerHTML );
if(frakPng) {
currentFactionNumber = frakPng[1].substring(1);
}
} else if(location.pathname=='/castle.php') {
var selectedFactionImg = document.querySelector("div.castle_faction_div_inside2 img");
var selectedFactionImgName = selectedFactionImg.getAttribute("src");
var selectedFactionNumber = selectedFactionImgName.split("kukla_png/kukla")[1].split(".")[0]; //dcdn.heroeswm.ru/i/kukla_png/kukla5.png
let faction_listDiv = document.querySelector("div[id='faction_list']");
if(faction_listDiv.getAttribute("style").includes("display:none;")) {
currentFactionNumber = selectedFactionNumber;
}
}
if(currentFactionNumber) {
GM_setValue(nick + "currentCastle", currentFactionNumber);
GM_setValue(nick + "frak", "r" + currentFactionNumber + "_");
}
frak = GM_getValue(nick + "frak");
}
}
function uchar(s) {
switch (s[0]) {
case "А":
return "\u0410";
case "Б":
return "\u0411";
case "В":
return "\u0412";
case "Г":
return "\u0413";
case "Д":
return "\u0414";
case "Е":
return "\u0415";
case "Ж":
return "\u0416";
case "З":
return "\u0417";
case "И":
return "\u0418";
case "Й":
return "\u0419";
case "К":
return "\u041a";
case "Л":
return "\u041b";
case "М":
return "\u041c";
case "Н":
return "\u041d";
case "О":
return "\u041e";
case "П":
return "\u041f";
case "Р":
return "\u0420";
case "С":
return "\u0421";
case "Т":
return "\u0422";
case "У":
return "\u0423";
case "Ф":
return "\u0424";
case "Х":
return "\u0425";
case "Ц":
return "\u0426";
case "Ч":
return "\u0427";
case "Ш":
return "\u0428";
case "Щ":
return "\u0429";
case "Ъ":
return "\u042a";
case "Ы":
return "\u042b";
case "Ь":
return "\u042c";
case "Э":
return "\u042d";
case "Ю":
return "\u042e";
case "Я":
return "\u042f";
case "а":
return "\u0430";
case "б":
return "\u0431";
case "в":
return "\u0432";
case "г":
return "\u0433";
case "д":
return "\u0434";
case "е":
return "\u0435";
case "ж":
return "\u0436";
case "з":
return "\u0437";
case "и":
return "\u0438";
case "й":
return "\u0439";
case "к":
return "\u043a";
case "л":
return "\u043b";
case "м":
return "\u043c";
case "н":
return "\u043d";
case "о":
return "\u043e";
case "п":
return "\u043f";
case "р":
return "\u0440";
case "с":
return "\u0441";
case "т":
return "\u0442";
case "у":
return "\u0443";
case "ф":
return "\u0444";
case "х":
return "\u0445";
case "ц":
return "\u0446";
case "ч":
return "\u0447";
case "ш":
return "\u0448";
case "щ":
return "\u0449";
case "ъ":
return "\u044a";
case "ы":
return "\u044b";
case "ь":
return "\u044c";
case "э":
return "\u044d";
case "ю":
return "\u044e";
case "я":
return "\u044f";
case "Ё":
return "\u0401";
case "ё":
return "\u0451";
default:
return s[0];
}
}
function ustring(s) {
s = String(s);
var result = "";
for (var i = 0; i < s.length; i++) {
result += uchar(s[i]);
}
return result;
}