Кемпинг помогите пожалуйста

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
dubas2
Posts: 13
Joined: 2008-12-05 14:36:07

Кемпинг помогите пожалуйста

Post by dubas2 »

привет.вот скрипт на рубку хвороста.Проблема в том,что когда я начинаю помечать деревья после первого помеченного дерева выдаёт ошибку - Uncepl parser error.линию ошибки не указывает.Помогите пожалуйста,в чом может быть проблема?

Code: Select all

var fName= "C:\uo\inject\trees3.dat" ## - Путь к файлу в котором будут хранится координаты деревьев. 
var TypeFood='0x097B' ## - Тип еды которую будем кушать.(сейчас фиштейки
var tKnife = '0x0F52' ; тип ножа, если он в руках - не придётся тыкать на него прицелом.

sub kindling()
var i, f
dim TreeX[500],TreeY[500],TreeT[500]
var flag,treeCount=0
   UO.Exec('terminate Reconnector')
   UO.Exec('exec Reconnector')
   if UO.GetGraphic(UO.ObjAtLayer('Rhand')) == '0x0F51' then
      uo.waittargetobject(UO.ObjAtLayer('Rhand'))
      uo.AddObject('knife')
   else
      UO.Print('Мтякс... покажЪ нож...')
      uo.AddObject('knife')
      while uo.Targeting()
         wait(100)
      wend
   end if
   ToHide()
   uo.Print('Посмотримс, что там у нас в файлике завалялось...')
   f = file(fName)
   f.open()
   treeCount=safe call f.ReadNumber()
   for i=1 to treeCount
      TreeT[i]=safe call f.ReadNumber()
      TreeX[i]=safe call f.ReadNumber()
      TreeY[i]=safe call f.ReadNumber()
   next
   f.close()
   Orfo(str(treeCount),'Значится пошукал я и нашел '+str(treeCount)+' дерев','',0)
   wait(2000)
   ToHide()
   if treeCount<1 then
      return
   end if
   uo.set('finddistance','3')
   uo.FilterSpeech('on')
   uo.FilterSpeech('add', 'What do you want to use this on?')
   while not UO.Dead()
      for i=1 to treeCount
         if uo.skillval('Camping',1)==1000 then
            uo.set('finddistance','14')
            uo.FilterSpeech('off')
            UO.CloseUO()
         end if
         uo.Print('Потопал к дереву №'+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i]))
         if GotoXY(TreeX[i],TreeY[i]) == 1 then
            GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ()))
            Camping()
         end if
      next
      ToEat()
   wend
   uo.set('finddistance','14')
   uo.FilterSpeech('off')
   UO.CloseUO()
end Sub

Sub GetTree(Type,X,Y,Z)
var lt
var Text2='There is no wood left to harvest'
var Text3="You can't"
var Text4='That is too far away.'
var Text5='Chopping the tree '
var Text6='You put'
   UO.DeleteJournal()
   while not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.Dead()
      ToHide()
      CheckLag()
      uo.WaitTargetTile(Type,X,Y,Z)
      uo.UseObject('knife')
      lt = UO.Timer()
      while not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.InJournal(Text6) and not UO.Dead() and lt+100 > UO.Timer()
         wait(100)
      wend
      if lt+100 < UO.Timer() then
         if uo.targeting() then
            uo.canceltarget()
         end if
         UO.Print('Больное какое то дерево')
         return
      end if
   wend
end Sub

sub MarckingLumbers()
var k, i
dim TreeX[500], TreeY[500],TreeT[500]
dim TreeTile[29]
var flag=0, treeCount=0, flag2=0
TreeTile[0]=3277
TreeTile[1]=3280
TreeTile[2]=3283
TreeTile[3]=3286
TreeTile[4]=3289
TreeTile[5]=3291
TreeTile[6]=3294
TreeTile[7]=3296
TreeTile[8]=3299
TreeTile[9]=3302
TreeTile[10]=3393
TreeTile[11]=3394
TreeTile[12]=3395
TreeTile[13]=3396
TreeTile[14]=3415
TreeTile[15]=3416
TreeTile[16]=3417
TreeTile[17]=3418
TreeTile[18]=3419
TreeTile[19]=3438
TreeTile[20]=3439
TreeTile[21]=3440
TreeTile[22]=3441
TreeTile[23]=3442
TreeTile[24]=3460
TreeTile[25]=3461
TreeTile[26]=3462
TreeTile[27]=3290
TreeTile[28]=3288
   uo.FilterSpeech('on')
   uo.FilterSpeech('add', 'Where do you want to use the')
   uo.Print('Ты будешь смеятся, но мне нужна либо кирка, либо лопата...')
   uo.AddObject('Pickaxe')
   While uo.Targeting()
      Wait (100)
   Wend
   uo.Print('Iwi derevja,tikaj na nih a ja budu proverjatj...')
   UO.DeleteJournal()
   while uo.Lasttile(1)<>uo.getX() and uo.Lasttile(2)<>uo.gety()
      CheckLag()
      uo.UseObject('Pickaxe')
      if WaitForTryRock()==0 then
         flag = 0
         for k = 0 To 9
            if uo.LastTile(0)==TreeTile[k]+1 then
               flag = 2
            end if
         next
         if flag == 0 then
            for k = 0 To 28
               if uo.LastTile(0)==TreeTile[k] then
                  flag = 1
               end if
            next
         end if
         if flag > 0 then
            flag2 = 0
            if treeCount > 0 Then
               for i = 1 To treeCount
                  if TreeX[i]==uo.LastTile(1) and TreeY[i]==uo.LastTile(2) then
                     flag2 = 1
                  end if
               next
            end if
            if flag2 == 0 then
               treeCount = treeCount + 1
               TreeX [treeCount] = uo.LastTile(1)
               TreeY [treeCount] = uo.LastTile(2)
               if flag == 1 then
                  TreeT [treeCount] = uo.LastTile(0)
               else
                  TreeT [treeCount] = uo.LastTile(0) - 1
               end if
               uo.print('Надо же! В дерево попал!!! В это: x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2)))
               Orfo(str(treeCount),'Всего '+str(treeCount)+' дерев',' наковырял',0)
            else
               uo.Print('Вот чукча!!! Ты мне енто дерево уже показывал!!!, давай что нибудь новенькое покажи...')
            end if
         else
            UO.Print('похоже... но не дерево...')
         end if
      end if
   wend
   uo.Filterspeech('off')
   if treeCount < 1 then
      UO.Print('И чо ты мне мозги тут пудрил? Ни одного дерева же не нашёл!')
      UO.Print('Ну ни чо в другой раз тебе больше повезёт :)')
      return
   end if
   if treeCount < 100 then
      uo.Print('И чо ты думаешь этого тебе хватит?!?!?')
   else
      uo.Print('Ну ты и хапуга... и глянь терпения то хватило...')
   end if
   wait(200)
   uo.Print('Да не расстраивайся ты... я так шутю :)')
   wait(200)
   uo.Print('посмотрел я тут на досуге, что ты навыбирал...')
   uo.Print('буду попробывать скинуть в файл...')
   SaveToFile(treeCount,TreeX,TreeY,TreeT)
   wait(500)
   uo.Print('Всё! Типа скинул в файл: ' + fName)
   wait(200)
   uo.Print('Эё!!! Ты куда собрался? погодь я тебя ещё не отпустил, ща рубать пойдём...')
   wait(700)
   kindling()
end Sub

Sub WaitForTryRock()
var Text1="Try mining in rock."
var Text2="That is too far away."
var Text3="You can't see the target"
var Text4="You have no line of sight to that location"
var Text5="There is no ore here to mine."
var Text6='You loosen'
var Text7='You put'
var Text8='OOPS!!!'
var Text9='STOPPP'
   while not UO.InJournal(Text1) and not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.InJournal(Text6) and not UO.InJournal(Text7) and not UO.InJournal(Text8) and not UO.InJournal(Text9)
      wait(50)
   wend
   if UO.InJournal(Text1) then
      UO.Print('ща посмотрю куда ты там тыкнул...')
      return 0
   end if
   if UO.InJournal(Text2) or UO.InJournal(Text3) or UO.InJournal(Text4) then
      UO.Print('а чо поближе дерева не водятся?')
   end if
   if UO.InJournal(Text5) or UO.InJournal(Text6) or UO.InJournal(Text7) or UO.InJournal(Text8) then
      UO.Print('Ты вроде подрова собирался??? Ну так и иди... лесом иди...')
   end if
   return 1
end Sub

Sub SaveToFile(treeCount,TreeX,TreeY,TreeT)
var s=0,i=0, f
   f = file(fName)
   f.open()
   f.create()
   s=safe call f.writeln(treeCount)
   for i=1 to treeCount
      s=safe call f.writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i]))
   next
   f.close()
end Sub

Sub Orfo(sNum, fStr, lStr, Rod) ## Rod - 0/1; 0 - дерево, 1 - лог
var n=VAL(Right(sNum,1))
   if n==0 then
      if Rod == 0 then
         UO.Print(fStr+'а'+lStr)
      else
         UO.Print(fStr+lStr)
      end if
      return
   end if
   if n<5 then
      UO.Print(fStr+'а'+lStr)
      return
   end if
   if Rod == 0 then
      UO.Print(fStr+'ев'+lStr)
   else
      UO.Print(fStr+'ов'+lStr)
   end if
end Sub

Sub Camping()
var mx=uo.getx(),my=uo.gety(),x,y
   uo.DeleteJournal()
   while uo.count('0x0DE1','0x0000') > 0
      for x=mx-2 to mx+2
         for y=my-2 to my+2
            CheckLag()
            if uo.count('0x0DE1','0x0000')==0 or uo.Dead() then
               return
            end if
            uo.findtype('0x0DE1','0x0000','ground')
            if UO.FindCount() == 0 then
               uo.findtype('0x0DE1','0x0000','backpack')
               uo.drop('1',str(x),str(y),str(uo.getz()),'finditem')
               CheckLag()
            end if
            uo.findtype('0x0DE1','0x0000','ground')
            if UO.FindCount() > 0 then
               uo.deletejournal()
               uo.useobject('finditem')
               wait(1500)
               if uo.injournal("You can't") then
                  uo.ignore('finditem')
               end if
            end if
         next
      next
   wend
end Sub

Sub ToHide()
   while not UO.Hidden()
      CheckLag()
      UO.WarMode(0)
      UO.UseSkill('Hiding')
      repeat
         wait(200)
      until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preocopured') or UO.Dead()
   wend
end Sub

Sub ToEat()
   UO.DeleteJournal()
   UO.FindType(TypeFood,'0x0000','backpack')
   while UO.FindCount() > 0 and not uo.InJournal('too full') and not UO.Dead()
      CheckLag()
      uo.UseType(TypeFood,'0x0000')
      while not uo.InJournal('full') and not uo.InJournal('stuffed') and not uo.InJournal('hungry') and not uo.InJournal('satiated') and not UO.Dead()
         wait(100)
      wend
      UO.FindType(TypeFood,'0x0000','backpack')
   wend
end Sub

Sub CheckLag()
   if uo.Waiting()>0 then
      uo.Exec('canceltarget')
   end if
   uo.DeleteJournal()
   uo.Click('backpack')
   repeat
      wait(50)
   until uo.InJournal('backpack') or UO.Dead()
end Sub

Sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.Exec('terminate kindling')
wait(1000)
UO.Exec('exec kindling')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub

Sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub

###################################################################################################
################################# тут ходилка #####################################################
###################################################################################################

Sub GotoXY(x,y)
   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       
      dx=x-UO.GetX()
      dy=y-UO.GetY()
      If dx<=2 AND dy<=2 Then
         Exit=1
      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
   return 1
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
Post Reply