Здравствуйте, гость ( Вход | Регистрация )

> Вопрос по массивам и окнам
sel
сообщение 13.11.2018, 15:08
Сообщение #1


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



Вопрос в следующем, мне необходимо отследить количество запущенных окон игры, скрипт у меня ходит между окнами и выполняет разные задачи, ходит в цикле for.

Выглядит примерно так:

set %handle FindWindow ("Игра")
set #f 1
while (#f = 1)
for #i 1 size(%handle)
...
скрипт
...
end_for
end_while

Иногда случается так, что окно с игрой крашится с ошибкой, и скрипт заводит обратно вылетевшее окно с новым хендлом, в этом основная загвоздка, если бы не это обстоятельство то я бы мог записывать в массив %handle [#i 3] допустим цифру 0 если окно вылетело и проводить в цикле ещё один цикл for который бы складывал значения в столбце %handle [#i 3] и если оно будет равняться 0 то скрипт начнёт заводить все окна, но из за краша окон добавляется новая строчка в массиве с новым хендлом.

Задача - определить, что вылетели все окна игры, есть идеи как это можно сделать?
Заранее спасибо за ответ.

p.s. определить какое окно вылетело с ошибкой трудно, может вылететь абсолютно любое, всё что есть это хендл окна.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
sutra
сообщение 15.12.2018, 4:26
Сообщение #2


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Видимо проблема определения вылетевших окон не решена в течении целого месяца. В чём проблема, я так и не понял. "Уровень конспирации не позволяет оценить уровень опасности."

Есть окно, у него есть имя - его хендл, нет окна - нет имени. Есть функция, которая создаёт (ищет) список этих имён. Какие могут ещё возникнуть вопросы? Если технические, опиши какие. Логические? Так тоже расшифруйся чуток, измени переменные и дай реальный код, что не так? Если проблема сидит глубже, чем просто поиск уже не существующего окна, так опиши суть вопроса, а иначе будем гадать на кофейной гуще.

Что-то мне подсказывает, что не всё так просто. И что-то недоговаривается. Возникает ошибка в игре, нужно её решить. Как уже говорили опиши подробнейшим образом. А просто найти или не найти любое окно, ну это уже просто не интересно выглядит.

Интуиция подсказывает мне, что проблема не в окнах, а в порядке их обработки в цикле. Значит и вопрос,как правильно организовать цикл, который бы учитывал исчезнувшие окна. Тогда возникает другой вопрос... работать с оставшимися окнами? Заводить новые и адаптировать цикл? Опиши ПОДРОБНЕЕ.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sel
сообщение 17.12.2018, 16:16
Сообщение #3


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



В общем написал преемлемый для меня вариант(есть список персонажей, скрипт ищет каждый ник в %handle, если не находит какого то ника, передаёт на подпрограмму, которая потом перенаправит в скрипт завода персонажа в игру):

Код
log clear
log mode compact
set %handle findwindow ("Игра")  // ищем окна
init_arr %list (1 1) Персонаж1 Персонаж2 Персонаж3 Персонаж4   // сюда через пробел записываем ники всех персонажей
set #listsize size(%list)
    for #i 1 #listsize
        set #result indexOf (%handle noabs (%list [#i]) )
        if #result = -1
            log Вылетел: %list [#i 1]  //если персонаж из списка не найден, скрипт начнет заводить его в игру
            gosub %list [#i 1]
        end_if
    end_for
    wait 100
    set %handle findwindow ("Игра")
end_script


:Персонаж1
log заводим Персонаж1
return

:Персонаж2
log заводим Персонаж2
return

:Персонаж3
log заводим Персонаж3
return

:Персонаж4
log заводим Персонаж4
return


К вопросам выше, список персонажей статический, т.е. его число неизменно(скажем их всего 20), порядок обработки не важен, скрипт представляет из себя банального бота, который ходит по всем окнам и берёт нужную инфу из окон, допустим если персонаж умер, то он поднимает его и ведёт обратно на спот с мобами. Я не хочу раскрывать все карты, во первых там говнокод)) в идеале 1500 строчек кода давно пора переделать, ну а во вторых там есть конфиденциальная информация в виде ников персонажей логинов и паролей от них.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
sel   Вопрос по массивам и окнам   13.11.2018, 15:08
sutra   Эту строку помести в while если тормозов не будет...   13.11.2018, 15:20
sutra   После анализа массива ненужный элемент можно удали...   13.11.2018, 17:46
sel   Есть где то примеры анализа массивов? Массив приме...   13.11.2018, 18:05
sutra   Я не совсем понял что именно надо. Смысл примерно ...   13.11.2018, 18:27
sutra   Можно отсортировать оба массива, тогда наверное ещ...   13.11.2018, 18:55
sel   Можно отсортировать оба массива, тогда наверное е...   13.11.2018, 19:39
DarkMaster   Его выдает винда при создании окна и он никак не ...   13.11.2018, 20:17
sutra   Опиши подробнее. Скрипт заводит или игра сама соз...   13.11.2018, 23:00
sutra   Ты можешь присвоить окну свой порядковый номер se...   13.11.2018, 23:11
cirus   Скобки не нужны. Тоже самое: set %handleold %han...   14.11.2018, 2:23
sel   Придумал более интересный способ определения вылет...   15.12.2018, 1:34
cirus   Откуда это? Запустить любое количество окон, в и...   15.12.2018, 2:40
sutra   Количество окон игры должно быть постоянным? или м...   15.12.2018, 4:59
sutra   Про ошибку конкретного примера кода уже более опыт...   15.12.2018, 5:14
DarkMaster   раньше пилотовский синтаксис отказывался восприни...   15.12.2018, 5:47
sutra   Ну на 100% не вникал, но логика правильная, если в...   17.12.2018, 18:22
sel   Итак, у меня новый затуп, пытаюсь красиво сохранят...   23.12.2018, 4:28
DarkMaster   [code]local write, writeIndent, writers, refCount;...   23.12.2018, 5:36
cirus   Дописывать пробелы в конец строки, чтобы все были...   23.12.2018, 5:39
sutra   Я бы порекомендовал использовать табуляцию. Прост...   23.12.2018, 13:10
DarkMaster   Проблема в том, что текстовые редакторы табуляцию...   23.12.2018, 13:41
sutra   Да вариантов полно, табуляция - это просто выравни...   23.12.2018, 14:08
sutra   Если конечно установлен эксель. Выбираешь вкладку ...   23.12.2018, 14:33
sel   Ииии, мне снова нужна ваша помощь друзья:) Проблем...   29.12.2018, 0:48
cirus   В папке с пилотом Scripts\Backup. Ищите рабо...   29.12.2018, 1:22
sutra   Ну если быстро (чисто для Вашего случая) не вникая...   29.12.2018, 3:29
sel   По прежнему сталкиваюсь всё с той же проблемой, ес...   28.2.2019, 0:26
cirus   Возможно в этом проблема. Попробуйте не использов...   28.2.2019, 1:34
sutra   Тоже хотел сказать про это, но и это не главное. И...   28.2.2019, 1:55
sel   Я вроде даже где-то 100% рабочий пример давал с ...   28.2.2019, 2:58
sutra   Подпрограмма в Пилоте - это собственно goto на мет...   28.2.2019, 2:27
sutra   findwindow ищет окна в том порядке, в котором они ...   28.2.2019, 2:47
cirus   2гб и вылет.   28.2.2019, 3:04
sutra   Ну хоть что-то, я тоже думал на эту тему. Всё-таки...   28.2.2019, 3:32
sel   Ну хоть что-то, я тоже думал на эту тему. Всё-так...   5.3.2019, 10:10
sutra   Голову на отсечение конечно давать не буду. Но иск...   28.2.2019, 3:42
sutra   Вот без всякого хвастовства говорю (хотя гордость ...   28.2.2019, 3:55
DarkMaster   gosub работает полностью корректно с циклами при ...   28.2.2019, 14:00
sel   Возникло несколько вопросов: 1. Можно ли команду l...   4.5.2019, 13:45
cirus   Нет, только txt.   4.5.2019, 14:06


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 9.7.2025, 13:38
Designed by Nickostyle