Кто Может Помогите со скриптом на ламбер

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
The_BoBi
Posts: 25
Joined: 2004-06-28 11:10:36
Contact:

Кто Может Помогите со скриптом на ламбер

Post by The_BoBi »

я скачать скрипт на ламбер все вроде норма но оне не ходит по координатам он пишет что нашол дерево но не идет к нему к первому девреву идет а ко 2рому и т.д не идет !

###############################################################
### Скрипт на ламбер ###
###############################################################
### (c) Elthar aka Duo.
### Требуется YokoInjection со скрипт парсером версии 0.3
### http://yoko.netroof.net
###############################################################
### Инструкции по применению ###
###############################################################
### Во время работы скрипта рекомендуется не говорить,
### это будет тормозить его выполнение, хотя и не смертельно.
### Вердату желательно иметь нормальную, не с пеньками вместо
### деревьев.
###
### 1. До запуска скрипта в бэкпаке должно быть: любой топор,
### кирка (a pickaxe); если надо, чтобы чар реколился домой и
### складывал логи, то еще две руны и спеллбук с реколом (или
### свитки.
### 2. Марчим одну руну куда-нить в безопасное место (например,
### в дом), вторую туда, где хотим рубить. Идем туда, врубаем
### скрипт.
### 3. Появится прицел и мессага "Выберите топор". Кликаем на
### топор. Если переменная TryRecall=1 то так же выбираем
### сначала руну домой, потом руну в лес. Если в спеллбуке нет
### заклинания Recall, то нужно выставить переменную
### RecallFromScroll=1, тогда еще выбираем стопку свитков рекола.
### Нужно обязательно проверить, хватает ли регов или свитков,
### иначе чар застрянет посреди леса.
### 4. Если переменная GetFromFile=1, то скрипт считает из файла
### координаты деревьев и сразу побежит к первому дереву. Если
### GetFromFile=0, то начнется анализ территории. ВО ВРЕМЯ АНАЛИЗА
### ОКНО КЛИЕНТА ДОЛЖНО БЫТЬ АКТИВНО, И КУРСОР ДОЛЖЕН НАХОДИТЬСЯ
### НА ИГРОВОМ ПОЛЕ!!! Можно менять переменную Area от 1 до 4,
### чтобы увеличивать/уменьшать размер территории для анализа.
### Сколько выбирать, зависит от густоты леса и скилла Ламбера,
### пробуй сам.
### 5. Когда база загрузится, появится соответствующая мессага,
### и начнется бесконечный цикл на обход деревьев. Он происходит
### так: идем к дереву; если переменная TryHiding=1 то пытаемся
### уйти в хайд; начинаем рубить логи, пока все не вырубим, или
### пока не кончится таймер (30 ударов); если переменная
### TryRecall=1 и логов больше чем переменная LogsQty, то
### реколимся домой, складываем логи на пол, реколимся обратно;
### идем к следующему дереву и все повторяется сначала.
###
### Вот собственно и все! Enjoy it!
###############################################################



sub Lumber()
var i=0,j=0,k=0,r=0,q=0,ii,jj
var TopX=324,TopY=65
dim TreeX[100], TreeY[100],TreeT[100]
dim TreeTile[100]
var flag=0,treeCount=0,clicks=0,flag2=0
var f=file("C:\trees3.dat")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
var Area=4 ## Размер обрабатываемой территории, можно менять от 1 до 4.
var TryHiding=0 ## 1 - перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет
var TryRecall=1 ## 1 - после того как соберет LogsQty логов, будет пытаться реколиться домой,
# складывать логи на пол и реколиться обратно (нужно выбрать две руны), 0 - не будет.

var LogsQty=100 ## Количество логов, добыв которое надо реколиться домой.
var RecallFromScroll=0 ## 1 - рекол со свитков, 0 - из спеллбука

var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#Графика деревьев
TreeTile[0]=3283
TreeTile[1]=3277
TreeTile[2]=3293
TreeTile[3]=3296
TreeTile[4]=3202
TreeTile[5]=3299
TreeTile[6]=3290
TreeTile[7]=3288
TreeTile[8]=3286
TreeTile[9]=3280

uo.exec("filterspeech on")
uo.exec("filterspeech add 'Where do you want to use the pickaxe?'")

uo.addobject("a key ring", 0x400866CE) # Обьект кейринга
uo.addobject("spellbook", 0x4019FFB0) # Обьект спелбука
uo.addobject("runebook", 0x400C617E) # Обьект runebook
uo.addobject("runebook2", 0x40080646) # Обьект runebook
uo.addobject("pestik", 0x4008610D) # пестик

uo.print('Выбери топор: ')
uo.exec('addobject axe')
wait(5000)

uo.print('сумку с регами: ')
uo.exec('addobject bag')
wait(5000)

if TryRecall==1 then
uo.print('Выбери руну домой: ')
uo.exec('addobject runeHome')
wait(5000)
uo.print('Выбери руну в лес: ')
uo.exec('addobject runeLumber')
wait(5000)
if RecallFromScroll==1 then
uo.print('Выбери свитки Recall:' )
uo.exec('addobject RecallScroll')
wait(5000)
end if
end if

#Загружаем координаты из файла
if GetFromFile==1 then
uo.print('Загружаем координаты из файла...')
f.open()
TreeCount=safe call f.readNumber()
for i=1 to TreeCount
TreeT[i]=safe call f.ReadNumber()
TreeX[i]=safe call f.ReadNumber()
TreeY[i]=safe call f.ReadNumber()
next
f.close()
else
#Собираем координаты из клиента
uo.print('Собираем координаты деревьев в округе...')
for q=1 to Area
if q==2 then
gotoxy(uo.getx()+20,uo.gety()-10)
end if
if q==3 then
gotoxy(uo.getx(),uo.gety()+20)
end if
if q==4 then
gotoxy(uo.getx()-20,uo.gety())
end if
for r=0 to 3
if r==1 then
gotoxy(uo.getx()+10,uo.gety())
end if
if r==2 then
gotoxy(uo.getx(),uo.gety()+10)
end if
if r==3 then
gotoxy(uo.getx()-10,uo.gety())
end if
for j=0 to 8
for i=0 to 8
clicks=0
flag=0
uo.DeleteJournal()
#Кликаем на тайл
uo.usetype('0x0E86')
waitForTarget()
uo.DeleteJournal()
uo.LClick(TopX+i*21-j*21,TopY+i*21+j*21)
WaitForTryRock()
#Проверяем дерево ли это
flag=0
for k=0 to 9
if uo.LastTile(0)==TreeTile[k]+1 then
flag=2
end if
next
if flag==0 then
for k=0 to 9
if uo.LastTile(0)==TreeTile[k] then
flag=1
end if
next
end if
#Кликнули на ствол
if flag==1 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
treeCount=treeCount+1
TreeX[treeCount]=uo.LastTile(1)
treeY[treeCount]=uo.lastTile(2)
TreeT[treeCount]=uo.LastTile(0)
uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
#Кликнули по листве
if flag==2 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
treeCount=treeCount+1
TreeX[treeCount]=uo.LastTile(1)
treeY[treeCount]=uo.LastTile(2)
TreeT[treeCount]=uo.LastTile(0)-1
uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
next
next
next
next
uo.exec("filterspeech off")
uo.print('Анализ закончен, координаты деревьев записаны в файл C:\trees.dat')
SaveToFile(treeCount,TreeX,TreeY,TreeT)
end if
uo.print('Деревьев найдено: '+str(treeCount))
wait(2000)
#Ходим по собранным координатам
while 1==1
if treeCount>0 then
for i=1 to treeCount
if TryRecall==1 AND uo.Count('ZLK')>=LogsQty then
ToRecall(RecallFromScroll)
end if
uo.print('Идем к дереву '+str(i)+': x='+str(treex[i])+' y='+str(treey[i]))
flag=gotoxy(treex[i],treey[i])
if flag==1 then
if TryHiding==1 then
ToHide()
end if
GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))
end if
next
end if
wend
end sub

sub GetTree(type,x,y,z)
var i
uo.print('Начинаем рубку дерева...')
for i=0 to 2
if uo.warmode()==1 then
return 0
end if
wait(200)
uo.deletejournal()
uo.waittargettile(type,x,y,z)
uo.useobject('axe')
if WaitForChange()==1 then
return 1
end if
next
return 0

end sub

sub ToRecall(FromScroll)
RecallToHome(FromScroll)
wait(500)
uo.press(36)
wait(500)
uo.press(36)
wait(500)
repeat
wait(600)
gotoxy(776,1920)
uo.exec("emptycontainer 400 'backpack' 0x400634A4")
wait(1000)
uo.setreceivingcontainer('backpack')
wait(500)
uo.grab(0,'bag')
wait(500)
uo.grab(0,'runeHome')
wait(500)
uo.grab(0, "a key ring")
uo.grab(0, "spellbook")
wait (500)
uo.grab(0, "runebook")
wait (500)
uo.grab(0, "runebook2")
uo.grab (0,"runeLumber")
wait (500)
uo.grab (0,"pestik")
wait(1000)


RecallToLumber(FromScroll)
end sub

sub RecallToHome(FromScroll)
var i
uo.print('Реколимся домой...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeHome')
if FromScroll==0 then
uo.cast('Recall')
else
uo.useobject('RecallScroll')
end if
if WaitForRecall()==1 then
return 1
end if
next
return 0
end sub


sub RecallToLumber(FromScroll)
var i
uo.print('Реколимся обратно...')
for i=1 to 10
uo.deletejournal()
uo.waittargetobject('runeLumber')
if FromScroll==0 then
uo.cast('Recall')
else
uo.useobject('RecallScroll')
end if
if waitForRecall()==1 then
return 1
end if
next
return 0
end sub

sub ToHide()
var i
uo.print('Пытаемся уйти в хайд...')
for i=1 to 15
uo.deletejournal()
uo.useskill('Stealth')
if WaitForHide()==1 then
return 1
end if
next
return 0
end sub

sub WaitForRecall()
var Text1=uo.getname()+": The spell fizzles."
var mess='',lastX=uo.getX(),lastY=uo.getY()
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 0
end if
if uo.getX()<>lastX OR uo.getY()<>LastY then
return 1
end if
wait(50)
next
return 0
end sub

sub WaitForHide()
var Text1=uo.getname()+": You have hidden yourself well"
var Text2=uo.getname()+": You can't seem to hide here."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 1
end if
if uo.Journal(0)==Text2 then
return 0
end if
wait(50)
next
return 0
end sub

sub WaitForChange()
var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.'
var Text2='There are no logs here to chop.'
var Text3="You can't reach this."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 then
return 1
end if
if uo.Journal(0)==Text1 then
return 0
end if
if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub

sub WaitForTryRock()
var Text1="That is too far away."
var Text2="Try mining in rock."
var Text3="There is no ore here to mine."
var Text4="You have no line of sight to that location"
var Text5="You can't see the target"
for var i=0 to 50
if uo.Journal(0)==Text1 OR uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 OR uo.Journal(0)==Text5 then
return 1
end if
wait(200)
next
return 0
end sub

sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
end if
wait(200)
next
return 0
end sub

sub WaitForChangeXY(myX,myY,lastX,lastY)
for var i=1 to 50
if lastX<>myX OR lastY<>myY then
return 1
end if
wait(200)
next
return 0
end sub

sub gotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60
MyX=uo.getX();
MyY=uo.getY();
if LastX==MyX AND LastY==MyY then
halt=halt+1
else
halt=0
end if
if halt>=10 then
if uo.GetDir()==1 then
for z=0 to 8
uo.press(40)
next
end if
if uo.GetDir()==3 then
for z=0 to 8
uo.press(37)
next
end if
if uo.GetDir()==5 then
for z=0 to 8
uo.press(3)
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.press(39)
next
end if
halt=15
end if
if (x-myX)<=1 AND (y-myY)<=2 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 3
uo.press(3)
next
else
for z=0 to 3
uo.press(37)
next
end if
else
if y<=MyY then
for z=0 to 3
uo.press(39)
next
else
for z=0 to 3
uo.press(40)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub

sub main()

Lumber()
end sub
И че не такое бывает
Post Reply