您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在牌谱屋的player页加了个按钮,跳转到Majang风格类型。
// ==UserScript== // @name Observing the Style of Players for MajSoulStats // @name:zh-CN 雀魂牌谱屋看牌手风格 // @namespace http://tampermonkey.net/ // @version 2024-12-18 // @description Added a button on the player page of MajSoulStats to link to Majang style type. // @description:zh-cn 在牌谱屋的player页加了个按钮,跳转到Majang风格类型。 // @author lsyanling // @match https://amae-koromo.sapk.ch/player/* // @match https://yurakuurame.github.io/4ma-majang-type-check/* // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net // @license MIT // @grant GM_openInTab // @grant GM_setValue // @grant GM_getValue // @grant GM_listValues // ==/UserScript== (function () { 'use strict'; const currentURL = window.location.href; // 网站A功能 if (currentURL.includes('amae-koromo.sapk.ch')) { // 风格判断 const linkToURL = `https://yurakuurame.github.io/4ma-majang-type-check/`; // 插入按钮 function insertButton() { const button = document.createElement('button'); button.type = 'button'; button.textContent = '查看风格'; setButtonStyle(button); // 点击事件 button.addEventListener('click', handleButtonClick); // 获取插入位置 const rankDistributionChart = document.getElementsByClassName('recharts-responsive-container')[1]; if (rankDistributionChart) { let muiGridItem = rankDistributionChart.parentElement; if (muiGridItem) { muiGridItem = muiGridItem.parentElement; muiGridItem.appendChild(button); } else { setTimeout(() => insertButton(), 100); } } else { setTimeout(() => insertButton(), 100); } } // 设置按钮样式 function setButtonStyle(button) { button.style.display = 'flex'; button.style.justifycontent = 'center'; button.style.zIndex = '1000'; button.style.padding = '10px'; button.style.border = 'none'; button.style.color = 'white'; button.style.backgroundColor = '#7B64E8'; button.style.cursor = 'pointer'; } // 处理按钮点击事件 function handleButtonClick() { const data = getStatsData(); GM_setValue('dataForMajangType', data); const listValues = GM_listValues(); console.log(listValues); // 跳转到 URL const newTab = GM_openInTab(linkToURL, { active: true }); } // 获取牌谱屋的数据 function getStatsData() { // 获取 Link 元素 const muiStack = document.getElementsByClassName('MuiStack-root')[0]; // 获取 Basic 页数据 const linkBasic = muiStack.children[0]; const basicData = getData(linkBasic); // 获取 Riichi 页数据 const linkRiichi = muiStack.children[1]; const riichiData = getData(linkRiichi); // 填入数据 const result = {}; const lang = document.documentElement.lang; if (lang === 'zh-hans') { result["horyuRate"] = basicData["和牌率"]; // 和率 result["houjuRate"] = basicData["放铳率"]; // 铳率 result["furoRate"] = basicData["副露率"]; // 副露率 result["riichiRate"] = basicData["立直率"]; // 立直率 result["damaRate"] = basicData["默胡率"]; // 默听率 result["averageScore"] = basicData["平均打点"]; // 平均打点 result["avgHoryuTurn"] = basicData["和了巡数"]; // 平均和了巡数 result["avgHoujuScore"] = basicData["平均铳点"]; // 平均铳点 result["ryukyokuRate"] = basicData["流听率"]; // 流听率 result["riichiTurn"] = riichiData["立直巡目"]; // 立直巡目 result["riichiFirstRate"] = riichiData["先制率"]; // 先制立直率 result["riichiChaseRate"] = riichiData["追立率"]; // 追立率 } else if (lang === 'en') { result["horyuRate"] = basicData["Win rate"]; // 和率 result["houjuRate"] = basicData["Deal-in rate"]; // 铳率 result["furoRate"] = basicData["Call rate"]; // 副露率 result["riichiRate"] = basicData["Riichi rate"]; // 立直率 result["damaRate"] = basicData["Dama rate"]; // 默听率 result["averageScore"] = basicData["Average win score"]; // 平均打点 result["avgHoryuTurn"] = basicData["Avg turns to win"]; // 平均和了巡数 result["avgHoujuScore"] = basicData["Average deal-in score"]; // 平均铳点 result["ryukyokuRate"] = basicData["Draw tenpai rate"]; // 流听率 result["riichiTurn"] = riichiData["Avg riichi turns"]; // 立直巡目 result["riichiFirstRate"] = riichiData["First riichi"]; // 先制立直率 result["riichiChaseRate"] = riichiData["Chased rate"]; // 追立率 } // 去掉末尾百分号 Object.entries(result).forEach(([key, value]) => { result[key] = value = value.endsWith('%') ? value.slice(0, -1) : value; }); return result; } function getData(link) { // 切换数据页 link.click(); // 获取数据标题元素 const dataTitleElements = document.querySelectorAll('h6'); const dataTitles = Array.from(dataTitleElements).map(element => element.textContent); // 获取数据元素,即数据标题元素的下一个元素 const dataValues = Array.from(dataTitleElements).map(element => { const next = element.nextElementSibling; return next ? next.textContent : null; }); const result = {}; dataTitles.forEach((title, i) => { result[title] = dataValues[i]; }); return result; } // 等待页面加载完成后插入按钮 window.addEventListener('load', insertButton); } if (currentURL.includes('yurakuurame.github.io')) { // 填入数据 function inputData() { const data = GM_getValue('dataForMajangType', null); console.log(data); if (data) { Object.entries(data).forEach(([key, value]) => { const inputLabel = document.getElementById(key); inputLabel.value = value; }); // 按下按钮 const analyseButton = document.querySelector('button'); analyseButton.click(); } else { console.log("No Data"); } } window.addEventListener('load', inputData); } })();