NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Faction Gym Perks
// @namespace torn.com
// @version 0.1
// @author Ahab [1735214]
// @include */www.torn.com/gym.php
// @updateURL https://openuserjs.org/meta/Ahab/Faction_Gym_Perks.meta.js
// @downloadURL https://openuserjs.org/install/Ahab/Faction_Gym_Perks.user.js
// @license MIT
// ==/UserScript==
if(!localStorage.gymAPI || localStorage.gymAPI === "null"){
localStorage.gymAPI = prompt('Enter API Key')
}
let plusGains = [];
function fetchGymData() {
if(!localStorage.gymAPI || $(window)[0].location.href.includes('recaptcha')) return;
getAction({
type: "GET",
action: `https://api.torn.com/user/?selections=perks&key=${localStorage.gymAPI}`,
}).then(apiData => {
if(apiData.error){
alert(`Error code - ${apiData.error.code} | ${apiData.error.error}`);
setInterval(() => console.log('Key unblocked'), 120000);
}else{
plusGains = apiData.faction_perks.filter(v => v.includes("gym gains")).map(v => [v.split(" ")[2], parseFloat(v.split(" ")[1])]).sort((a, b) => b[1] - a[1]);
applyGymHighlight();
}
});
}
function applyGymHighlight() {
const $descFirst = $("li div[class*='propertyContent'] div[class*='description']").first();
if($descFirst.length === 0) return;
const primaryColor = getComputedStyle($descFirst[0]).getPropertyValue("--gym-description-primary-color").trim().toLowerCase();
const secondaryColor = getComputedStyle($descFirst[0]).getPropertyValue("--gym-description-secondary-color").trim().toLowerCase();
const lightColors = ["#fff", "#ffffff", "#ddd", "#dddddd"];
if (plusGains.length === 0) return;
const values = plusGains.map(x => x[1]);
const maxVal = Math.max(...values);
const minVal = Math.min(...values);
plusGains.forEach(([stat, value]) => {
const $el = $(`li:has(h3.title___rZiDb:contains(${stat.charAt(0).toUpperCase() + stat.slice(1)}))`);
if ($el.length === 0) return;
if(value === maxVal){
$el[0].style.setProperty("background-color", "lightgreen", "important");
}else if(value === minVal){
$el[0].style.setProperty("background-color", "lightcoral", "important");
}else{
$el[0].style.setProperty("background-color", "khaki", "important");
}
if(lightColors.includes(primaryColor) || lightColors.includes(secondaryColor)){
$el.find("div[class*='description'] p").css("color", "black");
}
const $title = $el.find("h3.title___rZiDb");
if($title.length > 0){
$title.attr("title", `Fac perk: ${value}%`);
}
});
}
var gymCheck = setInterval(() => {
if($('div[class*="description"]').length >= 1){
clearInterval(gymCheck);
fetchGymData();
}
}, 100);