您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Simple stats comparison
// ==UserScript== // @name DuelHelper by szymy // @namespace skijumpmania.duelhelper // @version 0.2 // @description Simple stats comparison // @author szymy // @match *://*.skijumpmania.com/report* // @grant none // ==/UserScript== (function(w, jQ) { var refs = { nameClass : "match_report_name", expClass : "match_report_exp", contentTableClass : "content_table", sumTableClass : "sum_points", sumImgClass : "sum_points_element_img", sumSpanClass : "sum_points_element_span", leftColClass : "two_col_left", rightColClass : "two_col_right", elementsTableClass : "table_small_content", equipmentId : "element4", skillsId : "element3", facilitiesId : "element2", hillClass : "hill_report_div" }; var jumpers = []; function Jumper(nameRef, lvlRef, takeOffRef, flightRef, landingRef, colClass) { this.name = null; this.lvl = 0; this.takeOff = 0; this.flight = 0; this.landing = 0; this.nameRef = nameRef; this.lvlRef = lvlRef; this.takeOffRef = takeOffRef; this.flightRef = flightRef; this.landingRef = landingRef; this.sumTakeOff = 0; this.sumFlight = 0; this.sumLanding = 0; this.sumTakeOffRef = null; this.sumFlightRef = null; this.sumLandingRef = null; this.colClass = colClass; this.hasEquipment = false; this.hasSkills = false; this.hasFacilities = false; this.hasHill = false; this.equipment = { takeOff : 0, flight : 0, landing : 0, takeOffRef : null, flightRef : null, landingRef : null }; this.skills = { takeOff : 0, flight : 0, landing : 0, takeOffRef : null, flightRef : null, landingRef : null }; this.facilities = { takeOff : 0, flight : 0, landing : 0, takeOffRef : null, flightRef : null, landingRef : null }; this.hill = { takeOff : 0, flight : 0, landing : 0, takeOffRef : null, flightRef : null, landingRef : null }; this.setProperties = function() { if (this.nameRef) { this.name = this.nameRef.innerText.trim(); } this.lvl = this.getPoints(this.lvlRef); this.takeOff = this.getPoints(this.takeOffRef); this.flight = this.getPoints(this.flightRef); this.landing = this.getPoints(this.landingRef); }; this.setElementsProperties = function(hasElements, elementsGroup, elementsId) { if (!this[hasElements]) { return; } var sumTable = jQ("." + this.colClass + " div[id*='" + elementsId + "']").parents("." + refs.elementsTableClass).find("." + refs.sumTableClass); if (!sumTable.length) { return; } var sumPoints = sumTable.find("." + refs.sumSpanClass); if (sumPoints.length == 3) { this.setElementsGroup(elementsGroup, sumPoints[0], sumPoints[1], sumPoints[2]); } }; this.setElementsGroup = function(elementsGroup, takeOffRef, flightRef, landingRef) { this[elementsGroup].takeOffRef = takeOffRef; this[elementsGroup].flightRef = flightRef; this[elementsGroup].landingRef = landingRef; this[elementsGroup].takeOff = this.getPoints(this[elementsGroup].takeOffRef); this[elementsGroup].flight = this.getPoints(this[elementsGroup].flightRef); this[elementsGroup].landing = this.getPoints(this[elementsGroup].landingRef); }; this.setHillProperties = function() { if (!this.hasHill) { return; } var table = 0; if (this.colClass === refs.rightColClass) { table = 1; } var hillPoints = jQ("." + refs.hillClass + " table").eq(table).find("td"); if (hillPoints.length >= 6) { this.setElementsGroup("hill", hillPoints[1 - table], hillPoints[3 - table], hillPoints[5 - table]); } }; this.setSumPointsRef = function(takeOffRef, flightRef, landingRef) { this.sumTakeOffRef = takeOffRef; this.sumFlightRef = flightRef; this.sumLandingRef = landingRef; this.setPoints(this.sumTakeOff, this.sumTakeOffRef); this.setPoints(this.sumFlight, this.sumFlightRef); this.setPoints(this.sumLanding, this.sumLandingRef); }; this.setPoints = function(points, pointsRef) { if (!pointsRef) { return; } pointsRef.innerText = points; }; this.getPoints = function(pointsRef) { if (!pointsRef) { return 0; } var txt = pointsRef.innerText; var bonusPoints = 0; var matchBonusPoints = txt.match(/\(\+\s*\d+\)/); if (matchBonusPoints) { bonusPoints = parseInt(matchBonusPoints[0].replace(/\D+/g, "")); txt = txt.replace(matchBonusPoints[0], ""); } return parseInt(txt.replace(/\D+/g, "")) + bonusPoints; }; this.formatPoints = function(points) { if (points > 0) { return "+" + points; } return points; }; this.sumPoints = function() { this.sumTakeOff = this.takeOff + this.equipment.takeOff + this.skills.takeOff + this.facilities.takeOff + this.hill.takeOff; this.sumFlight = this.flight + this.equipment.flight + this.skills.flight + this.facilities.flight + this.hill.flight; this.sumLanding = this.landing + this.equipment.landing + this.skills.landing + this.facilities.landing + this.hill.landing; }; this.updateSumPoints = function(takeOff, flight, landing) { this.sumTakeOffRef.innerText += " (" + this.formatPoints(this.sumTakeOff - takeOff) + ")"; this.sumFlightRef.innerText += " (" + this.formatPoints(this.sumFlight - flight) + ")"; this.sumLandingRef.innerText += " (" + this.formatPoints(this.sumLanding - landing) + ")"; }; this.checkElements = function() { this.hasEquipment = jQ("." + this.colClass + " div[id*='" + refs.equipmentId + "']").length > 0; this.hasSkills = jQ("." + this.colClass + " div[id*='" + refs.skillsId + "']").length > 0; this.hasFacilities = jQ("." + this.colClass + " div[id*='" + refs.facilitiesId + "']").length > 0; this.hasHill = jQ("." + refs.hillClass + " table").length > 0; }; this.init = function() { this.setProperties(); this.checkElements(); this.setElementsProperties("hasEquipment", "equipment", refs.equipmentId); this.setElementsProperties("hasSkills", "skills", refs.skillsId); this.setElementsProperties("hasFacilities", "facilities", refs.facilitiesId); this.setHillProperties(); this.sumPoints(); } }; function createJumpers() { var name = jQ("div[class*='" + refs.nameClass + "']"); var exp = jQ("." + refs.expClass + " span"); var stats = jQ("." + refs.contentTableClass + ":first td"); if (stats.length >= 12 && stats.length <= 20) { jumpers[0] = new Jumper(name[0], exp[0], stats[1], stats[5], stats[9], refs.leftColClass); jumpers[1] = new Jumper(name[1], exp[1], stats[2], stats[6], stats[10], refs.rightColClass); } else if (stats.length == 36) { jumpers[0] = new Jumper(name[0], exp[0], stats[17], stats[21], stats[25], refs.leftColClass); jumpers[1] = new Jumper(name[1], exp[1], stats[18], stats[22], stats[26], refs.rightColClass); } if (jumpers.length == 2) { jumpers[0].init(); jumpers[1].init(); } } function compareJumpers() { if (jumpers.length != 2) { return; } var jumper1 = jumpers[0]; var jumper2 = jumpers[1]; compareProperties(jumper1, jumper2); compareProperties(jumper1.equipment, jumper2.equipment); compareProperties(jumper1.skills, jumper2.skills); compareProperties(jumper1.facilities, jumper2.facilities); compareProperties(jumper1.hill, jumper2.hill); comparePoints(jumper1.lvl, jumper1.lvlRef, jumper2.lvl, jumper2.lvlRef); comparePoints(jumper1.sumTakeOff, jumper1.sumTakeOffRef, jumper2.sumTakeOff, jumper2.sumTakeOffRef); comparePoints(jumper1.sumFlight, jumper1.sumFlightRef, jumper2.sumFlight, jumper2.sumFlightRef); comparePoints(jumper1.sumLanding, jumper1.sumLandingRef, jumper2.sumLanding, jumper2.sumLandingRef); jumper2.updateSumPoints(jumper1.sumTakeOff, jumper1.sumFlight, jumper1.sumLanding); } function compareProperties(obj1, obj2) { comparePoints(obj1.takeOff, obj1.takeOffRef, obj2.takeOff, obj2.takeOffRef); comparePoints(obj1.flight, obj1.flightRef, obj2.flight, obj2.flightRef); comparePoints(obj1.landing, obj1.landingRef, obj2.landing, obj2.landingRef); } function comparePoints(points1, pointsRef1, points2, pointsRef2) { if (points1 == points2) { highlightPoints(pointsRef1, "#FFFFFF"); highlightPoints(pointsRef2, "#FFFFFF"); return; } if (points1 < points2) { highlightPoints(pointsRef1, "#FF0000", "#FFFFFF"); highlightPoints(pointsRef2, "#00FF00"); return; } highlightPoints(pointsRef1, "#00FF00"); highlightPoints(pointsRef2, "#FF0000", "#FFFFFF"); } function highlightPoints(pointsRef, bgColor, color) { if (!pointsRef) { return; } pointsRef.style.backgroundColor = bgColor; if (color) { pointsRef.style.color = color; } } function addSummary() { if (jumpers.length != 2) { return; } jQ("." + refs.contentTableClass + ":first table tbody").prepend('<tr><td class="default_td_border jumper1" colspan="2"></td><td class="default_td_border jumper2" colspan="2"></td></tr>'); jQ("." + refs.leftColClass + " ." + refs.sumTableClass).first().clone().addClass("sum_total_points").appendTo(".jumper1"); jQ("." + refs.rightColClass + " ." + refs.sumTableClass).first().clone().addClass("sum_total_points").appendTo(".jumper2"); var jumper1 = jQ(".jumper1 ." + refs.sumSpanClass); var jumper2 = jQ(".jumper2 ." + refs.sumSpanClass); jumpers[0].setSumPointsRef(jumper1[0], jumper1[1], jumper1[2]); jumpers[1].setSumPointsRef(jumper2[0], jumper2[1], jumper2[2]); var style = { "width" : "80px", "margin-right" : "0px", "margin-bottom" : "10px" }; jumper1.css(style); jumper2.css(style); } (function() { createJumpers(); addSummary(); compareJumpers(); })(); })(window, window.jQuery);