Page 1 of 1

Простенький Bowcraft

Posted: 2011-05-11 11:15:58
by sluntai
Народ помогите пожалуйста,поделитесь скриптиком на Bowcraft,нужен простой без наворотов чтобы тупо брал из сундука 7 логов крафтил шафты и обратно в сундук готовые шафты бросал.

Re: Простенький Bowcraft

Posted: 2011-05-11 11:45:43
by Mirage
Прямо как заказывал боукрафт для шарда Forest Wars.
Как вариант вот.
Если будет чтото не так пиши, подредактируем.

PS поиск - шафты - выдал более чем достаточно примеров. ;)

Re: Простенький Bowcraft

Posted: 2011-05-11 14:53:19
by sluntai
Вот этот скрипт логи из мешка берет даже шафты у меня в паке лежали он их в мешок скинул,но вот после того как логи взял встает пишет I can use столько то логов брать их постоянно по 7 штук берет а крафтить не крафтит.

Code: Select all

#####################################################################
; Bowcraft. v.1.03b (c) Edred
;
; ??? ????? ?? ??????? ????, ??????? ?? ??? ?????
; ? ?????????? ??? ????? ? ???? ?? ??????.
; ???? ???? ??????????? - ?????.
; ???? ?????? (??? ??? ?? ??? ???????????) ???????? - 
; ?????? ?????? ??????????? ?? ???? ? ??????? ? ???????
; ? ????.
;
; 1.03b: ????????, ???? Kolvo = 1, ?? ????? ??? ? ?????? ??????? ???
;        ????.
; 
sub bowcraft() 
   VAR Sunduk = '0x400E4262'       ; ?????? ???????
   VAR Logi = '0x1BDD'          ; ??? ?????
   VAR Shafts = '0x1BD4'          ; ??? ??????
   VAR Kolvo = 7               ; ????? ????? ??? ?????? ??????
   VAR k = 0, j, dagger
   dagger = UO.ObjAtLayer( 'Rhand' )
   UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
   While TRUE
      UO.FindType( Logi, -1, Sunduk )   ; ???? ???? ? ???????
      If UO.FindCount() == 0 Then
         UO.Print("Logs not found, script terminated")
         return
      else
         j = UO.GetQuantity( 'finditem' )
         If j > Kolvo Then
            UO.Print( 'I can use ' + str( j ) + ' logs' )
         else
            UO.Print( "I can't use " + str( j ) + " logs" )
            return
         Endif
      Endif
      If Kolvo == 1 Then
         ; v. 1.03
         UO.Grab( '3', 'finditem' )
         wait(500)
         UO.FindType( Logi )
         UO.MoveItem( 'finditem', '2', Sunduk )
         wait(500)
      Else
         UO.Grab( Str( Kolvo ), 'finditem' )
         wait(500)
      Endif
      ; ? ??? - ???????????? ????? ?? ???
      while UO.Count( Logi ) < Kolvo
         wait(100)
      wend
      ; ???????? ?? ??, ??? ? ????? ??-???????? ??????
      If CheckInstr() == 0 Then
         UO.Print("You don't have daggers!" )
         return
      Endif
      UO.DeleteJournal()
      UO.CancelMenu()
      UO.WaitMenu ('What do you want to carve','Shafts' )
      UO.WaitTargetType( Logi )
      UO.UseObject( dagger ) 
      k = 0
      while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
         k = k + 1
         wait(300)
      wend
      If UO.Count( Shafts ) > 0 then
         UO.FindType( Shafts, -1, -1 )
         UO.MoveItem( 'finditem', 0, Sunduk )
         wait(500)
         while UO.Count( Shafts ) > 0
            wait(100)
         wend
         UO.Print( 'Shafts moved' )
      Endif
   Wend
end sub

Sub CheckInstr()
   ; ????????, ???? ?? ? ?????? ???? ?????????? ???? ??
   ; ????, ??? ? ? ?????????? ?????????? instrtype
   ; ???? ??? - ?????? ? ??????? ????? ?????????? ?
   ; ??????? ? ?????? ????.
   VAR typ = UO.GetGlobal( 'instrtype' )
   VAR cur = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
   If typ == cur Then
      return 1
   Endif
   UO.FindType( typ )
   If UO.FindCount() == 0 Then
      return 0
   Endif
   UO.Equip( 'RHand' , 'finditem' )
   wait(1000)
   return 1
endsub

Re: Простенький Bowcraft

Posted: 2011-05-11 16:05:10
by Mirage
Пробуй вот так. Предварительно перед запуском открой сундук с логами и кинжалами (штук 10 на всякий положи).

Code: Select all

	VAR LastTimer, itemm, timemove
	VAR Container	= '0x4042B1A1'	; Сериал сундука
	VAR log		= '0x1BDD'	; Тип логов
	VAR Shafts	= '0x1BD4'	; Тип шафтов
	VAR Instrum	= '0x0F51' 	; Тип кинжалов dagger
	var item 	= Shafts
	var msg 	='You put|положили|fail|не удалось|You broke|сломали'
	var menu	= "waitmenu 'What do you want to carve' 'shaft'" 
	var printcolour = '1069'
sub bowcraft()
	UO.CancelMenu()
	WHILE NOT UO.Dead()
		GET(log, Container, 1, 7) 
		UO.DeleteJournal()
		LastTimer=UO.Timer()
		Repeat
			UO.DeleteJournal()
			LastTimer=UO.Timer()
			UO.exec( menu )
			UO.Waittargettype ( log )
			UO.Usetype( Instrum )
			repeat
				wait( 100 )
			until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
		Until UO.Count( item ) > 0
		checklag()
		PUT(item, Container)
		UO.FindType( item, -1, Container)
		uo.charprint(printcolour,'Сделано: '+Str(UO.GetQuantity('finditem'))) ; если будет ошибка - удалить строку!
	WEND
end sub
Sub GET(item, cont, min, max) ; предмет, откуда, минимум, сколько брать 
	If UO.Count( item ) < min Then
		UO.FindType( item, '-1', cont )
		if UO.FindCount() > 0 Then
			uo.charprint(printcolour,'Сырья в сундуке: '+Str(UO.GetQuantity('finditem')) )  ; если будет ошибка - удалить строку!
			itemM=UO.GetSerial('finditem')
			timemove=UO.Timer()
			while UO.ContainerOf(itemM)==cont && timemove+20>UO.Timer() 
				uo.moveitem('finditem', max, 'backpack')
				wait(300)
			wend
		else
			uo.charprint(printcolour, 'Полностью кончилось сырье' ) ; если будет ошибка - удалить строку!
			UO.CancelMenu()
			MyTerminate()
		endif
	Endif
end sub
Sub PUT(item, cont)
	while UO.Count( item ) > 0
		UO.FindType( item, -1, -1 )
		itemM=UO.GetSerial('finditem')
		timemove=UO.Timer()
		UO.MoveItem( 'finditem', 0, cont )
		while UO.ContainerOf(itemM)=='my' && timemove+20>UO.Timer()
			wait(300)
		wend
	wend
end sub
Sub DeleteJournal(msg)
	While UO.InJournal(msg)
		UO.SetJournalLine(UO.InJournal(msg) - 1,'') 
	wend
endsub
Sub MyTerminate()
	UO.Set('quiet','1')
	UO.CancelMenu()
	UO.IgnoreReset()
	UO.Set('quiet','0')
	UO.Exec('terminate all')
end sub
Sub checklag()
	DeleteJournal("ackpack")
	UO.Click("backpack")
	repeat
		wait(100)
	until UO.InJournal("ackpack")
end sub
Подредактировал. Теперь точно работает.