您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Library that generates the BorisChen player name to tier map
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/431916/968797/BorisChenTiers.js
// ==UserScript== // @name BorisChenTiers // @namespace BorisChenTiers // @version 1 // @author https://github.com/William-Bulovas // @grant GM.xmlHttpRequest // ==/UserScript== const getHttp = (url) => { return new Promise(resolve => { GM.xmlHttpRequest({ method: "GET", url: url, headers: { "Accept": "text/plain" }, onload: resolve }); }); } const scoring = { PPR: "PPR", Standard: "STANDARD", Half: "HALF" } const teamNames = { standard: "standard", yahoo: "yahoo", espn: "espn" } const suffixForScoring = { "PPR": "-PPR", "HALF": "-HALF", "STANDARD": "" } const generateTiers = async (scoring, defParse = teamNames.standard) => { const tierMap = {}; const wrPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_WR" + suffixForScoring[scoring] + ".txt") .then(response => parseTierText(response.responseText)) .then(wrTierMap => Object.assign(tierMap, wrTierMap)); const rbPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_RB" + suffixForScoring[scoring] + ".txt") .then(response => parseTierText(response.responseText)) .then(rbTierMap => Object.assign(tierMap, rbTierMap)); const qbPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_QB.txt") .then(response => parseTierText(response.responseText)) .then(qbTierMap => Object.assign(tierMap, qbTierMap)); const tePromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_TE" + suffixForScoring[scoring] + ".txt") .then(response => parseTierText(response.responseText)) .then(teTierMap => Object.assign(tierMap, teTierMap)); const dstPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_DST.txt") .then(response => { if (defParse === teamNames.yahoo) { return parseTierText(response.responseText, santizeTeamYahooString); } else if (defParse === teamNames.espn) { return parseTierText(response.responseText, santizeTeamEspnString); } return parseTierText(response.responseText) }) .then(dstTierMap => Object.assign(tierMap, dstTierMap)); const kPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_K.txt") .then(response => parseTierText(response.responseText)) .then(kTierMap => Object.assign(tierMap, kTierMap)); await Promise.all([wrPromise, rbPromise, qbPromise, tePromise, dstPromise, kPromise]); return tierMap; } const parseTierText = (rawStr, sanitize = santizeString) => { const tierMap = {}; const tiers = rawStr.split(/\r?\n/); tiers.forEach((tierStr, tier) => { if (tierStr != "") { const playerStr = tierStr.substring(tierStr.indexOf(":") + 2); const players = playerStr.split(', '); players.forEach((player) => { tierMap[sanitize(player)] = tier; }); } }); return tierMap; } const santizeString = (str) => { if (str === "Darrell Henderson") { str = "darrell henderson jr"; } return str.toLowerCase() .replace(/\./g, '') .replace(/'/g, '') .replace(' iii', '') .replace(' ii', ''); }; const santizeTeamYahooString = (str) => { str = str.substring(0, str.lastIndexOf(" ")); if (str === "Washington Football") { str = "Washington"; } return santizeString(str); } const santizeTeamEspnString = (str) => { str = str.substring(str.lastIndexOf(" ") + 1, str.length); if (str === "Team") { str = "Washington"; } return santizeString(str); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址