您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Designed to provide extra information about players
// ==UserScript== // @name Extra Player Details // @namespace https://github.com/kamarov-therussiantank // @author kamarov // @description Designed to provide extra information about players // @version 1.0.4 // @license GPL-3.0 // @match https://tanktrouble.com/* // @run-at document-end // @grant GM_addStyle // @require https://update.greasyfork.org/scripts/482092/1309109/TankTrouble%20Development%20Library.js // @noframes // ==/UserScript== GM_addStyle(` .exp.tooltipstered { position: relative; height: 30px; } #tankinfo .rank, #tankinfo .xp { position: relative; height: 30px; } .exp-bar { background-image: image-set(url(https://i.imgur.com/R2CiGV4.png) 1x, url(https://i.imgur.com/6BC4tAu.png) 2x); background-size: 10px 22px; height: 100%; } .about-container { position: relative; z-index: 2; font-size: 12px; } .bannedText-container { position: relative; z-index: 2; font-size: 12px; margin: 20px 0 20px 0; } span.exp-text { position: absolute; top: 3px; left: 32%; font-family: 'Arial'; font-size: 14px; font-weight: bold; color: #fff; text-shadow: -1.4px -1.4px 0 black, 1.4px -1.4px 0 black, -1.4px 1.4px 0 black, 1.4px 1.4px 0 black; } #tankinfo .username { z-index: 2; } .adminBadge { z-index: 1; position: absolute; top: -75px; right: -22px; } .banned-Icon { z-index: 1; position: absolute; top: -140px; left: 10px; } tr.tooltipstered { display: none !important; } .statsContainer img.statsIcon { position: absolute; } .statsContainer svg { left: 45px; } .deaths.tooltipstered { left: 55px; } #tankinfo table td:first-child .statsIcon { left: 3px; } #tankinfo table td:first-child svg { left: 44px; } #tankinfo table td:last-child .statsIcon { right: 5px; } #tankinfo table td:last-child svg { left: 5px; } `); (() => { Loader.interceptFunction(TankTrouble.TankInfoBox, '_initialize', (original, ...args) => { original(...args); // Initialize badges Div TankTrouble.TankInfoBox.infoBadgesDiv = $('<div class="badge-container"/>'); // Define icons for badges TankTrouble.TankInfoBox.infoBadgesIcon1 = $('<img class="badgeIcon" src="https://i.imgur.com/EM9M66p.png"/>'); // Premium TankTrouble.TankInfoBox.infoBadgesIcon2 = $('<img class="badgeIcon" src="https://i.imgur.com/FTvsqiv.png"/>'); // Kickstarter TankTrouble.TankInfoBox.infoBadgesIcon3 = $('<img class="badgeIcon" src="https://i.imgur.com/PfnLu7l.png"/>'); // Admin TankTrouble.TankInfoBox.infoBadgesIcon4 = $('<img class="badgeIcon" src="https://i.imgur.com/1UQeWVB.png"/>'); // Beta Tester TankTrouble.TankInfoBox.infoBadgesIcon5 = $('<img class="badgeIcon" src="https://i.imgur.com/9WCCK6U.png"/>'); // Classic Player TankTrouble.TankInfoBox.infoBannedIcon = $('<img class="banned-Icon" src="https://i.imgur.com/AlA3MSg.png"/>'); // Banned Player // Create badges TankTrouble.TankInfoBox.classicPlayerBadge = $('<div class="classicBadge"/>'); TankTrouble.TankInfoBox.classicPlayerBadge.append(TankTrouble.TankInfoBox.infoBadgesIcon5); TankTrouble.TankInfoBox.classicPlayerBadge.append(TankTrouble.TankInfoBox.classicPlayerText); TankTrouble.TankInfoBox.betaTesterBadge = $('<div class="betaTesterBadge"/>'); TankTrouble.TankInfoBox.betaTesterBadge.append(TankTrouble.TankInfoBox.infoBadgesIcon4); TankTrouble.TankInfoBox.premiumBadge = $('<div class="premiumMemberBadge"/>'); TankTrouble.TankInfoBox.premiumBadge.append(TankTrouble.TankInfoBox.infoBadgesIcon1); TankTrouble.TankInfoBox.kickstarterBadge = $('<div class="kickstarterBadge"/>'); TankTrouble.TankInfoBox.kickstarterBadge.append(TankTrouble.TankInfoBox.infoBadgesIcon2); TankTrouble.TankInfoBox.adminBadge = $('<div class="adminBadge"/>'); TankTrouble.TankInfoBox.adminBadge.append(TankTrouble.TankInfoBox.infoBadgesIcon3); TankTrouble.TankInfoBox.bannedIcon = $('<div class="bannedIcon"/>'); TankTrouble.TankInfoBox.bannedIcon.append(TankTrouble.TankInfoBox.infoBannedIcon); // Experience progress bar TankTrouble.TankInfoBox.infoExpDiv = $('<div class="exp tooltipstered"/>'); TankTrouble.TankInfoBox.infoExpTextDiv = $('<div class="progress"/>'); TankTrouble.TankInfoBox.infoExpBorder = $('<div class="border"/>'); TankTrouble.TankInfoBox.infoExpBar = $('<div class="exp-bar"/>'); TankTrouble.TankInfoBox.infoExpText = $('<span class="exp-text"/>'); TankTrouble.TankInfoBox.infoExpTextDiv.append(TankTrouble.TankInfoBox.infoExpBorder); TankTrouble.TankInfoBox.infoExpTextDiv.append(TankTrouble.TankInfoBox.infoExpBar); TankTrouble.TankInfoBox.infoExpTextDiv.append(TankTrouble.TankInfoBox.infoExpText); TankTrouble.TankInfoBox.infoExpDiv.append(TankTrouble.TankInfoBox.infoExpTextDiv); TankTrouble.TankInfoBox.infoExpDiv.insertAfter(TankTrouble.TankInfoBox.infoRank); // Player additional information element TankTrouble.TankInfoBox.infoAboutDiv = $('<div class="tooltipstered"/>'); TankTrouble.TankInfoBox.infoAboutTextDiv = $('<div class="about-container"/>'); TankTrouble.TankInfoBox.infoAboutText = $('<span class="about-text"/>'); TankTrouble.TankInfoBox.infoAboutTextDiv.append(TankTrouble.TankInfoBox.infoAboutText); TankTrouble.TankInfoBox.infoAboutDiv.append(TankTrouble.TankInfoBox.infoAboutTextDiv); TankTrouble.TankInfoBox.infoAboutDiv.insertAfter(TankTrouble.TankInfoBox.infoName); // Banned information element TankTrouble.TankInfoBox.infoBannedPlayerDiv = $('<div class="tooltipstered"/>'); TankTrouble.TankInfoBox.infoBannedPlayerTextDiv = $('<div class="bannedText-container"/>'); TankTrouble.TankInfoBox.infoBannedPlayerText = $('<span class="bannedText-text"/>'); TankTrouble.TankInfoBox.infoBannedPlayerTextDiv.append(TankTrouble.TankInfoBox.infoBannedPlayerText); TankTrouble.TankInfoBox.infoBannedPlayerDiv.append(TankTrouble.TankInfoBox.infoBannedPlayerTextDiv); TankTrouble.TankInfoBox.infoBannedPlayerDiv.insertAfter(TankTrouble.TankInfoBox.infoRank); // Create a container for the icon and text TankTrouble.TankInfoBox.infoDeathsDiv = $('<td class="deaths tooltipstered"/>'); TankTrouble.TankInfoBox.infoDeaths = $(` <div class="statsContainer"> <img class="statsIcon" src="https://i.imgur.com/ze2jYnc.png" srcset="https://i.imgur.com/XIQFQn6.png 2x"/> <div class="hasSVG"> <svg version="1.1" width="58" height="34"> <text id="deathsTextOutline" x="1" y="22" text-anchor="start" font-family="Arial Black" font-size="14" fill="none" stroke="black" stroke-linejoin="round" stroke-width="3" letter-spacing="1">N/A</text> <text id="deathsText" x="1" y="22" text-anchor="start" font-family="Arial Black" font-size="14" fill="white" letter-spacing="1">N/A</text> </svg> </div> </div> `); TankTrouble.TankInfoBox.infoDeathsDiv.append(TankTrouble.TankInfoBox.infoDeaths); TankTrouble.TankInfoBox.infoDeathsDiv.tooltipster({ content: 'Deaths', position: 'left', offsetX: 5 }); TankTrouble.TankInfoBox.infoDeathsDiv.insertAfter(TankTrouble.TankInfoBox.infoKillsAndVictoriesTableRow); // Style badges Div TankTrouble.TankInfoBox.infoBadgesDiv.css({ display: 'flex', 'align-items': 'center', 'justify-content': 'center', 'flex-wrap': 'wrap', margin: '0px auto', width: 'fit-content' }); // Icon Styling // Scale the icons TankTrouble.TankInfoBox.infoBadgesIcon1.css({ width: '38px', margin: '0' }); TankTrouble.TankInfoBox.infoBadgesIcon2.css({ width: '38px', margin: '0' }); TankTrouble.TankInfoBox.infoBadgesIcon3.css({ width: '102px', margin: '0' }); TankTrouble.TankInfoBox.infoBadgesIcon4.css({ width: '38px', margin: '0' }); TankTrouble.TankInfoBox.infoBadgesIcon5.css({ width: '38px', margin: '0' }); TankTrouble.TankInfoBox.infoBannedIcon.css({ width: '200px', margin: '0', }); TankTrouble.TankInfoBox.classicPlayerBadge.tooltipster({ position: 'top', offsetX: 0 }); TankTrouble.TankInfoBox.betaTesterBadge.tooltipster({ position: 'top', offsetX: 0 }); TankTrouble.TankInfoBox.premiumBadge.tooltipster({ position: 'top', offsetX: 0 }); TankTrouble.TankInfoBox.kickstarterBadge.tooltipster({ position: 'top', offsetX: 0 }); TankTrouble.TankInfoBox.infoExpDiv.tooltipster({ position: 'right', offsetX: 5 }); // Append all elements TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.classicPlayerBadge); TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.betaTesterBadge); TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.premiumBadge); TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.kickstarterBadge); TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.adminBadge); TankTrouble.TankInfoBox.infoBadgesDiv.append(TankTrouble.TankInfoBox.bannedIcon); TankTrouble.TankInfoBox.infoBadgesDiv.insertBefore(TankTrouble.TankInfoBox.infoRank); // Hide badges by default TankTrouble.TankInfoBox.infoExpDiv.hide(); TankTrouble.TankInfoBox.infoBadgesDiv.hide(); TankTrouble.TankInfoBox.classicPlayerBadge.hide(); TankTrouble.TankInfoBox.betaTesterBadge.hide(); TankTrouble.TankInfoBox.premiumBadge.hide(); TankTrouble.TankInfoBox.kickstarterBadge.hide(); TankTrouble.TankInfoBox.adminBadge.hide(); }); // Display Loader.interceptFunction(TankTrouble.TankInfoBox, 'show', (original, ...args) => { original(...args); TankTrouble.TankInfoBox.classicPlayerBadge.tooltipster('content', 'Classic Player'); TankTrouble.TankInfoBox.betaTesterBadge.tooltipster('content', 'Beta Tester'); TankTrouble.TankInfoBox.premiumBadge.tooltipster('content', 'Premium Member'); TankTrouble.TankInfoBox.kickstarterBadge.tooltipster('content', 'Kickstarter Backer'); TankTrouble.TankInfoBox.infoExpDiv.tooltipster('content', 'Classic EXP'); const [,, playerId] = args; Backend.getInstance().getPlayerDetails(result => { if (typeof result === 'object') { const playerId = result.getPlayerId(); const username = result.getUsername(); const banned = result.getBanned(); const classicPlayer = result.getExperience(); const premiumMember = result.getPremium(); const betaTester = result.getBeta(); const adminMember = result.getGmLevel(); const deaths = result.getDeaths(); const lastLogin = result.getLastLogin(); $("#deathsTextOutline").text(deaths); $("#deathsText").text(deaths); if (deaths > 100000) { $("#deathsTextOutline").attr("font-size", "12"); // Increase font size $("#deathsText").attr("font-size", "12"); // Increase font size } else { $("#deathsTextOutline").attr("font-size", "14"); // Default size $("#deathsText").attr("font-size", "14"); // Default size } // Always show the badges div TankTrouble.TankInfoBox.infoBadgesDiv.show(); // Kickstarter Badge Backend.getInstance().ajax.getBackers(backerResult => { const backers = backerResult.result.data; if (backers.includes(username)) { TankTrouble.TankInfoBox.kickstarterBadge.show(); } else { TankTrouble.TankInfoBox.kickstarterBadge.hide(); } }); // Classic Player badge & Experience progress bar if (classicPlayer) { TankTrouble.TankInfoBox.infoExpDiv.show(); TankTrouble.TankInfoBox.classicPlayerBadge.show(); TankTrouble.TankInfoBox.infoExpText.text(`EXP: ${classicPlayer}`); // Adjust EXP text position based on value const expTextElement = TankTrouble.TankInfoBox.infoExpText[0]; if (classicPlayer <= 9999999) { expTextElement.style.left = '27%'; } if (classicPlayer <= 999999) { expTextElement.style.left = '29%'; } if (classicPlayer <= 99999) { expTextElement.style.left = '32%'; } if (classicPlayer <= 9999) { expTextElement.style.left = '34%'; } if (classicPlayer <= 999) { expTextElement.style.left = '35%'; } if (classicPlayer <= 99) { expTextElement.style.left = '37%'; } } else { TankTrouble.TankInfoBox.infoExpDiv.hide(); TankTrouble.TankInfoBox.classicPlayerBadge.hide(); } // Display player info or banned message if (banned) { TankTrouble.TankInfoBox.bannedIcon.show(); TankTrouble.TankInfoBox.infoAboutDiv.show(); TankTrouble.TankInfoBox.infoAboutText.text(`#${playerId}`); TankTrouble.TankInfoBox.infoBannedPlayerDiv.show(); TankTrouble.TankInfoBox.infoBannedPlayerText.text(`Player has been permanently banned because of rules violation. Player statistics are counted towards the scrapyard.`); document.querySelector(".about-container").style.color = "#fff"; document.querySelector("#tankinfo .rank").style.display = "none"; document.querySelector("#tankinfo .xp").style.display = "none"; document.querySelector(".exp.tooltipstered").style.display = "none"; document.querySelector("#tankinfo table").style.display = "none"; document.querySelector(".actions.centered").style.display = "none"; } else if (playerId) { TankTrouble.TankInfoBox.bannedIcon.hide(); TankTrouble.TankInfoBox.infoBannedPlayerDiv.hide(); TankTrouble.TankInfoBox.infoAboutDiv.show(); TankTrouble.TankInfoBox.infoAboutText.text(`#${playerId}`); document.querySelector(".about-container").style.color = ""; document.querySelector("#tankinfo .rank").style.display = ""; document.querySelector("#tankinfo .xp").style.display = ""; document.querySelector("#tankinfo table").style.display = ""; document.querySelector(".actions.centered").style.display = ""; } else { TankTrouble.TankInfoBox.infoAboutDiv.hide(); document.querySelector(".exp.tooltipstered").style.display = ""; } // Show or hide other badges premiumMember ? TankTrouble.TankInfoBox.premiumBadge.show() : TankTrouble.TankInfoBox.premiumBadge.hide(); betaTester ? TankTrouble.TankInfoBox.betaTesterBadge.show() : TankTrouble.TankInfoBox.betaTesterBadge.hide(); adminMember ? TankTrouble.TankInfoBox.adminBadge.show() : TankTrouble.TankInfoBox.adminBadge.hide(); } else { TankTrouble.TankInfoBox.infoBadgesDiv.hide(); } }, () => {}, () => {}, playerId, Caches.getPlayerDetailsCache()); }); })();