- // ==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());
- });
- })();