Page 1 of 1

Cooking для соседнего раздела

Posted: 2004-10-24 16:00:12
by Edred

Code: Select all

#===================================================================#
# COOKING                                                           #
#===================================================================#
#   v.1.05b (с) Edred                                               #
#===================================================================#
;
; Встаем рядом среколлкой на базе, рядом с чаром в АМЗ ставим сундук или
; ящик. В него раскладываем много кучек хвороста не больше чем по 500
; в кучке (иначе чар не сможет взять 1 шт.) и кладем несколько стопок стейков
; (можно по 10к в стопке). Можно туда же добавить меда - уберите комментарий
; с EatChar() и добавьте эту функцию.
; Берем из сундука 1 шт хвороста, кладем в координаты TX, TY и зажигаем ее.
; Потом берем 1 шт. стейков из этого же сундука и жарим
; на костре или углях. При этом перед жаркой проверяем, есть ли в
; вокруг чара огонь или угли. если есть жарим, иначе опять жгем костер.
; Готовый стейк скидывается в этот же сундук.
;
; Перед разжиганием костра проверяем, прошло ли 5 минут с момента последней
; попытки прокачать Spirit Speak, если прошло - качаем.
;
sub cooking()
	VAR Sunduk = '0x40591B82'
	VAR Hvorost = '0x0DE1'
	VAR Koster = '0x0DE3'
	VAR Ugli = '0x0DE9'
	VAR Fish = '0x097A'
	VAR FishGot = '0x097B'
	VAR TX = 1873
	VAR TY = 387
	VAR i, flag
;	VAR SpiritTime = UO.Timer()
	UO.CancelTarget()
	UO.Exec( 'set finddistance 3' )
;   	UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
	UO.UseObject( Sunduk )
	While UO.SkillVal( 'Cooking' ) < 1000
;		EatChar( Sunduk, 2, 1, 120 )
; ----------------------------------
; блок запуска прокачки Spirit Speak
;		If ( UO.Timer() - SpiritTime ) / 600 > 5 Then
;			; Прошло 5 минут с момента последней прокачки Spirit Speak
;			SpSpeak()
;			SpiritTime = UO.Timer()
;		Endif
; ----------------------------------
		wait(1000)
		UO.FindType( Hvorost, -1, Sunduk )
		If UO.FindCount() == 0 Then
			UO.Print( 'No kindling found. Script terminated' )
			return
		Endif
		UO.MoveItem( 'finditem', '1', 'ground', str(TX), str(TY), str(UO.GetZ()) )
		wait(1000)
		CheckLag()
		UO.Findtype( Hvorost, -1, 1 )
		If UO.FindCount() > 0 Then
			repeat
				UO.UseFromGround( Hvorost )
				wait(1000)
				UO.FindType( Koster, -1, 1 )
			until UO.FindCount() > 0
			; костер горит
			flag = 1
			repeat
				; взять из сундука 1 стейк
				If UO.Count( Fish ) == 0 Then
					UO.FindType( Fish, -1, Sunduk )
					If UO.FindCount() == 0 Then
						UO.Print( 'No fish steaks found. Script terminated' )
						return
					Endif
					UO.Grab( '1', 'finditem' )
					wait(1000)
					CheckLag()
				Endif
				; теперь проверим не погас ли костер, не исчезли ли угли
				UO.FindType( Koster, -1, 1 )
				If UO.FindCount() <> 0 Then
					; еще горит костер - жарим на нем стейк
					If UseSteake( Fish, UO.GetSerial('finditem') ) Then
						flag = 0
					Endif
					; стейк готов
				Else
					UO.FindType( Ugli, -1, 1 )
					If UO.FindCount() <> 0 Then
						; есть еще угли!
						if UseSteake( Fish, UO.GetSerial('finditem') ) then
							flag = 0
						endif
					Else
						flag = 0
					Endif
				Endif
				If UO.Count( FishGot ) > 0 Then
					UO.FindType( FishGot )
					UO.MoveItem( 'finditem', -1, Sunduk )
					wait(1000)
					CheckLag()
				Endif
			until flag == 0
		Endif
	Wend
endsub

Sub UseSteake( fish, koster )
	VAR msg1 = 'You burn the food'				; физл
	VAR msg2 = 'You put the fish steak'			; успех
	VAR msg22 = 'You put the fish steaks'		; успех
	VAR msg3 = 'You must wait'					; ждать
	VAR msg4 = "You can't see the target"
	repeat
		DeleteJournal (msg1 )
		DeleteJournal (msg2 )
		DeleteJournal (msg22 )
		DeleteJournal (msg3 )
		DeleteJournal (msg4 )
		UO.WaitTargetObject( 'finditem' )
		UO.UseType( Fish )
		repeat
			wait(500)
		until UO.InJournal(msg1) OR UO.InJournal(msg2) OR UO.InJournal(msg22) OR UO.InJournal(msg3) OR UO.InJournal(msg4)
		if UO.InJournal(msg4) then
			return 1
		endif
		if UO.InJournal(msg3) then
			wait(500)
		endif
	until UO.InJournal(msg2) OR UO.InJournal(msg22)
	return 0
endsub

#####################################################################
Sub CheckLag()
	DeleteJournal( 'backpack' )
	UO.Click( 'backpack' )
	repeat
		wait(100)
	until UO.InJournal( 'backpack' )
	return
end sub

#####################################################################
Sub DeleteJournal( string1 )
	VAR nom = UO.InJournal( string1 )
	If nom > 0 Then
		UO.SetJournalLine( Nom - 1, 'string replaced' )
		DeleteJournal( string1 )
	Endif
endsub

Posted: 2004-10-24 16:14:15
by AGRS
Мысли автору на заметку.

Вынести кукинг в в одну функцию, а подготовку инструмента (костра) в другую. Функция кукинга должна принимать в качестве параметра серийник инструмента.

Это добавит скрипту универсальность и позволит легко адаптировать к шардам. Например у нас на ДРВ разумнее будет использовать форжу из рюкзака. Поскольку кемпинг и на х не нужен. :)

Posted: 2004-10-24 16:17:34
by Edred
Я уже вкачал до ГМа, поэтому вероятность переделки скрипта мною бесконечно мала... :)