Помогите со скриптом на раскладку карт...

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
ZL_OY
Posts: 12
Joined: 2006-09-14 17:05:50

Помогите со скриптом на раскладку карт...

Post by ZL_OY »

Шард ДРВ. Скрипт начинает работать, спрашивает мешки сундуки, открывает первую карту берет руну из сундука дальше идёт вопрос о имени руны и скрипт останавливается...
Давно не играл на ДРВ видимо что то поменялось с рунами (Возможно то что их теперь нельзя перемарчивать)
Если кто знает в чём дело помогите пожалуйста.

Code: Select all

sub CartSort() 
   VAR Exit, Exit2, Buffer, Buffer2, i, Line, MapX, MapY 
   VAR Index=1, MapSerial, BagSerial, MatchFound 
   VAR StepRound=300 ; razbros koordinat 
   VAR WaitTime=500 ;  pauza 

;   VAR f=file("maps.txt") 
    
   DIM X[255],Y[255],Bag[255] 

   uo.exec('set injectecho 1') 
;   f.Create() 
;   f.Open() 

   UO.Print('Vibery meshok s kartamy!') 
   UO.AddObject('SourceBag') 
   While UO.Targeting()==2 
      wait(500) 
   Wend 
   UO.UseObject('SourceBag') 

   UO.Print('Vibery portfel dlya kart!') 
   UO.AddObject('ReceiveBag') 
   While UO.Targeting()==2 
      wait(500) 
   Wend 
   UO.UseObject('ReceiveBag') 

   UO.Print('Vibery portfel s pustimi meshkami i runami!') 
   UO.AddObject('SkladBag') 
   While UO.Targeting()==2 
      wait(500) 
   Wend 
   UO.UseObject('SkladBag') 


   UO.IgnoreReset() 
   Exit=0 
   While Exit<>1 
      UO.FindType('0x0E76',-1,'ReceiveBag') ; meshok 
      IF UO.GetQuantity('finditem')>0 Then 
         Bag[Index]=UO.GetSerial('finditem') 
         UO.UseObject(Bag[Index]) 
         wait(WaitTime) 
         UO.FindType('0x1F14',-1,Bag[Index]); runa 
         IF UO.GetQuantity('finditem')>0 Then 
            UO.DeleteJournal() 
            UO.Click('finditem') 
            Repeat 
               Wait(500) 
            Until UO.InJournal("rune to") 
            Line=UO.InJournal("rune to")-1 
            Buffer=UO.Journal(Line) 

            Buffer2="" 
            Exit2=0 
            i=8 
            While Exit2<>1 
               If Buffer[i]<>":" Then 
                  Buffer2=Buffer2+Buffer[i] 
               Else 
                  Exit2=1 
               Endif              
               i=i+1 
            Wend 
            MapX=VAl(Buffer2) 

            Buffer2="" 
            Exit2=0 
            While Exit2<>1 
               If Buffer[i]<>"" Then 
                  Buffer2=Buffer2+Buffer[i] 
               Else 
                  Exit2=1 
               Endif              
               i=i+1 
            Wend 
            MapY=VAl(Buffer2) 

            X[Index]=MapX 
            Y[Index]=MapY 
            UO.Ignore(Bag[Index]) 
         Else 
            UO.MoveItem(Bag[Index],'1','SkladBag') 
            wait(WaitTime) 
            Index=Index-1 
         Endif 
         Index=Index+1 
      Else 
         Exit=1 
      Endif 

   Wend 


   Exit=0 
   While Exit<>1 
      UO.FindType('0x14EB',-1,'SourceBag') 
      If UO.GetQuantity('finditem')>0 Then 
         UO.DeleteJournal() 
         UO.MoveItem('finditem','1','backpack') 
         wait(WaitTime) 
         UO.UseObject('finditem') 
             
         MapSerial=UO.GetSerial('finditem') 
         Repeat 
            wait(500) 
         Until UO.InJournal("Map opened") 
         Line=UO.InJournal("Map opened")-1 
         Buffer=UO.Journal(Line) 

         Buffer2="" 
         Exit2=0 
         i=15 
         While Exit2<>1 
            If Buffer[i]<>":" Then 
               Buffer2=Buffer2+Buffer[i] 
            Else 
               Exit2=1 
            Endif              
            i=i+1 
         Wend 
         MapX=VAl(Buffer2) 

         Buffer2="" 
         Exit2=0 
         While Exit2<>1 
            If Buffer[i]<>"" Then 
               Buffer2=Buffer2+Buffer[i] 
            Else 
               Exit2=1 
            Endif              
            i=i+1 
         Wend 
         MapY=VAl(Buffer2) 

         i=1 
         Exit2=0 
         MatchFound=0 
         While i<Index AND Exit2<>1 
            If X[i]-StepRound<MapX AND X[i]+StepRound>MapX Then 
               If Y[i]-StepRound<MapY AND Y[i]+StepRound>MapY Then 
                  BagSerial=Bag[i] 
                  MatchFound=1 
                  Exit2=1 
               Endif 
            EndIf 
            i=i+1 
         Wend 

         If MatchFound Then 
            UO.MoveItem(MapSerial,'1',BagSerial) 
            wait(WaitTime) 
         Else 
            UO.FindType('0x0E76',-1,'SkladBag') ; meshok 
            IF UO.GetQuantity('finditem')>0 Then 
               UO.MoveItem('finditem','1','ReceiveBag') 
               Bag[Index]=UO.GetSerial('finditem') 
               X[Index]=MapX 
               Y[Index]=MapY 
               wait(WaitTime) 
               UO.FindType('0x1F14',-1,'SkladBag'); runa 
               IF UO.GetQuantity('finditem')>0 Then 
                  UO.MoveItem('finditem','1','backpack') ; runa to pack 
                  wait(WaitTime) 
                  UO.UseObject('finditem') 
                  Repeat 
                     Wait(500) 
                  Until UO.InJournal("enter a") 
                  UO.Say(STR(MapX)+":"+STR(MapY)) 
                  wait(WaitTime) 
                  UO.MoveItem('finditem','1',Bag[Index]) ; runa to meshok 
                  wait(WaitTime) 
                  UO.MoveItem(MapSerial,'1',Bag[Index]) 
                  wait(WaitTime) 
               Else 
                  Exit=1 
                  UO.Print("Error! Kon4ilis pustie runy!") 
               Endif 
               Index=Index+1 
            Else 
               Exit=1 
               UO.Print("Error! Kon4ilis pustie sumki!") 
            Endif 
         Endif 
;         UO.Print(STR(MapX)+" "+STR(MapY)) 
;         f.WriteLn(STR(MapX)+" "+STR(MapY)) 
         wait(WaitTime) 
      Else 
         Exit=1 
      Endif 
   Wend 

;   f.Close() 
   UO.Print("Done!!!") 
end sub
ZL_OY
Posts: 12
Joined: 2006-09-14 17:05:50

Post by ZL_OY »

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

Code: Select all

            UO.Click('finditem') 
            Repeat 
               Wait(500) 
            Until UO.InJournal("rune to") 
            Line=UO.InJournal("rune to")-1 
            Buffer=UO.Journal(Line) 

            Buffer2="" 
            Exit2=0 
            i=8 
            While Exit2<>1 
               If Buffer[i]<>":" Then 
                  Buffer2=Buffer2+Buffer[i] 
               Else 
                  Exit2=1 
               Endif              
               i=i+1 
            Wend 
            MapX=VAl(Buffer2) 

            Buffer2="" 
            Exit2=0 
            While Exit2<>1 
               If Buffer[i]<>"" Then 
                  Buffer2=Buffer2+Buffer[i] 
               Else 
                  Exit2=1 
               Endif              
               i=i+1 
            Wend 
            MapY=VAl(Buffer2) 

            X[Index]=MapX 
            Y[Index]=MapY 
            UO.Ignore(Bag[Index]) 
         Else 
            UO.MoveItem(Bag[Index],'1','SkladBag') 
            

Это он выполняет поскольку спрашивает нэйм руны:

Code: Select all

UO.Click('finditem') 
Дальше останавливается....
Люди поопытнее помогите пожалуйста.
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Людям поопытнее впадлу читать столько строк "слепого" кода...
DerMeister сейчас на нейрале!
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

В скрипте ничего сложного нет. Если он перестал работать значит изменились правила игры на ДРВ.
При открывании разгаданной карты высвечиваются координаты расположения карты, которые запоминаются в качестве имени руны. Если карта не разгадана, скрипт тыркает в нее еще раз. Далее проверяется массив рун из открытых ранее мешков, на предмет существования мешка с данной локацией. Если такого нет то создается новый мешок если есть, карта отправляется в существующий.

Руны использовались потому что их можно было промарчить по месту клада. Если руны теперь не подходят можно использовать книжечки для записи. Любой объект который можно назвать.

Известная бага - карта с 3-х значными координатами тормозит скрипт. То есть расчитано на 1234:1234.
Может формат вывода координат поменялся?
ZL_OY
Posts: 12
Joined: 2006-09-14 17:05:50

Post by ZL_OY »

А где то место в скрипте когда он ищет выданные при открытии координаты карты и запоминает?
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Code: Select all

         MapSerial=UO.GetSerial('finditem') 
         Repeat 
            wait(500) 
         Until UO.InJournal("Map opened") 
         Line=UO.InJournal("Map opened")-1 
         Buffer=UO.Journal(Line) 

         Buffer2="" 
         Exit2=0 
         i=15 
         While Exit2<>1 
            If Buffer[i]<>":" Then 
               Buffer2=Buffer2+Buffer[i] 
            Else 
               Exit2=1 
            Endif              
            i=i+1 
         Wend 
         MapX=VAl(Buffer2) 

         Buffer2="" 
         Exit2=0 
         While Exit2<>1 
            If Buffer[i]<>"" Then 
               Buffer2=Buffer2+Buffer[i] 
            Else 
               Exit2=1 
            Endif              
            i=i+1 
         Wend 
         MapY=VAl(Buffer2) 

ZL_OY
Posts: 12
Joined: 2006-09-14 17:05:50

Post by ZL_OY »

Вроде всё правильно... =( Ничего с картами не менялось только руны менялись но и с книжками не пашет первую карту открыл нэйм руны спрашивает и встаёт... я так понимаю он должен эту руну как то обозвать но не обзывает...
Саваж это твой скрипт я так понял?
МОжеш оригинал выложить пожалуста?
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Вот. Сортирует карты близко расположенных кладов.
Делал под заказ, не бесплатно. Но срок давности уже вышел...
значит в паке портфель с пустыми мешками и бланк рунами, портфель для карт пустой или уже с сортированными мешками (токо не доводите количество карт до 255 а то скрипт собъется), и мешок с картами.
Помнится что заказчик запустил с трудом, хз почему.

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

Code: Select all

###############################################################
#===---====---===---= Sort Treasure Map =---=---=---=---=---==#
#           Scripted by Savage (c) 2004 ICQ:33336141          #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
sub CartSort()
;	VAR f=file("maps.txt")
	VAR Exit, Exit2, Buffer, Buffer2, i, Line, MapX, MapY
	VAR Index=1, MapSerial, BagSerial, MatchFound
	VAR StepRound=40 ; razbros koordinat
	VAR WaitTime=500 ;  pauza
	
	DIM X[255],Y[255],Bag[255]

	uo.exec('set injectecho 1')
;	f.Create()
;	f.Open()

	UO.Print('Vibery meshok s kartamy!')
	UO.AddObject('SourceBag')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.UseObject('SourceBag')

	UO.Print('Vibery portfel dlya kart!')
	UO.AddObject('ReceiveBag')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.UseObject('ReceiveBag')

	UO.Print('Vibery portfel s pustimi meshkami i runami!')
	UO.AddObject('SkladBag')
	While UO.Targeting()==2
		wait(500)
	Wend
	UO.UseObject('SkladBag')


	UO.IgnoreReset()
	Exit=0
	While Exit<>1
		UO.FindType('0x0E76',-1,'ReceiveBag') ; meshok
		IF UO.GetQuantity('finditem')>0 Then
			Bag[Index]=UO.GetSerial('finditem')
			UO.UseObject(Bag[Index])
			wait(WaitTime)
			UO.FindType('0x1F14',-1,Bag[Index]); runa
			IF UO.GetQuantity('finditem')>0 Then
				UO.DeleteJournal()
				UO.Click('finditem')
				Repeat
					Wait(500)
				Until UO.InJournal("Rune to")
				Line=UO.InJournal("Rune to")-1
				Buffer=UO.Journal(Line)

				Buffer2=""
				Exit2=0
				i=8
				While Exit2<>1
					If Buffer[i]<>":" Then
						Buffer2=Buffer2+Buffer[i]
					Else
						Exit2=1
					Endif				
					i=i+1
				Wend
				MapX=VAl(Buffer2)

				Buffer2=""
				Exit2=0
				While Exit2<>1
					If Buffer[i]<>"" Then
						Buffer2=Buffer2+Buffer[i]
					Else
						Exit2=1
					Endif				
					i=i+1
				Wend
				MapY=VAl(Buffer2)

				X[Index]=MapX
				Y[Index]=MapY
				UO.Ignore(Bag[Index])
			Else
				UO.MoveItem(Bag[Index],'1','SkladBag')
				wait(WaitTime)
				Index=Index-1
			Endif
			Index=Index+1
		Else
			Exit=1
		Endif

	Wend


	Exit=0
	While Exit<>1
		UO.FindType('0x14EB',-1,'SourceBag')
		If UO.GetQuantity('finditem')>0 Then
			UO.DeleteJournal()
			UO.MoveItem('finditem','1','backpack')
			wait(WaitTime)
			UO.UseObject('finditem')
			MapSerial=UO.GetSerial('finditem')
			Repeat
				wait(500)
			Until UO.InJournal("Map opened")
			Line=UO.InJournal("Map opened")-1
			Buffer=UO.Journal(Line)

			Buffer2=""
			Exit2=0
			i=15
			While Exit2<>1
				If Buffer[i]<>":" Then
					Buffer2=Buffer2+Buffer[i]
				Else
					Exit2=1
				Endif				
				i=i+1
			Wend
			MapX=VAl(Buffer2)

			Buffer2=""
			Exit2=0
			While Exit2<>1
				If Buffer[i]<>"" Then
					Buffer2=Buffer2+Buffer[i]
				Else
					Exit2=1
				Endif				
				i=i+1
			Wend
			MapY=VAl(Buffer2)

			i=1
			Exit2=0
			MatchFound=0
			While i<Index AND Exit2<>1
				If X[i]-StepRound<MapX AND X[i]+StepRound>MapX Then
					If Y[i]-StepRound<MapY AND Y[i]+StepRound>MapY Then
						BagSerial=Bag[i]
						MatchFound=1
						Exit2=1
					Endif
				EndIf
				i=i+1
			Wend

			If MatchFound Then
				UO.MoveItem(MapSerial,'1',BagSerial)
				wait(WaitTime)
			Else
				UO.FindType('0x0E76',-1,'SkladBag') ; meshok
				IF UO.GetQuantity('finditem')>0 Then
					UO.MoveItem('finditem','1','ReceiveBag')
					Bag[Index]=UO.GetSerial('finditem')
					X[Index]=MapX
					Y[Index]=MapY
					wait(WaitTime)
					UO.FindType('0x1F14',-1,'SkladBag'); runa
					IF UO.GetQuantity('finditem')>0 Then
						UO.MoveItem('finditem','1','backpack') ; runa to pack
						wait(WaitTime)
						UO.UseObject('finditem')
						Repeat
							Wait(500)
						Until UO.InJournal("What is the new name")
						UO.Say(STR(MapX)+":"+STR(MapY))
						wait(WaitTime)
						UO.MoveItem('finditem','1',Bag[Index]) ; runa to meshok
						wait(WaitTime)
						UO.MoveItem(MapSerial,'1',Bag[Index])
						wait(WaitTime)
					Else
						Exit=1
						UO.Print("Error! Kon4ilis pustie runy!")
					Endif
					Index=Index+1
				Else
					Exit=1
					UO.Print("Error! Kon4ilis pustie sumki!")
				Endif
			Endif
;			UO.Print(STR(MapX)+" "+STR(MapY))
;			f.WriteLn(STR(MapX)+" "+STR(MapY))
			wait(WaitTime)
		Else
			Exit=1
		Endif
	Wend

;	f.Close()
	UO.Print("Done!!!")
end sub
ZL_OY
Posts: 12
Joined: 2006-09-14 17:05:50

Post by ZL_OY »

Спасибо большое! Всё работает видимо у меня был битый скрипт
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Фсекта рат!!!
LeeLoo
Posts: 4
Joined: 2006-11-21 19:24:04
Contact:

Post by LeeLoo »

Savage wrote:Вот. Сортирует карты близко расположенных кладов.
Спасибо, Savage, все сортирует, все раскладывает, но у меня не получается второй раз по тем же мешкам раскидывать следущую партию(
Все сделала, как вы написали, и скрипт, когда второй раз начинает работать, все мешки раскрывает, с уже разложенными картами и записанными рунками, но почему-то не кладет в них новые карты( На те же самые координаты берет новый мешок и новую рунку( Столько рунок уже извела(
И так всегда после любой остановки скрипта.
Играю на ДРВ. Может я что-то в инже не настроила? Или нужно паузу где-нибудь поставить? Может быть она просто не успевает?
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Code: Select all

   VAR StepRound=40 ; razbros koordinat 
   VAR WaitTime=500 ;  pauza 
Это не менялось?
еще можно тут проверить: www.djetta.ru/inj-switch.jpg
LeeLoo
Posts: 4
Joined: 2006-11-21 19:24:04
Contact:

Post by LeeLoo »

Savage wrote:...
Все прверила - ничего не меняла. Первый раз раскладывает замечательно и мешки заполняются по 15-20 карт.
но куча мешков по 1-2 карты
а второй раз скрипт мешки откроет, но игнорирует напрочь(
вот нашла - ребенок то же самое пишет
https://yoko.uokit.com/viewtopic.php?t= ... 0%F2%E0%EC
такая же проблема(
Post Reply