Page 1 of 1

unhandled exception in parser!

Posted: 2008-09-23 08:16:10
by opex.
Собственно запускаю срипт ветерана на лумбер и через некоторое время вы дает ошибку unhandled exception in parser. Что делать?

Re: unhandled exception in parser!

Posted: 2008-09-23 11:28:05
by Kynep
markyc wrote:Собственно запускаю срипт ветерана на лумбер и через некоторое время вы дает ошибку unhandled exception in parser. Что делать?

Потому что кривоват скрит, нужно поправить. Держи, поправил:

Code: Select all

############################################
### Lumberjacking / Рубка деревьев       ###
############################################
### Шард Dragon World / www.drw.ru       ###
############################################
### Реавтор этого скрипта: BETEPAH       ###
############################################
##################
### Переменные ###
##################
###################################################################################################
var f=file("E:\Games\UO\trees3.dat") ## - Путь к файлу в котором будут хранится координаты деревьев.
###
var TryHiding=1 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var LogsQty=300 ## - Количество логов, добыв которое надо реколиться домой.
###
var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var EatingFood=1 ## 1 - Будем есть, 0 - нет.
###
var SSpeak=0 ## 1 - Будем качать и спирит спик, 0 - не будем.
###
var TypeFood='0x097B' ## - Тип еды которую будем кушать.(сейчас фиштейки)
###
var Chest='0x402E612F' ## - ID сундука куда будут выгружаться логи.
###
var Trytodrop=1 ## Будем пытатся подходить к сундуку или нет.
###
var ContX=2856 ##Координаты X у сундука
###
var ContY=333 ##Координаты Y у сундука
###
var oldX,oldY,time ## - Для рекола.

var Axe = '0x402FBAB3'
var Pickaxe = '0x402f63f6'

###
###########
### Код ###
###########
sub Lumberjacking()
   var i=0,j=0,k=0,r=0,q=0,ii,jj
   var TopX=324,TopY=65
   dim TreeX[5000], TreeY[5000],TreeT[5000]
   dim TreeTile[29]
   var flag=0,treeCount=0,clicks=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.Exec('terminate Reconnector')
   wait(1000)
   UO.Exec('exec Reconnector')
   wait(1000)
   
   #uo.Exec("filterspeech on")
   #uo.Exec("filterspeech add 'Where do you want to use the pickaxe?'")
   
   #uo.Print('Выбери Топор: ')
   #uo.Exec('addobject Axe')
   #while uo.Targeting()
   #wait(100)
   #wend
   
   #####################################
   ### Загружаем координаты из файла ###
   #####################################
   if GetFromFile==1 then
      uo.Print('Загружаем координаты из файла...')
      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()
   else
      ######################################
      ### Собираем координаты из клиента ###
      ######################################
      #uo.Print('Выбери Кирку: ')
      #uo.Exec('addobject Pickaxe')
      #while uo.Targeting()
      #wait(100)
      #wend
      uo.Print('Собираем координаты деревьев в округе...')
      repeat
         clicks=0
         flag=0
         uo.DeleteJournal()
         #######################
         ### Кликаем на тайл ###
         #######################
         uo.UseObject(Pickaxe)
         waitForTarget()
         uo.DeleteJournal()
         WaitForTryRock()
         ###############################
         ### Проверяем дерево ли это ###
         ###############################
         flag=0
         for k=0 to 28
            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 uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() then
            flag=3
         end if
         #########################
         ### Кликнули на ствол ###
         #########################
         if flag==1 then
            flag2=0
            if treeCount>0 then
               for ii=1 to treeCount
                  if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==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)
               TreeT[treeCount]=uo.LastTile(0)
               uo.Print('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))+' '+str(treeCount))
            end if
         end if
         ##########################
         ### Кликнули по листве ###
         ##########################
         if flag==2 then
            flag2=0
            if treeCount>0 then
               for ii=1 to treeCount
                  if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==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)
               TreeT[treeCount]=uo.LastTile(0)-1
               uo.print('Найдено дерево '+str(treeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2)))
            end if
         end if
      until (Flag==3) or (treeCount==500)
      uo.Exec("filterspeech off")
      uo.Print('Анализ закончен, координаты деревьев записаны в файл')
      SaveToFile(treeCount,TreeX,TreeY,TreeT)
   end if
   uo.Print('Деревьев найдено: '+str(treeCount))
   wait(2000)
   ######################################
   ### Ходим по собранным координатам ###
   ######################################
   while 1==1
      if treeCount>0 then
         for i=1 to treeCount
            if Trytodrop==1 and uo.Count('ZLK')>=LogsQty then
               GotoXY(uo.getx(Chest),uo.gety(Chest))
               DropLogs()
            end if
            uo.Print('Идем к дереву '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i]))
            InfoLogs()
            flag=GotoXY(TreeX[i],TreeY[i])
            if flag==1 then
               if TryHiding==1 then
                  ToHide()
               end if
               GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ()))
            end if
         next
      end if
   wend
