З.Ы. Не предлагать мувайтем в контейнер... не канает... чтоб добавить в стек нужно именно перащить айтем на айтем того-же типа...
Поднять предмет с пола и засунуть в стек.... [нид хелп]
Moderators: Murderator+, Murderator
Поднять предмет с пола и засунуть в стек.... [нид хелп]
Помогите намутить что-то типа massmove, только чтоб подмимало с земли и засовывало в стек... (массмов из бекпака в стек сует без проблем, а вот с земли...
)
З.Ы. Не предлагать мувайтем в контейнер... не канает... чтоб добавить в стек нужно именно перащить айтем на айтем того-же типа...
З.Ы. Не предлагать мувайтем в контейнер... не канает... чтоб добавить в стек нужно именно перащить айтем на айтем того-же типа...
Лови.
Code: Select all
sub ToMove()
VAR Sunduk = '0x00000000' ; ID сундука, в котором находится стек
VAR Steck = '0x0000' ; тип стека
VAR SteckItem = '0x0000' ; тип вещи, которую будем добавлять в стек
VAR SteckX, SteckY, k
UO.Exec( 'set finddistance 2' )
UO.FindType( Steck, '-1', Sunduk )
SteckX = UO.GetX( 'finditem' )
SteckY = UO.GetY( 'finditem' )
UO.FindType( SteckItem, '-1', '1', SteckX, SteckY ) ;
UO.Print( 'Собираем...' )
k = 0
While UO.FindCount() > 0
UO.MoveItem( 'finditem', '0', Sunduk)
CheckLag()
UO.FindType( SteckItem, '-1', '1' )
k = k + 1
Wend
UO.Print( 'Сбор закончен. Собранно ' +STR( k ) + ' предметов.' )
end subРешил немного подправить...
В нужном сундуке стек находит, извлекает координаты, находит вещи на полу, перетаскиевает, но на нулевые координаты (т.е. в левый верхний угол сундука
)
Как быть?
Code: Select all
sub ToMove()
VAR Sunduk = '0x00000000' ; ID сундука, в котором находится стек
VAR Steck = '0x0000' ; тип стека
VAR SteckItem = '0x0000' ; тип вещи, которую будем добавлять в стек
VAR SteckX, SteckY, k
UO.Exec( 'set finddistance 2' )
UO.FindType( Steck, '-1', Sunduk )
SteckX = UO.GetX( 'finditem' )
SteckY = UO.GetY( 'finditem' )
UO.FindType( SteckItem, '-1', '1' ) ; +++ Убрал отсюда...
UO.Print( 'Собираем...' )
k = 0
While UO.FindCount() > 0
UO.MoveItem( 'finditem', '0', Sunduk, SteckX, SteckY,0) ; +++ ... и вмастил сюда.
Wait(1000)
UO.FindType( SteckItem, '-1', '1' )
k = k + 1
Wend
UO.Print( 'Сбор закончен. Собранно ' +STR( k ) + ' предметов.' )
end subВ нужном сундуке стек находит, извлекает координаты, находит вещи на полу, перетаскиевает, но на нулевые координаты (т.е. в левый верхний угол сундука
Как быть?
Code: Select all
#####################################################################
sub AutoMove()
; Автоматическое перекладывание предметов одного типа и цвета из одного
; контейнера в другой. Поддержка двух режимов - драга на стопку и драга
; на контейнер.
; v.1.04b (c) Edred
VAR MyPause = 600
VAR Type1, Color1, s, n, SerStopka, SumCol = 0
UO.Print( 'Select sending container' )
UO.Exec('addobject TmpCont1')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select targeting container' )
UO.Exec('addobject TmpCont2')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select type for move' )
UO.Exec('addobject TmpObj1')
While UO.Targeting()
Wait(100)
Wend
Type1 = UO.GetGraphic( 'TmpObj1' )
Color1 = UO.GetColor( 'TmpObj1' )
While UO.Targeting()
Wait(100)
Wend
s = ''
s = UO.asmInputString("Задайте размер порции:","500")
If s == '' Then
UO.Print( 'Invalid count of objects!' )
return
Endif
VAR ToDo = UO.asmInputList("Выберите способ:","'Драг в стопку';'Драг на контейнер'")
SerStopka = UO.GetSerial( 'TmpCont2' )
n = val( s )
If n < 0 OR n > 20000 Then
UO.Print( 'Invalid count of objects!' )
return
Endif
repeat
If ToDo == 1 Then
UO.FindType( Type1, Color1, 'TmpCont2' )
If UO.FindCount() > 0 Then
SerStopka = UO.GetSerial( 'finditem' )
Else
SerStopka = UO.GetSerial( 'TmpCont2' )
Endif
Endif
UO.FindType( Type1, Color1, 'TmpCont1' )
If UO.FindCount() > 0 Then
If UO.GetQuantity( 'finditem' ) < n Then
SumCol = SumCol + UO.GetQuantity( 'finditem' )
Else
SumCol = SumCol + n
Endif
UO.MoveItem( 'finditem', str(n), SerStopka )
Wait( MyPause )
CheckLag()
UO.Print( 'I moved ' + str(SumCol) + ' items' )
Else
UO.Print( 'Automove finished' )
Return
Endif
until False
endsubЗЫ: Требует АСМ любой версии
ЗЗЫ: Ничего править в скрипте не надо, он сам предлагает указать прицелом на исходный контейнер, на приемный контейнер, на образец предмета. Потом спросит размер одной порции и способ укладки. Насколько я понимаю - тебе накладывать в банк. Этот скрипт - как раз то, что тебе надо
Скрипт сделан именно для перекладывания из одного контейнера в другой. То есть на землю или прямо в банк - это не к нему. А вот если в какой-то пак или ящик или сундук на земле или в банке - это пожалуйста. Скрипт абсолютно рабочий, сам пользуюсь уже год, да и есть уже десяток людей, кто тоже пользуется. АСМ стоит? Скрипту он нужен. Может паузу надо чуть увеличить, я же не знаю какие у тебя на шарде зашиты минимальные задержки при перемещении объектов, какой у тебя коннект.
Тестил я скрипт на 2 сумках, в первой были поштучно бутли, во второй стек из двух таких бутлей... - 1 бутыль кидает во вторую сумку не добовляя в стек, а остальные полетели в бекпак... (
АСМ - 501.05, лагов практически нет (городской сервер идет через жирный канал), защиты мин. задержки тож нет (массмув работает без проблем с задержкой 1)
АСМ - 501.05, лагов практически нет (городской сервер идет через жирный канал), защиты мин. задержки тож нет (массмув работает без проблем с задержкой 1)
Дык для поштучного не очень правильно использовать этот скрипт. Хотя все равно должно работать. Попробуй вот этот:
Code: Select all
#####################################################################
sub AutoMove2()
; Автоматическое перекладывание некучкующихся предметов одного типа и цвета
; из одного контейнера в другой. Осуществляется драг на контейнер.
; v.1.05b (c) Edred
;
VAR MyPause = 600
VAR Type1, Color1, s, n, SerStopka, SumCol = 0, Howmany='200'
UO.Print( 'Select sending container' )
UO.Exec('addobject TmpCont1')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select targeting container' )
UO.Exec('addobject TmpCont2')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select type for move' )
UO.Exec('addobject TmpObj1')
While UO.Targeting()
Wait(100)
Wend
Type1 = UO.GetGraphic( 'TmpObj1' )
Color1 = UO.GetColor( 'TmpObj1' )
While UO.Targeting()
Wait(100)
Wend
Howmany = UO.asmInputString("Сколько всего переложить?",Howmany)
If Howmany == '' Then
UO.Print( 'Invalid count of objects!' )
return
Endif
repeat
UO.FindType( Type1, Color1, 'TmpCont1' )
If UO.FindCount() > 0 Then
UO.MoveItem( 'finditem', '0', 'TmpCont2' )
Wait( MyPause )
CheckLag()
SumCol = SumCol + 1
If SumCol == val(Howmany) Then
UO.Print( 'Script finished' )
return
Endif
Else
UO.Print( 'Script finished' )
return
Endif
until False
endsubФсе! Спасибо обоим, как говорится - с миру по нитке...
Ищет обьекты на земле на расстоянии 1 клетки и вкладывает в стек, который нужно положить на расстоянии 2 клеток или в стек, находящийся в любом контейнере...
Еще раз всем спасибо
Code: Select all
sub main()
UO.Exec('addobject Stopka')
While UO.Targeting()
Wait(100)
Wend
UO.Exec('set finddistance 1')
repeat
uo.findtype(UO.GetGraphic('Stopka'),UO.GetColor('Stopka'),1)
uo.moveitem('finditem',0,'Stopka',uo.getx('Stopka'),uo.gety('Stopka'),uo.getz('Stopka'))
wait(100)
until uo.findcount()<1
end subИщет обьекты на земле на расстоянии 1 клетки и вкладывает в стек, который нужно положить на расстоянии 2 клеток или в стек, находящийся в любом контейнере...
Еще раз всем спасибо