Исправьте пожалуйста!

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Исправьте пожалуйста!

Post by 200790 »

Что бы если моба убил не я он не пытался слутать из трупа то что указано для лута, а закрывал ячейку где лут моба или просто дальше включал поиск и ждал пока реснеться он.
а то иногда тупит изза этого.

Code: Select all

var distance='6' # ????????? ?????? ?????
   var corpser='0' # 1-?????? ???? # 0-?? ?????? ????
   
sub main()
   var n, m, mob
   var tweapon=uo.getserial(uo.objatlayer('Rhand'))
   var tshield=uo.getserial(uo.objatlayer('Lhand'))
   
   Dim npc[10]
   npc[0]=2 # count
   npc[1]='0x03CA'
   npc[2]='0x0018'
   npc[3]=''
   
   Dim loot[50]
   loot[0]=2 # count
   loot[1]='0x0EED'
   loot[2]='0x0F7E'
   loot[3]='0x0E34'
   loot[3]='0x1F58'
   
   uo.set('finddistance',distance)
   while 1
      for n=1 to npc[0]
         uo.findtype(npc[n],-1,'ground')
         if uo.findcount() then
            uo.useobject(tweapon)
            uo.useobject(tshield)
            wait(100)
            mob=uo.getserial('finditem')
            kill(mob)
            uo.useobject('lastcorpse')
            checklag()
            wait(1000)
            for m=1 to loot[0]
               while uo.getquantity('<'+loot[m])
                  uo.moveitem('<'+loot[m])
                  wait(700)
               wend
            next
            while uo.life<uo.str-20 and uo.count('0x0E21')
               uo.bandageself()
               wait(3500)
            wend
            if uo.count('0x0E20') then
               uo.waittargettype('0x1008')
               uo.usetype('0x0E20')
               wait(1000)
            endif
         endif
      next
      wait(1000)
   wend
endsub 
sub kill(mob)
   var n
   checklag()
   for n=0 to 100
      uo.attack(mob)
      if uo.getdistance(mob)>1 then
         walkn(0,0,mob)
      endif
      if uo.injournal('Body of') then
         if corpser==1 then
            uo.waittargetobject('lastcorpse')
            wait(100)
            uo.usetype('0x0F51')
            wait(500)   
         endif
         return
      endif
      wait(1000)
   next
endsub
sub WalkN(x,y,Target) ########################################## ??????? 
   VAR LastTimer 
   LastTimer=UO.Timer() 
   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"
   uo.say('')   
   While Exit<>1    
      If Target<>"" Then 
         dx=UO.GetX(Target)-UO.GetX() 
         dy=UO.GetY(Target)-UO.GetY()         
         If UO.GetDistance(Target)<2 OR LastTimer+100<UO.Timer() Then 
            wait(1000) 
            return
         Endif 
      Else 
         dx=x-UO.GetX() 
         dy=y-UO.GetY() 
         If dx==0 AND dy==0 OR LastTimer+100<UO.Timer() Then 
            return 
         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=150
   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=150 
   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 
sub checklag() 
   repeat
      UO.DeleteJournal() 
      UO.Click('backpack') 
   until backpack()==1
endsub 
sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Исправьте пожалуйста!

Post by Mirage »

Прелести работы с журналом.

Переделывать чтобы вместо сообщения проверял координату X у монсра.

Как то вот так:

Code: Select all

sub kill(mob)
	var n
	checklag()
	for n=0 to 100
		uo.attack(mob)
		repeat
			if uo.getdistance(mob)>1 then
				walkn(0,0,mob)
			else 
				wait(100)
			end if
		until uo.dead() or uo.GetX(mob)==0
		if uo.injournal('Body of') then
			if corpser==1 then
				uo.waittargetobject('lastcorpse')
				wait(100)
				uo.usetype('0x0F51')
				wait(500)   
			endif
			return
		endif
		wait(1000)
	next
endsub
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Re: Исправьте пожалуйста!

Post by 200790 »

Всё ровно....а может чар пытается порезать, а не полутать...ведь если убил не я рипера то по идее не открывает пак трупа?
Я журнал сфоткаю и пришлю что пишет...и после этого новую цель не ищет.
а если я убиваю и лутаю то норм
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Re: Исправьте пожалуйста!

Post by 200790 »

Вот что происходит если убью не я моба...пытается полутать его и зацикливается.
а можно сделать что бы если 1 раз не получилось слутать то прекращал делать это?
Или какие варианты еще?
Image
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Re: Исправьте пожалуйста!

Post by 200790 »

Помогите плиз.
новый появляется моб, а толку нет)
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Исправьте пожалуйста!

Post by Mirage »

А ну так написал бы что если убивает другой - лутать ты можешь через определенное время - это по дефолту но не на всех серверах работает.

Code: Select all

var j = 0
            for m=1 to loot[0]
               while uo.getquantity('<'+loot[m]) or j = 0
                  uo.moveitem('<'+loot[m])
                  wait(700)
                    if uo.injournal('loot this corpsw yet') then
                       j == 1
                    endif
               wend
            next
PS Писал на коленке, если работать не будет то вечером покажу как у меня это выглядит (значительно меньше строк с чуть чуть более широким функционалом).
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Re: Исправьте пожалуйста!

Post by 200790 »

спасибо за старания-гениальный вы!
попробую сегодня, отпишусь.

А var j = 0 не было в скрипте, вписать нужно после строк ?)

Code: Select all

kill(mob)
uo.useobject('lastcorpse')
checklag()
wait(1000)

Не знаю ошибку пишет и указывает на строку while uo.getquantity('<'+loot[m]) or j = 0

тогда вечером буду ждать когда сможете подправить)

И еще...лутает почему то первые 2 наименования, гп например и бланк скроллы, а камушки-реги итд нехочет...может скорость большая?
200790
Posts: 20
Joined: 2013-01-15 15:24:07

Re: Исправьте пожалуйста!

Post by 200790 »

Да и еще правильно ли я понимаю что

Code: Select all

 while uo.getquantity('<'+loot[m])
                  uo.moveitem('<'+loot[m])
                  wait(2500)
то что в скобках это скорость лута?
изначально было 500 я на 2500 поменял.
или в скрипте нет скорости лута?
Envy
Posts: 30
Joined: 2012-12-26 11:37:25
Location: Киев
Contact:

Re: Исправьте пожалуйста!

Post by Envy »

Mirage wrote:А ну так написал бы что если убивает другой - лутать ты можешь через определенное время - это по дефолту но не на всех серверах работает.

Code: Select all

var j = 0
            for m=1 to loot[0]
               while uo.getquantity('<'+loot[m]) or j = 0
                  uo.moveitem('<'+loot[m])
                  wait(700)
                    if uo.injournal('loot this corpsw yet') then
                       j == 1
                    endif
               wend
            next
PS Писал на коленке, если работать не будет то вечером покажу как у меня это выглядит (значительно меньше строк с чуть чуть более широким функционалом).
Не работает. Покажите как должно быть, если можна. :oops:
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Исправьте пожалуйста!

Post by Mirage »

У меня старая убивалка выглядела вот так:

Code: Select all

sub KillIt()
	VAR MaxVes = 600
	VAR n=1
	var animal='0x000D'
	uo.ignorereset()
	
	Repeat
		uo.Set('finddistance', n)
		uo.FindType(animal, -1, 'ground')
		if uo.FindCount() then
			uo.resend()
			n=1
			uo.attack('finditem')
			repeat
				if uo.GetDistance('finditem') > 2 then
					walker(uo.GetX('finditem'),uo.GetY('finditem'),2)
				else 
					wait(100)
				end if
			until uo.dead() or uo.GetX('finditem')==0
			wait(100)
			Loot()
		else
			n=n+1 ; если монстр не найден то увеличиваем радиус поиска
			if n>10 then
				n=1
			endif
		end if
		Loot()  ; лут
	Until uo.Dead() || UO.Weight > MaxVes
	hanthome() ; оттаскивает хабар домой.
end sub
А вот так не будет пытаться слутать не свой труп.

Code: Select all

Sub Loot()
	var a
	DIM G[4]
	G[0] = '0x0EED'; деньги
	G[1] = '0x0F7E'; 
	G[2] = '0x0E34'; 
	G[3] = '0x1F58'; 
	var body = '0x2006'
	var corpse
	UO.Set('quiet','1')
	uo.set('finddistance', '3')
	uo.findtype(body, -1, 'ground')
	if uo.findcount() and Uo.GetDistance( body ) < 4 then
		corpse = uo.getSerial('finditem')
		uo.deletejournal()
		uo.useobject(corpse)
		checklag()
		if NOT uo.injournal('loot this corpsw yet') then
			For a=0 to 3
				UO.FindType( G[a], -1, corpse )
				while UO.FindCount()
					uo.moveitem('finditem','0','backpack')
					wait(500)
					UO.FindType( G[a], -1, corpse )
				wend
			next
		endif
		UO.Hide(corpse)
		UO.Ignore(corpse)
	endif
	uo.Set('finddistance', 1)
	UO.Set('quiet','0')
endsub
Post Reply