Page 1 of 1

Нажатие кнопки в гампе

Posted: 2007-11-10 00:45:49
by Denton
Помогите пожалуйста подправить такой макрос:

Время от времени возникает такой вот гамп

Image

Code: Select all

_____infogump_______
serial   0x0080f81d
gumpid   0x004dcedc
X   0
Y   0
168   packet size
23   reply packet size
Buttons: ________
 page 0
    1 [    1] image=0x0851 at 67:119
    2 [    0] image=0x0848 at 127:119
Checks&Radios: __
Entryes: ________
All commands: ____
    1] page 0
    2] gumppic 37 44 2070
    3] button 67 119 2130 2129 1 0 1
    4] button 127 119 2119 2120 1 0 0
    5] text 77 74 1355 0
Text: ____________
    0]  * AIION! *
Reply: ___________
 [0001] primary reply
 Checks&Radios (0)
 Entryes (0)


Нужно просто нажать кнопку ОК

Вот что пока сделал я:

Code: Select all

sub bonus()
  while  not uo.Dead()
      if uo.LastGump('replyed') == 0 then
         if uo.LastGump('text', 0) == ' * AIION! *' then
            uo.LClick(uo.LastGump('x')+73, uo.LastGump('y')+109)
            wait(1000)
         end if
      end if
      wait(100)
   wend
end sub


Здесь сделал такую строку

Code: Select all

uo.LClick(uo.LastGump('x')+73, uo.LastGump('y')+109)

т.к. в прошлый раз здесь были такие координаты:

Code: Select all

Buttons: ________
 page 0
    1 [    1] image=0x0851 at 73:109

Posted: 2007-11-10 01:05:16
by Grin
uo.LClick(uo.LastGump('x')+73, uo.LastGump('y')+109)
uo.LastGump('x') и uo.LastGump('y') тут незачем, так как гамп сам не двигается, двигаются только жлементы

Все что нужно сделать это вырезать из текста кнопки координаты, опять таки в макросах (антимакросах) есть достаточно примеров как это сделать.

Можешь воспользоватся командой Mid, можешь Left Right использовать.

допустим

Code: Select all

btnxy = Right(uo.LastGump('button', 0), 7)
uo.LClick(val(Left(btnxy, 3)), val(Right(btnxy, 3)))

Posted: 2007-11-12 09:40:20
by Denton

Code: Select all

sub bonus()
var btnxy
  while  not uo.Dead()
      if uo.LastGump('replyed') == 0 then
         if uo.LastGump('text', 0) == ' * AIION! *' then
            btnxy = Right(uo.LastGump('button', 0), 6)
            uo.LClick(val(Left(btnxy, 2)), val(Right(btnxy, 3)))
            wait(1000)
         end if
      end if
      wait(100)
   wend
end sub


Запускаю с выскочившим гампом, а оно не работает. Просто ничего не делает.

Может быть ошибка в этом, это фраза " * БОНУС! *", которая в инфогампе отображается следующими иероглифами:

Code: Select all

if uo.LastGump('text', 0) == ' * AIION! *' then

Posted: 2007-11-12 15:12:42
by Grin

Code: Select all

         if uo.LastGump('text', 0) == ' * AIION! *' then
            uo.Print('AntiMacro!')
            btnxy = Right(uo.LastGump('button', 0), 6)
            uo.LClick(val(Left(btnxy, 2)), val(Right(btnxy, 3)))
            wait(1000)
         end if

и смотри работает ли условие по тексту, если нет
то uo.LastGump('text', 0) и в перед, сколько в строке символов и тд и как она вообще выглядит...

ПС Right(uo.LastGump('button', 0), 6) здесь зря 7 на 6 изменил идалее по тексту тоже, если отклнение будет 3-х значное то скрипт пролетит, ну и тд...

Posted: 2007-11-13 11:12:30
by Denton
После появления гампа кнопка не нажимается и макрос начинает непрерывно выдавать "AntiMacro!".

И видно жмет где-то левее нужного, т.к. появляются комментарии того, на что нажали кнопкой. Поменяю 6 на 7, попробую.

Posted: 2007-11-13 13:52:24
by Denton
В общем решил я сделать проверку того, что скрипт выписывает из описания гампа и с чем работает.

Code: Select all

_____infogump_______
serial   0x006d4bc6
gumpid   0x0023e3b2
X   0
Y   0
168   packet size
0   reply packet size
Buttons: ________
 page 0
    1 [    1] image=0x0851 at 65:119
    2 [    0] image=0x0848 at 125:119
