Guest User

HaremHeroes Automatic++

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