Sort Treasure Map; Scripted by Savage

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
rebenok
Posts: 35
Joined: 2005-06-12 14:49:58

Sort Treasure Map; Scripted by Savage

Post by rebenok »

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=200 ; 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



Может кто-нибудь дописАть в скрипт, чтобы он открывал не один Sourcebag, а штуки 3, к примеру ? Т.е первый мешок опустел - берет карты со второго, второй опустел - с третьего, третий пустой - скрипт отключается.. ?
Corwin
Posts: 25
Joined: 2005-05-22 08:35:28

Post by Corwin »

Держи на любое количество исходных мешков.
Значение задается переменной SourceBagNumber

ЗЫ: Сорри, в скрипте сделал одну опечатку - теперь поправил.

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=200 ; razbros koordinat
   VAR WaitTime=500 ;  pauza
   VAR SourceBagNumber=3 ; kolichestvo meshkov s nerazlozhennymi kartami
   VAR j, SourceBag=''

   DIM X[255],Y[255],Bag[255]

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

   for j = 1 to SourceBagNumber
      SourceBag = 'SourceBag' + str(j,0)
      UO.Print('Vibery meshok s kartamy '+str(j,0)+'!')
      UO.AddObject(SourceBag)
      while uo.Targeting()==2
        wait(500)
      wend
      UO.UseObject(SourceBag)
   next

   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


   j=1
   SourceBag='SourceBag' + str(j,0)
   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
         j=j+1
         IF j>SourceBagNumber Then
            Exit=1
         Else
            SourceBag='SourceBag' + str(j,0)
         Endif
      Endif
   Wend

;   f.Close()
   UO.Print("Done!!!")
end sub
Никогда не бойся делать то, что ты не умеешь!
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Corwin wrote:Держи на любое количество исходных мешков.
Значение задается переменной SourceBagNumber
лучше бы взял в контейнере перебрать все мешки вместо самотыка.
Sergs777
Posts: 2
Joined: 2005-08-20 14:18:49

Re: Sort Treasure Map; Scripted by Savage

Post by Sergs777 »

rebenok wrote:

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=200 ; 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



Может кто-нибудь дописАть в скрипт, чтобы он открывал не один Sourcebag, а штуки 3, к примеру ? Т.е первый мешок опустел - берет карты со второго, второй опустел - с третьего, третий пустой - скрипт отключается.. ?
Corwin
Posts: 25
Joined: 2005-05-22 08:35:28

Post by Corwin »

Sfagnum wrote:
Corwin wrote:Держи на любое количество исходных мешков.
Значение задается переменной SourceBagNumber
лучше бы взял в контейнере перебрать все мешки вместо самотыка.

А если нужно перебрать не все мешки? Если нужно оставить пару мешков неучтенки (пусть даже и с картами, как ни глупо это звучит)?
Я сделал человеку то, что он просил. Если считаешь, что нужно больше - предложи свой вариант.
Никогда не бойся делать то, что ты не умеешь!
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Corwin wrote:А если нужно перебрать не все мешки? Если нужно оставить пару мешков неучтенки (пусть даже и с картами, как ни глупо это звучит)?
Я сделал человеку то, что он просил. Если считаешь, что нужно больше - предложи свой вариант.
ну не надо так нервничать то... я кста и предложил вариант ;)
rebenok
Posts: 35
Joined: 2005-06-12 14:49:58

Post by rebenok »

Спасибо, Corwin! :wink:
Post Reply