sknitro

HHAuto

Oct 19th, 2018
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         HaremHeroes Automatic(tmp)
  3. // @namespace    JDscripts
  4. // @version      3.24.2
  5. // @description  Open the menu in HaremHeroes(topright) to toggle AutoControlls. Supports AutoSalary, AutoContest, AutoMission, AutoQuest, AutoTrollBattle, AutoArenaBattle and AutoPachinko(Free). Messages are printed in local console. === https://greasyfork.org/en/forum/discussion/43768/x === All changes from https://pastebin.com/Jzrp4DtE , this is only a reupload for easier instalation ===|||Last edit on: Wednesday 24th of October 2018 07:38:44 AM CDT|||
  6. // @author       JD and Dorten(a bit)
  7. // @match        http*://nutaku.haremheroes.com/*
  8. // @match        http*://*.hentaiheroes.com/*
  9. // @require      https://cdn.jsdelivr.net/js-cookie/2.2.0/js.cookie.js
  10. // @grant        GM_addStyle
  11. // @license      MIT
  12. // ==/UserScript==
  13.  
  14. GM_addStyle('/* The switch - the box around the slider */ .switch { position: relative; display: inline-block; width: 60px; height: 34px; } /* 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: 26px; width: 26px; 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(26px); -ms-transform: translateX(26px); transform: translateX(26px); } /* Rounded sliders */ .slider.round { border-radius: 34px;-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);transform:scale(0.8); } .slider.round:before { border-radius: 50%; }');
  15.  
  16. var globalWorldMap;
  17.  
  18. function getHero()
  19. {
  20.     if(unsafeWindow.Hero === undefined)
  21.     {
  22.         setTimeout(autoLoop, Number(sessionStorage.autoLoopTimeMili))
  23.         //console.log(window.wrappedJSObject)
  24.     }
  25.     //console.log(unsafeWindow.Hero);
  26.     return unsafeWindow.Hero;
  27. }
  28.  
  29. function getGirlsMap()
  30. {
  31.     return unsafeWindow.GirlSalaryManager.girlsMap;
  32. }
  33.  
  34. function getPage()
  35. {
  36.     try{
  37.         var ob = document.getElementById("hh_nutaku");
  38.         if(ob===undefined || ob === null)
  39.         {
  40.             ob = document.getElementById("hh_hentai");
  41.         }
  42.         return ob.className.match(/.*page-(.*) .*/i)[1];
  43.     }
  44.     catch(err)
  45.     {
  46.         return ""
  47.     }
  48. }
  49.  
  50. function url_add_param(url, param) {
  51.     if (url.indexOf('?') === -1) url += '?';
  52.     else url += '&';
  53.     return url+param;
  54. }
  55.  
  56. // Retruns true if on correct page.
  57. function gotoPage(page)
  58. {
  59.     var cp=getPage();
  60.     console.log('going '+cp+'->'+page);
  61.     if(getPage() === page)
  62.     {
  63.         if (page=='missions')
  64.         {
  65.             $('h4.missions').each(function(){this.click();});
  66.         }
  67.  
  68.         return true;
  69.     }
  70.     else
  71.     {
  72.         console.log("Navigating to page: "+page);
  73.         var togoto = undefined;
  74.         // get page path
  75.         switch(page)
  76.         {
  77.             case "missions":
  78.             case "activities":
  79.                 togoto = $("nav div[rel='content'] a:has(.activities)").attr("href");
  80.                 break;
  81.             case "harem":
  82.                 togoto = $("nav div[rel='content'] a:has(.harem)").attr("href");
  83.                 break;
  84.             case "map":
  85.                 togoto = $("nav div[rel='content'] a:has(.map)").attr("href");
  86.                 break;
  87.             case "arena":
  88.                 togoto = $("nav div[rel='content'] a:has(.battle)").attr("href");
  89.                 break;
  90.             case "pachinko":
  91.                 togoto = $("nav div[rel='content'] a:has(.pachinko)").attr("href");
  92.                 break;
  93.             case "leaderboard":
  94.                 togoto = $("nav div[rel='content'] a:has(.leaderboard)").attr("href");
  95.                 break;
  96.             case "quest":
  97.                 togoto = getHero().infos.questing.current_url;
  98.                 console.log("Current quest page: "+togoto);
  99.                 break;
  100.             default:
  101.                 console.log("Unknown goto page request. No page \'"+page+"\' defined.");
  102.         }
  103.         if(togoto != undefined)
  104.         {
  105.             if (page=="missions")
  106.             {
  107.                 togoto = url_add_param(togoto, "tab=" + "missions");
  108.             }
  109.             sessionStorage.autoLoop = "false";
  110.             window.location = window.location.origin + togoto;
  111.         }
  112.         else console.log("Couldn't find page path. Page was undefined...");
  113.         return false;
  114.     }
  115. }
  116.  
  117. var proceedQuest = function () {
  118.     //console.log("Starting auto quest.");
  119.     // Check if at correct page.
  120.     if (!gotoPage("quest")) {
  121.         // Click on current quest to naviagte to it.
  122.         console.log("Navigating to current quest.");
  123.         return;
  124.     }
  125.  
  126.     // Get the proceed button type
  127.     var proceedButtonMatch = $("#controls button:not([style='display: none;'])");
  128.     var proceedCostEnergy = Number($("#controls .cost span[cur='*']").text());
  129.     var proceedCostMoney = Number($("#controls .cost span[cur='$']").text().trim().replace(',', ''));
  130.     var proceedType = proceedButtonMatch.attr("act");
  131.  
  132.     if (proceedButtonMatch.length === 0) console.log("Could not find resume button.");
  133.     else if (proceedType === "free") {
  134.         console.log("Proceeding for free.");
  135.         proceedButtonMatch.click();
  136.     }
  137.     else if (proceedType === "pay") {
  138.         var energyCurrent = getHero().infos.energy_quest;
  139.         var moneyCurrent = getHero().infos.soft_currency;
  140.         if(proceedCostEnergy <= energyCurrent)
  141.         {
  142.             // We have energy.
  143.             console.log("Spending "+proceedCostEnergy+" Energy to proceed.");
  144.         }
  145.         else
  146.         {
  147.             console.log("Quest requires "+proceedCostEnergy+" Energy to proceed.");
  148.             sessionStorage.questRequirement = "*"+proceedCostEnergy;
  149.             return;
  150.         }
  151.         if(proceedCostMoney <= moneyCurrent)
  152.         {
  153.             // We have money.
  154.             console.log("Spending "+proceedCostMoney+" Money to proceed.");
  155.         }
  156.         else
  157.         {
  158.             console.log("Spending "+proceedCostEnergy+" Money to proceed.");
  159.             sessionStorage.questRequirement = "$"+proceedCostMoney;
  160.             return;
  161.         }
  162.         proceedButtonMatch.click();
  163.         sessionStorage.autoLoop = "false";
  164.         location.reload();
  165.     }
  166.     else if (proceedType === "use_item") {
  167.         console.log("Proceeding by using X" + Number($("#controls .item span").text()) + " of the required item.");
  168.         proceedButtonMatch.click();
  169.     }
  170.     else if (proceedType === "battle") {
  171.         console.log("Proceeding to battle troll...");
  172.         sessionStorage.questRequirement = "battle";
  173.         // Proceed to battle troll.
  174.         proceedButtonMatch.click();
  175.         sessionStorage.autoLoop = "false";
  176.         location.reload();
  177.     }
  178.     else if (proceedType === "end_archive") {
  179.         console.log("Reached end of current archive. Proceeding to next archive.");
  180.         sessionStorage.autoLoop = "false";
  181.         proceedButtonMatch.click();
  182.     }
  183.     else if (proceedType === "end_play") {
  184.         console.log("Reached end of current play. Proceeding to next play.");
  185.         sessionStorage.autoLoop = "false";
  186.         proceedButtonMatch.click();
  187.     }
  188.     else {
  189.         console.log("Could not identify given resume button.");
  190.         sessionStorage.questRequirement = "unknownQuestButton";
  191.     }
  192. };
  193.  
  194. /**
  195. * Recieves a list of mission objects and returns the mission object to use.
  196. * A mission object looks similar to this :-
  197. * 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}]}
  198. * 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":[]}}]}
  199. * 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}]}
  200. * Eg 1 has mission rewards of xp and money.
  201. * Eg 2 has mission rewards of xp and item.
  202. * Eg 3 has mission rewards of koban/hard_currency.
  203. * cost is the koban price for instant complete.
  204. */
  205. function getSuitableMission(missionsList)
  206. {
  207.     var msn = missionsList[0];
  208.     for(var m in missionsList)
  209.     {
  210.         if(Number(msn.duration) > Number(missionsList[m].duration))
  211.         {
  212.             msn = missionsList[m];
  213.         }
  214.     }
  215.     return msn;
  216. }
  217.  
  218. // retruns a map of WorldName->fullLink/href
  219. // else returns false if navigating there
  220. function getUnlockedWorlds()
  221. {
  222.     if(gotoPage("map"))
  223.     {
  224.         var map = new Map();
  225.         // fill the map
  226.         document.querySelectorAll("a.link-world").forEach(
  227.             function(elem)
  228.             {
  229.                 var name = elem.nextElementSibling.textContent.trim();
  230.                 map.set(name, elem.href);
  231.             }
  232.         );
  233.         // set global latest map
  234.         sessionStorage.globalWorldMap = JSON.stringify([...map]);
  235.         globalWorldMap = map;
  236.         //return not busy
  237.         return map;
  238.     }
  239.     else
  240.     {
  241.         console.log("Navigating to worldmap.");
  242.         // not done
  243.         return false;
  244.     }
  245. }
  246.  
  247. // returns boolean to set busy
  248. function doMissionStuff()
  249. {
  250.     if(!gotoPage("missions"))
  251.     {
  252.         console.log("Navigating to activities page.");
  253.         // return busy
  254.         return true;
  255.     }
  256.     else
  257.     {
  258.         console.log("On activities page.");
  259.         console.log("Collecting finished mission's reward.");
  260.         $(".mission_button button:visible[rel='claim']").click();
  261.         // TODO: select new missions and parse reward data from HTML, it's there in data attributes of tags
  262.         var missions = [];
  263.         var allGood = true;
  264.         // parse missions
  265.         $(".mission_object").each(function(idx,missionObject){
  266.             var data = $.data(missionObject).d;
  267.             // Do not list completed missions
  268.             if(data.remaining_time !== null){
  269.                 // This is not a fresh mission
  270.                 if(data.remaining_time > 0)
  271.                 {
  272.                     console.log("Unfinished mission detected...("+data.remaining_time+"sec. remaining)");
  273.                     Cookies.set('nextMissionTime',data.remaining_time,{expires:new Date(new Date().getTime() + data.remaining_time * 1000)});
  274.                 }
  275.                 else{
  276.                     console.log("Unclaimed mission detected...");
  277.                 }
  278.                 allGood = false;
  279.                 return;
  280.             }
  281.             data.missionObject = missionObject;
  282.             var rewards = [];
  283.             // set rewards
  284.             {
  285.                 // get Reward slots
  286.                 var slots = missionObject.querySelectorAll(".slot");
  287.                 // traverse slots
  288.                 $.each(slots,function(idx,slotDiv){
  289.                     var reward = {};
  290.                     // get slot class list
  291.                     reward.classList = slotDiv.classList;
  292.                     // set reward type
  293.                     if(reward.classList.contains("slot_xp"))reward.type = "xp";
  294.                     else if(reward.classList.contains("slot_SC"))reward.type = "money";
  295.                     else if(reward.classList.contains("slot_HC"))reward.type = "koban";
  296.                     else reward.type = "item";
  297.                     // set value if xp
  298.                     if(reward.type === "xp" || reward.type === "money" || reward.type === "koban")
  299.                     {
  300.                         // remove all non numbers and HTML tags
  301.                         try{
  302.                             reward.data = Number(slotDiv.innerHTML.replace(/<.*?>/g,'').replace(/\D/g,''));
  303.                         }
  304.                         catch(e){
  305.                             console.log("Couldn't parse xp/money data.");
  306.                             console.log(slotDiv);
  307.                         }
  308.                     }
  309.                     // set item details if item
  310.                     else if(reward.type === "item")
  311.                     {
  312.                         try{
  313.                             reward.data = $.data(slotDiv).d;
  314.                         }
  315.                         catch(e){
  316.                             console.log("Couldn't parse item reward slot details.");
  317.                             console.log(slotDiv);
  318.                             reward.type = "unknown";
  319.                         }
  320.                     }
  321.                     rewards.push(reward);
  322.                 });
  323.             }
  324.             data.rewards = rewards;
  325.             missions.push(data);
  326.         });
  327.         if(!allGood){
  328.             console.log("Something went wrong, need to retry later...");
  329.             // busy
  330.             return true;
  331.         }
  332.         console.log("Missions parsed, mission list is:-");
  333.         console.log(missions);
  334.         if(missions.length > 0)
  335.         {
  336.             console.log("Selecting mission from list.");
  337.             var mission = getSuitableMission(missions);
  338.             console.log("Selected mission:-");
  339.             console.log(mission);
  340.             console.log("Selected mission duration: "+mission.duration+"sec.");
  341.             var missionButton = $(mission.missionObject).find("button:visible").first();
  342.             console.log("Mission button of type: "+missionButton.attr("rel"));
  343.             console.log("Clicking mission button.");
  344.             missionButton.click();
  345.             Cookies.set('nextMissionTime',mission.duration,{expires:new Date(new Date().getTime() + mission.duration * 1000)});
  346.         }
  347.         else{
  348.             console.log("No missions detected...!");
  349.             // get gift
  350.             var ck = Cookies.get('nextMissionTime');
  351.             var isAfterGift = document.querySelector("#missions .after_gift").style.display === 'block';
  352.             if(!isAfterGift){
  353.                 if(ck === undefined || ck === 'giftleft')
  354.                 {
  355.                     console.log("Collecting gift.");
  356.                     // click button
  357.                     document.querySelector(".end_gift button").click();
  358.                 }
  359.                 else{
  360.                     console.log("Refreshing to collect gift...");
  361.                     Cookies.set('nextMissionTime','giftleft');
  362.                     window.reload();
  363.                     // is busy
  364.                     return true;
  365.                 }
  366.             }
  367.             var time = 0;
  368.             for(var e in unsafeWindow.HHTimers.timers){
  369.                 try{if(unsafeWindow.HHTimers.timers[e].$elm.selector.includes("#missions_counter"))
  370.                     time=unsafeWindow.HHTimers.timers[e];
  371.                    }
  372.                 catch(e){}
  373.             }
  374.             time = time.remainingTime;
  375.             if(time === undefined)
  376.             {
  377.                 //try again with different selector
  378.                 for(e in unsafeWindow.HHTimers.timers){
  379.                     try{if(unsafeWindow.HHTimers.timers[e].$elm.selector.includes(".after_gift"))
  380.                         time=unsafeWindow.HHTimers.timers[e];
  381.                        }
  382.                     catch(e){}
  383.                 }
  384.                 time = time.remainingTime;
  385.             }
  386.             if(time === undefined){
  387.                 console.log("New mission time was undefined... Setting it manually to 10min.");
  388.                 time = 10*60;
  389.             }
  390.             console.log("New missions in: "+time+"sec.");
  391.             Cookies.set('nextMissionTime',time,{expires:new Date(new Date().getTime() + time * 1000)});
  392.         }
  393.         // not busy
  394.         return false;
  395.     }
  396. }
  397.  
  398. // returns boolean to set busy
  399. function doContestStuff()
  400. {
  401.     if(!gotoPage("missions"))
  402.     {
  403.         console.log("Navigating to activities page.");
  404.         // return busy
  405.         return true;
  406.     }
  407.     else
  408.     {
  409.         console.log("On activities page.");
  410.         console.log("Collecting finished contests's reward.");
  411.         $(".contest .ended button[rel='claim']").click();
  412.         // need to get next contest timer data
  413.         var time = 0;
  414.         for(var e in unsafeWindow.HHTimers.timers){
  415.             try{if(unsafeWindow.HHTimers.timers[e].$barElm/*.selector.includes(".contest_timer")*/)
  416.                 time=unsafeWindow.HHTimers.timers[e];
  417.                }
  418.             catch(e){}
  419.         }
  420.         time = time.remainingTime;
  421.         try{if(time === undefined)
  422.         {
  423.             //try again with different selector
  424.             time = undefined;
  425.             for(e in unsafeWindow.HHTimers.timers){
  426.                 if(unsafeWindow.HHTimers.timers[e].$elm[0].className.includes("contest_timer"))
  427.                     // get closest time
  428.                     if(!(unsafeWindow.HHTimers.timers[e].remainingTime>time))
  429.                         time=unsafeWindow.HHTimers.timers[e].remainingTime;
  430.             }
  431.         }}catch(e){}
  432.         if(time === undefined){
  433.             console.log("New contest time was undefined... Setting it manually to 10min.");
  434.             time = 10*60;
  435.         }
  436.         Cookies.set('nextContestTime',time,{expires:new Date(new Date().getTime() + time * 1000)});
  437.         console.log("Next contest time stored in nextContestTime cookie.(+" + time + " sec.)");
  438.         // Not busy
  439.         return false;
  440.     }
  441. }
  442.  
  443. var getSalary = function () {
  444.     try {
  445.         if(!gotoPage("harem"))
  446.         {
  447.             // Not at Harem screen then goto the Harem screen.
  448.             console.log("Navigating to Harem window.");
  449.             // return busy
  450.             return true;
  451.         }
  452.         else {
  453.             console.log("Detected Harem Screen. Fetching Salary");
  454.             is_cheat_click=function(e) {
  455.                 return false;
  456.             };
  457.             $("#harem_whole #harem_left .salary:not('.loads') button").each(function (index) {
  458.                 $(this).click();
  459.             });
  460.             console.log("Salary fetched. Getting next fetch time");
  461.             // In seconds
  462.             var closestTime = undefined;
  463.             var gMap = getGirlsMap();
  464.             if(gMap === undefined)
  465.             {
  466.                 // error
  467.                 console.log("Girls Map was undefined...! Error, manually setting salary time to 2 min.");
  468.                 closestTime = 2*60;
  469.             }
  470.             else
  471.             {
  472.                 try{
  473.                     // Calc. closest time
  474.                     for(var key in gMap)
  475.                     {
  476.                         // undefined comparision is always false so first iteration is false, hence the not(!)
  477.                         if(!(closestTime<gMap[key].gData.pay_in))
  478.                         {
  479.                             closestTime = gMap[key].gData.pay_in;
  480.                         }
  481.                     }
  482.                 }
  483.                 catch(exp){
  484.                     // error
  485.                     console.log("Girls Map had undefined property...! Error, manually setting salary time to 2 min.");
  486.                     closestTime = 2*60;
  487.                 }
  488.             }
  489.             if(closestTime === undefined)
  490.             {
  491.                 console.log("closestTime was undefined...! Error, manually setting salary time to 2 min.");
  492.                 closestTime = 2*60;
  493.             }
  494.             if(closestTime <= 2)
  495.             {
  496.                 console.log("closestTime is less than/equal to 2 sec. Staying on this page.");
  497.                 // return busy
  498.                 return true;
  499.             }
  500.  
  501.             Cookies.set('nextSalaryTime',closestTime,{expires:new Date(new Date().getTime() + closestTime * 1000)});
  502.             console.log("New fetch time stored in nextSalaryTime cookie.(+" + closestTime + " sec.)");
  503.             // return not busy
  504.             return false;
  505.         }
  506.     }
  507.     catch (ex) {
  508.         console.log("Could not collect salary... " + ex);
  509.         // return not busy
  510.         return false;
  511.     }
  512. };
  513.  
  514. var doStatUpgrades=function()
  515. {
  516.     //Stats?
  517.     //console.log('stats');
  518.     var Hero=getHero();
  519.     var level=Hero.infos.level;
  520.     var stats=[Hero.infos.carac1,Hero.infos.carac2,Hero.infos.carac3];
  521.     var money=Hero.infos.soft_currency;
  522.     var count=0;
  523.     var M=sessionStorage.autoStatsBank?Number(sessionStorage.autoStatsBank):5000000;
  524.     var MainStat=stats[Hero.infos.class-1];
  525.     var Limit=Hero.infos.level*19+Math.min(Hero.infos.level,25)*21;
  526.     var carac=Hero.infos.class;
  527.     for (var car=0; car<3; car++)
  528.     {
  529.         //console.log('stat '+carac);
  530.         var s=stats[carac-1];
  531.         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);
  532.         //console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' price: '+price);
  533.         if (stats[carac-1]<Limit && (money-price)>M && (carac==Hero.infos.class || stats[carac-1]<MainStat/2 || MainStat==Limit))
  534.         {
  535.             count++;
  536.             console.log('money: '+money+' stat'+carac+': '+stats[carac-1]+' price: '+price);
  537.             money-=price;
  538.             var params = {
  539.                 class: "Hero",
  540.                 carac: carac,
  541.                 action: "pay_up_carac"
  542.             };
  543.             hh_ajax(params, function(data) {
  544.  
  545.             });
  546.         }
  547.         carac=carac%3+1;
  548.     }
  549. }
  550.  
  551. var doBossBattle = function()
  552. {
  553.     var currentPower = getHero().infos.energy_fight;
  554.     if(currentPower < 1)
  555.     {
  556.         //console.log("No power for battle.");
  557.         return;
  558.     }
  559.     // Battles the latest boss.
  560.     // Navigate to latest boss.
  561.     if(window.location.pathname.startsWith("/battle.html"))
  562.     {
  563.         // On the battle screen.
  564.         CrushThem();
  565.     }
  566.     else if(window.location.pathname.startsWith("/world"))
  567.     {
  568.         // On some world screen.
  569.         // Click on the local Boss's battle button.
  570.         console.log("Entering battle with this troll.");
  571.         sessionStorage.autoLoop = "false";
  572.         window.location = window.location.origin + $("#worldmap a[class='troll_world']").attr("href");
  573.         return;
  574.     }
  575.     else if(sessionStorage.trollToFight !== undefined && sessionStorage.trollToFight !== "latest")
  576.     {
  577.         console.log("Custom troll fight.");
  578.         console.log("Fighting troll at: "+sessionStorage.trollToFight);
  579.         var worldMap = getUnlockedWorlds();
  580.         if(worldMap === false)
  581.         {
  582.             console.log("Finding unlocked worlds...");
  583.             return;
  584.         }
  585.         var worldPage = worldMap.get(sessionStorage.trollToFight);
  586.         if(worldPage == undefined)
  587.         {
  588.             console.log("ERROR! worldPage undefined for troll at: "+sessionStorage.trollToFight);
  589.             return;
  590.         }
  591.         console.log("Troll world at: "+worldPage);
  592.         window.location = worldPage;
  593.         sessionStorage.autoLoop = "false";
  594.     }
  595.     else if(window.location.pathname.startsWith("/quest"))
  596.     {
  597.         // On some quest screen.
  598.         // Goto this area's screen.
  599.         console.log("Navigating to latest Troll.");
  600.         sessionStorage.autoLoop = "false";
  601.         window.location = window.location.origin + $("#breadcrumbs a[class='back']").last().attr("href");
  602.         return;
  603.     }
  604.     else{
  605.         console.log("Navigating to latest Troll.");
  606.         sessionStorage.autoLoop = "false";
  607.         window.location = window.location.origin + $("nav div[rel='content'] a:has(.continue_quest)").attr("href");
  608.         return;
  609.     }
  610. };
  611.  
  612. var doBattle = function () {
  613.     //console.log("Performing auto battle.");
  614.     // Confirm if on correct screen.
  615.     var page = getPage();
  616.     if(page === "arena")
  617.     {
  618.         if ($("#arena[class='canvas']").length === 1) {
  619.             // Oponent choose screen
  620.             console.log("On opponent choose screen.");
  621.             if(document.getElementById("popups").style.display === "block")
  622.             {
  623.                 console.log("Popup detetcted. Refresh page.");
  624.                 unsafeWindow.reload();
  625.                 return;
  626.             }
  627.             else{
  628.                 console.log("No popups.");
  629.             }
  630.             // Fight the first opponent in list.
  631.             /*var selbutton = $(".opponents_arena .sub_block button:contains('Select')");
  632.             if(selbutton.length<1)
  633.             {
  634.                 console.log("No arena opponents found, storing nextArenaTime...")
  635.                 var arenatime = 0;
  636.                 for(var e in unsafeWindow.HHTimers.timers){
  637.                     try{
  638.                         if(unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".arena_refresh_counter"))
  639.                         arenatime=unsafeWindow.HHTimers.timers[e];
  640.                        }
  641.                     catch(e){}
  642.                 }
  643.                 arenatime = arenatime.remainingTime;
  644.                 Cookies.set('nextArenaTime',arenatime,{expires:new Date(new Date().getTime() + arenatime * 1000)});
  645.                 console.log("New arena time stored in nextArenaTime cookie.(+" + arenatime + " sec.)");
  646.                 return;
  647.             }
  648.             selbutton[0].click();
  649.             sessionStorage.autoLoop = "false";*/
  650.  
  651.             var fought = sessionStorage.fought?sessionStorage.fought:0;
  652.             console.log('already fought: '+fought);
  653.             if(fought>=3)
  654.             {
  655.                 console.log("No arena opponents found, storing nextArenaTime...")
  656.                 var arenatime = 0;
  657.                 for(var e in unsafeWindow.HHTimers.timers){
  658.                     try{
  659.                         if(unsafeWindow.HHTimers.timers[e].$elm.selector.startsWith(".arena_refresh_counter"))
  660.                         arenatime=unsafeWindow.HHTimers.timers[e];
  661.                        }
  662.                     catch(e){}
  663.                 }
  664.                 arenatime = arenatime.remainingTime;
  665.                 Cookies.set('nextArenaTime',arenatime,{expires:new Date(new Date().getTime() + arenatime * 1000)});
  666.                 console.log("New arena time stored in nextArenaTime cookie.(+" + arenatime + " sec.)");
  667.                 sessionStorage.fought=0;
  668.                 return;
  669.             }
  670.             //selbutton[0].click();
  671.             sessionStorage.autoLoop = "false";
  672.             sessionStorage.fought=Number(fought)+1;
  673.             window.location = window.location.origin + '/battle.html?id_arena='+fought;
  674.         }
  675.     }
  676.     else if (page==="battle")
  677.     {
  678.         CrushThem();
  679.     }
  680.     else
  681.     {
  682.         // Switch to the correct screen
  683.         console.log("Switching to battle screen.");
  684.         gotoPage("arena");
  685.         return;
  686.     }
  687. };
  688.  
  689. var doLeagueBattle = function () {
  690.     //console.log("Performing auto leagues.");
  691.     // Confirm if on correct screen.
  692.     var currentPower = getHero().infos.energy_challenge;
  693.     var ltime;
  694.  
  695.     var page = getPage();
  696.     if(page==='battle')
  697.     {
  698.         // On the battle screen.
  699.         CrushThem();
  700.     }
  701.     else if(page === "leaderboard")
  702.     {
  703.        // console.log('ls! '+$('h4.leagues').size());
  704.         $('h4.leagues').each(function(){this.click();});
  705.  
  706.         if(currentPower < 1)
  707.         {
  708.             console.log("No power for leagues.");
  709.             for(var e in unsafeWindow.HHTimers.timers){
  710.                try{
  711.                    if(unsafeWindow.HHTimers.timers[e].type=="energy_challenge")
  712.                        ltime=unsafeWindow.HHTimers.timers[e];
  713.                    }
  714.                catch(e){}
  715.                }
  716.             ltime = ltime.remainingTime;
  717.             Cookies.set('nextLeaguesTime',ltime,{expires:new Date(new Date().getTime() + ltime * 1000)});
  718.             console.log("New league time stored in nextLeaguesTime cookie.(+" + ltime + " sec.)");
  719.             return;
  720.         }
  721.         console.log('check rewards');
  722.  
  723.         if ($('div.rewards_info').size()>0)
  724.         {
  725.             $('div.rewards_info button.purple_button_L').each(function(){this.click();});
  726.             sessionStorage.autoLoop = "false";
  727.             location.reload();
  728.         }
  729.         else
  730.         {
  731.             console.log('No reward');
  732.         }
  733.  
  734.         while ($("span[sort_by='level'][select='asc']").size()==0)
  735.         {
  736.             console.log('resorting');
  737.             $("span[sort_by='level']").each(function(){this.click()});
  738.         }
  739.         console.log('parsing enemies');
  740.         var Data=[];
  741.         $(".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);}});
  742.         if (Data.length==0)
  743.         {
  744.             ltime=35*60;
  745.             console.log('No valid targets!');
  746.             Cookies.set('nextLeaguesTime',ltime,{expires:new Date(new Date().getTime() + ltime * 1000)});
  747.             console.log("New league time stored in nextLeaguesTime cookie.(+" + ltime + " sec.)");
  748.         }
  749.         else
  750.         {
  751.             console.log(Data.length+' valid targets!');
  752.             //console.log(Data[0]);
  753.             sessionStorage.autoLoop = "false";
  754.             /*while (Data[0].className!='lead_table_default')
  755.             {
  756. //                console.log(Data[0]);
  757.                 $(Data[0]).click();
  758.             }*/
  759.             console.log("Hit?");
  760.             location.href = "/battle.html?league_battle=1&id_member=" + $(Data[0]).attr("sorting_id")
  761.             //setInterval(function(){$(".challenge button.blue_button_L").click();},500);
  762.         }
  763.     }
  764.     else if (page==="battle")
  765.     {
  766.         CrushThem();
  767.     }
  768.     else
  769.     {
  770.         // Switch to the correct screen
  771.         console.log("Switching to leagues screen.");
  772.         gotoPage("leaderboard");
  773.         return;
  774.     }
  775. };
  776.  
  777. var  CrushThem = function()
  778. {
  779.     if (getPage() === "battle") {
  780.         // On battle page.
  781.         //console.log("On Battle Page.");
  782.         if ($("#battle[class='canvas']").length === 1) {
  783.             // Battle screen
  784.             console.log("On battle screen.");
  785.             // get button with no autofight, i.e. no koban
  786.             var battleButton = $('#battle button[rel="launch"]:not(.autofight)');
  787.             //console.log(battleButton.get());
  788.             //console.log(battleButton);
  789.             var currentPower = getHero().infos.energy_fight;
  790.             if(battleButton === undefined){
  791.                 console.log("Battle Button was undefined. Disabling all auto-battle.");
  792.                 document.getElementById("autoBattleCheckbox").checked = false;
  793.                 document.getElementById("autoArenaCheckbox").checked = false;
  794.                 if (sessionStorage.questRequirement === "battle")
  795.                 {
  796.                     document.getElementById("autoQuestCheckbox").checked = false;
  797.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  798.                 }
  799.                 return;
  800.             }
  801.             var battle_price = battleButton.find('span').size()>0?battleButton.attr("price_fe"):0;
  802.             if (battleButton.find("span[cur='CH']").size()>0)
  803.             {
  804.                 currentPower=getHero().infos.energy_challenge;
  805.             }
  806.             if(battle_price === undefined){
  807.                 console.log("Could not detect battle button price. Error.");
  808.                 console.log("Disabling all auto-battle.");
  809.                 document.getElementById("autoBattleCheckbox").checked = false;
  810.                 document.getElementById("autoArenaCheckbox").checked = false;
  811.                 if (sessionStorage.questRequirement === "battle")
  812.                 {
  813.                     document.getElementById("autoQuestCheckbox").checked = false;
  814.                     console.log("Auto-quest disabled since it requires battle and auto-battle has errors.");
  815.                 }
  816.                 return;
  817.             }
  818.             console.log("battle price: "+battle_price+"P")
  819.             if(currentPower >= battle_price)
  820.             {
  821.                 // We have the power.
  822.                 is_cheat_click=function(e) {
  823.                     return false;
  824.                 };
  825.                 battleButton.click();
  826.                 // Skip
  827.                 setTimeout(function(){$("#battle_middle button[rel='skip']").click();},2000);
  828.                 setTimeout(function(){$("#battle_end div[style*='display: block;'] .blue_text_button").click();},3500);
  829.  
  830.                 if (sessionStorage.questRequirement === "battle") {
  831.                     // Battle Done.
  832.                     sessionStorage.questRequirement = "none";
  833.                 }
  834.             }
  835.             else
  836.             {
  837.                 // We need more power.
  838.                 console.log("Battle requires "+battle_price+" power.");
  839.                 sessionStorage.battlePowerRequired = battle_price;
  840.                 if(sessionStorage.questRequirement === "battle")sessionStorage.questRequirement = "P"+battle_price;
  841.             }
  842.         }
  843.         else {
  844.             console.log("Could not identify battle screen.");
  845.             if (sessionStorage.questRequirement === "battle") sessionStorage.questRequirement = "errorInAutoBattle";
  846.             return;
  847.         }
  848.     }
  849. }
  850.  
  851. var updateData = function () {
  852.     //console.log("updating UI");
  853.  
  854.     var trollOptions = document.getElementById("autoTrollSelector");
  855.     sessionStorage.autoTrollSelectedIndex = trollOptions.selectedIndex;
  856.     sessionStorage.trollToFight = trollOptions.value;
  857.     sessionStorage.autoSalary = document.getElementById("autoSalaryCheckbox").checked;
  858.     sessionStorage.autoContest = document.getElementById("autoContestCheckbox").checked;
  859.     sessionStorage.autoMission = document.getElementById("autoMissionCheckbox").checked;
  860.     sessionStorage.autoQuest = document.getElementById("autoQuestCheckbox").checked;
  861.     sessionStorage.autoTrollBattle = document.getElementById("autoBattleCheckbox").checked;
  862.     sessionStorage.autoArenaBattle = document.getElementById("autoArenaCheckbox").checked;
  863.     sessionStorage.autoLeagues = document.getElementById("autoLeagues").checked;
  864.     sessionStorage.autoStats = document.getElementById("autoStats").checked;
  865.     sessionStorage.autoStatsBank = document.getElementById("autoStatsBank").value;
  866.     sessionStorage.paranoia = document.getElementById("paranoia").checked;
  867. };
  868.  
  869. /*var getPachinko = function(){
  870.     try {
  871.         if(!gotoPage("pachinko"))
  872.         {
  873.             // Not at Pachinko screen then goto the Pachinko screen.
  874.             console.log("Navigating to Pachinko window.");
  875.             return;
  876.         }
  877.         else {
  878.             console.log("Detected Pachinko Screen. Fetching Pachinko");
  879.             $("#pachinko button[free=1]")[0].click();
  880.             var npach;
  881.             for(var e in unsafeWindow.HHTimers.timersListMin){
  882.                 if(unsafeWindow.HHTimers.timersListMin[e].$elm.selector.startsWith(".pachinko_change"))
  883.                     npach=unsafeWindow.HHTimers.timersListMin[e].remainingTime;
  884.             }
  885.             if(npach !== undefined || npach !== 0)
  886.             {
  887.                 Cookies.set('nextPachinkoTime',npach,{expires:new Date(new Date().getTime() + npach * 1000)});
  888.             }
  889.             else
  890.             {
  891.                 Cookies.remove('nextPachinkoTime');
  892.             }
  893.         }
  894.     }
  895.     catch (ex) {
  896.         console.log("Could not collect pachinko... " + ex);
  897.     }
  898. };*/
  899.  
  900. var toHHMMSS = function (secs)  {
  901.     var sec_num = parseInt(secs, 10);
  902.     var hours   = Math.floor(sec_num / 3600) % 24;
  903.     var minutes = Math.floor(sec_num / 60) % 60;
  904.     var seconds = sec_num % 60;
  905.     return [hours,minutes,seconds]
  906.         .map(v => v < 10 ? "0" + v : v)
  907.         .filter((v,i) => v !== "00" || i > 0)
  908.         .join(":");
  909. }
  910.  
  911. var flipParanoia=function()
  912. {
  913.     var burst=getBurst();
  914.  
  915.     var n = new Date().getHours();
  916.  
  917.     var period=n<7?"Sleep":n<18?"Active":n<23?"Casual":"Sleep";
  918.     var toNextSwitch;
  919.  
  920.     if (burst)
  921.     {
  922.         //going into hiding
  923.         sessionStorage.burst="false";
  924.  
  925.         switch (period)
  926.         {
  927.             case "Active":
  928.                 //3-5 min breaks
  929.                 toNextSwitch=180+Math.floor(Math.random() * 120);
  930.                 break;
  931.             case "Casual":
  932.                 //30-35 min breaks
  933.                 toNextSwitch=1800+Math.floor(Math.random() * 300);
  934.                 break;
  935.             case "Sleep":
  936.                 //8 hours + 0-10 min breaks
  937.                 toNextSwitch=28800+Math.floor(Math.random() * 600);
  938.                 break;
  939.         }
  940.     }
  941.     else
  942.     {
  943.         //going to work
  944.         sessionStorage.burst="true";
  945.         //bursts are 2-5 minutes
  946.         toNextSwitch=120+Math.floor(Math.random() * 180);
  947.     }
  948.     console.log("PARANOIA: "+period+" period. "+(burst?"Resting for ":"Bursting for ")+toHHMMSS(toNextSwitch));
  949.      Cookies.set('paranoiaSwitch',toNextSwitch,{expires:new Date(new Date().getTime() + toNextSwitch * 1000)});
  950. }
  951.  
  952. var autoLoop = function () {
  953.     updateData();
  954.  
  955.     //Cookies.set('nextLeaguesTime',1,{expires:new Date(new Date().getTime() + 1 * 1000)});
  956.     //sessionStorage.autoLoop = "false";
  957.     var busy = false;
  958.     var page = window.location.href;
  959.     var currentPower = getHero().infos.energy_fight;
  960.     //console.log("sal="+sessionStorage.autoSalary);
  961.     /*if(sessionStorage.autoFreePachinko === "true" && busy === false){
  962.         // Navigate to pachinko
  963.         if (Cookies.get("nextPachinkoTime") === undefined) {
  964.             console.log("Time to fetch Pachinko.");
  965.             getPachinko();
  966.             busy = true;
  967.         }
  968.     }*/
  969.  
  970.     if(sessionStorage.paranoia === "true"){
  971.          if (Cookies.get("paranoiaSwitch") === undefined) {
  972.              flipParanoia();
  973.          }
  974.     }
  975.  
  976.     var burst=getBurst();
  977.  
  978.     if (burst)
  979.     {
  980.         if(sessionStorage.autoLeagues === "true" && busy === false){
  981.             // Navigate to leagues
  982.             if (Cookies.get("nextLeaguesTime") === undefined) {
  983.                 console.log("Time to fight in Leagues.");
  984.                 doLeagueBattle();
  985.                 busy = true;
  986.             }
  987.         }
  988.         if(sessionStorage.autoContest === "true" && busy === false){
  989.             if (Cookies.get("nextContestTime") === undefined){
  990.                 console.log("Time to get contest rewards.");
  991.                 busy = doContestStuff();
  992.             }
  993.         }
  994.         if(sessionStorage.autoMission === "true" && busy === false){
  995.             if (Cookies.get("nextMissionTime") === undefined){
  996.                 console.log("Time to do missions.");
  997.                 busy = doMissionStuff();
  998.             }
  999.         }
  1000.         if (sessionStorage.autoSalary === "true" && busy === false) {
  1001.             if (Cookies.get("nextSalaryTime") === undefined) {
  1002.                 console.log("Time to fetch salary.");
  1003.                 busy = getSalary();
  1004.             }
  1005.         }
  1006.         if (sessionStorage.autoQuest === "true" && busy === false) {
  1007.             if (sessionStorage.questRequirement === "battle") {
  1008.                 console.log("Quest requires battle.");
  1009.                 doBossBattle();
  1010.                 busy = true;
  1011.             }
  1012.             else if (sessionStorage.questRequirement[0] === '$') {
  1013.                 if (Number(sessionStorage.questRequirement.substr(1)) < getHero().infos.soft_currency) {
  1014.                     // We have enough money... requirement fulfilled.
  1015.                     console.log("Continuing quest, required money obtained.");
  1016.                     sessionStorage.questRequirement = "none";
  1017.                     proceedQuest();
  1018.                     busy = true;
  1019.                 }
  1020.                 else {
  1021.                     if(isNaN(sessionStorage.questRequirement.substr(1)))
  1022.                     {
  1023.                         sessionStorage.questRequirement = "none";
  1024.                         console.log("Invalid money in session storage quest requirement !");
  1025.                     }
  1026.                     else{
  1027.                         // Else we need more money.
  1028.                         //console.log("Need money for quest, cannot continue. Turning ON AutoSalary.");
  1029.                         sessionStorage.autoQuest = "true";
  1030.                     }
  1031.                     busy = false;
  1032.                 }
  1033.             }
  1034.             else if (sessionStorage.questRequirement[0] === '*') {
  1035.                 var energyNeeded = Number(sessionStorage.questRequirement.substr(1));
  1036.                 var energyCurrent = getHero().infos.energy_quest;
  1037.                 if (energyNeeded <= energyCurrent) {
  1038.                     // We have enough energy... requirement fulfilled.
  1039.                     console.log("Continuing quest, required energy obtained.");
  1040.                     sessionStorage.questRequirement = "none";
  1041.                     proceedQuest();
  1042.                     busy = true;
  1043.                 }
  1044.                 // Else we need energy, just wait.
  1045.                 else {
  1046.                     busy = false;
  1047.                     //console.log("Replenishing energy for quest.(" + energyNeeded + " needed)");
  1048.                 }
  1049.             }
  1050.             else if (sessionStorage.questRequirement[0] === 'P')
  1051.             {
  1052.                 // Battle power required.
  1053.                 var neededPower = Number(sessionStorage.questRequirement.substr(1));
  1054.                 if(currentPower < neededPower)
  1055.                 {
  1056.                     console.log("Quest requires "+neededPower+" Battle Power for advancement. Waiting...");
  1057.                     busy = false;
  1058.                 }
  1059.                 else
  1060.                 {
  1061.                     console.log("Battle Power obtained, resuming quest...");
  1062.                     sessionStorage.questRequirement = "none";
  1063.                     proceedQuest();
  1064.                     busy = true;
  1065.                 }
  1066.             }
  1067.             else if (sessionStorage.questRequirement === "unknownQuestButton") {
  1068.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due to unknown quest button. Please manually proceed the current quest screen.");
  1069.                 document.getElementById("autoQuestCheckbox").checked = false;
  1070.                 sessionStorage.autoQuest = "false";
  1071.                 sessionStorage.questRequirement = "none";
  1072.                 busy = false;
  1073.             }
  1074.             else if (sessionStorage.questRequirement === "errorInAutoBattle") {
  1075.                 console.log("AutoQuest disabled.AutoQuest cannot be performed due errors in AutoBattle. Please manually proceed the current quest screen.");
  1076.                 document.getElementById("autoQuestCheckbox").checked = false;
  1077.                 sessionStorage.autoQuest = "false";
  1078.                 sessionStorage.questRequirement = "none";
  1079.                 busy = false;
  1080.             }
  1081.             else if(sessionStorage.questRequirement === "none")
  1082.             {
  1083.                 //console.log("NONE req.");
  1084.                 busy = true;
  1085.                 proceedQuest();
  1086.             }
  1087.             else
  1088.             {
  1089.                 console.log("Invalid quest requirement : "+sessionStorage.questRequirement);
  1090.                 busy=false;
  1091.             }
  1092.         }
  1093.         else if(sessionStorage.autoQuest === "false"){sessionStorage.questRequirement = "none";}
  1094.  
  1095.         if(sessionStorage.autoArenaBattle === "true" && busy === false)
  1096.         {
  1097.             if (unsafeWindow.arena_data && unsafeWindow.arena_data.active_opponent)
  1098.             {
  1099.                 console.log('Missed one in arena!');
  1100.                 Cookies.set('nextArenaTime',500,{expires:new Date(new Date().getTime() + 500)});
  1101.             }
  1102.             if(Cookies.get("nextArenaTime") === undefined)
  1103.             {
  1104.                 console.log("Time to fight in arena.");
  1105.                 doBattle();
  1106.                 busy = true;
  1107.             }
  1108.         }
  1109.  
  1110.         if(sessionStorage.autoTrollBattle === "true")
  1111.         {
  1112.             if(busy === false && currentPower >= Number(sessionStorage.battlePowerRequired) && currentPower > 0)
  1113.             {
  1114.                 sessionStorage.battlePowerRequired = "0";
  1115.                 busy = true;
  1116.                 if(sessionStorage.autoQuest === "true")
  1117.                 {
  1118.                     if(sessionStorage.questRequirement[0] === 'P')
  1119.                     {
  1120.                         console.log("AutoBattle disabled for power collection for AutoQuest.");
  1121.                         document.getElementById("autoBattleCheckbox").checked = false;
  1122.                         sessionStorage.autoTrollBattle = "false";
  1123.                         busy = false;
  1124.                     }
  1125.                     else
  1126.                     {
  1127.                         doBossBattle();
  1128.                     }
  1129.                 }
  1130.                 else
  1131.                 {
  1132.                     doBossBattle();
  1133.                 }
  1134.             }
  1135.         }
  1136.         else{sessionStorage.battlePowerRequired = "0";}
  1137.  
  1138.         if(busy === true && sessionStorage.userLink==="none" && !window.location.pathname.startsWith("/quest"))
  1139.         {
  1140.             sessionStorage.userLink = page;
  1141.         }
  1142.         else if(sessionStorage.userLink !=="none" && busy === false)
  1143.         {
  1144.             console.log("Restoring page "+sessionStorage.userLink);
  1145.             window.location = sessionStorage.userLink;
  1146.             sessionStorage.userLink = "none";
  1147.         }
  1148.     }
  1149.     if(isNaN(sessionStorage.autoLoopTimeMili)){
  1150.         console.log("AutoLoopTimeMili is not a number.");
  1151.         setDefaults();
  1152.     }
  1153.     else{
  1154.         if (sessionStorage.autoLoop === "true") setTimeout(autoLoop, Number(sessionStorage.autoLoopTimeMili));
  1155.         else console.log("autoLoop Disabled");
  1156.     }
  1157. };
  1158.  
  1159. var setDefaults = function () {
  1160.     console.log("Setting Defaults.");
  1161.     sessionStorage.autoSalary = "false";
  1162.     sessionStorage.autoContest = "false";
  1163.     sessionStorage.autoMission = "false";
  1164.     sessionStorage.autoLeagues = "false";
  1165.     sessionStorage.autoStats = "false";
  1166.     sessionStorage.autoStatsBank = "5000000";
  1167.     sessionStorage.autoLoop = "true";
  1168.     sessionStorage.userLink = "none";
  1169.     sessionStorage.autoLoopTimeMili = "200";
  1170.     sessionStorage.autoQuest = "false";
  1171.     sessionStorage.autoTrollBattle = "false";
  1172.     sessionStorage.autoArenaBattle = "false";
  1173.     sessionStorage.battlePowerRequired = "0";
  1174.     sessionStorage.questRequirement = "none";
  1175.     sessionStorage.freshStart = "no";
  1176. };
  1177.  
  1178. var getBurst=function()
  1179. {
  1180.     //console.log((sessionStorage.paranoia==="true")+":"+(sessionStorage.burst));
  1181.  
  1182.     if (document.getElementById('sMenu'))
  1183.     {
  1184.         if (document.getElementById('sMenu').parentElement.style.display=='block')
  1185.         {
  1186.             return false;
  1187.         }
  1188.     }
  1189.     return !(sessionStorage.paranoia==="true") || sessionStorage.burst==="true";
  1190. }
  1191.  
  1192. var start = function () {
  1193.     //console.log("script started");
  1194.     // get world map
  1195.     //sessionStorage.autoLeagues = "false"
  1196.     try{
  1197.         globalWorldMap = new Map(JSON.parse(sessionStorage.globalWorldMap));
  1198.         if(!(globalWorldMap instanceof Map) || globalWorldMap.size<1)throw false;
  1199.     }
  1200.     catch(e)
  1201.     {
  1202.         console.log("Need world map NOW...");
  1203.         if(!getUnlockedWorlds())
  1204.         {
  1205.             sessionStorage.userLink = window.location.href;
  1206.             return;
  1207.         }
  1208.     }
  1209.     // Add UI buttons.
  1210.     var UIcontainer = $("#contains_all nav div[rel='content']");
  1211.     UIcontainer.html('<div style="position: absolute;right: 15.7%; padding: 10px;width: inherit;text-align: center;display:flex;flex-direction:column;-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);transform:scale(0.8);" id="sMenu">'
  1212.                      + '<div><span>AutoSal. </span><label class=\"switch\"><input id=\"autoSalaryCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1213.                      + '<div><span>AutoContest</span><label class=\"switch\"><input id=\"autoContestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1214.                      + '<div><span>AutoMission</span><label class=\"switch\"><input id=\"autoMissionCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1215.                      + '<div><span>AutoQuest</span><label class=\"switch\"><input id=\"autoQuestCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1216.                      +'<div><span>AutoArenaBattle</span><label class=\"switch\"><input id=\"autoArenaCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1217.                      +'<div><span>AutoLeagues</span><label class=\"switch\"><input id=\"autoLeagues\" type=\"checkbox\"><span class=\"slider round\"></span></label></div>'
  1218.                      +'<div><span>PaRaNoIa!</span><label class=\"switch\"><input id=\"paranoia\" type=\"checkbox\"><span class=\"slider round\"></span></label></div><div>&nbsp</div>'
  1219.                      + '<span>AutoTrollBattle</span><div><label class=\"switch\"><input id=\"autoBattleCheckbox\" type=\"checkbox\"><span class=\"slider round\"></span></label>\
  1220.                       <select id=\"autoTrollSelector\"><option value=\"latest\">Latest</option></select></div><div>&nbsp</div>'
  1221.                      +'<span>AutoStats</span><div><label class=\"switch\"><input id=\"autoStats\" type=\"checkbox\"><span class=\"slider round\"></span></label><input id="autoStatsBank" type="text"></div>'
  1222.                      +'</div>'+UIcontainer.html());
  1223.     // Add auto troll options
  1224.     var trollOptions = document.getElementById("autoTrollSelector");
  1225.     globalWorldMap.forEach(function(val,key){
  1226.         var option = document.createElement("option");
  1227.         option.text = key;
  1228.         trollOptions.add(option);
  1229.     });
  1230.  
  1231.     if(Cookies.get("nextMissionTime")=='600')
  1232.     {
  1233.         console.log('FUCK');
  1234.         Cookies.set('nextMissionTime',1,{expires:new Date(new Date().getTime() +1)});
  1235.     }
  1236.  
  1237.     trollOptions.selectedIndex = sessionStorage.autoTrollSelectedIndex;
  1238.     document.getElementById("autoSalaryCheckbox").checked = sessionStorage.autoSalary === "true";
  1239.     document.getElementById("autoContestCheckbox").checked = sessionStorage.autoContest === "true";
  1240.     document.getElementById("autoMissionCheckbox").checked = sessionStorage.autoMission === "true";
  1241.     document.getElementById("autoQuestCheckbox").checked = sessionStorage.autoQuest === "true";
  1242.     document.getElementById("autoBattleCheckbox").checked = sessionStorage.autoTrollBattle === "true";
  1243.     document.getElementById("autoArenaCheckbox").checked = sessionStorage.autoArenaBattle === "true";
  1244.     document.getElementById("autoLeagues").checked = sessionStorage.autoLeagues === "true";
  1245.     document.getElementById("autoStats").checked = sessionStorage.autoStats === "true";
  1246.     document.getElementById("autoStatsBank").value = sessionStorage.autoStatsBank?sessionStorage.autoStatsBank:"5000000";
  1247.     document.getElementById("paranoia").checked = sessionStorage.paranoia==="true";
  1248.     sessionStorage.autoLoop = "true";
  1249.     if (typeof sessionStorage.freshStart == "undefined" || isNaN(Number(sessionStorage.autoLoopTimeMili))) {
  1250.         setDefaults();
  1251.     }
  1252.  
  1253.     if (sessionStorage.autoStats === "true" && getBurst())
  1254.     {
  1255.         doStatUpgrades();
  1256.     }
  1257.  
  1258.     autoLoop();
  1259. };
  1260. $("document").ready(start);
Add Comment
Please, Sign In to add comment