Yoko

All sides of Injection
It is currently 2024-04-26 17:48:32

All times are UTC+02:00




Post new topic  Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 2005-01-27 00:29:24 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Сразу оговорюсь, писалось под шард Цитадель. А так, все подробности в комментариях:

Code:
#####################################################################
; Veterinary. v.1.08b (c) Edred
;
sub Veterinar()
; Ставим рядом двух чаров, у каждого по лошади. Рядом с чарами
; сундук. В сундук чистые бинты. Сериалы лошадей каждому в скрипт.
; Стравливаем лошадей (можно использовать скрипт provocat2.sc) и
; качаемся. Внимание! При низком скилле за работой скрипта надо
; следить (одним чаром, вытащив на экран статусы обоих лошадей) и
; периодически садиться на лошадь и отъезжать в сторону, слезать с нее
; и давать обоим чарам вылечить лошадей полностью. После 40-45 скилла
; нужда в этом отпадает (скилл растет быстро).
;
   VAR Sunduk = '0x4048E250'       ; Сериал сундука с бинтами и медом
   VAR Bandag = '0x0E21'          ; Тип бинтов
   VAR BlBandag = '0x0E20'         ; Тип грязных бинтов
   VAR Horse1 = '0x0040F759'      ; Сериал лошади ЭТОГО чара
   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'
   VAR k
   UO.UseObject( Sunduk )
   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
      If UO.GetHP( Horse1 ) < UO.GetMaxHP( Horse1 ) Then
         DeleteJournal( fizzle )
         DeleteJournal( success )
         DeleteJournal( mustwait )
         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)
      Else
         wait(500)
      Endif
   Wend
endsub

sub Provocat2()
;
; Для провокации вам в паке необходим муз.инструмент!
;
   VAR ser1, ser2
   VAR Horse1 = '0x00C8', Horse2 = '0x00E2'
   UO.Set( 'finddistance', '2' )
   UO.FindType( Horse1, '-1', '1' )
   If UO.FindCount() == 0 Then
      UO.FindType( Horse2, '-1', '1' )
      If UO.FindCount() == 0 Then
         UO.Print( 'Horse 1 not found!' )
         return
      Endif
   Endif
   ser1 = UO.GetSerial( 'finditem' )
   UO.Print( ser1 )
   UO.Ignore( 'finditem' )
   UO.FindType( Horse1, '-1', '1' )
   If UO.FindCount() == 0 Then
      UO.FindType( Horse2, '-1', '1' )
      If UO.FindCount() == 0 Then
         UO.Print( 'Horse 2 not found!' )
         UO.IgnoreReset()
         return
      Endif
   Endif
   ser2 = UO.GetSerial( 'finditem' )
   UO.Print( ser2 )
   UO.IgnoreReset()
   UO.WaitTargetObject( ser1, ser2 )
   UO.UseSkill( 'Provocation' )
endsub


Top
   
 Post subject:
PostPosted: 2005-01-27 13:11:02 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
ВЕТЕРИНАРИЯ 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! :wink:


Last edited by Edred on 2005-01-30 01:22:34, edited 2 times in total.

Top
   
 Post subject:
PostPosted: 2005-01-30 01:23:40 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Можете отправлять в раздел Scripts! - Ветеринарию на этих скриптах успешно вкачал до ГМа.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 3 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: Google [Bot] and 34 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited