Advertisement
Usnm

SISR Field Cleaner v0.8 (Useless)

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