Page 1 of 1

Посматрите

Posted: 2006-05-20 17:26:57
by SESTRA
вот скприт на раскладку по бек пек

Code: Select all

sub rasklad() 

uo.findtype('0x0EED',-1,'backpack')
while uo.findcount() > 0
uo.findtype('0x0EED',-1,'backpack')
uo.moveitem('finditem',-1,'backpack',40,60,0)
uo.ignore('finditem')
wait(200)
wend
uo.ignorereset()
endsub

ток он что то када итем переложит потом что то глючит просто с боку пишется варнинг команда finditem вот такая(
Что сделать?

Posted: 2006-05-20 19:53:11
by Edred

Code: Select all

wait(200)


Мало. И чеклаг после паузы поставь, чтобы при лагах не спотыкалось.

И вот тут логики совсем не понял:

Code: Select all

uo.findtype('0x0EED',-1,'backpack') 
while uo.findcount() > 0
uo.findtype('0x0EED',-1,'backpack')


Зачем дважды-то искать на первом круге?

Posted: 2006-05-20 19:59:45
by Destruction
Edred wrote:

Code: Select all

wait(200)


Мало. И чеклаг после паузы поставь, чтобы при лагах не спотыкалось.

И вот тут логики совсем не понял:

Code: Select all

uo.findtype('0x0EED',-1,'backpack') 
while uo.findcount() > 0
uo.findtype('0x0EED',-1,'backpack')


Зачем дважды-то искать на первом круге?

1ый раз чтобы пустили в цикл.
2ой раз чтобы что-то циклично искать.

Делается с одним поиском через repeat, но всё-таки, а еще тут нужно условие..

Posted: 2006-05-20 20:04:03
by Edred
Я-то указал про два поиска подряд чтобы автор задумался, куда второй лучше поставить, чтобы не было лишних команд. В скриптах и программах от перемены мест слагаемых (то бишь строк скрипта) сумма меняется... :wink:

Хинт: попробуй второй поиск поставить в конце цикла.

ЗЫ: А менять цикл на repeat никакого резона нет.

Posted: 2006-05-20 21:06:09
by Destruction
Edred wrote:Я-то указал про два поиска подряд чтобы автор задумался, куда второй лучше поставить, чтобы не было лишних команд. В скриптах и программах от перемены мест слагаемых (то бишь строк скрипта) сумма меняется... :wink:

Хинт: попробуй второй поиск поставить в конце цикла.

ЗЫ: А менять цикл на repeat никакого резона нет.

Как это нет? Был же 8)

Ща попробую нарисовать.

Code: Select all

#Скрипт1
sub rasklad()
uo.findtype('0x0EED',-1,'backpack')
while uo.findcount() > 0
uo.findtype('0x0EED',-1,'backpack')
uo.moveitem('finditem',-1,'backpack',40,60,0)
uo.ignore('finditem')
wait(200)
wend
uo.ignorereset()
endsub

Скрипт1 - начнём с того, что после поиска следует проверять нашли мы чего-либо, ибо если ничего не нашли, то будем работать с несуществующим объектом, т.е. делаем так:

Code: Select all

#Скрипт2
sub rasklad()
uo.findtype('0x0EED',-1,'backpack')
while uo.findcount() > 0
uo.findtype('0x0EED',-1,'backpack')
if uo.findcount() > 0 then
uo.moveitem('finditem',-1,'backpack',40,60,0)
uo.ignore('finditem')
wait(200)
endif
wend
uo.ignorereset()
endsub

Теперича заменим цикл:

Code: Select all

sub rasklad() 
repeat
uo.findtype('0x0EED',-1,'backpack')
if uo.findcount() > 0 then
uo.moveitem('finditem',-1,'backpack',40,60,0)
uo.ignore('finditem')
wait(200)
endif
until uo.findcount() == 0
uo.ignorereset()
endsub


А ваще Edred вероятно прав.. Но мне так больше нравиться.

Posted: 2006-05-20 22:22:14
by Edred
Из-за смены циклов тебе пришлось вводить дополнительный if, проверка которого совпадает с проверкой цикла. Смысл?

Code: Select all

uo.findtype('0x0EED',-1,'backpack') 
while uo.findcount() > 0
   uo.moveitem('finditem',-1,'backpack',40,60,0)
   uo.ignore('finditem')
   wait(200)
   uo.findtype('0x0EED',-1,'backpack')
wend


Подумай сам, так же гораздо лучше и логичней.

И вообще, запомни раз и навсегда: цикл repeat нужен только в том случае, если ты хочешь чтобы его тело обязательно хоть один раз выполнилось (проверка в нем в конце). Это его единственное предназначение. Во всех остальных случаях уместнее не изобретать пятиколесный велосипед, а использовать while. А в скриптах инжекта repeat чаще встречается только потому, что он задействован почти во всех динамических паузах:

Code: Select all

repeat
   wait(100)
until .....

Этот цикл при любом раскладе минимум один раз отработает, поэтому хоть минимальная, но будет пауза.