- // ==UserScript==
- // @name hwmResoursesAsImages
- // @namespace hwmResoursesAsImages
- // @description Ресурсы и части в картинках
- // @author raTaHoa; Чеширский КотЪ; code: Dinozon2, ElMarado; style: sw.East
- // @version 4.7
- // @include https://www.heroeswm.ru/pl_info.php*
- // @include https://www.lordswm.com/pl_info.php*
- // @include http://178.248.235.15/pl_info.php*
- // @license MIT
- // ==/UserScript==
-
- addStyle (`
- .resourceSlot{
- overflow: hidden;
- float: left;
- width: 48px;
- height: 48px;
- margin: 4px 4px 4px 0;
- padding: 0;
- border: 4px solid #fff;
- box-shadow: 0px 0px 5px #aaa;
- z-index: 1;
- }
- .resourceSlot img {
- display: block;
- width: 42px;
- height: 42px;
- margin: 3px 0 0 3px;
- padding: 0;
- }
- .resourceSlot a img {
- -webkit-transition: all 0.2s linear;
- -moz-transition: all 0.2s linear;
- -ms-transition: all 0.2s linear;
- -o-transition: all 0.2s linear;
- transition: all 0.2s linear;
- }
- .resourceSlot:hover a img {
- -webkit-transform: scale(1.20,1.20);
- -moz-transform: scale(1.20,1.20);
- -ms-transform: scale(1.20,1.20);
- -o-transform: scale(1.10,1.20);
- transform: scale(1.20,1.20);
- opacity:1;
- }
- .resourceSlot a{
- text-decoration: none;
- }
- .amountSlot {
- position: absolute;
- min-width: 14px;
- height: 13px;
- margin: -48px 0 0 -3px;
- padding: 0 1px 1px;
- color: #fff;
- border: 2px solid #fff;
- background: #222;
- -webkit-box-shadow: 1px 1px 1px #aaa;
- -moz-box-shadow: 1px 1px 1px #aaa;
- box-shadow: 1px 1px 1px #aaa;
- z-index: 15;
- font-size: 10px;
- text-align: center;
- text-decoration: none !important;
- text-shadow: 1px 1px 1px rgba(0,0,0, 0.8);
- cursor: pointer;
- opacity: .7;
- -webkit-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
- -moz-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
- -ms-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
- -o-transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
- transition: opacity 0.4s ease-in-out, visibility 0.4s ease-in-out;
- }` );
- const ElementsArray = {
- "Сапоги страха": "part_fear_boots",
- "Роба страха": "part_fear_bonearmour",
- "Коса страха": "part_fear_scythe",
- "Плащ страха": "part_fear_cloack",
- "Амулет страха": "part_fear_amulk",
- "Щит страха": "part_fear_shield",
- "Фонарь страха": "part_fear_lantern",
- "Серп страха": "part_fear_sickle",
- "Лук страха": "part_fear_bow",
- "Маска страха": "part_fear_maska",
-
- "Магма меч": "part_magma_swrd",
- "Магма шлем": "part_magma_helm",
- "Магма кулон": "part_magma_pend",
- "Магма кольцо": "part_magma_rd",
- "Магма доспех": "part_magma_armor",
- "Магма плащ": "part_magma_clc",
- "Магма арбалет": "part_magma_arb",
- "Магма сапоги": "part_magma_boots",
- "Магма щит": "part_magma_lshield",
- "Магма кинжал": "part_magma_dagger",
- "Небесный посох": "part_heaven_staff",
- "Небесная диадема": "part_heaven_helm",
- "Небесные сандалии": "part_heaven_bts",
- "Небесный доспех": "part_heaven_armr",
- "Небесная мантия": "part_heaven_clk",
- "Небесный лук": "part_heaven_bow",
- "Небесный щит": "part_heaven_shield",
- "Небесный амулет": "part_heaven_amlt",
- "Небесное кольцо": "part_heaven_rn",
- "Небесный кинжал": "part_heaven_dagger",
- // *** Артефакты тьмы
- 'Амулет тьмы': 'part_dark_amul',
- 'Доспех тьмы': 'part_dark_armor',
- 'Меч тьмы': 'part_dark_sword',
- 'Сапоги тьмы': 'part_dark_boots',
- 'Топор тьмы': 'part_dark_axe',
- 'Шлем тьмы': 'part_dark_helmet',
- 'Щит тьмы': 'part_dark_shield',
- 'Плащ тьмы': 'part_dark_cloak',
- 'Кинжал тьмы': 'part_dark_dagger',
- 'Кольцо тьмы': 'part_dark_ring',
- 'Лук тьмы': 'part_dark_bow',
- // *** Имперские артефакты
- 'Имперский амулет': 'part_imp_amul',
- 'Имперский арбалет': 'part_imp_crossbow',
- 'Имперский доспех': 'part_imp_armor',
- 'Имперский кинжал': 'part_imp_dagger',
- 'Имперское кольцо': 'part_imp_ring',
- 'Имперский меч': 'part_imp_sword',
- 'Имперский плащ': 'part_imp_cloak',
- 'Имперские сапоги': 'part_imp_boots',
- 'Имперский шлем': 'part_imp_helmet',
- 'Имперский щит': 'part_imp_shield',
- // *** Части Гильдии Лидеров
- 'Части редкого отряда': 'https://dcdn.heroeswm.ru/i/rewards/gn/task3.png',
- 'Частей редкого отряда': 'https://dcdn.heroeswm.ru/i/rewards/gn/task3.png',
- 'Части очень редкого отряда': 'https://dcdn.heroeswm.ru/i/rewards/gn/task4.png',
- 'Частей очень редкого отряда':'https://dcdn.heroeswm.ru/i/rewards/gn/task4.png',
- 'Части таинственного свитка': 'https://i.imgur.com/38VoKxQ.png',
- // *** Элементы Гильдии Наёмников
- 'Абразив': 'abrasive',
- 'Змеиный яд': 'snake_poison',
- 'Клык тигра': 'tiger_tusk',
- 'Ледяной кристалл': 'ice_crystal',
- 'Лунный камень': 'moon_stone',
- 'Огненный кристалл': 'fire_crystal',
- 'Осколок метеорита': 'meteorit',
- 'Цветок ведьм': 'witch_flower',
- 'Цветок ветров': 'wind_flower',
- 'Цветок папоротника': 'fern_flower',
- 'Ядовитый гриб': 'badgrib',
- // *** Элементы с предприятий
- 'Кожа': 'https://i.imgur.com/Xn82L25.png',
- 'Сталь': 'https://i.imgur.com/hwThTJE.png',
- 'Никель': 'https://i.imgur.com/6lHniay.png',
- 'Волшебный порошок': 'https://i.imgur.com/IuqF7rI.png',
- 'Мифриловая руда': 'https://i.imgur.com/dv6rzKn.png',
- 'Обсидиан': 'https://i.imgur.com/4yOWbK8.png',
- 'Мифрил': 'https://i.imgur.com/1Y1Z7Mq.png',
- 'Орихалк': 'https://i.imgur.com/qRGZzCs.png'
- };
-
- main();
- function main() {
- const resourcesPanel = getResourcesPanel();
- if(!resourcesPanel) {
- return;
- }
- const parsedResourcesInfo = getParsedResourcesInfo(resourcesPanel);
- for(const resource of parsedResourcesInfo) {
- if(resource.Amount > 0) {
- let resourceCode = ElementsArray[resource.Name];
- if(!resourceCode) {
- continue;
- }
- const toolTip = `${resource.Name}: ${resource.Amount}`;
- let html;
- if(resourceCode.startsWith("https")) {
- html = `<a href="#"><img src="${resourceCode}" alt="${toolTip}" title="${toolTip}"></a>`;
- } else {
- let artCategory;
- let imageSource;
- if(isArtPart(resource.Name)) {
- artCategory = "part";
- imageSource = `/i/artifacts/parts/${resourceCode}.png`;
- } else {
- artCategory = "elements";
- imageSource = `/i/gn_res/${resourceCode}.png?v=0`;
- }
- html = `<a href="/auction.php?cat=${artCategory}&sort=0&art_type=${resourceCode}"><img src="${imageSource}" alt="${toolTip}" title="${toolTip}"></a>`;
- }
- let amountDivWidth = Math.max(15, Math.ceil(getNumberLength(resource.Amount) * 7.5));
- //console.log(`resource.Amount: ${resource.Amount}, amountDivWidth: ${amountDivWidth}`);
- html += `<div class="amountSlot" style="width: ${amountDivWidth}px">${resource.Amount}</div>`;
- if(resource.TextNode.nextSibling && resource.TextNode.nextSibling.tagName.toLowerCase() == "br") {
- resource.TextNode.nextSibling.remove();
- }
- resource.TextNode.replaceWith(createElement("div", { class: "resourceSlot", innerHTML: html }));
- }
- }
- }
- function isArtPart(name) { return name.includes('Импер') || name.includes('Магма') || name.includes('тьмы') || name.includes('Небесн') || name.includes('трах'); }
- function getParsedResourcesInfo(resourcesPanel) {
- const walker = document.createTreeWalker(resourcesPanel, NodeFilter.SHOW_TEXT);
- let textNodes = [];
- while(walker.nextNode()) {
- textNodes.push(walker.currentNode)
- }
- textNodes = textNodes.map(x => [x, x.textContent.replace("\n", "").trimStart()]).filter(x => x[1] != "" && !x[1].includes("function")).map(x => { return { TextNode: x[0], Name: x[1].split(":")[0], Amount: parseInt(x[1].split(":")[1].replace(/,/g, "")) }; });
- //console.log(textNodes);
- return textNodes;
- }
- function getResourcesPanel() {
- const tables = document.querySelectorAll("table.wblight");
- for(const table of tables) {
- const bolds = table.querySelectorAll("b");
- for(const bold of bolds) {
- if(bold.innerText == "Ресурсы") {
- return table.rows[1].cells[0];
- }
- }
- }
- }
- function getNumberLength(number) { return number.toString().length; }
- function addElement(type, parent, data) {
- let el = createElement(type, data);
- if(parent) {
- parent.appendChild(el);
- }
- return el;
- }
- function createElement(type, data) {
- let el = document.createElement(type);
- if(data) {
- for(let key in data) {
- if(key == "innerText" || key == "innerHTML") {
- el[key] = data[key];
- } else {
- el.setAttribute(key, data[key]);
- }
- }
- }
- return el;
- }
- function addStyle(css) { addElement("style", document.head, { type: "text/css", innerHTML: css }); }
-