Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: 123 on October 05, 2014, 06:45:56 PM

Title: Как сделать такую очередь?
Post by: 123 on October 05, 2014, 06:45:56 PM
В игре много аккаунтов-мультов. Скрипт должен по очереди заходить в каждый и запускать процесс, занимающий разное время, указанное при его запуске, и брать на заметку это время. Когда во всех процесс запущен, то заходить в тот, где процесс кончится раньше всех (дождаться этого после входа) или уже кончился, и запустить ещё один процесс, получить его длительность и поместить аккаунт в очередь (шкалу времени), но не именно в её конец, а как получится по его длительности, чтобы он оказался между 2 аккаунтами, где конец процесса наступит чуть раньше, чем у него, и чуть позже, чем у него. А если найдётся с равным, чтобы, без паники, ставил сразу за ним.
Кроме того, иногда может понадобиться поковыряться в 1 из аккаунтов вручную и чтобы скрипт его в это время не трогал, желательно, без своей остановки. Для этого можно и совсем убирать аккаунт из очереди и "поля зрения" скрипта, а потом возвращать. Ещё должна быть возможность добавлять новый аккаунт на этот конвейер, желательно, без его остановки.
Title: Re: Как сделать такую очередь?
Post by: Vint on October 05, 2014, 07:16:56 PM
В каком виде и каком формате указано время окончания процесса (или длительность). Как мы его получаем?
Очередь не нужна. Как минимум время окончания всех загонять в массив (двухмерный, примерно время:аккаунт). Массив во время ожидания перебираем на поиск вышедшего времени.
Запускаем. Новое время в массиве обновляем. Может понадобиться его временно обнулить или удалить из массива если процесс запуска длительный.
Title: Re: Как сделать такую очередь?
Post by: 123 on October 05, 2014, 07:44:03 PM
Указана длительность пути в 1 сторону в формате минуты:секунды, которую надо умножить на 2 и вычесть, например, 10 секунд (возня со входом, ожидание загрузки).
Массив это чисто в памяти, как можно будет в процессе работы "забрать" у скрипта 1 из аккаунтов или добавить без плохих последствий? С помощью записей в файл такое может получиться?
Title: Re: Как сделать такую очередь?
Post by: Vint on October 06, 2014, 08:19:48 AM
Как угодно. Как придумаешь способ удобного управления для тебя так и можно сделать.
Файл не очень хорошая идея. Когда файл открыт может выйти время и скрипту понадобится изменить файл. Даже если не возникнет блокировка ты перезапишешь старым неправильным вариантом и даже не заметишь.
Можно выводить в окно лога номер: оставшееся время
и отлавливать управление клавиатурой.
Нужно пробовать и выбирать удобный вариант.
Указана длительность пути в 1 сторону в формате минуты:секунды...?
В каком виде, картинка? Значит ещё нужно распознавание этого времени.
Title: Re: Как сделать такую очередь?
Post by: 123 on October 06, 2014, 04:23:26 PM
Время в одном и том же месте на экране флэш игры. Должно получиться сохранением отдельно каждой цифры 0-9, поиска их по очереди и составление числа времени из того, что найдено.
Title: Re: Как сделать такую очередь?
Post by: Vint on October 06, 2014, 05:00:20 PM
Для времени использовать типа этого http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
В принципе всё можно уже делать. Делай или выкладывай данные для скрипта (скрины, области...)
Title: Re: Как сделать такую очередь?
Post by: 123 on October 09, 2014, 05:51:35 PM
Почитал про массивы тут и ужаснулся. Думаю, из-за работы по принципу стека и скудности команд - всего 3, не считая картиночных (или я что-то не нашёл), их использование для этой задачи больше усложнит алгоритм, чем упростит. При старте всей очереди ещё ладно - идёт повторение одних и тех же действий для нескольких аккаунтов в любом порядке, в котором они окажутся в массиве. Но когда значения по одному придётся выковыривать с самого или почти с самого "дна" "мешка", при этом сохраняя остальные, это будет что-то уЖяСтНоЭ. Может, проще наделать не связанных между собой переменных с порядковыми номерами, входящими в их названия? И поиск минимального значения в любом случае не делается одним лёгким движением, а придётся сравнивать их все со всеми?
Title: Re: Как сделать такую очередь?
Post by: Vint on October 09, 2014, 06:33:32 PM
нагнал ужасу. Всё просто. Есть же обращение по индексу.
Берешь нужное и за 1 цикл сдвигаешь начиная с n+1 на n до конца массива. Последний выбрасываешь.
Сравнение тоже за 1 цикл. Первый назначаем меньшим, сравниваем меньшее с каждым следующим. Берем меньшее.
количество сравнений равно всего количеству элементов.