Greasy Fork 还支持 简体中文。

Hunger Games Teams

Script to add teams to ice poseidons hunger games map

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Hunger Games Teams
// @namespace    Keir
// @version      1.1
// @description  Script to add teams to ice poseidons hunger games map
// @author       KeirStarmer
// @match        https://map.iceposeidon.com/
// @match        https://hungergames.iceposeidon.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=iceposeidon.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const jsonURL = 'https://cxwatcher.github.io/teams.json';
    fetch(jsonURL)
        .then(response => response.json())
        .then(teamColors => {
            const teams = {};
            for (const [username, color] of Object.entries(teamColors)) {
                if (!teams[color]) {
                    teams[color] = [];
                }
                teams[color].push(username);
            }
            function changeUserBoxColor() {
                const usernames = document.querySelectorAll('.username');
                usernames.forEach(function(username) {
                    const name = username.textContent.trim();
                    if (teamColors[name]) {
                        username.closest('.user-marker-inner').style.backgroundColor = teamColors[name];
                    }
                });
            }

            window.addEventListener('load', changeUserBoxColor);
            new MutationObserver(changeUserBoxColor).observe(document.body, {childList: true, subtree: true});

            const gulagDiv = document.querySelector('.gulag');
            if (gulagDiv) {
                const buttonContainer = document.createElement('div');
                buttonContainer.style.marginTop = '10px';
                const buttonState = {};
                for (const [color, members] of Object.entries(teams)) {
                    const teamButton = document.createElement('button');
                    teamButton.textContent = `${color.charAt(0).toUpperCase() + color.slice(1)} Team`;
                    teamButton.style.margin = '5px';
                    teamButton.style.backgroundColor = color;
                    teamButton.style.color = color === 'yellow' || color === 'white' ? 'black' : 'white';
                    teamButton.style.border = 'none';
                    teamButton.style.padding = '5px';
                    teamButton.style.borderRadius = '5px';
                    teamButton.style.display = 'block';

                    buttonContainer.appendChild(teamButton);

                    buttonState[color] = false;

                    teamButton.addEventListener('click', () => {
                        const usernames = document.querySelectorAll('.username');
                        if (!buttonState[color]) {
                            usernames.forEach(function(username) {
                                const name = username.textContent.trim();
                                if (teamColors[name] === color) {
                                    username.closest('.user-marker-inner').style.display = 'block';
                                } else {
                                    username.closest('.user-marker-inner').style.display = 'none';
                                }
                            });
                            buttonState[color] = true;
                        } else {
                            usernames.forEach(function(username) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            });
                            buttonState[color] = false;
                        }
                    });
                }
                gulagDiv.insertAdjacentElement('afterend', buttonContainer);
            }

            // Insert data list to the bottom left
            const dataListContainer = document.createElement('div');
            dataListContainer.style.position = 'fixed';
            dataListContainer.style.bottom = '10px';
            dataListContainer.style.left = '10px';
            dataListContainer.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
            dataListContainer.style.color = 'white';
            dataListContainer.style.padding = '10px';
            dataListContainer.style.borderRadius = '5px';
            dataListContainer.style.zIndex = '1000';
            dataListContainer.style.maxHeight = '80vh';
            dataListContainer.style.overflowY = 'auto';

            const dataList = document.createElement('ul');
            dataList.id = 'data-list';
            dataList.style.listStyleType = 'none';
            dataList.style.padding = '0';
            dataList.style.margin = '0';

            dataListContainer.appendChild(dataList);
            document.body.appendChild(dataListContainer);

           const toggledUsers = {};
function updateList() {
    fetch('https://appapi.iceposeidon.com/public')
        .then(response => response.json())
        .then(data => {
            const sortedData = data.sort((a, b) => a.lives_remaining - b.lives_remaining);
            const list = document.getElementById('data-list');
            list.innerHTML = '';

            sortedData.forEach(entry => {
                const listItem = document.createElement('li');
                const link = document.createElement('a');
                link.href = `https://kick.com/${entry.name}`;
                link.textContent = entry.name;
                link.target = '_blank';
                const livesText = document.createTextNode(` - ${entry.lives_remaining}`);
                listItem.appendChild(link);
                listItem.appendChild(livesText);
                list.appendChild(listItem);
                const nameLower = entry.name.toLowerCase();
                listItem.addEventListener('mouseover', () => {
                    if (Object.keys(toggledUsers).length === 0) {
                        const usernames = document.querySelectorAll('.username');
                        usernames.forEach(function (username) {
                            const name = username.textContent.trim().toLowerCase();
                            if (name === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            } else {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });
                    }
                });

                listItem.addEventListener('mouseout', () => {
                    if (Object.keys(toggledUsers).length === 0) {
                        const usernames = document.querySelectorAll('.username');
                        usernames.forEach(function (username) {
                            username.closest('.user-marker-inner').style.display = 'block';
                        });
                    }
                });
                listItem.addEventListener('click', () => {
                    const usernames = document.querySelectorAll('.username');

                    if (toggledUsers[nameLower]) {
                        usernames.forEach(function (username) {
                            if (username.textContent.trim().toLowerCase() === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });
                        listItem.style.backgroundColor = '';
                        delete toggledUsers[nameLower];
                    } else {
                        usernames.forEach(function (username) {
                            if (username.textContent.trim().toLowerCase() === nameLower) {
                                username.closest('.user-marker-inner').style.display = 'block';
                            } else if (!toggledUsers[username.textContent.trim().toLowerCase()]) {
                                username.closest('.user-marker-inner').style.display = 'none';
                            }
                        });

                        listItem.style.backgroundColor = 'green';
                        toggledUsers[nameLower] = true;
                    }
                    usernames.forEach(function (username) {
                        const name = username.textContent.trim().toLowerCase();
                        if (toggledUsers[name]) {
                            username.closest('.user-marker-inner').style.display = 'block';
                        }
                    });
                });

                if (toggledUsers[nameLower]) {
                    listItem.style.backgroundColor = 'green';
                }
            });

            const usernames = document.querySelectorAll('.username');
            usernames.forEach(function (username) {
                const nameLower = username.textContent.trim().toLowerCase();
                if (toggledUsers[nameLower]) {
                    username.closest('.user-marker-inner').style.display = 'block';
                }
            });
        })
        .catch(error => console.error('Error fetching data:', error));
}

            updateList();
            setInterval(updateList, 10000);

        })
        .catch(error => console.error('Error fetching team colors:', error));
})();