Page 1 of 1

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

Posted: 2005-04-20 23:27:29
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
[А для кого теги придумали?]

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

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