Guest User

HaremHeroes Automatic++

a guest
Oct 25th, 2020
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         HaremHeroes Automatic++
  3. // @namespace    JDscripts
  4. // @version      4.353.3+
  5. // @description  Open the menu in HaremHeroes(topright) to toggle AutoControlls. Supports AutoSalary, AutoContest, AutoMission, AutoQuest, AutoTrollBattle, AutoArenaBattle and AutoPachinko(Free), AutoLeagues, AutoChampions and AutoStatUpgrades. Messages are printed in local console.
  6. // @author       JD and Dorten(a bit)
  7. // @match        http*://nutaku.haremheroes.com/*
  8. // @match        http*://*.hentaiheroes.com/*
  9. // @grant        GM_addStyle
  10. // @license      MIT
  11. // @note        Add AutoPlaceofPower and Monthly card money collecting (Test). All thanks to the authors and grant.
  12. // ==/UserScript==
  13.  
  14. GM_addStyle('/* The switch - the box around the slider */ .switch { position: relative; display: inline-block; width: 40px; height: 24px; } /* Hide default HTML checkbox */ .switch input {display:none;} /* The slider */ .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; -webkit-transition: .4s; transition: .4s; } .slider.round:before { position: absolute; content: ""; height: 16px; width: 16px; left: 4px; bottom: 4px; background-color: white; -webkit-transition: .4s; transition: .4s; } input:checked + .slider { background-color: #2196F3; } input:focus + .slider { box-shadow: 0 0 1px #2196F3; } input:checked + .slider:before { -webkit-transform: translateX(16px); -ms-transform: translateX(16px); transform: translateX(16px); } /* Rounded sliders */ .slider.round { border-radius: 24px; } .slider.round:before { border-radius: 50%; }');
  15.  
  16. // var d="@require      https://cdn.jsdelivr.net/js-cookie/2.2.0/js.cookie.js"
  17.  
  18. function Storage()
  19. {
  20.     return localStorage.settPerTab==="true"?sessionStorage:localStorage;
  21. }
  22.  
  23. function getHero()
  24. {
  25.     if(unsafeWindow.Hero === undefined)
  26.     {
  27.         setTimeout(autoLoop, Number(Storage().autoLoopTimeMili))
  28.         //console.log(window.wrappedJSObject)
  29.     }
  30.     //console.log(unsafeWindow.Hero);
  31.     return unsafeWindow.Hero;
  32. }
  33.  
  34. function getGirlsMap()
  35. {
  36.     return unsafeWindow.GirlSalaryManager.girlsMap;
  37. }
  38.  
  39. function getPage()
  40. {
  41.     try{
  42.         var ob = document.getElementById("hh_nutaku");
  43.         if(ob===undefined || ob === null)
  44.         {
  45.             ob = document.getElementById("hh_hentai");
  46.         }
  47.         var p=ob.className.match(/.*page-(.*) .*/i)[1];
  48.         if (p=="missions" && $('h4.contests.selected').size()>0)
  49.         {
  50.             return "activities"
  51.         }
  52.         else
  53.         {
  54.             if (p=="missions" && $('h4.pop.selected').size()>0)
  55.             {
  56.                 return "pop"
  57.             }
  58.             else
  59.             {
  60.                 return p;
  61.             }
  62.         }
  63.     }
  64.     catch(err)
  65.     {
  66.         return ""
  67.     }
  68. }
  69.  
  70. function url_add_param(url, param) {
  71.     if (url.indexOf('?') === -1) url += '?';
  72.     else url += '&';
  73.     return url+param;
  74. }
  75.  
  76. // Retruns true if on correct page.
  77. function gotoPage(page)
  78. {
  79.     var cp=getPage();
  80.     console.log('going '+cp+'->'+page);
  81.     if(getPage() === page)
  82.     {
  83.         if (page=='missions')
  84.         {
  85.             $('h4.missions').each(function(){this.click();});
  86.         }
  87.         if (page=='activities')
  88.         {
  89.             $('h4.contests').each(function(){this.click();});
  90.         }
  91.         if (page=='pop')
  92.         {
  93.             $('h4.pop').each(function(){this.click();});
  94.         }
  95.         return true;
  96.     }
  97.     else
  98.     {
  99.         console.log("Navigating to page: "+page);
  100.         var togoto = undefined;
  101.         // get page path
  102.         switch(page)
  103.         {
  104.             case "missions":
  105.                 togoto = $("nav div[rel='content'] a:has(.activities)").attr("href");
  106.                 break;
  107.             case "activities":
  108.                 togoto = $("nav div[rel='content'] a:has(.activities)").attr("href");
  109.                 break;
  110.             case "pop":
  111.                 togoto = $("nav div[rel='content'] a:has(.activities)").attr("href");
  112.                 break;
  113.             case "harem":
  114.                 togoto = $("nav div[rel='content'] a:has(.harem)").attr("href");
  115.                 break;
  116.             case "map":
  117.                 togoto = $("nav div[rel='content'] a:has(.map)").attr("href");
  118.                 break;
  119.             case "arena":
  120.                 togoto =$("nav div[rel='content'] a:has(.arena)").attr("href");
  121.                 break;
  122.             case "pachinko":
  123.                 togoto = $("nav div[rel='content'] a:has(.pachinko)").attr("href");
  124.                 break;
  125.             case "leaderboard":
  126.                 togoto = $("nav div[rel='content'] a:has(.leaderboard)").attr("href");
  127.                 break;
  128.             case "shop":
  129.                 togoto = $("nav div[rel='content'] a:has(.shop)").attr("href");
  130.                 break;
  131.             case "quest":
  132.                 togoto = getHero().infos.questing.current_url;
  133.                 if (togoto.includes("world"))
  134.                 {
  135.                     console.log("All quests finished, turning off AutoQuest!");
  136.                     Storage().autoQuest = false;
  137.                     location.reload();
  138.                     return false;
  139.                 }
  140.                 console.log("Current quest page: "+togoto);
  141.                 break;
  142.             case "champions_map":
  143.                 togoto = $("nav div[rel='content'] a:has(.champions)").attr("href");
  144.                 break;
  145.             default:
  146.                 console.log("Unknown goto page request. No page \'"+page+"\' defined.");
  147.         }
  148.         console.log("TOGOTO: "+togoto);
  149.         if(togoto != undefined)
  150.         {
  151.             if (page=="missions")
  152.             {
  153.                 togoto = url_add_param(togoto, "tab=" + "missions");
  154.             }
  155.             if (page=="activities")
  156.             {
  157.                 togoto = url_add_param(togoto, "tab=" + "contests");
  158.             }
  159.             if (page=="pop")
  160.             {
  161.                 togoto = url_add_param(togoto, "tab=" + "pop");
  162.             }
  163.             sessionStorage.autoLoop = "false";
  164.             window.location = window.location.origin + togoto;
  165.         }
  166.         else console.log("Couldn't find page path. Page was undefined...");
  167.         return false;
  168.     }
  169. }
  170.  
  171. var proceedQuest = function () {
  172.     //console.log("Starting auto quest.");
  173.     // Check if at correct page.
  174.     if (!gotoPage("quest")) {
  175.         // Click on current quest to naviagte to it.
  176.         console.log("Navigating to current quest.");
  177.         return;
  178.     }
  179.     $("#popup_message close").click();
  180.     // Get the proceed button type
  181.     var proceedButtonMatch = $("#controls button:not([style='display: none;'])");
  182.     if (proceedButtonMatch.length === 0){proceedButtonMatch = $("#controls button[act='free']");}
  183.     var proceedCostEnergy = Number($("#controls .cost span[cur='*']").text());
  184.     var units = [" ", "K", "M", "G", "T", "P", "E", "Z", "Y"]
  185.     var proceedCostMoney = $("#controls .cost span[cur='$']").text();
  186.     var Unit=proceedCostMoney.substr(-1);
  187.     if (units.includes(Unit))
  188.     {
  189.         proceedCostMoney=Number(proceedCostMoney.split(Unit)[0].replace(",","").trim())*(1000**units.indexOf(Unit))
  190.     }
  191.     else
  192.     {
  193.         proceedCostMoney=Number(proceedCostMoney.replace(",","").trim());
  194.     }
  195.  
  196.     var proceedType = proceedButtonMatch.attr("act");
  197.  
  198.     if (proceedButtonMatch.length === 0) console.log("Could not find resume button.");
  199.     else if (proceedType === "free") {
  200.         console.log("Proceeding for free.");
  201.         proceedButtonMatch.click();
  202.     }
  203.     else if (proceedType === "pay") {
  204.         var energyCurrent = getHero().infos.energy_quest;
  205.         var moneyCurrent = getHero().infos.soft_currency;
  206.         if(proceedCostEnergy <= energyCurrent)
  207.         {
  208.             // We have energy.
  209.             console.log("Spending "+proceedCostEnergy+" Energy to proceed.");
  210.         }
  211.         else
  212.         {
  213.             console.log("Quest requires "+proceedCostEnergy+" Energy to proceed.");
  214.             sessionStorage.questRequirement = "*"+proceedCostEnergy;
  215.             return;
  216.         }
  217.         if(proceedCostMoney <= moneyCurrent)
  218.         {
  219.             // We have money.
  220.             console.log("Spending "+proceedCostMoney+" Money to proceed.");
  221.         }
  222.         else
  223.         {
  224.             console.log("Spending "+proceedCostEnergy+" Energy to proceed.");
  225.             sessionStorage.questRequirement = "$"+proceedCostMoney;
  226.             return;
  227.         }
  228.         proceedButtonMatch.click();
  229.         sessionStorage.autoLoop = "false";
  230.         location.reload();
  231.     }
  232.     else if (proceedType === "use_item") {
  233.         console.log("Proceeding by using X" + Number($("#controls .item span").text()) + " of the required item.");
  234.         proceedButtonMatch.click();
  235.     }
  236.     else if (proceedType === "battle") {
  237.         console.log("Proceeding to battle troll...");
  238.         sessionStorage.questRequirement = "battle";
  239.         // Proceed to battle troll.
  240.         proceedButtonMatch.click();
  241.         sessionStorage.autoLoop = "false";
  242.         location.reload();
  243.     }
  244.     else if (proceedType === "end_archive") {
  245.         console.log("Reached end of current archive. Proceeding to next archive.");
  246.         sessionStorage.autoLoop = "false";
  247.         proceedButtonMatch.click();
  248.     }
  249.     else if (proceedType === "end_play") {
  250.         console.log("Reached end of current play. Proceeding to next play.");
  251.         sessionStorage.autoLoop = "false";
  252.         proceedButtonMatch.click();
  253.     }
  254.     else {
  255.         console.log("Could not identify given resume button.");
  256.         sessionStorage.questRequirement = "unknownQuestButton";
  257.     }
  258. };
  259.  
  260. /**
  261. * Recieves a list of mission objects and returns the mission object to use.
  262. * A mission object looks similar to this :-
  263. * Eg 1:   {"id_member_mission":"256160093","id_mission":"23","duration":"53","cost":"1","remaining_time":"-83057","rewards":[{"classList":{"0":"slot","1":"slot_xp"},"type":"xp","data":28},{"classList":{"0":"slot","1":"slot_SC"},"type":"money","data":277}]}
  264. * Eg 2:   {"id_member_mission":"256160095","id_mission":"10","duration":"53","cost":"1","remaining_time":"-81330","rewards":[{"classList":{"0":"slot","1":"slot_xp"},"type":"xp","data":28},{"classList":{"0":"slot","1":"rare"},"type":"item","data":{"id_item":"23","type":"gift","subtype":"0","identifier":"K3","rarity":"rare","value":"80","carac1":0,"carac2":0,"carac3":0,"endurance":0,"chance":0,"ego":0,"damage":0,"duration":0,"level_mini":"1","name":"Bracelet","Name":"Bracelet","ico":"https://content.haremheroes.com/pictures/items/K3.png","price_sell":5561,"count":1,"id_m_i":[]}}]}
  265. * Eg 3:   {"id_member_mission":"256822795","id_mission":"337","duration":"17172","cost":"144","remaining_time":null,"remaining_cost":"144","rewards":[{"classList":{"0":"slot","1":"slot_HC"},"type":"koban","data":11}]}
  266. * Eg 1 has mission rewards of xp and money.
  267. * Eg 2 has mission rewards of xp and item.
  268. * Eg 3 has mission rewards of koban/hard_currency.
  269. * cost is the koban price for instant complete.
  270. */
  271. function getSuitableMission(missionsList)
  272. {
  273.     var msn = missionsList[0];
  274.     for(var m in missionsList)
  275.     {
  276.         if(Number(msn.duration) > Number(missionsList[m].duration))
  277.         {
  278.             msn = missionsList[m];
  279.         }
  280.     }
  281.     return msn;
  282. }
  283.  
  284. // returns boolean to set busy
  285. function doMissionStuff()
  286. {
  287.     if(!gotoPage("missions"))
  288.     {
  289.         console.log("Navigating to activities page.");
  290.         // return busy
  291.         return true;
  292.     }
  293.     else
  294.     {
  295.         console.log("On activities page.");
  296.         if (Storage().autoMissionC==="true")
  297.         {
  298.             console.log("Collecting finished mission's reward.");
  299.             $(".mission_button button:visible[rel='claim']").click();
  300.         }
  301.         // TODO: select new missions and parse reward data from HTML, it's there in data attributes of tags
  302.         var missions = [];
  303.         var allGood = true;
  304.         // parse missions
  305.         $(".mission_object").each(function(idx,missionObject){
  306.             var data = $.data(missionObject).d;
  307.             // Do not list completed missions
  308.             var toAdd=true;
  309.             if(data.remaining_time !== null){
  310.                 // This is not a fresh mission
  311.                 if(data.remaining_time > 0)
  312.                 {
  313.                     console.log("Unfinished mission detected...("+data.remaining_time+"sec. remaining)");
  314.                     setTimer('nextMissionTime',Number(data.remaining_time)+1);
  315.                     allGood = false;
  316.                     return;
  317.                 }
  318.                 else{
  319.                     console.log("Unclaimed mission detected...");
  320.                     if (Storage().autoMissionC==="true")
  321.                     {
  322.                         allGood = false;
  323.                     }
  324.                 }
  325.                 return;
  326.             }
  327.             data.missionObject = missionObject;
  328.             var rewards = [];
  329.             // set rewards
  330.             {
  331.                 // get Reward slots
  332.                 var slots = missionObject.querySelectorAll(".slot");
  333.                 // traverse slots
  334.                 $.each(slots,function(idx,slotDiv){
  335.                     var reward = {};
  336.                     // get slot class list
  337.                     reward.classList = slotDiv.classList;
  338.                     // set reward type
  339.                     if(reward.classList.contains("slot_xp"))reward.type = "xp";
  340.                     else if(reward.classList.contains("slot_SC"))reward.type = "money";
  341.                     else if(reward.classList.contains("slot_HC"))reward.type = "koban";
  342.                     else reward.type = "item";
  343.                     // set value if xp
  344.                     if(reward.type === "xp" || reward.type === "money" || reward.type === "koban")
  345.                     {
  346.                         // remove all non numbers and HTML tags
  347.                         try{
  348.                             reward.data = Number(slotDiv.innerHTML.replace(/<.*?>/g,'').replace(/\D/g,''));
  349.                         }
  350.                         catch(e){
  351.                             console.log("Couldn't parse xp/money data.");
  352.                             console.log(slotDiv);
  353.                         }
  354.                     }
  355.                     // set item details if item
  356.                     else if(reward.type === "item")
  357.                     {
  358.                         try{
  359.                             reward.data = $.data(slotDiv).d;
  360.                         }
  361.                         catch(e){
  362.                             console.log("Couldn't parse item reward slot details.");
  363.                             console.log(slotDiv);
  364.                             reward.type = "unknown";
  365.                         }
  366.                     }
  367.                     rewards.push(reward);
  368.                 });
  369.             }
  370.             data.rewards = rewards;
  371.  
  372.             missions.push(data);
  373.         });
  374.         if(!allGood){
  375.             console.log("Something went wrong, need to retry later...");
  376.             // busy
  377.             return true;
  378.         }
  379.         console.log("Missions parsed, mission list is:-");
  380.         console.log(missions);
  381.         if(missions.length > 0)
  382.         {
  383.             console.log("Selecting mission from list.");
  384.             var mission = getSuitableMission(missions);
  385.             console.log("Selected mission:-");
  386.             console.log(mission);
  387.             console.log("Selected mission duration: "+mission.duration+"sec.");
  388.             var missionButton = $(mission.missionObject).find("button:visible").first();
  389.             console.log("Mission button of type: "+missionButton.attr("rel"));
  390.             console.log("Clicking mission button.");
  391.             missionButton.click();
  392.             setTimer('nextMissionTime',Number(mission.duration)+1);
  393.         }
  394.         else{
  395.             console.log("No missions detected...!");
  396.             // get gift
  397.             var ck = sessionStorage['giftleft'];
  398.             var isAfterGift = document.querySelector("#missions .after_gift").style.display === 'block';
  399.             if(!isAfterGift){
  400.                 if(ck === undefined || ck === 'giftleft')
  401.                 {
  402.                     console.log("Collecting gift.");
  403.                     delete sessionStorage['giftleft'];
  404.                     document.querySelector(".end_gift button").click();
  405.                 }
  406.                 else{
  407.                     console.log("Refreshing to collect gift...");
  408.                     sessionStorage['giftleft']='giftleft';
  409.                     window.reload();
  410.                     // is busy
  411.                     return true;
  412.                 }
  413.             }
  414.             var time = 0;
  415.             for(var e in unsafeWindow.HHTimers.timers){
  416.                 try{if(unsafeWindow.HHTimers.timers[e].$elm.selector.includes("#missions_counter"))
  417.                     time=unsafeWindow.HHTimers.timers[e];
  418.                    }
  419.                 catch(e){}
  420.             }
  421.             if (time !== undefined)
  422.             {
  423.                 time = time.remainingTime;
  424.             }
  425.             if(time === undefined)
  426.             {
  427.                 //try again with different selector
  428.                 for(e in unsafeWindow.HHTimers.timers){
  429.                     try{if(unsafeWindow.HHTimers.timers[e].$elm.selector.includes(".after_gift"))
  430.                         time=unsafeWindow.HHTimers.timers[e];
  431.                        }
  432.                     catch(e){}
  433.                 }
  434.                 if (time !== undefined)
  435.                 {
  436.                     time = time.remainingTime;
  437.                 }
  438.             }
  439.             if(time === undefined){
  440.                 console.log("New mission time was undefined... Setting it manually to 10min.");
  441.                 time = 10*60;
  442.             }
  443.             setTimer('nextMissionTime',Number(time)+1);
  444.         }
  445.         // not busy
  446.         return false;
  447.     }
  448. }
  449.  
  450. // returns boolean to set busy
  451. function doContestStuff()
  452. {
  453.     if(!gotoPage("activities"))
  454.     {
  455.         console.log("Navigating to activities page.");
  456.         // return busy
  457.         return true;
  458.     }
  459.     else
  460.     {
  461.         console.log("On activities page.");
  462.         console.log("Collecting finished contests's reward.");
  463.         $(".contest .ended button[rel='claim']").click();
  464.         // need to get next contest timer data
  465.         var time = 0;
  466.         for(var e in unsafeWindow.HHTimers.timers){
  467.             try{if(unsafeWindow.HHTimers.timers[e].$barElm/*.selector.includes(".contest_timer")*/)
  468.                 time=unsafeWindow.HHTimers.timers[e];
  469.                }
  470.             catch(e){}
  471.         }
  472.         time = time.remainingTime;
  473.         try{if(time === undefined)
  474.         {
  475.             //try again with different selector
  476.             time = undefined;
  477.             for(e in unsafeWindow.HHTimers.timers){
  478.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm[0].className.includes("contest_timer"))
  479.                     // get closest time
  480.                     if(!(unsafeWindow.HHTimers.timers[e].remainingTime>time))
  481.                         time=unsafeWindow.HHTimers.timers[e].remainingTime;
  482.             }
  483.         }}catch(e){}
  484.         if(time === undefined){
  485.             console.log("New contest time was undefined... Setting it manually to 10min.");
  486.             time = 10*60;
  487.         }
  488.         setTimer('nextContestTime',Number(time)+1);
  489.         // Not busy
  490.         return false;
  491.     }
  492. }
  493.  
  494. // returns boolean to set busy
  495. function doPoPowerSelect()
  496. {
  497.     if(!gotoPage("pop"))
  498.     {
  499.         console.log("Navigating to pop page.");
  500.         // return busy
  501.         return true;
  502.     }
  503.     else
  504.     {
  505.         console.log("On popower page.");
  506.         console.log("Collecting finished popower reward.");
  507.  
  508.         console.log("Auto Assing popower.");
  509.         $('#pop .pop_right_part>[rel=pop_auto_assign]').click();
  510.         console.log("Start popower.");
  511.         $('#pop .pop_central_part>button[rel=pop_action]').click();
  512.  
  513.         // Not busy
  514.         return false;
  515.     }
  516. };
  517.  
  518. var doPoPowerStuff = function () {
  519.     //console.log("Performing auto battle.");
  520.     // Confirm if on correct screen.
  521.     var page = getPage();
  522.     if(page === "pop")
  523.     {
  524.         $('.pop_list button[rel=pop_thumb_claim]').each(function()
  525.         {
  526.             this.click();
  527.             $("#rewards_popup .blue_button_L").each(function()
  528.             {
  529.                 this.click();
  530.                 console.log('Reset Storage Time: '+Number(sessionStorage.auxtpop));
  531.                 sessionStorage.auxtpop=1;
  532.                 console.log('New Storage Time: '+Number(sessionStorage.auxtpop));
  533.             });
  534.         });
  535.  
  536.         if ($("#pop[class='canvas']").length === 1) {
  537.             // Oponent choose screen
  538.             console.log("On opponent choose screen.");
  539.             if(document.getElementById("popups").style.display === "block")
  540.             {
  541.                 console.log("Popup detetcted. Refresh page.");
  542.                 unsafeWindow.reload();
  543.                 return true;
  544.             }
  545.             else{
  546.                 console.log("No popups.");
  547.                 doPoPowerSelect();
  548.             }
  549.  
  550.             localStorage.Totalpops=$("div[pop_id]").length; //Count how many different POPs there are and store them locally
  551.  
  552.             var poper = sessionStorage.poper?sessionStorage.poper:1;
  553.             var tpop;
  554.             var auxtpop = sessionStorage.auxtpop?sessionStorage.auxtpop:1;
  555.             console.log('already get pop: '+poper);
  556.             if(poper <= localStorage.Totalpops)
  557.             {
  558.                 console.log("No pop found, storing nextPoPowerTime...");
  559.                 for(var e in unsafeWindow.HHTimers.timers){
  560.                     try{
  561.                             if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".pop"))
  562.                             {
  563.                                 tpop=unsafeWindow.HHTimers.timers[e].remainingTime;
  564.  
  565.                                 if(sessionStorage.auxtpop === undefined || sessionStorage.auxtpop <= 10*60)
  566.                                 {
  567.                                     sessionStorage.auxtpop=Number(tpop); //If it is not defined, or less than 10 min
  568.                                 }
  569.                                 if(tpop >= sessionStorage.auxtpop)
  570.                                 {
  571.                                     sessionStorage.auxtpop=Number(tpop); //save the bigest defined time
  572.                                 }
  573.                             }
  574.                        }
  575.                     catch(e){}
  576.                 }
  577.             }
  578.             else
  579.             {
  580.                 sessionStorage.poper=1;
  581.                 if(tpop >= sessionStorage.auxtpop)
  582.                 {
  583.                     setTimer('nextPoPowerTime',Number(tpop)+10);
  584.                     console.log('Time 1: '+Number(tpop));
  585.                 }
  586.                 else
  587.                 {
  588.                     setTimer('nextPoPowerTime',Number(sessionStorage.auxtpop)+10);
  589.                     console.log('Time 2: '+Number(sessionStorage.auxtpop));
  590.                 }
  591.  
  592.                 location.href = "/home.html";
  593.                 return false;
  594.             }
  595.             sessionStorage.poper=Number(poper)+1;
  596.             window.location = window.location.origin + '/activities.html?tab=pop&index='+poper;
  597.             sessionStorage.autoLoop = "false";
  598.         }
  599.     }
  600.     else if (page==="pop")
  601.     {
  602.         //doPoPowerSelect();
  603.     }
  604.     else
  605.     {
  606.         // Switch to the correct screen
  607.         console.log("Switching to pop screen.");
  608.         gotoPage("pop");
  609.         return true;
  610.     }
  611. }
  612.  
  613. function randomInterval(min,max) // min and max included
  614. {
  615.     return Math.floor(Math.random()*(max-min+1)+min);
  616. }
  617.  
  618. var CollectMoney = function()
  619. {
  620.     var Clicked=[];
  621.     var ToClick=[];
  622.  
  623.     function ClickThem()
  624.     {
  625.         //console.log('Need to click: ',ToClick.length);
  626.         if (ToClick.length>0)
  627.         {
  628.             //console.log('clicking N ',ToClick[0].formAction.split('/').last())
  629.             $(ToClick[0]).click();
  630.             ToClick.shift();
  631.             //console.log('will click again');
  632.             setTimeout(ClickThem,randomInterval(300,900));
  633.  
  634.             window.top.postMessage({ImAlive:true},'*');
  635.         }
  636.         else
  637.         {
  638.             //console.log('nothing to click, checking data');
  639.             CollectData();
  640.         }
  641.     }
  642.  
  643.     function CollectData()
  644.     {
  645.         var btns=$("#harem_whole #harem_left .salary:not('.loads') button");
  646.         //console.log('buttons: ',btns.size())
  647.         btns.each(function (index, element) {
  648.             //console.log(index,element.formAction);
  649.             var gid=Number(element.parentElement.parentElement.parentElement.getAttribute('girl'));
  650.             //console.log('checking '+gid);
  651.             if (!Clicked.includes(gid))
  652.             {
  653.                 Clicked.push(gid);
  654.                 ToClick.push(element);
  655.                 //console.log('added! ',Clicked,ToClick);
  656.             }
  657.         });
  658.  
  659.         console.log('Collected Data: ',Clicked,ToClick);
  660.  
  661.         if (ToClick.length>0 && $('#collect_all_container[cost="0"] button[style="display: inline-block;"]').length != 0)
  662.         // if (ToClick.length>0)
  663.         {
  664.             //console.log('clicking!');
  665.             setTimeout(ClickThem,randomInterval(150,500));
  666.         }
  667.         else//nothing to collect
  668.         {
  669.             var closestTime = undefined;
  670.             var closestGirl = 0;
  671.             var gMap = getGirlsMap();
  672.             if(gMap === undefined)
  673.             {
  674.                 // error
  675.                 console.log("Girls Map was undefined...! Error, manually setting salary time to 2 min.");
  676.                 closestTime = 2*60;
  677.             }
  678.             else
  679.             {
  680.                 try{
  681.                     // Calc. closest time
  682.                     for(var key in gMap)
  683.                     {
  684.                         // undefined comparision is always false so first iteration is false, hence the not(!)
  685.                         if(!(closestTime<gMap[key].gData.pay_in) && !Clicked.includes(key) && gMap[key].gData.pay_in!=0)
  686.                         {
  687.                             closestTime = gMap[key].gData.pay_in;
  688.                             closestGirl = key;
  689.                         }
  690.                     }
  691.                 }
  692.                 catch(exp){
  693.                     // error
  694.                     console.log("Girls Map had undefined property...! Error, manually setting salary time to 2 min.");
  695.                     closestTime = 2*60;
  696.                 }
  697.             }
  698.             if(closestTime === undefined)
  699.             {
  700.                 console.log("closestTime was undefined...! Error, manually setting salary time to 2 min.");
  701.                 closestTime = 2*60;
  702.             }
  703.             var st=Number(Storage().autoSalaryTimer?Storage().autoSalaryTimer:"120");
  704.             if(closestTime <= st )
  705.             {
  706.                 console.log("closestTime is "+closestTime+" ("+closestGirl+")");
  707.                 closestTime = st;
  708.             }
  709.             setTimer('nextSalaryTime',Number(closestTime)+1);
  710.             sessionStorage.autoLoop = "true";
  711.             setTimeout(autoLoop, Number(Storage().autoLoopTimeMili));
  712.         }
  713.     }
  714.     CollectData();
  715. }
  716.  
  717. var getSalary = function () {
  718.     try {
  719.         if(!gotoPage("harem"))
  720.         {
  721.             // Not at Harem screen then goto the Harem screen.
  722.             console.log("Navigating to Harem window.");
  723.             // return busy
  724.             return true;
  725.         }
  726.         else {
  727.             console.log("Detected Harem Screen. Fetching Salary");
  728.             is_cheat_click=function(e) {
  729.                 return false;
  730.             };
  731.             sessionStorage.autoLoop = "false";
  732.             getPremiumSalary();
  733.             CollectMoney();
  734.             // return busy
  735.             return true;
  736.         }
  737.     }
  738.     catch (ex) {
  739.         console.log("Could not collect salary... " + ex);
  740.         // return not busy
  741.         return false;
  742.     }
  743. };
  744.  
  745. var getPremiumSalary = function ()
  746. {
  747.     try {
  748.             if ($('#collect_all_container[cost="0"] button[style="display: inline-block;"]').length === 1)
  749.             {
  750.                 $('#collect_all_container[cost="0"] button[style="display: inline-block;"]').click();
  751.                 console.log('Collected all Premium salary');
  752.             }
  753.             else
  754.             {
  755.                 console.log('No free collect money');
  756.             }
  757.             // return busy
  758.             return true;
  759.     }
  760.     catch (ex) {
  761.         console.log("Could not collect salary... " + ex);
  762.         // return not busy
  763.         return false;
  764.     }
  765. }
  766.  
  767. var doStatUpgrades=function()
  768. {
  769.     //Stats?
  770.     //console.log('stats');
  771.     var Hero=getHero();
  772.     var level=Hero.infos.level;
  773.     var stats=[Hero.infos.carac1,Hero.infos.carac2,Hero.infos.carac3];
  774.     var money=Hero.infos.soft_currency;
  775.     var count=0;
  776.     var M=Storage().autoStats?Number(Storage().autoStats):500000000;
  777.     var MainStat=stats[Hero.infos.class-1];
  778.     var Limit=Hero.infos.level*30;//Hero.infos.level*19+Math.min(Hero.infos.level,25)*21;
  779.     var carac=Hero.infos.class;
  780.     var mp=0;
  781.     var mults=[60,30,10,1];
  782.     for (var car=0; car<3; car++)
  783.     {
  784.         //console.log('stat '+carac);
  785.         var s=stats[carac-1];
  786.         for (var mu=0;mu<5;mu++)
  787.         {
  788.             var mult=mults[mu];
  789.             var price = 5+s*2+(Math.max(0,s-2000)*2)+(Math.max(0,s-4000)*2)+(Math.max(0,s-6000)*2)+(Math.max(0,s-8000)*2);
  790.             price*=mult;
  791.             if (carac==Hero.infos.class)
  792.             {
  793.                 mp=price;
  794.             }
  795.             //console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' price: '+price);
  796.             if ((stats[carac-1]+mult)<=Limit && (money-price)>M && (carac==Hero.infos.class || price<mp/2 || (MainStat+mult)>Limit))
  797.             {
  798.                 count++;
  799.                 console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' [+'+mult+'] price: '+price);
  800.                 money-=price;
  801.                 var params = {
  802.                     class: "Hero",
  803.                     carac: carac,
  804.                     action: "update_stats",
  805.                     nb: mult
  806.                 };
  807.                 hh_ajax(params, function(data) {
  808.  
  809.                 });
  810.                 break;
  811.             }
  812.         }
  813.         carac=(carac+1)%3+1;
  814.     }
  815. }
  816.  
  817. var doShopping=function()
  818. {
  819.     try
  820.     {
  821.         var Hero=getHero();
  822.         var MS='carac'+Hero.infos.class;
  823.         var SS1='carac'+(Hero.infos.class%3+1);
  824.         var SS2='carac'+((Hero.infos.class+1)%3+1);
  825.         var money=Hero.infos.soft_currency;
  826.  
  827.         try
  828.         {
  829.             var shop=JSON.parse(sessionStorage.storeContents);
  830.         }
  831.         catch(watafu)
  832.         {
  833.             sessionStorage.charLevel=0;
  834.             return;
  835.         }
  836.  
  837.         if (!sessionStorage.haveAff)
  838.         {
  839.             sessionStorage.charLevel=0;
  840.             return;
  841.         }
  842.  
  843.         var LGM=Number(Storage().autoLGM);
  844.         var EGM=Number(Storage().autoEGM);
  845.         var LGR=Number(Storage().autoLGR);
  846.         var Exp=Number(Storage().autoExp);
  847.         var Aff=Number(Storage().autoAff);
  848.         var MaxAff=Number(Storage().MaxAff);
  849.         var MaxExp=Number(Storage().MaxExp);
  850.         var HaveAff=Number(sessionStorage.haveAff);
  851.         var HaveExp=Number(sessionStorage.haveExp);
  852.  
  853.         console.log(HaveAff,HaveExp);
  854.  
  855.         if (Storage().autoLGMW==="true" || Storage().autoLGRW==="true" || Storage().autoEGMW==="true")
  856.         {
  857.             //console.log('items');
  858.             var Was=shop[0].length;
  859.             for (var n=shop[0].length-1;n>=0;n--)
  860.             {
  861.  
  862.                 if (Storage().autoLGMW==="true" && money>=LGM+Number(shop[0][n].price) && shop[0][n][MS]>0 && shop[0][n][SS1]==0 && shop[0][n][SS2]==0 && shop[0][n].chance==0 && shop[0][n].endurance==0 && shop[0][n].rarity=='legendary'||
  863.                    Storage().autoEGMW==="true" && money>=EGM+Number(shop[0][n].price) && shop[0][n][MS]>0 && shop[0][n][SS1]==0 && shop[0][n][SS2]==0 && shop[0][n].chance==0 && shop[0][n].endurance==0 && shop[0][n].rarity=='epic'||
  864.                    Storage().autoLGRW==="true" && money>=LGR+Number(shop[0][n].price) && shop[0][n][MS]>0 && shop[0][n][SS1]>0 && shop[0][n][SS2]>0 && shop[0][n].rarity=='legendary')
  865.                 {
  866.                     console.log('wanna buy ',shop[0][n]);
  867.                     if (money>=shop[0][n].price)
  868.                     {
  869.                         console.log("yay?");
  870.                         money-=shop[0][n].price;
  871.                         var params = {
  872.                             class: "Item",
  873.                             action: "buy",
  874.                             id_item: shop[0][n].id_item,
  875.                             type: "armor",
  876.                             who: 1,
  877.                             id_skin: shop[0][n].id_skin,
  878.                             id_equip: shop[0][n].id_equip,
  879.                         };
  880.                         hh_ajax(params, function(data) {
  881.  
  882.                         });
  883.                         shop[0].splice(n,1);
  884.                     }
  885.                     else
  886.                     {
  887.                         console.log("but can't");
  888.                     }
  889.                 }
  890.             }
  891.             if (shop[0].length==0 && Was>0)
  892.             {
  893.                 sessionStorage.charLevel=0;
  894.             }
  895.         }
  896.  
  897.         if (Storage().autoAffW==="true" && HaveAff<MaxAff)
  898.         {
  899.             //console.log('gifts');
  900.             Was=shop[1].length;
  901.             for (var nn=shop[1].length-1;nn>=0;nn--)
  902.             {
  903.                 console.log('wanna buy ',shop[1][nn]);
  904.                     if (money>=Aff+Number(shop[1][nn].price) && money>=shop[1][nn].price)
  905.                     {
  906.                         console.log("yay?");
  907.                         money-=shop[1][nn].price;
  908.                         var params2 = {
  909.                             class: "Item",
  910.                             action: "buy",
  911.                             id_item: shop[1][nn].id_item,
  912.                             type: "gift",
  913.                             who: 1
  914.                         };
  915.                         hh_ajax(params2, function(data) {
  916.  
  917.                         });
  918.                         shop[1].splice(nn,1);
  919.                     }
  920.                     else
  921.                     {
  922.                         console.log("but can't");
  923.                     }
  924.             }
  925.             if (shop[1].length==0 && Was>0)
  926.             {
  927.                 sessionStorage.charLevel=0;
  928.             }
  929.         }
  930.  
  931.         if (Storage().autoExpW==="true" && HaveExp<MaxExp)
  932.         {
  933.             //console.log('books');
  934.             Was=shop[2].length;
  935.             for (var nnn=shop[2].length-1;nnn>=0;nnn--)
  936.             {
  937.                 console.log('wanna buy ',shop[2][nnn]);
  938.                     if (money>=Exp+Number(shop[2][nnn].price) && money>=shop[2][nnn].price)
  939.                     {
  940.                         console.log("yay?");
  941.                         money-=shop[2][nnn].price;
  942.                         var params3 = {
  943.                             class: "Item",
  944.                             action: "buy",
  945.                             id_item: shop[2][nnn].id_item,
  946.                             type: "potion",
  947.                             who: 1
  948.                         };
  949.                         hh_ajax(params3, function(data) {
  950.  
  951.                         });
  952.                         shop[2].splice(nnn,1);
  953.                     }
  954.                     else
  955.                     {
  956.                         console.log("but can't");
  957.                     }
  958.             }
  959.             if (shop[2].length==0 && Was>0)
  960.             {
  961.                 sessionStorage.charLevel=0;
  962.             }
  963.         }
  964.         sessionStorage.storeContents=JSON.stringify(shop);
  965.         unsafeWindow.Hero.infos.soft_currency=money;
  966.     }
  967.     catch (ex)
  968.     {
  969.         console.log(ex);
  970.         sessionStorage.charLevel=0;
  971.     }
  972. }
  973.  
  974. var doBossBattle = function()
  975. {
  976.     var currentPower = getHero().infos.energy_fight;
  977.     if(currentPower < 1)
  978.     {
  979.         //console.log("No power for battle.");
  980.         return;
  981.     }
  982.  
  983.     var TTF;
  984.     if (Storage().plusEvent==="true" && !checkTimer("eventGoing") && sessionStorage.eventTroll)
  985.     {
  986.         TTF=sessionStorage.eventTroll;
  987.         console.log("Event troll fight");
  988.     }
  989.     else if(Storage().trollToFight !== undefined && !isNaN(Storage().trollToFight) && Storage().trollToFight !== "0")
  990.     {
  991.         TTF=Storage().trollToFight;
  992.         console.log("Custom troll fight.");
  993.     }
  994.     else
  995.     {
  996.         TTF=getHero().infos.questing.id_world-1;
  997.         console.log("Last troll fight");
  998.     }
  999.     if (Storage().autoTrollBattleSaveQuest == "true")
  1000.     {
  1001.         TTF=getHero().infos.questing.id_world-1;
  1002.         console.log("Last troll fight for quest item.");
  1003.         Storage().autoTrollBattleSaveQuest == "false";
  1004.     }
  1005.  
  1006.     console.log("Fighting troll N "+TTF);
  1007.     console.log("Going to crush: "+Trollz[Number(TTF)]);
  1008.  
  1009.     // Battles the latest boss.
  1010.     // Navigate to latest boss.
  1011.     //console.log('!!!!!',window.location.href,window.location.href=="/battle.html?id_troll=" + TTF);
  1012.     if(window.location.pathname=="/battle.html" && window.location.search=="?id_troll=" + TTF)
  1013.     {
  1014.         // On the battle screen.
  1015.         CrushThem();
  1016.     }
  1017.     else
  1018.     {
  1019.         console.log("Navigating to chosen Troll.");
  1020.         sessionStorage.autoLoop = "false";
  1021.         location.href = "/battle.html?id_troll=" + TTF;
  1022.         return true;
  1023.     }
  1024. };
  1025.  
  1026. var doChampionStuff=function()
  1027. {
  1028.     var page=getPage();
  1029.     if (page=='champions')
  1030.     {
  1031.         console.log('on champion page');
  1032.         if ($('button[rel=perform].blue_button_L').length==0)
  1033.         {
  1034.             console.log('Something is wrong!');
  1035.             location.href = "/home.html";
  1036.             return true;
  1037.         }
  1038.         else
  1039.         {
  1040.             var TCount=Number($('div.input-field > span')[1].innerText.split(' / ')[1]);
  1041.             var ECount= getHero().infos.energy_quest;
  1042.             console.log("T:"+TCount+" E:"+ECount+" "+(Storage().autoChampsUseEne==="true"))
  1043.             if ( TCount==0)
  1044.             {
  1045.                 console.log("No tickets!");
  1046.                 setTimer('nextChampionTime',15*60);
  1047.                 return false;
  1048.             }
  1049.             else
  1050.             {
  1051.                 if (TCount!=0)
  1052.                 {
  1053.                     console.log("Using ticket");
  1054.                     $('button[rel=perform].blue_button_L').click();
  1055.                 }
  1056.                 setTimeout(function(){gotoPage('champions_map');},500);
  1057.                 return true;
  1058.             }
  1059.         }
  1060.     }
  1061.     else if (page=='champions_map')
  1062.     {
  1063.         console.log('on champion map');
  1064.         var Filter=Storage().autoChampsFilter.split(';').map(s=>Number(s));
  1065.  
  1066.         for (let i=0;i<$('span.stage-bar-tier').length;i++)
  1067.         {
  1068.             let Impression=$('span.stage-bar-tier')[i].getAttribute("hh_title");
  1069.             let Started=Impression.split('/')[0]!="0";
  1070.             let OnTimer=$($('a.champion-lair div.champion-lair-name')[i+1]).find('div[rel=timer]').length>0;
  1071.             let Filtered=Filter.includes(i+1);
  1072.             console.log("Champion "+(i+1)+" ["+Impression+"]"+(Started?" Started;":" Not started;")+(OnTimer?" on timer;":" not on timer;")+(Filtered?" Included in filter":" Excluded from filter"));
  1073.  
  1074.             if (Started && !OnTimer && Filtered)
  1075.             {
  1076.                 console.log("Let's do him!");
  1077.                 window.location = window.location.origin + '/champions/'+(i+1);
  1078.                 return true;
  1079.             }
  1080.         }
  1081.         console.log("No good candidate");
  1082.         setTimer('nextChampionTime',15*60);
  1083.         return false;
  1084.     }
  1085.     else
  1086.     {
  1087.         gotoPage('champions_map');
  1088.         return true;
  1089.     }
  1090. }
  1091.  
  1092. var doBattle = function () {
  1093.     //console.log("Performing auto battle.");
  1094.     // Confirm if on correct screen.
  1095.     var page = getPage();
  1096.     if(page === "arena")
  1097.     {
  1098.         if ($("#arena[class='canvas']").length === 1) {
  1099.             // Oponent choose screen
  1100.             console.log("On opponent choose screen.");
  1101.             if(document.getElementById("popups").style.display === "block")
  1102.             {
  1103.                 console.log("Popup detetcted. Refresh page.");
  1104.                 unsafeWindow.reload();
  1105.                 return;
  1106.             }
  1107.             else{
  1108.                 console.log("No popups.");
  1109.             }
  1110.  
  1111.             var fought = sessionStorage.fought?sessionStorage.fought:0;
  1112.             console.log('already fought: '+fought);
  1113.             if(fought>=3)
  1114.             {
  1115.                 console.log("No arena opponents found, storing nextArenaTime...");
  1116.                 var arenatime = 0;
  1117.                 for(var e in unsafeWindow.HHTimers.timers){
  1118.                     try{
  1119.                         if(unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".arena_refresh_counter"))
  1120.                         arenatime=unsafeWindow.HHTimers.timers[e];
  1121.                        }
  1122.                     catch(e){}
  1123.                 }
  1124.                 arenatime = arenatime.remainingTime;
  1125.                 setTimer('nextArenaTime',Number(arenatime)+1);
  1126.                 sessionStorage.fought=0;
  1127.                 //location.href = "/home.html";
  1128.                 return;
  1129.             }
  1130.             //selbutton[0].click();
  1131.             sessionStorage.autoLoop = "false";
  1132.             sessionStorage.fought=Number(fought)+1;
  1133.             window.location = window.location.origin + '/battle.html?id_arena='+fought;
  1134.         }
  1135.     }
  1136.     else if (page==="battle")
  1137.     {
  1138.         CrushThem();
  1139.     }
  1140.     else
  1141.     {
  1142.         // Switch to the correct screen
  1143.         console.log("Switching to battle screen.");
  1144.         gotoPage("arena");
  1145.         return;
  1146.     }
  1147. };
  1148.  
  1149. var doLeagueBattle = function () {
  1150.     //console.log("Performing auto leagues.");
  1151.     // Confirm if on correct screen.
  1152.     var currentPower = getHero().infos.energy_challenge;
  1153.     var ltime;
  1154.     var endtime;
  1155.  
  1156.     var page = getPage();
  1157.     if(page==='battle')
  1158.     {
  1159.         // On the battle screen.
  1160.         //$('#leagues_middle .forced_info button[rel="claim"]').click(); //click reward
  1161.         CrushThem();
  1162.     }
  1163.     else if(page === "leaderboard")
  1164.     {
  1165.         //$('#leagues_middle .forced_info button[rel="claim"]').click(); //click reward
  1166.  
  1167.        // console.log('ls! '+$('h4.leagues').size());
  1168.         $('h4.leagues').each(function(){this.click();});
  1169.         var e;
  1170.         if(currentPower < 1)
  1171.         {
  1172.             console.log("No power for leagues.");
  1173.             for(e in unsafeWindow.HHTimers.timers){
  1174.                try{
  1175.                    if(unsafeWindow.HHTimers.timers[e].type=="energy_challenge")
  1176.                        ltime=unsafeWindow.HHTimers.timers[e];
  1177.                    }
  1178.                catch(e){}
  1179.                }
  1180.             ltime = Number(ltime.remainingTime)+15;
  1181.             setTimer('nextLeaguesTime',ltime);
  1182.             return;
  1183.         }
  1184.  
  1185.         while ($("span[sort_by='level'][select='asc']").size()==0)
  1186.         {
  1187.             console.log('resorting');
  1188.             $("span[sort_by='level']").each(function(){this.click()});
  1189.         }
  1190.         console.log('parsing enemies');
  1191.         var Data=[];
  1192.         $(".leadTable[sorting_table] tr").each(function(){if (this.cells[3].innerHTML==='0/3' || this.cells[3].innerHTML==='1/3' || this.cells[3].innerHTML==='2/3'){Data.push(this);}});
  1193.         if (Data.length==0)
  1194.         {
  1195.             endtime=35*60;
  1196.             console.log('No valid targets!');
  1197.             for(e in unsafeWindow.HHTimers.timers)
  1198.             {
  1199.                try
  1200.                 {
  1201.                     if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".league_end_in"))
  1202.                         endtime=unsafeWindow.HHTimers.timers[e].remainingTime;
  1203.                 }
  1204.                catch(e){}
  1205.             }
  1206.             setTimer('nextLeaguesTime',endtime +1);
  1207.         }
  1208.         else
  1209.         {
  1210.             console.log(Data.length+' valid targets!');
  1211.             sessionStorage.autoLoop = "false";
  1212.             console.log("Hit?");
  1213.             location.href = "/battle.html?league_battle=1&id_member=" + $(Data[0]).attr("sorting_id")
  1214.         }
  1215.     }
  1216.     else if (page==="battle")
  1217.     {
  1218.         CrushThem();
  1219.     }
  1220.     else
  1221.     {
  1222.         // Switch to the correct screen
  1223.         console.log("Switching to leagues screen.");
  1224.         gotoPage("leaderboard");
  1225.         return;
  1226.     }
  1227. };
  1228.  
  1229. var  CrushThem = function()
  1230. {
  1231.     if (getPage() === "battle") {
  1232.         // On battle page.
  1233.         if ($("#rewards_popup .blue_text_button").size()>0)
  1234.         {
  1235.             $("#rewards_popup .blue_text_button").click();
  1236.         }
  1237.         if ($("#rewards_popup .blue_button_L").size()>0)
  1238.         {
  1239.             $("#rewards_popup .blue_button_L").click();
  1240.         }
  1241.  
  1242.         //console.log("On Battle Page.");
  1243.         if ($("#battle[class='canvas']").length === 1) {
  1244.             // Battle screen
  1245.             console.log("On battle screen.");
  1246.             // get button with no autofight, i.e. no koban
  1247.             var battleButton = $('#battle button[rel="launch"]:not(.autofight)');
  1248.             //console.log(battleButton.get());
  1249.             //console.log(battleButton);
  1250.             var currentPower = getHero().infos.energy_fight;
  1251.             if(battleButton === undefined){
  1252.                 console.log("Battle Button was undefined. Disabling all auto-battle.");
  1253.                 document.getElementById("autoBattleCheckbox").checked = false;
  1254.                 document.getElementById("autoArenaCheckbox").checked = false;
  1255.                 if (sessionStorage.questRequirement === "battle")
  1256.                 {
  1257.                     document.getElementById("autoQuestCheckbox").checked = false;
  1258.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  1259.                 }
  1260.                 return;
  1261.             }
  1262.             var battle_price = battleButton.find('span').size()>0?battleButton.attr("price_fe"):0;
  1263.  
  1264.             if (location.search.split("league_battle=")[1])
  1265.             {
  1266.                 currentPower=getHero().infos.energy_challenge;
  1267.             }
  1268.             if(battle_price === undefined){
  1269.                 console.log("Could not detect battle button price. Error.");
  1270.                 console.log("Disabling all auto-battle.");
  1271.                 document.getElementById("autoBattleCheckbox").checked = false;
  1272.                 document.getElementById("autoArenaCheckbox").checked = false;
  1273.                 if (sessionStorage.questRequirement === "battle")
  1274.                 {
  1275.                     document.getElementById("autoQuestCheckbox").checked = false;
  1276.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  1277.                 }
  1278.                 return;
  1279.             }
  1280.             console.log("battle price: "+battle_price+"P")
  1281.             if(currentPower >= battle_price)
  1282.             {
  1283.                 // We have the power.
  1284.                 is_cheat_click=function(e) {
  1285.                     return false;
  1286.                 };
  1287.                 battleButton.click();
  1288.                 // Skip
  1289.                 setTimeout(function(){$("#battle_middle button[rel='skip']").click();},2000);
  1290.                 setTimeout(function(){$("#rewards_popup .blue_text_button").click();$("#rewards_popup .blue_button_L").click();},3500);
  1291.  
  1292.                 if (sessionStorage.questRequirement === "battle") {
  1293.                     // Battle Done.
  1294.                     sessionStorage.questRequirement = "none";
  1295.                 }
  1296.  
  1297.                 location.href = "/home.html";
  1298.                 return true;
  1299.             }
  1300.             else
  1301.             {
  1302.                 // We need more power.
  1303.                 console.log("Battle requires "+battle_price+" power.");
  1304.                 sessionStorage.battlePowerRequired = battle_price;
  1305.                 if(sessionStorage.questRequirement === "battle")sessionStorage.questRequirement = "P"+battle_price;
  1306.             }
  1307.         }
  1308.         else {
  1309.             console.log("Could not identify battle screen.");
  1310.             if (sessionStorage.questRequirement === "battle") sessionStorage.questRequirement = "errorInAutoBattle";
  1311.             return;
  1312.         }
  1313.     }
  1314. }
  1315.  
  1316. var setTimer=function(name, seconds)
  1317. {
  1318.     var ND=new Date().getTime() + seconds * 1000;
  1319.     Timers[name]=ND;
  1320.     sessionStorage.Timers=JSON.stringify(Timers);
  1321.     console.log(name+" set to "+toHHMMSS(ND/1000-new Date().getTimezoneOffset()*60)+' ('+ toHHMMSS(seconds)+')');
  1322. }
  1323.  
  1324. var clearTimer=function(name)
  1325. {
  1326.     delete Timers[name];
  1327.     sessionStorage.Timers=JSON.stringify(Timers);
  1328. }
  1329.  
  1330. var checkTimer=function(name)
  1331. {
  1332.     if (!Timers[name])
  1333.     {
  1334.         return true;
  1335.     }
  1336.     if (Timers[name]<new Date())
  1337.     {
  1338.         return true;
  1339.     }
  1340.     return false;
  1341. }
  1342.  
  1343. var getSecondsLeft=function(name)
  1344. {
  1345.     if (!Timers[name])
  1346.     {
  1347.         return 0;
  1348.     }
  1349.     return Math.ceil(Timers[name]/1000)-Math.ceil(new Date().getTime()/1000);
  1350. }
  1351.  
  1352. var getTimeLeft=function(name)
  1353. {
  1354.     if (!Timers[name])
  1355.     {
  1356.         return "No timer";
  1357.     }
  1358.     var diff=getSecondsLeft(name);
  1359.     if (diff<=0)
  1360.     {
  1361.         return "Time's up!";
  1362.     }
  1363.     return toHHMMSS(diff);
  1364. }
  1365.  
  1366.  
  1367.  
  1368. var updateData = function () {
  1369.     //console.log("updating UI");
  1370.  
  1371.     var trollOptions = document.getElementById("autoTrollSelector");
  1372.     Storage().autoTrollSelectedIndex = trollOptions.selectedIndex;
  1373.     Storage().trollToFight = trollOptions.value;
  1374.     Storage().plusEvent = document.getElementById("plusEvent").checked;
  1375.     Storage().autoSalary = document.getElementById("autoSalaryCheckbox").checked;
  1376.     Storage().autoSalaryTimer = document.getElementById("autoSalaryTextbox").value;
  1377.     Storage().autoContest = document.getElementById("autoContestCheckbox").checked;
  1378.     //nextPoPowerTime
  1379.     Storage().autoPoPower = document.getElementById("autoPoPowerCheckbox").checked;
  1380.     Storage().autoMission = document.getElementById("autoMissionCheckbox").checked;
  1381.     Storage().autoMissionC = document.getElementById("autoMissionCollect").checked;
  1382.     Storage().autoQuest = document.getElementById("autoQuestCheckbox").checked;
  1383.     Storage().autoTrollBattle = document.getElementById("autoBattleCheckbox").checked;
  1384.     Storage().eventTrollOrder = document.getElementById("eventTrollOrder").value;
  1385.     Storage().buyCombTimer = document.getElementById("buyCombTimer").value;
  1386.     Storage().autoArenaBattle = document.getElementById("autoArenaCheckbox").checked;
  1387.     Storage().autoLeagues = document.getElementById("autoLeagues").checked;
  1388.     Storage().autoStats = document.getElementById("autoStats").value;
  1389.     Storage().paranoia = document.getElementById("paranoia").checked;
  1390.     Storage().autoFreePachinko = document.getElementById("autoFreePachinko").checked;
  1391.     Storage().autoExp = document.getElementById("autoExp").value;
  1392.     Storage().autoExpW = document.getElementById("autoExpW").checked;
  1393.     Storage().MaxExp = document.getElementById("maxExp").value;
  1394.     Storage().autoAff = document.getElementById("autoAff").value;
  1395.     Storage().autoAffW = document.getElementById("autoAffW").checked;
  1396.     Storage().MaxAff = document.getElementById("maxAff").value;
  1397.     Storage().autoLGM = document.getElementById("autoLGM").value;
  1398.     Storage().autoLGMW = document.getElementById("autoLGMW").checked;
  1399.     Storage().autoLGR = document.getElementById("autoLGR").value;
  1400.     Storage().autoLGRW = document.getElementById("autoLGRW").checked;
  1401.     Storage().autoEGM = document.getElementById("autoEGM").value;
  1402.     Storage().autoEGMW = document.getElementById("autoEGMW").checked;
  1403.     Storage().showInfo = document.getElementById("showInfo").checked;
  1404.     Storage().autoChamps = document.getElementById("autoChamps").checked;
  1405.     Storage().autoChampsUseEne = document.getElementById("autoChampsUseEne").checked;
  1406.     Storage().autoChampsFilter = document.getElementById("autoChampsFilter").value;
  1407.  
  1408.     Storage().spendKobans0 = document.getElementById("spendKobans0").checked;
  1409.     Storage().spendKobans1 = document.getElementById("spendKobans1").checked && Storage().spendKobans0=="true";
  1410.     document.getElementById("spendKobans1").checked=Storage().spendKobans1=="true";
  1411.     Storage().spendKobans2 = document.getElementById("spendKobans2").checked && Storage().spendKobans1=="true" && Storage().spendKobans0=="true"
  1412.     document.getElementById("spendKobans2").checked=Storage().spendKobans2=="true";
  1413.  
  1414.     Storage().buyCombat=document.getElementById("buyCombat").checked && Storage().spendKobans2=="true" && Storage().spendKobans1=="true" && Storage().spendKobans0=="true"
  1415.     document.getElementById("buyCombat").checked=Storage().buyCombat=="true";
  1416.     Storage().kobanBank=document.getElementById("kobanBank").value;
  1417.  
  1418.     localStorage.settPerTab = document.getElementById("settPerTab").checked;
  1419.  
  1420.     Storage().master=document.getElementById("master").checked;
  1421.  
  1422.     if (Storage().showInfo=="true")
  1423.     {
  1424.         var Tegzd='';
  1425.         Tegzd+='Master: '+(Storage().master==="true"?"ON":"OFF");
  1426.         if (Storage().paranoia=="true")
  1427.         {
  1428.             Tegzd+=(Tegzd.length>0?'\r\n':'')+sessionStorage.pinfo+': '+getTimeLeft('paranoiaSwitch');
  1429.         }
  1430.         if (Storage().autoSalary=="true")
  1431.         {
  1432.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Salary check: '+getTimeLeft('nextSalaryTime');
  1433.         }
  1434.         if (Storage().autoArenaBattle=="true")
  1435.         {
  1436.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Arena fight: '+getTimeLeft('nextArenaTime');
  1437.         }
  1438.         if (Storage().autoLeagues=="true")
  1439.         {
  1440.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'League fight: '+getTimeLeft('nextLeaguesTime');
  1441.         }
  1442.         if (Storage().autoChamps=="true")
  1443.         {
  1444.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Champions check: '+getTimeLeft('nextChampionTime');
  1445.         }
  1446.         //if (autoBuy())
  1447.         {
  1448.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Shop update: '+getTimeLeft('nextShopTime');
  1449.         }
  1450.         if (Storage().autoMission=="true")
  1451.         {
  1452.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Mission: '+getTimeLeft('nextMissionTime');
  1453.         }
  1454.         if (Storage().autoContest=="true")
  1455.         {
  1456.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Contest: '+getTimeLeft('nextContestTime');
  1457.         }
  1458.         //nextPoPowerTime
  1459.         if (Storage().autoPoPower=="true")
  1460.         {
  1461.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'PoPower: '+getTimeLeft('nextPoPowerTime');
  1462.         }
  1463.         if (Storage().autoFreePachinko=="true")
  1464.         {
  1465.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Great Pachinko: '+getTimeLeft('nextPachinkoTime');
  1466.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Mythic Pachinko: '+getTimeLeft('nextPachinko2Time');
  1467.         }
  1468.         if (Tegzd.length>0)
  1469.         {
  1470.             document.getElementById('pInfo').style.display='block';
  1471.             document.getElementById('pInfo').textContent=Tegzd;
  1472.         }
  1473.         else
  1474.         {
  1475.             document.getElementById('pInfo').style.display='none';
  1476.         }
  1477.     }
  1478.     else
  1479.     {
  1480.         document.getElementById('pInfo').style.display='none';
  1481.     }
  1482. };
  1483.  
  1484. var getPachinko = function(){
  1485.     try {
  1486.         if(!gotoPage("pachinko"))
  1487.         {
  1488.             // Not at Pachinko screen then goto the Pachinko screen.
  1489.             console.log("Navigating to Pachinko window.");
  1490.             return;
  1491.         }
  1492.         else {
  1493.             console.log("Detected Pachinko Screen. Fetching Pachinko");
  1494.  
  1495.                 console.log('to great');
  1496.                 $('.game-simple-block[type-pachinko=great]')[0].click();
  1497.  
  1498.             if ($('#playzone-replace-info button[free="0"]')[0])
  1499.             {
  1500.                 console.log('Not ready yet');
  1501.             }
  1502.             else
  1503.             {
  1504.                 $('#playzone-replace-info button[free="1"]')[0].click();
  1505.             }
  1506.             var npach;
  1507.             for(var e in unsafeWindow.HHTimers.timers){
  1508.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".pachinko_change"))
  1509.                     npach=unsafeWindow.HHTimers.timers[e].remainingTime;
  1510.             }
  1511.             if(npach !== undefined || npach !== 0)
  1512.             {
  1513.                 setTimer('nextPachinkoTime',Number(npach)+1);
  1514.             }
  1515.             else
  1516.             {
  1517.                 clearTimer('nextPachinkoTime');
  1518.             }
  1519.         }
  1520.     }
  1521.     catch (ex) {
  1522.         console.log("Could not collect Great Pachinko... " + ex);
  1523.     }
  1524. };
  1525.  
  1526. var getPachinko2 = function(){
  1527.     try {
  1528.         if(!gotoPage("pachinko"))
  1529.         {
  1530.             // Not at Pachinko screen then goto the Pachinko screen.
  1531.             console.log("Navigating to Pachinko window.");
  1532.             return;
  1533.         }
  1534.         else {
  1535.             console.log("Detected Pachinko Screen. Fetching Pachinko");
  1536.  
  1537.                 console.log('to mythic');
  1538.                 $('.game-simple-block[type-pachinko=mythic]')[0].click();
  1539.  
  1540.             if ($('#playzone-replace-info button[free="0"]')[0])
  1541.             {
  1542.                 console.log('Not ready yet');
  1543.             }
  1544.             else
  1545.             {
  1546.                 $('#playzone-replace-info button[free="1"]')[0].click();
  1547.             }
  1548.             var npach;
  1549.             for(var e in unsafeWindow.HHTimers.timers){
  1550.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith('.game-simple-block[type-pachinko="mythic"]'))
  1551.                     npach=unsafeWindow.HHTimers.timers[e].remainingTime;
  1552.             }
  1553.             if(npach !== undefined || npach !== 0)
  1554.             {
  1555.                 setTimer('nextPachinko2Time',Number(npach)+1);
  1556.             }
  1557.             else
  1558.             {
  1559.                 clearTimer('nextPachinko2Time');
  1560.             }
  1561.         }
  1562.     }
  1563.     catch (ex) {
  1564.         console.log("Could not collect Mythic Pachinko... " + ex);
  1565.     }
  1566. };
  1567.  
  1568. var updateShop=function()
  1569. {
  1570.         if(!gotoPage("shop"))
  1571.         {
  1572.             console.log("Navigating to Market window.");
  1573.             return true;
  1574.         }
  1575.         else {
  1576.             console.log("Detected Market Screen. Fetching Assortment");
  1577.  
  1578.             var sasA=[];
  1579.             var sasG=[];
  1580.             var sasP=[];
  1581.             //$('#shop div.armor .slot').each(function(){if (this.dataset.d)sasA.push(JSON.parse(this.dataset.d));});
  1582.             $('#shop div.gift .slot').each(function(){if (this.dataset.d)sasG.push(JSON.parse(this.dataset.d));});
  1583.             $('#shop div.potion .slot').each(function(){if (this.dataset.d)sasP.push(JSON.parse(this.dataset.d));});
  1584.  
  1585.             var HaveAff=0;
  1586.             var HaveExp=0;
  1587.             $('#inventory div.gift .slot').each(function(){if (this.dataset.d) { var d=JSON.parse(this.dataset.d); HaveAff+=d.count*d.value;}});
  1588.             $('#inventory div.potion .slot').each(function(){if (this.dataset.d) { var d=JSON.parse(this.dataset.d); HaveExp+=d.count*d.value;}});
  1589.  
  1590.             sessionStorage.haveAff=HaveAff;
  1591.             sessionStorage.haveExp=HaveExp;
  1592.  
  1593.             console.log('counted',sessionStorage.haveAff,sessionStorage.haveExp);
  1594.  
  1595.             sessionStorage.storeContents = JSON.stringify([sasA,sasG,sasP]);
  1596.             sessionStorage.charLevel=getHero().infos.level;
  1597.  
  1598.             var nshop;
  1599.             for(var e in unsafeWindow.HHTimers.timers){
  1600.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".shop_count"))
  1601.                     nshop=unsafeWindow.HHTimers.timers[e].remainingTime;
  1602.             }
  1603.             if(nshop !== undefined && nshop !== 0)
  1604.             {
  1605.                 console.log(nshop);
  1606.                 setTimer('nextShopTime',Number(nshop)+1);
  1607.             }
  1608.             else
  1609.             {
  1610.                 setTimer('nextShopTime',60);
  1611.             }
  1612.         }
  1613.     return false;
  1614. }
  1615.  
  1616. var toHHMMSS = function (secs)  {
  1617.     var sec_num = parseInt(secs, 10);
  1618.     var days   = Math.floor(sec_num / 86400);
  1619.     var hours   = Math.floor(sec_num / 3600) % 24;
  1620.     var minutes = Math.floor(sec_num / 60) % 60;
  1621.     var seconds = sec_num % 60;
  1622.     var n=0;
  1623.     return [days,hours,minutes,seconds]
  1624.         .map(v => v < 10 ? "0" + v : v)
  1625.         .filter((v,i) => {if (v !== "00"){n++; return true;} return n > 0})
  1626.         .join(":");
  1627. }
  1628.  
  1629. var flipParanoia=function()
  1630. {
  1631.     var burst=getBurst();
  1632.  
  1633.     var Setting=Storage().paranoiaSettings;
  1634.  
  1635.     var S1=Setting.split('/').map(s=>s.split('|').map(s=>s.split(':')));
  1636.  
  1637.     var toNextSwitch;
  1638.     var period;
  1639.     var n = new Date().getHours();
  1640.     S1[2].some(x => {if (n<x[0]) {period=x[1]; return true;}});
  1641.  
  1642.     if (burst && getHero().infos.energy_fight!=0 && Storage().autoTrollBattle=='true') //double(or more) burst if we want to fight
  1643.     {
  1644.         burst=false;
  1645.     }
  1646.  
  1647.     if (burst)
  1648.     {
  1649.         //going into hiding
  1650.         sessionStorage.burst="false";
  1651.  
  1652.         var periods=Object.assign(...S1[1].map(d => ({[d[0]]: d[1].split('-')})));
  1653.  
  1654.         toNextSwitch=randomInterval(Number(periods[period][0]),Number(periods[period][1]));
  1655.         if (toNextSwitch<=1800 && Storage().autoArenaBattle == "true")
  1656.         {
  1657.             var sl=getSecondsLeft("nextArenaTime");
  1658.             toNextSwitch=toNextSwitch<sl?toNextSwitch:sl;
  1659.         }
  1660.     }
  1661.     else
  1662.     {
  1663.         //if (getPage()!='home') return;
  1664.         //going to work
  1665.         sessionStorage.autoLoop = "false";
  1666.         sessionStorage.burst="true";
  1667.         var b=S1[0][0][0].split('-');
  1668.         toNextSwitch=randomInterval(Number(b[0]),Number(b[1]));
  1669.     }
  1670.     var ND=new Date().getTime() + toNextSwitch * 1000;
  1671.     var offs=new Date().getTimezoneOffset();
  1672.     var message=period+(burst?" rest":" burst");
  1673.     console.log("PARANOIA: "+message);
  1674.     sessionStorage.pinfo=message;
  1675.  
  1676.     setTimer('paranoiaSwitch',toNextSwitch);
  1677.     if (sessionStorage.burst=="true")
  1678.     {
  1679.         if (hh_nutaku)
  1680.         {
  1681.             window.top.postMessage({reloadMe:true},'*');
  1682.         }
  1683.         else
  1684.         {
  1685.             window.top.location.reload();
  1686.         }
  1687.     }
  1688. }
  1689.  
  1690. var autoLoop = function () {
  1691.     updateData();
  1692.     if (!sessionStorage.questRequirement)
  1693.     {
  1694.         sessionStorage.questRequirement="none";
  1695.     }
  1696.     if (!sessionStorage.userLink)
  1697.     {
  1698.         sessionStorage.userLink="none"
  1699.     }
  1700.     if (!sessionStorage.battlePowerRequired)
  1701.     {
  1702.         sessionStorage.battlePowerRequired="0";
  1703.     }
  1704.  
  1705.     var busy = false;
  1706.     var page = window.location.href;
  1707.     var currentPower = getHero().infos.energy_fight;
  1708.  
  1709.     var burst=getBurst();
  1710.  
  1711.     if (burst /*|| checkTimer('nextMissionTime')*/)
  1712.     {
  1713.         if(Storage().autoFreePachinko === "true" && busy === false){
  1714.         // Navigate to pachinko
  1715.  
  1716.             if (checkTimer("nextPachinkoTime")) {
  1717.                 console.log("Time to fetch Great Pachinko.");
  1718.                 getPachinko();
  1719.                 busy = true;
  1720.             }
  1721.             if (checkTimer("nextPachinko2Time")) {
  1722.                 console.log("Time to fetch Mythic Pachinko.");
  1723.                 getPachinko2();
  1724.                 busy = true;
  1725.             }
  1726.         }
  1727.         if(Storage().autoLeagues === "true" && getHero().infos.level>=20 && busy === false ){
  1728.             // Navigate to leagues
  1729.             if (checkTimer('nextLeaguesTime')) {
  1730.                 console.log("Time to fight in Leagues.");
  1731.                 doLeagueBattle();
  1732.                 busy = true;
  1733.             }
  1734.         }
  1735.         if(Storage().autoContest === "true" && busy === false){
  1736.             if (checkTimer('nextContestTime') || unsafeWindow.has_contests_datas ||$(".contest .ended button[rel='claim']").size()>0){
  1737.                 console.log("Time to get contest rewards.");
  1738.                 busy = doContestStuff();
  1739.             }
  1740.         }
  1741.         //nextPoPowerTime
  1742.         if(Storage().autoPoPower === "true" && busy === false){
  1743.             if (checkTimer('nextPoPowerTime') || unsafeWindow.has_contests_datas ||$(".pop .ended button[rel='claim']").size()>0){
  1744.                 console.log("Time to get popower rewards.");
  1745.                 busy = doPoPowerStuff();
  1746.             }
  1747.         }
  1748.         if(Storage().autoMission === "true" && busy === false){
  1749.             if (checkTimer('nextMissionTime')){
  1750.                 console.log("Time to do missions.");
  1751.                 busy = doMissionStuff();
  1752.             }
  1753.         }
  1754.  
  1755.         if (Storage().autoQuest === "true" && busy === false) {
  1756.             if (sessionStorage.questRequirement === "battle") {
  1757.                 console.log("Quest requires battle.");
  1758.                 console.log("prepare to save one battle for quest");
  1759.                 Storage().autoTrollBattleSaveQuest = "true";
  1760.                 doBossBattle();
  1761.                 busy = true;
  1762.             }
  1763.             else if (sessionStorage.questRequirement[0] === '$') {
  1764.                 if (Number(sessionStorage.questRequirement.substr(1)) < getHero().infos.soft_currency) {
  1765.                     // We have enough money... requirement fulfilled.
  1766.                     console.log("Continuing quest, required money obtained.");
  1767.                     sessionStorage.questRequirement = "none";
  1768.                     proceedQuest();
  1769.                     busy = true;
  1770.                 }
  1771.                 else {
  1772.                     if(isNaN(sessionStorage.questRequirement.substr(1)))
  1773.                     {
  1774.                         console.log(sessionStorage.questRequirement);
  1775.                         sessionStorage.questRequirement = "none";
  1776.                         console.log("Invalid money in session storage quest requirement !");
  1777.                     }
  1778.                     else{
  1779.                         // Else we need more money.
  1780.                         //console.log("Need money for quest, cannot continue. Turning ON AutoSalary.");
  1781.                         Storage().autoQuest = "true";
  1782.                     }
  1783.                     busy = false;
  1784.                 }
  1785.             }
  1786.             else if (sessionStorage.questRequirement[0] === '*') {
  1787.                 var energyNeeded = Number(sessionStorage.questRequirement.substr(1));
  1788.                 var energyCurrent = getHero().infos.energy_quest;
  1789.                 if (energyNeeded <= energyCurrent) {
  1790.                     // We have enough energy... requirement fulfilled.
  1791.                     console.log("Continuing quest, required energy obtained.");
  1792.                     sessionStorage.questRequirement = "none";
  1793.                     proceedQuest();
  1794.                     busy = true;
  1795.                 }
  1796.                 // Else we need energy, just wait.
  1797.                 else {
  1798.                     busy = false;
  1799.                     //console.log("Replenishing energy for quest.(" + energyNeeded + " needed)");
  1800.                 }
  1801.             }
  1802.             else if (sessionStorage.questRequirement[0] === 'P')
  1803.             {
  1804.                 // Battle power required.
  1805.                 var neededPower = Number(sessionStorage.questRequirement.substr(1));
  1806.                 if(currentPower < neededPower)
  1807.                 {
  1808.                     console.log("Quest requires "+neededPower+" Battle Power for advancement. Waiting...");
  1809.                     busy = false;
  1810.                 }
  1811.                 else
  1812.                 {
  1813.                     console.log("Battle Power obtained, resuming quest...");
  1814.                     sessionStorage.questRequirement = "none";
  1815.                     proceedQuest();
  1816.                     busy = true;
  1817.                 }
  1818.             }
  1819.             else if (sessionStorage.questRequirement === "unknownQuestButton") {
  1820.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due to unknown quest button. Please manually proceed the current quest screen.");
  1821.                 document.getElementById("autoQuestCheckbox").checked = false;
  1822.                 Storage().autoQuest = "false";
  1823.                 sessionStorage.questRequirement = "none";
  1824.                 busy = false;
  1825.             }
  1826.             else if (sessionStorage.questRequirement === "errorInAutoBattle") {
  1827.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due errors in AutoBattle. Please manually proceed the current quest screen.");
  1828.                 document.getElementById("autoQuestCheckbox").checked = false;
  1829.                 Storage().autoQuest = "false";
  1830.                 sessionStorage.questRequirement = "none";
  1831.                 busy = false;
  1832.             }
  1833.             else if(sessionStorage.questRequirement === "none")
  1834.             {
  1835.                 //console.log("NONE req.");
  1836.                 busy = true;
  1837.                 proceedQuest();
  1838.             }
  1839.             else
  1840.             {
  1841.                 console.log("Invalid quest requirement : "+sessionStorage.questRequirement);
  1842.                 busy=false;
  1843.             }
  1844.         }
  1845.         else if(Storage().autoQuest === "false"){sessionStorage.questRequirement = "none";}
  1846.  
  1847.         if(Storage().autoArenaBattle === "true" && busy === false)
  1848.         {
  1849.             if (/*unsafeWindow.arena_data && unsafeWindow.arena_data.active_opponent*/$('a[rel=arena] span.button-notification-icon').size()>0)
  1850.             {
  1851.                 console.log('Missed one in arena!');
  1852.                 setTimer('nextArenaTime',0);
  1853.             }
  1854.             if(checkTimer("nextArenaTime"))
  1855.             {
  1856.                 console.log("Time to fight in arena.");
  1857.                 doBattle();
  1858.                 busy = true;
  1859.             }
  1860.         }
  1861.  
  1862.  
  1863.         if(Storage().autoTrollBattle === "true" && getHero().infos.questing.id_world>0)
  1864.         {
  1865.             if(busy === false && currentPower >= Number(sessionStorage.battlePowerRequired) && currentPower > 0)
  1866.             {
  1867.                 sessionStorage.battlePowerRequired = "0";
  1868.                 busy = true;
  1869.                 if(Storage().autoQuest === "true")
  1870.                 {
  1871.                     if(sessionStorage.questRequirement[0] === 'P')
  1872.                     {
  1873.                         console.log("AutoBattle disabled for power collection for AutoQuest.");
  1874.                         document.getElementById("autoBattleCheckbox").checked = false;
  1875.                         Storage().autoTrollBattle = "false";
  1876.                         busy = false;
  1877.                     }
  1878.                     else
  1879.                     {
  1880.                         doBossBattle();
  1881.                     }
  1882.                 }
  1883.                 else
  1884.                 {
  1885.                     doBossBattle();
  1886.                 }
  1887.             }
  1888.         }
  1889.         else{sessionStorage.battlePowerRequired = "0";}
  1890.  
  1891.         var ECt= getHero().infos.energy_quest;
  1892.         if (ECt>=60 && (Storage().autoChampsUseEne==="true"))
  1893.             {
  1894.                 console.log('Buying ticket with energy');
  1895.                 var amount = 1;
  1896.                 var currency = 'energy_quest';
  1897.                 var params = {
  1898.                     namespace: 'h\\Champions',
  1899.                     class: 'Champions',
  1900.                     action: 'buy_ticket',
  1901.                     currency: currency,
  1902.                     amount: amount
  1903.                 };
  1904.  
  1905.                 hh_ajax(params, function(data) {
  1906.                     anim_number($('.tickets_number_amount'), data.tokens - amount, amount);
  1907.                     Hero.updates(data.heroChangesUpdate);
  1908.                 });
  1909.         }
  1910.  
  1911.         if (busy==false && Storage().autoChamps==="true" && checkTimer('nextChampionTime'))
  1912.         {
  1913.             console.log("Time to check on champions!");
  1914.             busy=doChampionStuff();
  1915.         }
  1916.  
  1917.         if (/*autoBuy() &&*/ busy===false)
  1918.         {
  1919.             if (sessionStorage.charLevel===undefined)
  1920.             {
  1921.                 sessionStorage.charLevel=0;
  1922.             }
  1923.             if (checkTimer('nextShopTime') || sessionStorage.charLevel<getHero().infos.level) {
  1924.                 console.log("Time to check shop.");
  1925.                 busy = updateShop();
  1926.             }
  1927.         }
  1928.  
  1929.         if (Storage().autoSalary === "true" && busy === false) {
  1930.             if (checkTimer("nextSalaryTime")) {
  1931.                 console.log("Time to fetch salary.");
  1932.                 busy = getSalary();
  1933.             }
  1934.         }
  1935.  
  1936.         if(busy === true && sessionStorage.userLink==="none" && !window.location.pathname.startsWith("/quest"))
  1937.         {
  1938.             sessionStorage.userLink = page;
  1939.         }
  1940.         else if(sessionStorage.userLink !=="none" && busy === false)
  1941.         {
  1942.             console.log("Restoring page "+sessionStorage.userLink);
  1943.             window.location = sessionStorage.userLink;
  1944.             sessionStorage.userLink = "none";
  1945.         }
  1946.     }
  1947.  
  1948.     if(Storage().paranoia === "true" && Storage().master==="true"){
  1949.          if (checkTimer("paranoiaSwitch")) {
  1950.              flipParanoia();
  1951.          }
  1952.     }
  1953.  
  1954.     if(isNaN(Storage().autoLoopTimeMili)){
  1955.         console.log("AutoLoopTimeMili is not a number.");
  1956.         setDefaults();
  1957.     }
  1958.     else{
  1959.         if (sessionStorage.autoLoop === "true") setTimeout(autoLoop, Number(localStorage.autoLoopTimeMili));
  1960.         else console.log("autoLoop Disabled");
  1961.     }
  1962. };
  1963.  
  1964. var setDefaults = function () {
  1965.     console.log("Setting Defaults.");
  1966.     Storage().autoSalary = "true";
  1967.     Storage().autoSalaryTimer = "120";
  1968.     Storage().autoContest = "true";
  1969.     Storage().autoPoPower = "true";
  1970.     Storage().autoMission = "true";
  1971.     Storage().autoMissionC = "true";
  1972.     Storage().autoLeagues = "false";
  1973.     Storage().autoStats = "500000000";
  1974.     sessionStorage.autoLoop = "true";
  1975.     sessionStorage.userLink = "none";
  1976.     Storage().autoLoopTimeMili = "500";
  1977.     Storage().autoQuest = "true";
  1978.     Storage().autoTrollBattle = "true";
  1979.     Storage().eventTrollOrder="";
  1980.     Storage().buyCombTimer="16";
  1981.     Storage().autoArenaBattle = "true";
  1982.     sessionStorage.battlePowerRequired = "0";
  1983.     sessionStorage.questRequirement = "none";
  1984.     Storage().freshStart = "no";
  1985.     Storage().autoChamps="false";
  1986.     Storage().autoChampsUseEne="true";
  1987.     Storage().autoChampsFilter="1;2;3;4;5;6";
  1988.     Storage().autoFreePachinko = "true";
  1989.     Storage().autoExp = "500000000";
  1990.     Storage().autoExpW = "true";
  1991.     Storage().MaxExp = "999999999999999";
  1992.     Storage().autoAff = "500000000";
  1993.     Storage().autoAffW = "true";
  1994.     Storage().MaxAff = "999999999999999";
  1995.     Storage().autoLGM = "500000000";
  1996.     Storage().autoLGMW = "false";
  1997.     Storage().autoLGR = "500000000";
  1998.     Storage().autoLGRW = "false";
  1999.     Storage().autoEGM = "500000000";
  2000.     Storage().autoEGMW = "false";
  2001.     Storage().paranoia="false";
  2002.     Storage().showInfo="true";
  2003.     Storage().spendKobans0="false";
  2004.     Storage().paranoiaSettings="120-300/Sleep:28800-29400|Active:300-420|Casual:1800-2100/6:Sleep|18:Active|22:Casual|24:Sleep";
  2005.     Storage().master="true";
  2006. };
  2007.  
  2008. var CollectEventData=function()
  2009. {
  2010.     if (unsafeWindow.event_data)
  2011.     {
  2012.         var timeLeft=event_data.seconds_until_event_end;
  2013.         setTimer('eventGoing',timeLeft);
  2014.         var Trollz=[];
  2015.         for (var i=0;i<event_data.girls.length;i++)
  2016.         {
  2017.             if (!event_data.girls[i].owned_girl && event_data.girls[i].troll)
  2018.             {
  2019.                 if (Number(event_data.girls[i].troll.id_troll)<getHero().infos.questing.id_world)
  2020.                 {
  2021.                     Trollz.push(Number(event_data.girls[i].troll.id_troll));
  2022.                 }
  2023.             }
  2024.         }
  2025.  
  2026.         var Priority=(Storage().eventTrollOrder?Storage().eventTrollOrder:"").split(";");
  2027.         console.log(Priority);
  2028.         console.log(Trollz);
  2029.         if (Trollz.length>0)
  2030.         {
  2031.             if (Priority[0]!='')
  2032.             {
  2033.                 var found=false;
  2034.                 for (var n=0;n<Priority.length;n++)
  2035.                 {
  2036.                     if (Trollz.includes(Number(Priority[n])))
  2037.                     {
  2038.                         console.log("ET: "+Priority[n]);
  2039.                         sessionStorage.eventTroll=Number(Priority[n]);
  2040.                         found=true;
  2041.                         break;
  2042.                     }
  2043.                 }
  2044.                 if (!found)
  2045.                 {
  2046.                     delete sessionStorage.eventTroll;
  2047.                     //sessionStorage.eventTroll=Trollz.sort((a,b)=>{return a-b;})[0];
  2048.                 }
  2049.             }
  2050.             else
  2051.             {
  2052.                 sessionStorage.eventTroll=Trollz.sort((a,b)=>{return a-b;})[0];
  2053.             }
  2054.         }
  2055.         else
  2056.         {
  2057.             delete sessionStorage.eventTroll;
  2058.         }
  2059.         //console.log('watafu?');
  2060.         if (Storage().buyCombat=="true" && Storage().plusEvent=="true")
  2061.         {
  2062.             //console.log('watafu!');
  2063.             var diff=Math.ceil(Timers["eventGoing"]/1000)-Math.ceil(new Date().getTime()/1000);
  2064.             //console.log(diff);
  2065.             var hero=getHero();
  2066.             if (diff<Storage().buyCombTimer*3600 && sessionStorage.eventTroll && hero.infos.energy_fight==0)//Less than 20 hours remains and we still haven't get all troll girls
  2067.             {
  2068.                 var price=hero.get_recharge_cost("fight");
  2069.                 //console.log('PRC: '+price);
  2070.                 if (hero.infos.hard_currency>=price+Number(Storage().kobanBank))
  2071.                 {
  2072.                     console.log('Buying comb');
  2073.                     RechargeCombat(price);
  2074.                 }
  2075.             }
  2076.         }
  2077.         return true;
  2078.     }
  2079.     console.log('no  event');
  2080.     return false;
  2081. }
  2082.  
  2083. var RechargeCombat=function(price) {
  2084.     hh_ajax(
  2085.         {
  2086.             class: "Hero",
  2087.             action: "recharge",
  2088.             type: "fight"
  2089.         }, function(data) {
  2090.                 Hero.update("energy_fight", Hero.infos["energy_fight_max"]);
  2091.                 Hero.update("hard_currency", 0 - price, true);
  2092.             });
  2093.  
  2094. }
  2095.  
  2096. /*var autoBuy=function()
  2097. {
  2098.     return true ;
  2099. }*/
  2100.  
  2101. var getBurst=function()
  2102. {
  2103.     if (document.getElementById('sMenu'))
  2104.     {
  2105.         if (document.getElementById('sMenu').parentElement.style.display=='block')
  2106.         {
  2107.             return false;
  2108.         }
  2109.     }
  2110.     return Storage().master==="true"&&(!(Storage().paranoia==="true") || sessionStorage.burst==="true");
  2111. }
  2112.  
  2113. var Trollz=["Latest","Dark Lord","Ninja Spy","Gruntt","Edwarda","Donatien","Silvanus","Bremen","Finalmecia","Roko Senseï","Karole","Jackson\'s Crew","Pandora witch","Nike"];
  2114. var Timers={};
  2115.  
  2116. var start = function () {
  2117.  
  2118.     if (unsafeWindow.Hero===undefined)
  2119.     {
  2120.         console.log('???no Hero???');
  2121.         $('.hh_logo').click();
  2122.         return;
  2123.     }
  2124.     $('.redirect.gayharem').hide();
  2125.  
  2126.     $('#starter_offer').hide();
  2127.     $('#starter_offer_background').hide();
  2128.     if (sessionStorage.Timers)
  2129.     {
  2130.         Timers=JSON.parse(sessionStorage.Timers);
  2131.     }
  2132.     // Add UI buttons.
  2133.     var UIcontainer = $("#contains_all nav div[rel='content']");
  2134.     UIcontainer.html( '<div style="font-size:x-small;position: absolute;right: 22%;width: inherit;text-align: center;display:flex;flex-direction:column;z-index:1000" id="sMenu">'
  2135.                      + '<div style="display:flex;flex-direction:row;">'
  2136.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2137.                      +   '<span>Master switch</span><div><label class=\"switch\" title=\"Turn off to pause script\"><input id=\"master\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2138.                      +   '<span>Questionable Shit</span><div><label class=\"switch\"><input id=\"spendKobans0\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2139.                      +   '<span>Are you sure?</span><div><label class=\"switch\"><input id=\"spendKobans1\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2140.                      +   '<span>You\'ve been warned</span><div><label class=\"switch\"><input id=\"spendKobans2\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2141.                      +   '<span>Buy comb. in events</span><div><label class=\"switch\"><input id=\"buyCombat\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="kobanBank" type="text"></div>'
  2142.                      +   '<span>Hours to buy Comb</span><div><input id="buyCombTimer" style="width:80%" type="text"></div>'
  2143.                      +   '<span>Event Troll Order</span><div><input id="eventTrollOrder" style="width:80%" type="text"></div>'
  2144.                      +  '</div>'
  2145.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2146.                      +   '<span>Settings per tab</span><div><label class=\"switch\"><input id=\"settPerTab\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2147.                      +   '<div style="display:flex;flex-direction:row;">'
  2148.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2149.                      +     '<span>AutoSal.</span><div><label class=\"switch\"><input id=\"autoSalaryCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2150.                      +    '</div>'
  2151.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2152.                      +     '<span>sec wait</span><div><input id="autoSalaryTextbox" style="width:80%" type="text"></div>'
  2153.                      +    '</div>'
  2154.                      +   '</div>'
  2155.                      +   '<span>AutoContest</span><div><label class=\"switch\"><input id=\"autoContestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2156.                      +   '<span>AutoPoPower</span><div><label class=\"switch\"><input id=\"autoPoPowerCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2157.                      +   '<div style="display:flex;flex-direction:row;">'
  2158.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2159.                      +     '<span>AutoMission</span><div><label class=\"switch\"><input id=\"autoMissionCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2160.                      +    '</div>'
  2161.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2162.                      +     '<span>Collect</span><div><label class=\"switch\"><input id=\"autoMissionCollect\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2163.                      +    '</div>'
  2164.                      +   '</div>'
  2165.                      +   '<span>AutoQuest</span><div><label class=\"switch\"><input id=\"autoQuestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2166.                      +   '<div style="display:flex;flex-direction:row;">'
  2167.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2168.                      +     '<span>AutoTrollBattle</span><div><label class=\"switch\"><input id=\"autoBattleCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label><select id=\"autoTrollSelector\"></select></div>'
  2169.                      +    '</div>'
  2170.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2171.                      +     '<span>+Event</span><div><label class=\"switch\"><input id=\"plusEvent\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2172.                      +    '</div>'
  2173.                      +   '</div>'
  2174.                      +   '<span>AutoArenaBattle</span><div><label class=\"switch\"><input id=\"autoArenaCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2175.                      +   '<span>AutoPachinko(Free)</span><div><label class=\"switch\"><input id=\"autoFreePachinko\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2176.                      +   '<span>Paranoia mode</span><div><label class=\"switch\"><input id=\"paranoia\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2177.                      +  '</div>'
  2178.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2179.                      +   '<span>AutoLeagues</span><div><label class=\"switch\"><input id=\"autoLeagues\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2180.                      +   '<div style="display:flex;flex-direction:row;">'
  2181.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2182.                      +     '<span>AutoChampions</span><div><label class=\"switch\"><input id=\"autoChamps\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2183.                      +    '</div>'
  2184.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2185.                      +     '<span>UseEne</span><div><label class=\"switch\"><input id=\"autoChampsUseEne\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2186.                      +    '</div>'
  2187.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2188.                      +     '<span>Filter</span><div><input id="autoChampsFilter" type="text"></div>'
  2189.                      +    '</div>'
  2190.                      +   '</div>'
  2191.                      +   '<span>AutoStats</span><div><input id="autoStats" type="text"></div>'
  2192.                      +   '<span>Buy Exp</span><div style="width:200px"><label class=\"switch\"><input id=\"autoExpW\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoExp" style="width:50%" type="text"><input id="maxExp" style="width:30%" type="text"></div>'
  2193.                      +   '<span>Buy Aff</span><div style="width:200px"><label class=\"switch\"><input id=\"autoAffW\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoAff" style="width:50%" type="text"><input id="maxAff" style="width:30%" type="text"></div>'
  2194.                      +   '<span>Buy Leg Gear Mono</span><div><label class=\"switch\"><input id=\"autoLGMW\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoLGM" type="text"></div>'
  2195.                      +   '<span>Buy Leg Gear Rainbow</span><div><label class=\"switch\"><input id=\"autoLGRW\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoLGR" type="text"></div>'
  2196.                      +   '<span>Buy Epi Gear Mono</span><div><label class=\"switch\"><input id=\"autoEGMW\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoEGM" type="text"></div>'
  2197.                      +   '<span>Show info</span><div><label class=\"switch\"><input id=\"showInfo\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2198.                      +  '</div>'
  2199.                      + '</div>'
  2200.                      +'</div>'+UIcontainer.html());
  2201.  
  2202.     var div = document.createElement('div');
  2203.     div.innerHTML = '<div id="pInfo" style="padding-left:3px;z-index:-1;white-space: pre;position: absolute;right: 5%; left:70%; top:8%;border: 1px solid #ffa23e;background-color: rgba(0,0,0,.5);border-radius: 5px;"></div>'.trim();
  2204.     document.getElementById('contains_all').appendChild(div.firstChild);
  2205.  
  2206.     // Add auto troll options
  2207.     var trollOptions = document.getElementById("autoTrollSelector");
  2208.  
  2209.     for (var i=0;i<unsafeWindow.Hero.infos.questing.id_world;i++)
  2210.     {
  2211.         var option = document.createElement("option");
  2212.         option.value=i;
  2213.         option.text = Trollz[i];
  2214.         trollOptions.add(option);
  2215.     };
  2216.  
  2217.     document.getElementById("settPerTab").checked = localStorage.settPerTab === "true";
  2218.     trollOptions.selectedIndex = Storage().autoTrollSelectedIndex;
  2219.     document.getElementById("autoSalaryCheckbox").checked = Storage().autoSalary === "true";
  2220.     document.getElementById("autoSalaryTextbox").value = Storage().autoSalaryTimer?Storage().autoSalaryTimer:"120";
  2221.     document.getElementById("autoContestCheckbox").checked = Storage().autoContest === "true";
  2222.     document.getElementById("autoPoPowerCheckbox").checked = Storage().autoPoPower === "true";
  2223.     document.getElementById("autoMissionCheckbox").checked = Storage().autoMission === "true";
  2224.     document.getElementById("autoMissionCollect").checked = Storage().autoMissionC === "true";
  2225.     document.getElementById("autoQuestCheckbox").checked = Storage().autoQuest === "true";
  2226.     document.getElementById("autoBattleCheckbox").checked = Storage().autoTrollBattle === "true";
  2227.     document.getElementById("eventTrollOrder").value = Storage().eventTrollOrder?Storage().eventTrollOrder:"1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20";
  2228.     document.getElementById("buyCombTimer").value = Storage().buyCombTimer?Storage().buyCombTimer:"16";
  2229.     document.getElementById("autoArenaCheckbox").checked = Storage().autoArenaBattle === "true";
  2230.     document.getElementById("autoFreePachinko").checked = Storage().autoFreePachinko === "true";
  2231.     document.getElementById("autoLeagues").checked = Storage().autoLeagues === "true";
  2232.     document.getElementById("autoStats").value = Storage().autoStats?Storage().autoStats:"500000000";
  2233.     document.getElementById("paranoia").checked = Storage().paranoia==="true";
  2234.     document.getElementById("autoExp").value = Storage().autoExp?Storage().autoExp:"500000000";
  2235.     document.getElementById("autoExpW").checked = Storage().autoExpW === "true";
  2236.     document.getElementById("autoAff").value = Storage().autoAff?Storage().autoAff:"500000000";
  2237.     document.getElementById("autoAffW").checked = Storage().autoAffW === "true";
  2238.     document.getElementById("maxExp").value = Storage().MaxExp?Storage().MaxExp:"999999999999999";
  2239.     document.getElementById("maxAff").value = Storage().MaxAff?Storage().MaxAff:"999999999999999";
  2240.     document.getElementById("autoLGM").value = Storage().autoLGM?Storage().autoLGM:"500000000";
  2241.     document.getElementById("autoLGMW").checked = Storage().autoLGMW === "true";
  2242.     document.getElementById("autoLGR").value = Storage().autoLGR?Storage().autoLGR:"500000000";
  2243.     document.getElementById("autoLGRW").checked = Storage().autoLGRW === "true";
  2244.     document.getElementById("autoEGM").value = Storage().autoEGM?Storage().autoEGM:"500000000";
  2245.     document.getElementById("autoEGMW").checked = Storage().autoEGMW === "true";
  2246.     document.getElementById("showInfo").checked = Storage().showInfo === "true";
  2247.     document.getElementById("plusEvent").checked = Storage().trollToFight=="-1" || Storage().plusEvent === "true";
  2248.  
  2249.     document.getElementById("autoChamps").checked = Storage().autoChamps === "true";
  2250.     document.getElementById("autoChampsUseEne").checked = Storage().autoChampsUseEne === "true";
  2251.     document.getElementById("autoChampsFilter").value = Storage().autoChampsFilter?Storage().autoChampsFilter:"1;2;3;4;5;6";
  2252.  
  2253.     document.getElementById("spendKobans0").checked = Storage().spendKobans0 === "true";
  2254.     document.getElementById("spendKobans1").checked = Storage().spendKobans1 === "true";
  2255.     document.getElementById("spendKobans2").checked = Storage().spendKobans2 === "true";
  2256.     document.getElementById("buyCombat").checked = Storage().buyCombat === "true";
  2257.     document.getElementById("kobanBank").value = Storage().kobanBank?Storage().kobanBank:"1000000";
  2258.  
  2259.     document.getElementById("master").checked = Storage().master!=="false";
  2260.  
  2261.     sessionStorage.autoLoop = "true";
  2262.     if (typeof Storage().freshStart == "undefined" || isNaN(Number(Storage().autoLoopTimeMili))) {
  2263.         setDefaults();
  2264.     }
  2265.  
  2266.     if(getPage()=="shop")
  2267.     {
  2268.         updateShop();
  2269.     }
  2270.  
  2271.     if (/*autoBuy() &&*/ getBurst())
  2272.     {
  2273.         doShopping();
  2274.     /*}
  2275.     if (Storage().autoStats === "true" && getBurst())
  2276.     {*/
  2277.         doStatUpgrades();
  2278.     }
  2279.  
  2280.     if (!CollectEventData())
  2281.     {
  2282.         setTimeout(function(){CollectEventData();},5000);
  2283.     }
  2284.  
  2285.     if (hh_nutaku)
  2286.     {
  2287.         function Alive()
  2288.         {
  2289.             window.top.postMessage({ImAlive:true},'*');
  2290.             if (sessionStorage.autoLoop=="true")
  2291.             {
  2292.                 setTimeout(Alive,2000);
  2293.             }
  2294.         }
  2295.         Alive();
  2296.     }
  2297.  
  2298.     autoLoop();
  2299. };
  2300.  
  2301. var started=false;
  2302. var hardened_start=function()
  2303. {
  2304.     if (!started)
  2305.     {
  2306.         started=true;
  2307.         start();
  2308.     }
  2309. }
  2310.  
  2311. $("document").ready(function()
  2312. {
  2313.     setTimeout(hardened_start,1000);
  2314.  
  2315. });
  2316.  
  2317. setTimeout(hardened_start,5000);
Add Comment
Please, Sign In to add comment