Yoko

All sides of Injection
It is currently 2025-10-15 21:34:24

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2009-12-03 13:16:05 
Offline

Joined: 2008-08-26 06:03:23
Posts: 5
У меня был скрипт на ламбер .Принцип скрипта такой выходит с лодки рубит дерево на определенный вес идет относит на лодку скидывает ест и так по кругу.Я переделал скрипт под шахту .Но проблема он выходит бежит в шахту копает первый тайп и долго думает что ему дальше делать .Потом бежит на лодку заходит на лодку но не скидывает руду..
Code:
var command_use = 0
var wood_needed = 1

var near_lodka_x = 2562 #координаты возле лодки х
var near_lodka_y = 535 #координаты возле лодки у

var on_board_x = 2559 #координаты на лодке х
var on_board_y = 537 #координаты на лодке у

var id_keys = "0x40DF0D58" #в скопках айди ключей
var id_trap = "0x40E233B4" #в скопках айди трапа

var opt_weight = 100 #максимальный вес дерева который может потянуть чар

sub main()
uo.exec ("set finddistance 1")
uo.exec ("useobject backpack")
var i,b,f,tile,xx,yy,j
dim x[50]
dim y[50]
dim t[50]
dim a[50]

start:
a[1] = "1342 2559 494 0 " #в ковычках с 1 до 21 инфотайл деревьев
a[2] = "1339 2559 493 0 "
a[3] = "1339 2559 492 0 "
a[4] = "1339 2560 491 0 "
a[5] = "1339 2561 490 0 "
a[6] = "1339 2562 489 0 "
a[7] = "1339 2563 488 0 "
a[8] = "1342 2564 487 0 "
a[9] = "1339 2565 486 0 "
a[10]= "1339 2566 485 0 "
a[11] = "1339 2567 484 0 "
a[12] = "1339 2568 483 0 "
a[13] = "1339 2568 484 0 "
a[14] = "1340 2567 485 0 "
a[15] = "1339 2566 486 0 "
a[16] = "1339 2565 487 0 "
a[17] = "1339 2564 488 0 "
a[18] = "1339 2563 489 0 "
a[19] = "1342 2562 490 0 "
a[20] = "1340 2561 491 0 "
a[21] = "1342 2560 492 0 "
lodka()
for j = 1 to 50
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
GoToTile(x,y,d,t)
c = uo.timer()
uo.exec ("waittargettile "+str(tile)+" "+str(xx)+" "+str(yy)+" 0")
wait (1000)
uo.exec ("usetype 0x0E85") ### hachet
repeat
wait (1000)
until uo.injournal("There is no more ore here to mine") or uo.timer() > c + 1800 or uo.injournal("That is too far away")
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 or command() == 1 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 (2000)
wend
vibros()
if command() == 1 then
uo.print("terminate")
f = 1
endif
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] = "0x0602" # normum
derevo[2] = "0x0000" # jade
derevo[3] = "0x0231" # oak
derevo[4] = "0x05D7" # karund
derevo[5] = "0x045E" # leshram
derevo[6] = "0x0585" # turmalit
derevo[7] = "0x006f" # emerint
derevo[8] = "0x09f9" # legrand
derevo[9] = "0x00CB" # solmur
derevo[10] = "0x094A" # kleor
derevo[11] = "0x092B" # logradum
derevo[12] = "0x0931" # vialonit
derevo[13] = "0x093F" # stardust
derevo[14] = "0x0074" # pironil
derevo[15] = "0x09EF" # mystic
derevo[16] = "0x006F" # elvin
derevo[17] = "0x000B" # elkris
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 (750)
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(1000)
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=500 # Промежуток между шагами
Var MoveNumber=1 # Количество шагов при смене дислокации
Var Ep=0.18 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 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 command()
if command_use == 0 then
if uo.injournal("go to log out") then
uo.serverprint("Logouting...")
return 1
endif

if uo.injournal("wait here") then
repeat
wait (1000)
until uo.injournal("continue script")
endif

if uo.injournal("openup") then
if uo.getdistance(id_trap) > 1 then
gototile(near_lodka_x,near_lodka_y,1,"True")
endif
var trap = id_trap
var kl = id_keys
uo.exec ("waittargetobject "+trap+"; useobject "+kl)
uo.serverprint ("Come in on board my friends.")
var t = uo.timer()
repeat
wait (10000)
uo.exec ("msg .c Hey, man, don't forget to close my ship.")
until uo.injournal("closedup") or uo.timer() > t + 1200
if uo.timer() > t + 120 then
uo.exec ("msg .c Autoclosing")
endif
uo.exec ("waittargetobject "+trap+"; useobject "+kl)
uo.serverprint ("Closed.")
uo.exec ("showjournal 100")
endif
if uo.injournal("speak to you") then
wait (5000)
uo.textprint("SPEAKING TO ME:")
uo.exec ("showjournal 100")
endif
return 0
endif
endsub



################################################################################
############
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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited