// ==UserScript==
// @name Tank-Randomizer
// @author kamarov
// @description Bring an element of surprise to your tank customization experience with the Tank Randomizer,
// @version 4.0.0
// @namespace https://github.com/kamarov-therussiantank
// @license GPL-3.0
// @match https://*.tanktrouble.com/*
// @run-at document-end
// @grant GM_addStyle
// @require https://update.greasyfork.org/scripts/482092/1297984/TankTrouble%20Development%20Library.js
// @noframes
// ==/UserScript==
GM_addStyle(`
.randomize-button {
margin-bottom: 10px;
height: 20px;
width: 100px;
}
.partSelectAccessory, .partSelectPaint {
cursor: pointer;
outline: none;
width: 78%;
border: 1px solid var(--jq-borderColorDefault);
border-radius: 5px;
background: var(--jq-bgColorDefault) var(--jq-widget-button-disabled-hovered-or-active-bg) 50% 50% repeat-x;
font-weight: 600;
font-size: 11px;
color: #555;
margin-bottom: 5px;
padding: 3px;
}
.partSelectAccessory:hover {
color: #1a1a1a;
}
.partSelectPaint:hover {
color: #1a1a1a;
}
:root.dark .partSelectAccessory:hover {
color: #fff;
}
:root.dark .partSelectPaint:hover {
color: #fff;
}
:root.dark .partSelectAccessory {
color: #e7e7e7;
}
:root.dark .partSelectPaint {
color: #e7e7e7;
}
.partSelectSection {
font-size: 12px;
}
.partTexts {
font-family: TankTrouble;
font-size: 12px;
color: #e7c811;
text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
margin-bottom: 5px;
margin-top: 3px;
}
`);
whenContentInitialized().then(() => {
var id = Users.getAllPlayerIds()[0];
var turret = [];
var back = [];
var barrel = [];
var front = [];
var treads = [];
var colours = [];
var baseColor = '';
function randomizeTurretPaint() {
randomizeTurretColor();
}
function randomizeTurretColor() {
Backend.getInstance().setColour(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'turret',
colours[Math.floor(Math.random() * colours.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeBasePaint() {
randomizeBaseColor();
}
function randomizeBaseColor() {
Backend.getInstance().setColour(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'base',
colours[Math.floor(Math.random() * colours.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeTreadsPaint() {
randomizeTreadsColor();
}
function randomizeTreadsColor() {
Backend.getInstance().setColour(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'tread',
colours[Math.floor(Math.random() * colours.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeTurretAccessory() {
randomizeTurretA();
}
function randomizeTurretA() {
Backend.getInstance().setAccessory(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'turret',
turret[Math.floor(Math.random() * turret.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeBarrelAccessory() {
randomizeBarrelA();
}
function randomizeBarrelA() {
Backend.getInstance().setAccessory(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'barrel',
barrel[Math.floor(Math.random() * barrel.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeBackAccessory() {
randomizeBackA();
}
function randomizeBackA() {
Backend.getInstance().setAccessory(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'back',
back[Math.floor(Math.random() * back.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeFrontAccessory() {
randomizeFrontA();
}
function randomizeFrontA() {
Backend.getInstance().setAccessory(
function(result) {
Users.updateUser(id, true, false);
},
null,
null,
id,
'front',
front[Math.floor(Math.random() * front.length)],
Caches.getPlayerDetailsCache()
);
}
function randomizeAllPartsAccessories() {
randomizeFrontAccessory();
randomizeBackAccessory();
randomizeTurretAccessory();
randomizeBarrelAccessory();
}
function randomizeAllPartsPaints() {
randomizeTurretPaint();
randomizeBasePaint();
randomizeTreadsPaint();
}
Backend.getInstance().getGarageContent(
function(result) {
var boxes = result['boxes'];
for (var box in boxes) {
var accessories = boxes[box]['accessories'];
var sprays = boxes[box]['sprayCans'];
for (var accessory in accessories) {
var thing = accessories[accessory];
if (thing['type'] == 'front') {
front.push(thing['value']);
}
if (thing['type'] == 'back') {
back.push(thing['value']);
}
if (thing['type'] == 'tread') {
treads.push(thing['value']);
}
if (thing['type'] == 'barrel') {
barrel.push(thing['value']);
}
if (thing['type'] == 'turret') {
turret.push(thing['value']);
}
}
for (var spray in sprays) {
var thing = sprays[spray]['colour'];
if (thing['type']) {
colours.push(thing['rawValue']);
}
}
}
baseColor = colours[Math.floor(Math.random() * colours.length)];
},
function(res) {},
function(res) {},
id,
Caches.getGarageContentCache()
);
var snippet = $(`
<div id="randomizerSnippet" class="snippet">
<div class="header">Tank Randomizer</div>
<hr>
</div>
`);
var content = $('<div></div>');
var accessoriesButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var barrelAccessoryButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var turretAccessoryButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var frontAccessoryButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var backAccessoryButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var paintButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var turretPaintButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var basePaintButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var treadsPaintButton = $('<button class="randomize-button button" type="button" tabindex="-1">Randomize</button>');
var accessoryText = $('<div class="partTexts">Accessories</div>');
var paintText = $('<div class="partTexts">Paints</div>');
const createNewWrapper = $('<div class="createNewWrapper"></div>');
const accessoryPartSelect = $("<select class='partSelectAccessory'></select>");
const paintPartSelect = $("<select class='partSelectPaint'></select>");
const allAccessoriesOption = $('<option value="allAccessory">All</option>');
accessoryPartSelect.append(allAccessoriesOption);
const barrelAccessoriesOption = $('<option value="barrelAccessory">Barrel</option>');
accessoryPartSelect.append(barrelAccessoriesOption);
const turretAccessoriesOption = $('<option value="turretAccessory">Turret</option>');
accessoryPartSelect.append(turretAccessoriesOption);
const frontAccessoriesOption = $('<option value="frontAccessory">Front</option>');
accessoryPartSelect.append(frontAccessoriesOption);
const backAccessoriesOption = $('<option value="backAccessory">Back</option>');
accessoryPartSelect.append(backAccessoriesOption);
const allPaintsOption = $('<option value="allPaints">All</option>');
paintPartSelect.append(allPaintsOption);
const turretPaintsOption = $('<option value="turretPaints">Turret</option>');
paintPartSelect.append(turretPaintsOption);
const basePaintsOption = $('<option value="basePaints">Base</option>');
paintPartSelect.append(basePaintsOption);
const treadsPaintsOption = $('<option value="treadsPaints">Treads</option>');
paintPartSelect.append(treadsPaintsOption);
accessoriesButton.on('mouseup', () => randomizeAllPartsAccessories());
barrelAccessoryButton.on('mouseup', () => randomizeBarrelAccessory());
turretAccessoryButton.on('mouseup', () => randomizeTurretAccessory());
frontAccessoryButton.on('mouseup', () => randomizeFrontAccessory());
backAccessoryButton.on('mouseup', () => randomizeBackAccessory());
paintButton.on('mouseup', () => randomizeAllPartsPaints());
turretPaintButton.on('mouseup', () => randomizeTurretPaint());
basePaintButton.on('mouseup', () => randomizeBasePaint());
treadsPaintButton.on('mouseup', () => randomizeTreadsPaint());
// Function to toggle buttons based on selection
function toggleButtonsBasedOnSelection() {
const selectedAccessoryValue = accessoryPartSelect.val();
const selectedPaintValue = paintPartSelect.val();
// Hide all buttons
accessoriesButton.show();
barrelAccessoryButton.hide();
turretAccessoryButton.hide();
frontAccessoryButton.hide();
backAccessoryButton.hide();
paintButton.show();
turretPaintButton.hide();
basePaintButton.hide();
treadsPaintButton.hide();
// Show accessory buttons based on selection
if (selectedAccessoryValue === "allAccessories") {
accessoriesButton.show();
} else if (selectedAccessoryValue === "barrelAccessory") {
barrelAccessoryButton.show();
accessoriesButton.hide();
} else if (selectedAccessoryValue === "turretAccessory") {
turretAccessoryButton.show();
accessoriesButton.hide();
} else if (selectedAccessoryValue === "frontAccessory") {
frontAccessoryButton.show();
accessoriesButton.hide();
} else if (selectedAccessoryValue === "backAccessory") {
backAccessoryButton.show();
accessoriesButton.hide();
}
// Show paint buttons based on selection
if (selectedPaintValue === "allPaints") {
paintButton.show();
} else if (selectedPaintValue === "turretPaints") {
turretPaintButton.show();
paintButton.hide();
} else if (selectedPaintValue === "basePaints") {
basePaintButton.show();
paintButton.hide();
} else if (selectedPaintValue === "treadsPaints") {
treadsPaintButton.show();
paintButton.hide();
}
}
// Event listeners for selection changes
accessoryPartSelect.on('change', toggleButtonsBasedOnSelection);
paintPartSelect.on('change', toggleButtonsBasedOnSelection);
// Append elements to the DOM
createNewWrapper.append(accessoryText);
createNewWrapper.append(accessoryPartSelect);
createNewWrapper.append(accessoriesButton);
createNewWrapper.append(barrelAccessoryButton);
createNewWrapper.append(turretAccessoryButton);
createNewWrapper.append(frontAccessoryButton);
createNewWrapper.append(backAccessoryButton);
createNewWrapper.append(paintText);
createNewWrapper.append(paintPartSelect);
createNewWrapper.append(paintButton);
createNewWrapper.append(turretPaintButton);
createNewWrapper.append(basePaintButton);
createNewWrapper.append(treadsPaintButton);
content.append(createNewWrapper);
snippet.append(content);
$('#secondaryContent').append(snippet);
// Initial toggle based on current selection values
$(document).ready(function() {
toggleButtonsBasedOnSelection();
});
function getRandomColorFromGarage() {
return colours[Math.floor(Math.random() * colours.length)];
}
});