🏠 返回首頁 

Greasy Fork is available in English.

hwmResoursesAsImages

Ресурсы и части в картинках

// ==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 }); }