Advertisement
Degritone

Keno Number Tracker

Apr 10th, 2018
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name     Keno Number Tracker
  3. // @namespace        torn.com
  4. // @author           Degritone
  5. // @description      Tracks numbers that appear in Keno
  6. // @match            *://*.torn.com/loader.php?sid=keno
  7. // @require          http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
  8. // @require          https://gist.github.com/raw/2625891/waitForKeyElements.js
  9. // @version          1.0.1
  10. // ==/UserScript==
  11.  
  12.  
  13. var displayOn = false;
  14. var debug = false;
  15.  
  16. function log(string){
  17.   if(debug)
  18.     console.log("[KNT]",string);
  19. }
  20.  
  21. function getStat(value){
  22.   log("Getting stat: ".concat(value));
  23.   if(localStorage.getItem("Keno.".concat(value)) == undefined){
  24.     log("Stat not created. Initializing...");
  25.     localStorage.setItem("Keno.".concat(value),0);
  26.     log("Initialized.");
  27.   }
  28.   return parseInt(localStorage.getItem("Keno.".concat(value)));
  29. }
  30.  
  31. function storeStats(statArray){
  32.   log("Storing ".concat(statArray.length).concat(" stats"));
  33.   for(i=0;i<statArray.length;i++){
  34.     log("Storing stat: ".concat(statArray[i]));
  35.     localStorage.setItem("Keno.".concat(statArray[i]),getStat(statArray[i])+1);
  36.     localStorage.setItem("Keno.total",getStat("total")+1);
  37.     log("Stat stored successfully");
  38.   }
  39. }
  40.  
  41. function displayClear(){
  42.   var numbers, games;
  43.   var parent = document.getElementById("boardContainer");
  44.   log("Clearing display");
  45.   for(i=1;i<81;i++){
  46.     numbers = document.getElementById("cell_numbers_".concat(i));
  47.     if(numbers)
  48.       parent.removeChild(numbers);
  49.   }
  50.   games = document.getElementById("games_played");
  51.   if(games)
  52.     parent.removeChild(games);
  53. }
  54.  
  55. function displayPrep(){
  56.   log("Prepping cells");
  57.   var cell;
  58.   for(i=1;i<81;i++){
  59.     log("Finding cell");
  60.     cell = document.getElementById("keno_item_".concat(i));
  61.     log("Prepping cell");
  62.     cell.style.position = "absolute";
  63.     cell.style.zIndex = 10;
  64.     cell.parentElement.style.position = "relative";
  65.     if((i-1)%10!=0)
  66.       cell.style.left = "".concat(34*((i-1)%10)+5).concat("px");
  67.   }
  68. }
  69.  
  70. function displayColor(){
  71.   var total = getStat("total");
  72.   var highest, red, green, numbers, hex, lowest;
  73.   var blue = 136;
  74.   var amounts = new Array(80);
  75.   for(i=1;i<81 && total>0;i++){
  76.     amounts[i-1] = getStat(i);
  77.   }
  78.   log("Setting color");
  79.   highest = Math.max(...amounts);
  80.   lowest = Math.min(...amounts);
  81.   log(amounts);
  82.   log(highest);
  83.   log(lowest);
  84.   for(i=1;i<81 && total>0;i++){
  85.     red = Math.floor(Math.min(255,Math.max(136,295+20*highest/Math.max(getStat(i)-lowest,1)-200*getStat(i)/highest)));
  86.     green = Math.max(Math.floor(Math.min(136+(150*getStat(i)-150*lowest)/Math.max(highest-lowest,1),255)),136);
  87.     log("Finding cell");
  88.     numbers = document.getElementById("cell_numbers_".concat(i));
  89.     log("Coloring cell");
  90.     hex = "#".concat(red.toString(16)).concat(green.toString(16)).concat(blue.toString(16));
  91.     log(hex);
  92.     numbers.style.backgroundColor = hex;
  93.   }
  94. }
  95.  
  96. function displayNumbers(){
  97.   var parent, numbers, games;
  98.   var total = getStat("total");
  99.   var board = document.getElementById("boardContainer");
  100.   log("Setting numbers");
  101.   for(i=1;i<81;i++){
  102.     parent = board.appendChild(document.createElement('div'));
  103.    
  104.     parent.style.cssText = "position: absolute; height: 32px; width: 27px; top: ".concat(231+Math.floor((i-1)/10)*34).concat("px;").concat("left: ").concat(220+34*((i-1)%10)+5).concat("px;");
  105.     parent.id = "cell_numbers_".concat(i);
  106.    
  107.     numbers = parent.appendChild(document.createElement('div'));
  108.    
  109.     numbers.style.cssText = "position: absolute; z-index: 100000; font-size: 8px; font-family: impact; text-align: center; height: 32px; width: 27px; line-height: 8px; top: 0; left: 0; pointer-events: none;";
  110.     numbers.innerHTML = "<p style='margin-left: -3px;'>".concat(getStat(i)).concat("<br><br><br>").concat(Math.floor(getStat(i)*1000/total)/10).concat("%</p>");
  111.   }
  112.   games = board.appendChild(document.createElement('div'));
  113.  
  114.   games.style.cssText = "position: absolute; font-size: 12px; font-family: impact; text-align: center; height: 14px; width: 150px; line-height: 13px; top: 212px; left: 436px;";
  115.   games.id = "games_played";
  116.   games.innerHTML = "Games recorded: ".concat(getStat("total")/10);
  117. }
  118.  
  119. function autoClick(){
  120.   var missed = document.getElementsByClassName("lost");
  121.   var hit = document.getElementsByClassName("marked winning");
  122.   var name, number;
  123.   var numbers = new Array();
  124.   log(missed);
  125.   log(hit);
  126.   if(missed[0] != undefined){
  127.     log("Finding missed numbers");
  128.     for(i=0;i<missed.length;i++){
  129.       name = missed[i].id.split("_");
  130.       number = name[2];
  131.       numbers.push(number);
  132.       log(number.concat(" found"));
  133.     }
  134.   }
  135.   if(hit[0] != undefined){
  136.     log("Finding hit numbers");
  137.     for(i=0;i<hit.length;i++){
  138.       name = hit[i].id.split("_");
  139.       number = name[2];
  140.       numbers.push(number);
  141.       log(number.concat(" found"));
  142.     }
  143.   }
  144.   log("Storing found numbers");
  145.   if(numbers.length == 10){
  146.     storeStats(numbers);
  147.     log(numbers);
  148.     log("Stored");
  149.     if(displayOn){
  150.       displayClear();
  151.       displayNumbers();
  152.       displayColor();
  153.     }
  154.   }
  155. }
  156.  
  157. function inputClick(){
  158.   var field = document.getElementById("KSInput")
  159.   var input = field.value.split(",");
  160.   var parent = document.getElementById("KSDiv");
  161.   log("Attempting to store stats");
  162.   log(input);
  163.   storeStats(input);
  164.   log("Stats stored");
  165. }
  166.  
  167. function manualClick(){
  168.   var parent = document.getElementById("manual_button");
  169.   if(!document.getElementById("KSDiv")){
  170.     log("Making manual input div");
  171.     var inputDiv = parent.appendChild(document.createElement('div'));
  172.    
  173.     inputDiv.style.cssText = "z-index:100000; position:absolute; background: radial-gradient(at left 6px, #CCCCDD, #CCCCCC 50%); color: #000000; border-color: #444444; border-style: solid; border-width: 3px; width: 260px; height: 53px; left: 120px; top: -3px;";
  174.     inputDiv.id = "KSDiv";
  175.    
  176.     log("Done");
  177.     log("Making above text");
  178.     var inputWarning = inputDiv.appendChild(document.createElement('div'));
  179.  
  180.     inputWarning.style.cssText = "z-index:100000; position:absolute; text-align: center; width: 260px; margin-left: -3px; height: 13px; left: 0px; top: 1px;";
  181.     inputWarning.id = "KSWarning";
  182.     inputWarning.innerHTML = "Type 10 numbers separated by commas. No spaces.";
  183.    
  184.     log("Done");
  185.     log("Making text field");
  186.     var inputField = inputDiv.appendChild(document.createElement('INPUT'));
  187.  
  188.     inputField.style.cssText = "z-index:100000; position:absolute; width: 250px; height: 13px; left: 5px; top: 16px;";
  189.     inputField.id = "KSInput";
  190.     inputField.setAttribute("type","text");
  191.     inputField.setAttribute("defaultValue","1,2,3,4,5,6,7,8,9,10");
  192.     inputField.setAttribute("value","1,2,3,4,5,6,7,8,9,10");
  193.    
  194.     log("Done");
  195.     log("Making submit button");
  196.     var inputButton = inputDiv.appendChild(document.createElement('div'));
  197.  
  198.     inputButton.style.cssText = "z-index:100000; position:absolute; background-color: #CCCCCC; color: #000000; text-align: center; border-color: #444444; border-style: solid; border-width: 1px; width: 40px; height: 13px; left: 110px; top: 35px;";
  199.     inputButton.id = "KSButton";
  200.     inputButton.innerHTML = "<p style='margin-left: -3px;'>Submit</p>";
  201.     inputButton.addEventListener('click',inputClick);
  202.    
  203.     var gradient = inputDiv.appendChild(document.createElement('div'));
  204.    
  205.     gradient.style.cssText = "z-index:100010; position:absolute; background: linear-gradient(to right, #CCCCEE, #CCCCDD); border-top: 3px solid #444444; border-bottom: 3px solid #444444; width: 5px; height: 13px; left: -10px; top: -3px;";
  206.    
  207.     parent.style.background = "rgba(0, 0, 0, 0) linear-gradient(to right, rgb(204, 204, 255), rgb(204, 204, 238)) repeat scroll 0% 0%";
  208.     log("Done");
  209.     log("Successfully created manual input");
  210.   }
  211.   else{
  212.     log("Deleting manual input div");
  213.     parent.removeChild(document.getElementById("KSDiv"));
  214.     parent.style.background = "rgb(204, 204, 204) none repeat scroll 0% 0%";
  215.     log("Done");
  216.   }
  217. }
  218.  
  219. function displayClick(){
  220.   var parent = document.getElementById("display_button");
  221.   displayOn = !displayOn;
  222.   log(displayOn);
  223.   if(displayOn){
  224.     displayNumbers();
  225.     displayColor();
  226.     parent.style.backgroundColor = "#CCCCFF";
  227.   }
  228.   if(!displayOn){
  229.     displayClear();
  230.     parent.style.backgroundColor = "#CCCCCC";
  231.   }
  232. }
  233.  
  234. function debugClick(){
  235.   var parent = document.getElementById("debug_button");
  236.   debug = !debug;
  237.   if(debug){
  238.     var storage = new Array(81);
  239.     storage[0] = getStat("total");
  240.     for(i=1;i<81;i++)
  241.       storage[i] = getStat(i);
  242.     log(storage);
  243.     parent.style.backgroundColor = "#CCCCFF";
  244.   }
  245.   else
  246.     parent.style.backgroundColor = "#CCCCCC";
  247. }
  248.  
  249. function detectEnd(rounds){
  250.   if(rounds < 1)
  251.     return;
  252.   var missed = document.getElementsByClassName("lost");
  253.   var hit = document.getElementsByClassName("marked winning");
  254.   if((missed.length+hit.length)<10){
  255.     log("Round not ended");
  256.     setTimeout(detectEnd,250,rounds);
  257.   }
  258.   else{
  259.     log("Round end detected");
  260.     autoClick();
  261.     setTimeout(detectEnd,1000,rounds-1);
  262.   }
  263. }
  264.  
  265. function playClick(){
  266.   var rounds = parseInt(document.getElementById("roundsAmount").innerHTML);
  267.   var playButton = document.getElementById("playBtn");
  268.   log("Playing ".concat(rounds).concat(" rounds"));
  269.   setTimeout(detectEnd,1000,rounds);
  270.   playButton.click();
  271. }
  272.  
  273. function makeButtons(){
  274.   console.log("[KNT] Board appeared, making buttons");
  275.   var parent = document.getElementById("boardContainer");
  276.   var css = "z-index:100000; position:absolute; background: #CCCCCC; color: #000000; font-size: 12px; font-family: impact; line-height: 12px; border-color: #444444; border-style: solid; border-width: 3px; width: 110px; height: 13px; left: 595px; top: ";
  277.   var autoButton = parent.appendChild(document.createElement('div'));
  278.  
  279.   autoButton.style.cssText = css.concat("231px;");
  280.   autoButton.id = "auto_button";
  281.   autoButton.innerHTML = "Collect Current Game";
  282.   autoButton.addEventListener('click',autoClick);
  283.  
  284.   var manualButton = parent.appendChild(document.createElement('div'));
  285.  
  286.   manualButton.style.cssText = css.concat("251px;");
  287.   manualButton.id = "manual_button";
  288.   manualButton.innerHTML = "Manually Input Game";
  289.   manualButton.addEventListener("click",manualClick);
  290.  
  291.   var displayButton = parent.appendChild(document.createElement('div'));
  292.  
  293.   displayButton.style.cssText = css.concat("271px;");
  294.   displayButton.id = "display_button";
  295.   displayButton.innerHTML = "Toggle Stat Display";
  296.   displayButton.addEventListener("click",displayClick);
  297.  
  298.   var debugButton = parent.appendChild(document.createElement('div'));
  299.  
  300.   debugButton.style.cssText = css.concat("291px;");
  301.   debugButton.id = "debug_button";
  302.   debugButton.innerHTML = "Toggle Debug";
  303.   debugButton.addEventListener("click",debugClick);
  304.  
  305.   var playButton = parent.appendChild(document.createElement('div'));
  306.  
  307.   playButton.style.cssText = css.concat("311px;");
  308.   playButton.id = "play_button";
  309.   playButton.innerHTML = "Play And Collect";
  310.   playButton.addEventListener("click",playClick);
  311.  
  312.   displayPrep();
  313.   displayClick();
  314. }
  315.  
  316. console.log("[KNT] Waiting for board to appear");
  317. waitForKeyElements("#boardContainer",makeButtons);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement