########################################################
### Lumberjacking / Рубка деревьев Special 4 Katorga ###
########################################################
### Oscom /www.uoo.ru ###
########################################################
### Внимание:
### Для работы скрипта нужна версия YokoInjection 4ZD.
### Скачать dll этой версии можно
### от сюда:
http://www.swines.nm.ru/injection.zip ##########################################################
### По вопросам и предложениям обращаться сюда:
### ICQ: 333358386 [cOoler]
### Авторы:
### -За основу взят скрипт:"©Elthar aka Duo",
### за что его автору большое спасибо.
### -Редактировал и дополнял:"BETEPAH".
### -Доработка и переработка скрипта:"cOoler".
### -За неоценимую помощь спасибо:"Mafia".
### -За коректнную помощь и идеи:"Аskaneli".
### -За помощь в переработке скрипта спасибо:"Sfagnum".
### -За помощь в доработке скрипта спасибо:"Legio".
### -А также за систему подсчета логов спасибо:"Mguai".
### Спасибо всем кто каким либо образом помогал в
### разработке этого скрипта.
##########################################################
############################
### Описание и настройка ###
############################
### Обратите внимание на значки "]![" ими выделенны важные сообщения.
###
### Чар бегает от дерева к дереву (координаты деревьев берет из файла).
### Вырубит, бежит к следующему, при логах 700 штук в паке порталится домой скидывает логи в сундук,
### после реколится обратно бежит к последнему дереву и продолжает рубить.
### Пример: В файле 100 деревьев, вы вырубив 74 дошли до придела в 700 логов сработала система рекола
### и вы "порталитесь" домой и складываете логи в сундук, после вы реколитесь обратно в лес и бежите к 75 дереву.
### Дойдя до 100 дерева (тоесть последнего в списке) чар перейдет к 1ому дереву.(Цикличность)
###
###
### ]![ Из-за изменения скрипта и введения новых функций рекомендую почитать описание. ]![
### ]![ При Возникновении ошибок или глюков пишите в ICQ! ]![
### ]![ Чтобы скрипт заработал внимательно прочтите настройки. ]![
###
###################################
### Режимы работы скрипта ###
###################################
### Работает в 2х режимах: ###
### 1)Маркировка ###
### 2)Рубка ###
###################################
### Режим Первый - "Маркировка" ###
###################################
### Этот режим отвечает за Маркирование(записывание координат) деревьев.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента.
### То есть если GetFromFile=0 координаты деревьев собиратся из клиента.
###
### Маркировка происходит так:
### Поставте переменную GetFromFile равную 0 (GetFromFile=0).
### Положите к себе в сумку Топор.
### Идите в лес в котором вы хотите рубить.
### Запустите Скрипт GoLumberjacking(), инжект попросит вас указать Топор
### (появится прицел,прицелом на топор который вы с собой взяли),
### Инжект сообщит вам что ('Собираем координаты деревьев в округе...').
### Инжект попросит вас указать Кирку(появится прицел,прицелом на неё).
### Теперь вы должны в любом порядке сами прицелом указать координаты(достаточно просто нажать прицелом на дерево).
### Если вы не промахнулись и "нажали" на дерево, то инжект сообщит вам об этом(Найдено дерево "координаты дерева").
### Причем что если даже вы нажмете два раза на одно дерево то он не "запомнит" его повторно.
### Ходите по лесу и марчите деревья.
### Для того чтобы остановить марк нажмите таргетом на себя.
### Инжект напишет вам сообщение ('Анализ закончен, координаты деревьев записаны в файл' +FileName) и создаст файл на диске
### С:\ куда запишет координаты деревьев.
### После этого чар пойдет по координатам и будет вырубать деревья.
###
##############################
### Режим Второй - "Рубка" ###
##############################
### Этот режим соответственно отвечает за рубку.
### Включается переменной var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла.
### И вам не надо будет сново марчить деревья.
###
### Рубка происходит так:
### Поставте переменную GetFromFile равную 1 (GetFromFile=1).
### Положите к себе в сумку Топор.
### Идите на место рубки(где вы замаркали местность), укажите топор таргетом, и чар начнет рубить.
###
##################
### Переменные ###
##################
##################################################################################################################
###
var FileName=('C:\trees.dat') ## - Путь к файлу в котором будут хранится координаты деревьев.
###
var TryHiding=1 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var LogsQty=500 ## - Количество логов при котором чар складывает логи в чек.
###
var QuantityImpact=15 ## - Сколько раз чар будет ударять по дереву, прежде чем перейдет к другому.(стандарт - 15)
###
var LogsType='0x1BDD' ## - Тип логов на каторге.
###
##################################################################################################################
###
### После настройки:
### Идите в лес в котором вы хотите рубить.
### Запустите cкрипт GoLumberjacking(), Инжект попросит вас указать Топор
### (появится прицел, прицелом на топор который вы с собой взяли),
### затем инжект попросит вас указать Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на неё) и Сундук для логов.
### После этого чар пойдет по координатам и будет вырубать деревья.
###########
### Код ###
###########
sub GoLumberjacking()
uo.Print('Выбери Топор: ')
uo.Exec('addobject Axe')
while uo.Targeting()
wait(100)
wend
uo.Exec('exec Lumberjacking')
end sub
sub Lumberjacking()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
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.FilterSpeech('on')
uo.FilterSpeech('add', 'Where do you want to use the pickaxe?')
#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
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)))
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==5000)
uo.FilterSpeech('off')
uo.Print('Анализ закончен, координаты деревьев записаны в файл ' + FileName)
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 uo.Count('ZLK')>=LogsQty or uo.Weight>=uo.STR*4+20 then
ClickingOnLogs()
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 SaveToFile(TreeCount,TreeX,TreeY,TreeT)
var s=0,i=0,f
f=file(FileName)
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 GetTree(Type,X,Y,Z)
var i
uo.Print('Начинаем рубку дерева...')
for i=0 to QuantityImpact
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 WaitForRecall()
var Text1=uo.GetName()+': The spell fizzles.'
var LastX=uo.GetX()
var LastY=uo.GetY()
var mess=''
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(100)
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(100)
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 Text4='That is too far away.'
var Text5="You can't do much in your current state."
var Text6="What do you want to use this on?"
var Text7="Тут не осталось пригодной древесины. Нечего рубить."
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(100)
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(100)
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(100)
next
return 0
end sub
sub GotoXY(x,y,r)
var LastX=0,LastY=0,i=0
while Numb(y-uo.GetY())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (y-uo.GetY())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(35)
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(37)
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(40)
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(38)
next
end if
end if
if (uo.GetY()-y)>r then
LastY=uo.GetY()
for i=0 to 2
uo.Press(33)
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(39)
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(38)
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(40)
next
end if
end if
wend
while Numb(x-uo.GetX())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (x-uo.GetX())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(34)
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(40)
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(39)
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(37)
next
end if
end if
if (uo.GetX()-x)>r then
LastX=uo.GetX()
for i=0 to 2
uo.Press(36)
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(38)
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(37)
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(39)
next
end if
end if
wend
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
else
return 0
end if
return 0
end sub
sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
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 ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.Exec('warmode 0')
uo.UseSkill('Hiding')
wait(4100)
wend
wait(100)
end sub
sub ClickingOnLogs()
wait(100)
uo.UseType(LogsType)
uo.UseType(LogsType)
wait(100)
end sub
sub Terminate()
uo.Exec('terminate Lumberjacking')
end sub
sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(100)
until uo.InJournal('backpack')
end sub
2 проблемы 1) Подходит к дереву пишет What do you to use this on? и стоит какое-то время, порубит разок и стоит опять тупит какое-то время, 2) очень мало времени стоит на рубку, повторной рубкой, сбивает рубку, соответственно идет сообщение, где добавить время искал не могу найти, с первой проблемой вообще не знаю что делать помогите, заранее благодарен!