Здраствуйте нужен скрипт на ламбер

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
GNOMIK
Posts: 1
Joined: 2010-03-07 11:39:43

Здраствуйте нужен скрипт на ламбер

Post by GNOMIK »

Мне нужен простой скрипт на ламбер чтоб он тупо ходил и рубил без сбора ресов можно чтоб выкидовал или самое простое чтобы они валились из под него суть в чом . Нужно прокачать скилл , все скрипты с форума я перепробывла почему в какомто моменте отказываются работать(.
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: Здраствуйте нужен скрипт на ламбер

Post by lavdenis »

вот какои то


Code: Select all

############################################ 
### Lumberjacking / Рубка деревьев v3.7 ###
############################################
### Шард Dragon World / www.drw.ru
############################################
### Реавтор этого скрипта: BETEP [WOD] or BETEPAH ###
############################################
############################################
### Оформление дополнений cOoler [Sw!Ne$]###
############################################
###
#############################
### Описание и настройка ###
#############################
###
### Чар бегает от дерева к дереву(координаты деревьев берет из файла).
### Вырубит, бежит к следующему,при логах 700 штук в паке порталится домой скидывает логи в сундук,
### после реколится обратно бежит к последнему дереву и продолжает рубить.
### Пример: В файле 100 деревьев, вы вырубив 74 дошли до придела в 700 логов сработала система рекола
### и вы "порталитесь" домой и складываете логи в сундук,после вы реколитесь обратно в лес и бежите к 75 дереву.
### Дойдя до 100 дерева (тоесть последнего в списке) чар перейдет к 1ому дереву.(Цикличность)
###
### Для тех то кто им пользуется сообщаю, переделал, доработал, отредактировал.!
###
### Нововведения:
### 1 )Логи складываются не на пол а в сундук. (BETEPAH)
### 2 )Рекол в лес и домой по РУНБУКЕ (а не по рункам). (BETEPAH)
### ВНИМАНИЕ!!! В СКРИПТЕ РУНБУКИ НАСТРОЕНЫ ПОД DRW (шард)
### 3 )Система Автомарка Убрана ,и переделана в сомостоятельное маркирование деревьев
### (раньше чар сам бегал по лесу и очень долго марчил деревья)теперь бегаем сами и просто прицелом по деревам
### (марчим также,как и раньше в руках кирка). (BETEPAH)
### 4 )Увеличен придел замаркированых деревьев да 500 шт. (BЕТЕРАН)
### 5 )Улучшна система Хайда (ходим, не бегаем). (BЕТЕРАН)
### 6 )Добавлена система InfoLogs. (Mguai, доработана BETEPAH)
### 7 )Добавлен выбор кирки.(cOoler,доработана BETEPAH)
### 8 )Система реконекта (выложаная сверху),хорошо сочетается с скриптом лумбер. (Fox M)
###
### !!! Чтобы скрипт заработал ВНИМАТЕЛЬНО прочтите настройки.!!!!
###
### Работает в 2ух режимах:
### 1)Маркировка
### 2)Рубка
###
###################################
### Режимы работы скрипта ###
###################################
### Режим первый - "Маркировка".###
###################################
###
### Этот режим отвечает за Маркирование(записывание координат) деревьев.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента.
### То есть если GetFromFile=0 координаты деревьев собиратся из клиента.
###
### Маркировка происходит так.
### Поставте переменную GetFromFile равную 0 (GetFromFile=0 ). Положите в суммку к себе Топор,Рунбук(с Рунами домой и в лес) и !!Кирку!!.
### Идите в лес в котором вы хотите рубить.Запустите Скрипт main(),Инжект попросит вас указать Топор
### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него).
### Инжект сообщит вам что ('Собираем координаты деревьев в округе...'). Чар автоматом возмет в руки кирку и появится прицел.
### Теперь вы должны в любом порядке САМИ прицелом указать координаты (достаточно просто нажать прицелом на дерево).
### Если вы не промахнулись и "нажали" на дерево то инжект сообщит вам об этом (Найдено дерево "координаты дерева").
### Причем что если даже вы нажмете два раза на одно дерево то он не "запомнит" его повторно.
### Ходите по лесу и марчите деревья,после того как вы "наберете" достаточное количество деревьев.
### Инжект напишет вам сообщение ('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat') и создаст файл на диске С:\ куда запишет
### координаты деревьев.Система марка зависит от Времени и переменной Area.При Area = 1,
###марк продлится примерно 20-25 мин.Остоновить марк нельзя, можно только дождатся его конца.
###500 .Это ПРИДЕЛ (можно хоть 10,хоть 499),но если вы замарчите 501 дерево то скрипт повиснет.
### После этого чар пойдет по координатам и будет вырубать деревья.
###
##############################
### Режим Второй - "Рубка".###
##############################
###
### Этот режим соответственоо отвечает за рубку.
### Включается переменной var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла. И вам не надо будет сново марчить деревья.
###
### Рубка происходит так,Поставте переменную GetFromFile равную 1 ( GetFromFile=1 ).
### Положите в суммку к себе Топор и Рунбук(с Рунами домой и в лес).
### Внимание!!! В РУНБУКЕ РУНА В 1ом слоте ДОМОЙ,в 9ом В лес.После установок рун в РУНБУК.
### ВНИМАНИЕ!!! В СКРИПТЕ НОМЕРА РУН В РУНБУКЕ НАСТРОЕНЫ ПОД DRW (шард).
###
### Настройте скрипт под себя при помощи переменных.
###################
### Переменные: ###
###################
### 1)var TryHiding=1 ## 1 - перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет
### 2)var LogsQty=700 ## Количество логов, добыв которое надо реколиться домой.
### 3)var TryRecall=1 ## 1 - после того как соберет LogsQty логов, будет пытаться реколиться домой,складывать логи в сундук и реколиться обратно
### (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет реколится домой и выключит скрипт.
### 4)VAR Meshok='0x401C1142'## - Айди сундука в который должен складывать Логи.(айди сундука можно узнать написав ,info и прицелом на сундук
### (в данном случие этот Айди 0x401C1142).Переменная находится ниже в скрипте (примерно в районе 327 строки).
###
### После настройки:
###
### Идите в лес в котором вы хотите рубить.Запустите Скрипт Lumberjacking(),Инжект попросит вас указать Топор
### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него).
### После этого чар пойдет по координатам и будет вырубать деревья.
###########
### Код ###
###########
sub Lumberjacking()
var i=0,j=0,k=0,r=0,q=0,ii,jj
var TopX=324,TopY=65
dim TreeX[500], TreeY[500],TreeT[500]
dim TreeTile[10]
var flag=0,treeCount=0,clicks=0,flag2=0
######################
### Меню / Options ###
######################
############################################################################################
var f=file("C:\trees3.dat") ## - Путь к файлу в котором будут хранится координаты Деревьев.
###
var Area=1 ## Размер обрабатываемой территории, можно менять от 1 до 4.
###
var TryHiding=1 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет LogsQty логов, будет пытаться реколиться домой,
# складывать логи в сундук и реколиться обратно (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет.
###
var LogsQty=700 ## Количество логов, добыв которое надо реколиться домой.
###
var GetFromFile=0 ## 0 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
#(сначала соберите а потом считывайте из файла).
###
uo.exec("set norbcheck 1")# Для рекола.
###
uo.exec("set norbcalc 1") # Для рекола .
###
############################################################################################
########################
### Графика деревьев ###
########################
TreeTile[0]=3283
TreeTile[1]=3277
TreeTile[2]=3293
TreeTile[3]=3296
TreeTile[4]=3302
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.print('Выбери топор: ')
uo.exec('addobject axe')
while uo.targeting()
wait(100)
wend

if TryRecall==1 then
uo.print('Выбери PунБук: ')
uo.exec('addobject Runebook')
while uo.targeting()
wait(100)
wend
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('Выбери Кирку: ')
uo.exec('addobject Pickaxe')
while uo.targeting()
wait(100)
wend
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.useobject('Pickaxe')
waitForTarget()
uo.DeleteJournal()

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:\trees3.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()
end if
uo.print('Идем к дереву '+str(i)+': x='+str(treex[i])+' y='+str(treey[i]))
infologs()
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 15
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()
VAR Meshok='0x401C1142' ## - ID сундука в который чар должен складывать логи
RecallToHome()
wait(500)
uo.press(36)
wait(500)
uo.press(36)
wait(500)
repeat
wait(500)
repeat
wait(500)
repeat
wait(500)
repeat
wait(600)
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
RecallToLumber()
end sub

sub RecallToHome()
UO.Print("!!Прыгаем ДоМОЙ!!")
uo.exec("recall Runebook 21")
wait(10000)
end sub

sub RecallToLumber()
UO.Print("!!Прыгаем в ЛЕС!!")
uo.exec("recall Runebook 1025")
wait(10000)
end sub

sub ToHide()
while not UO.Hidden()
uo.print('Пытаемся уйти в хайд...')
uo.deletejournal()
UO.UseSkill("Stealth")
wait(4100)
wend
wait(100)
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( 38 )
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.press(39)
next
end if
halt=15
end if
if abs(x-myX)<=1 AND abs(y-myY)<=2 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 3
uo.press( 38 )
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 abs(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub

sub SaveToFile(TreeCount,TreeX,TreeY,TreeT)
var f=file("C:\trees3.dat")
var s=0,i=0
f.open()
f.create()
s=safe call f.writeln(TreeCount)
for i=1 to TreeCount
s=safe call f.writeln(str(TreeT[i])+' '+str(treeX[i])+' '+str(TreeY[i]))
next
f.close()
end sub

sub infologs()
UO.Print('У вас всего '+Str(UO.Count('0x1BDD'))+' логов в сумке')
UO.Print('Из них '+Str(UO.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.count('0x1BDD')-uo.count('0x1BDD','0x0000'))+' цветных')
end sub

##############################################################
### ВНИМАНИЕ!!! В СКРИПТЕ РУНБУКИ НАСТРОЕНЫ ПОД DRW (шард) ###
##############################################################


только переменные и координаты все поменяи
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: Здраствуйте нужен скрипт на ламбер

Post by lavdenis »

вот еще

Code: Select all

############################################ 
### Lumberjacking / Рубка деревьев ###
############################################
### Шард Groza / www.uo.groza.ru ###
############################################
### Реавтор этого скрипта: Reddevill ###
############################################
##################
### Переменные ###
##################
###################################################################################################
var f=file("C:\trees4.dat") ## - Путь к файлу в котором будут хранится координаты деревьев.
###
var TryHiding=1 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var LogsQty=1100 ## - Количество логов, добыв которое надо идти к банку.
###
var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var TypeFood='0x097B' ## - Тип еды которую будем кушать.(сейчас фиштейки)
###
var Chest='0x40021264' ## - ID сундука куда будут выгружаться логи.
###
var Trytodrop=1 ## Будем пытатся подходить к сундуку или нет.
###
var ContX=4471 ##Координаты X у сундука
###
var ContY=1163 ##Координаты Y у сундука
###
var oldX,oldY,time ## - Для рекола.
###
var Axe='0x0F43' ## ID топора
###
var FoodSoondook = 1
###
var Sunduk='0x40021264'
###
var ContX1=4442 ## 1-я координата пути к ресалке
var ContY1=1188
###
var ContX2=4442 ## 2-я координата пути к ресалке
var ContY2=1169
###
var ContX3=4451 ## 3-я координата пути к ресалке
var ContY3=1169
###
var ContX4=4451 ## 4-я координата пути к ресалке
var ContY4=1162
###
var ContX5=4462 ## Координата на путь к банку (что бы никуда не врезался)
var ContY5=1169
###
var ContX6=4462 ## Координата на путь к банку (что бы никуда не врезался)
var ContY6=1179
###
var ContX7=4471 ## Координата на путь к банку (что бы никуда не врезался)
var ContY7=1179
###
var MaxTraceDistance=10
var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1
var StepTimeOut=500 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping

var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

###########
### Код ###
###########
sub Lumberjacking()
var i=0,j=0,k=0,r=0,q=0,ii,jj
var TopX=324,TopY=65
dim TreeX[5000], TreeY[5000],TreeT[5000]
dim TreeTile[29]
var flag=0,treeCount=0,clicks=0,flag2=0
########################
### Графика деревьев ###
########################
TreeTile[0]=3277
TreeTile[1]=3280
TreeTile[2]=3283
TreeTile[3]=3286
TreeTile[4]=3289
TreeTile[5]=3291
TreeTile[6]=3294
TreeTile[7]=3296
TreeTile[8]=3299
TreeTile[9]=3302
TreeTile[10]=3393
TreeTile[11]=3394
TreeTile[12]=3395
TreeTile[13]=3396
TreeTile[14]=3415
TreeTile[15]=3416
TreeTile[16]=3417
TreeTile[17]=3418
TreeTile[18]=3419
TreeTile[19]=3438
TreeTile[20]=3439
TreeTile[21]=3440
TreeTile[22]=3441
TreeTile[23]=3442
TreeTile[24]=3460
TreeTile[25]=3461
TreeTile[26]=3462
TreeTile[27]=3290
TreeTile[28]=3288

uo.Exec("filterspeech on")
uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'")
#####################################
### Загружаем координаты из файла ###
#####################################
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('Выбери Кирку: ')
uo.Exec('addobject Pickaxe')
while uo.Targeting()
wait(100)
wend
uo.Print('Собираем координаты деревьев в округе...')
repeat
clicks=0
flag=0
uo.DeleteJournal()
#######################
### Кликаем на тайл ###
#######################
uo.UseObject('Pickaxe')
waitForTarget()
uo.DeleteJournal()
WaitForTryRock()
###############################
### Проверяем дерево ли это ###
###############################
flag=0
for k=0 to 28
if uo.LastTile(0)==TreeTile[k]+1 then
flag=2
end if
next
if flag==0 then
for k=0 to 28
if uo.LastTile(0)==TreeTile[k] then
flag=1
end if
next
end if
if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then
flag=3
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('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' '+str(treeCount))
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('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2)))
end if
end if
until (Flag==3) or (treeCount==150)
uo.Exec("filterspeech off")
uo.Print('Анализ закончен, координаты деревьев записаны в файл C:\trees3.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
end if
if Trytodrop==1 and uo.Count('ZLK')>=LogsQty then
DropLogs()
end if
uo.Print('Идем к дереву '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i]))
InfoLogs()
flag=GotoXY(TreeX[i],TreeY[i],2)
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 15
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 ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(3000)
wend
wait(100)
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='You hack at the tree for a while, but fail to produce any useable wood'
var Text2='There is nothing here to chop.'
var Text3="You can't reach this."
var Text4='That is too far away.'
var Text5="You can't do much in your current state."
var mess
for var i=0 to 200
mess=uo.Journal(0)
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 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 DropLogs()
GotoXY(ContX1,ContY1,2)
wait(1500)
GotoXY(ContX2,ContY2,2)
wait(1500)
GotoXY(ContX5,ContY5,2)
wait(1500)
GotoXY(ContX6,ContY6,2)
wait(1500)
GotoXY(ContX7,ContY7,2)
wait(1500)
GotoXY(ContX,ContY,2)
wait(1500)
uo.say("Bank")
if uo.Waiting() then
uo.CancelTarget()
end if
var a,Exit
dim Logs[1]
Logs[0]=0x1BDD
uo.Print('Выкладываем Логи.')
uo.SetReceivingContainer(Chest)
wait(5000)
for a=0 to 0
Exit=0
repeat
uo.FindType(Logs[a])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(5000)
uo.say("Bank")
wait(2000)
else
Exit=1
end if
until Exit==1
next
uo.UnSetReceivingContainer(Chest)
uo.Print('Логи Выложены.')
wait(1000)
PutFood()
GotoXY(ContX7,ContY7,2)
wait(1500)
GotoXY(ContX6,ContY6,2)
wait(1500)
GotoXY(ContX5,ContY5,2)
wait(1500)
GotoXY(ContX2,ContY2,2)
wait(1500)
GotoXY(ContX1,ContY1,2)
wait(1500)
end sub

sub PutFood()
uo.msg ('bank')
uo.SetReceivingContainer('backpack')
uo.FindType('0x097B','-1',Sunduk)
uo.Grab('10','finditem')
wait(500)
repeat
uo.FindType(TypeFood)
  if uo.GetQuantity('finditem')>0 then
  uo.UseType(TypeFood)
  wait(1000)
  else
  EatingFood=0
  wait(1000)
  return 1
  endif
until uo.InJournal("You are stuffed!") or uo.injournal("You are simply too full")
if uo.Waiting() then
uo.CancelTarget()
endif
uo.SetReceivingContainer(Sunduk)
uo.FindType('0x097B','-1','backpack')
if uo.GetQuantity('finditem')>0 then
uo.Grab('-1','finditem')
wait(1500)
else
return 0
endif
uo.UnSetReceivingContainer(Sunduk)
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 ttt()
walker(1165,1661,1)
end sub

Sub GotoXY(GoX,GoY,Prec)
  UO.SetGlobal("Logging","0")
  UO.SetGlobal("BlindWalk","0")
  var LastDir
  var MoveRes
  var TracerCnt
  UO.SetGlobal("GlobalGoX",str(GoX))
  UO.SetGlobal("GlobalGoY",str(GoY))
  while not IsEnd(GoX,GoY,Prec)
  TracerCnt = MaxTraceDistance
  repeat
  LogInfo('Just walking')
  LastDir=GoUntilHit(GoX,GoY,Prec)

  if IsEnd(GoX,GoY,Prec) then
  return 1
  end if

  LogInfo('Tracing')
  MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt)
  if TracerCnt > LimitTrace then
  return 0
  endif
  TracerCnt = TracerCnt + TraceLoopIncrease
  until MoveRes == 1
  wend
  return 1
end sub
 
Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace)
  var LineX=UO.GetX()
  var LineY=UO.GetY()
  var CurDir=StartDir
  var Direction=CountDirection(GoX,GoY,CurDir,Prec)
  var StartX,StartY
  var MovesDone=0
  repeat
  StartX=UO.GetX()
  StartY=UO.GetY()
  CurDir=Tracer(CurDir,Direction,Prec)
  if (CurDir==GetDir(GoX,GoY,Prec)) then
  return 1
  endif
  if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then
  return 1
  end if
  MovesDone=MovesDone+1
  CurDir=AddToDir(CurDir,-Direction,Prec)
  until MovesDone>MaxTrace
  return 0
end sub
 
Sub CountDirection(GoX,GoY,StartDir,Prec)
  var GoDir=GetDir(GoX,GoY,Prec)
  var MyX=UO.GetX()
  var MyY=UO.GetY()
  if GoDir<StartDir then
  return -1
  end if
  if GoDir>StartDir then
  return 1
  end if
  if Abs(MyX-GoX)>Abs(MyY-GoY) then
  if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
  return -1
  else
  return 1
  end if
  else
  if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
  return -1
  else
  return 1
  end if
  end if
end sub
 
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec)
  var x3,y3,x4,y4
  x3=StartX
  y3=StartY
  x4=StartX+(XFromDir(Dir)-StartX)*Speed
  y4=StartY+(YFromDir(Dir)-StartY)*Speed
  return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
