Yoko

All sides of Injection
It is currently 2025-12-20 15:28:00

All times are UTC+02:00




Post new topic  Reply to topic  [ 12 posts ] 
Author Message
PostPosted: 2005-06-09 00:23:13 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Помогите намутить что-то типа massmove, только чтоб подмимало с земли и засовывало в стек... (массмов из бекпака в стек сует без проблем, а вот с земли... :( )

З.Ы. Не предлагать мувайтем в контейнер... не канает... чтоб добавить в стек нужно именно перащить айтем на айтем того-же типа...


Top
   
 Post subject:
PostPosted: 2005-06-09 02:26:29 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Лови.

Code:
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


Top
   
 Post subject:
PostPosted: 2005-06-09 12:26:56 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Решил немного подправить... :roll:

Code:
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


В нужном сундуке стек находит, извлекает координаты, находит вещи на полу, перетаскиевает, но на нулевые координаты (т.е. в левый верхний угол сундука :( )
Как быть?


Top
   
 Post subject:
PostPosted: 2005-06-09 14:13:01 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Тьфу... Все напутал у себя.
Нефиг писать скрипты в 4 утра.

Хм, интересно, почему не работает.
А тебе подойдет, если стек будет лежать на полу около чара?


Top
   
 Post subject:
PostPosted: 2005-06-09 21:18:27 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Code:
#####################################################################
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


ЗЫ: Требует АСМ любой версии

ЗЗЫ: Ничего править в скрипте не надо, он сам предлагает указать прицелом на исходный контейнер, на приемный контейнер, на образец предмета. Потом спросит размер одной порции и способ укладки. Насколько я понимаю - тебе накладывать в банк. Этот скрипт - как раз то, что тебе надо :lol:


Top
   
 Post subject:
PostPosted: 2005-06-10 01:11:08 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Edred, скрипт не пашет даже в том случае если я перекидываю из одного сундука в другой... перекидывает 1 айтем как положено, а все остальные кидает в бекпак и не стекует...
Да, и до сих пор не научился ловить таргетом землю... :roll:

flake, если стек будет на полу - тож подойдет... :)


Top
   
 Post subject:
PostPosted: 2005-06-10 07:50:57 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Скрипт сделан именно для перекладывания из одного контейнера в другой. То есть на землю или прямо в банк - это не к нему. А вот если в какой-то пак или ящик или сундук на земле или в банке - это пожалуйста. Скрипт абсолютно рабочий, сам пользуюсь уже год, да и есть уже десяток людей, кто тоже пользуется. АСМ стоит? Скрипту он нужен. Может паузу надо чуть увеличить, я же не знаю какие у тебя на шарде зашиты минимальные задержки при перемещении объектов, какой у тебя коннект.


Top
   
 Post subject:
PostPosted: 2005-06-10 13:39:21 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Тестил я скрипт на 2 сумках, в первой были поштучно бутли, во второй стек из двух таких бутлей... - 1 бутыль кидает во вторую сумку не добовляя в стек, а остальные полетели в бекпак... (
АСМ - 501.05, лагов практически нет (городской сервер идет через жирный канал), защиты мин. задержки тож нет (массмув работает без проблем с задержкой 1)


Top
   
 Post subject:
PostPosted: 2005-06-10 14:10:23 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Дык для поштучного не очень правильно использовать этот скрипт. Хотя все равно должно работать. Попробуй вот этот:

Code:
#####################################################################
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


Top
   
 Post subject:
PostPosted: 2005-06-10 14:52:07 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Из контейнера в контейнер перекидывает, но в стек не сует...

З.Ы. я же писал в самом первом посту, что обычный мувайтем в контейнер не пашет, чтоб добавить в стек - нужно перетащить айтем на айтем или на стек...


Top
   
 Post subject:
PostPosted: 2005-06-10 19:55:03 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Я тебе дал два скрипта, в первом весьма ясно показано как определять стек и класть в него. Так что дерзай. Я пишу скрипты под себя и не собираюсь подстраивать их фиг знает под какие шарды, где скриптеры не могут нормально прописать складывание предметов.


Top
   
 Post subject:
PostPosted: 2005-06-10 23:44:33 
Offline
User avatar

Joined: 2004-12-23 20:18:24
Posts: 7
Фсе! Спасибо обоим, как говорится - с миру по нитке... :)

Code:
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 клеток или в стек, находящийся в любом контейнере...

Еще раз всем спасибо :D


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 12 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited