您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Trophymanager: calculate ALI (Average League Indicator) and the number of championships by teams. ALI show the average rank/division of the team. The smaller the ALI, the better the team's league record.
// ==UserScript== // @name TMVN League ALI // @namespace https://trophymanager.com // @version 4 // @description Trophymanager: calculate ALI (Average League Indicator) and the number of championships by teams. ALI show the average rank/division of the team. The smaller the ALI, the better the team's league record. // @match https://trophymanager.com/league/* // @grant none // ==/UserScript== (function () { 'use strict'; const APP_COLOR = { LEVEL_1: "Darkred", LEVEL_2: "Black", LEVEL_3: "Yellow", LEVEL_4: "Blue", LEVEL_5: "Aqua", LEVEL_6: "White" }; const CONTROL_ID = { INPUT_SEASON_COUNT: 'tmvn_league_ali_input_season_count', BUTTON_SEASON_COUNT: 'tmvn_league_ali_button_season_count_set', } const APPLICATION_PARAM = { DEFAULT_SEASON_COUNT: 0, SEASON_COUNT_LOCAL_STORAGE_KEY: "TMVN_LEAGUE_ALI_SEASON_COUNT" } var seasonCount = localStorage.getItem(APPLICATION_PARAM.SEASON_COUNT_LOCAL_STORAGE_KEY); if (seasonCount == null || seasonCount == "") { seasonCount = APPLICATION_PARAM.DEFAULT_SEASON_COUNT; } try { $('.banner_placeholder.rectangle')[0].parentNode.removeChild($('.banner_placeholder.rectangle')[0]); } catch (err) {} var clubLeagueMap = new Map(); var clubMap = new Map(); $('#overall_table td').each(function () { let clubId = $(this).children('a').attr('club_link'); if (clubId) { let clubName = $(this).children('a')[0].innerHTML; clubMap.set(clubId, clubName); } }); clubMap.forEach((value, key) => { $.ajax('https://trophymanager.com/history/club/league/' + key, { type: "GET", dataType: 'html', crossDomain: true, success: function (response) { var trArr = $('.zebra.hover.sortable tr', response); var totalAli = 0; var count = 0; var championMap = new Map(); for (var i = 1; i < trArr.length; i++) { var rank = trArr[i].lastElementChild.innerText; if (rank !== "") { count++; var division = trArr[i].children[1].innerText.substring(0, 1); if (rank == 1) { if (championMap.has(division)) { var championCount = championMap.get(division); championCount++; championMap.set(division, championCount); } else { championMap.set(division, 1); } } totalAli = totalAli + 18 * (parseInt(division) - 1) + parseInt(rank); if (seasonCount > 0 && seasonCount == count) { break; } } } var champion = ""; if (championMap.size > 0) { var championDivision = [...championMap.keys()].sort(); championDivision.forEach((div) => { if (div == 1) { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_1 + ";'>" + div + "." + championMap.get(div) + " </span>"); } else if (div == 2) { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_2 + ";'>" + div + "." + championMap.get(div) + " </span>"); } else if (div == 3) { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_3 + ";'>" + div + "." + championMap.get(div) + " </span>"); } else if (div == 4) { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_4 + ";'>" + div + "." + championMap.get(div) + " </span>"); } else if (div == 5) { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_5 + ";'>" + div + "." + championMap.get(div) + " </span>"); } else { champion += ("<span style = 'color: " + APP_COLOR.LEVEL_6 + ";'>" + div + "." + championMap.get(div) + " </span>"); } }); } var ali = ""; if (count > 0) { var aliAverage = Math.round(totalAli / count); var divisionAverage = Math.ceil(aliAverage / 18); var rankAverage = aliAverage - (18 * (divisionAverage - 1)); if (divisionAverage == 1) { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_1 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } else if (divisionAverage == 2) { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_2 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } else if (divisionAverage == 3) { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_3 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } else if (divisionAverage == 4) { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_4 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } else if (divisionAverage == 5) { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_5 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } else { ali = ("<span style = 'color: " + APP_COLOR.LEVEL_6 + ";'>" + aliAverage + " (" + divisionAverage + "." + rankAverage + ") </span>"); } } clubLeagueMap.set(key, { "ALI": ali, "Champion": champion, "SeasonCount": count }); }, error: function (e) {} }); }); var myInterval = setInterval(append, 1000); function append() { if (clubLeagueMap.size < 18) { return; } clearInterval(myInterval); /*APPEND ALI TABLE*/ let ali = "<div class=\"box\">" + "<div class=\"box_head\">" + "<h2 class=\"std\">Average League Indicator</h2>" + "</div>" + "<div class=\"box_body\">" + "<div class=\"box_shadow\"></div>" + "<span style='display: inline-block;'><input id='" + CONTROL_ID.INPUT_SEASON_COUNT + "' type='text' class='embossed' style='min-width: 100px; line-height: 100%; padding: 3px 3px 4px 3px;' placeholder='Season Count'></span>" + "<span id='" + CONTROL_ID.BUTTON_SEASON_COUNT + "' class='button' style='margin-left: 3px;'><span class='button_border'>Season Count</span></span>" + "<div id=\"ali_content\" class=\"content_menu\"></div>" + "</div>" + "<div class=\"box_footer\">" + "<div></div>" + "</div>" + "</div>"; $(".column3_a").append(ali); document.getElementById(CONTROL_ID.BUTTON_SEASON_COUNT).addEventListener('click', (e) => { setSeasonCount(); }); $('#' + CONTROL_ID.INPUT_SEASON_COUNT).val(seasonCount); let ali_content = "<table>" + "<tr><th>Club</th><th align='right'>ALI</th><th align='right'>#1</th></tr>"; let rowCount = 0; clubMap.forEach((value, key) => { rowCount++; let classOdd = ""; if ((rowCount % 2) == 1) { classOdd = "class='odd'"; } if (clubLeagueMap.has(key)) { let clubLeague = clubLeagueMap.get(key); value = '<span style="color:Orange;">' + clubLeague.SeasonCount + '.</span>' + value; ali_content += "<tr " + classOdd + "><td><span onclick = \"window.open(\'https:\/\/trophymanager.com\/history\/club\/league\/" + key + "\')\">" + value + "</span></td><td align='right'>" + clubLeague.ALI + "</td><td align='right'><span style='color:Orange;'>" + clubLeague.Champion + "</span></td></tr>"; } else { ali_content += "<tr " + classOdd + "><td><span onclick = \"window.open(\'https:\/\/trophymanager.com\/history\/club\/league\/" + key + "\')\">" + value + "</span></td><td></td><td></td><td></td></tr>"; } }); ali_content += "</table>"; $("#ali_content").append(ali_content); } function setSeasonCount() { let seasonCount = $('#' + CONTROL_ID.INPUT_SEASON_COUNT)[0].value; let valid = true; if (seasonCount == '') { localStorage.removeItem(APPLICATION_PARAM.SEASON_COUNT_LOCAL_STORAGE_KEY); } else if (isNaN(seasonCount) || seasonCount < 0) { alert('Season count must be positive integer. Season count = 0 means all seasons.'); valid = false; } else { localStorage.setItem(APPLICATION_PARAM.SEASON_COUNT_LOCAL_STORAGE_KEY, seasonCount); } if (valid) { alert('Set successful, please refresh'); } } })();