Поправьте скрипт на переплавку плиз

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Поправьте скрипт на переплавку плиз

Post by ynkemer »

Добрый день. Написал вот такой вот скриптик. Вроде работает, но через какое-то время выдает еррор на линии 35 (такой даже нет в скрипте). Помогите пожалуйста. Это мой первый скрипт.

Code: Select all

sub plavka() 
while not UO.Dead()
var i
var backpack
var Sunduk='0x400b7e27'
var arm='0x1415'



sb:
UO.FindType(arm,'0x0000',Sunduk) ;Cóíäóê ñ èíãàìè
wait(1000)
UO.Grab('1','finditem')
wait(1000)
If UO.GetQuantity('finditem') then
UO.WaitTargetObject('finditem')
UO.UseObject(0x40395596) ; Ôîðæ
wait(1000)
if uo.weight > 500 then
UO.SetReceivingContainer(Sunduk)
wait(200)
UO.FindType('0x1bef')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(200)
end if
UO.UnSetReceivingContainer()
end if
wait(1000)
goto sb
end sub
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Поправьте скрипт на переплавку плиз

Post by Kynep »

Пробуй, я не тестил.

Code: Select all

sub plavka()
   var i
   var backpack
   var Sunduk = '0x400b7e27'
   var arm = '0x1415'
   var forge = '0x40395596'
   
   UO.FindType(arm,'0x0000', Sunduk)
   If UO.FindCount() > 0 then
      repeat
         UO.MoveItem('finditem', '1', 'backpack')
         wait(1000)
         UO.FindType(arm, '0x0000', 'backpack')
         If UO.FindCount() > 0 then
            UO.WaitTargetObject('finditem')
            UO.DeleteJournal()
            UO.UseObject(forge)
            repeat
               wait(100)
            until UO.InJournal('smelt')
            wait(500)
         else
            UO.Print('В паке ничего нет! Стоп!')
            UO.Exec('terminate plavka')
         endif
         if uo.weight > 500 then
            UO.FindType('0x1bef', '-1', 'backpack')
            if UO.FindCount() > 0 then
               repeat
                  UO.MoveItem('finditem', '-1', Sunduk)
                  wait(1000)
                  UO.FindType('0x1bef', '-1', 'backpack')
               until NOT UO.FindCount()
            end if
         end if
         UO.FindType(arm,'0x0000',Sunduk)
      until NOT UO.FindCount()
      UO.Print('В сундуке ничего нет! Стоп!')
      UO.Exec('terminate plavka')
   endif
   UO.Print('В сундуке ничего нет! Стоп!')
   UO.Exec('terminate plavka')
end sub
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Спасибо,мне интересно где в моем ошибка
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

ynkemer wrote:Спасибо,мне интересно где в моем ошибка

Везде. :lol: Это ваш, немного подрихтованный, вот и сравните, где ошибка :D
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Спасибо. Еще такой вопрос. А как можно вписать в скрипт несколько вещей. Я попробовал вот так

Code: Select all

sub plavka()
   var backpack
   var Sunduk = '0x403CBCC6'
   var forge = '0x401D9F47'
   var k
   DIM arm[3]   
   arm[0]=0x1415
   arm[1]=0x13BF
   arm[2]=0x13BE
   uo.UseObject(Sunduk)
   while not uo.Dead()
   for k = 0 to 2
   UO.FindType(arm[k],'0x0000', Sunduk)
   If UO.FindCount() > 0 then
      repeat
         UO.MoveItem('finditem', '1', 'backpack')
         wait(1000)
         UO.FindType(arm[k], '0x0000', 'backpack')
         If UO.FindCount() > 0 then
            UO.WaitTargetObject('finditem')
            UO.DeleteJournal()
            UO.UseObject(forge)
            repeat
               wait(100)
            until UO.InJournal('smelt')
            wait(500)
         else
            UO.Print(' ïàêå íè÷åãî íåò! Ñòîï!')
            UO.Exec('terminate plavka')
         endif
         if uo.weight > 500 then
            UO.FindType('0x1bef', '-1', 'backpack')
            if UO.FindCount() > 0 then
               repeat
                  UO.MoveItem('finditem', '-1', Sunduk)
                  wait(1000)
                  UO.FindType('0x1bef', '-1', 'backpack')
               until NOT UO.FindCount()
            end if
         end if
         UO.FindType(arm[k],'0x0000',Sunduk)
      until NOT UO.FindCount()
      UO.Print(' ñóíäóêå íè÷åãî íåò! Ñòîï!')
      UO.Exec('terminate plavka')
   endif
   UO.Print(' ñóíäóêå íè÷åãî íåò! Ñòîï!')
   UO.Exec('terminate plavka')
end sub

Он видет сколько вещей нужно плавить но после того как заканчиваются вещи arm[1] он останавливает скрипт[/code]
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Code: Select all

for ... to ...
...
...
next

Ничего не забыл?
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Спасибо. Честно говоря, я только учусь работать со скриптами.
Сделал так. Убрал из скрипта terminate и заменил на next. Он успешно плавит вещь 1 типа, потом плавит 1 вещь другого типа и unhalted exception in parser. Не подскажете в чем проблема

Code: Select all

sub plavka()
   var i
   var k
   var backpack
   var Sunduk = '0x4005A13F'
   var forge = '0x401D9F47'
   DIM arm[8]   
   arm[0]='0x1415' #Platemail Пузо
   arm[1]='0x13BF' #Chainmail пузо
   arm[2]='0x1413' #ГОРГЕТКО
   arm[3]='0x1412' #Plate Helm
   arm[4]='0x1414' #Gloves
   arm[5]='0x140C' #Bascinet
   arm[6]='0x1410' #Плечи
   arm[7]='0x13BE' #Chainmail ноги
   arm[8]='0x13BB' #Chainmail БАШКА
   repeat
   uo.UseObject(Sunduk)
   while not uo.Dead()
   for k = 0 to 8
   UO.FindType(arm[k],'0x0000', Sunduk)
   If UO.FindCount() > 0 then
         UO.MoveItem('finditem', '1', 'backpack')
         wait(1000)
         UO.FindType(arm[k], '0x0000', 'backpack')
         If UO.FindCount() > 0 then
            UO.WaitTargetObject('finditem')
            UO.DeleteJournal()
            UO.UseObject(forge)
            repeat
               wait(100)
            until UO.InJournal('smelt')
            wait(500)
     else
            next
         endif
         if uo.weight > 500 then
            UO.FindType('0x1bef', '-1', 'backpack')
            if UO.FindCount() > 0 then
               repeat
                  UO.MoveItem('finditem', '-1', Sunduk)
                  wait(1000)
                  UO.FindType('0x1bef', '-1', 'backpack')
               until NOT UO.FindCount()
            end if
         end if
         UO.FindType(arm[k],'0x0000',Sunduk)
      until NOT UO.FindCount()
    next
   endif
   next
end sub

Огромное спасибо. Вы мне очень помогаете.
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Зачем столько next? :shock:
Достаточно одного в самом конце, после endif, но перед terminate. Который, в свою очередь, удалять не нужно. Предпоследний terminate лучше удалить :oops:
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

вы гений! Спасибо. Все работает. Теперь последний вопрос)) Для идеальности скрипта. Как включить в него цикличность?
Этот скрипт после того как заканчиваются айтемы arm[4] останавливается, даже если добавить новых arm[1-3]
Как это можно исправить?
Огромное спасибо. Вы мне очень помогаете.
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Ну он вроде плавит по очереди все итемы, которые указаны в массиве, т.е. если указано 8 типов, он будет плавить все 8, по очереди до конца, т.е. пока не кончится тип arm[0], он не перейдет на arm[1], я думаю, что когда он дойдет до arm[8] у вас пак пустой будет, зачем цикличность, или я что-то не так понял?
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Такое кол-во веса он и взять не сможет. Он берет из сундука. Просто есть определенное кол-во армора, которое берется из сундука. Чар скупщик делает свое дело гораздо быстрее, чем тот, кто плавит. Соответственно, постоянно происходит пополнение мешка. И после окончания arm[8] он не начинает плавить заново, хотя второй чар уже положил туда достаточное количество брони. Скрипт приходится повторно запускать вручную. На ночь, например, это дело оставить нельзя.
Я обратился к знакомому, он сказал, что я дебил, скрипт кривой и его нужно заново переписывать с 0, чтобы была цикличность. Так ли это?
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Ыыыы, нет конечно, скажи знакомому, что он дибил и сам кривой, а для цикличности добавь

