天使之路

下注助手,一键设置前缀,一键设置下注点数

目前為 2024-12-08 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name 天使之路
// @version 1.1.5
// @description 下注助手,一键设置前缀,一键设置下注点数
// @author veip007
// @license LGPL-2.0-or-later
// @match http*://*/htm_data/*/23/*
// @grant none
// @namespace https://greasyfork.org/users/13363
// ==/UserScript==
(function() {
    'use strict';
    // 创建并添加按钮到页面左下角
    function createButtons() {
        const buttonContainer = document.createElement('div');
        buttonContainer.style.position = 'fixed';
        buttonContainer.style.bottom = '10px';
        buttonContainer.style.left = '10px';
        buttonContainer.style.zIndex = '999';
        const settingsBtn = document.createElement('button');
        settingsBtn.textContent = '设置';
        const randomBtn = document.createElement('button');
        randomBtn.textContent = '随机';
        const highBtn = document.createElement('button');
        highBtn.textContent = '高赔';
        const lowBtn = document.createElement('button');
        lowBtn.textContent = '低赔';
        const extractBtn = document.createElement('button');
        extractBtn.textContent = '显示提取内容';
        const copyBtn = document.createElement('button');
        copyBtn.textContent = '复制';
        // 隐藏提取按钮
        extractBtn.style.display = 'none';
        buttonContainer.appendChild(settingsBtn);
        buttonContainer.appendChild(randomBtn);
        buttonContainer.appendChild(highBtn);
        buttonContainer.appendChild(lowBtn);
        buttonContainer.appendChild(extractBtn);
        buttonContainer.appendChild(copyBtn);
        document.body.appendChild(buttonContainer);
        return {
            settingsBtn,
            randomBtn,
            highBtn,
            lowBtn,
            extractBtn,
            copyBtn
        };
    }

    // 提取页面中楼主发布的表格信息(通用函数,处理不同页面结构)
    function extractTableInfo() {
        const postContent = document.querySelector('.tpc_content');
        if (!postContent) {
            console.error('未找到楼主发布的内容');
            return;
        }
        const table = postContent.querySelector('table');
        if (!table) {
            console.error('未找到表格元素');
            return;
        }
        const rows = table.querySelectorAll('tr');
        const headerRow = rows[0];
        const headerCells = headerRow.querySelectorAll('td');
        const hasDrawColumn = Array.from(headerCells).some(cell => cell.textContent.includes('平局'));
        const dataRows = Array.from(rows).slice(1);
        const tableData = [];
        dataRows.forEach(row => {
            const cells = row.querySelectorAll('td');
            const rowData = [];
            if (hasDrawColumn) {
                rowData.push(cells[1].textContent.trim(), cells[2].textContent.trim(), cells[3].textContent.trim());
            } else {
                rowData.push(cells[1].textContent.trim(), cells[3].textContent.trim());
            }
            tableData.push(rowData);
        });
        console.log('提取的表格数据:', tableData);
        return tableData;
    }

    // 根据赔率比较获取对应结果(高赔、低赔),赔率相同时随机返回,考虑第三列平局情况参与计算
    function getResultByOdds(tableData, isHighOdds) {
        const result = [];
        tableData.forEach(data => {
            const homeOdds = parseFloat(data[0].match(/\[([\d.]+)\]/)[1]);
            const awayOdds = parseFloat(data[1].match(/\[([\d.]+)\]/)[1]);
            const drawOdds = 1;
            if (homeOdds * drawOdds > awayOdds * drawOdds) {
                result.push(isHighOdds ? data[0] : data[1]);
            } else if (homeOdds * drawOdds < awayOdds * drawOdds) {
                result.push(isHighOdds ? data[1] : data[0]);
            } else {
                result.push(Math.random() < 0.5 ? data[0] : data[1]);
            }
        });
        return result;
    }

    // 生成随机选择的结果(修改为随机选择多组不同队伍,处理多页面数据)
    function getRandomResult(tableData) {
        const result = [];
        const numResultsNeeded = tableData.length;
        for (let i = 0; i < numResultsNeeded; i++) {
            const data = tableData[i];
            const randomSelection = Math.random() < 0.5 ? 0 : 1;
            result.push(data[randomSelection]);
        }
        return result;
    }

    // 显示输出结果到左上角,点击新按钮时清除上一次结果
    function displayResult(result, prefix, betPoints) {
        const existingResultDiv = document.querySelector('.result-display');
        if (existingResultDiv) {
            existingResultDiv.remove();
        }
        const resultDiv = document.createElement('div');
        resultDiv.className = 'result-display';
        resultDiv.style.position = 'fixed';
        resultDiv.style.top = '10px';
        resultDiv.style.left = '10px';
        resultDiv.style.zIndex = '999';
        resultDiv.style.backgroundColor = 'white';
        resultDiv.style.padding = '20px';
        resultDiv.style.border = '1px solid gray';
        let output = '';
        if (prefix) {
            output += `${prefix}<br>`;
        }
        for (let i = 0; i < result.length; i++) {
            output += `${i + 1}.下注球队:${result[i]}<br>`;
        }
        output += `下注点数:${betPoints}`;
        resultDiv.innerHTML = output;
        document.body.appendChild(resultDiv);
        return resultDiv;
    }

    // 创建设置弹窗
function createSettingsPopup() {
    const popup = document.createElement('div');
    popup.style.position = 'fixed';
    popup.style.top = '50%';
    popup.style.left = '50%';
    popup.style.transform = 'translate(-50%, -50%)';
    popup.style.backgroundColor = 'white';
    popup.style.padding = '20px';
    popup.style.border = '1px solid gray';
    popup.style.zIndex = '9999';

    const prefixCheckbox = document.createElement('input');
    prefixCheckbox.type = 'checkbox';
    const prefixLabel = document.createElement('label');
    prefixLabel.textContent = '前缀';
    const prefixInput = document.createElement('input');
    prefixInput.value = '队名:';

    const betPointsCheckbox = document.createElement('input');
    betPointsCheckbox.type = 'checkbox';
    betPointsCheckbox.checked = true; // 设置默认勾选状态
    const betPointsLabel = document.createElement('label');
    betPointsLabel.textContent = '下注点数';
    const betPointsInput = document.createElement('input');

    const saveBtn = document.createElement('button');
    saveBtn.textContent = '保存';
    const closeBtn = document.createElement('button');
    closeBtn.textContent = '关闭';

    popup.appendChild(prefixCheckbox);
    popup.appendChild(prefixLabel);
    popup.appendChild(prefixInput);
    popup.appendChild(document.createElement('br'));
    popup.appendChild(betPointsCheckbox);
    popup.appendChild(betPointsLabel);
    popup.appendChild(betPointsInput);
    popup.appendChild(document.createElement('br'));
    popup.appendChild(saveBtn);
    popup.appendChild(closeBtn);

    closeBtn.addEventListener('click', () => {
        popup.remove();
        settingsPopup = null;
    });

    return {
        popup,
        prefixCheckbox,
        prefixInput,
        betPointsCheckbox,
        betPointsInput,
        saveBtn,
        closeBtn
    };
}
    // 从本地存储读取设置参数
    function loadSettings() {
        const savedSettings = localStorage.getItem('scriptSettings');
        if (savedSettings) {
            return JSON.parse(savedSettings);
        }
        // prefixEnabled: true/false 为前缀默认勾选开关, betPointsEnabled: true/false 为前默认点数勾选开关, true 开,false 关
        return { prefix: '队名:无码大爷威武霸气', betPoints: '50', prefixEnabled: false, betPointsEnabled: true };
    }

    // 保存设置参数到本地存储
    function saveSettings(prefix, betPoints, prefixEnabled, betPointsEnabled) {
        const settings = { prefix, betPoints, prefixEnabled, betPointsEnabled };
        localStorage.setItem('scriptSettings', JSON.stringify(settings));
    }

    let settings = loadSettings();
    let settingsPopup;
    const {
        settingsBtn,
        highBtn,
        lowBtn,
        extractBtn,
        copyBtn,
        randomBtn // 获取随机按钮元素
    } = createButtons();

    // 随机按钮点击事件处理函数
    randomBtn.addEventListener('click', () => {
        const tableData = extractTableInfo();
        if (tableData) {
            const result = getRandomResult(tableData);
            const resultDiv = displayResult(result, settings.prefixEnabled ? settings.prefix : '', settings.betPointsEnabled ? settings.betPoints : '');
            copyBtn.addEventListener('click', () => {
                const textToCopy = resultDiv.innerText;
                navigator.clipboard.writeText(textToCopy).then(() => {
                    console.log('复制成功');
                }).catch((err) => {
                    console.error('复制失败:', err);
                });
            });
        }
    });

    // 点击设置按钮显示设置弹窗
    settingsBtn.addEventListener('click', () => {
        if (!settingsPopup) {
            const { popup, prefixCheckbox, prefixInput, betPointsCheckbox, betPointsInput, saveBtn, closeBtn } = createSettingsPopup();
            settingsPopup = { popup, prefixCheckbox, prefixInput, betPointsCheckbox, betPointsInput, saveBtn, closeBtn };
            prefixCheckbox.checked = settings.prefixEnabled;
            prefixInput.value = settings.prefix;
            betPointsCheckbox.checked = settings.betPointsEnabled;
            betPointsInput.value = settings.betPoints;
            document.body.appendChild(popup);
            saveBtn.addEventListener('click', () => {
                settings.prefixEnabled = prefixCheckbox.checked;
                settings.prefix = prefixInput.value;
                settings.betPointsEnabled = betPointsCheckbox.checked;
                settings.betPoints = betPointsInput.value;
                saveSettings(settings.prefix, settings.betPoints, settings.prefixEnabled, settings.betPointsEnabled);
                popup.remove();
                settingsPopup = null;
            });
        }
    });

    // 高赔按钮点击事件处理函数
    highBtn.addEventListener('click', () => {
        const tableData = extractTableInfo();
        if (tableData) {
            const result = getResultByOdds(tableData, true);
            const resultDiv = displayResult(result, settings.prefixEnabled ? settings.prefix : '', settings.betPointsEnabled ? settings.betPoints : '');
            copyBtn.addEventListener('click', () => {
                const textToCopy = resultDiv.innerText;
                navigator.clipboard.writeText(textToCopy).then(() => {
                    console.log('复制成功');
                }).catch((err) => {
                    console.error('复制失败:', err);
                });
            });
        }
    });

    // 低赔按钮点击事件处理函数
    lowBtn.addEventListener('click', () => {
        const tableData = extractTableInfo();
        if (tableData) {
            const result = getResultByOdds(tableData, false);
            const resultDiv = displayResult(result, settings.prefixEnabled ? settings.prefix : '', settings.betPointsEnabled ? settings.betPoints : '');
            copyBtn.addEventListener('click', () => {
                const textToCopy = resultDiv.innerText;
                navigator.clipboard.writeText(textToCopy).then(() => {
                    console.log('复制成功');
                }).catch((err) => {
                    console.error('复制失败:', err);
                });
            });
        }
    });

    // 显示提取内容按钮点击事件处理函数
    extractBtn.addEventListener('click', () => {
        const tableData = extractTableInfo();
        if (tableData) {
            const result = [];
            tableData.forEach(row => {
                result.push(...row);
            });
            const resultDiv = displayResult(result, '', '');
            copyBtn.addEventListener('click', () => {
                const textToCopy = resultDiv.innerText;
                navigator.clipboard.writeText(textToCopy).then(() => {
                    console.log('复制成功');
                }).catch((err) => {
                    console.error('复制失败:', err);
                });
            });
        }
    });

    // 监听键盘事件,当按下 F9 键时触发随机功能
    document.addEventListener('keydown', function(event) {
        if (event.key === 'F9') {
            const tableData = extractTableInfo();
            if (tableData) {
                const result = getRandomResult(tableData);
                const resultDiv = displayResult(result, settings.prefixEnabled ? settings.prefix : '', settings.betPointsEnabled ? settings.betPoints : '');
                copyBtn.addEventListener('click', () => {
                    const textToCopy = resultDiv.innerText;
                    navigator.clipboard.writeText(textToCopy).then(() => {
                        console.log('复制成功');
                    }).catch((err) => {
                        console.error('复制失败:', err);
                    });
                });
            }
        }
    });
})();