// ==UserScript== // @name LZT_Trophy // @namespace https://greasyfork.org/ru/users/1142494-llimonix // @version 0.14 // @description Отображение всех трофеев в профиле пользователя // @author llimonix // @match https://zelenka.guru/* // @match https://lolz.live/* // @icon https://cdn-icons-png.flaticon.com/512/2830/2830919.png // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { let pageCounter = $('.page_counter'); if (pageCounter.length > 0) { let hrefValue = pageCounter.attr('href'); let parts = hrefValue.replace('members/', '').split("/"); let value = parts[0]; let trophy; if (~hrefValue.indexOf("members/")) { value = `members/${value}`; } XenForo.ajax(`${value}/trophies`, {}).then(data => { trophy = data.templateHtml; let parser = new DOMParser(); trophy = parser.parseFromString(trophy, 'text/html'); let overlayScrollElements = $(trophy).find('.overlayScroll'); let totalCount = overlayScrollElements.length; if (totalCount > 1) { overlayScrollElements.first().remove(); } let trophies = $(trophy).find('.trophy'); let trophiesList = trophies.map((_, trophy) => trophy.id).get(); let trophiesstyle = $(trophy).find('.trophy-icon'); let trophystyleList = trophiesstyle.map((_, trophy) => { const style = trophy.style.cssText; const match = style.match(/url\((.*?)\)/); return match ? match[1].replace(/['"]/g, '') : null; }).get(); // Функция для форматирования чисел function formatNumber(num) { if (num >= 1000) { // Округляем до одного знака после запятой и добавляем K return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'K'; } return num.toString(); } // Извлекаем счетчики из названий трофеев let trophyCountersMap = {}; $(trophy).find('.trophy').each(function() { let trophyId = $(this).attr('id'); let titleText = $(this).find('.title').text().trim(); let counterMatch = titleText.match(/—\s*([\d\s]+)/); if (counterMatch) { let numberStr = counterMatch[1].replace(/\s+/g, ''); let number = parseInt(numberStr); if (!isNaN(number) && number !== 1) { trophyCountersMap[trophyId] = formatNumber(number); } } }); let titletrophy = $(trophy).find('.title'); let titleTexttrophyList = titletrophy.map((_, trophy) => { let fullText = trophy.textContent.trim(); let cleanText = fullText.split(' — ')[0].trim(); return cleanText; }).get(); let trophyLinks = {}; for (let i = 0; i < titleTexttrophyList.length; i++) { let element = titleTexttrophyList[i]; $(trophy).find('.title:contains(' + element + ')').each(function () { let href = $(this).closest('.trophy').find('.trophy-icon').attr('href'); if (href) { trophyLinks[element] = href; } else { trophyLinks[element] = "None"; } }); } let htmlTrophy = "
    "; let titles = []; for (let index = 0; index < trophystyleList.length; index++) { let trophyLink = trophyLinks[titleTexttrophyList[index]]; let trophyStyle = `background-image: url('${trophystyleList[index]}'); --mask: url('${trophystyleList[index]}')` let trophyId = trophiesList[index]; let counterHTML = trophyCountersMap[trophyId] ? `
    ${trophyCountersMap[trophyId]}
    ` : ''; if (trophyLink == "None") { htmlTrophy += `
  1. ${counterHTML}
  2. `; } else { htmlTrophy += `
  3. ${counterHTML}
  4. `; } titles.push(titleTexttrophyList[index]); } htmlTrophy += "
"; if (screen.width <= 480) { $('.memberViewTrophies').html(htmlTrophy); $('.Responsive .memberViewTrophies').css('display', 'block'); $('.memberViewTrophies').css({ 'position': 'relative', 'margin': '20px 0 0', 'overflow-x': 'scroll', 'white-space': 'nowrap' }); $('.memberViewTrophies .trophy').hover(function() { $(this).css({ '-webkit-transform': 'none', 'transform': 'none', '-ms-transform': 'none' }); }); } else { $('.memberViewTrophies').html(htmlTrophy); } $('.DelayedTooltip').each(function(index, element) { tippy(element, { content: titles[index], arrow: true, onShow(instance) { instance.popper.style.border = '10px solid transparent'; } }); }); }); } })();