Page 1 of 2

МОИ вопросы (Craft by slonopotam )

Posted: 2006-11-11 11:54:15
by slonopotam
По настоянию и дабы не зафлуживать топики. Буду писать свои многочисленные вопросы ,по мере их появления,
именно сдеся :P

Начну с насущного:
Мне сложно разобратся, а тем более написать самому ходилку. Поэтому подобные скрипты всегда сопутствуют новым вопросам.

Может поможет кто написать скрипт:

Code: Select all

Ищет моба, подходит и убивает. И чтоб на этом скрипт заканчивался. 
Просто нашел по типу, подошел, убил, если моб убегает, преследовать и добивать подходя в плотную. Да и финдистанс чтоб указывалось при поиске.

Posted: 2006-11-11 12:55:14
by slonopotam
Вот надрал из разных скриптов. Не работает.

Code: Select all

VAR ups = 1
VAR Vrag = '0x0190' 
VAR Totem = '0x40FBA3D7' 

sub Start()
repeat
hustle()
   wait(1000)
      until ups>2
end sub


Sub hustle() 

UO.Print("//--------------------------\\") 
UO.Print("|  ----  ЛОЖКИ  НЕТ   ----  ||") 
UO.Print("\\--------------------------//")


GoToTile( 5561, 1881, 1, False ) ; И ВОТ ГДЕТО ЗДЕСЬ ЦИКЛИТСЯ
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1881, 1, False ) 
Endif
go 2
GoToTile( 5561, 1876, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1876, 1, False ) 
Endif

GoToTile( 5555, 1876, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1876, 1, False ) 
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5555, 1876, 1, False ) 
Endif

GoToTile( 5561, 1876, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False )
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1876, 1, False ) 
Endif

GoToTile( 5561, 1867, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1867, 1, False ) 
Endif

GoToTile( 5555, 1867, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1867, 1, False ) 
GoToTile( 5561, 1881, 1, False )
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5555, 1867, 1, False ) 
Endif

GoToTile( 5561, 1867, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1867, 1, False ) 
Endif

GoToTile( 5561, 1859, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False )
Ress()
Else
Look()
GoToTile( 5561, 1859, 1, False ) 
Endif

GoToTile( 5556, 1859, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1859, 1, False ) 
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5556, 1859, 1, False ) 
Endif

GoToTile( 5561, 1859, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False )
Ress()
Else
Look()
GoToTile( 5561, 1859, 1, False ) 
Endif

GoToTile( 5561, 1851, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1851, 1, False ) 
Endif

GoToTile( 5555, 1851, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1851, 1, False ) 
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5555, 1851, 1, False )
Endif

GoToTile( 5561, 1851, 1, False )
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) 
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1851, 1, False ) 
Endif

GoToTile( 5561, 1881, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False ) 
Ress()
Else
Look()
GoToTile( 5561, 1881, 1, False ) 
Endif

GoToTile( 5538, 1881, 1, False ) 
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False )
Ress()
Else
Look()
GoToTile( 5538, 1881, 1, False )
Endif

uo.warmode(0) 
UO.Print("//--------------------------\\") 
UO.Print("|  -----   ФИГАСЕ !!!  ---  ||") 
UO.Print("|  ----  С  ПЕРЕПУГУ  ----  ||")
UO.Print("|  ---  ВСЕХ  ПЕРЕБИЛ  ---  ||")
UO.Print("\\--------------------------//")

wait(30000)

end sub



Sub Ress()
repeat
uo.useobject(Totem)
wait(5000)
until not uo.dead()
wait(30000)
uo.exec('terminate hustle')
Start()
end sub



sub Look() 
   VAR Vrag = '0x0190'
   Repeat 
      UO.FindType( '0x0190', '-1', '1' ) 
      If UO.FindCount() > 0 Then 
War() 
      Else 
         wait( 500 ) 
      Endif 
   Until UO.FindCount() == 0 
   UO.IgnoreReset() 
endsub


Sub War()
if uo.injournal('body') then 
uo.deletejournal() 
Attack()
endif
end sub







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 
   VAR MoveDelay = 100 
   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() 
         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 
; 
; ============ MOVEONCE === 
; Процедура MoveOnce - хождение в определённую сторону 
; Направления: 
; Система направлений по клавишам Нумпада 
; 8 = 1 | 2 = -1 
; 9 = 2 | 1 = -2 
; 6 = 3 | 4 = -3 
; 3 = 4 | 7 = -4 
; 
; Такая система позволяет с лёгкостью получать направление, обратное 
; данному... 
; 
Sub MoveOnce( Dir, Del, Rev ) 
   VAR Num 
   Var MoveNumber = 1 
   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 
; 
; ============== GETDIR === 
; Функция GetDir возвращает направление, по которому надо идти 
; к координате 
; 
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 
; 
; =============== GETQDIR === 
; 
; 
Sub GetQDir( x, y ) 
   VAR Ep = 0.172 
   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 
; 
; ============== GETDISTANCE === 
; Функция GetDistance возвращает расстояние до координат 
; (как UO.GetDistance - до объекта) 
; 
; Почему так - потому что учим математику :) 
; 
Sub GetDistance( X, Y ) 
   VAR A, B, C 
   A = abs( X - UO.GetX() ) 
   B = abs( Y - UO.GetY() ) 
   If A > B Then 
      C = A 
   Else 
      C = B 
   EndIf 
   Return C 
endsub 
; 
; ============= PERP === 
; Функция Perp возвращает направление, перпендикулярное введённому 
; 
Sub Perp( Dir ) 
   VAR 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 
; 
; =============== STUN === 
; Обход препятствий 
; 
Sub Stun( X, Y, N ) 
   VAR I 
   VAR myx 
   VAR myy 
   VAR MoveDelay = 100 
   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 
; 
; ============= ABS === 
; Убирает знак минуса в отрицательных числах 
; 
Sub abs( a ) 
   VAR b 
   If a < 0 Then 
      b = -a 
   Else 
      b = a 
   endif 
   return b 
endsub 
; 
; ============== PERMRESEND === 
; 
Sub PermResend() 
   Var Mn = 9 
   VAR MoveDelay = 100 
   Repeat 
      UO.Resend() 
      Wait( MoveDelay * Mn ) 
   Until ( 1 > 2 ) 
endsub





sub Attack() 
uo.set('finddistance','6')  
VAR LastTimer, Attack  
repeat 
UO.DeleteJournal() 
UO.FindType(Vrag,-1,'ground') 
if UO.FindCount("finditem")>0 then 
Attack=UO.GetSerial('finditem') 
UO.Exec('warmode 1') 
UO.Attack(Attack) 
WalkN(0,0,Attack) 
LastTimer=UO.Timer() 
repeat 
wait(2000) 
until uo.dead(Attack) or UO.InJournal('Body') OR LastTimer+150<UO.Timer() 
endif 
wait(500) 
next 
wait(200) 
until uo.dead() 
end sub 

sub Ranger() 
var skin = 1; ea?aou neeieia 
var loot = 0; eooeou oaei 
var loop = 1; aaoiiao 
var dagger = 0x0F51 
var body 

UO.DeleteJournal() 
repeat 
repeat 
wait(100) 
until UO.InJournal("Body of") 
body = UO.JournalSerial(UO.InJournal("Body of")-1) 
UO.DeleteJournal() 
if skin then 
if UO.GetDistance(body) <= 2 then 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
else 
endif 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
endif 

if loot then 
if UO.GetDistance(body) <= 2 then 
F_Loot() 
else 
endif 
endif 

if skin then 
UO.Arm('Weapon')# Iaaaiuoa i?o?ea aee?iaai aiye aaaaeoa neiaa ,setarm Weapon 
endif 
UO.WarMode(1) 
until not loop 
endsub 


sub F_Loot() 
DIM R[14] 
var c 
R[1]=0x0df8
R[2]=0x1078
R[3]=0x0EED
R[4]=0x09AA
R[5]=0x0F85
R[6]=0x0F7B
R[7]=0x0F8C
R[8]=0x0F7A
R[9]=0x0F84
R[10]=0x0F88
R[11]=0x0F8D
R[12]=0x0F86
R[13]=0x1BD1
R[14]=0x0F8F

for c=1 to 14 
repeat 
uo.findtype(R[c],"-1","lastcorpse") 
if UO.FindCount()>0 and Uo.GetDistance("lastcorpse")<=4 then 
UO.Grab("0","finditem") 
wait(1200) 
end if 
until UO.FindCount()<1 
wait(10) 
next 
endsub 

sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 

sub WalkN(x,y,Target) 
VAR i,StepSucess 
VAR dx,dy,Exit=0 

While Exit<>1 
If Target<>"" Then 
dx=UO.GetX(Target)-UO.GetX() 
dy=UO.GetY(Target)-UO.GetY() 
If UO.GetDistance(Target)<2 Then 
Exit=1 
Endif 
Else 
dx=x-UO.GetX() 
dy=y-UO.GetY() 
If dx==0 AND dy==0 Then 
Exit=1 
Endif 

Endif 

If dx<>0 AND dy<>0 Then 
If dx>0 AND dy>0 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
Endif 

If dx>0 AND dy<0 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 

If dx<0 AND dy>0 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 

If dx<0 AND dy<0 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
Endif 

Endif 

If dx<>0 AND dy==0 Then 
If dx>0 Then 
StepSucess=Go(2,34,300);E - PgDown 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 

If dx<0 Then 
StepSucess=Go(6,36,300);W - Home 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 
Endif 


If dx==0 AND dy<>0 Then 
If dy>0 Then 
StepSucess=Go(4,35,300);S - End 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 

If dy<0 Then 
StepSucess=Go(0,33,300);N - PgUp 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 
Endif 
Wend 
end sub 


sub Go(dir,key,walkwait) 
VAR x,y 

x=UO.GetX() 
y=UO.GetY() 

while UO.GetDir()<>dir 
UO.Press(key) 
wait(walkwait) 
If UO.GetDir()<>dir Then 
Endif 
wend 

UO.Press(key) 
wait(walkwait) 

If x==UO.GetX() AND y==UO.GetY() Then 
Endif 

If x==UO.GetX() AND y==UO.GetY() Then 
return -1 
Else 
return 1 
Endif 
end sub

Posted: 2006-11-11 13:08:21
by Scripts Writer
Неужели ты не напишешь:

поиск моба?

Подойти к мобу смотри:

Code: Select all

Sub WalkN(x,y,Target)
Здесь за x -надо взять uo.GetX('finditem') ,y - uo.GetY('finditem'), Target - finditem. собственно.
finditem- найденый по типу моб. Понял? Другими словами в скрипте это будет смотреться так:

Code: Select all

WalkN(uo.GetX('finditem'),uo.GetY('finditem'),'finditem') 
.
Тут в аргументах функции сам понял-должны быть координаты и сериал объекта к какому идем. Мой тебе совет юзать ходилку Savage - SuperWalk. Имхо наиболее надежная.

Неужели ты не напишешь атаку моба ?
А ждать пока моб не умрёт?

Вот и весь твой скрипт. Теперь воплащай по командам.

Posted: 2006-11-11 13:58:49
by slonopotam
Это ппц !!!

Этот ........ гдето в цыкл уходит, где, невижу. :evil: :evil:


Смысл скрипта. Шард Антарес. Орк таун. Перс ходит по комнатам и бьет визардов. Если умирает, идет к тотему и ресается, потом начинает все сначало.

Code: Select all

VAR ups = 1
VAR Vrag = '0x0190' 
VAR Totem = '0x40FBA3D7' 

sub Start()
repeat
hustle()
   wait(1000)
      until ups>2
end sub


Sub hustle() 

UO.Print("//--------------------------\\") 
UO.Print("|  ----  ЛОЖКИ  НЕТ   ----  ||") 
UO.Print("\\--------------------------//")


GoToTile( 5561, 1881, 1, False ) ; go 2
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1881, 1, False ) ; go 2
Endif

GoToTile( 5561, 1876, 1, False ) ; go 3
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1876, 1, False ) ; go 3
Endif

GoToTile( 5555, 1876, 1, False ) ; go 10
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1876, 1, False ) ; go 3
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5555, 1876, 1, False ) ; go 10
Endif

GoToTile( 5561, 1876, 1, False ) ; go 3
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1876, 1, False ) ; go 3
Endif

GoToTile( 5561, 1867, 1, False ) ; go 4
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1867, 1, False ) ; go 4
Endif

GoToTile( 5555, 1867, 1, False ) ; go 9
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1867, 1, False ) ; go 4
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5555, 1867, 1, False ) ; go 9
Endif

GoToTile( 5561, 1867, 1, False ) ; go 4
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1867, 1, False ) ; go 4
Endif

GoToTile( 5561, 1859, 1, False ) ; go 5
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1859, 1, False ) ; go 5
Endif

GoToTile( 5556, 1859, 1, False ) ; go 8
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1859, 1, False ) ; go 5
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5556, 1859, 1, False ) ; go 8
Endif

GoToTile( 5561, 1859, 1, False ) ; go 5
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1859, 1, False ) ; go 5
Endif

GoToTile( 5561, 1851, 1, False ) ; go 6
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1851, 1, False ) ; go 6
Endif

GoToTile( 5555, 1851, 1, False ) ; go 7
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1851, 1, False ) ; go 6
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5555, 1851, 1, False ) ; go 7
Endif

GoToTile( 5561, 1851, 1, False ) ; go 6
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5561, 1881, 1, False ) ; go 2
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1851, 1, False ) ; go 6
Endif

GoToTile( 5561, 1881, 1, False ) ; go 2
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5561, 1881, 1, False ) ; go 2
Endif

GoToTile( 5538, 1881, 1, False ) ; go 1
If uo.dead() Then
uo.warmode(0) 
UO.Print("GAME OVER")
GoToTile( 5538, 1881, 1, False ) ; go 1
Ress()
Else
Look()
GoToTile( 5538, 1881, 1, False ) ; go 1
Endif

uo.warmode(0) 
UO.Print("//--------------------------\\") 
UO.Print("|  -----   ФИГАСЕ !!!  ---  ||") 
UO.Print("|  ----  С  ПЕРЕПУГУ  ----  ||")
UO.Print("|  ---  ВСЕХ  ПЕРЕБИЛ  ---  ||")
UO.Print("\\--------------------------//")

wait(30000)

end sub



Sub Ress()
repeat
uo.useobject(Totem)
wait(5000)
until not uo.dead()
wait(30000)
uo.exec('terminate hustle')
Start()
end sub

Sub War()
If UO.Count(Vrag) == 0 Then
Attack()
Else
wait(100)
Endif
end sub











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 
   VAR MoveDelay = 100 
   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() 
         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 
; 
; ============ MOVEONCE === 
; Процедура MoveOnce - хождение в определённую сторону 
; Направления: 
; Система направлений по клавишам Нумпада 
; 8 = 1 | 2 = -1 
; 9 = 2 | 1 = -2 
; 6 = 3 | 4 = -3 
; 3 = 4 | 7 = -4 
; 
; Такая система позволяет с лёгкостью получать направление, обратное 
; данному... 
; 
Sub MoveOnce( Dir, Del, Rev ) 
   VAR Num 
   Var MoveNumber = 1 
   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 
; 
; ============== GETDIR === 
; Функция GetDir возвращает направление, по которому надо идти 
; к координате 
; 
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 
; 
; =============== GETQDIR === 
; 
; 
Sub GetQDir( x, y ) 
   VAR Ep = 0.172 
   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 
; 
; ============== GETDISTANCE === 
; Функция GetDistance возвращает расстояние до координат 
; (как UO.GetDistance - до объекта) 
; 
; Почему так - потому что учим математику :) 
; 
Sub GetDistance( X, Y ) 
   VAR A, B, C 
   A = abs( X - UO.GetX() ) 
   B = abs( Y - UO.GetY() ) 
   If A > B Then 
      C = A 
   Else 
      C = B 
   EndIf 
   Return C 
endsub 
; 
; ============= PERP === 
; Функция Perp возвращает направление, перпендикулярное введённому 
; 
Sub Perp( Dir ) 
   VAR 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 
; 
; =============== STUN === 
; Обход препятствий 
; 
Sub Stun( X, Y, N ) 
   VAR I 
   VAR myx 
   VAR myy 
   VAR MoveDelay = 100 
   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 
; 
; ============= ABS === 
; Убирает знак минуса в отрицательных числах 
; 
Sub abs( a ) 
   VAR b 
   If a < 0 Then 
      b = -a 
   Else 
      b = a 
   endif 
   return b 
endsub 
; 
; ============== PERMRESEND === 
; 
Sub PermResend() 
   Var Mn = 9 
   VAR MoveDelay = 100 
   Repeat 
      UO.Resend() 
      Wait( MoveDelay * Mn ) 
   Until ( 1 > 2 ) 
endsub


sub Look() 
   VAR Vrag = '0x0190'
   Repeat 
      UO.FindType( '0x0190', '-1', '1' ) 
      If UO.FindCount() > 0 Then 
War() 
      Else 
         wait( 500 ) 
      Endif 
   Until UO.FindCount() == 0 
   UO.IgnoreReset() 
endsub


Sub War()
if uo.injournal('body') then 
uo.deletejournal() 
Attack()
endif
end sub


sub Attack() 
uo.set('finddistance','6')  
VAR LastTimer, Attack  
repeat 
UO.DeleteJournal() 
UO.FindType(Vrag,-1,'ground') 
if UO.FindCount("finditem")>0 then 
Attack=UO.GetSerial('finditem') 
UO.Exec('warmode 1') 
UO.Attack(Attack) 
WalkN(0,0,Attack) 
LastTimer=UO.Timer() 
repeat 
wait(2000) 
until uo.dead(Attack) or UO.InJournal('Body') OR LastTimer+150<UO.Timer() 
endif 
wait(500) 
next 
wait(200) 
until uo.dead() 
end sub 

sub Ranger() 
var skin = 1; ea?aou neeieia 
var loot = 0; eooeou oaei 
var loop = 1; aaoiiao 
var dagger = 0x0F51 
var body 

UO.DeleteJournal() 
repeat 
repeat 
wait(100) 
until UO.InJournal("Body of") 
body = UO.JournalSerial(UO.InJournal("Body of")-1) 
UO.DeleteJournal() 
if skin then 
if UO.GetDistance(body) <= 2 then 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
else 
endif 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
endif 