Code: Select all

while not uo.dead()

перед for, в начале скрипта. И wend после next, в конце скрипта, а лучше выложи полный скрипт, мало ли, может там есть ошибки.

З.Ы.Передай знакомому, за "кривой скрипт", сломаю нос :evil: Если такой умный, пускай напишет свой и выложит, мы сравним, грамотей блин. :evil:

З.Ы.Ы. DIM arm[8] нужно исправить на DIM arm[9], итемов то 9 получается, счет с 0 начинается. :wink:

Code: Select all

arm[0]='0x1415' #Platemail Пузо 
arm[1]='0x13BF' #Chainmail пузо
arm[2]='0x1413' #ГОРГЕТКО
arm[3]='0x1412' #Plate Helm
arm[4]='0x1414' #Gloves
arm[5]='0x140C' #Bascinet
arm[6]='0x1410' #Плечи
arm[7]='0x13BE' #Chainmail ноги
arm[8]='0x13BB' #Chainmail БАШКА

Элементов 9 получается, а массив обьявлен на 8.
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Видимо я что-то не правильно сделал. Скрипт плавит, но если армор добавить, то он его не плавит(
Вот сам скрипт

Code: Select all

sub plavka()
   var i
   var backpack
   var Sunduk = '0x40389F20'
   var forge = '0x403EF3F9'
   DIM arm[4]   
   arm[1]=0x1B76
   arm[2]=0x13BF
   arm[3]=0x13BE
   arm[4]=0x140C
   while not uo.dead()
   for i = 1 to 4
   UO.FindType(arm[i],'0x0000', Sunduk)
   If UO.FindCount() > 0 then
      repeat
         UO.MoveItem('finditem', '1', 'backpack')
         wait(1000)
         UO.FindType(arm[i], '0x0000', 'backpack')
         If UO.FindCount() > 0 then
            UO.WaitTargetObject('finditem')
            UO.DeleteJournal()
            UO.UseObject(forge)
            repeat
               wait(100)
            until UO.InJournal('smelt')
            wait(500)
         else
            UO.Print('В паке ничего нет! Стоп!')
            UO.Exec('terminate plavka')
         endif
         if uo.weight > 500 then
            UO.FindType('0x1bef', '-1', 'backpack')
            if UO.FindCount() > 0 then
               repeat
                  UO.MoveItem('finditem', '-1', Sunduk)
                  wait(1000)
                  UO.FindType('0x1bef', '-1', 'backpack')
               until NOT UO.FindCount()
            end if
         end if
         UO.FindType(arm[i],'0x0000',Sunduk)
      until NOT UO.FindCount()
      next
      wend
      UO.Print('В сундуке ничего нет! Стоп!')
      UO.Exec('terminate plavka')
   endif
   UO.Print('В сундуке ничего нет! Стоп!')
   UO.Exec('terminate plavka')
end sub
[/quote]
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

К чему такие загоны?

попробуй так. Берет из сундука любой предмет по 1 итему плавить скидывает инги под ноги.

Code: Select all

sub plavka()
   var i
   var backpack
   var Sunduk = '0x40389F20'
   var forge = '0x403EF3F9'
   
   while not uo.dead()
      UO.FindType(-1,-1, Sunduk)
      If UO.FindCount() > 0 then
         repeat
            UO.MoveItem('finditem', '1', 'backpack')
            wait(1000)
            UO.DeleteJournal()
            UO.WaitTargetObject('finditem')
            UO.UseObject(forge)
            repeat
               wait(100)
            until UO.InJournal('smelt|put|is consumed|fire is not')
            wait(500)
            if uo.weight > 500 then
               UO.FindType('0x1bef', '-1', 'backpack')
               UO.MoveItem('finditem', '-1', 'ground') ; или сундук 2.
               wait(1000)
            end if
            UO.FindType(-1,-1,Sunduk)
         until NOT UO.FindCount()
      endif
      UO.Print('В сундуке ничего нет! Стоп!')
      UO.Exec('terminate plavka')
   wend
end sub
ynkemer
Posts: 23
Joined: 2009-02-14 14:22:37

Post by ynkemer »

Спасибо огромное. Скрипт отлично работает
Post Reply