FMP Player Stats Summary (Accurate Placement)

Add total and average row to correct stats table

Устаревшая версия за 31.05.2025. Перейдите к последней версии.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         FMP Player Stats Summary (Accurate Placement)
// @namespace    https://osama.dev
// @version      1.2
// @description  Add total and average row to correct stats table
// @match        https://footballmanagerproject.com/Team/Player?id=*
// @grant        none
// ==/UserScript==

(function () {
    function parseNum(txt) {
        const n = parseFloat(txt);
        return isNaN(n) ? 0 : n;
    }

    function getCorrectTable() {
        const tables = document.querySelectorAll('table');
        for (let table of tables) {
            const headers = Array.from(table.querySelectorAll('th')).map(th => th.innerText.trim().toLowerCase());
            if (headers.includes('matches') && headers.includes('goals') && headers.includes('rating')) {
                return table;
            }
        }
        return null;
    }

    function addStatsSummary() {
        const table = getCorrectTable();
        if (!table) return;

        const rows = Array.from(table.querySelectorAll('tbody tr')).filter(r => r.children.length >= 9);
        if (!rows.length) return;

        let totals = { matches: 0, goals: 0, assists: 0, yellow: 0, red: 0, rating: 0 };
        let ratingCount = 0;

        rows.forEach(row => {
            const cells = row.querySelectorAll('td');
            totals.matches += parseNum(cells[3].innerText);
            totals.goals += parseNum(cells[4].innerText);
            totals.assists += parseNum(cells[5].innerText);
            totals.yellow += parseNum(cells[6].innerText);
            totals.red += parseNum(cells[7].innerText);
            const rate = parseNum(cells[8].innerText);
            if (rate > 0) {
                totals.rating += rate;
                ratingCount++;
            }
        });

        const avgRating = ratingCount ? (totals.rating / ratingCount).toFixed(2) : '0.00';

        const summaryRow = document.createElement('tr');
        summaryRow.style.backgroundColor = '#334400';
        summaryRow.style.color = 'yellow';
        summaryRow.style.fontWeight = 'bold';

        summaryRow.innerHTML = `
            <td colspan="3">📊 Summary</td>
            <td>${totals.matches}</td>
            <td>${totals.goals}</td>
            <td>${totals.assists}</td>
            <td>${totals.yellow}</td>
            <td>${totals.red}</td>
            <td>${avgRating}</td>
            <td></td>
        `;

        table.querySelector('tbody').appendChild(summaryRow);
    }

    window.addEventListener('load', () => {
        setTimeout(addStatsSummary, 1000);
    });
})();