Guest User

HaremHeroes Automatic++

a guest
Oct 21st, 2020
79
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         T.1m Just fix a few things and add a new function (AutoPlaceofPower). 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.         $('#pop .pop_central_part>button[rel=pop_claim]').click();
  508.         if ($("#rewards_popup .blue_text_button").size()>0)
  509.         {
  510.             $("#rewards_popup .blue_text_button").click();
  511.         }
  512.         if ($("#rewards_popup .blue_button_L").size()>0)
  513.         {
  514.             $("#rewards_popup .blue_button_L").click();
  515.         }
  516.         console.log("Auto Assing popower.");
  517.         $('#pop .pop_right_part>[rel=pop_auto_assign]').click();
  518.         console.log("Start popower.");
  519.         $('#pop .pop_central_part>button[rel=pop_action]').click();
  520.  
  521.         // Not busy
  522.         return false;
  523.     }
  524. }
  525.  
  526. var doPoPowerStuff = function () {
  527.     //console.log("Performing auto battle.");
  528.     // Confirm if on correct screen.
  529.     var page = getPage();
  530.     if(page === "pop")
  531.     {
  532.         if ($("#pop[class='canvas']").length === 1) {
  533.             // Oponent choose screen
  534.             console.log("On opponent choose screen.");
  535.             if(document.getElementById("popups").style.display === "block")
  536.             {
  537.                 console.log("Popup detetcted. Refresh page.");
  538.                 unsafeWindow.reload();
  539.                 return;
  540.             }
  541.             else{
  542.                 console.log("No popups.");
  543.                 doPoPowerSelect();
  544.             }
  545.  
  546.             var poper = sessionStorage.poper?sessionStorage.poper:1;
  547.             console.log('already get pop: '+poper);
  548.             var tpop;
  549.             if(poper>3)
  550.             {
  551.                 console.log("No pop found, storing nextPoPowerTime...")
  552.                 var arenatime = 0;
  553.                 for(var e in unsafeWindow.HHTimers.timers){
  554.                     try{
  555.                         if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".pop"))
  556.                             tpop=unsafeWindow.HHTimers.timers[e].remainingTime;
  557.                        }
  558.                     catch(e){}
  559.                 }
  560.                 arenatime = arenatime.remainingTime;
  561.                 console.log(tpop);
  562.                 setTimer('nextPoPowerTime',Number(tpop)+1);
  563.                 sessionStorage.poper=1;
  564.                 location.href = "/home.html";
  565.                 return;
  566.             }
  567.             sessionStorage.autoLoop = "false";
  568.             sessionStorage.poper=Number(poper)+1;
  569.             window.location = window.location.origin + '/activities.html?tab=pop&index='+poper;
  570.         }
  571.     }
  572.     else if (page==="pop")
  573.     {
  574.         doPoPowerSelect();
  575.     }
  576.     else
  577.     {
  578.         // Switch to the correct screen
  579.         console.log("Switching to pop screen.");
  580.         gotoPage("pop");
  581.         return;
  582.     }
  583. };
  584.  
  585. function randomInterval(min,max) // min and max included
  586. {
  587.     return Math.floor(Math.random()*(max-min+1)+min);
  588. }
  589.  
  590. var CollectMoney = function()
  591. {
  592.     var Clicked=[];
  593.     var ToClick=[];
  594.  
  595.     function ClickThem()
  596.     {
  597.         //console.log('Need to click: ',ToClick.length);
  598.         if (ToClick.length>0)
  599.         {
  600.             //console.log('clicking N ',ToClick[0].formAction.split('/').last())
  601.             $(ToClick[0]).click();
  602.             ToClick.shift();
  603.             //console.log('will click again');
  604.             setTimeout(ClickThem,randomInterval(300,900));
  605.  
  606.             window.top.postMessage({ImAlive:true},'*');
  607.         }
  608.         else
  609.         {
  610.             //console.log('nothing to click, checking data');
  611.             CollectData();
  612.         }
  613.     }
  614.  
  615.     function CollectData()
  616.     {
  617.         var btns=$("#harem_whole #harem_left .salary:not('.loads') button");
  618.         //console.log('buttons: ',btns.size())
  619.         btns.each(function (index, element) {
  620.             //console.log(index,element.formAction);
  621.             var gid=Number(element.parentElement.parentElement.parentElement.getAttribute('girl'));
  622.             //console.log('checking '+gid);
  623.             if (!Clicked.includes(gid))
  624.             {
  625.                 Clicked.push(gid);
  626.                 ToClick.push(element);
  627.                 //console.log('added! ',Clicked,ToClick);
  628.             }
  629.         });
  630.  
  631.         console.log('Collected Data: ',Clicked,ToClick);
  632.  
  633.         if (ToClick.length>0 && $('#collect_all_container[cost="0"] button[style="display: inline-block;"]').length === 1)
  634.         {
  635.             //console.log('clicking!');
  636.             setTimeout(ClickThem,randomInterval(150,500));
  637.         }
  638.         else//nothing to collect
  639.         {
  640.             var closestTime = undefined;
  641.             var closestGirl = 0;
  642.             var gMap = getGirlsMap();
  643.             if(gMap === undefined)
  644.             {
  645.                 // error
  646.                 console.log("Girls Map was undefined...! Error, manually setting salary time to 2 min.");
  647.                 closestTime = 2*60;
  648.             }
  649.             else
  650.             {
  651.                 try{
  652.                     // Calc. closest time
  653.                     for(var key in gMap)
  654.                     {
  655.                         // undefined comparision is always false so first iteration is false, hence the not(!)
  656.                         if(!(closestTime<gMap[key].gData.pay_in) && !Clicked.includes(key) && gMap[key].gData.pay_in!=0)
  657.                         {
  658.                             closestTime = gMap[key].gData.pay_in;
  659.                             closestGirl = key;
  660.                         }
  661.                     }
  662.                 }
  663.                 catch(exp){
  664.                     // error
  665.                     console.log("Girls Map had undefined property...! Error, manually setting salary time to 2 min.");
  666.                     closestTime = 2*60;
  667.                 }
  668.             }
  669.             if(closestTime === undefined)
  670.             {
  671.                 console.log("closestTime was undefined...! Error, manually setting salary time to 2 min.");
  672.                 closestTime = 2*60;
  673.             }
  674.             var st=Number(Storage().autoSalaryTimer?Storage().autoSalaryTimer:"120");
  675.             if(closestTime <= st )
  676.             {
  677.                 console.log("closestTime is "+closestTime+" ("+closestGirl+")");
  678.                 closestTime = st;
  679.             }
  680.             setTimer('nextSalaryTime',Number(closestTime)+1);
  681.             sessionStorage.autoLoop = "true";
  682.             setTimeout(autoLoop, Number(Storage().autoLoopTimeMili));
  683.         }
  684.     }
  685.     CollectData();
  686. }
  687.  
  688. var getSalary = function () {
  689.     try {
  690.         if(!gotoPage("harem"))
  691.         {
  692.             // Not at Harem screen then goto the Harem screen.
  693.             console.log("Navigating to Harem window.");
  694.             // return busy
  695.             return true;
  696.         }
  697.         else {
  698.             console.log("Detected Harem Screen. Fetching Salary");
  699.             is_cheat_click=function(e) {
  700.                 return false;
  701.             };
  702.             sessionStorage.autoLoop = "false";
  703.             getPremiumSalary();
  704.             CollectMoney();
  705.             // return busy
  706.             return true;
  707.         }
  708.     }
  709.     catch (ex) {
  710.         console.log("Could not collect salary... " + ex);
  711.         // return not busy
  712.         return false;
  713.     }
  714. };
  715.  
  716. var getPremiumSalary = function ()
  717. {
  718.     try {
  719.             if ($('#collect_all_container[cost="0"] button[style="display: inline-block;"]').length === 1)
  720.             {
  721.                 $('#collect_all_container[cost="0"] button[style="display: inline-block;"]').click();
  722.                 console.log('Collected all Premium salary');
  723.             }
  724.             else
  725.             {
  726.                 console.log('No free collect money');
  727.             }
  728.             // return busy
  729.             return true;
  730.     }
  731.     catch (ex) {
  732.         console.log("Could not collect salary... " + ex);
  733.         // return not busy
  734.         return false;
  735.     }
  736. };
  737.  
  738. var doStatUpgrades=function()
  739. {
  740.     //Stats?
  741.     //console.log('stats');
  742.     var Hero=getHero();
  743.     var level=Hero.infos.level;
  744.     var stats=[Hero.infos.carac1,Hero.infos.carac2,Hero.infos.carac3];
  745.     var money=Hero.infos.soft_currency;
  746.     var count=0;
  747.     var M=Storage().autoStats?Number(Storage().autoStats):500000000;
  748.     var MainStat=stats[Hero.infos.class-1];
  749.     var Limit=Hero.infos.level*30;//Hero.infos.level*19+Math.min(Hero.infos.level,25)*21;
  750.     var carac=Hero.infos.class;
  751.     var mp=0;
  752.     var mults=[60,30,10,1];
  753.     for (var car=0; car<3; car++)
  754.     {
  755.         //console.log('stat '+carac);
  756.         var s=stats[carac-1];
  757.         for (var mu=0;mu<5;mu++)
  758.         {
  759.             var mult=mults[mu];
  760.             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);
  761.             price*=mult;
  762.             if (carac==Hero.infos.class)
  763.             {
  764.                 mp=price;
  765.             }
  766.             //console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' price: '+price);
  767.             if ((stats[carac-1]+mult)<=Limit && (money-price)>M && (carac==Hero.infos.class || price<mp/2 || (MainStat+mult)>Limit))
  768.             {
  769.                 count++;
  770.                 console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' [+'+mult+'] price: '+price);
  771.                 money-=price;
  772.                 var params = {
  773.                     class: "Hero",
  774.                     carac: carac,
  775.                     action: "update_stats",
  776.                     nb: mult
  777.                 };
  778.                 hh_ajax(params, function(data) {
  779.  
  780.                 });
  781.                 break;
  782.             }
  783.         }
  784.         carac=(carac+1)%3+1;
  785.     }
  786. }
  787.  
  788. var doShopping=function()
  789. {
  790.     try
  791.     {
  792.         var Hero=getHero();
  793.         var MS='carac'+Hero.infos.class;
  794.         var SS1='carac'+(Hero.infos.class%3+1);
  795.         var SS2='carac'+((Hero.infos.class+1)%3+1);
  796.         var money=Hero.infos.soft_currency;
  797.  
  798.         try
  799.         {
  800.             var shop=JSON.parse(sessionStorage.storeContents);
  801.         }
  802.         catch(wtf)
  803.         {
  804.             sessionStorage.charLevel=0;
  805.             return;
  806.         }
  807.  
  808.         if (!sessionStorage.haveAff)
  809.         {
  810.             sessionStorage.charLevel=0;
  811.             return;
  812.         }
  813.  
  814.         var LGM=Number(Storage().autoLGM);
  815.         var EGM=Number(Storage().autoEGM);
  816.         var LGR=Number(Storage().autoLGR);
  817.         var Exp=Number(Storage().autoExp);
  818.         var Aff=Number(Storage().autoAff);
  819.         var MaxAff=Number(Storage().MaxAff);
  820.         var MaxExp=Number(Storage().MaxExp);
  821.         var HaveAff=Number(sessionStorage.haveAff);
  822.         var HaveExp=Number(sessionStorage.haveExp);
  823.  
  824.         console.log(HaveAff,HaveExp);
  825.  
  826.         if (Storage().autoLGMW==="true" || Storage().autoLGRW==="true" || Storage().autoEGMW==="true")
  827.         {
  828.             //console.log('items');
  829.             var Was=shop[0].length;
  830.             for (var n=shop[0].length-1;n>=0;n--)
  831.             {
  832.  
  833.                 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'||
  834.                    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'||
  835.                    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')
  836.                 {
  837.                     console.log('wanna buy ',shop[0][n]);
  838.                     if (money>=shop[0][n].price)
  839.                     {
  840.                         console.log("yay?");
  841.                         money-=shop[0][n].price;
  842.                         var params = {
  843.                             class: "Item",
  844.                             action: "buy",
  845.                             id_item: shop[0][n].id_item,
  846.                             type: "armor",
  847.                             who: 1,
  848.                             id_skin: shop[0][n].id_skin,
  849.                             id_equip: shop[0][n].id_equip,
  850.                         };
  851.                         hh_ajax(params, function(data) {
  852.  
  853.                         });
  854.                         shop[0].splice(n,1);
  855.                     }
  856.                     else
  857.                     {
  858.                         console.log("but can't");
  859.                     }
  860.                 }
  861.             }
  862.             if (shop[0].length==0 && Was>0)
  863.             {
  864.                 sessionStorage.charLevel=0;
  865.             }
  866.         }
  867.  
  868.         if (Storage().autoAffW==="true" && HaveAff<MaxAff)
  869.         {
  870.             //console.log('gifts');
  871.             Was=shop[1].length;
  872.             for (var nn=shop[1].length-1;nn>=0;nn--)
  873.             {
  874.                 console.log('wanna buy ',shop[1][nn]);
  875.                     if (money>=Aff+Number(shop[1][nn].price) && money>=shop[1][nn].price)
  876.                     {
  877.                         console.log("yay?");
  878.                         money-=shop[1][nn].price;
  879.                         var params2 = {
  880.                             class: "Item",
  881.                             action: "buy",
  882.                             id_item: shop[1][nn].id_item,
  883.                             type: "gift",
  884.                             who: 1
  885.                         };
  886.                         hh_ajax(params2, function(data) {
  887.  
  888.                         });
  889.                         shop[1].splice(nn,1);
  890.                     }
  891.                     else
  892.                     {
  893.                         console.log("but can't");
  894.                     }
  895.             }
  896.             if (shop[1].length==0 && Was>0)
  897.             {
  898.                 sessionStorage.charLevel=0;
  899.             }
  900.         }
  901.  
  902.         if (Storage().autoExpW==="true" && HaveExp<MaxExp)
  903.         {
  904.             //console.log('books');
  905.             Was=shop[2].length;
  906.             for (var nnn=shop[2].length-1;nnn>=0;nnn--)
  907.             {
  908.                 console.log('wanna buy ',shop[2][nnn]);
  909.                     if (money>=Exp+Number(shop[2][nnn].price) && money>=shop[2][nnn].price)
  910.                     {
  911.                         console.log("yay?");
  912.                         money-=shop[2][nnn].price;
  913.                         var params3 = {
  914.                             class: "Item",
  915.                             action: "buy",
  916.                             id_item: shop[2][nnn].id_item,
  917.                             type: "potion",
  918.                             who: 1
  919.                         };
  920.                         hh_ajax(params3, function(data) {
  921.  
  922.                         });
  923.                         shop[2].splice(nnn,1);
  924.                     }
  925.                     else
  926.                     {
  927.                         console.log("but can't");
  928.                     }
  929.             }
  930.             if (shop[2].length==0 && Was>0)
  931.             {
  932.                 sessionStorage.charLevel=0;
  933.             }
  934.         }
  935.         sessionStorage.storeContents=JSON.stringify(shop);
  936.         unsafeWindow.Hero.infos.soft_currency=money;
  937.     }
  938.     catch (ex)
  939.     {
  940.         console.log(ex);
  941.         sessionStorage.charLevel=0;
  942.     }
  943. }
  944.  
  945. var doBossBattle = function()
  946. {
  947.     var currentPower = getHero().infos.energy_fight;
  948.     if(currentPower < 1)
  949.     {
  950.         //console.log("No power for battle.");
  951.         return;
  952.     }
  953.  
  954.     var TTF;
  955.     if (Storage().plusEvent==="true" && !checkTimer("eventGoing") && sessionStorage.eventTroll)
  956.     {
  957.         TTF=sessionStorage.eventTroll;
  958.         console.log("Event troll fight");
  959.     }
  960.     else if(Storage().trollToFight !== undefined && !isNaN(Storage().trollToFight) && Storage().trollToFight !== "0")
  961.     {
  962.         TTF=Storage().trollToFight;
  963.         console.log("Custom troll fight.");
  964.     }
  965.     else
  966.     {
  967.         TTF=getHero().infos.questing.id_world-1;
  968.         console.log("Last troll fight");
  969.     }
  970.  
  971.     console.log("Fighting troll N "+TTF);
  972.     console.log("Going to crush: "+Trollz[Number(TTF)]);
  973.  
  974.     // Battles the latest boss.
  975.     // Navigate to latest boss.
  976.     //console.log('!!!!!',window.location.href,window.location.href=="/battle.html?id_troll=" + TTF);
  977.     if(window.location.pathname=="/battle.html" && window.location.search=="?id_troll=" + TTF)
  978.     {
  979.         // On the battle screen.
  980.         CrushThem();
  981.     }
  982.     else
  983.     {
  984.         console.log("Navigating to chosen Troll.");
  985.         sessionStorage.autoLoop = "false";
  986.         location.href = "/battle.html?id_troll=" + TTF;
  987.         return true;
  988.     }
  989. };
  990.  
  991. var doChampionStuff=function()
  992. {
  993.     var page=getPage();
  994.     if (page=='champions')
  995.     {
  996.         console.log('on champion page');
  997.         if ($('button[rel=perform].blue_button_L').length==0)
  998.         {
  999.             console.log('Something is wrong!');
  1000.             location.href = "/home.html";
  1001.             return true;
  1002.         }
  1003.         else
  1004.         {
  1005.             var TCount=Number($('div.input-field > span')[1].innerText.split(' / ')[1]);
  1006.             var ECount= getHero().infos.energy_quest;
  1007.             console.log("T:"+TCount+" E:"+ECount+" "+(Storage().autoChampsUseEne==="true"))
  1008.             if ( TCount==0)
  1009.             {
  1010.                 console.log("No tickets!");
  1011.                 setTimer('nextChampionTime',15*60);
  1012.                 return false;
  1013.             }
  1014.             else
  1015.             {
  1016.                 if (TCount!=0)
  1017.                 {
  1018.                     console.log("Using ticket");
  1019.                     $('button[rel=perform].blue_button_L').click();
  1020.                 }
  1021.                 setTimeout(function(){gotoPage('champions_map');},500);
  1022.                 return true;
  1023.             }
  1024.         }
  1025.     }
  1026.     else if (page=='champions_map')
  1027.     {
  1028.         console.log('on champion map');
  1029.         var Filter=Storage().autoChampsFilter.split(';').map(s=>Number(s));
  1030.  
  1031.         for (let i=0;i<$('span.stage-bar-tier').length;i++)
  1032.         {
  1033.             let Impression=$('span.stage-bar-tier')[i].getAttribute("hh_title");
  1034.             let Started=Impression.split('/')[0]!="0";
  1035.             let OnTimer=$($('a.champion-lair div.champion-lair-name')[i+1]).find('div[rel=timer]').length>0;
  1036.             let Filtered=Filter.includes(i+1);
  1037.             console.log("Champion "+(i+1)+" ["+Impression+"]"+(Started?" Started;":" Not started;")+(OnTimer?" on timer;":" not on timer;")+(Filtered?" Included in filter":" Excluded from filter"));
  1038.  
  1039.             if (Started && !OnTimer && Filtered)
  1040.             {
  1041.                 console.log("Let's do him!");
  1042.                 window.location = window.location.origin + '/champions/'+(i+1);
  1043.                 return true;
  1044.             }
  1045.         }
  1046.         console.log("No good candidate");
  1047.         setTimer('nextChampionTime',15*60);
  1048.         return false;
  1049.     }
  1050.     else
  1051.     {
  1052.         gotoPage('champions_map');
  1053.         return true;
  1054.     }
  1055. }
  1056.  
  1057. var doBattle = function () {
  1058.     //console.log("Performing auto battle.");
  1059.     // Confirm if on correct screen.
  1060.     var page = getPage();
  1061.     if(page === "arena")
  1062.     {
  1063.         if ($("#arena[class='canvas']").length === 1) {
  1064.             // Oponent choose screen
  1065.             console.log("On opponent choose screen.");
  1066.             if(document.getElementById("popups").style.display === "block")
  1067.             {
  1068.                 console.log("Popup detetcted. Refresh page.");
  1069.                 unsafeWindow.reload();
  1070.                 return;
  1071.             }
  1072.             else{
  1073.                 console.log("No popups.");
  1074.             }
  1075.  
  1076.             var fought = sessionStorage.fought?sessionStorage.fought:0;
  1077.             console.log('already fought: '+fought);
  1078.             if(fought>=3)
  1079.             {
  1080.                 console.log("No arena opponents found, storing nextArenaTime...")
  1081.                 var arenatime = 0;
  1082.                 for(var e in unsafeWindow.HHTimers.timers){
  1083.                     try{
  1084.                         if(unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".arena_refresh_counter"))
  1085.                         arenatime=unsafeWindow.HHTimers.timers[e];
  1086.                        }
  1087.                     catch(e){}
  1088.                 }
  1089.                 arenatime = arenatime.remainingTime;
  1090.                 setTimer('nextArenaTime',Number(arenatime)+1);
  1091.                 sessionStorage.fought=0;
  1092.                 location.href = "/home.html";
  1093.                 return;
  1094.             }
  1095.             //selbutton[0].click();
  1096.             sessionStorage.autoLoop = "false";
  1097.             sessionStorage.fought=Number(fought)+1;
  1098.             window.location = window.location.origin + '/battle.html?id_arena='+fought;
  1099.         }
  1100.     }
  1101.     else if (page==="battle")
  1102.     {
  1103.         CrushThem();
  1104.     }
  1105.     else
  1106.     {
  1107.         // Switch to the correct screen
  1108.         console.log("Switching to battle screen.");
  1109.         gotoPage("arena");
  1110.         return;
  1111.     }
  1112. };
  1113.  
  1114. var doLeagueBattle = function () {
  1115.     //console.log("Performing auto leagues.");
  1116.     // Confirm if on correct screen.
  1117.     var currentPower = getHero().infos.energy_challenge;
  1118.     var ltime;
  1119.     var endtime;
  1120.  
  1121.     var page = getPage();
  1122.     if(page==='battle')
  1123.     {
  1124.         // On the battle screen.
  1125.         CrushThem();
  1126.     }
  1127.     else if(page === "leaderboard")
  1128.     {
  1129.        // console.log('ls! '+$('h4.leagues').size());
  1130.         $('h4.leagues').each(function(){this.click();});
  1131.  
  1132.         if(currentPower < 1)
  1133.         {
  1134.             console.log("No power for leagues.");
  1135.             for(var e in unsafeWindow.HHTimers.timers){
  1136.                try{
  1137.                    if(unsafeWindow.HHTimers.timers[e].type=="energy_challenge")
  1138.                        ltime=unsafeWindow.HHTimers.timers[e];
  1139.                    }
  1140.                catch(e){}
  1141.                }
  1142.             ltime = Number(ltime.remainingTime)+15;
  1143.             setTimer('nextLeaguesTime',ltime);
  1144.             return;
  1145.         }
  1146.  
  1147.         while ($("span[sort_by='level'][select='asc']").size()==0)
  1148.         {
  1149.             console.log('resorting');
  1150.             $("span[sort_by='level']").each(function(){this.click()});
  1151.         }
  1152.         console.log('parsing enemies');
  1153.         var Data=[];
  1154.         $(".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);}});
  1155.         if (Data.length==0)
  1156.         {
  1157.             endtime=35*60;
  1158.             console.log('No valid targets!');
  1159.             for(var e in unsafeWindow.HHTimers.timers)
  1160.             {
  1161.                try
  1162.                 {
  1163.                     if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".league_end_in"))
  1164.                         endtime=unsafeWindow.HHTimers.timers[e].remainingTime; 
  1165.                 }
  1166.                catch(e){}
  1167.             }
  1168.             setTimer('nextLeaguesTime',endtime +1);
  1169.         }
  1170.         else
  1171.         {
  1172.             console.log(Data.length+' valid targets!');
  1173.             sessionStorage.autoLoop = "false";
  1174.             console.log("Hit?");
  1175.             location.href = "/battle.html?league_battle=1&id_member=" + $(Data[0]).attr("sorting_id")
  1176.         }
  1177.     }
  1178.     else if (page==="battle")
  1179.     {
  1180.         CrushThem();
  1181.     }
  1182.     else
  1183.     {
  1184.         // Switch to the correct screen
  1185.         console.log("Switching to leagues screen.");
  1186.         gotoPage("leaderboard");
  1187.         return;
  1188.     }
  1189. };
  1190.  
  1191. var  CrushThem = function()
  1192. {
  1193.     if (getPage() === "battle") {
  1194.         // On battle page.
  1195.         if ($("#rewards_popup .blue_text_button").size()>0)
  1196.         {
  1197.             $("#rewards_popup .blue_text_button").click();
  1198.         }
  1199.         if ($("#rewards_popup .blue_button_L").size()>0)
  1200.         {
  1201.             $("#rewards_popup .blue_button_L").click();
  1202.         }
  1203.  
  1204.         //console.log("On Battle Page.");
  1205.         if ($("#battle[class='canvas']").length === 1) {
  1206.             // Battle screen
  1207.             console.log("On battle screen.");
  1208.             // get button with no autofight, i.e. no koban
  1209.             var battleButton = $('#battle button[rel="launch"]:not(.autofight)');
  1210.             //console.log(battleButton.get());
  1211.             //console.log(battleButton);
  1212.             var currentPower = getHero().infos.energy_fight;
  1213.             if(battleButton === undefined){
  1214.                 console.log("Battle Button was undefined. Disabling all auto-battle.");
  1215.                 document.getElementById("autoBattleCheckbox").checked = false;
  1216.                 document.getElementById("autoArenaCheckbox").checked = false;
  1217.                 if (sessionStorage.questRequirement === "battle")
  1218.                 {
  1219.                     document.getElementById("autoQuestCheckbox").checked = false;
  1220.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  1221.                 }
  1222.                 return;
  1223.             }
  1224.             var battle_price = battleButton.find('span').size()>0?battleButton.attr("price_fe"):0;
  1225.  
  1226.             if (location.search.split("league_battle=")[1])
  1227.             {
  1228.                 currentPower=getHero().infos.energy_challenge;
  1229.             }
  1230.             if(battle_price === undefined){
  1231.                 console.log("Could not detect battle button price. Error.");
  1232.                 console.log("Disabling all auto-battle.");
  1233.                 document.getElementById("autoBattleCheckbox").checked = false;
  1234.                 document.getElementById("autoArenaCheckbox").checked = false;
  1235.                 if (sessionStorage.questRequirement === "battle")
  1236.                 {
  1237.                     document.getElementById("autoQuestCheckbox").checked = false;
  1238.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  1239.                 }
  1240.                 return;
  1241.             }
  1242.             console.log("battle price: "+battle_price+"P")
  1243.             if(currentPower >= battle_price)
  1244.             {
  1245.                 // We have the power.
  1246.                 is_cheat_click=function(e) {
  1247.                     return false;
  1248.                 };
  1249.                 battleButton.click();
  1250.                 // Skip
  1251.                 setTimeout(function(){$("#battle_middle button[rel='skip']").click();},2000);
  1252.                 setTimeout(function(){$("#rewards_popup .blue_text_button").click();$("#rewards_popup .blue_button_L").click();},3500);
  1253.  
  1254.                 if (sessionStorage.questRequirement === "battle") {
  1255.                     // Battle Done.
  1256.                     sessionStorage.questRequirement = "none";
  1257.                 }
  1258.  
  1259.                 //location.href = "/home.html";
  1260.                 return true;
  1261.             }
  1262.             else
  1263.             {
  1264.                 // We need more power.
  1265.                 console.log("Battle requires "+battle_price+" power.");
  1266.                 sessionStorage.battlePowerRequired = battle_price;
  1267.                 if(sessionStorage.questRequirement === "battle")sessionStorage.questRequirement = "P"+battle_price;
  1268.             }
  1269.         }
  1270.         else {
  1271.             console.log("Could not identify battle screen.");
  1272.             if (sessionStorage.questRequirement === "battle") sessionStorage.questRequirement = "errorInAutoBattle";
  1273.             return;
  1274.         }
  1275.     }
  1276. }
  1277.  
  1278. var setTimer=function(name, seconds)
  1279. {
  1280.     var ND=new Date().getTime() + seconds * 1000;
  1281.     Timers[name]=ND;
  1282.     sessionStorage.Timers=JSON.stringify(Timers);
  1283.     console.log(name+" set to "+toHHMMSS(ND/1000-new Date().getTimezoneOffset()*60)+' ('+ toHHMMSS(seconds)+')');
  1284. }
  1285.  
  1286. var clearTimer=function(name)
  1287. {
  1288.     delete Timers[name];
  1289.     sessionStorage.Timers=JSON.stringify(Timers);
  1290. }
  1291.  
  1292. var checkTimer=function(name)
  1293. {
  1294.     if (!Timers[name])
  1295.     {
  1296.         return true;
  1297.     }
  1298.     if (Timers[name]<new Date())
  1299.     {
  1300.         return true;
  1301.     }
  1302.     return false;
  1303. }
  1304.  
  1305. var getSecondsLeft=function(name)
  1306. {
  1307.     if (!Timers[name])
  1308.     {
  1309.         return 0;
  1310.     }
  1311.     return Math.ceil(Timers[name]/1000)-Math.ceil(new Date().getTime()/1000);
  1312. }
  1313.  
  1314. var getTimeLeft=function(name)
  1315. {
  1316.     if (!Timers[name])
  1317.     {
  1318.         return "No timer";
  1319.     }
  1320.     var diff=getSecondsLeft(name);
  1321.     if (diff<=0)
  1322.     {
  1323.         return "Time's up!";
  1324.     }
  1325.     return toHHMMSS(diff);
  1326. }
  1327.  
  1328.  
  1329.  
  1330. var updateData = function () {
  1331.     //console.log("updating UI");
  1332.  
  1333.     var trollOptions = document.getElementById("autoTrollSelector");
  1334.     Storage().autoTrollSelectedIndex = trollOptions.selectedIndex;
  1335.     Storage().trollToFight = trollOptions.value;
  1336.     Storage().plusEvent = document.getElementById("plusEvent").checked;
  1337.     Storage().autoSalary = document.getElementById("autoSalaryCheckbox").checked;
  1338.     Storage().autoSalaryTimer = document.getElementById("autoSalaryTextbox").value;
  1339.     Storage().autoContest = document.getElementById("autoContestCheckbox").checked;
  1340.     //nextPoPowerTime
  1341.     Storage().autoPoPower = document.getElementById("autoPoPowerCheckbox").checked;
  1342.     Storage().autoMission = document.getElementById("autoMissionCheckbox").checked;
  1343.     Storage().autoMissionC = document.getElementById("autoMissionCollect").checked;
  1344.     Storage().autoQuest = document.getElementById("autoQuestCheckbox").checked;
  1345.     Storage().autoTrollBattle = document.getElementById("autoBattleCheckbox").checked;
  1346.     Storage().eventTrollOrder = document.getElementById("eventTrollOrder").value;
  1347.     Storage().buyCombTimer = document.getElementById("buyCombTimer").value;
  1348.     Storage().autoArenaBattle = document.getElementById("autoArenaCheckbox").checked;
  1349.     Storage().autoLeagues = document.getElementById("autoLeagues").checked;
  1350.     Storage().autoStats = document.getElementById("autoStats").value;
  1351.     Storage().paranoia = document.getElementById("paranoia").checked;
  1352.     Storage().autoFreePachinko = document.getElementById("autoFreePachinko").checked;
  1353.     Storage().autoExp = document.getElementById("autoExp").value;
  1354.     Storage().autoExpW = document.getElementById("autoExpW").checked;
  1355.     Storage().MaxExp = document.getElementById("maxExp").value;
  1356.     Storage().autoAff = document.getElementById("autoAff").value;
  1357.     Storage().autoAffW = document.getElementById("autoAffW").checked;
  1358.     Storage().MaxAff = document.getElementById("maxAff").value;
  1359.     Storage().autoLGM = document.getElementById("autoLGM").value;
  1360.     Storage().autoLGMW = document.getElementById("autoLGMW").checked;
  1361.     Storage().autoLGR = document.getElementById("autoLGR").value;
  1362.     Storage().autoLGRW = document.getElementById("autoLGRW").checked;
  1363.     Storage().autoEGM = document.getElementById("autoEGM").value;
  1364.     Storage().autoEGMW = document.getElementById("autoEGMW").checked;
  1365.     Storage().showInfo = document.getElementById("showInfo").checked;
  1366.     Storage().autoChamps = document.getElementById("autoChamps").checked;
  1367.     Storage().autoChampsUseEne = document.getElementById("autoChampsUseEne").checked;
  1368.     Storage().autoChampsFilter = document.getElementById("autoChampsFilter").value;
  1369.  
  1370.     Storage().spendKobans0 = document.getElementById("spendKobans0").checked;
  1371.     Storage().spendKobans1 = document.getElementById("spendKobans1").checked && Storage().spendKobans0=="true";
  1372.     document.getElementById("spendKobans1").checked=Storage().spendKobans1=="true";
  1373.     Storage().spendKobans2 = document.getElementById("spendKobans2").checked && Storage().spendKobans1=="true" && Storage().spendKobans0=="true"
  1374.     document.getElementById("spendKobans2").checked=Storage().spendKobans2=="true";
  1375.  
  1376.     Storage().buyCombat=document.getElementById("buyCombat").checked && Storage().spendKobans2=="true" && Storage().spendKobans1=="true" && Storage().spendKobans0=="true"
  1377.     document.getElementById("buyCombat").checked=Storage().buyCombat=="true";
  1378.     Storage().kobanBank=document.getElementById("kobanBank").value;
  1379.  
  1380.     localStorage.settPerTab = document.getElementById("settPerTab").checked;
  1381.  
  1382.     Storage().master=document.getElementById("master").checked;
  1383.  
  1384.     if (Storage().showInfo=="true")
  1385.     {
  1386.         var Tegzd='';
  1387.         Tegzd+='Master: '+(Storage().master==="true"?"ON":"OFF");
  1388.         if (Storage().paranoia=="true")
  1389.         {
  1390.             Tegzd+=(Tegzd.length>0?'\r\n':'')+sessionStorage.pinfo+': '+getTimeLeft('paranoiaSwitch');
  1391.         }
  1392.         if (Storage().autoSalary=="true")
  1393.         {
  1394.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Salary check: '+getTimeLeft('nextSalaryTime');
  1395.         }
  1396.         if (Storage().autoArenaBattle=="true")
  1397.         {
  1398.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Arena fight: '+getTimeLeft('nextArenaTime');
  1399.         }
  1400.         if (Storage().autoLeagues=="true")
  1401.         {
  1402.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'League fight: '+getTimeLeft('nextLeaguesTime');
  1403.         }
  1404.         if (Storage().autoChamps=="true")
  1405.         {
  1406.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Champions check: '+getTimeLeft('nextChampionTime');
  1407.         }
  1408.        // if (autoBuy())
  1409.         {
  1410.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Shop update: '+getTimeLeft('nextShopTime');
  1411.         }
  1412.         if (Storage().autoMission=="true")
  1413.         {
  1414.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Mission: '+getTimeLeft('nextMissionTime');
  1415.         }
  1416.         if (Storage().autoContest=="true")
  1417.         {
  1418.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Contest: '+getTimeLeft('nextContestTime');
  1419.         }
  1420.         //nextPoPowerTime
  1421.         if (Storage().autoPoPower=="true")
  1422.         {
  1423.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'PoPower: '+getTimeLeft('nextPoPowerTime');
  1424.         }
  1425.         if (Storage().autoFreePachinko=="true")
  1426.         {
  1427.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Great Pachinko: '+getTimeLeft('nextPachinkoTime');
  1428.             Tegzd+=(Tegzd.length>0?'\r\n':'')+'Mythic Pachinko: '+getTimeLeft('nextPachinko2Time');
  1429.         }
  1430.         if (Tegzd.length>0)
  1431.         {
  1432.             document.getElementById('pInfo').style.display='block';
  1433.             document.getElementById('pInfo').textContent=Tegzd;
  1434.         }
  1435.         else
  1436.         {
  1437.             document.getElementById('pInfo').style.display='none';
  1438.         }
  1439.     }
  1440.     else
  1441.     {
  1442.         document.getElementById('pInfo').style.display='none';
  1443.     }
  1444. };
  1445.  
  1446. var getPachinko = function(){
  1447.     try {
  1448.         if(!gotoPage("pachinko"))
  1449.         {
  1450.             // Not at Pachinko screen then goto the Pachinko screen.
  1451.             console.log("Navigating to Pachinko window.");
  1452.             return;
  1453.         }
  1454.         else {
  1455.             console.log("Detected Pachinko Screen. Fetching Pachinko");
  1456.  
  1457.                 console.log('to great');
  1458.                 $('.game-simple-block[type-pachinko=great]')[0].click();
  1459.  
  1460.             if ($('#playzone-replace-info button[free="0"]')[0])
  1461.             {
  1462.                 console.log('Not ready yet');
  1463.             }
  1464.             else
  1465.             {
  1466.                 $('#playzone-replace-info button[free="1"]')[0].click();
  1467.             }
  1468.             var npach;
  1469.             for(var e in unsafeWindow.HHTimers.timers){
  1470.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".pachinko_change"))
  1471.                     npach=unsafeWindow.HHTimers.timers[e].remainingTime;
  1472.             }
  1473.             if(npach !== undefined || npach !== 0)
  1474.             {
  1475.                 setTimer('nextPachinkoTime',Number(npach)+1);
  1476.             }
  1477.             else
  1478.             {
  1479.                 clearTimer('nextPachinkoTime');
  1480.             }
  1481.         }
  1482.     }
  1483.     catch (ex) {
  1484.         console.log("Could not collect Great Pachinko... " + ex);
  1485.     }
  1486. };
  1487.  
  1488. var getPachinko2 = function(){
  1489.     try {
  1490.         if(!gotoPage("pachinko"))
  1491.         {
  1492.             // Not at Pachinko screen then goto the Pachinko screen.
  1493.             console.log("Navigating to Pachinko window.");
  1494.             return;
  1495.         }
  1496.         else {
  1497.             console.log("Detected Pachinko Screen. Fetching Pachinko");
  1498.  
  1499.                 console.log('to mythic');
  1500.                 $('.game-simple-block[type-pachinko=mythic]')[0].click();
  1501.  
  1502.             if ($('#playzone-replace-info button[free="0"]')[0])
  1503.             {
  1504.                 console.log('Not ready yet');
  1505.             }
  1506.             else
  1507.             {
  1508.                 $('#playzone-replace-info button[free="1"]')[0].click();
  1509.             }
  1510.             var npach;
  1511.             for(var e in unsafeWindow.HHTimers.timers){
  1512.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith('.game-simple-block[type-pachinko="mythic"]'))
  1513.                     npach=unsafeWindow.HHTimers.timers[e].remainingTime;
  1514.             }
  1515.             if(npach !== undefined || npach !== 0)
  1516.             {
  1517.                 setTimer('nextPachinko2Time',Number(npach)+1);
  1518.             }
  1519.             else
  1520.             {
  1521.                 clearTimer('nextPachinko2Time');
  1522.             }
  1523.         }
  1524.     }
  1525.     catch (ex) {
  1526.         console.log("Could not collect Mythic Pachinko... " + ex);
  1527.     }
  1528. };
  1529.  
  1530. var updateShop=function()
  1531. {
  1532.         if(!gotoPage("shop"))
  1533.         {
  1534.             console.log("Navigating to Market window.");
  1535.             return true;
  1536.         }
  1537.         else {
  1538.             console.log("Detected Market Screen. Fetching Assortment");
  1539.  
  1540.             var assA=[];
  1541.             var assG=[];
  1542.             var assP=[];
  1543.             //$('#shop div.armor .slot').each(function(){if (this.dataset.d)assA.push(JSON.parse(this.dataset.d));});
  1544.             $('#shop div.gift .slot').each(function(){if (this.dataset.d)assG.push(JSON.parse(this.dataset.d));});
  1545.             $('#shop div.potion .slot').each(function(){if (this.dataset.d)assP.push(JSON.parse(this.dataset.d));});
  1546.  
  1547.             var HaveAff=0;
  1548.             var HaveExp=0;
  1549.             $('#inventory div.gift .slot').each(function(){if (this.dataset.d) { var d=JSON.parse(this.dataset.d); HaveAff+=d.count*d.value;}});
  1550.             $('#inventory div.potion .slot').each(function(){if (this.dataset.d) { var d=JSON.parse(this.dataset.d); HaveExp+=d.count*d.value;}});
  1551.  
  1552.             sessionStorage.haveAff=HaveAff;
  1553.             sessionStorage.haveExp=HaveExp;
  1554.  
  1555.             console.log('counted',sessionStorage.haveAff,sessionStorage.haveExp);
  1556.  
  1557.             sessionStorage.storeContents = JSON.stringify([assA,assG,assP]);
  1558.             sessionStorage.charLevel=getHero().infos.level;
  1559.  
  1560.             var nshop;
  1561.             for(var e in unsafeWindow.HHTimers.timers){
  1562.                 if(unsafeWindow.HHTimers.timers[e].$elm && unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".shop_count"))
  1563.                     nshop=unsafeWindow.HHTimers.timers[e].remainingTime;
  1564.             }
  1565.             if(nshop !== undefined && nshop !== 0)
  1566.             {
  1567.                 console.log(nshop);
  1568.                 setTimer('nextShopTime',Number(nshop)+1);
  1569.             }
  1570.             else
  1571.             {
  1572.                 setTimer('nextShopTime',60);
  1573.             }
  1574.         }
  1575.     return false;
  1576. }
  1577.  
  1578. var toHHMMSS = function (secs)  {
  1579.     var sec_num = parseInt(secs, 10);
  1580.     var days   = Math.floor(sec_num / 86400);
  1581.     var hours   = Math.floor(sec_num / 3600) % 24;
  1582.     var minutes = Math.floor(sec_num / 60) % 60;
  1583.     var seconds = sec_num % 60;
  1584.     var n=0;
  1585.     return [days,hours,minutes,seconds]
  1586.         .map(v => v < 10 ? "0" + v : v)
  1587.         .filter((v,i) => {if (v !== "00"){n++; return true;} return n > 0})
  1588.         .join(":");
  1589. }
  1590.  
  1591. var flipParanoia=function()
  1592. {
  1593.     var burst=getBurst();
  1594.  
  1595.     var Setting=Storage().paranoiaSettings;
  1596.  
  1597.     var S1=Setting.split('/').map(s=>s.split('|').map(s=>s.split(':')));
  1598.  
  1599.     var toNextSwitch;
  1600.     var period;
  1601.     var n = new Date().getHours();
  1602.     S1[2].some(x => {if (n<x[0]) {period=x[1]; return true;}});
  1603.  
  1604.     if (burst && getHero().infos.energy_fight!=0 && Storage().autoTrollBattle=='true') //double(or more) burst if we want to fight
  1605.     {
  1606.         burst=false;
  1607.     }
  1608.  
  1609.     if (burst)
  1610.     {
  1611.         //going into hiding
  1612.         sessionStorage.burst="false";
  1613.  
  1614.         var periods=Object.assign(...S1[1].map(d => ({[d[0]]: d[1].split('-')})));
  1615.  
  1616.         toNextSwitch=randomInterval(Number(periods[period][0]),Number(periods[period][1]));
  1617.         if (toNextSwitch<=1800 && Storage().autoArenaBattle == "true")
  1618.         {
  1619.             var sl=getSecondsLeft("nextArenaTime");
  1620.             toNextSwitch=toNextSwitch<sl?toNextSwitch:sl;
  1621.         }
  1622.     }
  1623.     else
  1624.     {
  1625.         //if (getPage()!='home') return;
  1626.         //going to work
  1627.         sessionStorage.autoLoop = "false";
  1628.         sessionStorage.burst="true";
  1629.         var b=S1[0][0][0].split('-');
  1630.         toNextSwitch=randomInterval(Number(b[0]),Number(b[1]));
  1631.     }
  1632.     var ND=new Date().getTime() + toNextSwitch * 1000;
  1633.     var offs=new Date().getTimezoneOffset();
  1634.     var message=period+(burst?" rest":" burst");
  1635.     console.log("PARANOIA: "+message);
  1636.     sessionStorage.pinfo=message;
  1637.  
  1638.     setTimer('paranoiaSwitch',toNextSwitch);
  1639.     if (sessionStorage.burst=="true")
  1640.     {
  1641.         if (hh_nutaku)
  1642.         {
  1643.             window.top.postMessage({reloadMe:true},'*');
  1644.         }
  1645.         else
  1646.         {
  1647.             window.top.location.reload();
  1648.         }
  1649.     }
  1650. }
  1651.  
  1652. var autoLoop = function () {
  1653.     updateData();
  1654.     if (!sessionStorage.questRequirement)
  1655.     {
  1656.         sessionStorage.questRequirement="none";
  1657.     }
  1658.     if (!sessionStorage.userLink)
  1659.     {
  1660.         sessionStorage.userLink="none"
  1661.     }
  1662.     if (!sessionStorage.battlePowerRequired)
  1663.     {
  1664.         sessionStorage.battlePowerRequired="0";
  1665.     }
  1666.  
  1667.     var busy = false;
  1668.     var page = window.location.href;
  1669.     var currentPower = getHero().infos.energy_fight;
  1670.  
  1671.     var burst=getBurst();
  1672.  
  1673.     if (burst /*|| checkTimer('nextMissionTime')*/)
  1674.     {
  1675.         if(Storage().autoFreePachinko === "true" && busy === false){
  1676.         // Navigate to pachinko
  1677.  
  1678.             if (checkTimer("nextPachinkoTime")) {
  1679.                 console.log("Time to fetch Great Pachinko.");
  1680.                 getPachinko();
  1681.                 busy = true;
  1682.             }
  1683.             if (checkTimer("nextPachinko2Time")) {
  1684.                 console.log("Time to fetch Mythic Pachinko.");
  1685.                 getPachinko2();
  1686.                 busy = true;
  1687.             }
  1688.         }
  1689.         if(Storage().autoLeagues === "true" && getHero().infos.level>=20 && busy === false ){
  1690.             // Navigate to leagues
  1691.             if (checkTimer('nextLeaguesTime')) {
  1692.                 console.log("Time to fight in Leagues.");
  1693.                 doLeagueBattle();
  1694.                 busy = true;
  1695.             }
  1696.         }
  1697.         if(Storage().autoContest === "true" && busy === false){
  1698.             if (checkTimer('nextContestTime') || unsafeWindow.has_contests_datas ||$(".contest .ended button[rel='claim']").size()>0){
  1699.                 console.log("Time to get contest rewards.");
  1700.                 busy = doContestStuff();
  1701.             }
  1702.         }
  1703.         //nextPoPowerTime
  1704.         if(Storage().autoPoPower === "true" && busy === false){
  1705.             if (checkTimer('nextPoPowerTime') || unsafeWindow.has_contests_datas ||$(".pop .ended button[rel='claim']").size()>0){
  1706.                 console.log("Time to get popower rewards.");
  1707.                 busy = doPoPowerStuff();
  1708.             }
  1709.         }
  1710.         if(Storage().autoMission === "true" && busy === false){
  1711.             if (checkTimer('nextMissionTime')){
  1712.                 console.log("Time to do missions.");
  1713.                 busy = doMissionStuff();
  1714.             }
  1715.         }
  1716.  
  1717.         if (Storage().autoQuest === "true" && busy === false) {
  1718.             if (sessionStorage.questRequirement === "battle") {
  1719.                 console.log("Quest requires battle.");
  1720.                 doBossBattle();
  1721.                 busy = true;
  1722.             }
  1723.             else if (sessionStorage.questRequirement[0] === '$') {
  1724.                 if (Number(sessionStorage.questRequirement.substr(1)) < getHero().infos.soft_currency) {
  1725.                     // We have enough money... requirement fulfilled.
  1726.                     console.log("Continuing quest, required money obtained.");
  1727.                     sessionStorage.questRequirement = "none";
  1728.                     proceedQuest();
  1729.                     busy = true;
  1730.                 }
  1731.                 else {
  1732.                     if(isNaN(sessionStorage.questRequirement.substr(1)))
  1733.                     {
  1734.                         console.log(sessionStorage.questRequirement);
  1735.                         sessionStorage.questRequirement = "none";
  1736.                         console.log("Invalid money in session storage quest requirement !");
  1737.                     }
  1738.                     else{
  1739.                         // Else we need more money.
  1740.                         //console.log("Need money for quest, cannot continue. Turning ON AutoSalary.");
  1741.                         Storage().autoQuest = "true";
  1742.                     }
  1743.                     busy = false;
  1744.                 }
  1745.             }
  1746.             else if (sessionStorage.questRequirement[0] === '*') {
  1747.                 var energyNeeded = Number(sessionStorage.questRequirement.substr(1));
  1748.                 var energyCurrent = getHero().infos.energy_quest;
  1749.                 if (energyNeeded <= energyCurrent) {
  1750.                     // We have enough energy... requirement fulfilled.
  1751.                     console.log("Continuing quest, required energy obtained.");
  1752.                     sessionStorage.questRequirement = "none";
  1753.                     proceedQuest();
  1754.                     busy = true;
  1755.                 }
  1756.                 // Else we need energy, just wait.
  1757.                 else {
  1758.                     busy = false;
  1759.                     //console.log("Replenishing energy for quest.(" + energyNeeded + " needed)");
  1760.                 }
  1761.             }
  1762.             else if (sessionStorage.questRequirement[0] === 'P')
  1763.             {
  1764.                 // Battle power required.
  1765.                 var neededPower = Number(sessionStorage.questRequirement.substr(1));
  1766.                 if(currentPower < neededPower)
  1767.                 {
  1768.                     console.log("Quest requires "+neededPower+" Battle Power for advancement. Waiting...");
  1769.                     busy = false;
  1770.                 }
  1771.                 else
  1772.                 {
  1773.                     console.log("Battle Power obtained, resuming quest...");
  1774.                     sessionStorage.questRequirement = "none";
  1775.                     proceedQuest();
  1776.                     busy = true;
  1777.                 }
  1778.             }
  1779.             else if (sessionStorage.questRequirement === "unknownQuestButton") {
  1780.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due to unknown quest button. Please manually proceed the current quest screen.");
  1781.                 document.getElementById("autoQuestCheckbox").checked = false;
  1782.                 Storage().autoQuest = "false";
  1783.                 sessionStorage.questRequirement = "none";
  1784.                 busy = false;
  1785.             }
  1786.             else if (sessionStorage.questRequirement === "errorInAutoBattle") {
  1787.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due errors in AutoBattle. Please manually proceed the current quest screen.");
  1788.                 document.getElementById("autoQuestCheckbox").checked = false;
  1789.                 Storage().autoQuest = "false";
  1790.                 sessionStorage.questRequirement = "none";
  1791.                 busy = false;
  1792.             }
  1793.             else if(sessionStorage.questRequirement === "none")
  1794.             {
  1795.                 //console.log("NONE req.");
  1796.                 busy = true;
  1797.                 proceedQuest();
  1798.             }
  1799.             else
  1800.             {
  1801.                 console.log("Invalid quest requirement : "+sessionStorage.questRequirement);
  1802.                 busy=false;
  1803.             }
  1804.         }
  1805.         else if(Storage().autoQuest === "false"){sessionStorage.questRequirement = "none";}
  1806.  
  1807.         if(Storage().autoArenaBattle === "true" && busy === false)
  1808.         {
  1809.             if (/*unsafeWindow.arena_data && unsafeWindow.arena_data.active_opponent*/$('a[rel=arena] span.button-notification-icon').size()>0)
  1810.             {
  1811.                 console.log('Missed one in arena!');
  1812.                 setTimer('nextArenaTime',0);
  1813.             }
  1814.             if(checkTimer("nextArenaTime"))
  1815.             {
  1816.                 console.log("Time to fight in arena.");
  1817.                 doBattle();
  1818.                 busy = true;
  1819.             }
  1820.         }
  1821.  
  1822.  
  1823.         if(Storage().autoTrollBattle === "true" && getHero().infos.questing.id_world>0)
  1824.         {
  1825.             if(busy === false && currentPower >= Number(sessionStorage.battlePowerRequired) && currentPower > 0)
  1826.             {
  1827.                 sessionStorage.battlePowerRequired = "0";
  1828.                 busy = true;
  1829.                 if(Storage().autoQuest === "true")
  1830.                 {
  1831.                     if(sessionStorage.questRequirement[0] === 'P')
  1832.                     {
  1833.                         console.log("AutoBattle disabled for power collection for AutoQuest.");
  1834.                         document.getElementById("autoBattleCheckbox").checked = false;
  1835.                         Storage().autoTrollBattle = "false";
  1836.                         busy = false;
  1837.                     }
  1838.                     else
  1839.                     {
  1840.                         doBossBattle();
  1841.                     }
  1842.                 }
  1843.                 else
  1844.                 {
  1845.                     doBossBattle();
  1846.                 }
  1847.             }
  1848.         }
  1849.         else{sessionStorage.battlePowerRequired = "0";}
  1850.  
  1851.         var ECt= getHero().infos.energy_quest;
  1852.         if (ECt>=60 && (Storage().autoChampsUseEne==="true"))
  1853.             {
  1854.                 console.log('Buying ticket with energy');
  1855.                 var amount = 1;
  1856.                 var currency = 'energy_quest';
  1857.                 var params = {
  1858.                     namespace: 'h\\Champions',
  1859.                     class: 'Champions',
  1860.                     action: 'buy_ticket',
  1861.                     currency: currency,
  1862.                     amount: amount
  1863.                 };
  1864.  
  1865.                 hh_ajax(params, function(data) {
  1866.                     anim_number($('.tickets_number_amount'), data.tokens - amount, amount);
  1867.                     Hero.updates(data.heroChangesUpdate);
  1868.                 });
  1869.         }
  1870.  
  1871.         if (busy==false && Storage().autoChamps==="true" && checkTimer('nextChampionTime'))
  1872.         {
  1873.             console.log("Time to check on champions!");
  1874.             busy=doChampionStuff();
  1875.         }
  1876.  
  1877.         if (/*autoBuy() &&*/ busy===false)
  1878.         {
  1879.             if (sessionStorage.charLevel===undefined)
  1880.             {
  1881.                 sessionStorage.charLevel=0;
  1882.             }
  1883.             if (checkTimer('nextShopTime') || sessionStorage.charLevel<getHero().infos.level) {
  1884.                 console.log("Time to check shop.");
  1885.                 busy = updateShop();
  1886.             }
  1887.         }
  1888.  
  1889.         if (Storage().autoSalary === "true" && busy === false) {
  1890.             if (checkTimer("nextSalaryTime")) {
  1891.                 console.log("Time to fetch salary.");
  1892.                 busy = getSalary();
  1893.             }
  1894.         }
  1895.  
  1896.         if(busy === true && sessionStorage.userLink==="none" && !window.location.pathname.startsWith("/quest"))
  1897.         {
  1898.             sessionStorage.userLink = page;
  1899.         }
  1900.         else if(sessionStorage.userLink !=="none" && busy === false)
  1901.         {
  1902.             console.log("Restoring page "+sessionStorage.userLink);
  1903.             window.location = sessionStorage.userLink;
  1904.             sessionStorage.userLink = "none";
  1905.         }
  1906.     }
  1907.  
  1908.     if(Storage().paranoia === "true" && Storage().master==="true"){
  1909.          if (checkTimer("paranoiaSwitch")) {
  1910.              flipParanoia();
  1911.          }
  1912.     }
  1913.  
  1914.     if(isNaN(Storage().autoLoopTimeMili)){
  1915.         console.log("AutoLoopTimeMili is not a number.");
  1916.         setDefaults();
  1917.     }
  1918.     else{
  1919.         if (sessionStorage.autoLoop === "true") setTimeout(autoLoop, Number(localStorage.autoLoopTimeMili));
  1920.         else console.log("autoLoop Disabled");
  1921.     }
  1922. };
  1923.  
  1924. var setDefaults = function () {
  1925.     console.log("Setting Defaults.");
  1926.     Storage().autoSalary = "true";
  1927.     Storage().autoSalaryTimer = "120";
  1928.     Storage().autoContest = "true";
  1929.     Storage().autoPoPower = "true";
  1930.     Storage().autoMission = "true";
  1931.     Storage().autoMissionC = "true";
  1932.     Storage().autoLeagues = "false";
  1933.     Storage().autoStats = "500000000";
  1934.     sessionStorage.autoLoop = "true";
  1935.     sessionStorage.userLink = "none";
  1936.     Storage().autoLoopTimeMili = "500";
  1937.     Storage().autoQuest = "true";
  1938.     Storage().autoTrollBattle = "true";
  1939.     Storage().eventTrollOrder="";
  1940.     Storage().buyCombTimer="16";
  1941.     Storage().autoArenaBattle = "true";
  1942.     sessionStorage.battlePowerRequired = "0";
  1943.     sessionStorage.questRequirement = "none";
  1944.     Storage().freshStart = "no";
  1945.     Storage().autoChamps="false";
  1946.     Storage().autoChampsUseEne="true";
  1947.     Storage().autoChampsFilter="1;2;3;4;5;6";
  1948.     Storage().autoFreePachinko = "true";
  1949.     Storage().autoExp = "500000000";
  1950.     Storage().autoExpW = "true";
  1951.     Storage().MaxExp = "999999999999999";
  1952.     Storage().autoAff = "500000000";
  1953.     Storage().autoAffW = "true";
  1954.     Storage().MaxAff = "999999999999999";
  1955.     Storage().autoLGM = "500000000";
  1956.     Storage().autoLGMW = "false";
  1957.     Storage().autoLGR = "500000000";
  1958.     Storage().autoLGRW = "false";
  1959.     Storage().autoEGM = "500000000";
  1960.     Storage().autoEGMW = "false";
  1961.     Storage().paranoia="false";
  1962.     Storage().showInfo="true";
  1963.     Storage().spendKobans0="false";
  1964.     Storage().paranoiaSettings="120-300/Sleep:28800-29400|Active:300-420|Casual:1800-2100/6:Sleep|18:Active|22:Casual|24:Sleep";
  1965.     Storage().master="true";
  1966. };
  1967.  
  1968. var CollectEventData=function()
  1969. {
  1970.     if (unsafeWindow.event_data)
  1971.     {
  1972.         var timeLeft=event_data.seconds_until_event_end;
  1973.         setTimer('eventGoing',timeLeft);
  1974.         var Trollz=[];
  1975.         for (var i=0;i<event_data.girls.length;i++)
  1976.         {
  1977.             if (!event_data.girls[i].owned_girl && event_data.girls[i].troll)
  1978.             {
  1979.                 if (Number(event_data.girls[i].troll.id_troll)<getHero().infos.questing.id_world)
  1980.                 {
  1981.                     Trollz.push(Number(event_data.girls[i].troll.id_troll));
  1982.                 }
  1983.             }
  1984.         }
  1985.  
  1986.         var Priority=(Storage().eventTrollOrder?Storage().eventTrollOrder:"").split(";");
  1987.         console.log(Priority);
  1988.         console.log(Trollz);
  1989.         if (Trollz.length>0)
  1990.         {
  1991.             if (Priority[0]!='')
  1992.             {
  1993.                 var found=false;
  1994.                 for (var n=0;n<Priority.length;n++)
  1995.                 {
  1996.                     if (Trollz.includes(Number(Priority[n])))
  1997.                     {
  1998.                         console.log("ET: "+Priority[n]);
  1999.                         sessionStorage.eventTroll=Number(Priority[n]);
  2000.                         found=true;
  2001.                         break;
  2002.                     }
  2003.                 }
  2004.                 if (!found)
  2005.                 {
  2006.                     delete sessionStorage.eventTroll;
  2007.                     //sessionStorage.eventTroll=Trollz.sort((a,b)=>{return a-b;})[0];
  2008.                 }
  2009.             }
  2010.             else
  2011.             {
  2012.                 sessionStorage.eventTroll=Trollz.sort((a,b)=>{return a-b;})[0];
  2013.             }
  2014.         }
  2015.         else
  2016.         {
  2017.             delete sessionStorage.eventTroll;
  2018.         }
  2019.         //console.log('WTF?');
  2020.         if (Storage().buyCombat=="true" && Storage().plusEvent=="true")
  2021.         {
  2022.             //console.log('WTF!');
  2023.             var diff=Math.ceil(Timers["eventGoing"]/1000)-Math.ceil(new Date().getTime()/1000);
  2024.             //console.log(diff);
  2025.             var hero=getHero();
  2026.             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
  2027.             {
  2028.                 var price=hero.get_recharge_cost("fight");
  2029.                 //console.log('PRC: '+price);
  2030.                 if (hero.infos.hard_currency>=price+Number(Storage().kobanBank))
  2031.                 {
  2032.                     console.log('Buying comb');
  2033.                     RechargeCombat(price);
  2034.                 }
  2035.             }
  2036.         }
  2037.         return true;
  2038.     }
  2039.     console.log('no  event');
  2040.     return false;
  2041. }
  2042.  
  2043. var RechargeCombat=function(price) {
  2044.     hh_ajax(
  2045.         {
  2046.             class: "Hero",
  2047.             action: "recharge",
  2048.             type: "fight"
  2049.         }, function(data) {
  2050.                 Hero.update("energy_fight", Hero.infos["energy_fight_max"]);
  2051.                 Hero.update("hard_currency", 0 - price, true);
  2052.             });
  2053.  
  2054. }
  2055.  
  2056. /*var autoBuy=function()
  2057. {
  2058.     return true ;
  2059. }*/
  2060.  
  2061. var getBurst=function()
  2062. {
  2063.     if (document.getElementById('sMenu'))
  2064.     {
  2065.         if (document.getElementById('sMenu').parentElement.style.display=='block')
  2066.         {
  2067.             return false;
  2068.         }
  2069.     }
  2070.     return Storage().master==="true"&&(!(Storage().paranoia==="true") || sessionStorage.burst==="true");
  2071. }
  2072.  
  2073. var Trollz=["Latest","Dark Lord","Ninja Spy","Gruntt","Edwarda","Donatien","Silvanus","Bremen","Finalmecia","Roko Senseï","Karole","Jackson\'s Crew","Pandora witch","Nike"];
  2074. var Timers={};
  2075.  
  2076. var start = function () {
  2077.  
  2078.     if (unsafeWindow.Hero===undefined)
  2079.     {
  2080.         console.log('???no Hero???');
  2081.         $('.hh_logo').click();
  2082.         return;
  2083.     }
  2084.     $('.redirect.gayharem').hide();
  2085.  
  2086.     $('#starter_offer').hide();
  2087.     $('#starter_offer_background').hide();
  2088.     if (sessionStorage.Timers)
  2089.     {
  2090.         Timers=JSON.parse(sessionStorage.Timers);
  2091.     }
  2092.     // Add UI buttons.
  2093.     var UIcontainer = $("#contains_all nav div[rel='content']");
  2094.     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">'
  2095.                      + '<div style="display:flex;flex-direction:row;">'
  2096.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2097.                      +   '<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>'
  2098.                      +   '<span>Questionable Shit</span><div><label class=\"switch\"><input id=\"spendKobans0\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2099.                      +   '<span>Are you sure?</span><div><label class=\"switch\"><input id=\"spendKobans1\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2100.                      +   '<span>You\'ve been warned</span><div><label class=\"switch\"><input id=\"spendKobans2\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2101.                      +   '<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>'
  2102.                      +   '<span>Hours to buy Comb</span><div><input id="buyCombTimer" style="width:80%" type="text"></div>'
  2103.                      +   '<span>Event Troll Order</span><div><input id="eventTrollOrder" style="width:80%" type="text"></div>'
  2104.                      +  '</div>'
  2105.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2106.                      +   '<span>Settings per tab</span><div><label class=\"switch\"><input id=\"settPerTab\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2107.                      +   '<div style="display:flex;flex-direction:row;">'
  2108.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2109.                      +     '<span>AutoSal.</span><div><label class=\"switch\"><input id=\"autoSalaryCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2110.                      +    '</div>'
  2111.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2112.                      +     '<span>sec wait</span><div><input id="autoSalaryTextbox" style="width:80%" type="text"></div>'
  2113.                      +    '</div>'
  2114.                      +   '</div>'
  2115.                      +   '<span>AutoContest</span><div><label class=\"switch\"><input id=\"autoContestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2116.                      +   '<span>AutoPoPower</span><div><label class=\"switch\"><input id=\"autoPoPowerCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2117.                      +   '<div style="display:flex;flex-direction:row;">'
  2118.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2119.                      +     '<span>AutoMission</span><div><label class=\"switch\"><input id=\"autoMissionCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2120.                      +    '</div>'
  2121.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2122.                      +     '<span>Collect</span><div><label class=\"switch\"><input id=\"autoMissionCollect\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2123.                      +    '</div>'
  2124.                      +   '</div>'
  2125.                      +   '<span>AutoQuest</span><div><label class=\"switch\"><input id=\"autoQuestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2126.                      +   '<div style="display:flex;flex-direction:row;">'
  2127.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2128.                      +     '<span>AutoTrollBattle</span><div><label class=\"switch\"><input id=\"autoBattleCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label><select id=\"autoTrollSelector\"></select></div>'
  2129.                      +    '</div>'
  2130.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2131.                      +     '<span>+Event</span><div><label class=\"switch\"><input id=\"plusEvent\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2132.                      +    '</div>'
  2133.                      +   '</div>'
  2134.                      +   '<span>AutoArenaBattle</span><div><label class=\"switch\"><input id=\"autoArenaCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2135.                      +   '<span>AutoPachinko(Free)</span><div><label class=\"switch\"><input id=\"autoFreePachinko\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2136.                      +   '<span>Paranoia mode</span><div><label class=\"switch\"><input id=\"paranoia\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2137.                      +  '</div>'
  2138.                      +  '<div style="padding:10px; display:flex;flex-direction:column;">'
  2139.                      +   '<span>AutoLeagues</span><div><label class=\"switch\"><input id=\"autoLeagues\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2140.                      +   '<div style="display:flex;flex-direction:row;">'
  2141.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2142.                      +     '<span>AutoChampions</span><div><label class=\"switch\"><input id=\"autoChamps\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2143.                      +    '</div>'
  2144.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2145.                      +     '<span>UseEne</span><div><label class=\"switch\"><input id=\"autoChampsUseEne\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2146.                      +    '</div>'
  2147.                      +    '<div style="padding:10px; display:flex;flex-direction:column;">'
  2148.                      +     '<span>Filter</span><div><input id="autoChampsFilter" type="text"></div>'
  2149.                      +    '</div>'
  2150.                      +   '</div>'
  2151.                      +   '<span>AutoStats</span><div><input id="autoStats" type="text"></div>'
  2152.                      +   '<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>'
  2153.                      +   '<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>'
  2154.                      +   '<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>'
  2155.                      +   '<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>'
  2156.                      +   '<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>'
  2157.                      +   '<span>Show info</span><div><label class=\"switch\"><input id=\"showInfo\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  2158.                      +  '</div>'
  2159.                      + '</div>'
  2160.                      +'</div>'+UIcontainer.html());
  2161.  
  2162.     var div = document.createElement('div');
  2163.     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();
  2164.     document.getElementById('contains_all').appendChild(div.firstChild);
  2165.  
  2166.     // Add auto troll options
  2167.     var trollOptions = document.getElementById("autoTrollSelector");
  2168.  
  2169.     for (var i=0;i<unsafeWindow.Hero.infos.questing.id_world;i++)
  2170.     {
  2171.         var option = document.createElement("option");
  2172.         option.value=i;
  2173.         option.text = Trollz[i];
  2174.         trollOptions.add(option);
  2175.     };
  2176.  
  2177.     document.getElementById("settPerTab").checked = localStorage.settPerTab === "true";
  2178.     trollOptions.selectedIndex = Storage().autoTrollSelectedIndex;
  2179.     document.getElementById("autoSalaryCheckbox").checked = Storage().autoSalary === "true";
  2180.     document.getElementById("autoSalaryTextbox").value = Storage().autoSalaryTimer?Storage().autoSalaryTimer:"120";
  2181.     document.getElementById("autoContestCheckbox").checked = Storage().autoContest === "true";
  2182.     document.getElementById("autoPoPowerCheckbox").checked = Storage().autoPoPower === "true";
  2183.     document.getElementById("autoMissionCheckbox").checked = Storage().autoMission === "true";
  2184.     document.getElementById("autoMissionCollect").checked = Storage().autoMissionC === "true";
  2185.     document.getElementById("autoQuestCheckbox").checked = Storage().autoQuest === "true";
  2186.     document.getElementById("autoBattleCheckbox").checked = Storage().autoTrollBattle === "true";
  2187.     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";
  2188.     document.getElementById("buyCombTimer").value = Storage().buyCombTimer?Storage().buyCombTimer:"16";
  2189.     document.getElementById("autoArenaCheckbox").checked = Storage().autoArenaBattle === "true";
  2190.     document.getElementById("autoFreePachinko").checked = Storage().autoFreePachinko === "true";
  2191.     document.getElementById("autoLeagues").checked = Storage().autoLeagues === "true";
  2192.     document.getElementById("autoStats").value = Storage().autoStats?Storage().autoStats:"500000000";
  2193.     document.getElementById("paranoia").checked = Storage().paranoia==="true";
  2194.     document.getElementById("autoExp").value = Storage().autoExp?Storage().autoExp:"500000000";
  2195.     document.getElementById("autoExpW").checked = Storage().autoExpW === "true";
  2196.     document.getElementById("autoAff").value = Storage().autoAff?Storage().autoAff:"500000000";
  2197.     document.getElementById("autoAffW").checked = Storage().autoAffW === "true";
  2198.     document.getElementById("maxExp").value = Storage().MaxExp?Storage().MaxExp:"999999999999999";
  2199.     document.getElementById("maxAff").value = Storage().MaxAff?Storage().MaxAff:"999999999999999";
  2200.     document.getElementById("autoLGM").value = Storage().autoLGM?Storage().autoLGM:"500000000";
  2201.     document.getElementById("autoLGMW").checked = Storage().autoLGMW === "true";
  2202.     document.getElementById("autoLGR").value = Storage().autoLGR?Storage().autoLGR:"500000000";
  2203.     document.getElementById("autoLGRW").checked = Storage().autoLGRW === "true";
  2204.     document.getElementById("autoEGM").value = Storage().autoEGM?Storage().autoEGM:"500000000";
  2205.     document.getElementById("autoEGMW").checked = Storage().autoEGMW === "true";
  2206.     document.getElementById("showInfo").checked = Storage().showInfo === "true";
  2207.     document.getElementById("plusEvent").checked = Storage().trollToFight=="-1" || Storage().plusEvent === "true";
  2208.  
  2209.     document.getElementById("autoChamps").checked = Storage().autoChamps === "true";
  2210.     document.getElementById("autoChampsUseEne").checked = Storage().autoChampsUseEne === "true";
  2211.     document.getElementById("autoChampsFilter").value = Storage().autoChampsFilter?Storage().autoChampsFilter:"1;2;3;4;5;6";
  2212.  
  2213.     document.getElementById("spendKobans0").checked = Storage().spendKobans0 === "true";
  2214.     document.getElementById("spendKobans1").checked = Storage().spendKobans1 === "true";
  2215.     document.getElementById("spendKobans2").checked = Storage().spendKobans2 === "true";
  2216.     document.getElementById("buyCombat").checked = Storage().buyCombat === "true";
  2217.     document.getElementById("kobanBank").value = Storage().kobanBank?Storage().kobanBank:"1000000";
  2218.  
  2219.     document.getElementById("master").checked = Storage().master!=="false";
  2220.  
  2221.     sessionStorage.autoLoop = "true";
  2222.     if (typeof Storage().freshStart == "undefined" || isNaN(Number(Storage().autoLoopTimeMili))) {
  2223.         setDefaults();
  2224.     }
  2225.  
  2226.     if(getPage()=="shop")
  2227.     {
  2228.         updateShop();
  2229.     }
  2230.  
  2231.     if (/*autoBuy() &&*/ getBurst())
  2232.     {
  2233.         doShopping();
  2234.     /*}
  2235.     if (Storage().autoStats === "true" && getBurst())
  2236.     {*/
  2237.         doStatUpgrades();
  2238.     }
  2239.  
  2240.     if (!CollectEventData())
  2241.     {
  2242.         setTimeout(function(){CollectEventData();},5000);
  2243.     }
  2244.  
  2245.  
  2246.     if (hh_nutaku)
  2247.     {
  2248.         function Alive()
  2249.         {
  2250.             window.top.postMessage({ImAlive:true},'*');
  2251.             if (sessionStorage.autoLoop=="true")
  2252.             {
  2253.                 setTimeout(Alive,2000);
  2254.             }
  2255.         }
  2256.         Alive();
  2257.     }
  2258.  
  2259.     autoLoop();
  2260. };
  2261.  
  2262. var started=false;
  2263. var hardened_start=function()
  2264. {
  2265.     if (!started)
  2266.     {
  2267.         started=true;
  2268.         start();
  2269.     }
  2270. }
  2271.  
  2272. $("document").ready(function()
  2273. {
  2274.     setTimeout(hardened_start,1000);
  2275.  
  2276. });
  2277.  
  2278. setTimeout(hardened_start,5000);
Add Comment
Please, Sign In to add comment