ВЕТЕРИНАРИЯ 2
Когда вкачаете скилл до 55-60, имеет смысл перейти на прокачку в одного чара. Я, по крайней мере, перешел и для этого наваял вот такой скриптец:
ЗАМЕЧАНИЕ: В скрипте прописаны только два типа лошадей, так что откорректируйте под те, что вам нужны.
Code:
#####################################################################
; Veterinar2. v.1.03 (c) Edred
;
; Ставим две лошади напротив друг друга, кладем в сундук рядом с чаром
; чистые бинты, мед. Натравливаем при помощи провокации одну лошадь на
; другую и запускаем скрипт. Скрипт контролирует здоровье обеих лошадей
; и, если необходимо, подлечивает их с бинтов. Бинты он берет из сундука
; и туда же скидывает грязные. Скрипт с подкормкой чара и прокачкой
; спирит спик. Скрипт сам определяет сериалы лошадей и сам их провоцирует
; на атаку (если у вас не прокачан скилл Провокация, отключите этот блок -
; он отмечен в коде). Для провоцирования вы должны иметь муз. инструмент
; в паке.
;
sub veterinar2()
VAR Sunduk = '0x4048E250' ; Сериал сундука с бинтами и медом
VAR Bandag = '0x0E21' ; Тип бинтов
VAR BlBandag = '0x0E20' ; Тип грязных бинтов
VAR Horse1, Horse2, k
VAR HorTyp1 = '0x00C8', HorTyp2 = '0x00E2'
VAR fizzle = 'You apply bandages to a horse but fail'
VAR Success = 'You apply the bandages to a horse'
VAR mustwait = 'You must wait to use bandages again'
UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
VAR SpiritTime = UO.Timer()
UO.UseObject( Sunduk )
wait(1000)
### Блок определения сериалов лошадей
UO.Set( 'finddistance', '2' )
UO.FindType( HorTyp1, '-1', '1' )
If UO.FindCount() == 0 Then
UO.FindType( HorTyp2, '-1', '1' )
If UO.FindCount() == 0 Then
UO.Print( 'Horse 1 not found!' )
return
Endif
Endif
Horse1 = UO.GetSerial( 'finditem' )
UO.Print( Horse1 )
UO.Ignore( 'finditem' )
UO.FindType( HorTyp1, '-1', '1' )
If UO.FindCount() == 0 Then
UO.FindType( HorTyp2, '-1', '1' )
If UO.FindCount() == 0 Then
UO.Print( 'Horse 2 not found!' )
UO.IgnoreReset()
return
Endif
Endif
Horse2 = UO.GetSerial( 'finditem' )
UO.Print( Horse2 )
UO.IgnoreReset()
### Блок провоцирования одной лошади на другую. Без ретрейнов - у меня ГМ.
UO.WaitTargetObject( Horse1, Horse2 )
UO.UseSkill( 'Provocation' )
wait(1000)
### Блок прокачки
While UO.SkillVal( 'Veterinary' ) < 1000
If UO.Count( Bandag ) < 10 Then
UO.FindType( Bandag, '-1', Sunduk )
If UO.FindCount() > 0 Then
UO.MoveItem( 'finditem', '200' )
wait(500)
CheckLag()
Else
UO.Print( 'Bandage not found! Script terminated!' )
return
Endif
UO.FindType( BlBandag )
If UO.FindCount() > 0 Then
UO.MoveItem( 'finditem', '0', sunduk )
wait(500)
CheckLag()
Endif
Endif
EatChar( Sunduk, 2, 1, 60 )
If ( UO.Timer() - SpiritTime ) / 600 > 5 Then
; Прошло 5 минут с момента последней прокачки Spirit Speak
SpSpeak()
SpiritTime = UO.Timer()
Endif
If ( UO.GetHP( Horse1 ) < UO.GetMaxHP( Horse1 ) ) OR ( UO.GetHP( Horse2 ) < UO.GetMaxHP( Horse2 ) ) Then
# Здесь я решил организовать так: чар лечит сначала ту лошадь, здоровья у которой меньше. Естественно,
# если одна из лошадей здорова - то у второй меньше здоровья, иначе бы мы в If не вошли.
If UO.GetHP( Horse1 ) < UO.GetHP( Horse2 ) Then
; лечим первую лошадь
DeleteJournal( fizzle )
DeleteJournal( success )
DeleteJournal( mustwait )
UO.Print( 'Veterinary!' )
UO.WaitTargetObject( Horse1 )
UO.UseType( Bandag )
k = 0
repeat
wait(100)
k = k + 1
until UO.InJournal( fizzle ) OR UO.InJournal( success ) OR UO.InJournal( mustwait ) OR k > 30
If UO.InJournal( success ) Then
wait(2500)
Endif
If UO.InJournal( mustwait ) Then
wait(500)
Endif
wait(1500)
Endif
If UO.GetHP( Horse1 ) > = UO.GetHP( Horse2 ) Then
; лечим вторую лошадь
DeleteJournal( fizzle )
DeleteJournal( success )
DeleteJournal( mustwait )
UO.Print( 'Veterinary!' )
UO.WaitTargetObject( Horse2 )
UO.UseType( Bandag )
k = 0
repeat
wait(100)
k = k + 1
until UO.InJournal( fizzle ) OR UO.InJournal( success ) OR UO.InJournal( mustwait ) OR k > 30
If UO.InJournal( success ) Then
wait(2500)
Endif
If UO.InJournal( mustwait ) Then
wait(500)
Endif
wait(1500)
Endif
Else
wait(300)
Endif
Wend
endsub
Функции:Code:
#####################################################################
; ================================================================
; Процедура подкормки чара. Параметры: сериал контейнера с медом, номер
; сообщения до которого кормить, сколько съесть меда после сообщения,
; как часто кормить чара.
; Прохождение последнего периода контролируется через глобальную переменную
; 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
Enjoy!