天使之路

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

当前为 2024-12-08 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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);
                    });
                });
            }
        }
    });
})();