Code: Select all
##########################################################
### Lumberjacking / Рубка деревьев v6.8 (Last) ###
##########################################################
###################################################################################################
var f=file("C:\trees3.dat") ## - Путь к файлу в котором будут хранится координаты деревьев.
###
var TryHiding=0 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var TryRecall=0 ## 1 - После того как наберет Maxweight, будет пытаться реколиться домой,
### ## складывать логи в сундук и реколиться обратно , 0 - не будет.
###
var Carp=1 ## 1 - будет делать доски из всех бревен, 0 - не будет
###
var DropLogsGround=0 ## будет выбрасывать логи под ноги, 0 - не будет
###
var RechargeBook=0 ## 1 - Включить речарж рунбуки, 0 - отключить речарж.
###
var GetFromFile=0 ## 1 - уже собрали координаты деревьев, 0 - будем маркировать
###
var Maxweight=310 ## вес при котором надо лететь домой и складывать все
###
var EatingFood=0 ## 1 - Будем есть, 0 - нет.
###
var TypeFood='0x09AD' ## - Тип еды которую будем кушать.
###
var Reconnect=0 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить реконнект.
###
var RecallLumber=0 ## 1 - Включить рекол в лес после указания обьектов, 0 - выключить.
###
var BankingChest='0x6F559C6A' ## - ID банковского сундука
###
var Sunduk='0x6D113BF1' ## ID сундука дома для выгрузки логов
###
var Sunduk2='0x6EC19C21' ## ID сундука с рекол скроллами для перезарядки
###
var ToporChest='0x7080555A' ## если ломаются топоры, то ID сумки в бекпаке игрока где лежат топоры
###
var Banker='0x007907C1' ## ID банкира
###
var oldX,oldY,time ## - Для рекола.
###
###################################################################################################
###
### После настройки (переменных выше) :
### Идите в лес в котором вы хотите рубить.
### Запустите cкрипт Lumberjacking(), Инжект попросит вас указать Топор
### (появится прицел, прицелом на топор который вы с собой взяли),
### затем инжект попросит вас указать Рунбук(появится прицел, прицелом на него).
### После этого чар пойдет по координатам и будет вырубать деревья.
###########
### Код ###
###########
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?'")
uo.Exec("set norbcalc 1")
uo.Exec("set norbcheck 1")
uo.Print('Выбери Топор: ')
uo.canceltarget()
uo.Exec('addtype Axe')
while uo.Targeting()
wait(100)
wend
if Carp==1 then
uo.Print('Выбери Pубанок: ')
uo.Exec('addobject Rubanok')
while uo.Targeting()
wait(100)
wend
endif
if TryRecall==1 then
uo.Print('Выбери PунБук: ')
uo.Exec('addobject Runebook')
while uo.Targeting()
wait(100)
wend
endif
if Reconnect==1 then
uo.Exec('exec Reconnect')
endif
if RecallLumber==1 then
uo.Exec('exec RecallToLumber')
wait(9000)
endif
#####################################
### Загружаем координаты из файла ###
#####################################
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.canceltarget()
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
endif
next
if flag==0 then
for k=0 to 28
if uo.LastTile(0)==TreeTile[k] then
flag=1
endif
next
endif
if uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then
flag=3
endif
#########################
### Кликнули на ствол ###
#########################
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
endif
next
endif
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))
endif
endif
##########################
### Кликнули по листве ###
##########################
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
endif
next
endif
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)))
endif
endif
until (Flag==3) or (treeCount==75)
uo.Exec("filterspeech off")
uo.Print('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat')
SaveToFile(treeCount,TreeX,TreeY,TreeT)
endif
uo.Print('Деревьев найдено: '+str(treeCount))
wait(2000)
######################################
### Ходим по собранным координатам ###
######################################
while 1==1
if treeCount>0 then
for i=1 to treeCount
## InfoLogs()
## Если надо, то выкладываем логи
if DropLogsGround==1 then
droplogs()
endif
if Carp==1 then
Carp()
endif
if uo.weight>=Maxweight then
if TryRecall==1 then
ToRecall()
else
uo.Print('Достигли предела веса, выключаем скрипт')
uo.exec('terminate all')
endif
endif
uo.Print('Идем к дереву '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i]))
flag=Gototile(TreeX[i],TreeY[i],1,False)
if flag==1 then
if TryHiding==1 then
ToHide()
endif
GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ()))
endif
next
if EatingFood==1 then
EatingFood()
endif
endif
wend
end sub
###########################################################################################################################################
sub GetTree(Type,X,Y,Z)
var i
var ToporBreak="Этот предмет"
uo.Print('Начинаем рубку дерева...')
for i=0 to 15
if uo.Warmode()==1 then
return 0
endif
wait(200)
CheckLag()
uo.waittargettile(type,x,y,z)
uo.usetype('Axe')
if uo.injournal("Этот предмет") then
uo.FindType('Axe','-1',ToporChest)
if uo.FindCount()>0 then
uo.useobject('finditem')
uo.WaitTargetTile(Type,X,Y,Z)
else
uo.exec('terminate all')
endif
endif
uo.DeleteJournal()
if WaitForChange()==1 then
return 1
endif
next
return 0
end sub
###############################################
########## ТЕЛЕПОРТ
###############################################
sub ToRecall()
RecallToHome()
DropToChest()
## BankDrop()
if RechargeBook==1 then
RechargeBook()
wait(4000)
endif
RecallToLumber()
end sub
sub RecallToHome()
uo.Print('Прыгаем Домой.')
oldX=uo.getX()
oldY=uo.getY()
repeat
uo.Exec('warmode 0')
uo.exec("recall Runebook 0x1F14")
time=uo.Timer()
repeat
wait(1000)
until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('В книге') or time+200<uo.Timer()
uo.DeleteJournal()
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
sub RecallToLumber()
uo.Print('Прыгаем в Лес.')
oldX=uo.getX()
oldY=uo.getY()
repeat
uo.Exec('warmode 0')
uo.exec("recall Runebook 0x025A")
time=uo.Timer()
repeat
wait(1000)
until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('В книге') or time+200<uo.Timer()
uo.DeleteJournal()
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
sub ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
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
endif
if uo.getX()<>lastX or uo.getY()<>LastY then
return 1
endif
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
endif
if uo.Journal(0)==Text2 then
return 0
endif
wait(50)
next
return 0
end sub
sub WaitForChange()
var Text1='Вы поранились топором !'
var Text2='Здесь больше нечего рубить'
var Text3='Это слишком далеко'
var Text4='Здесь нечего рубить'
var Text5='Вы сломали axe'
var mess
for var i=0 to 20000
mess=uo.journal(0)
if uo.inJournal(Text2) OR uo.inJournal(Text3) OR uo.inJournal(Text4) then
return 1
endif
if uo.inJournal(Text1) OR uo.inJournal("Вы сломали") or uo.injournal("Этот предмет") then
return 0
endif
wait(500)
next
return 0
end sub
sub WaitForTryRock()
var Text1="Слишком далеко"
var Text2="Вы не можете добывать здесь"
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
endif
wait(200)
next
return 0
end sub
sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
endif
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
endif
wait(200)
next
return 0
end sub
Sub GoToTile( OX, OY, N, S )
VAR myx, myy, MD, J
VAR Lx1, Ly1
VAR Lx2, Ly2
VAR Sx, Sy
VAR T
VAR Des = N
VAR MoveDelay = 300
J = 1
MD = MoveDelay * 1.5
myx = uo.getx()
myy = uo.gety()
MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False)
Sx = 0
Sy = 0
Lx1 = uo.getx() / 2
Ly1 = uo.gety() / 2
Lx2 = Lx1 / 2
Ly2 = Ly1 / 2
T = UO.Timer()
If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then
UO.Exec('exec PermResend')
EndIf
While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 )
If ( (UO.Timer() - T) * 15 > MoveDelay ) Then
T = UO.Timer()
Lx2 = Lx1
Ly2 = Ly1
Lx1 = myx
Ly1 = myy
myx = uo.getx()
myy = uo.gety()
endIf
MD=MoveDelay
If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then
MD = MD * 3 / GetDistance( ox, oy )
EndIf
wait(MD)
If GetDistance( OX, OY ) > Des Then
MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False)
Else
If S Then
If GetDistance(OX,OY)<Des Then
If GetDistance(OX,OY)<>0 Then
MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False)
Else
MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
EndIf
EndIf
EndIf
EndIf
If GetDistance(OX,OY)<>Des Then
If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then
If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then
J=1
EndIf
J=J+1
UO.Resend()
Sx = uo.getx()
Sy = uo.gety()
Stun(ox,oy,J)
EndIf
EndIf
Wend
UO.Exec( 'terminate PermResend' )
return 1
end sub
;
; ============ MOVEONCE ===
; Процедура MoveOnce - хождение в определённую сторону
; Направления:
; Система направлений по клавишам Нумпада
; 8 = 1 | 2 = -1
; 9 = 2 | 1 = -2
; 6 = 3 | 4 = -3
; 3 = 4 | 7 = -4
;
; Такая система позволяет с лёгкостью получать направление, обратное
; данному...
;
Sub MoveOnce( Dir, Del, Rev )
VAR Num
Var MoveNumber = 1
If Rev Then
Num = MoveNumber + 1
Else
Num = MoveNumber
EndIf
If ( Num > 0 ) and ( Dir <> 0 ) Then
If Dir == 1 Then
UO.Press( 38, Num, Del )
EndIf
If Dir == 2 Then
UO.Press( 33, Num, Del )
EndIf
If Dir == 3 Then
UO.Press( 39, Num, Del )
EndIf
If Dir == 4 Then
UO.Press( 34, Num, Del )
EndIf
If Dir == -1 Then
UO.Press( 40, Num-1, Del )
EndIf
If Dir == -2 Then
UO.Press( 35, Num, Del )
EndIf
If Dir == -3 Then
UO.Press( 37, Num, Del )
EndIf
If Dir == -4 Then
UO.Press( 36, Num, Del )
EndIf
If Rev Then
If Dir <> -1 Then
UO.Press( 40, 1, Del )
EndIf
EndIf
EndIf
end sub
;
; ============== GETDIR ===
; Функция GetDir возвращает направление, по которому надо идти
; к координате
;
Sub GetDir( myx, myy, ox, oy )
VAR I, J
J = 0
VAR X = ox - myx
VAR Y = oy - myy
I = GetQDir( Abs(X), Abs(Y) )
If X >= 0 Then
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -1
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 3
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
EndIf
Else
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -3
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 1
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
EndIf
EndIf
RETURN J
end sub
;
; =============== GETQDIR ===
;
;
Sub GetQDir( x, y )
VAR Ep = 0.172
VAR J = 0
If X == 0 Then
J = 1
Else
If ( Y / X ) < Ep Then
J = 3
Else
If ( X / Y ) < Ep Then
J = 1
Else
J = 2
EndIf
EndIf
EndIf
RETURN J
end sub
;
; ============== GETDISTANCE ===
; Функция GetDistance возвращает расстояние до координат
; (как UO.GetDistance - до объекта)
;
; Почему так - потому что учим математику :)
;
Sub GetDistance( X, Y )
VAR A, B, C
A = abs( X - UO.GetX() )
B = abs( Y - UO.GetY() )
If A > B Then
C = A
Else
C = B
EndIf
Return C
end sub
;
; ============= PERP ===
; Функция Perp возвращает направление, перпендикулярное введённому
;
Sub Perp( Dir )
VAR D = Dir
If Dir == 1 Then
D = 3
EndIf
If Dir == 2 Then
D = 4
EndIf
If Dir == 3 Then
D = -1
EndIf
If Dir == 4 Then
D = -2
EndIf
If Dir == -1 Then
D = -3
EndIf
If Dir == -2 Then
D = -4
EndIf
If Dir == -3 Then
D = 1
EndIf
If Dir == -4 Then
D = 2
EndIf
RETURN D
end sub
;
; =============== STUN ===
; Обход препятствий
;
Sub Stun( X, Y, N )
VAR I
VAR myx
VAR myy
VAR MoveDelay = 100
myx = uo.getx()
myy = uo.gety()
For I=1 to N
MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
EndIf
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False)
Next
Wait(MoveDelay)
Stun(x,y,N)
EndIf
end sub
;
; ============= ABS ===
; Убирает знак минуса в отрицательных числах
;
Sub abs( a )
VAR b
If a < 0 Then
b = -a
Else
b = a
endif
return b
end sub
;
; ============== PERMRESEND ===
;
Sub PermResend()
Var Mn = 9
VAR MoveDelay = 100
Repeat
UO.Resend()
Wait( MoveDelay * Mn )
Until ( 1 > 2 )
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 DropLogs()
####ToHide()
if uo.Waiting() then
uo.CancelTarget()
endif
var a,Exit
dim CLogs[3]
CLogs[1]='0x0000' ; log
CLogs[2]='0x01BF' ; good log
CLogs[3]='0x0602' ; hard log
# CLogs[4]='0x0455' ; excellent log
uo.Print('Выкладываем Логи по цвету.')
wait(500)
for a=1 to 3
Exit=0
repeat
UO.FindType('0x1BDD',CLogs[a],'backpack')
if uo.GetQuantity('finditem')>0 then
uo.exec("drop 0 0 0 0 finditem")
wait(1500)
else
Exit=1
endif
until Exit==1
next
uo.Print('Логи Выложены.')
end sub
sub Bankdrop()
uo.useobject(Banker)
var a,Exit
wait(1000)
uo.lclick(47,112)
wait(5000)
uo.setreceivingcontainer(BankingChest)
dim Logs[1]
Logs[0]=0x1BD7
uo.Print('Выкладываем доски.')
wait(500)
for a=0 to 0
Exit=0
repeat
uo.FindType(Logs[a])
if uo.GetQuantity('finditem')>0 then
uo.grab('0','finditem')
wait(1500)
else
Exit=1
endif
until Exit==1
next
uo.Print('Доски Выложены.')
uo.unsetreceivingcontainer(BankingChest)
end sub
sub DropToChest()
var a,Exit
uo.setreceivingcontainer(Sunduk)
dim Doski[1]
Doski[0]=0x1BD7
uo.Print('Выкладываем доски.')
wait(500)
for a=0 to 0
Exit=0
repeat
uo.FindType(Doski[a])
if uo.GetQuantity('finditem')>0 then
uo.grab('0','finditem')
wait(1500)
else
Exit=1
endif
until Exit==1
next
uo.Print('Доски Выложены.')
uo.unsetreceivingcontainer(Sunduk)
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 RechargeBook()
ToRecharge()
DropScrolls()
end sub
sub ToRecharge()
uo.SetReceivingContainer('backpack')
Open(Sunduk2)
uo.FindType('0x1F4C','-1',Sunduk2)
uo.Grab('10','finditem')
wait(500)
Checklag()
uo.UnsetReceivingContainer()
uo.setreceivingcontainer('Runebook')
uo.FindType('0x1F4C','-1','backpack')
uo.Grab('10','finditem')
uo.UnsetReceivingContainer()
end sub
sub DropScrolls()
if uo.Waiting() then
uo.CancelTarget()
endif
uo.SetReceivingContainer(Sunduk2)
uo.FindType('0x1F4C','-1','backpack')
if uo.GetQuantity('finditem')>0 then
uo.Grab('-1','finditem')
wait(1500)
else
return 0
endif
uo.UnSetReceivingContainer(Sunduk2)
end sub
sub Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub
sub EatingFood()
repeat
Checklag()
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("Вы сыты и довольны") or uo.injournal("Вы переели")
end sub
sub carp()
if uo.Waiting() then
uo.CancelTarget()
endif
var a,Exit, time
time=0
dim Logs[1]
Logs[0]=0x1BDD
uo.Print('Делаем доски.')
wait(500)
for a=0 to 0
Exit=0
repeat
uo.FindType(Logs[a])
if uo.GetQuantity('finditem')>0 then
uo.deletejournal()
uo.waittargettype('0x1BDD')
uo.exec("recall Rubanok 0x0401")
repeat
wait(1000)
time=time+1
until uo.injournal("Вы закончили") or time==60 or uo.InJournal("Вы уничтожили")
else
Exit=1
endif
until Exit==1
next
time=0
uo.Print('Доски сделаны.')
end sub
sub Reconnect()
var ReconnectTime,rFlag
ReconnectTime='0'
rFlag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rFlag then
ReconnectTime=MakeTime()
rFlag=0
endif
wait(20000)
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.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
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')
endif
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub