Page 1 of 1
странности ((
Posted: 2005-04-04 11:18:11
by Val
Code: Select all
sub dig()
var x=uo.GetX('self')
var y=uo.GetY('self')
var dx,dy
var Tmr,j
var col=''
var i=0
var size=12
dim tpe[13]
tpe[0] = '0x07DF' ; Cooper
tpe[1] = '0x0000' ; Iron
tpe[2] = '0x0482' ; Steel
tpe[3] = '0x045E' ; Anra
tpe[4] = '0x07D6' ; Valurit
tpe[5] = '0x006F' ; Lavarock
tpe[6] = '0x09F9' ; Icerock
tpe[7] = '0x0940' ; Shadow
tpe[8] = '0x094A' ; Azurit
tpe[9] = '0x05D7' ; Gem
tpe[10] = '0x0943' ; Doom
tpe[11] = '0x094E' ; Blue Steel
tpe[12] = '0x0214' ; Dark Rubi
;------------------------------------------------------
uo.set('finddistance','2')
for dx=-2 to 2
for dy=-2 to 2
i=i+1
uo.Print(str(i))
if uo.privategettile(x+dx,y+dy,-1,1330,1360) > 0 then
for j=0 to (size-4)
col=tpe[j]
uo.findtype(Ore,col,'ground')
if uo.findcount() then
DropToStack(Ore,col)
end if
next
for j=(size-3) to size
col=tpe[j]
Grab(Ore,col)
next
rep1:
uo.CancelTarget()
uo.DeleteJournal()
uo.FindType(pickaxe,'-1','my')
if uo.findcount() then
uo.WaitTargetTile('0',x+dx,y+dy,str(uo.GetZ('self')))
wait(50)
uo.UseType(pickaxe)
else
goto rep2
end if
repeat
wait(50)
until uo.injournal("Select|cannot|already|must|broke|no item")
Tmr = uo.Timer()+600
CheckLag()
wait(1000)
if uo.injournal('already|must|broke') then
uo.deletejournal()
goto rep1
end if
if uo.injournal('no item') then
dx=2
dy=2
goto rep2
end if
repeat
wait(50)
until UO.InJournal("no more ore|must|cannot|broke") || uo.Timer() > Tmr
if uo.InJournal('broke') then
else
uo.Print(str(i))
test(dx,dy)
end if
if uo.injournal('broke') then
uo.deletejournal()
goto rep1
end if
else
wait(50)
end if
rep2:
next
next
uo.exec('mfgi clear')
end sub
вот ето копалка...)). проблема в том что иногда (в случайные моменты)
она может пропусть как 1 тайл так и серию(до окончания внутреннего цикла). Если у кого есть идеи по етому поводу... поделитесь плз.))
Posted: 2005-04-06 08:27:56
by J17
Наверное проблема вылезает тут:
Code: Select all
if uo.injournal('no item') then
dx=2
dy=2
goto rep2
end if
Для чего устанавливаются dx и dy в 2?
Posted: 2005-04-06 08:32:58
by Val
устанавливаются, чтоб не пытаться копать когда закончилися кирки в багажнике...

Posted: 2005-04-06 08:39:30
by J17
У тебя же есть это:
Code: Select all
uo.FindType(pickaxe,'-1','my')
if uo.findcount() then
uo.WaitTargetTile('0',x+dx,y+dy,str(uo.GetZ('self')))
wait(50)
uo.UseType(pickaxe)
else
goto rep2
end if
Если кирки кончились, то до проверки 'no item' дело не дойдет...
Posted: 2005-04-06 11:07:06
by Val
Вот что значит свежий взгляд...

избыток проверок (((... но дело в любом случае не в етом (((. ибо пропуски бывают в середине массива из 25 тайлов... к примеру с 7 по 10 включительно....(((
Что делать ума неприложу....(((. И, кстати, в етом же скрипте иногда теряются переменные... (счетчики циклов)..(((
Posted: 2005-04-06 11:30:08
by Sfagnum
чтобы увидеть сообщение no item надо включить одну опцию...
Posted: 2005-04-06 11:42:12
by Val
чтобы увидеть сообщение no item надо включить одну опцию...
Вы будете смеяться, Монсеньёр, но писать скрипты под инжект я начал ещё в те времена, когда инжект был токо в одном исполнении...
так что "не учите меня жить..." (с) Ильф и Петров.
P.S.
Для того, чтоб увидеть сообщение "no item" вполне достаточно использовать макрос клиеента Last Object если эти обжекты закончились.... (это сообщение клиента и ни каких опций инжи это не касаеться.)
Posted: 2005-04-06 13:00:01
by J17
То есть, как это теряются переменные? Куда теряются?
Если в инжекте нет возможности передать переменные как указатели, например, в test(dx,dy), то никак они потеряться не должны.
Расставляй print'ы после каждой строчки, печатай значения dx и dy - и ищи место, где теряются переменные.
Еще, можно попробовать переписать без goto (всё равно это очень вредная команда) - мож, из-за нее глючит.
Posted: 2005-04-06 13:14:25
by Sfagnum
Val wrote:чтобы увидеть сообщение no item надо включить одну опцию...
Вы будете смеяться, Монсеньёр, но писать скрипты под инжект я начал ещё в те времена, когда инжект был токо в одном исполнении...
так что "не учите меня жить..." (с) Ильф и Петров.
замечательно... стиль програмирования у вас остался с тех же времён...
ЗЫ не вижу из чего я мог бы сделать подобный вывод.
Posted: 2005-04-06 14:00:20
by Val
замечательно... стиль програмирования у вас остался с тех же времён...
возиожно..., но если Вы мине подскажите, как в данной ситуации можно обойтись без goto и при этом не писать строк 25-30, то я с удовольствием воспользуюсь Вашим советом....
То есть, как это теряются переменные? Куда теряются?
то есть цикл,типа
Code: Select all
var i=0
for i=0 to i < 100
............
next
иногда (когда - непонятно....) вызываеть сообщение:"variable not found i............."..(((((
Posted: 2005-04-06 15:07:55
by J17
Ну это, вообще, мистика...
Версия инжекта?
Posted: 2005-04-06 15:14:04
by Sfagnum
J17 wrote:Версия инжекта?
судя по строке
Code: Select all
uo.injournal('already|must|broke')
5.х.х
Posted: 2005-04-06 15:21:35
by Val
а конкретно версия "501.??(4VI)". из тех что я пробывал - это единственная где работает privategettile......

Posted: 2005-04-06 15:54:39
by J17
Может, как раз вот эта конструкция глючит?
uo.injournal('already|must|broke')
Posted: 2005-04-06 16:02:18
by Val
еслиб проблема была в задержках, то скрипт простоб зависал... а реально он пропускает тайлы(иногда...). Так что у меня один диагноз - теряет значение переменной цикла ((( как правило - внутреннего...
Posted: 2005-04-06 16:12:59
by J17
Я имел в виду, что использование "|" в InJournal появилось недавно. Кто знает, может она глючит, и из-за этого сбиваются переменные...
По пробуй для эксперимента без этой фишки сделать, через or.