MenelGame - Interface Tweaks

Poprawki wizualne interfejsu - Skróty 20% poniżej Timerów + Koszty atrybutów PVP

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         MenelGame - Interface Tweaks
// @namespace    https://greasyfork.org/en/scripts/575758-menelgame-interface-tweaks
// @version      2.5.2
// @description  Poprawki wizualne interfejsu - Skróty 20% poniżej Timerów + Koszty atrybutów PVP
// @author       Arctos + Gemini + DeepSeek
// @match        *://*.menelgame.online/*
// @grant        none
// @run-at       document-start
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const css = `
        .equipment-tabs { margin-bottom: 0px !important; }
        .equipment-presets-section { margin-top: 0px !important; }
        .equipment-slot-row.row-hustling {
            display: block !important;
            text-align: center !important;
            width: 100% !important;
            overflow: visible !important;
            clear: both !important;
            margin-top: -65px !important; 
            position: relative !important;
            z-index: 10 !important;
            line-height: 0 !important;
            pointer-events: none !important; 
        }
        .equipment-slot-row.row-hustling .equipment-slot {
            display: inline-block !important;
            float: none !important;
            position: relative !important;
            margin: 0 1% !important;
            vertical-align: top !important;
            pointer-events: auto !important; 
        }
        .equipment-slot-row.row-hustling .equipment-slot:nth-child(1),
        .equipment-slot-row.row-hustling .equipment-slot:nth-child(2) {
            left: -14% !important;
        }
        .equipment-slot-row.row-hustling .equipment-slot:nth-child(3),
        .equipment-slot-row.row-hustling .equipment-slot:nth-child(4) {
            left: 14% !important;
        }
        .equipment-slot { z-index: 5 !important; pointer-events: auto !important; }
        [title*="buty"], [title*="Buty"], .equipment-slot { pointer-events: auto !important; }
        .avatar-jacket-badge { width: 48px !important; height: 48px !important; }
        .avatar-jacket-icon { width: 100% !important; height: 100% !important; }
        div[style*="background-color: rgba(74, 58, 42, 0.9)"] {
            justify-content: flex-start !important;
            gap: 10px !important;
        }
        div[style*="background-color: rgba(74, 58, 42, 0.9)"] > div:nth-child(2) {
            margin-left: auto !important;
        }
        .timers-pull-tab {
            width: 35px !important; 
            transition: none !important;
            box-shadow: -3px 0 10px rgba(0,0,0,0.5) !important;
        }
        .shortcuts-pull-tab {
            width: 35px !important;
            transition: none !important;
            box-shadow: -3px 0 10px rgba(0,0,0,0.5) !important;
            top: 50% !important; 
            bottom: auto !important;
            transform: translateY(-50%) !important;
            border-radius: 8px 0 0 8px !important;
        }
        .timers-pull-tab:hover, .shortcuts-pull-tab:hover {
            width: 35px !important;
            background: linear-gradient(135deg, #a67c52, #8b5a2b) !important;
        }
        .timers-pull-tab-arrow, .shortcuts-pull-tab-icon {
            font-size: 18px !important;
            font-weight: bold !important;
        }
        .pvp-attribute-cost-info {
            color: #000000 !important;
            font-weight: bold;
            font-size: 12px;
            padding: 2px 5px;
            border-radius: 4px;
            display: inline-block;
            margin-left: auto !important;
            margin-right: 10% !important;
        }
        .pvp-attribute-row[data-attr-type="str"] .pvp-attribute-cost-info { background: rgba(192, 57, 43, 0.4); }
        .pvp-attribute-row[data-attr-type="end"] .pvp-attribute-cost-info { background: rgba(127, 140, 141, 0.4); }
        .pvp-attribute-row[data-attr-type="agi"] .pvp-attribute-cost-info { background: rgba(39, 174, 96, 0.4); }
        .pvp-attribute-row[data-attr-type="vit"] .pvp-attribute-cost-info { background: rgba(231, 76, 60, 0.4); }
        .pvp-attribute-row[data-attr-type="prc"] .pvp-attribute-cost-info { background: rgba(243, 156, 18, 0.4); }
    `;

    const addStyle = () => {
        if (document.getElementById('menel-tweaks-style')) return;
        const style = document.createElement('style');
        style.id = 'menel-tweaks-style';
        style.textContent = css;
        (document.head || document.documentElement).appendChild(style);
    };

    const costTable = { 0: 15, 5: 40, 10: 65, 15: 90, 20: 115, 25: 140, 30: 165, 35: 190, 40: 215, 45: 240 };

    function getCostForLevel(level) {
        const thresholds = Object.keys(costTable).map(Number).sort((a,b) => a-b);
        for (let i = thresholds.length - 1; i >= 0; i--) {
            if (level >= thresholds[i]) return costTable[thresholds[i]];
        }
        return costTable[0];
    }

    function getAttributeType(row) {
        const img = row.querySelector('img[alt]');
        if (!img) return 'unknown';
        const alt = img.getAttribute('alt');
        if (alt === 'STR') return 'str';
        if (alt === 'END') return 'end';
        if (alt === 'AGI') return 'agi';
        if (alt === 'VIT') return 'vit';
        if (alt === 'PRC') return 'prc';
        return 'unknown';
    }

    function addCostInfoToAttributeRow(row) {
        // Szukamy span z wartością atrybutu
        const valueSpan = row.querySelector('div[style*="flex: 1"] div:first-child span:last-child');
        if (!valueSpan) return;
        
        const value = parseInt(valueSpan.textContent);
        if (isNaN(value)) return;
        
        const nextCost = getCostForLevel(value);
        
        // Sprawdzamy czy już dodaliśmy info
        if (row.querySelector('.pvp-attribute-cost-info')) return;
        
        // USUWAMY ORYGINALNĄ STRZAŁKĘ ›
        const originalArrow = row.querySelector('div[style*="color: rgb(160, 144, 128)"]');
        if (originalArrow && originalArrow.textContent.includes('›')) {
            originalArrow.remove();
        }
        
        // Określamy typ atrybutu
        const attrType = getAttributeType(row);
        row.setAttribute('data-attr-type', attrType);
        
        // Tworzymy kontener na koszt + ikonkę + strzałkę
        const costContainer = document.createElement('span');
        costContainer.className = 'pvp-attribute-cost-info';
        costContainer.title = `Koszt podbicia z ${value} na ${value+1}`;
        
        // Dodajemy koszt (liczbę)
        const costValue = document.createTextNode(`${nextCost} `);
        costContainer.appendChild(costValue);
        
        // Dodajemy ikonkę waluty (pomniejszona)
        const currencyIcon = document.createElement('img');
        currencyIcon.src = 'https://menelgame.online/images/icons/premium.png';
        currencyIcon.style.width = '12px';
        currencyIcon.style.height = '12px';
        currencyIcon.style.verticalAlign = 'middle';
        currencyIcon.style.marginRight = '2px';
        costContainer.appendChild(currencyIcon);
        
        // Dodajemy strzałkę w lewo
        const arrowSpan = document.createTextNode(' ←');
        costContainer.appendChild(arrowSpan);
        
        // Wstawiamy przed wartością
        valueSpan.insertAdjacentElement('beforebegin', costContainer);
    }

    function processPVPPage() {
        if (!window.location.href.includes('/pvp') && !document.querySelector('.pvp-attribute-row')) {
            return;
        }
        document.querySelectorAll('.pvp-attribute-row').forEach(row => addCostInfoToAttributeRow(row));
    }

    addStyle();
    
    const observer = new MutationObserver(() => {
        if (!document.getElementById('menel-tweaks-style')) addStyle();
        if (window.location.href.includes('/pvp') || document.querySelector('.pvp-attribute-row')) {
            processPVPPage();
        }
    });
    observer.observe(document.documentElement, { childList: true, subtree: true });
    
    window.addEventListener('DOMContentLoaded', () => {
        addStyle();
        processPVPPage();
    });
    
    if (document.readyState !== 'loading') processPVPPage();
})();