Page 1 of 1

Поднять предмет с пола и засунуть в стек.... [нид хелп]

Posted: 2005-06-09 00:23:13
by Ph0en1x
Помогите намутить что-то типа massmove, только чтоб подмимало с земли и засовывало в стек... (массмов из бекпака в стек сует без проблем, а вот с земли... :( )

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

Posted: 2005-06-09 02:26:29
by flake
Лови.

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

Posted: 2005-06-09 12:26:56
by Ph0en1x
Решил немного подправить... :roll:

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

Posted: 2005-06-09 14:13:01
by flake
Тьфу... Все напутал у себя.
Нефиг писать скрипты в 4 утра.

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

Posted: 2005-06-09 21:18:27
by Edred

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
ЗЫ: Требует АСМ любой версии

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

Posted: 2005-06-10 01:11:08
by Ph0en1x
Edred, скрипт не пашет даже в том случае если я перекидываю из одного сундука в другой... перекидывает 1 айтем как положено, а все остальные кидает в бекпак и не стекует...
Да, и до сих пор не научился ловить таргетом землю... :roll:

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

Posted: 2005-06-10 07:50:57
by Edred
Скрипт сделан именно для перекладывания из одного контейнера в другой. То есть на землю или прямо в банк - это не к нему. А вот если в какой-то пак или ящик или сундук на земле или в банке - это пожалуйста. Скрипт абсолютно рабочий, сам пользуюсь уже год, да и есть уже десяток людей, кто тоже пользуется. АСМ стоит? Скрипту он нужен. Может паузу надо чуть увеличить, я же не знаю какие у тебя на шарде зашиты минимальные задержки при перемещении объектов, какой у тебя коннект.

Posted: 2005-06-10 13:39:21
by Ph0en1x
Тестил я скрипт на 2 сумках, в первой были поштучно бутли, во второй стек из двух таких бутлей... - 1 бутыль кидает во вторую сумку не добовляя в стек, а остальные полетели в бекпак... (
АСМ - 501.05, лагов практически нет (городской сервер идет через жирный канал), защиты мин. задержки тож нет (массмув работает без проблем с задержкой 1)

Posted: 2005-06-10 14:10:23
by Edred
Дык для поштучного не очень правильно использовать этот скрипт. Хотя все равно должно работать. Попробуй вот этот:

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

Posted: 2005-06-10 14:52:07
by Ph0en1x
Из контейнера в контейнер перекидывает, но в стек не сует...

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

Posted: 2005-06-10 19:55:03
by Edred
Я тебе дал два скрипта, в первом весьма ясно показано как определять стек и класть в него. Так что дерзай. Я пишу скрипты под себя и не собираюсь подстраивать их фиг знает под какие шарды, где скриптеры не могут нормально прописать складывание предметов.

Posted: 2005-06-10 23:44:33
by Ph0en1x
Фсе! Спасибо обоим, как говорится - с миру по нитке... :)

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

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