Догонялка

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
CHemax
Posts: 13
Joined: 2007-09-20 23:45:58

Догонялка

Post by CHemax »

прошу написать или скинуть скрипт на догонялку .Чтоб чара бегал за другим.
В поиске нечего не нашел, и резать скрипты не умею!заранее спасибо
-=JoKeR=-
Posts: 173
Joined: 2007-05-26 00:00:56
Location: Украина, Ode$$a:[X-TEAM Group]
Contact:

Post by -=JoKeR=- »

Что-то ты не умеешь поиском пользоваться или просто вобще не пользовался ! Догонялка
Image
Denton
Posts: 82
Joined: 2004-07-14 22:56:46
Location: Украина, Одесса
Contact:

Post by Denton »

Даавненько я скомпоновал свой вариант:

Добавлено: Вс Фев 20, 2005 12:01 am Заголовок сообщения: Скрипт: преследование злобное Ответить с цитатой Изменить/удалить это сообщение
За основу была взята ходилка из чьего-то скрипта на ламбер (не записал имени)
Потестите ее. Например, на моей локальной сфере чар пешочком догоняет и ПЕРЕГОНЯЕТ чара на остарде %)
Вот собсно и скрипт:

Code: Select all

#для работы должна гореть кнопка NumLock
Var MoveDelay=200 # интервал шагов в мс
Var MoveNumber=1 
Var Ep=0.172  # коэффициент точности ходьбы

sub Main()
Var X,Y,Target
UO.Print( 'Please, click to char for memory' )
   UO.Exec('addobject Target')
   While UO.Targeting()
      Wait(100)
   Wend
   while 1==1
X=UO.GetX('Target')
Y=UO.GetY('Target')
GoToTile(X,Y,1,False)
wend
endsub

sub GetNumb(C,I)
var J,T,K
J=0
K=1
While K>0
  J=J+1
  If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then
   If I==0 Then
    T=Val(Left(C,J))
   Else
    T=GetNumb(Right(C,Len(C)-J-1),I-1)
   EndIf
   K=0
  EndIf
wend
UO.Print(T)
return T
endsub

sub GetSerial(What,Last)
Var J=Last
Var T
If UO.InJournal(What) Then
  T=UO.InJournal(What)
  J=Str(UO.JournalSerial(T))
EndIf
RETURN J
endsub

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

sub DeleteJournal(What)
Var T,J
J=False
If UO.InJournal(What) Then
  J=True
  UO.DeleteJournal()
EndIf
RETURN J
endsub
ХХДЕНТОНХХ: Холодостойкий Хронометрирующий Дроид с Единым Наступательным Трансмутатором для Ограниченного Нападения и Хронометрированного Хищения
http://uokings.ru/news.php
TarantuL
Posts: 117
Joined: 2006-08-06 10:23:20

Post by TarantuL »

Denton wrote:Даавненько я скомпоновал свой вариант:

Добавлено: Вс Фев 20, 2005 12:01 am Заголовок сообщения: Скрипт: преследование злобное Ответить с цитатой Изменить/удалить это сообщение
За основу была взята ходилка из чьего-то скрипта на ламбер (не записал имени)
Потестите ее. Например, на моей локальной сфере чар пешочком догоняет и ПЕРЕГОНЯЕТ чара на остарде %)
Вот собсно и скрипт:

Code: Select all

...



Странно, но у меня работает "пошагово"!! :(


ФИКСЕД. Изменил интервал шагов - поставил 50..
Ресенд теперь мучает ((
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Самая лучшая догонялка - alt+click, что прекрасно делается через UoPilot, который интегрируется с Injection через глобальные переменные EasyUO :)

От неё убежать впринципе несложно, но я знаю мало таких людей - нужен коннект весьма хороший.

Если кто решиться попробовать сделать - ничего сложного. Диагональ квадрата тайла равна 44 пикселям, если я верно помню :)
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
TarantuL
Posts: 117
Joined: 2006-08-06 10:23:20

Post by TarantuL »

она же дистанцию держит, покрайней мере у нас на шарде!)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

TarantuL wrote:она же дистанцию держит, покрайней мере у нас на шарде!)

Кто? alt+click ?..

Незнаю, у меня она иногда даже обгоняет.. :)
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
TarantuL
Posts: 117
Joined: 2006-08-06 10:23:20

Post by TarantuL »

alt+click, ога. По мне - все выложенные тут получше неё бегают! Но все они - немного не то))) То там то там видно недочет)))
CHemax
Posts: 13
Joined: 2007-09-20 23:45:58

Post by CHemax »

чар не ходит(
Denton
Posts: 82
Joined: 2004-07-14 22:56:46
Location: Украина, Одесса
Contact:

Post by Denton »

Code: Select all

sub Main()
Var X,Y,Target
UO.Print( 'Please, click to char for memory' )
   UO.Exec('addobject Target')
   While UO.Targeting()
      Wait(100)
   Wend
   while 1==1
X=UO.GetX('Target')
Y=UO.GetY('Target')

##########################################
GoToTile(X,Y,1,False) ############################В принципе, сюда можно вставить любую хорошую ходилку, в которую будут постоянно передаваться координаты Х и У
##########################################

wend
endsub
ХХДЕНТОНХХ: Холодостойкий Хронометрирующий Дроид с Единым Наступательным Трансмутатором для Ограниченного Нападения и Хронометрированного Хищения
http://uokings.ru/news.php
Post Reply