Guest User

HaremHeroes Automatic++

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