end sub

Sub GetTree(Type,X,Y,Z)
   var i
   uo.Print('Начинаем рубку дерева...')
   for i=0 to 30
      if uo.Warmode()==1 then
         return 0
      end if
      wait(200)
      uo.DeleteJournal()
      uo.WaitTargetTile(Type,X,Y,Z)
      uo.UseObject(Axe)
      if WaitForChange()==1 then
         return 1
      end if
   next
   return 0
end sub

Sub ToHide()
   if SSpeak==1 then
      UO.Useskill('Spirit Speak')
      wait(3000)
   endif
   while not uo.Hidden()
      uo.Print('Пытаемся уйти в хайд...')
      uo.DeleteJournal()
      uo.UseSkill('Stealth')
      wait(3000)
   wend
   wait(100)
end sub


Sub WaitForHide()
   var Text1=uo.GetName()+": You have hidden yourself well"
   var Text2=uo.GetName()+": You can't seem to hide here."
   var mess
   for var i=0 to 200
      mess=uo.Journal(0)
      if uo.Journal(0)==Text1 then
         return 1
      end if
      if uo.Journal(0)==Text2 then
         return 0
      end if
      wait(50)
   next
   return 0
end sub

Sub WaitForChange()
   var Text1=uo.GetName()+': You hack at the tree for a while, but fail to produce any useable wood.'
   var Text2='There are no logs here to chop.'
   var Text3="You can't reach this."
   var Text4="That is too far away."
   var Text5="You can't do much in your current state."
   var Text6='There is no wood left to harvest.'
   var mess
   for var i=0 to 200
      mess=uo.Journal(0)
      if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 OR uo.Journal(0)==Text6 then
         return 1
      end if
      if uo.Journal(0)==Text1 then
         return 0
      end if
      if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5]=='u' and mess[6]=='t' then
         return 0
      end if
      wait(50)
   next
   return 0
end sub

Sub WaitForTryRock()
   var Text1="That is too far away."
   var Text2="Try mining in rock."
   var Text3="There is no ore here to mine."
   var Text4="You have no line of sight to that location"
   var Text5="You can't see the target"
   for var i=0 to 50
      if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then
         return 1
      end if
      wait(200)
   next
   return 0
end sub

Sub WaitForTarget()
   for var i=0 to 50
      if uo.Targeting()==1 then
         return 1
      end if
      wait(200)
   next
   return 0
end sub

Sub WaitForChangeXY(myX,myY,lastX,lastY)
   for var i=1 to 50
      if lastX<>myX or lastY<>myY then
         return 1
      end if
      wait(200)
   next
   return 0
end sub

sub GotoXY(x,y)
   var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
   for i=1 to 60
      myX=uo.getX();
      myY=uo.getY();
      if LastX==myX and LastY==myY then
         halt=halt+1
      else
         halt=0
      end if
      if halt>=10 then
         if uo.GetDir()==1 then
            for z=0 to 8
               uo.Press(40)
            next
         end if
         if uo.GetDir()==3 then
            for z=0 to 8
               uo.Press(37)
            next
         end if
         if uo.GetDir()==5 then
            for z=0 to 8
               uo.Press(38)
            next
         end if
         if uo.GetDir()==7 then
            for z=0 to 8
               uo.Press(39)
            next
         end if
         halt=15
      end if
      if Numb(x-myX)<=1 and Numb(y-myY)<=2 then
         return 1
      end if
      if x<=myX then
         if y<=myY then
            for z=0 to 3
               uo.Press(38)
            next
         else
            for z=0 to 3
               uo.Press(37)
            next
         end if
      else
         if y<=myY then
            for z=0 to 3
               uo.Press(39)
            next
         else
            for z=0 to 3
               uo.Press(40)
            next
         end if
      end if
      lastX=myX
      lastY=myY
      wait(200)
   next
   return 0
end sub

sub Numb(num)
   if num>=0 then
      return num
   else
      return num*(-1)
   end if
end sub

Sub SaveToFile(treeCount,TreeX,TreeY,TreeT)
   var s=0,i=0
   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 DropLogs()
   uo.say("Выкладываю логи !!! Не беспокоить !!!")
   if uo.Waiting() then
      uo.CancelTarget()
   end if
   var a,Exit
   dim Logs[1]
   Logs[0]=0x1BDD
   uo.Print('Выкладываем Логи.')
   uo.SetReceivingContainer(Chest)
   wait(500)
   for a=0 to 0
      Exit=0
      repeat
         uo.FindType(Logs[a])
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
            GotoXY(ContX,ContY)
         else
            Exit=1
         end if
      until Exit==1
   next
   if EatingFood==1 then
      EatingFood()
   end if
   uo.UnSetReceivingContainer(Chest)
   uo.Print('Логи Выложены.')
end sub


Sub InfoLogs()
   uo.Print('У вас всего '+str(uo.Count('0x1BDD'))+' логов в сумке')
   uo.Print('Из них '+str(uo.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.Count('0x1BDD')-uo.Count('0x1BDD','0x0000'))+' цветных')
end sub

Sub Open(Container)
   uo.DeleteJournal()
   uo.UseObject(Container)
   repeat
      wait(500)
   until uo.InJournal('Contains')
end sub


Sub EatingFood()
   ToEat()
   DropFood()
end sub

Sub ToEat()
   uo.SetReceivingContainer('backpack')
   Open(Chest)
   uo.FindType(TypeFood,'-1',Chest)
   uo.Grab('50','finditem')
   wait(500)
   repeat
      Checklag()
      uo.UseType(TypeFood)
      wait(1000)
   until uo.InJournal('You are simply too full to eat any more!')
   uo.UnsetReceivingContainer()
end sub

Sub DropFood()
   if uo.Waiting() then
      uo.CancelTarget()
   end if
   var f,Exit
   dim Food[1]
   Food[0]=TypeFood
   uo.SetReceivingContainer(Chest)
   wait(500)
   for f=0 to 0
      Exit=0
      repeat
         uo.FindType(Food[f])
         if uo.GetQuantity('finditem')>0 then
            uo.Grab('0','finditem')
            wait(1500)
         else
            Exit=1
         end if
      until Exit==1
   next
   uo.UnSetReceivingContainer(Chest)
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')
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(150000) # WorldSave Protection
         UO.Say('')
         Wait(12000)
         UO.Say('')
         Wait(12000)
         UO.Say('')
         Wait(12000)
         UO.LDblClick(357,164)
         UO.LClick(616,459)
         Wait(12000)
      WEnd
      Wait(3000)
      if (RFlag == 0) and (ReconnectTime <> '0') Then
         UO.Exec('terminate Lumberjacking')
         wait(1000)
         UO.Exec('exec Lumberjacking')
         wait(1000)
         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

Posted: 2008-09-23 12:31:54
by Destruction
Одного топика мало?

viewtopic.php?t=12990&start=0

Posted: 2008-09-23 12:54:53
by Kynep
Destruction wrote:Одного топика мало?
viewtopic.php?t=12990&start=0

Дест, ты не так понял ;) Все нормально, там в скрипте лишний endif есть, вот он и парсит.

Posted: 2008-09-23 13:01:30
by Destruction
В том топике, что я дал ссылку - нет информации о том, что лишний endif - плохо ?

Если нет - то нужно добавить, топик прилепленный, страниц много - там должна быть вся необходимая информация по этой проблеме.

PS: Я всё прекрасно понял - просто зачем покупать по одному кирпичу, если задача построить дом? - Купите оптом - дешевле будет !

Posted: 2008-09-23 13:17:56
by Kynep
Destruction wrote:В том топике, что я дал ссылку - нет информации о том, что лишний endif - плохо ?
Если нет - то нужно добавить, топик прилепленный, страниц много - там должна быть вся необходимая информация по этой проблеме.
PS: Я всё прекрасно понял - просто зачем покупать по одному кирпичу, если задача построить дом? - Купите оптом - дешевле будет !

Перенеси :) ты же наделен такими правами ;)

Posted: 2008-09-23 14:15:07
by Destruction
Один sql-запрос и я админ, только мне это не нужно -) Это, что касается прав, которыми я наделён.

Проблема в том, что модераторский интерфейс phpBB 2 не предусматривает возможности склеивания топиков.

Править базу наживую я не буду, делать мне больше нечего, апгрейдить пхпББ пока тоже не буду.