您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
bot for xospital.mobi
// ==UserScript== // @name xospital bot // @namespace http://tampermonkey.net/ // @version 0.2.3 // @description bot for xospital.mobi // @include https://xospital.mobi/* // @include https://odkl.xospital.mobi/* // @author axmed2004 // @run-at document-start // ==/UserScript== // интервал в ЧП при найденном пациенте (сек.) var questsShortTimeout = 3; // интервал в ЧП при отсутствии пациента (мин.) var questsLongTimeout = 1; // интервал для перехода по страницам мин/макс (сек.) var rimin = +localStorage.getItem("pagesRunIntervalMin")||4; var rimax = +localStorage.getItem("pagesRunIntervalMax")||6; if (rimin > rimax || rimin < 1) rimin = 1; if (rimax < rimin || rimax < 1) rimax = 1; // интервал до нового цикла мин/макс (мин.) var rtmin = +localStorage.getItem("restartTimeMin")||3; var rtmax = +localStorage.getItem("restartTimeMax")||4; if (rtmin > rtmax || rtmin < 1) rtmin = 1; if (rtmax < rtmin || rtmax < 1) rtmax = 1; //при наличии Карманного компьютера var rsm = localStorage.getItem("roomsSelectMethod") || "random"; var rsp = localStorage.getItem("roomsSelectParam") || "time"; var rsv = localStorage.getItem("roomsSelectValue") || "min"; var asm = localStorage.getItem("autoparkSelectMethod") || "random"; var asp = localStorage.getItem("autoparkSelectParam") || "time"; var asv = localStorage.getItem("autoparkSelectValue") || "min"; var patientsTimeoutTime = Math.round((Math.random() * (rtmax - rtmin) + rtmin) * 60); var chestsTimeoutTime = Math.round((Math.random() + 7) * 60); var pagesRunIntervalTime = (Math.random() * (rimax - rimin) + rimin) * 1000; var restartInterval = null; var pagesTimeout = null; var restartTimeoutRunned = false; var rooms = /^https:\/\/(odkl\.)?xospital\.mobi\/Rooms/.test(location.href); var reception = /^https:\/\/(odkl\.)?xospital\.mobi\/Reception/.test(location.href); var pharmacy = /^https:\/\/(odkl\.)?xospital\.mobi\/Pharmacy/.test(location.href); var autopark = /^https:\/\/(odkl\.)?xospital\.mobi\/AutoPark\?/.test(location.href); var autoParkDestination = /^https:\/\/(odkl\.)?xospital\.mobi\/AutoParkDestination\?/.test(location.href); var vetclinic = /^https:\/\/(odkl\.)?xospital\.mobi\/VetClinic/.test(location.href); var quests = /^https:\/\/(odkl\.)?xospital\.mobi\/Quests/.test(location.href); var chests = /^https:\/\/(odkl\.)?xospital\.mobi\/Underwater\/Chests/.test(location.href); var mainPages = rooms || reception || pharmacy || autopark || autoParkDestination; var splash = `<div id='splashoverlay' style='position:absolute;left:0px;top:0px;width:100%;height:100%;background-color:#000;opacity:0.4'></div> <div id='splashinfo' style='position:absolute;margin:0 auto;border:3px solid #ccc;background-color:white;width:50%;height:80%;left: 25%;top: 10%;'> Бот состоит из 4 частей: <br><br> 1. Бот для палат, лабораторий и автопарка, циклически передвигается по ним.<br> 2. Бот для ЧП.<br> 3. Бот для ветеринарной клиники.<br> 4. Бот для покупки ключей в Подводной охоте.<br><br> Для параллельной работы откройте в браузере отдельные вкладки для каждого бота.<br> Нажмите на значок настроек в заголовке страницы и выберите нужные параметры.<br> <span style='color:red;padding-left:10px;'>*</span><i>Интервалы сделаны для симуляции поведения человека, при слишком коротких интервалах возможен бан аккаунта.</i><br><br> Для избежания бана рекомендую каждые несколько часов выключать бота. Не оставляйте его включенным на ночь.<br> Установите временные интервалы соответсвенно уровню вашего оборудования (Рентгеносканер, Громкоговоритель, GPS) (+/- 1-2 мин от текущего значения)<br><br> <button style='display:block;margin:0 auto;font-size:16px;' onclick='(function(){localStorage.setItem("firstrun", "false");location.reload();})()'>Перезагрузить страницу для запуска скрипта</button> </div>`; var setsOpened = false; Node.prototype.get=function(s){ return this.querySelector(s); } Node.prototype.getAll=function(s){ return this.querySelectorAll(s); } function get(s){ return document.querySelector(s); } function getAll(s){ return document.querySelectorAll(s); } function openSets() { setsOpened = true; if (get("#splashoverlay") != null && get("#setsWindow")!=null) { get("#splashoverlay").style.display = "block"; get("#setsWindow").style.top = get("#botsets").offsetTop + get("#botsets").height; get("#setsWindow").style.right = get("#botsets").offsetTop + get("#botsets").width; } get("#setsWindow").style.display = "block"; clearInterval(restartInterval); clearTimeout(pagesTimeout); } function closeSets() { setsOpened = false; get("#splashoverlay").style.display = "none"; get("#setsWindow").style.display = "none"; if (mainPages) { if(restartTimeoutRunned) restartTimeout() } else pagesTimeout=setTimeout(patientsRun, pagesRunIntervalTime); } function drawSets() { if (mainPages) { get("div.caption h1").insertAdjacentHTML("beforeend", "<img id='botsets' width=30 height=30 style='float:right;vertical-align:top;' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAACSVBMVEUAAAApKSk0NDQ1NTU2NjY5OTk7Ozs+Pj5BQUFGRkZHR0dLS0tMTExSUlI3Nzc4ODg5OTk2NjY3Nzc4ODg1NTU0NDQ1NTU0NDQ1NTU2NjY0NDQ1NTU0NDQ0NDQ1NTU0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9BQUFCQkJDQ0NERERFRUVGRkZKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJUVFRVVVVXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJkZGRlZWVmZmZnZ2doaGhqampra2tsbGxtbW1vb29wcHBycnJzc3N2dnZ3d3d4eHh5eXl6enp8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaJiYmMjIyOjo6Pj4+QkJCRkZGTk5OUlJSVlZWXl5eYmJiZmZkJAAaTAAAAb3RSTlMAAAAAAAAAAAAAAAAAAAICAgQEBAYKCgwMDA4OEBYWGBocICImKCosMDI2OD5ARkpQVFZYWlxeYmRmaGpucHR2eHp8gZObnZ+jpamrr7Gztbm7vb/Bw8XHycvN0dPV19nb3d/h4+nt7/Hz9ff5+/2biH1OAAADe0lEQVRIx5VW+UMMURwflCv3WURkU5GjKEeO3MdGbbmiyFZrd2tmPkpsFyVSbCSyJVcipUM3ErX7l3lvjp3Zw7a+v8y89z6fN+99vp/3vsMwnrHyZKaB4wxXji9j/IuTkOKon4RMlDY2Nz+34Lx/+JlGNDpIWJEzwxduQ1yU+KIBPlBCK7BW7NkUt94Tv+0G2MRA+nYI/DAl9AKJtB1wkENejBt83h6W7lK7jmGijLhnp4TJUuRFMEx4Ck9GCna4EhKBorcW0p+mI8yvDiE6eOSnppN2WetNcDvV+FgOxQOOsce8oOZ7hxSvRXXrxx09RWC3KvhIM24NUkR/Q1Vlw7BdJtgHnlZWNQ7R175C3NjgJOwB2hxTBNEszkmI4VA27hv/0wI2SllTEo9634RaYK9q0wEp4Ad94Xt4nJqtlimcFe3wr7DCvMY1EemoUoYnOm1Wq61rwtlhL0eyW6p1qJRHJz/cEfW3tMkC28ugdcVHs2iQBn/XUCdkZxeQR+0fqfMJzBoFvUhz2AgMS/M/BK7HhwQFhSToCUP6Rh9gSNIspOhQbZZJ8IM09A5IDRYnWpWmJPQ1dY0xSxvKpFA0f69bXlAxrq6QP71aD4u88867wr7OMnqUv2gbcdrnM7BdWWwC0OVUaritsRx6xoQmteANMC5WCCEFsKlHm2BiOLSou2qQoRIvKBtW9WgLuP8nmH0tKZh1X5KZyUFFc/uoP5seabdVIId4gsp694si67VgGb9KJWtHhSCrjgnT5bIkKXyrZ+JWpwMfJfwrimFzdWGkf9bSyCQDMODNGnXSNN088g5sXDLXudiIfDyVF/WIfJkVzVcnm68OxnBXu6Z6s/dHp71LcdrtPJzDfdUB6vI8QGdc8VMd0Xq3IxqYPPUlcGK6irAPrhbwDHIM4xX8ZhYlv3wTftxGfqSTsFtJ0D/jDRCrXAEFKB6hvUNN1dWvviuo0ZfVD2yC0fqLYNK4mOz2oGPMKlz3hZ9k+d/fFPLxbNzRdwvcdnUB2k8LSgnJ8KUMDuiVjjEP7uJl0i57Uwhul1sJ4uhcyeEB82PM0iVIsmWInj8tIlUoWfFei6Ig9RHwwoa+Aftpe0ESKYpbvJTdWOn+j+DF24joEuaj7Cqx0IQXoh1y5/j3K5CF8qaWlpcluODnv4ZW/jk55ich9KzexHGm69rlXgb/AhdictoAuPAVAAAAAElFTkSuQmCC'>"); let setsWindow = `<div id='setsWindow' style='display:none;z-index:20;position:absolute;top:10%;right:10%;background-color:white;border:3px solid #ccc;'> <table> <tr><td>Интервал перехода между страницами<br> от <input type='number' min='1' id='pagesRunIntervalMin' value='` + rimin + `' style='width:50px;'>до <input type='number' min='1' id='pagesRunIntervalMax' value='` + rimax + `' style='width:50px;'>сек </td></tr> <tr><td>Интервал до нового цикла в минутах<br> от <input type='number' min='1' id='restartTimeMin' value='` + rtmin + `' style='width:50px;'>до <input type='number' min='1' id='restartTimeMax' value='` + rtmax + `' style='width:50px;'>мин </td></tr> <tr><td>Выбор пациентов в палаты<br> <select id='roomsSelectMethod'> <option value='random'>Случайно</option> <option value='event'>По событию</option> <option value='value'>По значению</option> </select> <select id='roomsSelectParam'` + (rsm != `value` ? ` disabled` : ``) + `> <option value='time'>Время</option> <option value='price'>Стоимость</option> <option value='exp'>Опыт</option> </select> <select id='roomsSelectValue'` + (rsm != `value` ? ` disabled` : ``) + `> <option value='min'>Мин.</option> <option value='max'>Макс.</option> <option value='random'>Любое</option> </select> </td></tr> <tr><td>Выбор пациентов в автопарк<br> <select id='autoparkSelectMethod'> <option value='random'>Случайно</option> <option value='event'>По событию</option> <option value='value'>По значению</option> </select> <select id='autoparkSelectParam' ` + (asm != `value` ? ` disabled` : ``) + `> <option value='time'>Время</option> <option value='price'>Стоимость</option> <option value='exp'>Опыт</option> </select> <select id='autoparkSelectValue'` + (asm != `value` ? ` disabled` : ``) + `> <option value='min'>Мин.</option> <option value='max'>Макс.</option> <option value='random'>Любое</option> </select> </td></tr> </table> <div> <button id='savesets' style='margin-top:20px;display:inline-block;'>Сохранить</button> <button id='closesets' style='margin-top:20px;display:inline-block;float:right;'>Закрыть</button> </div></div>`; document.body.insertAdjacentHTML("afterBegin", setsWindow); get("#roomsSelectMethod").value = rsm; get("#roomsSelectParam").value = rsp; get("#roomsSelectValue").value = rsv; get("#autoparkSelectMethod").value = asm; get("#autoparkSelectParam").value = asp; get("#autoparkSelectValue").value = asv; document.body.insertAdjacentHTML("afterBegin", "<div id='splashoverlay' style='position:absolute;display:none;width:100%;height:100%;left:0px;top:0px;background-color:#000;opacity:0.4;'></div>"); get("#roomsSelectMethod").addEventListener("change", (e) => { get("#roomsSelectParam").disabled = e.target.value != "value"; get("#roomsSelectValue").disabled = e.target.value != "value"; }) get("#autoparkSelectMethod").addEventListener("change", (e) => { get("#autoparkSelectParam").disabled = e.target.value != "value"; get("#autoparkSelectValue").disabled = e.target.value != "value"; }) get("#botsets").addEventListener("click", () => { openSets(); }) get("#savesets").addEventListener("click", () => { let runIntervalMin_tb = get("#pagesRunIntervalMin").value; let runIntervalMax_tb = get("#pagesRunIntervalMax").value; let restartTimeMin_tb = get("#restartTimeMin").value; let restartTimeMax_tb = get("#restartTimeMax").value; let roomsSelectMethod_select = get("#roomsSelectMethod").value; let roomsSelectParam_select = get("#roomsSelectParam").value; let roomsSelectValue_select = get("#roomsSelectValue").value; let autoparkSelectMethod_select = get("#autoparkSelectMethod").value; let autoparkSelectParam_select = get("#autoparkSelectParam").value; let autoParkSelectValue_select = get("#autoparkSelectValue").value; if (runIntervalMin_tb != "" && +runIntervalMin_tb > 0 && runIntervalMax_tb != "" && +runIntervalMax_tb > 0 && +runIntervalMax_tb > +runIntervalMin_tb) { localStorage.setItem("pagesRunIntervalMin", runIntervalMin_tb); localStorage.setItem("pagesRunIntervalMax", runIntervalMax_tb); } if (restartTimeMin_tb != "" && +restartTimeMin_tb > 0 && restartTimeMax_tb != "" && +restartTimeMax_tb > 0 && +restartTimeMax_tb> +restartTimeMin_tb) { localStorage.setItem("restartTimeMin", restartTimeMin_tb); localStorage.setItem("restartTimeMax", restartTimeMax_tb); } localStorage.setItem("roomsSelectMethod", roomsSelectMethod_select); if (roomsSelectMethod_select == "value") { localStorage.setItem("roomsSelectParam", roomsSelectParam_select); localStorage.setItem("roomsSelectValue", roomsSelectValue_select); } localStorage.setItem("autoparkSelectMethod", autoparkSelectMethod_select); if (autoparkSelectMethod_select == "value") { localStorage.setItem("autoparkSelectParam", autoparkSelectParam_select); localStorage.setItem("autoparkSelectValue", autoParkSelectValue_select); } }) get("#closesets").addEventListener("click", () => { closeSets(); }) } } function restartTimeout() { if (!setsOpened) { restartTimeoutRunned = true; if (get("span#timeleft") == null) { var span = document.createElement("span"); span.setAttribute("id","timeleft"); get("div.caption h1").appendChild(span); } restartInterval= setInterval(() => { patientsTimeoutTime--; if(patientsTimeoutTime>=0){ mins=Math.floor(patientsTimeoutTime/60); secs=Math.floor((patientsTimeoutTime-mins*60)); if(secs<10) secs="0"+secs; document.title=mins+":"+secs; get("span#timeleft").innerHTML=document.title; } else{ clearInterval(restartInterval) get("ul.action_list a[href^='/Rooms']").click(); } }, 1000); } } function patientsRun() { if(rooms) { // палаты let l = get("a[href^='/Rooms/Examine']") || get("a[href^='/Rooms/FirstExamine']") || get("a[href^='/Rooms/GetVitamin']") || get("a[href^='/Rooms/GetPotion']") || get("a[href^='/Rooms/Discharge']") || get("a[href^='/Rooms/ClearAll']") || get("a[href^='/Rooms/RoomClear']"); let fl = get("ul.action_list a[href^='/Pharmacy']"); if (l) l.click(); else if(rsm=="random" && get("a[href^='/Reception/TreatAll?treatType=Any']")!=null) get("a[href^='/Reception/TreatAll?treatType=Any']").click(); else if(rsm=="random" && get("a[href^='/Reception/TreatAllConfirm?']")!=null) get("a[href^='/Reception/TreatAllConfirm?']").click(); else if(rsm=="event" && get("a[href^='/Reception/TreatAll?treatType=Epidemic']")!=null) get("a[href^='/Reception/TreatAll?treatType=Epidemic']").click(); else if (rsm == "value") { let l = get("ul.padtop_s a[href^='/Reception?roomIndex']") if (l) l.click(); else if(get("a[href^='/Rooms?page=']")!=null){ let url = new URL(location.href); let urlp = 1; if (url.searchParams.has("page")) urlp = +url.searchParams.get("page"); if(get("a[href^='/Rooms?page="+(urlp+1)+"']")!=null) get("a[href^='/Rooms?page=" + (urlp + 1) + "']").click(); else fl.click(); } } else fl.click(); //переход в лаборатории } else if(reception){ // приемная var $list = getAll('ul.delim-list.padtop_s li.padtop_s'); let l = get('.epidemic'); if(rsm=="event" && l) l.get('a').click(); else{ var elem=0; arr = []; arr2 = []; if(rsv=="random") elem = ~~(Math.random() * $list.length); else{ if(rsp=="price"){ $list.forEach(el=>{ arr.push(+el.getAll("span.money")[1].innerHTML); }) } else if(rsp=="time"){ $list.forEach(el=>{ let t = el.get(".smallfont.minor span.ylwtitle").innerHTML; let m = ""; if(/(\d+) д./.test(t)){ m = t.match(/(\d+) д./); arr.push(+m[1] * 24 * 60); } else if(/(\d+) д. (\d+) ч./.test(t)){ m = t.match(/(\d+) д. (\d+) ч./); arr.push(+m[1] * 24 * 60 + (+m[2]) * 60); } else if(/(\d+) ч./.test(t)){ m = t.match(/(\d+) ч./); arr.push(+m[1] * 60); } else if(/(\d+) мин./.test(t)){ m = t.match(/(\d+) мин./); arr.push(+m[1]); } else if(/(\d+) ч. (\d+) мин./.test(t)){ m = t.match(/(\d+) ч. (\d+) мин./); arr.push(+m[1] * 60 + parseInt(m[2])); } }) } else if(rsp=="exp"){ $list.forEach(el=>{ arr.push(+el.getAll("span.money")[0].innerHTML); }) } arr2 = [...arr]; arr.sort((a, b) => a - b); elem = arr2.indexOf(arr[rsv == "min" ? 0 : arr.length - 1]); } $list[elem].get("a").click(); } } else if(pharmacy){ // лаборатории let l = get("a[href^='/Pharmacy/CheerupAll']") || get("a[href^='/Pharmacy/Mix']") || get("a[href^='/Pharmacy/FoodAll']") || get("a[href^='/Pharmacy/GetAccelerator']") || get("a[href^='/Warehouse/Add']") || get("a[href*='/Pharmacy/Prepare']") || get("a[href^='/Pharmacy/ProduceAll']") || get("a[href*='/Pharmacy/CreateDrug']"); if (l) l.click(); else get("ul.action_list a[href^='/AutoPark']").click(); } else if(autopark) { // автопарк let l = get("a[href^='/AutoPark/TipWay']") || get("a[href^='/AutoPark/TipWay']") || get("a[href^='/AutoFuel/Refill']") || get("a[href^='/AutoPark/Threat']") || get("a[href^='/AutoPark/Examine']"); if (l) l.click(); else if (asm == "random" && get("a[href^='/AutoParkDestination/SendAll?onEvent=False']") != null) get("a[href^='/AutoParkDestination/SendAll?onEvent=False']").click(); else if (asm == "random" && get("a[href^='/AutoParkDestination/SendAllConfirm?']") != null) get("a[href^='/AutoParkDestination/SendAllConfirm?']").click(); else if (asm == "event" && get("a[href^='/AutoParkDestination/SendAll?onEvent=true']") != null) get("a[href^='/AutoParkDestination/SendAll?onEvent=true']").click(); else if (asm == "value") { if (get("a[href^='/AutoParkDestination?garageIndex']") != null) get("a[href^='/AutoParkDestination?garageIndex']").click(); else if (get("a[href^='/AutoPark?page=']") != null) { let url = new URL(location.href); let urlp = 1; if (url.searchParams.has("page")) urlp = parseInt(url.searchParams.get("page")); if (get("a[href^='/AutoPark?page=" + (urlp + 1) + "']") != null) get("a[href^='/AutoPark?page=" + (urlp + 1) + "']").click(); else restartTimeout(); } } else restartTimeout(); } else if(autoParkDestination){ var $list=getAll("ul.delim-list.padtop_s li.padtop_s"); if(asm=="event" && get(".epidemic")!=null) get(".epidemic a").click(); else{ var elem = 0; arr = []; arr2 = []; if(asv=="random") elem = ~~(Math.random() * $list.length); else{ if(asp=="price"){ $list.forEach(el=>{ arr.push(parseInt(el.getAll("span.ylwtextb")[2].innerHTML.split(" ")[0])); }) } else if(asp=="time"){ $list.forEach(el=>{ let t = el.getAll("span.ylwtextb")[0].innerHTML; if(/(\d+) д./.test(t)){ let m = t.match(/(\d+) д./); arr.push(parseInt(m[1]) * 24 * 60); } else if(/(\d+) д. (\d+) ч./.test(t)){ let m = t.match(/(\d+) д. (\d+) ч./); arr.push(parseInt(m[1]) * 24 * 60 + parseInt(m[2]) * 60); } else if(/(\d+) ч./.test(t)){ let m = t.match(/(\d+) ч./); arr.push(parseInt(m[1]) * 60); } else if(/(\d+) мин./.test(t)){ let m = t.match(/(\d+) мин./); arr.push(parseInt(m[1])); } else if(/(\d+) ч. (\d+) мин./.test(t)){ let m = t.match(/(\d+) ч. (\d+) мин./); arr.push(parseInt(m[1]) * 60 + parseInt(m[2])); } }) } else if(asp=="exp"){ $list.forEach(el=>{ arr.push(parseInt(el.getAll("span.ylwtextb")[1].innerHTML)); }) } arr2 = [...arr]; arr.sort((a, b) => a - b); elem = arr2.indexOf(arr[asv == "min" ? 0 : arr.length - 1]); } $list[elem].get("a").click(); } } } function questsRun(){ let l = get("a[href^='/Quests/Begin?']") || get("a[href^='/Quests/ChestsContinue?']") || get("a[href^='/Quests/SaveInjured?']") || get("a[href^='/Quests/StudyComplete?']") || get("a[href^='/Quests/StudyEnd?']") || get("a[href^='/Quests/Study?']") || get("a[href^='/Quests/End?']"); if (l) setTimeout(() => l.click(), questsShortTimeout * 1000); else if (get("a[href^='/Quests?']")) setTimeout(() => get("a[href^='/Quests?']").click(), questsLongTimeout * 60000); } function vetClinicRun() { setTimeout(() => { let l = get("a[href^='/VetClinic/GetPet?'") || get("a[href^='/VetClinic/Diagnose?'") || get("a[href^='/VetClinic/Done?'") || get("a[href^='/VetClinic/Treat?'"); if (l) l.click(); else { setTimeout(() => { get("ul.action_list a[href^='/VetClinic']").click(); }, questsLongTimeout * 60000 * 2) } }, questsShortTimeout * 1000); } function chestsRun() { let c = +get("b.underwater-treasuresScore-value").innerText; if (c > 200) { get("a.btn[href^='/Underwater/CollectKeys']").click(); } else location.reload(); } drawSets() if (localStorage.getItem("firstrun") == null) { localStorage.setItem("firstrun", "false"); document.body.insertAdjacentHTML("afterBegin", splash); pagesTimeout = setTimeout(patientsRun, pagesRunIntervalTime); } if (mainPages) { if (localStorage.getItem("firstrun") != null && localStorage.getItem("firstrun") == "false") pagesTimeout = setTimeout(patientsRun, pagesRunIntervalTime); } else if (quests) questsRun(); else if (vetclinic) vetClinicRun(); else if (chests) chestsRun();