{"size": 5875, "ext": "js", "max_stars_repo_path": "Torn City/Tampermonkey/Call Your Hits/CallYourHits.js", "max_stars_repo_name": "DylanBanta/Portfolio", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "Torn City/Tampermonkey/Call Your Hits/CallYourHits.js", "max_issues_repo_name": "DylanBanta/Portfolio", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "Torn City/Tampermonkey/Call Your Hits/CallYourHits.js", "max_forks_repo_name": "DylanBanta/Portfolio", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": null, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 38.3986928105, "max_line_length": 481, "alphanum_fraction": 0.6594042553}
// ==UserScript==
// @name         TORN: Call Your Hits
// @namespace    http://tampermonkey.net/
// @version      1.1.1
// @description  Warns you when you are close to taking a bonus hit during a chain
// @author       Fuzzyketchup [2206068]
// @match        https://www.torn.com/loader.php?sid=attack&user*
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==
 
//debug varibles
var debug = false; //when true enables debugging output to console
var cValue = 9999;
var customValue = false; //when true uses cValue for current chain instead of the value returned from Torn's API
 
//First time setup, check for API key
var key = GM_getValue("tornApiKey");
if(key == null || key == ""){
	var apiPrompt = prompt("Call Your Hits | First Time Setup | Please enter your API Key (located on the preferences page under API Key.)");
	GM_setValue("tornApiKey", apiPrompt); //Saves API Key
}
 
//First time setup, checks for variance (variance is the number of hits that are to be called out by your faction)
var variance = GM_getValue("varianceValue");
if(variance == null || variance == ""){
	GM_setValue("varianceValue", 5); //Saves variance
	variance = 5;
}
 
//Add UI Elements
//Css variables
var variantCss = "#variance{width:30px; margin: 5px; padding: 2px; border: 2px solid #555;}";
var cyhCss = ".cyhCss{-webkit-box-direction: normal; height: 24px; padding: 0 10px; font-size: 14px; font-weight: 700; text-shadow: 0 1px 0 hsla(0,0%,100%,.4); border-radius: 3px; border: none; cursor: pointer; white-space: nowrap; margin: 8px 0; width: 120px; text-transform: uppercase; user-select: none; color: #333; background-image: linear-gradient(#d7d7d7,#767676 78%,#767676 82%,#888); box-shadow: inset 2px 0 3px hsla(0,0%,96.9%,.3),inset -2px 0 3px hsla(0,0%,96.9%,.3);}";
 
//Create callYourHitsDiv div
$('.titleContainer___3FbI9').append('<div id="callYourHitsDiv">');
 
 
//Create CSS Styles
$('#callYourHitsDiv').append('<style>'+variantCss+'</style>'); //apply css for id variance
$('#callYourHitsDiv').append('<style>'+cyhCss+'</style>'); //apply css for class cyhCss
 
//Create chainChecker div
$('.titleContainer___3FbI9').append('<div id="chainChecker">');
 
//Create UI Elements
$('#chainChecker').append('Number of called hits: <input type="number" id="variance" min=0 value='+variance+'>'); //input for number of hits to warn the player about
$('#chainChecker').append('<input type="button" value="Save" class="cyhCss" id="saveBtn"/> '); //Save Settings Button
$('#chainChecker').append('<input type="button" value="Reset API Key" class="cyhCss" id="resetKeyBtn">'); //Reset API Key Button
 
//Close divs
$('.titleContainer___3FbI9').append('</div>'); //close chainChecker div
$('.titleContainer___3FbI9').append('</div>'); //close callYourHitsDiv div
 
 
//Save UI Button
$('#saveBtn').click(function(){
	var vv = $('#variance').val();
	GM_setValue("varianceValue", vv);
	alert("Settings Saved");
	location.reload(); //Reloads the page
});
 
//Reset API Key Button
$('#resetKeyBtn').click(function(){
	GM_setValue("tornApiKey", null);
	alert("API key reset");
	location.reload(); //Reloads the page
});
 
//Checks the current chain count and warns the user if they are going to take a hit they should call
function checkChain(key){
	var bonusHits = [ 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000 ]; //Array of bonus hits
	var bonusHitStrings = [ "10", "25", "50", "100", "250", "500", "1K", "2.5K", "5K", "10K", "25K", "50K", "100K" ]; //Array of bonus hit output strings
	var chainJsonURL = "https://api.torn.com/faction/?selections=chain&key=" + key; //URL for Torn's faction chaining API
 
	//Declare local variables
	var value = 0;
	var arrValue = null;
	var chainBool = true;
	var hitNumber = 0;
 
	//Get json data from Torn API
	$.getJSON(chainJsonURL, function(json){
		try{
			value = json.chain.current; //Current chain count
		} catch (err) {
			alert("Call Your Hits | There has been an error while fetching your chain data. Try resetting your API Key.");
			console.log("err | " + err);
		}
 
		if(debug) {
			if(customValue){ //when true uses cValue for current chain
				value = cValue;
			}
			console.log("Value from json | " + value);
		}
 
		//vv = value + variance
		var vv = value + parseInt(variance);
 
		for(var i = 0; i < bonusHits.length; i++){ //Begin for loop through bonusHits
			if(value < bonusHits[i]){ //filters values that are greater than current chain value
				if(vv >= bonusHits[i]) { //checks that our value and variance on that value is not >= the bonus hit
					chainBool = false; //when false tells script to display warnings
					arrValue = i; //used in display warnings
					hitNumber = bonusHits[i]; //used in display warnings
 
 
					if(debug){
						console.log("Should not chain");
						console.log("value | " + value);
						console.log("variance | " + variance);
						console.log("vv | " + vv);
						console.log("bonusHits["+i+"] | " + bonusHits[i]);
					}
 
 
				} else { //our value is currently greater than or equal to bonusHits[i] //currently no function besides debug logs
					if(debug){
						console.log("Chain OK");
						console.log("value | " + value);
						console.log("variance | " + variance);
						console.log("vv | " + vv);
						console.log("bonusHits["+i+"] | " + bonusHits[i]);
					}
				}
			}
		}
 
		if(!chainBool){ //Display warnings if bonus hit is close
			var chainData = (hitNumber - value);
 
			//Grammar
			var hits = " HITS";
			if(chainData == 1) {
				hits = " HIT" ;
			}
			var warn = "WARNING, YOU ARE " + chainData + hits + " AWAY FROM THE " + bonusHitStrings[arrValue] + " BONUS HIT.";
			$(".dialogButtons___3xN5A").append('</br>' + warn);
			alert(warn);
		}
	});
}
 
//Wait for the page to finished loading then run checkChain()
$(window).load(function(){
	var key = GM_getValue("tornApiKey");
	checkChain(key);
});