Checks&Radios: __
Entryes: ________
All commands: ____
    1] page 0
    2] gumppic 35 44 2070
    3] button 65 119 2130 2129 1 0 1
    4] button 125 119 2119 2120 1 0 0
    5] text 75 74 1355 0
Text: ____________
    0]  * AIION! *


Вот так выглядит мой скрипт (с выдачей переменной btnxy):

Code: Select all

sub bonus()
var btnxy
  while  not uo.Dead()
      if uo.LastGump('replyed') == 0 then
         if uo.LastGump('text', 0) == ' * AIION! *' then
            uo.Print('AntiMacro!')
            btnxy = Right(uo.LastGump('button', 0), 7)
            uo.LClick(val(Left(btnxy, 2)), val(Right(btnxy, 3)))
            wait(1000)
            uo.print('Записали: ' +btnxy)
         end if
      end if
      wait(100)
   wend
end sub


Создается цикл:

"AntiMacro!"
"Записали: 5 y=119"

Странно

Posted: 2007-11-13 17:08:36
by D3VnuLL
Так этот скрипт работает для этого гампа?

Posted: 2007-11-13 18:53:46
by Denton
Пока нет

Posted: 2007-11-14 22:40:06
by Denton
Значит, у меня такая проблемка... иногда координата Х трехзначная, иногда - двузначная.

Выдается в виде:
х=000 у=000
либо
х=00 у=000

как вырезать нужное количество цифр? или делать две проверки - по двузначным цифрам и трехзначным?

Posted: 2007-11-14 22:45:06
by Destruction
Парсить строку.. Что-нибудь в этом духе:

Code: Select all

Sub getXfromStr( str )
   var i, flag = false, x = ""
   for i = 0 to strlen( str ) -1
      if flag then
         if str[i] == " " then
            return val( x )
         endif
         x = x + str[i]
      endif
      if str[i-1] + str[i] == "x=" then
         flag = true
      endif
   next
   return val( x )
endsub


Или заюзать что-нибудь готовое, типа explode.

Posted: 2007-11-14 22:52:40
by Grin
я же говорил не трогай

Code: Select all

btnxy = Right(uo.LastGump('button', 0), 7) 
uo.LClick(val(Left(btnxy, 3)), val(Right(btnxy, 3)))

val удачно переводит НЕ ЦИФРЫ в 0

во всяком всегда можно отпринтить результаты val(Left(btnxy, 3)) и
val(Right(btnxy, 3))...

да и задача не сложная...

Posted: 2007-11-18 10:49:23
by Denton
Как можно узнать возник ли этот гамп, если я нахожусь в процессе использования крафтовых скиллов, у которых тоже появляются таблички (гампы), с которыми я оперирую командой uo.recall(*******)
Т.е. получается что появился "бонус", и в этот момент он - uo.lastgump, но через мгновение идет команда uo.recall() и тут появляется другой гамп, и соответственно становится он уже uo.lastgump.

Есть ли способ "найти" появившийся гамп с бонусом при таких условиях?

Надеюсь понятно объяснил. :?

Posted: 2007-11-19 09:42:06
by Denton

Code: Select all

sub bonus()
var btnxy, one, two
while  not uo.Dead()
    if uo.LastGump('text', 0) == ' * AIION! *' then
        uo.Print('AntiMacro!')
        btnxy = Right(uo.LastGump('button', 0), 9)
        one = val(left(btnxy, 3))
        two = val(right(btnxy, 3))
        uo.LClick(one, two)
        wait(1000)
        uo.print('Записали x: ' + one)
        uo.Print('Записали у: ' + two)
    end if
    wait(100)
wend
end sub


Выдает ошибку: "line 11: Runtime error - Bad operation for this type". Не получается что-то этот макрос у меня. Пожалуйста, кто может, помогите.

Posted: 2007-11-19 15:11:28
by Destruction

Code: Select all

one = val(left(btnxy, 3)) 
...
uo.print('Записали x: ' + one)

Сами разберётесь?)

Posted: 2007-11-19 15:43:12
by D3VnuLL
Поскрорее бы этот гамп был готов.. жду не дождусь :)

Posted: 2007-11-19 19:49:31
by Denton
Destruction wrote:

Code: Select all

one = val(left(btnxy, 3)) 
...
uo.print('Записали x: ' + one)

Сами разберётесь?)


Да, с этим разобрался уже :oops: