var wood_needed = 1
var near_lodka_x = 1382
var near_lodka_y = 2290
var on_board_x = 1386
var on_board_y = 2292
#var id_keys = "0x6371FB5C"
var id_trap = "0x66123BDC"
var opt_weight = 300
sub main()
uo.exec ("terminate reconnector")
uo.exec ("exec reconnector")
uo.exec ("terminate poison")
uo.exec ("exec poison")
uo.deletejournal()
uo.exec ("set finddistance 1")
uo.exec ("useobject backpack")
var i,b,f,tile,xx,yy,j
dim x[25]
dim y[25]
dim t[25]
dim a[25]
start:
a[1]="3283 1376 2301 0"
a[2]="3293 1372 2313 0"
a[3]="3294 1372 2310 0"
a[4]="3296 1372 2304 0"
a[5]="3299 1372 2301 0"
a[6]="3290 1368 2304 0"
a[7]="3299 1368 2301 0"
a[8]="3277 1368 2298 0"
a[9]="3296 1372 2298 0"
a[10]="3293 1372 2295 0"
a[11]="3296 1368 2295 0"
a[12]="3283 1372 2292 0"
a[13]="3299 1376 2292 0"
a[14]="3286 1376 2289 0"
a[15]="3278 1376 2286 0"
a[16]="3296 1380 2286 0"
a[17]="3299 1376 2283 0"
a[18]="3291 1376 2280 0"
a[19]="3277 1380 2280 0"
a[20]="3299 1384 2277 0"
a[21]="3296 1380 2283 0"
a[22]="3293 1380 2310 0"
a[23]="3281 1380 2304 0"
a[24]="3299 1380 2301 0"
a[25]="3289 1380 2298 0"
lodka()
for j = 1 to 25
if a[j] then
b = a[j]
i = 1
t[j] = b[0]
while b[i] <> " "
t[j] = t[j] + b[i]
i = i + 1
wend
i = i + 1
x[j] = b[i]
while b[i] <> " "
x[j] = x[j] + b[i+1]
i = i + 1
wend
i = i + 1
y[j] = b[i]
while b[i] <> " "
y[j] = y[j] + b[i+1]
i = i + 1
wend
xx = val(x[j])
yy = val(y[j])
tile = val(t[j])
uo.print("Tile: "+t[j]+" X: "+x[j]+" Y: "+y[j])
uo.print("Tree number "+str(j))
rubka(xx,yy,tile)
endif
next
goto start:
end sub
sub rubka(xx,yy,tile)
uo.deletejournal()
var a,b,c
uo.print (str(xx)+" "+str(yy))
var D = 1
var T = "True"
var x = xx
var y = yy
UO.Disarm()
Wait(500)
GoToTile(x,y,d,t)
c = uo.timer()
uo.exec ("waittargettile "+str(tile)+" "+str(xx)+" "+str(yy)+" 0")
wait (500)
Hathet()
repeat
wait (500)
until uo.injournal("There's not enough wood here to chop") or uo.timer() > c + 1800 or uo.injournal("That is too far away") or uo.injournal("broke")
ArmsL()
wait(250)
UO.DeleteJournal()
vibros()
wait(2000)
a = uo.getx()
b = uo.gety()
lodka()
end sub
sub lodka()
var x = near_lodka_x
var y = near_lodka_y
var prec = 0
if uo.weight > opt_weight then
var d,t
var f = 0
d = 1
t = "True"
gototile(x,y,d,t)
while uo.getdistance(id_trap) > 1
uo.exec ("useobject "+id_trap+";useobject "+id_trap) ### ID trapa
wait (500)
wend
vibros()
multimer_item_checker()
hungry()
if f == 1 then
uo.exec ("closeuo")
uo.exec("terminate all")
endif
while uo.getdistance(id_trap) < 2
uo.exec ("useobject "+id_trap)
gotoxy(uo.getx(id_trap),uo.gety(id_trap),0)
wait (3000)
wend
endif
end sub
sub vibros()
uo.exec ("set finddistance 1")
var i,l
var type = "0x1BDD"
var container, color
dim derevo[17]
derevo[1] = "0x0362" # jade
derevo[2] = "0x010D" # oak
derevo[3] = "0x0094" # karund
derevo[4] = "0x01B0" # leshram
derevo[5] = "0x01A2" # turmalit
derevo[6] = "0x0026" # emerint
derevo[7] = "0x00CB" # legrand
derevo[8] = "0x094A" # solmur
derevo[9] = "0x092B" # kleor
derevo[10] = "0x0931" # logradum
derevo[11] = "0x093F" # vialonit
derevo[12] = "0x0074" # stardust
derevo[13] = "0x09EF" # pironil
derevo[14] = "0x006F" # mystic
derevo[15] = "0x0119" # elvin
derevo[16] = "0x000B" # elkris
derevo[17] = "0x0000" # normum
var nugnoe = wood_needed
# vibros ne nugnogo dereva
if nugnoe > 1 then
for i = 1 to nugnoe - 1
color = derevo[i]
l = 0
container = "ground"
drop(type,color,l,container)
next
endif
# skladivanie nugnogo dereva
if uo.getx() == on_board_x and uo.gety() == on_board_y then
uo.print ("Dropping")
for i = nugnoe to 17
if uo.count(type) <> 0 then
color = derevo[i]
l = 1
container = "ground"
drop(type,color,l,container)
wait (500)
endif
next
endif
if uo.count("0x097B") <= 1 then
uo.exec ("findtype 0x097B -1 ground")
uo.exec ("moveitem finditem 10 backpack")
endif
end sub
sub drop(type,color,l,container)
var serial=0
if l == 1 then
UO.FindType(type,color,"backpack")
if uo.findcount() <> 0 then
serial=UO.GetSerial("finditem")
UO.Ignore(serial)
if container=="ground" then
UO.FindType(type,color,"ground")
if UO.FindCount()>0 then
if uo.getquantity("finditem") < 59000 then
UO.MoveItem(serial,"0","finditem","0","0","0")
else
UO.DropHere(serial)
endif
else
uo.ignore ("finditem")
UO.DropHere(serial)
endif
else
UO.MoveItem(serial,"0",container)
endif
wait(500)
endif
else
uo.findtype(type,color,"backpack")
if uo.findcount() <> 0 then
uo.exec ("drop 0 0 0 0 finditem")
wait (500)
endif
wait (500)
endif
UO.IgnoreReset()
end sub
var need_hungry_level = 1
sub hungry()
var i,htest,htime,htest2
dim a[11]
a[0] = "You are absolutely stuffed"
a[1] = "You are stuffed"
a[2] = "You aren't hungry at all"
a[3] = "You are a little hungry"
a[4] = "You are somewhat hungry"
a[5] = "You are REALLY hungry"
a[6] = "Your stomash hurts"
a[7] = "Your stomash hurts and you feel dizzy"
a[8] = "You are starving"
a[9] = "You are almost dying of hunger"
a[10] = "You are DYING of hunger"
htest = 0
repeat
uo.deletejournal()
uo.serverprint(".hungry")
wait (1000)
i = 0
htest2 = 0
if uo.count("0x097B") > 0 then
repeat
if uo.injournal(a[i]) then
if (i - need_hungry_level) > 0 then
uo.exec("usetype 0x097B")
repeat
wait (50)
until uo.injournal("Tasty!") or uo.injournal("Good!") or uo.injournal("Yum!") or uo.injournal("I am already") or uo.injournal("123")
htest2 = 1
else
htest = 1
htest2 = 1
endif
endif
i = i + 1
until i == 11 or htest2 == 1
else
htest = 1
endif
until htest == 1
endsub
#При работе должна быть "отжата" кнопка NumLock
Var MoveDelay=200 # Промежуток между шагами
Var MoveNumber=1 # Количество шагов при смене дислокации 1
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Sub Perp(Dir)
Var D
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
EndSub
Sub MoveOnce(Dir,Del,Rev)
Var Num
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
EndSub
Sub GetQDir(x,y)
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
EndSub
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
endsub
sub abs(a)
Var b
If a<0 Then
b=-a
Else
b=a
endif
return b
endsub
Sub PermResend()
Var Mn=9
Repeat
UO.Resend()
Wait(MoveDelay*Mn)
Until (1>2)
EndSub
sub max(A,B)
Var C
If A>B Then
C=A
Else
C=B
EndIf
Return C
EndSub
sub GetDistance(X,Y)
return max(abs(X-uo.getx()),abs(Y-uo.gety()))
endsub
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
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()
UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T))
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')
endsub
Sub Stun(X,Y,N)
Var I
Var myx
Var myy
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
EndSub
sub NearTile(Obj,Des)
var ox, oy, myx, myy, MD, J
var Lx1 ,Ly1
var Lx2 ,Ly2
var Sx ,Sy
var T
UO.Click(Obj)
MD=MoveDelay*1.5
ox=uo.GetX(Obj)
oy=uo.GetY(Obj)
J=1
myx = uo.getx()
myy = uo.gety()
Sx=0
Sy=0
Lx1=myx/2
Ly1=myy/2
Lx2=Lx1/2
Ly2=Ly1/2
T=UO.Timer()
If not (UO.GetDistance(Obj)==Des) Then
UO.Exec('exec PermResend')
EndIf
While not (UO.GetDistance(Obj)==Des)
ox=uo.GetX(Obj)
oy=uo.GetY(Obj)
If ((UO.Timer()-T)*15>MoveDelay) Then
T=UO.Timer()
UO.Print('Go to '+Str(Des)+' to '+UO.GetName(Obj))
UO.Print(Str(UO.GetDistance(Obj)))
UO.Print(Str(uo.GetX())+' '+Str(uo.GetY())+' '+Str(uo.GetX(Obj))+' '+Str(uo.GetY(Obj))+' '+Str(GetDir(uo.GetX(),uo.GetY(),uo.GetX(Obj),uo.GetY(Obj)))+' '+Str(T))
Lx2=Lx1
Ly2=Ly1
Lx1=myx
Ly1=myy
myx=uo.getx()
myy=uo.gety()
endIf
MD=MoveDelay*1.5
If (UO.GetDistance(Obj)>0) Then
MD=MD/UO.GetDistance(Obj)
EndIf
wait(MD)
If UO.GetDistance(Obj)>Des Then
MoveOnce(GetDir(uo.GetX(),uo.GetY(),uo.GetX(Obj),uo.GetY(Obj)),MD,False)
Else
If UO.GetDistance(Obj)<Des Then
If UO.GetDistance(Obj)<>0 Then
MoveOnce(GetDir(uo.GetX(obj),uo.GetY(obj),uo.GetX(),uo.GetY()),MD,False)
Else
MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
EndIf
EndIf
EndIf
If UO.GetDistance(Obj)<>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(uo.GetX(Obj),uo.GetY(Obj),J)
EndIf
EndIf
Wend
UO.Exec('terminate PermResend')
endsub
var max_wait = 3 #(v secundax)
sub gotoxy(x,y,prec)
var ld=0,ldc=0
var dx,dy
var mx,my
var ox,oy,mk,k
start:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if not ldc then
uo.print("Lag")
end if
if dx<3 then
mk=70
else
mk=15
end if
ox=mx
oy=my
for k=1 to mk
mx=UO.GetX()
my=UO.GetY()
if mx<>ox or my<>oy then
goto sdidapl
end if
wait(10)
next
sdidapl:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if ld==dx then
ldc=ldc+1
if ldc>max_wait then
uo.print("Can not reach location!")
return
end if
else
ld=dx
end if
if mx==x then
if my==y then
return
endif
if my>y then
#UO.Print("UR")
UO.Press(33)
goto start
endif
#UO.Print("DL")
UO.Press(35)
goto start
end if
if mx<x then
if my>y then
#UO.Print("R")
UO.Press(39)
goto start
endif
if my==y then
#UO.Print("DR")
UO.Press(34)
goto start
endif
#UO.Print("D")
UO.Press(40)
goto start
end if
if my<y then
#UO.Print("L")
UO.Press(37)
goto start
endif
if my==y then
#UO.Print("LU")
UO.Press(36)
goto start
endif
#UO.Print("U")
UO.Press(38)
goto start
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 Reconnector()
var ReconnectTime, RFlag, DisconnectTime
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(30000) # WorldSave Protection
if (UO.ObjAtLayer('Bpack') == '') then
DisconnectTime = Maketime()
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
endif
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.Exec('terminate main')
UO.Exec('exec main')
UO.TextOpen()
UO.TextPrint('Disconnected '+DisconnectTime)
UO.TextPrint('Reconnected '+Maketime())
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub
sub test()
uo.textprint(str(uo.asmmapgettile(2482,3979,0)))
endsub
sub multimer_item_checker()
var get_tool, tc
var tool='0x0F43'
var max_tool=3
if not UO.dead() then
UO.Print('Проверка: топоры')
if UO.Count(tool)<max_tool and not UO.dead() Then
get_tool=(max_tool-UO.Count(tool))
for tc=1 to get_tool
UO.FindType(tool,'-1','ground')
if UO.FindCount() then
UO.Print('На полу есть: '+str(UO.FindCount())+' ед. топоров')
UO.Ignore('finditem')
UO.MoveItem("finditem")
wait(500)
UO.Print('Теперь в сумке: '+str(UO.Count(tool))+' ед. топоров')
Else
UO.Print('Не могу найти топор!')
UO.Print('Макрос будет остановлен!')
UO.Exec('terminate all')
EndIf
next
EndIf
else
UO.Exec('terminate all')
EndIf
test_meal()
endsub
Sub Hathet()
var hathettype="0x0f43"
var hathetid
UO.Disarm()
UO.UseObject('backpack')
wait(1500)
UO.FindType(hathettype, '-1', 'backpack')
if UO.FindCount("finditem")>0 Then
hathetid=UO.GetSerial("finditem")
UO.Equip('Rhand', hathetid)
wait(500)
UO.UseObject(hathetid)
else
UO.Exec ("terminate all")
end if
end sub
sub poison()
while not uo.dead()
if uo.poisoned() then
wait(500)
uo.serverprint("You're Fucking Nigga")
uo.attack("self")
wait(2000)
uo.serverprint(".c I have killed myself")
end if
wait(2000)
wend
end sub
sub test_meal()
UO.Print("Проверка еды")
if UO.Count("0x097B")<10 then
UO.FindType("0x097B",'-1','ground')
if UO.FindCount('finditem')>0 then
UO.MoveItem("finditem", '20')
wait(500)
else
UO.Exec("teminate all")
end if
end if
sub ArmsL()
var ArType="0x0f43"
var Arms
UO.Disarm()
UO.UseObject('backpack')
wait(1500)
UO.FindType(ArType, '-1', 'backpack')
if UO.FindCount("finditem")>0 Then
Arms=UO.GetSerial("finditem")
uo.waittargetobject(Arms)
UO.UseSkill("Arms Lore")
wait(1000)
end if
end subИтак я представляю Вам Ламберджекинг!Описание работы:
Рубите деревья, набрав определенный вес несете его на свою лодку.
Переодически юзает Армс Лоре (одно другому не мешает :wink: )
Возможности:
Сам поднимает топоры и еду с лодки.
Можно выбрать какие деревья носить на лодку. указав var wood_needed = х ... цыфру дерева в масиве с которого начинать сбор.
все остальные деревья (что ниже, требуемого вами дерева) будут после вырубки сбрасыватся на пол.
Скрипт имеет Реконектор.








