ВЕТЕРИНАРИЯ 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!
|