if loot then 
if UO.GetDistance(body) <= 2 then 
F_Loot() 
else 
endif 
endif 

if skin then 
UO.Arm('Weapon')# Iaaaiuoa i?o?ea aee?iaai aiye aaaaeoa neiaa ,setarm Weapon 
endif 
UO.WarMode(1) 
until not loop 
endsub 


sub F_Loot() 
DIM R[14] 
var c 
R[1]=0x0df8
R[2]=0x1078
R[3]=0x0EED
R[4]=0x09AA
R[5]=0x0F85
R[6]=0x0F7B
R[7]=0x0F8C
R[8]=0x0F7A
R[9]=0x0F84
R[10]=0x0F88
R[11]=0x0F8D
R[12]=0x0F86
R[13]=0x1BD1
R[14]=0x0F8F

for c=1 to 14 
repeat 
uo.findtype(R[c],"-1","lastcorpse") 
if UO.FindCount()>0 and Uo.GetDistance("lastcorpse")<=4 then 
UO.Grab("0","finditem") 
wait(1200) 
end if 
until UO.FindCount()<1 
wait(10) 
next 
endsub 

sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 

sub WalkN(x,y,Target) 
VAR i,StepSucess 
VAR dx,dy,Exit=0 

While Exit<>1 
If Target<>"" Then 
dx=UO.GetX(Target)-UO.GetX() 
dy=UO.GetY(Target)-UO.GetY() 
If UO.GetDistance(Target)<2 Then 
Exit=1 
Endif 
Else 
dx=x-UO.GetX() 
dy=y-UO.GetY() 
If dx==0 AND dy==0 Then 
Exit=1 
Endif 

Endif 

If dx<>0 AND dy<>0 Then 
If dx>0 AND dy>0 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
Endif 

If dx>0 AND dy<0 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 

If dx<0 AND dy>0 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 

If dx<0 AND dy<0 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
Endif 

Endif 

If dx<>0 AND dy==0 Then 
If dx>0 Then 
StepSucess=Go(2,34,300);E - PgDown 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 

If dx<0 Then 
StepSucess=Go(6,36,300);W - Home 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 
Endif 


If dx==0 AND dy<>0 Then 
If dy>0 Then 
StepSucess=Go(4,35,300);S - End 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 

If dy<0 Then 
StepSucess=Go(0,33,300);N - PgUp 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 
Endif 
Wend 
end sub 


sub Go(dir,key,walkwait) 
VAR x,y 

x=UO.GetX() 
y=UO.GetY() 

while UO.GetDir()<>dir 
UO.Press(key) 
wait(walkwait) 
If UO.GetDir()<>dir Then 
Endif 
wend 

UO.Press(key) 
wait(walkwait) 

If x==UO.GetX() AND y==UO.GetY() Then 
Endif 

If x==UO.GetX() AND y==UO.GetY() Then 
return -1 
Else 
return 1 
Endif 
end sub

Posted: 2006-11-11 14:12:04
by Scripts Writer
Такие шедевры пишут люди типо тебя, которые не рассуждают алгоритмически.Многие так начинали.
Посмотри критерии написания нормальных скриптов. Пост ёко есть-какими должны быть скрипты.

Posted: 2006-11-11 14:17:47
by GimFlex
вот писал одному человечку тока он не ресается но это легко сделать скрипт следущий- перс стоит и ждет появление нпсей как появились киляет и лутает все из них поправь сам если захочишь

Code: Select all

;Описание:
;
;чар стоит в магазе где респятся вендоры муж. или жен. пола
;если вендор обнаружен то подходим киляем и лутаем
;лутаются все вещи, кот. были в трупе (для простоты, но можно выборочно исп. скрипт на лут)
;как все слутает прячется в хайд и ждет следущего вендора
;
;Настройка:
;
;ничего не надо приходим в магаз и запускаем
; в инже желательно чтобы галки стояли "TWI" и "Target XYZ fix"
;
;from GimFlex aka Question 


sub boneapetite() 
var vendor='';тут ничего не меняй
var corpse='';тут тоже -)
var t1='0x0190'#man
var t2='0x0191'#woman
uo.set('finddistance','6'); размер поиска в зависимости от магаза от 1 до 14 ставь
while not uo.dead()
uo.findtype(t1,'-1','ground')
if uo.findcount()>0 then 
 vendor=uo.getserial('finditem') 
 while uo.getdistance(vendor)>2 
  GotoXY(uo.getx(vendor),uo.gety(vendor),2) 
 wend  
 uo.warmode(1) 
 uo.deletejournal() 
 uo.attack(vendor) 
       repeat 
         wait(100)          
         if uo.getdistance(vendor)>2 then 
            GotoXY(uo.getx(vendor),uo.gety(vendor),2) 
         end if 
       until uo.injournal("Body of")
       CheckLag()
      uo.warmode(0) 
      wait(100)
      uo.deletejournal()
  corpse=uo.getserial('lastcorpse') 
  uo.useobject(corpse)
  wait(700)
  CheckLag()
  uo.findtype('-1','-1',corpse)
  while uo.findcount()>0
   uo.moveitem('finditem','all','backpack')
   wait(700)
   CheckLag()
   uo.findtype('-1','-1',corpse)
  wend 
endif
CheckLag()
uo.findtype(t2,'-1','ground')
if uo.findcount()>0 then 
 vendor=uo.getserial('finditem') 
 while uo.getdistance(vendor)>2 
  GotoXY(uo.getx(vendor),uo.gety(vendor),2) 
 wend  
 uo.warmode(1) 
 uo.deletejournal() 
 uo.attack(vendor) 
       repeat 
         wait(100)          
         if uo.getdistance(vendor)>2 then 
            GotoXY(uo.getx(vendor),uo.gety(vendor),2) 
         end if 
       until uo.injournal("Body of")
      uo.warmode(0) 
      wait(100)
      uo.deletejournal()
  corpse=uo.getserial('lastcorpse') 
  uo.useobject(corpse)
  wait(700)
  CheckLag()
  uo.findtype('-1','-1',corpse)
  while uo.findcount()>0
   uo.moveitem('finditem','all','backpack')
   wait(700)
   CheckLag()
   uo.findtype('-1','-1',corpse)
  wend 
endif 
CheckLag()
ToHide()
wait(5000)
CheckLag()
wend
end sub 


Sub GotoXY(x,y,k) 
   var kop 
   VAR i,j,m
   VAR dir,ldir,rdir,key,olddir 
   VAR dx,dy,Exit=0 
   VAR CacheLimit=9,CacheIndex="Text" 
   DIM CacheX[10], CacheY[10] 
    
   CacheX[0]="Test" 
   kop=0 
   While Exit<>1    
      
      for j=-1 to 1
       for m=-1 to 1
         dx=x-UO.GetX() 
         dy=y-UO.GetY() 
         If dx==j AND dy==m Then 
            Exit=1 
         Endif
       next
      next 
            
      If dx<>0 AND dy<>0 Then 
         If dx>0 AND dy>0 Then ; GoSE 
            dir=3 
            ldir=2 
            rdir=4 
            key=40 ; DownArrow 
            olddir=UO.GetDir() 
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then 
               If olddir==2 Then ; GoNE 
                  dir=1 
                  ldir=0 
                  rdir=1 
                  key=39 ; RightArrow 
                  While UO.GetDir()<>1 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSW 
                  dir=5 
                  ldir=5 
                  rdir=6 
                  key=37 ; LeftArrow 
                  While UO.GetDir()<>5 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 

         If dx>0 AND dy<0 Then ; GoNE 
            dir=1 
            ldir=0 
            rdir=2 
            key=39 ; RightArrow 
            olddir=UO.GetDir() 
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then 
               If olddir==0 Then ; GoWN 
                  dir=7 
                  ldir=6 
                  rdir=7 
                  key=38 ; UpArrow 
                  While UO.GetDir()<>7 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSE 
                  dir=3 
                  ldir=3 
                  rdir=4 
                  key=40 ; DownArrow 
                  While UO.GetDir()<>3 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 

         If dx<0 AND dy>0 Then ; GoSW 
            dir=5 
            ldir=4 
            rdir=6 
            key=37 ; LeftArrow 
            olddir=UO.GetDir() 
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then 
               If olddir==6 Then ; GoWN 
                  dir=7 
                  ldir=7 
                  rdir=0 
                  key=38 ; UpArrow 
                  While UO.GetDir()<>7 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSE 
                  dir=3 
                  ldir=2 
                  rdir=3 
                  key=40 ; DownArrow 
                  While UO.GetDir()<>3 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 

         If dx<0 AND dy<0 Then ; GoWN 
            dir=7 
            ldir=6 
            rdir=0 
            key=38 ; UpArrow 
            olddir=UO.GetDir() 
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then 
               If olddir==0 Then ; GoNE 
                  dir=1 
                  ldir=1 
                  rdir=2 
                  key=39 ; RightArrow 
                  While UO.GetDir()<>1 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSW 
                  dir=5 
                  ldir=4 
                  rdir=5 
                  key=37 ; LeftArrow 
                  While UO.GetDir()<>5 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 
      Endif 
    
      If dx<>0 AND dy==0 Then 
         If dx>0 Then ; GoE 
            dir=2 
            key=34 ; PgDown 
            olddir=UO.GetDir() 
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then 
               If olddir==2 Then ; GoSE 
                  dir=3 
                  ldir=3 
                  rdir=4 
                  key=40 ; DownArrow 
                  While UO.GetDir()<>3 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoNE 
                  dir=1 
                  ldir=1 
                  rdir=0 
                  key=39 ; RightArrow 
                  While UO.GetDir()<>1 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 
          
         If dx<0 Then ; GoW 
            dir=6 
            key=36 ; Home key 
            olddir=UO.GetDir() 
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then 
               If olddir==0 Then ; GoWN 
                  dir=7 
                  ldir=7 
                  rdir=0 
                  key=38 ; UpArrow 
                  While UO.GetDir()<>7 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSW 
                  dir=5 
                  ldir=4 
                  rdir=5 
                  key=37 ; LeftArrow 
                  While UO.GetDir()<>5 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 
      Endif 

      If dx==0 AND dy<>0 Then 
         If dy>0 Then ; GoS 
            dir=4 
            key=35 ; End 
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then 
               If olddir==2 Then ; GoSE 
                  dir=3 
                  ldir=2 
                  rdir=3 
                  key=40 ; DownArrow 
                  While UO.GetDir()<>3 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoSW 
                  dir=5 
                  ldir=6 
                  rdir=5 
                  key=37 ; LeftArrow 
                  While UO.GetDir()<>5 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 
          
         If dy<0 Then ;GoN 
            dir=0 
            key=33 ; PgUp 
            olddir=UO.GetDir() 
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then 
               If olddir==2 Then ; GoNE 
                  dir=1 
                  ldir=1 
                  rdir=2 
                  key=39 ; RightArrow 
                  While UO.GetDir()<>1 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Else ; GoWN 
                  dir=7 
                  ldir=7 
                  rdir=6 
                  key=38 ; UpArrow 
                  While UO.GetDir()<>7 
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) 
                  Wend 
               Endif 
            Endif 
         Endif 
      Endif 
     endif 
   Wend 
end sub 


Sub StepEdit(x,y,dir,key) 
   VAR walkwait=300 
   VAR ErrLevel=0 
   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag()
      Endif 
   Endif 
   UO.Press(key) 
   wait(walkwait) 
   If x==UO.GetX() AND y==UO.GetY() Then 
      CheckLag()
      If x==UO.GetX() AND y==UO.GetY() Then 
         ErrLevel=1 
      Endif 
   Endif 
   Return ErrLevel 
end sub 


Sub StepArrow(x,y,dir,ldir,rdir,key) 
   VAR walkwait=300 
   VAR ErrLevel=0 
   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetX()==x AND UO.GetY()==y Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then 
         CheckLag()
         If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then          
            ErrLevel=1 
         Endif 
      Endif 
   Endif 
   Return ErrLevel 
end sub 

Sub CheckLag()
    UO.DeleteJournal()
    UO.Click('backpack') 
    repeat 
       wait(50) 
    until UO.InJournal('backpack')
end sub 

Sub ToHide() 
while not uo.hidden() 
   UO.DeleteJournal() 
   uo.useskill("Hiding") 
   repeat 
      wait(10) 
   until UO.InJournal("You have hidden yourself well") or UO.InJournal("You can't seem to hide here.") or UO.InJournal("You are preoccupied with thoughts of battle.") 
   if UO.InJournal("You are preoccupied with thoughts of battle.") then 
      uo.exec("warmode 1") 
      wait(100) 
      uo.exec("warmode 0") 
      wait(100) 
   end if 
wend 
end sub 

Posted: 2006-11-11 14:20:08
by Scripts Writer
А заигнорить себя не хочешь?! Или на шарде у игроков отличные от муж. и жен. полов нпс типы?

Posted: 2006-11-11 14:23:14
by GimFlex
You Must Die wrote:А заигнорить себя не хочешь?! Или на шарде у игроков отличные от муж. и жен. полов нпс типы?
угу в точку различные

Posted: 2006-11-11 14:24:08
by slonopotam
Да на это есть скрипт, такой ненадо.
Нужно именно чтоб бегал, догонял, ресался.

Posted: 2006-11-11 15:24:56
by slonopotam
Переделал, чтоб читался легче... Но помоему легче не стало.

Смысл скрипта. Шард Антарес. Орк таун. Перс ходит по комнатам и бьет визардов. Если умирает, идет к тотему и ресается, потом начинает все сначало.

После того как в 1 раз идет по координатам,

Code: Select all

GoToTile( 5561, 1881, 1, False )
Гдето циклится и встает, хотя скрипт работать продолжает.


Code: Select all

VAR ups = 1
VAR Vrag = '0x0190' 
VAR Totem = '0x40FBA3D7' 
###############################################################################
####                          задаем общий цыкл                     ###########
###############################################################################
sub Start()
   repeat
hustle()
   wait(1000)
   until ups>2
end sub

##############################################################################
######                        основной скрипт                        #########
##############################################################################
Sub hustle() 
UO.Print("//--------------------------\\") 
UO.Print("|  ----  ЛОЖКИ  НЕТ   ----  ||") 
UO.Print("\\--------------------------//")
GoToTile( 5561, 1881, 1, False )  ; ХОДИМ ПО КООРДИНАТАМ
If uo.dead() Then   ;  ПРОВЕРКА НА ТО ЖИВ ИЛИ НЕТ
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5538, 1881, 1, False ) ; ЕСЛИ МЕРТВ ТО ИДЕМ РЕСАТСЯ
    Ress()    ;  ЗАПУСКАЕМ СКРИПТ НА РЕСС
   Else
  Look()    ;  ЕСЛИ ЖИВ ЗАПУСКАЕМ СКРИПТ НА КИЛЛИНГ
 GoToTile( 5561, 1881, 1, False ) ; ВОЗВРАЩАЕМСЯ ТУДА ГДЕ НАЧАЛИ КИЛЛИНГ
Endif
GoToTile( 5561, 1876, 1, False ) ; ИДЕМ ДАЛЬШЕ
If uo.dead() Then     ;  И ТАК ДАЛЕЕ
 uo.warmode(0) 
  UO.Print("GAME OVER")
  GoToTile( 5561, 1881, 1, False ) 
   GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1876, 1, False ) 
Endif
GoToTile( 5555, 1876, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1876, 1, False ) 
    GoToTile( 5561, 1881, 1, False ) 
     GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5555, 1876, 1, False )
Endif
GoToTile( 5561, 1876, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1876, 1, False ) 
Endif
GoToTile( 5561, 1867, 1, False )  
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1867, 1, False ) 
Endif
GoToTile( 5555, 1867, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1867, 1, False ) 
    GoToTile( 5561, 1881, 1, False ) 
     GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5555, 1867, 1, False ) 
Endif
GoToTile( 5561, 1867, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1867, 1, False ) 
Endif
GoToTile( 5561, 1859, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False )
    Ress()
   Else
  Look()
 GoToTile( 5561, 1859, 1, False ) 
Endif
GoToTile( 5556, 1859, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1859, 1, False ) 
    GoToTile( 5561, 1881, 1, False ) 
     GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5556, 1859, 1, False )
Endif
GoToTile( 5561, 1859, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1859, 1, False )
Endif
GoToTile( 5561, 1851, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False )
    Ress()
   Else
  Look()
 GoToTile( 5561, 1851, 1, False ) 
Endif
GoToTile( 5555, 1851, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1851, 1, False ) 
    GoToTile( 5561, 1881, 1, False ) 
     GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5555, 1851, 1, False ) 
Endif
GoToTile( 5561, 1851, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5561, 1881, 1, False ) 
    GoToTile( 5538, 1881, 1, False ) 
    Ress()
   Else
  Look()
 GoToTile( 5561, 1851, 1, False )
Endif
GoToTile( 5561, 1881, 1, False ) 
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5538, 1881, 1, False )
    Ress()
   Else
  Look()
 GoToTile( 5561, 1881, 1, False )
Endif
GoToTile( 5538, 1881, 1, False )
If uo.dead() Then
 uo.warmode(0) 
  UO.Print("GAME OVER")
   GoToTile( 5538, 1881, 1, False )
    Ress()
   Else
  Look()
 GoToTile( 5538, 1881, 1, False ) 
Endif

uo.warmode(0) 
UO.Print("//--------------------------\\")   ; ВСЕХ ПЕРЕБИЛ
UO.Print("|  -----   ФИГАСЕ !!!  ---  ||") 
UO.Print("|  ----  С  ПЕРЕПУГУ  ----  ||")
UO.Print("|  ---  ВСЕХ  ПЕРЕБИЛ  ---  ||")
UO.Print("\\--------------------------//")

wait(30000)  ; ЖДЕМ 30 СЕК

end sub

#############################################################################
###            РЕСАЕМСЯ НА ТОТЕМЕ                                         ###
#############################################################################

Sub Ress()          ;  МОДУЛЬ НА РЕСС
 repeat   
  uo.useobject(Totem)    ЮЗАЕМ РЕСС ТОТЕМ
 wait(5000)     ;ЖДЕМ
until not uo.dead()   ; КОРОЧЕ ПОКА НЕ ОЖИВЕМ БУДЕМ ДОЛБИТСЯ В ТОТЕМ
 wait(30000)     ; ЖДЕМ 30 СЕК (РЕСП МОБОВ)
  uo.exec('terminate hustle')  ; УБИВАЕМ ОСНОВНОЙ СКРИПТ
 Start()  ; ЗАПУСКАЕМ ЗАНОВО
end sub

#############################################################################
###                 МОДУЛЬ ПОИСКА                                         ###
#############################################################################


sub Look()   ;  МОДУЛЬ ПОИСКА ВРАЖИН
   VAR Vrag = '0x0190'  ; ВОТ ЭТИХ ( ПО ТИПУ)
   Repeat 
      UO.FindType( '0x0190', '-1', '1' ) 
      If UO.FindCount() > 0 Then  ;  НАШЛИ ???
War()    ;   ВАЛИМ ЕГО
      Else 
         wait( 500 )   ; ИНАЧЕ БЬЕМ
      Endif 
   Until UO.FindCount() == 0 
   UO.IgnoreReset()   ;  НУ ЧТОБ С ПЕРЕПУГУ НЕ ПОВРЕДИТСЯ =)
endsub

#############################################################################
###            МОДУЛЬ ЗАПУСКА ОСНОВНОГО КИЛЛА                             ###
#############################################################################


Sub War()       ; МОДУЛЬ ЗАПУСКА КИЛЛИНГА
 if uo.injournal('body') then   ; ПОКА НЕ УБЪЕМ
  uo.deletejournal() 
  Attack()   ;  ЗАПУСК КИЛЛА
 endif
end sub


#############################################################################
###            А ТУТ МЫ ИХ И УБИВАЕМ И ДОГОНЯЕМ                           ###
#############################################################################

sub Attack() 
 uo.set('finddistance','6')  
  VAR LastTimer, Attack  
   repeat 
  UO.DeleteJournal() 
 UO.FindType(Vrag,-1,'ground') 
if UO.FindCount("finditem")>0 then 
 Attack=UO.GetSerial('finditem') 
  UO.Exec('warmode 1') 
   UO.Attack(Attack) 
  WalkN(0,0,Attack) 
 LastTimer=UO.Timer() 
repeat 
 wait(2000) 
 until uo.dead(Attack) or UO.InJournal('Body') OR LastTimer+150<UO.Timer() 
endif 
 wait(500) 
  next 
  wait(200) 
 until uo.dead() 
end sub 

sub Ranger() 
var skin = 1; ea?aou neeieia 
var loot = 0; eooeou oaei 
var loop = 1; aaoiiao 
var dagger = 0x0F51 
var body 

UO.DeleteJournal() 
repeat 
repeat 
wait(100) 
until UO.InJournal("Body of") 
body = UO.JournalSerial(UO.InJournal("Body of")-1) 
UO.DeleteJournal() 
if skin then 
if UO.GetDistance(body) <= 2 then 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
else 
endif 
UO.WarMode(0) 
UO.SetArm('skin') 
UO.WaitTargetObject(body) 
UO.UseType(dagger) 
wait(1000) 
endif 

if loot then 
if UO.GetDistance(body) <= 2 then 
F_Loot() 
else 
endif 
endif 

if skin then 
UO.Arm('Weapon')# Iaaaiuoa i?o?ea aee?iaai aiye aaaaeoa neiaa ,setarm Weapon 
endif 
UO.WarMode(1) 
until not loop 
endsub 


sub F_Loot() 
DIM R[14] 
var c 
R[1]=0x0df8
R[2]=0x1078
R[3]=0x0EED
R[4]=0x09AA
R[5]=0x0F85
R[6]=0x0F7B
R[7]=0x0F8C
R[8]=0x0F7A
R[9]=0x0F84
R[10]=0x0F88
R[11]=0x0F8D
R[12]=0x0F86
R[13]=0x1BD1
R[14]=0x0F8F

for c=1 to 14 
repeat 
uo.findtype(R[c],"-1","lastcorpse") 
if UO.FindCount()>0 and Uo.GetDistance("lastcorpse")<=4 then 
UO.Grab("0","finditem") 
wait(1200) 
end if 
until UO.FindCount()<1 
wait(10) 
next 
endsub 

sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 

sub WalkN(x,y,Target) 
VAR i,StepSucess 
VAR dx,dy,Exit=0 

While Exit<>1 
If Target<>"" Then 
dx=UO.GetX(Target)-UO.GetX() 
dy=UO.GetY(Target)-UO.GetY() 
If UO.GetDistance(Target)<2 Then 
Exit=1 
Endif 
Else 
dx=x-UO.GetX() 
dy=y-UO.GetY() 
If dx==0 AND dy==0 Then 
Exit=1 
Endif 

Endif 

If dx<>0 AND dy<>0 Then 
If dx>0 AND dy>0 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
Endif 

If dx>0 AND dy<0 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 

If dx<0 AND dy>0 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 

If dx<0 AND dy<0 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
Endif 

Endif 

If dx<>0 AND dy==0 Then 
If dx>0 Then 
StepSucess=Go(2,34,300);E - PgDown 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 

If dx<0 Then 
StepSucess=Go(6,36,300);W - Home 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 
Endif 


If dx==0 AND dy<>0 Then 
If dy>0 Then 
StepSucess=Go(4,35,300);S - End 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300);SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300);SW - LeftArrow 
Endif 
Endif 
Endif 

If dy<0 Then 
StepSucess=Go(0,33,300);N - PgUp 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300);WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300);NE - RightArrow 
Endif 
Endif 
Endif 
Endif 
Wend 
end sub 


sub Go(dir,key,walkwait) 
VAR x,y 

x=UO.GetX() 
y=UO.GetY() 

while UO.GetDir()<>dir 
UO.Press(key) 
wait(walkwait) 
If UO.GetDir()<>dir Then 
Endif 
wend 

UO.Press(key) 
wait(walkwait) 

If x==UO.GetX() AND y==UO.GetY() Then 
Endif 

If x==UO.GetX() AND y==UO.GetY() Then 
return -1 
Else 
return 1 
Endif 
end sub










########################################################################
### ЭТА ХОДИЛКА ЧУЖАЯ, ПОЭТОМУ В ОТЛИЧИИ ОТ ОСТАЛЬНОГО, РАБОТАЕТ =)) ###
########################################################################


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 
   VAR MoveDelay = 100 
   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() 
         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 
; 
; ============ MOVEONCE === 
; Процедура MoveOnce - хождение в определённую сторону 
; Направления: 
; Система направлений по клавишам Нумпада 
; 8 = 1 | 2 = -1 
; 9 = 2 | 1 = -2 
; 6 = 3 | 4 = -3 
; 3 = 4 | 7 = -4 
; 
; Такая система позволяет с лёгкостью получать направление, обратное 
; данному... 
; 
Sub MoveOnce( Dir, Del, Rev ) 
   VAR Num 
   Var MoveNumber = 1 
   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 
; 
; ============== GETDIR === 
; Функция GetDir возвращает направление, по которому надо идти 
; к координате 
; 
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 
; 
; =============== GETQDIR === 
; 
; 
Sub GetQDir( x, y ) 
   VAR Ep = 0.172 
   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 
; 
; ============== GETDISTANCE === 
; Функция GetDistance возвращает расстояние до координат 
; (как UO.GetDistance - до объекта) 
; 
; Почему так - потому что учим математику :) 
; 
Sub GetDistance( X, Y ) 
   VAR A, B, C 
   A = abs( X - UO.GetX() ) 
   B = abs( Y - UO.GetY() ) 
   If A > B Then 
      C = A 
   Else 
      C = B 
   EndIf 
   Return C 
endsub 
; 
; ============= PERP === 
; Функция Perp возвращает направление, перпендикулярное введённому 
; 
Sub Perp( Dir ) 
   VAR 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 
; 
; =============== STUN === 
; Обход препятствий 
; 
Sub Stun( X, Y, N ) 
   VAR I 
   VAR myx 
   VAR myy 
   VAR MoveDelay = 100 
   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 
; 
; ============= ABS === 
; Убирает знак минуса в отрицательных числах 
; 
Sub abs( a ) 
   VAR b 
   If a < 0 Then 
      b = -a 
   Else 
      b = a 
   endif 
   return b 
endsub 
; 
; ============== PERMRESEND === 
; 
Sub PermResend() 
   Var Mn = 9 
   VAR MoveDelay = 100 
   Repeat 
      UO.Resend() 
      Wait( MoveDelay * Mn ) 
   Until ( 1 > 2 ) 
endsub






Переделал, чтоб читался легче... Но помоему легче не стало.

Posted: 2006-11-11 15:31:08
by Scripts Writer
Да убей ты этот скрипт.

Posted: 2006-11-11 15:39:25
by slonopotam
Другой надо писать, но помоему, получится не лучше :shock:

Posted: 2006-11-11 15:54:01
by Scripts Writer
slonopotam wrote:Другой надо писать, но помоему, получится не лучше :shock:
Зря сомневаешься что получится хуже- ты только уясни критерии скрипта и делай так как надо-примеров полно.

Posted: 2006-11-11 15:54:51
by GimFlex
slonopotam wrote:Другой надо писать, но помоему, получится не лучше :shock:
был бы я щас в том месте где орки написал бы с нуля а так извени :wink:

Posted: 2006-11-11 16:04:50
by slonopotam
Question_GimFlex wrote:
slonopotam wrote:Другой надо писать, но помоему, получится не лучше :shock:
был бы я щас в том месте где орки написал бы с нуля а так извени :wink:
Так велком на Антарес. :D

Posted: 2006-11-14 11:46:35
by slonopotam
Новый вопрос.
Чар бегает, убивает мобов. Убил 1 побежал к другому, убил и т.д. Тоесть нашел моба, подбежал, и бьет пока не появится сообщение "body". Потом заново. А если я не 1 там бегаю, получается буду реагировать и на боди от других чаров?? Как можно узнать что я убил моба, если не брать во внимание журнал, а конкретно "боди".

Posted: 2006-11-14 12:22:30
by Scripts Writer
1. Имя монстра. (Body of zombie [0])

2. После появления Body в журнале можешь повторить повторный поиск около себя(1-2 клетки) :
а) Трупа твоего нпс
б) Живого твоего нпс
В обоих случаях, даже если ктото и убил моба далеко, то труп ты не найдёшь => моб которого ты бил-живой. Ну и поиск живого моба тож самое- если в журнале боди, ищи-если найден около себя(1-2 клетки) то продолжаем бить пока в журнале нет боди ...

Перед циклом в котором проверка условия на наличие Боди в журнале, зделай просто еще один цикл на поиск. Смотри пример:

Code: Select all

 uo.DeleteJournal()
 uo.Set('finddistance','2')
 repeat
   uo.FindType(npc,'-1','ground')
   if uo.FindCount() then
     repeat
       uo.Attack('finditem')
       wait(1000)
     until uo.InJournal('Body')
     uo.DeleteJournal()
   else
     # Loot() ...
   end if
 until not uo.FindCount() 
Грубый пример 2ух циклов с выходом в случае выполнения 2ух условий: в журнале боди и отсутствием живого нпс в радиусе 2ух клеток. (можешь еще поиск трупа ввести вокруг себя как третье условие смерти моба когда выполнятся предыдущие 2 )

п.с. Могу ошибаться, но помоему еще можно

Code: Select all

while not uo.Dead([object])
использовать.

Posted: 2006-11-17 12:24:36
by GenDor
Вот те простенькая норм ходилка:

Code: Select all

###     ХОДИЛКА    ###

sub gotoxy(x,y,prec) 
var ld=0,ldc=0 
var dx,dy 
var mx,my 
var ox,oy,mk,k 
#uo.print(">") 
#uo.track("1",str(x),str(y)) 
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(STR(dx)) 
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>100 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 

Posted: 2006-11-20 01:05:05
by slonopotam
Я правильно проверяю жим мой чар или нет?

Code: Select all

If uo.dead() Then
...
Else
...
end if
Есть другие варианты?

Posted: 2006-11-26 01:29:59
by slonopotam
Как сделать проверку на заполненость бекпака? Тоесть

Code: Select all

If в бекпаке > 200 итемов Then
script()
Else
script2()
end if
Так надо??

Code: Select all

If UO.Count()> 200 Then
script()
Else
script2()
End if