Page 1 of 1

Lockpicking

Posted: 2005-02-23 00:31:37
by Edred
Опять же, настроено под Цитадель. Два сундука, в одном отмычки, другой бум ломать. В пак ключ от второго сундука. В первый сундук мед. В элементах массивов установить уровни скилла для разных типов отмычек. Работаем.

Code: Select all

#####################################################################
; Lockpicking v.1.01b (c) Edred
;
sub Lockpicking()
	VAR SundukFrom = '0x404CF9CF'
	VAR SundukTarg = '0x401EA0CA'
	VAR KeyTarg = '0x401EA0C9'
	VAR LockType = '0x14FB'
   	UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
	DIM LockColor[3], SkUp[3]
	LockColor[0] = '0x0000'		; айрон
	LockColor[1] = '0x060A'		; дулл купер
	LockColor[2] = '0x0488'		; бронза
	LockColor[3] = '0x08A5'		; золото
	SkUp[0] = 299				; уровень скилла выше которого качать железными отмычками
	SkUp[1] = 499				; уровень скилла выше которого качать медными отмычками	
	SkUp[2] = 499				; уровень скилла выше которого качать бронзовыми отмычками
	SkUp[3] = 599				; уровень скилла выше которого качать золотыми отмычками	
	VAR fizzle = "You can't open this."
	VAR success = "You open this."
	VAR locked = "You close this chest."
	VAR TimeLimit = 3000
	VAR trycount = 0, succount = 0
	VAR i, j, needcolor, k, end
	VAR SpiritTime = UO.Timer()
	UO.UseObject( SundukFrom )
	wait(1000)
	CheckLag()
	while UO.SkillVal( 'Lockpicking' ) < 1000
		If UO.Count( LockType ) == 0 Then
			EatChar( SundukFrom, 6, 2, 120 )
			j = 0
			For i = 0 To 3
				If SkUp[i] < UO.SkillVal( 'Lockpicking' ) Then
					j = i
				Endif
			Next
			needcolor = LockColor[j]
			UO.FindType( LockType, needcolor, SundukFrom )
			If UO.FindCount() == 0 Then
				UO.Print( 'Lockpicks not found. Script terminated' )
				return
			Endif
			If UO.GetQuantity( 'finditem' ) > 100 Then
				UO.Grab( '100', 'finditem' )
			Else
				UO.Grab( 'finditem' )
			Endif
			wait(1000)
			CheckLag()
		Endif
		While UO.Count( LockType ) > 0
			If ( UO.Timer() - SpiritTime ) / 600 > 5 Then
				; Прошло 5 минут с момента последней прокачки Spirit Speak
				SpSpeak()
				SpiritTime = UO.Timer()
			Endif
			trycount = trycount + 1
			UO.Print( 'You have ' + str( UO.Count( LockType ) ) + ' lockpicks.' )
			UO.Print( 'You have ' + str( succount ) + ' success attempt' )
			UO.Print( 'You get ' + str( trycount ) + ' attempt'  )
			DeleteJournal( fizzle )
			DeleteJournal( success )
			UO.WaitTargetObject( SundukTarg )
			UO.UseType( LockType )
			k = 0
			repeat
				wait(100)
				k = k + 1
			until UO.InJournal( fizzle ) OR UO.InJournal( success ) OR k > TimeLimit
			If UO.InJournal( success ) Then
				DeleteJournal( locked )
				succount = succount + 1
				UO.WaitTargetObject( SundukTarg )
				UO.UseObject( KeyTarg )
				repeat
					wait(100)
				until UO.InJournal( locked )
			Endif
		Wend
	Wend
endsub

#####################################################################
; ================================================================
; Процедура подкормки чара. Параметры: сериал контейнера с медом, номер 
; сообщения до которого кормить, сколько съесть меда после сообщения,
; как часто кормить чара.
; Прохождение последнего периода контролируется через глобальную переменную 
; TimeProcess.
;
; ver. 1.07 (c) Edred
;
Sub EatChar( Sunduk, Nom, Add, TimeWait )
	; сообщения при кормежке
	UO.Print( 'TEST: eat to ' + str( Nom ) + ' message and ' + str( Add ) + ' more each ' + str( TimeWait ) + ' minutes' )
	DIM Eat[8]
	Eat[0] = ''
	Eat[1] = 'You eat the food, but are still extremely hungry'
	Eat[2] = 'After eating the food, you fell much less hungry'
	Eat[3] = 'You eat the food, and begin to feel more satiated'
	Eat[4] = 'You are nearly stuffed, but manage to eat the food'
	Eat[5] = 'You fell quite full after consuming the food'
	Eat[6] = 'You are stuffed!'
	Eat[7] = 'You are simply too full to eat any more!'
	VAR Med = '0x09EC'			; тип меда для подкормки
	VAR i, EatC, j, k, flag
	; проверим, пора ли кормиться
	i = Val( UO.GetGlobal( 'TimeProcess' ) )
	i = ( UO.Timer() - i ) / 600 
	If i < TimeWait Then
		; рано кормиться
		UO.Print( 'Eat early! ' + str( i ) + ' from ' + str( TimeWait ) )
		return
	Endif
	If Nom > 0 AND Nom < 8 Then
		EatC = Eat[Nom]
	Else
		EatC = Eat[7]
	Endif
	UO.FindType( Med, '-1', Sunduk )
	If UO.FindCount() == 0 Then
		; мед кончился
		UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
		return
	Endif
	UO.Grab( '60', 'finditem' )
	Wait( 1000 )
	CheckLag()
	For k = 1 To 7
		DeleteJournal( Eat[k] )
	Next
	flag = 0
	If Nom < 7 Then
		UO.UseType( Med )
		Wait( 1000 )
		CheckLag()
		For k = Nom + 1 To 7
			If UO.InJournal( Eat[k] ) Then
				flag = 1
			Endif
		Next
	Endif
	If flag == 0 Then
		repeat
			DeleteJournal( EatC )
			UO.UseType( Med )
			Wait( 1000 )
			CheckLag()
		until NOT UO.InJournal( EatC )
		If Add > 0 Then
			For j = 1 To Add
				UO.UseType( Med )
				Wait( 1000 )
				CheckLag()
			Next
		Endif
	Endif
	; хватит кормиться
	; выгрузим остатки меда обратно
	UO.Findtype( Med, '-1', 'backpack' )
	UO.MoveItem( 'finditem', 0, Sunduk )
	Wait( 1000 )
	CheckLag()
	; Сбросим счетчик
	UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
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

#####################################################################
; Spirit Speak v.1.00b (c) Edred
;
; Разовая прокачка спирит спика. Предназначена для вызова из других скриптов.
;
sub SpSpeak()
	VAR mod = UO.WarMode(), num
	VAR fizzle = 'You fail your attempt'
	VAR success = 'You establish a connection'
	UO.WarMode( 0 )
	DeleteJournal( success )
	repeat
		DeleteJournal( fizzle )
		UO.UseSkill( 'Spirit Speak' )
		num = 1
		repeat
			wait(100)
			num = num + 1
		until UO.InJournal( fizzle ) OR UO.InJournal( success ) OR num > 600
	until UO.InJournal( success )
	UO.WarMode( mod )
endsub

Posted: 2005-07-11 10:31:05
by rambos
ПРивет , а для ДРВ шарда у вас нету скрипта на ЛЮК ПИКИНГ?

Posted: 2005-07-11 10:35:07
by kexwer
rambos wrote:ПРивет , а для ДРВ шарда у вас нету скрипта на ЛЮК ПИКИНГ?

У нас он не работает!!!!