Page 1 of 2
небольшой хелп
Posted: 2005-01-16 15:07:47
by maximka4
вобщем такая тема ,нашел я скрипт на тайлоринг и решил его переделать на карпентри, но вот проблемка: чар все замечательно берет логи> и начинает делать удочки> перелаживет в сумку> после этого он должен делать все заново,но он не делает,открывается главное окно крафта и он останавливается. дорогие скриптеры и кто шарит в скриптах помогите если сможите , а то до меня не доходит, вроде же все правельно сделано.
Code: Select all
скрипт переделан с тайлоринга на карпентри, он должен делать следующее: в одном сунуке лежат 10 мешков , в другом кучки бревен по 255 штук в каждой кучке, скрипт берет бревна и делает удочку после этого он кладет ее в сумку и начинает все заного.
Code: Select all
sub main()
sub Mycarpentry()
var Sunduk='0x4023BAD4' ;в этом сундуке 10 сумок
var SundukOFclothes='0x4030408A' ;в этом сундуке лежат кучки по 255 бревен
var cloth='0x1BDD' ;бревна
var SewingKit='0x40241643' ; рубанок
var BodySash='0x0DBF' ;удочки
var exit=0
var i=0
dim SumkaIn[20]
SumkaIn[0]='0x4023BDDF'
SumkaIn[1]='0x4023BB03'
SumkaIn[2]='0x4023C7AB'
SumkaIn[3]='0x4023C481'
SumkaIn[4]='0x40042DC9'
SumkaIn[5]='0x4023CAB1'
SumkaIn[6]='0x4023CAE6'
SumkaIn[7]='0x4023BD0A'
SumkaIn[8]='0x4023BE3A'
SumkaIn[9]='0x4023C354'
UO.WaitMenu ('Carpentry', 'Weapons & Tools', 'Weapons & Tools', 'fishing pole' )
for i=0 to 9
uo.setreceivingcontainer(SumkaIn[i])
repeat
uo.DeleteJournal()
if STR(uo.Count(cloth))<='10' then
exit=1
uo.print('!!!!!!!!')
end if
if STR(uo.Count(cloth))>'10' then
uo.print('There is '+STR(uo.Count(cloth))+' clothes there')
uo.useobject(SewingKit)
uo.findtype(cloth,'-1','backpack')
uo.waittargetobject('finditem')
repeat
wait(100)
until uo.InJournal('You put') OR uo.InJournal('Tailoring failed') OR uo.InJournal('Targeting canceled')
if uo.InJournal('You put') then
uo.findtype(BodySash,'-1','backpack')
uo.Grab('1','finditem')
end if
end if
until exit==1
uo.setreceivingcontainer('backpack')
uo.findtype(cloth,'-1',SundukOFclothes)
uo.Grab('255','finditem')
wait(3000)
exit=0
next
uo.playvaw('C:\uo\music\death.midi')
end sub
Posted: 2005-01-16 19:19:20
by maximka4
помогите скриптеры пожалуста.
Posted: 2005-01-16 20:54:55
by Edred
Моя карпа на удочки из раздела Scripts! не работает?
Posted: 2005-01-17 07:07:12
by maximka4
Edred wrote:Моя карпа на удочки из раздела Scripts! не работает?
она работает ,но как тока наложит в один мешок 255 удочек, не берет следующий мешок, а продолжает ложить в пак к чару. вот такие пироги. (twi включен, оба сундука открыты)
Posted: 2005-01-17 08:00:13
by Edred
Попробуй в моем скрипте в командах Findtype все -1 и 1 написать в кавычках. Кроме того 0 в команде MoveItem тоже возьми в кавычки.
Это у меня, как оказалось, стандартный недочет. В половине скриптов в кавычках, в половине нет. А, оказывается, из-за этого может сбоить.
Отпиши о результатах. Если поможет - поправлю исходный скрипт и скажу Йоко чтобы он проапгрейдил топик.
Posted: 2005-01-17 15:40:35
by maximka4
Edred wrote:Попробуй в моем скрипте в командах Findtype все -1 и 1 написать в кавычках. Кроме того 0 в команде MoveItem тоже возьми в кавычки.
Это у меня, как оказалось, стандартный недочет. В половине скриптов в кавычках, в половине нет. А, оказывается, из-за этого может сбоить.
Отпиши о результатах. Если поможет - поправлю исходный скрипт и скажу Йоко чтобы он проапгрейдил топик.
вроде все праельно поставил, но всеровно не хочет брать мешок.
Code: Select all
sub main()
sub carpentry()
VAR Sunduk1 = '0x4033F60E' ; сундук с пустыми мешками
VAR Sunduk2 = '0x4030408A' ; пустой сундук
VAR Meshok = '0x0E76' ; тип мешка
VAR Logi = '0x1BDD' ; тип логов
VAR Rubanok = '0x1035' ; рубанок
VAR Udochka = '0x0DBF' ; удочка
VAR Kolvo = 255 ;
VAR MeshSer, j, k
While TRUE
UO.FindType( Logi,'-1', '1' ) ; ищем логи на полу
UO.Grab( Str( Kolvo ), 'finditem' ) ; кладем логи в пак
wait( 2000 )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
return
Endif
UO.FindType( Meshok,'-1', Sunduk1 ) ; ищем шешок в сундуке
MeshSer = UO.GetSerial( 'finditem' )
UO.Grab( '1', 'finditem' ) ; кладем его в пак
wait( 2000 )
UO.MoveItem( MeshSer,'0' , Sunduk2 )
wait( 2000 )
While UO.Count( Logi ) > 0
; пока в паке есть логи
UO.Print('Ostalos ' + Str( UO.Count( Logi ) ) + ' logov' )
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitMenu ('Carpentry', 'Weapons & Tools', 'Weapons & Tools', 'fishing' )
UO.UseType( Rubanok )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 30 )
k = k + 1
wait(500)
wend
; Wait( 14000 )
; скрафтили удочку
; перекладываем в мешок
if UO.Count( Udochka ) > 0 then
UO.FindType( Udochka, '-1', 'backpack' )
UO.MoveItem( 'finditem', '0', MeshSer )
wait( 2000 )
UO.Print( 'Udochka perelozhena' )
end if
Wend
Wend
end sub
переделал
Posted: 2005-01-17 16:22:58
by Edred
Кавычки это не скобки, не путай. То есть от тебя ожидалось, что ты напишешь UO.FindType( Logi, '-1', '1' ) и т. д., а не то, что ты наворотил
Posted: 2005-01-17 17:58:23
by maximka4
Edred wrote:Кавычки это не скобки, не путай. То есть от тебя ожидалось, что ты напишешь UO.FindType( Logi, '-1', '1' ) и т. д., а не то, что ты наворотил
спасибо вам что мне помогаете, но все таки у меня все так же осталось.
Posted: 2005-01-17 18:03:55
by Edred
maximka4 wrote:Edred wrote:Кавычки это не скобки, не путай. То есть от тебя ожидалось, что ты напишешь UO.FindType( Logi, '-1', '1' ) и т. д., а не то, что ты наворотил
спасибо вам что мне помогаете, но все таки у меня все так же осталось.
Поэкспериментируй, уменьши кол-во с 255 до 200, есть у меня подозрение, что он у тебя не хочет последнюю удочку класть в мешок, потому и начинает их валить в пак. Вполне вероятно, что в момент запуска скрипта в паке были уже какие-то логи... Также проверь - мешки у тебя все этого типа, может там только один такой, а остальные другие?

