Требуется ходилка.

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Night Wolf
Posts: 26
Joined: 2005-01-12 13:33:49

Требуется ходилка.

Post by Night Wolf »

Мне нужна любая ходилка для скрипта Асканелли на форенсик вида GotoXY(X,Y,R), где R это расстояние на которое надо подойти. Желательно без установки дополних программы типа асм.

Code: Select all

sub Forensic() 
var vendor='0x00076B23' 
var ptaha='' 
var corpse='' 

uo.set("finddistance",15) 
while not uo.dead() 
   uo.findtype('0x0006','-1','ground') 
   if uo.findcount()>0 then 
      ptaha=uo.getserial('finditem') 
      while uo.getdistance(ptaha)>1 
         GotoXY(uo.getx(ptaha),uo.gety(ptaha),1) 
      wend 
      uo.warmode(1) 
      uo.deletejournal() 
      uo.attack(ptaha) 
      repeat 
         wait(100)          
         if uo.getdistance(ptaha)>1 then 
            GotoXY(uo.getx(ptaha),uo.gety(ptaha),1) 
         end if 
      until uo.injournal("Body of") 
      uo.warmode(0) 
      wait(100) 
      corpse=uo.getserial('lastcorpse') 
      repeat 
         if uo.skillval("Forensic Evaluation",1)>=1000 then 
            uo.closeuo() 
         end if 
         uo.deletejournal() 
         uo.useskill("Forensic Evaluation",corpse) 
         repeat 
            wait(10) 
         until uo.injournal("You can tell nothing about the corpse.") or uo.injournal("This is Body of") or uo.injournal("Forensics must be used on a corpse.") or uo.injournal("You can't see the target") 
      until uo.injournal("Forensics must be used on a corpse.") or uo.injournal("You can't see the target") 
      uo.usetype('0x097B') 
      wait(1500) 
   else 
      while uo.getdistance(vendor)>1 
         GotoXY(uo.getx(vendor),uo.gety(vendor),1) 
      wend 
      uo.click(vendor) 
      wait(1000) 
      uo.buy("pta",uo.getname(vendor)) 
      wait(3000) 
   end if 
wend 
uo.closeuo() 
end sub 

sub GotoXY(x,y,r) 
end sub
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Прикреплённые топики смотреть не учили? :!: :evil:
Night Wolf
Posts: 26
Joined: 2005-01-12 13:33:49

Post by Night Wolf »

Night Wolf wrote:

Code: Select all

Желательно без установки дополних программы типа асм.
Destruction wrote:Прикреплённые топики смотреть не учили? :!: :evil:
1 пост прочитай еще раз. И посмотри прикрепленную тему.

Там написано:

Code: Select all

Имеется старая версия ходилки - юзает ASM... 
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Code: Select all

sub foren()
	While NOT UO.Dead()
		UO.FindType('0x2006',-1,'ground')
		If UO.FindCount() Then
			If UO.GetDistance('finditem')>3 Then
				SuperWalk(0,0,'finditem')
			EndIf
			UO.WaitTargetObject('finditem')
			UO.UseSkill('Forensic Evaluation')
			wait(3000)
		Else
			wait(10000)
		Endif
	Wend
end sub


#==============================================================
#  SuperWalk(X,Y,Serial) - char is walking by dX and dY step
#                sub using Home, End, PgUp, PgDown keys
#                d'not rebind this key from default action!
#     walkwait - delay after keypress
#--------------------------------------------------------------
sub SuperWalk(x,y,Target)
	VAR i
	VAR dir,ldir,rdir,key,olddir
	VAR dx,dy,Exit=0
	VAR CacheLimit=9,CacheIndex="Text"
	DIM CacheX[10], CacheY[10]
	
	CacheX[0]="Test"
	While Exit<>1	
		If Target<>"" Then
			dx=UO.GetX(Target)-UO.GetX()
			dy=UO.GetY(Target)-UO.GetY()
;			UO.Print("Target locked!")
			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 ; 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
	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
;zatik
			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
; zatik			
				ErrLevel=1
			Endif
		Endif
	Endif
	Return ErrLevel
end sub


#==============================================================
#  CheckLag() - click on backpack and awaiting "backpack"
#               message in journal.
#
#  Journal has been deleted!!!
#--------------------------------------------------------------
sub CheckLag()
	UO.DeleteJournal()
	UO.Click('backpack')
	repeat
		wait(500)
	until UO.InJournal('backpack')
end sub

Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Night Wolf wrote:
Night Wolf wrote:

Code: Select all

Желательно без установки дополних программы типа асм.
Destruction wrote:Прикреплённые топики смотреть не учили? :!: :evil:
1 пост прочитай еще раз. И посмотри прикрепленную тему.

Там написано:

Code: Select all

Имеется старая версия ходилки - юзает ASM... 
Извиняюсь, не заметил :(

Версия не настолько старая - в ней исправлено хождение кругами итп, чем Вас не устраивает? Ходилка сверхточная, с обходом препятствий, самая быстрая (до 90% скорости персонажа).

Если установка ASM - принципиально невозможна, поправьте ходилку, изменив ASM'овский uo.asmMapGetTile на uo.privateGetTile, кажется так. Сам ни разу не использовал ни одну из команд.
Night Wolf
Posts: 26
Joined: 2005-01-12 13:33:49

Post by Night Wolf »

Спасибо, Savage.
Post Reply