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 .....
Этот цикл при любом раскладе минимум один раз отработает, поэтому хоть минимальная, но будет пауза.