end sub
 
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
  if x1==x3 and y1==y3 then
  return false
  end if
  var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
  var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
  if z1*z2>0 then
  return false
  else
  LogInfo('Vector info:')
  LogInfo('x1= '+str(x1))
  LogInfo('y1= '+str(y1))
  LogInfo('x2= '+str(x2))
  LogInfo('y2= '+str(y2))
  LogInfo('x3= '+str(x3))
  LogInfo('y3= '+str(y3))
  LogInfo('x4= '+str(x4))
  LogInfo('y4= '+str(y4))
  return true
  end if
end sub
 
Sub IsDiap(X,X0,X1,Prec)
  if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
  return true
  end if
  return false
end sub
 
Sub GoUntilHit(GoX,GoY,Prec)
  var LastDir
  LastDir=GetDir(GoX,GoY,Prec)
  var CouldMove
  repeat
  LastDir=GetDir(GoX,GoY,Prec)
  if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
  CouldMove=TryDir(LastDir,Prec)
  end if
  until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
  return LastDir
end sub
 
Sub IsEnd(GoX,GoY,Prec)
  if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
  LogInfo('END FOUND')
  return true
  else
  return false
  end if
end sub
 
Sub GetDir(GoX,GoY,Prec)
  var MyX=UO.GetX()
  var MyY=UO.GetY()
  var DiffX=Abs(UO.GetX()-GoX)
  var DiffY=Abs(UO.GetY()-GoY)
  var GoDir=0
  if (DiffX/(DiffY+0.1))>=2 then
  if (MyX>GoX) then
  GoDir=7
  else
  GoDir=3
  end if
  else
 
  if (DiffY/(DiffX+0.1))>=2 then
  if (MyY>GoY) then
  GoDir=5
  else
  GoDir=1
  end if
  else
 
  if (MyX>GoX) and (MyY>GoY) then
  GoDir=6
  else
  if (MyX>GoX) and (MyY<GoY) then
  GoDir=8
  else
  if (MyX<GoX) and (MyY>GoY) then
  GoDir=4
  else
  if (MyX<GoX) and (MyY<GoY) then
  GoDir=2
  end if
  end if
  end if
  end if
  end if
  end if
  return GoDir
end sub
 
Sub Tracer(StartDir,Direction,Prec)
  var CurDir=StartDir
  var Result
  repeat
  Result=TryDir(CurDir,Prec)
  if not Result then
  CurDir=AddToDir(CurDir,Direction,Prec)
  end if
  until Result
  return Result
end sub
 
Sub AddToDir(Dir,Cnt,Prec)
  var NewDir=Dir
  NewDir=NewDir+Cnt
  while NewDir>8
  NewDir=NewDir-8
  wend
  while NewDir<1
  NewDir=NewDir+8
  wend
  return NewDir
end sub
 
Sub TryDir(Dir,Prec)
  var BegX=UO.GetX() # Ia?aeuiia O
  var BegY=UO.GetY() # Ia?aeuiia Y
  var Counter=0
  var GoX=BegX
  var GoY=BegY
  GoX=XFromDir(Dir)
  GoY=YFromDir(Dir)
  if not IsPass(GoX,GoY) then
  LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
  return false
  end if
  return TurnAndGoDir(Dir,Prec)
end sub
 
Sub XFromDir(Dir)
  if Dir==2 OR Dir==3 Or Dir==4 then
  return (UO.GetX()+1)
  end if
  if Dir==6 OR Dir==7 Or Dir==8 then
  return (UO.GetX()-1)
  end if
  return (UO.GetX())
end sub
 
Sub YFromDir(Dir)
  if Dir==8 OR Dir==1 Or Dir==2 then
  return (UO.GetY()+1)
  end if
  if Dir==4 OR Dir==5 Or Dir==6 then
  return (UO.GetY()-1)
  end if
  return (UO.GetY())
end sub
 
Sub TurnAndGoDir(Dir,Prec)
  var StartDir=GetDirToDir(UO.GetDir(),Prec)
  var StartX=UO.GetX()
  var StartY=UO.GetY()
  var EndDir
  var Counter=0
  var TestCounter=CheckCnt

#Direction Test
  repeat
  Counter = 0
  LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter)) 
  PressDir(Dir)
  repeat
  EndDir=GetDirToDir(UO.GetDir(),Prec)
  wait(DynamicPause)
  Counter=Counter+1
  until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
  TestCounter = TestCounter - 1
  LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter)) 
  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause

  if Counter>=StepTimeOut/DynamicPause then
  LogInfo('Direction timeout reached')
  return 0
  end if
  #End direction Test

  if StartY<>UO.GetY() or StartX<>UO.GetX() then
  return Dir
  end if
 
  #Start Primary test
  TestCounter=CheckCnt
  repeat
  GoDir(Dir,Prec)
  Counter=0
  repeat
  wait(DynamicPause)
  Counter=Counter+1
  until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
  TestCounter = TestCounter - 1
  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
  #End primary test

  if Counter>=StepTimeOut/DynamicPause then
  LogInfo('Step timeout reached')
  return 0
  else
  return Dir
  end if
end sub
 
Sub GetDirToDir(GotDir,Prec)
  var ChangedDir=-GotDir
  ChangedDir=AddToDir(ChangedDir,5,Prec)
  return ChangedDir
end sub
 
Sub DirToInj(Dir)
  dim Dirs[9]
  Dirs[1]=1
  Dirs[2]=2
  Dirs[3]=3
  Dirs[4]=6
  Dirs[5]=9
  Dirs[6]=8
  Dirs[7]=7
  Dirs[8]=4
 
  return (Dirs[Dir])
end sub

Sub PressDir(Dir)
  dim Dirs[9]
  Dirs[1]=35
  Dirs[2]=40
  Dirs[3]=34
  Dirs[4]=39
  Dirs[5]=33
  Dirs[6]=38
  Dirs[7]=36
  Dirs[8]=37
 
  UO.Press(Dirs[Dir],1)
end sub

Sub GoDir(Dir,Prec)
  dim Dirs[9]
  Dirs[1]=35
  Dirs[2]=40
  Dirs[3]=34
  Dirs[4]=39
  Dirs[5]=33
  Dirs[6]=38
  Dirs[7]=36
  Dirs[8]=37
 
  var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
  var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
  var GoDistance
  if (DistanceX-Prec)<Speed then
  GoDistance=DistanceX-Prec
  else
  if (DistanceY-Prec)<Speed then
  GoDistance=DistanceY-Prec
  else
  GoDistance=Speed
  endif
  endif
 
  UO.Press(Dirs[Dir],GoDistance)
end sub
 
Sub IsPass(X,Y)
  if UO.GetGlobal("BlindWalk") then
  return true
  endif
 
  dim Types[60]
  Types[1]=3
  Types[2]=25
  Types[3]=51
  Types[4]=63
  Types[5]=113
  Types[6]=140
  Types[7]=172
  Types[8]=219
  Types[9]=232
  Types[10]=235
  Types[11]=239
  Types[12]=243
  Types[13]=248
  Types[14]=251
  Types[15]=264
  Types[16]=267
  Types[17]=282
  Types[18]=289
  Types[19]=321
  Types[20]=379
  Types[21]=420
  Types[22]=440
  Types[23]=476
  Types[24]=499
  Types[25]=513
  Types[26]=542
  Types[27]=578
  Types[28]=586
  Types[29]=622
  Types[30]=700
  Types[31]=804
  Types[32]=1740
  Types[33]=1758
  Types[34]=1770
  Types[35]=1779
  Types[36]=1779
  Types[37]=1881
  Types[38]=1886
  Types[39]=1801
  Types[40]=1805
  Types[41]=1813
  Types[42]=1820
  Types[43]=1831
  Types[44]=1833
  Types[45]=1843
  Types[46]=1850
  Types[47]=1873
  Types[48]=1876
  Types[49]=1885
  Types[50]=1888
  Types[51]=1946
  Types[52]=1969
  Types[53]=2500
  Types[54]=2539
 
  for var i=1 TO 53 STEP 2
  if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
  return true
  end if
  next
  return false
end sub
 
Sub LogInfo(Line)
  if not UO.GetGlobal("Logging")=="0" then
  UO.TextOpen()
  UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
  end if
end sub
 
Sub Abs(X)
  if X>0 then
  return X
  else
  return (-X)
  end if
end sub

 




Sub SaveToFile(treeCount,TreeX,TreeY,TreeT)
var f=file("C:\trees3.dat")
var s=0,i=0
f.open()
f.create()
s=safe call f.writeln(treeCount)
for i=1 to treeCount
s=safe call f.writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i]))
next
f.close()
end sub




Sub InfoLogs()
uo.Print('У вас всего '+str(uo.Count('0x1BDD'))+' логов в сумке')
uo.Print('Из них '+str(uo.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.Count('0x1BDD')-uo.Count('0x1BDD','0x0000'))+' цветных')
end sub

Sub Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub


Sub Terminate()
uo.Print('Все функции скрипта выключены!')
uo.DeleteJournal()
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
end sub

Sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub
sub LumberWithRessurectionLoader()
  repeat
  uo.exec( "exec Lumberjacking" )
  while not uo.dead()
  wait( 100 )
  wend
  funcKill( "Lumberjacking" )
  Ressurect()
  until false
endsub
Sub funcKill( Lumberjacking )
  var i
  for i = 1 to 3
  uo.exec( "terminate " + Lumberjacking )
  wait( 300 )
  next
endsub

sub Ressurect()
while uo.dead()
UO.Print( "Go 1" )
GotoXY(ContX1,ContY1,2)
wait(500)
UO.Print( "Go 2" )
GotoXY(ContX2,ContY2,2)
wait(500)
UO.Print( "Go 3" )
GotoXY(ContX3,ContY3,2)
wait(500)
UO.Print( "Go 4" )
GotoXY(ContX4,ContY4,2)
wait(1500)
onwar()
wait(500)
UO.Print( "Go 3" )
GotoXY(ContX3,ContY3,2)
UO.Print( "Go 2" )
GotoXY(ContX2,ContY2,2)
wait(1500)
UO.Print( "Go 1" )
GotoXY(ContX1,ContY1,2)
wait(1500)
wend
while (UO.Life<40)
wait(500)
wend
end sub

sub onwar()
if uo.warmode(1) then
UO.WarMode(0)
end if
end sub

sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
;UO.Exec('terminate all')
;UO.Exec('exec autoload')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub

sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
lavdenis
Posts: 87
Joined: 2010-03-27 06:15:56
Contact:

Re: Здраствуйте нужен скрипт на ламбер

Post by lavdenis »

А так готового ни кто ни че не даст так как шарды разные да и переменные в большинстве своем тоже. Надо самому сидеть разбираться. Или попроси у кого нить со своего шарда. Если нет желания разбираться то либо пусть те напишут либо руби руками
Post Reply