Page 1 of 1
Нажатие кнопки в гампе
Posted: 2007-11-10 00:45:49
by Denton
Помогите пожалуйста подправить такой макрос:
Время от времени возникает такой вот гамп
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)
Сами разберётесь?)
Да, с этим разобрался уже
