Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Анклав

Pages: [1]
1
Т.е. он не обнуляет свою память почему-то.
Ничего удивительного, SETTHREAD может либо запустить поток, либо поставить его на паузу.
Так ли необходимы тебе потоки? Как всегда стоит появиться новой функции и её начинают использовать не целенаправленно.
У меня была такая задача, чтобы разделить программу на несколько независимых частей, чтобы менеджер управлял ими по ситуации. Я подумал, что SETTHREAD идеально для этого подходит, т.к. им просто выключать и выключать все части в любой комбинации. В целом всё хорошо, за исключением этого небольшого момента с паузой.
 
Я его обошёл так, что написал bat файл, в котором поочереди нажимаются alt+s, alt+a, это помогло, но мое стремление к перфекционизму намекает мне, что это костыль.  :)

2
Огромное спасибо, ребята! Именно это мне и нужно было, только я не знал, чего именно хочу!  :)
 
Прочитал давно, а потестил только сегодня. В оптимизированном варианте всё просто супер, всё ок, за исключением того, что теперь, если в предыдущем раунде бот остановился на 5, то сейчас с 5 начинает...

Т.е. он не обнуляет свою память почему-то.

p.s. новый раунд у меня в коде прописывается как-то так
Code: [Select]
...
 SETTHREAD (test, 0)
...
 SETTHREAD (test, 1)

3
Общие вопросы / Нагромождение условий
« on: April 17, 2015, 06:18:22 AM »
Я по образованию гуманитарий, поэтому извините, если пишу слишком глупые вещи.

В общем, у меня получилось нагромождение условий друг на друга.

Изначально задача следующая - посмотреть на область экрана. В этой области на заданных позициях должны быть пикселы. Пикселы должны появляться в строгом порядке (от 1 до 10).

Смотрим на точку 1, если на ней нет пиксела, то делаем так, чтобы он появился. Как только он появился, смотрим на точку 2, есть ли там пиксел...


Очень важно то, что, как только на точке появился пиксель, то про эту точку можно вообще забыть до следующего запуска THREAD.

Вот что у меня получилось(код в спойлере):
Code: [Select]
THREAD(test, 0)

:odin
IF(PXL(1051,695) = 8355839)
   wait(1)
   LOGWRITE ("odin - OK")
   WAIT(1)
   goto(dva)
   
   :dva
   IF(PXL(1117,692) = 8355839)
      wait(1)
      LOGWRITE ("dva - OK")
      WAIT(1)
      goto(tri)
     
      :tri
      IF(PXL(1165,693) = 8355839)
         wait(1)
         LOGWRITE ("tri - OK")
         WAIT(1)
         goto(chetire)
         
         :chetire
         IF(PXL(1082,717) = 8388479)
            wait(1)
            LOGWRITE ("chetire - OK")
            WAIT(1)
            goto(pyat)
           
            :pyat
            IF(PXL(1137,737) = 16744447)
               wait(1)
               LOGWRITE ("pyat - OK")
               WAIT(1)
               
               halt     // для примера решил остановиться здесь
               
               
            ELSE
               LOGWRITE ("pyat - NE OK")
               WAIT(1)
               KEYPRESS(#L)
               WAIT(1)
               LCLICK(1302,96)
               WAIT(1)
               KEYDOWN(#S)
               WAIT(1)
               DBLCLICK(1344,402)
               DBLCLICK(1344,402)
               DBLCLICK(1344,402)
               WAIT(1)
               KEYUP(#S)
               WAIT(1)
               KEYPRESS(#L)
               WAIT(11)
               goto(pyat)
               
            END_IF
           
         ELSE
            LOGWRITE ("chetire - NE OK")
            WAIT(1)
            KEYPRESS(#L)
            WAIT(1)
            LCLICK(1302,96)
            WAIT(1)
            KEYDOWN(#S)
            WAIT(1)
            DBLCLICK(1185,425)
            DBLCLICK(1185,425)
            DBLCLICK(1185,425)
            WAIT(1)
            KEYUP(#S)
            WAIT(1)
            KEYPRESS(#L)
            WAIT(11)
            goto(chetire)
           
         END_IF
         
      ELSE
         LOGWRITE ("tri - NE OK")
         WAIT(1)
         KEYPRESS(#L)
         WAIT(1)
         LCLICK(1302,96)
         WAIT(1)
         KEYDOWN(#S)
         WAIT(1)
         DBLCLICK(1143,374)
         DBLCLICK(1143,374)
         DBLCLICK(1143,374)
         WAIT(1)
         KEYUP(#S)
         WAIT(1)
         KEYPRESS(#L)
         WAIT(11)
         goto(tri)
         
      END_IF
     
   ELSE
      LOGWRITE ("dva - NE OK")
      WAIT(1)
      KEYPRESS(#L)
      WAIT(1)
      LCLICK(1183,100)
      WAIT(1)
      KEYDOWN(#S)
      WAIT(1)
      DBLCLICK(1274,237)
      DBLCLICK(1274,237)
      DBLCLICK(1274,237)
      WAIT(1)
      KEYUP(#S)
      WAIT(1)
      KEYPRESS(#L)
      WAIT(11)
      goto(dva)
     
   END_IF
   
   
ELSE
   LOGWRITE ("odin - NE OK")
   WAIT(1)
   KEYPRESS(#L)
   WAIT(1)
   LCLICK(1183,100)
   WAIT(1)
   KEYDOWN(#S)
   WAIT(1)
   DBLCLICK(1270,205)
   DBLCLICK(1270,205)
   DBLCLICK(1270,205)
   WAIT(1)
   KEYUP(#S)
   WAIT(1)
   KEYPRESS(#L)
   WAIT(11)
   goto(odin)
   
END_IF


END_THREAD

Это укороченный вариант. На самом деле там не 5, а 10 условий.  В принципе, это работает, НО работает криво.

Нужно, чтобы работа была так:

1. Проверка точки 1
1.1. Проверка удачная -> идем к точке 2
1.2. Проверка неудачная -> выполняем "определенные действия" и делаем по новой проверку точки 1. Количество "определенных действий" заранее неизвестно, может хватить 1 раза, может не хватить 100 раз.
 2. Проверка точки 2
1.2 Проверка удачная ->идём к точке 3
...
и т.д.


А как это на самом деле:

[spoiler]Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная


Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная


Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная


Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная


Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная


Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 удачная
Проверка точки 8 НЕ удачная[/spoiler]


То есть программа каждый раз начинает проверять ВСЕ точки, хотя в этом нет никакого смысла. Их статус до перезапуска THREAD не изменится. Как только условие в точке выполнилось, про эту точку нужно забыть и перейти к следующей.


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


Спасибо!

4
Спасибо! Тогда другой вопрос, как сделать, чтобы был не оконный режим? Я просто не программист и таких тонкостей не знаю.

5
Общие вопросы / Как нажать одновременно?
« on: November 02, 2014, 08:28:29 AM »
Есть флеш игра, в которой необходимо кликать с зажатым ctrl...  Просто нажатие срабатывает
Code: [Select]
KEYPRESS(#СTRL)
А как сделать так, чтобы клавиша была активной во время клика? Попробовал сделать так, но ничего не получилось(таймер ждёт, кликает, но клавишу не зажимает).

Code: [Select]
KEYDOWN(#ctrl) 
wait(1)
LCLICK(97,469)
KEYUP(#ctrl)
wait(5)

Pages: [1]