Advertisement
Usnm

SISR Field Cleaner v0.8

Aug 6th, 2022 (edited)
876
363 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Скрипт "SISR Field Cleaner v0.8" также известный как "РОБОТ-ПЫЛЕСОС". Все права защищены.
  3. Данный скрипт автоматическт разведывает все поля на всех ваших планетах, кроме лунных и требующих ТМ.
  4.  
  5. Инструкция:
  6.  
  7. 1) Скопируйте весь скрипт и вставьте его в консоль (Ctr+Shift+I), находясь на сайте СВГ.
  8. 2) Если вы желаете изменить задержку между проходом по планетам (не надо), введите в консоль "delay = x", где x - время в миллисекундах (1/1000 секунды), но при проставлении менее 30000 могут быть ошибки, из-за которых расчистятся не все поля.
  9. 3А) Если вы хотите запустить скрипт поэтапно (зачем?), то введите в консоль "getTargets ()", подождите, пока функция завершится, после чего введите "fieldCleaner ()"
  10. 3Б) Если вы хотите запустить скрипт за один раз, просто введите "fieldCleaner()"
  11. 3В) Если у вас есть JSON-массив (об этом ниже), то введите в консоль "fieldCleaner(true)" и вставьте его в открывшееся окошко.
  12. 4) Ожидание...
  13. 5А) Если требуется срочно завершить скрипт на этапе расчистки, то введите в консоль "manualStop = true", и это, возможно, сработает. Если сработает (может занять до 30 секунд), то нажмите ПКМ на выданом вам JSON-массиве нерасчищенных планет и нажмите "скопировать объект". Потом выполнение скрипта можно будет продолжить, выполнив шаг 3-B (если вы не перезагружали страницу, можно выполнить вместо него шаг 3-Б).
  14. 5Б) Поздравляем! Ваши планеты стали чище.
  15.  
  16. Ход работы скрипта (технические комментарии, можете не обращать внимания):
  17. 1) Функция planetsInit() получает ответ на запрос initPlanets и конвертирует его в массив planetsArray, содержащий объекты-планеты, каждый из которых содержит: id планеты, её название, количество локаций на ней, а также количество полей, которое надо расчистить (planetTargetedFields, пока равное нулю).
  18. 2) Функция getTargets() проходится по планетам из массива и и прогружает каждую их локацию, а в каждой локации перебирает все поля и находит нужные, после чего в объекте планеты создаёт массив locationsTargets, в который выдаёт по массиву на каждую локацию, в которых содержатся id полей-целей. Также она добавляет число полей-целей планеты в ранее созданный planetTargetedFields, добавляет количеств всех полей-целей игрока в targetedFieldsNumber и и выдаёт в лог массив planetsArray в виде JSON.
  19. 3) Функция fieldCleaner() вызывает getTargets() и planetsInit(), если они не были ранее вызваны, либо, если пользователь передаёт true в аргумент, запрашивает JSON у пользователя. Далее она раз в 30 секунд (или delay миллисекунд, если пользователь изменил задержку) проходится по всем локациям, на каждой запуская очистку поля, удаляя это самое поле и уменьшая targetedFieldsNumber и planetTargetedFields, если локация или планета были полностью очищены, они выдают соответствующий лог и пропускаются. Цикл заканчивается когда targetedFieldsNumber равен 0 (могут быть ошибки, из-за которых скрипт перестаёт работать, когда остаётся пару полей) или если пользователь вручную останавливает скрипт.
  20. */
  21.  
  22. // Instruments
  23.  
  24. function sleep() { // timeout
  25.     return new Promise((resolve) => setTimeout(resolve,delay))
  26. }
  27. let sharedOptions = { // fetch options
  28.     "credentials": "include",
  29.     "headers": {
  30.         "Accept": "application/json, text/javascript, */*; q=0.01",
  31.         "Accept-Language": "ru,en-US;q=0.7,en;q=0.3"
  32.     },
  33.     "referrer": "https://swg.fedaniil.party/",
  34.     "method": "GET",
  35.     "mode": "cors"
  36. }
  37. function planetFunction(id, name, locNumber) { // planet object in planetsArray constructor
  38.     this.id = id
  39.     this.name = name
  40.     this.locNumber = locNumber
  41.     this.planetTargetedFields = 0
  42. }
  43.  
  44. // Declarations (I fcking love global variables)
  45.  
  46. let planetsArray = []
  47. let targetedFieldsNumber = 0
  48. let manualStop = false
  49. let delay = 30000
  50.  
  51. // Functions
  52.  
  53. async function planetsInit ()  { // fetch initPlanets and convert into planetsArray
  54.     let startTime = Math.round(Date.now()/1000)
  55.     let initPlanets = await (await fetch("https://swg.fedaniil.party/temporary/initPlanets", sharedOptions)).json()
  56.     for (let i=0; i<initPlanets.planets.length; i++) {
  57.             let locNumber = Object.keys(initPlanets.planets[i].locations).length - 4
  58.             planetsArray[i] = new planetFunction (initPlanets.planets[i].id, initPlanets.planets[i].name, locNumber)
  59.     }
  60.     let endTime = Math.round(Date.now()/1000)
  61.     console.log (`Инициализация планет завершена за ${endTime - startTime} секунд.`)
  62. }
  63.  
  64. async function getTargets () { // find every unexplored field without darkmatter price
  65.     if (planetsArray.length === 0) { // initialisation of array
  66.         await planetsInit ()
  67.     }
  68.     let startTime = Math.round(Date.now()/1000)
  69.     for (let curPlanet=0; curPlanet<planetsArray.length; curPlanet++) {
  70.         await fetch("https://swg.fedaniil.party/temporary/changePlanet/" + planetsArray[curPlanet].id, sharedOptions) // jump to planet
  71.         planetsArray[curPlanet].locationsTargets = []
  72.         for (let curLocation=1; curLocation<=planetsArray[curPlanet].locNumber; curLocation++) {
  73.             let initLocation = await (await fetch(("https://swg.fedaniil.party/building/location/" + curLocation), sharedOptions)).json() // fetch location data
  74.             let curLocationTargets = []
  75.             for (i=0; i<58; i++) { // check every field
  76.                 if (!initLocation.fields[i].payd && !initLocation.fields[i].explored) {
  77.                     curLocationTargets.push(initLocation.fields[i].id) // push location id into temporary array
  78.                 }
  79.             }
  80.             console.log (`${curLocation} локация планеты [${curPlanet+1}/${planetsArray.length}] ${planetsArray[curPlanet].name} просканирована, найдено ${curLocationTargets.length} подлежащих расчистке полей`)
  81.             planetsArray[curPlanet].locationsTargets.push(curLocationTargets) // push id's into array of current location and push it into array of planet's locations
  82.             planetsArray[curPlanet].planetTargetedFields += curLocationTargets.length // add number of fields to planetary number
  83.         }
  84.         console.log (`Планета [${curPlanet+1}/${planetsArray.length}] ${planetsArray[curPlanet].name} просканирована, найдено ${planetsArray[curPlanet].planetTargetedFields} подлежащих расчистке полей`)
  85.         targetedFieldsNumber += planetsArray[curPlanet].planetTargetedFields // add planetary number to global number
  86.     }
  87.     let endTime = Math.round(Date.now()/1000)
  88.     console.log (`Сканирование завершено за ${endTime - startTime} секунд, всего найдено ${targetedFieldsNumber} подлежащих расчистке полей`)
  89.     console.log ('Массив требующих расчистки полей: ')
  90.     console.log (JSON.stringify(planetsArray)) // json for user
  91. }
  92.  
  93. async function fieldCleaner (importArray = false) {
  94.     manualStop = false
  95.     if (importArray) { // manual import of json
  96.         planetsArray = JSON.parse(prompt('Вставьте массив planetsArray'))
  97.     }
  98.     if (planetsArray.length === 0) { // getTargets if no import
  99.         await getTargets ()
  100.     }
  101.     let startTime = Math.round(Date.now()/1000)
  102.     let clearedPlanets = 0 // count for logs
  103.     let clearingPlan = targetedFieldsNumber // reserve targetedFieldsNumber for logs
  104.     while (targetedFieldsNumber>0 && !manualStop) {
  105.         for (let curPlanet=0; curPlanet<planetsArray.length && !manualStop; curPlanet++) {
  106.             if (planetsArray[curPlanet].planetTargetedFields>0) { // too lazy to complete comentaries, it just works, don't touch
  107.                 await fetch("https://swg.fedaniil.party/temporary/changePlanet/" + planetsArray[curPlanet].id, sharedOptions)
  108.                 for (let curLocation=0; curLocation<planetsArray[curPlanet].locNumber; curLocation++) {
  109.                     if (planetsArray[curPlanet].locationsTargets[curLocation].length > 0 && planetsArray[curPlanet].locationsTargets[curLocation][0] != 'cleared') {
  110.                         await fetch("https://swg.fedaniil.party/building/explore/" + planetsArray[curPlanet].locationsTargets[curLocation][0], sharedOptions)
  111.                         console.log (`Чистим поле ${planetsArray[curPlanet].locationsTargets[curLocation][0]} на планете [${curPlanet+1}] ${planetsArray[curPlanet].name}`)
  112.                         planetsArray[curPlanet].locationsTargets[curLocation].shift()
  113.                         targetedFieldsNumber--
  114.                         planetsArray[curPlanet].planetTargetedFields--
  115.                     }
  116.                     else {
  117.                         if (planetsArray[curPlanet].locationsTargets[curLocation][0] != 'cleared') {
  118.                             planetsArray[curPlanet].locationsTargets[curLocation].push('cleared')
  119.                             console.log (`Локация ${curLocation+1} планеты ${planetsArray[curPlanet].name} расчищена!`)
  120.                         }
  121.                     }
  122.                 }
  123.             }
  124.             else {
  125.                 if (!planetsArray[curPlanet].cleared) {
  126.                     planetsArray[curPlanet].cleared = true
  127.                     clearedPlanets++
  128.                     console.log (`Планета [${clearedPlanets}/${planetsArray.length}] ${planetsArray[curPlanet].name} расчищена!`)
  129.                 }
  130.             }
  131.         }
  132.         if (!manualStop) {
  133.             await sleep() // sleep for 30s
  134.         }
  135.     }
  136.     if (!manualStop) {
  137.         let endTime = Math.round(Date.now()/1000)
  138.         console.log (`Очистка была успешно завершена за ${endTime - startTime} секунд, очищено ${clearingPlan} полей на ${clearedPlanets} планетах`)
  139.     }
  140.     else {
  141.         let endTime = Math.round(Date.now()/1000)
  142.         console.log (`Очистка была остановлена пользователем после ${endTime - startTime} секунд, было завершено ${((clearingPlan - targetedFieldsNumber) / clearingPlan) * 100} % работы.`)
  143.         console.log ('Массив c нерасчищенными полями: ')
  144.         console.log (JSON.stringify(planetsArray))
  145.     }
  146. }
Advertisement
RAW Paste Data Copied
Advertisement