Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Скрипт "SISR Field Cleaner v0.8" также известный как "РОБОТ-ПЫЛЕСОС". Все права защищены.
- Данный скрипт автоматическт разведывает все поля на всех ваших планетах, кроме лунных и требующих ТМ.
- (УСТАРЕЛО: ОЧИСТКА ПОЛЕЙ У ВСЕХ ВЫПОЛНЕНА. ОТЛИЧНАЯ РАБОТА, ФЕДАНИИЛ)
- Инструкция:
- 1) Скопируйте весь скрипт и вставьте его в консоль (Ctr+Shift+I), находясь на сайте СВГ.
- 2) Если вы желаете изменить задержку между проходом по планетам (не надо), введите в консоль "delay = x", где x - время в миллисекундах (1/1000 секунды), но при проставлении менее 30000 могут быть ошибки, из-за которых расчистятся не все поля.
- 3А) Если вы хотите запустить скрипт поэтапно (зачем?), то введите в консоль "getTargets ()", подождите, пока функция завершится, после чего введите "fieldCleaner ()"
- 3Б) Если вы хотите запустить скрипт за один раз, просто введите "fieldCleaner()"
- 3В) Если у вас есть JSON-массив (об этом ниже), то введите в консоль "fieldCleaner(true)" и вставьте его в открывшееся окошко.
- 4) Ожидание...
- 5А) Если требуется срочно завершить скрипт на этапе расчистки, то введите в консоль "manualStop = true", и это, возможно, сработает. Если сработает (может занять до 30 секунд), то нажмите ПКМ на выданом вам JSON-массиве нерасчищенных планет и нажмите "скопировать объект". Потом выполнение скрипта можно будет продолжить, выполнив шаг 3-B (если вы не перезагружали страницу, можно выполнить вместо него шаг 3-Б).
- 5Б) Поздравляем! Ваши планеты стали чище.
- Ход работы скрипта (технические комментарии):
- 1) Функция planetsInit() получает ответ на запрос initPlanets и конвертирует его в массив planetsArray, содержащий объекты-планеты, каждый из которых содержит: id планеты, её название, количество локаций на ней, а также количество полей, которое надо расчистить (planetTargetedFields, пока равное нулю).
- 2) Функция getTargets() проходится по планетам из массива и и прогружает каждую их локацию, а в каждой локации перебирает все поля и находит нужные, после чего в объекте планеты создаёт массив locationsTargets, в который выдаёт по массиву на каждую локацию, в которых содержатся id полей-целей. Также она добавляет число полей-целей планеты в ранее созданный planetTargetedFields, добавляет количеств всех полей-целей игрока в targetedFieldsNumber и и выдаёт в лог массив planetsArray в виде JSON.
- 3) Функция fieldCleaner() вызывает getTargets() и planetsInit(), если они не были ранее вызваны, либо, если пользователь передаёт true в аргумент, запрашивает JSON у пользователя. Далее она раз в 30 секунд (или delay миллисекунд, если пользователь изменил задержку) проходится по всем локациям, на каждой запуская очистку поля, удаляя это самое поле и уменьшая targetedFieldsNumber и planetTargetedFields, если локация или планета были полностью очищены, они выдают соответствующий лог и пропускаются. Цикл заканчивается когда targetedFieldsNumber равен 0 (могут быть ошибки, из-за которых скрипт перестаёт работать, когда остаётся пару полей) или если пользователь вручную останавливает скрипт.
- */
- // Instruments
- function sleep() { // timeout
- return new Promise((resolve) => setTimeout(resolve,delay))
- }
- let sharedOptions = { // fetch options
- "credentials": "include",
- "headers": {
- "Accept": "application/json, text/javascript, */*; q=0.01",
- "Accept-Language": "ru,en-US;q=0.7,en;q=0.3"
- },
- "referrer": "https://swg.fedaniil.party/",
- "method": "GET",
- "mode": "cors"
- }
- function planetFunction(id, name, locNumber) { // planet object in planetsArray constructor
- this.id = id
- this.name = name
- this.locNumber = locNumber
- this.planetTargetedFields = 0
- }
- // Declarations (I fcking love global variables)
- let planetsArray = []
- let targetedFieldsNumber = 0
- let manualStop = false
- let delay = 30000
- // Functions
- async function planetsInit () { // fetch initPlanets and convert into planetsArray
- let startTime = Math.round(Date.now()/1000)
- let initPlanets = await (await fetch("https://swg.fedaniil.party/temporary/initPlanets", sharedOptions)).json()
- for (let i=0; i<initPlanets.planets.length; i++) {
- let locNumber = Object.keys(initPlanets.planets[i].locations).length - 4
- planetsArray[i] = new planetFunction (initPlanets.planets[i].id, initPlanets.planets[i].name, locNumber)
- }
- let endTime = Math.round(Date.now()/1000)
- console.log (`Инициализация планет завершена за ${endTime - startTime} секунд.`)
- }
- async function getTargets () { // find every unexplored field without darkmatter price
- if (planetsArray.length === 0) { // initialisation of array
- await planetsInit ()
- }
- let startTime = Math.round(Date.now()/1000)
- for (let curPlanet=0; curPlanet<planetsArray.length; curPlanet++) {
- await fetch("https://swg.fedaniil.party/temporary/changePlanet/" + planetsArray[curPlanet].id, sharedOptions) // jump to planet
- planetsArray[curPlanet].locationsTargets = []
- for (let curLocation=1; curLocation<=planetsArray[curPlanet].locNumber; curLocation++) {
- let initLocation = await (await fetch(("https://swg.fedaniil.party/building/location/" + curLocation), sharedOptions)).json() // fetch location data
- let curLocationTargets = []
- for (i=0; i<58; i++) { // check every field
- if (!initLocation.fields[i].payd && !initLocation.fields[i].explored) {
- curLocationTargets.push(initLocation.fields[i].id) // push location id into temporary array
- }
- }
- console.log (`${curLocation} локация планеты [${curPlanet+1}/${planetsArray.length}] ${planetsArray[curPlanet].name} просканирована, найдено ${curLocationTargets.length} подлежащих расчистке полей`)
- planetsArray[curPlanet].locationsTargets.push(curLocationTargets) // push id's into array of current location and push it into array of planet's locations
- planetsArray[curPlanet].planetTargetedFields += curLocationTargets.length // add number of fields to planetary number
- }
- console.log (`Планета [${curPlanet+1}/${planetsArray.length}] ${planetsArray[curPlanet].name} просканирована, найдено ${planetsArray[curPlanet].planetTargetedFields} подлежащих расчистке полей`)
- targetedFieldsNumber += planetsArray[curPlanet].planetTargetedFields // add planetary number to global number
- }
- let endTime = Math.round(Date.now()/1000)
- console.log (`Сканирование завершено за ${endTime - startTime} секунд, всего найдено ${targetedFieldsNumber} подлежащих расчистке полей`)
- console.log ('Массив требующих расчистки полей: ')
- console.log (JSON.stringify(planetsArray)) // json for user
- }
- async function fieldCleaner (importArray = false) {
- manualStop = false
- if (importArray) { // manual import of json
- planetsArray = JSON.parse(prompt('Вставьте массив planetsArray'))
- }
- if (planetsArray.length === 0) { // getTargets if no import
- await getTargets ()
- }
- let startTime = Math.round(Date.now()/1000)
- let clearedPlanets = 0 // count for logs
- let clearingPlan = targetedFieldsNumber // reserve targetedFieldsNumber for logs
- while (targetedFieldsNumber>0 && !manualStop) {
- for (let curPlanet=0; curPlanet<planetsArray.length && !manualStop; curPlanet++) {
- if (planetsArray[curPlanet].planetTargetedFields>0) { // too lazy to complete comentaries, it just works, don't touch
- await fetch("https://swg.fedaniil.party/temporary/changePlanet/" + planetsArray[curPlanet].id, sharedOptions)
- for (let curLocation=0; curLocation<planetsArray[curPlanet].locNumber; curLocation++) {
- if (planetsArray[curPlanet].locationsTargets[curLocation].length > 0 && planetsArray[curPlanet].locationsTargets[curLocation][0] != 'cleared') {
- await fetch("https://swg.fedaniil.party/building/explore/" + planetsArray[curPlanet].locationsTargets[curLocation][0], sharedOptions)
- console.log (`Чистим поле ${planetsArray[curPlanet].locationsTargets[curLocation][0]} на планете [${curPlanet+1}] ${planetsArray[curPlanet].name}`)
- planetsArray[curPlanet].locationsTargets[curLocation].shift()
- targetedFieldsNumber--
- planetsArray[curPlanet].planetTargetedFields--
- }
- else {
- if (planetsArray[curPlanet].locationsTargets[curLocation][0] != 'cleared') {
- planetsArray[curPlanet].locationsTargets[curLocation].push('cleared')
- console.log (`Локация ${curLocation+1} планеты ${planetsArray[curPlanet].name} расчищена!`)
- }
- }
- }
- }
- else {
- if (!planetsArray[curPlanet].cleared) {
- planetsArray[curPlanet].cleared = true
- clearedPlanets++
- console.log (`Планета [${clearedPlanets}/${planetsArray.length}] ${planetsArray[curPlanet].name} расчищена!`)
- }
- }
- }
- if (!manualStop) {
- await sleep() // sleep for 30s
- }
- }
- if (!manualStop) {
- let endTime = Math.round(Date.now()/1000)
- console.log (`Очистка была успешно завершена за ${endTime - startTime} секунд, очищено ${clearingPlan} полей на ${clearedPlanets} планетах`)
- }
- else {
- let endTime = Math.round(Date.now()/1000)
- console.log (`Очистка была остановлена пользователем после ${endTime - startTime} секунд, было завершено ${((clearingPlan - targetedFieldsNumber) / clearingPlan) * 100} % работы.`)
- console.log ('Массив c нерасчищенными полями: ')
- console.log (JSON.stringify(planetsArray))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement