Помогите отладить скрипт!

Ask for help

Moderators: Murderator+, Murderator

Post Reply
psy-maniac
Posts: 5
Joined: 2008-09-22 12:59:11

Помогите отладить скрипт!

Post by psy-maniac »

Работает минут 5 и выдает ошибку ! помогите отредактировать плиз! для шарда ДРВ!

Code: Select all

sub LegsBS() 
VAR Sunduk1=0x40188EAF ;Мешки инги (пустые)
VAR Sunduk2=0x40339B63 ;Складываем мешки с ногами
VAR IngCount=100 ;Остатток ингов в сундуке
VAR MaxItem=75 ; Колво ног в мешке
VAR Item,Exit=0,Meshok,IngName,i,Color
DIM Ing[17]

Ing[0]="Rusty"
Ing[1]="copper"
Ing[2]="Dull Copper"
Ing[3]="Old Copper"
Ing[4]="Bronze"
Ing[5]="Silver"
Ing[6]="Gold"
Ing[7]="Shadow"
Ing[8]="Rose"
Ing[9]="Agapite"
Ing[10]="Blood Rock"
Ing[11]="Verite"
Ing[12]="Valorite"
Ing[13]="Mytheril"
Ing[14]="Black Rock"
Ing[15]="Obsidian"
Ing[16]="Plutonium"

   UO.Print("Âûáåðè èíãè")
   UO.AddType('FullarmING')
   While UO.Targeting()
      wait(500)
   wend
   UO.DeleteJournal()
   Color=UO.GetColor('lasttarget')
   UO.Click('lasttarget')
   while NOT UO.InJournal("ngot") AND NOT UO.InJournal("Shadow")
      wait(500)
   wend

   for i=0 to 16
      If UO.InJournal(Ing[i]) then
         IngName=Ing[i]
         If IngName=="Shadow" then
            IngName="Shadow"
        endif
      endif
   next
   If IngName=="Bronze" then
      MessageBox("Èç ýòîé ðóäû êîâàòü íåëüçÿ")
      UO.Exec('terminate all')       
   endif

   while Exit<>1
      Item=0
      UO.UnsetCatchBag()
      repeat
         UO.FindType('0x0E76',-1,Sunduk1)
         If UO.GetQuantity('finditem')<1 then
            Exit=1
            goto End
         Else
            UO.Moveitem('finditem',1,Sunduk2)
            UO.DeleteJournal()
            UO.Click('finditem')
            wait(3000)
            while NOT UO.InJournal("items")
               wait(500)
            wend
         Endif
      until UO.InJournal("(0 items)")
        Meshok=UO.GetSerial('finditem')
      wait(1500)
      UO.SetCatchBag(Meshok)
      repeat
         If UO.Count('FullarmING',Color)<30 then
            UO.UnsetCatchBag()
            UO.FindType('FullarmING',Color,Sunduk1)
            If UO.GetQuantity('finditem')<IngCount then
               Exit=1
               goto End
            else
               UO.Grab('500','finditem')
               wait(1500)
               UO.SetCatchBag(Meshok)
            Endif
         Endif
         CheckLag()   
         UO.CancelMenu()
         UO.AutoMenu(IngName+' Plate','Platemail Legs')
         UO.AutoMenu(IngName+' Armor','Plate')
         UO.AutoMenu('Colored','Armor')
         UO.AutoMenu('Blacksmithing','Colored')
         UO.DeleteJournal()
         UO.UseType('FullarmING',Color)
         while NOT UO.InJournal("You put") AND NOT UO.InJournal("You have failed")
           
         wend
         If UO.InJournal("You put") then
          wait(800)
            Item=Item+1
            UO.Print("Çàïîíåíèå ìåøêà: "+STR(Item)+" èç "+STR(MaxItem))
         Endif
      until Item==MaxItem
   End:
   wend
end sub
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

Чего он ваще делать должен обьясни?
psy-maniac
Posts: 5
Joined: 2008-09-22 12:59:11

Post by psy-maniac »

Кгда запускаем скрипт, он просит указать руду из которой куем!
потом он берет из одного мешка , где лежат инги и мешочки для готового продукта, 1 мешочек кидает его в другой сундук затем берет 500 ингов, и кует туловище....как только в мешочке стало айтемов больше 75 он берет другой пустой мешок и так далее......

Но поработав 5-10 минут вышибает его клиент виснет! в чем проблема не догоню никак!
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

А что там за хитрые манипуляции с шедовом, и почему на бронзе он должен остановиться, и даж не просто остановиться, а все скрипты нах... отрубить? И куёт он не туловища, а плейтмейл ноги...
psy-maniac
Posts: 5
Joined: 2008-09-22 12:59:11

Post by psy-maniac »

В мешке с ингами лежат разные инги и если он наткнется на бронзу то поидее вырубает....ну значит шадоу закончилось! Да в эом ноги кует...я переделал под туловища свой...сори !
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

У тебя он так сделан, что если ты в любую другую руду, кроме шедова ткнёшь, скрипт повиснет на цикле ожидания

Code: Select all

   while NOT UO.InJournal("ngot") AND NOT UO.InJournal("Shadow") 
      wait(500)
   wend
. Вот это ваще зачем, непонятно

Code: Select all

         If IngName=="Shadow" then 
            IngName="Shadow"
        endif
типа если переменная IngName имеет значение Shadow, то опять присвоить ей значение Shadow, вдруг она сомневается :D . Вместо UO.Exec('terminate all') лучше использовать Return. На ДРВ после команды UO.Moveitem надо втыкать паузу, я ставлю 1000 мс, потому что сервак проверяет, за какое время была перемещена вещь, и может выдать сообщение Can't pick up this и вещь не переместится.

Code: Select all

       UO.UseType('FullarmING',Color) 
         while NOT UO.InJournal("You put") AND NOT UO.InJournal("You have failed")
           
         wend
Тут пустой цикл, воткни wait(500), вообще, помоему лучше использовать

Code: Select all

repeat 
wait(500)
until uo.injournal('You put|You have failed')
Проглюки бывают разные, так хоть одна пауза будет полюбому. Теперь, когда ты устанавливаешь приёмный контейнер командой UO.SetCatchBag(Meshok) и куёшь, предмет падает сначала в пак, потом инжа пытается его перекинуть в мешок, обычно сервак ругается, что ты слишком быстро двигаешь предметы и оставляет предмет в паке, так что тож надо или паузу втыкать или ваще отказаться от UO.SetCatchBag, а использовать UO.Moveitem .
psy-maniac
Posts: 5
Joined: 2008-09-22 12:59:11

Post by psy-maniac »

Такс щас проверим =)! спасибо за советы! *beer*
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

В своих предидущих глубокомысленнейших умозаключениях :lol: допустил грубейшую ошибку :oops:

Code: Select all

   while NOT UO.InJournal("ngot") AND NOT UO.InJournal("Shadow") 
      wait(500)
   wend
Если разобрать на пальцах, как работает эта конструкция, то бишь цикл ожидания. Цикл крутится, пока в журнале инжи не появится строка, содержащая ngot или Shadow. Пока этих строк нету, выражения UO.InJournal("ngot") и UO.InJournal("Shadow") равны 'false', т.е. ноль, соответственно их инверсии, т.е. NOT UO.InJournal("ngot") и NOT UO.InJournal("Shadow") равны единицам, между собой они сравниваются булевским И (and), и в результате получаем 1 and 1 (1&1) =1 - цикл крутится и ждёт...у моря погоды. Как только в журнале появляется та или другая искомые строки, или даже обе вместе, выражение принимает вид 1 & 0 = 0, 0 & 1 = 0 или же 0 & 0 = всё равно ноль! Цикл завершается и скрипт катится дальше. В твоём случае, значит, если в журнале появится ngot или Shadow или даже обе эти надписи вместе, скрипт срывается с цикла и шпарит дальше вполный рост. Отсюда напрашивается вопрос, нафига там ваще нужна проверка на шедов, ткни в любую другую руду и ожидание закончилось. Вот, собсно, и всё, пошёл дальше пиво пить...
Post Reply