Posted: 2005-01-17 18:08:50
by Edred
Кроме того, после этой команды:
Code: Select all
UO.FindType( Meshok,'-1', Sunduk1 ) ; ищем шешок в сундуке
Вставь:
Code: Select all
If UO.FindCount() == 0 Then
UO.Print("Bags not found, script terminated")
return
Endif
Posted: 2005-01-17 20:08:15
by maximka4
Edred wrote:Кроме того, после этой команды:
Code: Select all
UO.FindType( Meshok,'-1', Sunduk1 ) ; ищем шешок в сундуке
Вставь:
Code: Select all
If UO.FindCount() == 0 Then
UO.Print("Bags not found, script terminated")
return
Endif
вобщем он продолжает ложит удочки в мешок где 255 удочек. а так как туда не лезет они падают в пак.
Posted: 2005-01-17 21:23:34
by Ehidna
Во замарота !!
Эксперты вставьте себе его сткрипт да по эксперементиркйте
Выложите рабочий скрипт на удочки плз :)
Posted: 2005-01-17 21:35:49
by maximka4
Ehidna wrote:Во замарота !!
Эксперты вставьте себе его сткрипт да по эксперементиркйте
Выложите рабочий скрипт на удочки плз

ну а ты как хотел(а)?

Posted: 2005-01-17 23:36:16
by Edred
maximka4 wrote:вобщем он продолжает ложит удочки в мешок где 255 удочек. а так как туда не лезет они падают в пак.
Ты вставки сделал которые я запостил? Не вываливается с сообщением что мешки кончились?
Posted: 2005-01-17 23:37:44
by Edred
А вот это, кстати, что такое? И какой ты скрипт запускаешь?

Posted: 2005-01-18 08:21:13
by maximka4
Edred wrote:А вот это, кстати, что такое? И какой ты скрипт запускаешь?

а разве есть разница? дело в том что если даже я уберу
то ведь ничего ж не изметится.
или я не прав ?. а если я буду запускать просто
то у меня будет ошибка (функция main не найдена). небольшой хелп получился в прибольшой.
Posted: 2005-01-18 08:29:42
by maximka4
Edred wrote:maximka4 wrote:вобщем он продолжает ложит удочки в мешок где 255 удочек. а так как туда не лезет они падают в пак.
Ты вставки сделал которые я запостил? Не вываливается с сообщением что мешки кончились?
вставил. вот:
Code: Select all
sub main()
VAR Sunduk1 = '0x4033F60E' ; сундук с пустыми мешками
VAR Sunduk2 = '0x4030408A' ; пустой сундук
VAR Meshok = '0x0E76' ; тип мешка
VAR Logi = '0x1BDD' ; тип логов
VAR Rubanok = '0x1035' ; рубанок
VAR Udochka = '0x0DBF' ; удочка
VAR Kolvo = 255 ;
VAR MeshSer, j, k
While TRUE
UO.FindType( Logi,'-1', '1' ) ; ищем логи на полу
UO.Grab( Str( Kolvo ), 'finditem' ) ; кладем логи в пак
wait( 2000 )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
return
Endif
UO.FindType( Meshok,'-1', Sunduk1 ) ; ищем шешок в сундуке
If UO.FindCount() == 0 Then
UO.Print("Bags not found, script terminated")
return
Endif
MeshSer = UO.GetSerial( 'finditem' )
UO.Grab( '1', 'finditem' ) ; кладем его в пак
wait( 2000 )
UO.MoveItem( MeshSer,'0' , Sunduk2 )
wait( 2000 )
While UO.Count( Logi ) > 0
; пока в паке есть логи
UO.Print('Ostalos ' + Str( UO.Count( Logi ) ) + ' logov' )
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitMenu ('Carpentry', 'Weapons & Tools', 'Weapons & Tools', 'fishing' )
UO.UseType( Rubanok )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 30 )
k = k + 1
wait(500)
wend
; Wait( 14000 )
; скрафтили удочку
; перекладываем в мешок
if UO.Count( Udochka ) > 0 then
UO.FindType( Udochka, '-1', 'backpack' )
UO.MoveItem( 'finditem', '0', MeshSer )
wait( 2000 )
UO.Print( 'Udochka perelozhena' )
end if
Wend
Wend
end sub
Posted: 2005-01-18 10:27:06
by Edred
Дык запусти, убедившись что ТВР включен, что сундуки хоть раз открывались, что финддистанс и дистанс выставлены в 3 например. Далее один кружок присматривай за ним, он же логи отсчитывает, а переменную на количество логов поставь в 200, проследи как он берет новую порцию, берет ли новый мешок...
Поставь перед определением MeshSer ( MeshSer = UO.GetSerial( 'finditem' ) ) команду:
Code: Select all
UO.Print( 'Old bag is ' + MeshSer )
а после определения MeshSer команду:
Code: Select all
UO.Print( 'New bag is ' + MeshSer )
и проследи, сменяется ли серийник мешка...
А потом уже пости сюда результаты тестов, разберемся. Я на этом самом скрипте вкачал себе карпу с 30 до 100.
Posted: 2005-01-18 16:37:21
by maximka4
Edred wrote:Дык запусти, убедившись что ТВР включен, что сундуки хоть раз открывались, что финддистанс и дистанс выставлены в 3 например. Далее один кружок присматривай за ним, он же логи отсчитывает, а переменную на количество логов поставь в 200, проследи как он берет новую порцию, берет ли новый мешок...
Поставь перед определением MeshSer ( MeshSer = UO.GetSerial( 'finditem' ) ) команду:
Code: Select all
UO.Print( 'Old bag is ' + MeshSer )
а после определения MeshSer команду:
Code: Select all
UO.Print( 'New bag is ' + MeshSer )
и проследи, сменяется ли серийник мешка...
А потом уже пости сюда результаты тестов, разберемся. Я на этом самом скрипте вкачал себе карпу с 30 до 100.
вобщемон берет логи и вылетает ошибка line 23: Runtime error - invalid operation for this type. тоесть ему не нравится ета строка:
Code: Select all
UO.Print( 'Old bag is ' + MeshSer )
а если ее убрать то просто показывается id мешка который берется.
Posted: 2005-01-18 18:26:04
by Edred
Сорри. Не подумал о первом круге. До того как серийник первого мешка считан, переменная MeshSer не определена. Поставь в самом начале перед первым циклом):
MeshSer = '0'