Тормозит ХОДИЛКА (((

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Vija [ XAOC ]
Posts: 35
Joined: 2005-01-16 17:25:54
Contact:

Тормозит ХОДИЛКА (((

Post by Vija [ XAOC ] »

Кратко о проблеме:
1. Какда запускаю скрипт и чар идет к следующему Дереву и возникает торможения чара - тоесть скрипт плохо передвигает чара к координатам. чара просто кидает в разние сторони по пути к координатам.
2. Как исправить ето.
----вот кусок скрипта -- ходилки
3. Тайли берет с файла---- сделаного = ,infotiles
4. если передвегать чара МИШЮ - движения - получаютса ПЛАВНИЕ --- а скриптом НЕТ - как ето ИСПРАВИТЬ?

Code: Select all

   Var Hatchet1='0x0F47' 
                        Var Hatchet2='0x0F47'
                        Var MoveDelay=400
                        Var MoveNumber=1
                       
                        Var Ep=0.172
                      var i
              ..... .... .  .. . .. . ... .
                        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
                     
 if UO.Weight > 1000 then

UO.Exec('exec main')


end if



                        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*2.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 DeleteJournal(What)
                        Var T,J
                        J=False
                        If UO.InJournal(What) Then
                         J=True
                         UO.DeleteJournal()
                        EndIf
                        Wait(MoveDelay)
                        RETURN J
                        EndSub

[А для кого теги придумали?]
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Re: Тормозит ХОДИЛКА (((

Post by Sfagnum »

Vija [ XAOC ] wrote:Кратко о проблеме:
1. Какда запускаю скрипт и чар идет к следующему Дереву и возникает торможения чара - тоесть скрипт плохо передвигает чара к координатам. чара просто кидает в разние сторони по пути к координатам.
2. Как исправить ето.
----вот кусок скрипта -- ходилки
3. Тайли берет с файла---- сделаного = ,infotiles
4. если передвегать чара МИШЮ - движения - получаютса ПЛАВНИЕ --- а скриптом НЕТ - как ето ИСПРАВИТЬ?
взять другую ходилку, повторять это до получения положительного результата, при отсутствии оного - написать самому.
Post Reply