
autoload.sc (чуть-чуть покоцал, выкинул мелочевку)
Code: Select all
# #
# AutoLoad.sc, ver 507.050 (c) Edred #
# #
#####################################################################
#####################################################################
; ScrollSort v.1.00 (c) Edred
;
; Запоминает все спеллбуки в первом контейнере и потом по очереди драгает
; все скроллы, которые находит в этом же контейнере на все спеллбуки. Если
; спелл не подгружается в спеллбуку - пробует подгрузить в следующую
; спеллбуку и т.д. Если спелл есть уже во всех спеллбуках - скидывает его
; во второй контейнер.
:
sub ScrollSort()
VAR Spellbk = '0x0EFA', i, j, temptyp, tempob, tempnam
; DIM Scrolls[64]
; Scrolls[0] = '' ; 1: Clumsy
; Scrolls[1] = '' ; 1: Create Food
; Scrolls[2] = '' ; 1: Feeblemind
; Scrolls[3] = '0x1F31' ; 1: Heal
; Scrolls[4] = '0x1F32' ; 1: Magic Arrow
; Scrolls[5] = '0x1F33' ; 1: Night Sight
; Scrolls[6] = '' ; 1: Reactive Armor
; Scrolls[7] = '0x1F34' ; 1: Weaken
; Scrolls[8] = '' ; 2: Agility
; Scrolls[9] = '' ; 2: Cunning
; Scrolls[10] = '0x1F37' ; 2: Cure
; Scrolls[11] = '0x1F38' ; 2: Harm
; Scrolls[12] = '0x1F39' ; 2: Magic Trap
; Scrolls[13] = '0x1F3A' ; 2: Magic Untrap
; Scrolls[14] = '' ; 2: Protection
; Scrolls[15] = '' ; 2: Strength
; Scrolls[16] = '0x1F3D' ; 3: Bless
; Scrolls[17] = '0x1F3E' ; 3: Fireball
; Scrolls[18] = '0x1F3F' ; 3: Magic Lock
; Scrolls[19] = '0x1F40' ; 3: Poison
; Scrolls[20] = '0x1F41' ; 3: Telekinesis
; Scrolls[21] = '' ; 3: Teleport
; Scrolls[22] = '' ; 3: Unlock
; Scrolls[23] = '0x1F44' ; 3: Wall of Stone
; Scrolls[24] = '' ; 4: Arch Cure
; Scrolls[25] = '' ; 4: Arch Protection
; Scrolls[26] = '' ; 4: Curse
; Scrolls[27] = '0x1F48' ; 4: Fire Field
; Scrolls[28] = '' ; 4: Greater Heal
; Scrolls[29] = '' ; 4: Lightning
; Scrolls[30] = '' ; 4: Mana Drain
; Scrolls[31] = '0x1F4B' ; 4: Recall
; Scrolls[32] = '' ; 5: Blade Spirit
; Scrolls[33] = '' ; 5: Dispel Field
; Scrolls[34] = '0x1F4F' ; 5: Incognito
; Scrolls[35] = '' ; 5: Magic Reflection
; Scrolls[36] = '' ; 5: Mind Blast
; Scrolls[37] = '0x1F52' ; 5: Paralyze
; Scrolls[38] = '' ; 5: Poison Field
; Scrolls[39] = '0x1F54' ; 5: Summon Creature
; Scrolls[40] = '0x1F55' ; 6: Dispel
; Scrolls[41] = '' ; 6: Energy Bolt
; Scrolls[42] = '0x1F57' ; 6: Explosion
; Scrolls[43] = '0x1F58' ; 6: Invisibility
; Scrolls[44] = '0x1F59' ; 6: Mark
; Scrolls[45] = '0x1F5A' ; 6: Mass Curse
; Scrolls[46] = '' ; 6: Paralyze Field
; Scrolls[47] = '0x1F5C' ; 6: Reveal
; Scrolls[48] = '' ; 7: Chain Lightning
; Scrolls[49] = '' ; 7: Energy Field
; Scrolls[50] = '0x1F5F' ; 7: Flame Strike
; Scrolls[51] = '0x1F60' ; 7: Gate Travel
; Scrolls[52] = '0x1F61' ; 7: Mana Vampire
; Scrolls[53] = '' ; 7: Mass Dispel
; Scrolls[54] = '' ; 7: Meteor Swarm
; Scrolls[55] = '' ; 7: Polymorph
; Scrolls[56] = '0x1F65' ; 8: Earthquake
; Scrolls[57] = '' ; 8: Energy Vortex
; Scrolls[58] = '' ; 8: Resurrection
; Scrolls[59] = '' ; 8: Air Elemental
; Scrolls[60] = '' ; 8: Summon Daemon
; Scrolls[61] = '' ; 8: Earth Elemental
; Scrolls[62] = '0x1F6B' ; 8: Fire Elemental
; Scrolls[63] = '0x1F6C' ; 8: Water Elemental
VAR msg1 = "Can't add this to the spellbook", flag
DIM Spells[10]
For i = 0 To 9
Spells[i] = ''
Next
VAR TmpTyp
UO.Print( 'Select container with scroll for sort' )
UO.Exec('addobject TmpObj1')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select container for trash scrolls' )
UO.Exec('addobject TmpObj2')
While UO.Targeting()
Wait(100)
Wend
UO.IgnoreReset()
UO.TextOpen()
UO.TextClear()
j = 0
repeat
UO.FindType( Spellbk, '-1', 'TmpObj1' )
If UO.FindCount() Then
Spells[j] = UO.GetSerial( 'finditem' )
UO.TextPrint( 'Slot number ' + str(j) + ' = ' + Spells[j] )
UO.Ignore( 'finditem' )
j = j + 1
Endif
until UO.FindCount() == 0 OR j > 9
j = j - 1
repeat
UO.FindType( '-1', '-1', 'TmpObj1' )
If UO.FindCount() > 0 Then
If UO.GetGraphic( 'finditem' ) == Spellbk Then
UO.Ignore( 'finditem' )
Else
temptyp = UO.GetGraphic( 'finditem' )
UO.MoveItem( 'finditem', '1' )
wait(1000)
CheckLag()
UO.FindType( temptyp )
If UO.FindCount() == 0 Then
UO.Print( 'Gluki glukami pogonayayut!' )
Endif
tempob = UO.GetSerial( 'finditem' )
UO.Click( 'finditem' )
wait(500)
CheckLag()
tempnam = UO.GetName( 'finditem' )
flag = 0
For i = 0 To j
DeleteJournal( msg1 )
UO.MoveItem( tempob, '0', Spells[i] )
wait(2000)
CheckLag()
If UO.InJournal( msg1 ) == 0 Then
flag = 1
UO.TextPrint( tempnam + ' (' + temptyp + ') moved to slot number ' + str(i) )
i = j
Endif
Next
If flag == 0 Then
UO.MoveItem( tempob, '0', 'TmpObj2' )
UO.TextPrint( tempnam + ' (' + temptyp + ') moved to container 2' )
Endif
Endif
Else
return
Endif
until UO.FindCount() == 0
endsub
#####################################################################
; NeedGo v.1.02 (c) Edred
;
; Запрашивает координаты и отправляет по ним чара (пешком)
;
sub NeedGo()
VAR s, x, y
s = UO.asmInputString("Введите через пробел координаты:","")
If s == '' Then
UO.Print( 'Invalid coordinates!' )
return
Endif
s = s + ' end '
x = GetWord( s, 1 )
y = GetWord( s, 2 )
GoToTile( val(x), val(y), 1, False )
endsub
#####################################################################
; BegMoney v.1.00 (c) Edred
;
; Скрипт на выпрашивание денег. Слазит с лошади, просит денег у
; ближайшего вендора, садится обратно на лошадь. В случае если
; деньги в паке превысили 699 гп - сообщает, что пора их выгрузить
; в банк. При поиске вендора проверяется глобальная переменная
; LastVendor - если серийник такой же - ищется другой вендор.
;
sub BegMoney()
VAR VendTyp1 = '0x0191'
VAR VendTyp2 = '0x0190'
VAR HorSer = '0x00257883'
VAR VendSer, k, HSer, flag
VAR Dengi = '0x0EED'
VAR dal = 'Here, you can have this'
VAR poslal = "I'm sorry,"
VAR daleko = 'is too far away!'
VAR chasto = 'You must wait to use that skill again.'
UO.Set( 'finddistance', '5' )
#### Блок нахождения 1 или 2 вендоров
UO.Ignore( 'self' )
UO.FindType( VendTyp1, '-1', '1' )
If UO.FindCount() == 0 Then
UO.FindType( VendTyp2, '-1', '1' )
If UO.FindCount() == 0 Then
UO.Print( 'Vendor not found!' )
UO.IgnoreReset()
return
Endif
Endif
VendSer = UO.GetSerial( 'finditem' )
If UO.GetGlobal( 'LastVendor' ) == VendSer Then
UO.Ignore( 'finditem' )
UO.FindType( VendTyp1, '-1', '1' )
If UO.FindCount() == 0 Then
UO.FindType( VendTyp2, '-1', '1' )
If UO.FindCount() == 0 Then
UO.Print( 'Vendor not found!' )
UO.IgnoreReset()
return
Endif
Endif
VendSer = UO.GetSerial( 'finditem' )
Endif
UO.SetGlobal( 'LastVendor', VendSer )
# Найден
HSer = UO.ObjAtLayer( 'Horse' )
If HSer <> '' Then
UO.UseObject( 'self' )
Endif
flag = 0
If UO.Count( Dengi ) > 699 Then
UO.Findtype( Dengi )
If UO.FindCount() > 0 Then
UO.Drophere( 'finditem' )
; wait(500)
CheckLag()
flag = 1
Endif
Endif
repeat
DeleteJournal( dal )
DeleteJournal( poslal )
DeleteJournal( daleko )
DeleteJournal( chasto )
UO.WaitTargetObject( VendSer )
UO.UseSkill( 'Begging' )
k = 0
repeat
wait(100)
k = k + 1
until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR UO.InJournal( chasto ) OR k > 50
If UO.InJournal( chasto ) Then
wait(2000)
Endif
until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR k > 50
If flag == 1 Then
UO.Findtype( Dengi, '-1', '1' )
while UO.FindCount() > 0
UO.Grab( '0', 'finditem' )
wait(00)
CheckLag()
UO.Findtype( Dengi, '-1', '1' )
Wend
Endif
If HSer <> '' Then
UO.UseObject( HorSer )
Endif
UO.Print( 'My gold is ' + str( UO.Count( Dengi ) ) )
UO.IgnoreReset()
endsub
#####################################################################
sub AutoMove()
; Автоматическое перекладывание предметов одного типа и цвета из одного
; контейнера в другой. Поддержка двух режимов - драга на стопку и драга
; на контейнер.
; v.1.04b (c) Edred
VAR MyPause = 600
VAR Type1, Color1, s, n, SerStopka, SumCol = 0
UO.Print( 'Select sending container' )
UO.Exec('addobject TmpCont1')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select targeting container' )
UO.Exec('addobject TmpCont2')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select type for move' )
UO.Exec('addobject TmpObj1')
While UO.Targeting()
Wait(100)
Wend
Type1 = UO.GetGraphic( 'TmpObj1' )
Color1 = UO.GetColor( 'TmpObj1' )
While UO.Targeting()
Wait(100)
Wend
s = ''
s = UO.asmInputString("Задайте размер порции:","500")
If s == '' Then
UO.Print( 'Invalid count of objects!' )
return
Endif
VAR ToDo = UO.asmInputList("Выберите способ:","'Драг в стопку';'Драг на контейнер'")
SerStopka = UO.GetSerial( 'TmpCont2' )
n = val( s )
If n < 0 OR n > 20000 Then
UO.Print( 'Invalid count of objects!' )
return
Endif
repeat
If ToDo == 1 Then
UO.FindType( Type1, Color1, 'TmpCont2' )
If UO.FindCount() > 0 Then
SerStopka = UO.GetSerial( 'finditem' )
Else
SerStopka = UO.GetSerial( 'TmpCont2' )
Endif
Endif
UO.FindType( Type1, Color1, 'TmpCont1' )
If UO.FindCount() > 0 Then
If UO.GetQuantity( 'finditem' ) < n Then
SumCol = SumCol + UO.GetQuantity( 'finditem' )
Else
SumCol = SumCol + n
Endif
UO.MoveItem( 'finditem', str(n), SerStopka )
Wait( MyPause )
CheckLag()
UO.Print( 'I moved ' + str(SumCol) + ' items' )
Else
UO.Print( 'Automove finished' )
Return
Endif
until False
endsub
#####################################################################
sub AutoMove2()
; Автоматическое перекладывание некучкующихся предметов одного типа и цвета
; из одного контейнера в другой. Осуществляется драг на контейнер.
; v.1.05b (c) Edred
;
VAR MyPause = 600
VAR Type1, Color1, s, n, SerStopka, SumCol = 0, Howmany='200'
UO.Print( 'Select sending container' )
UO.Exec('addobject TmpCont1')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select targeting container' )
UO.Exec('addobject TmpCont2')
While UO.Targeting()
Wait(100)
Wend
UO.Print( 'Select type for move' )
UO.Exec('addobject TmpObj1')
While UO.Targeting()
Wait(100)
Wend
Type1 = UO.GetGraphic( 'TmpObj1' )
Color1 = UO.GetColor( 'TmpObj1' )
While UO.Targeting()
Wait(100)
Wend
Howmany = UO.asmInputString("Сколько всего переложить?",Howmany)
If Howmany == '' Then
UO.Print( 'Invalid count of objects!' )
return
Endif
repeat
UO.FindType( Type1, Color1, 'TmpCont1' )
If UO.FindCount() > 0 Then
UO.MoveItem( 'finditem', '0', 'TmpCont2' )
Wait( MyPause )
CheckLag()
SumCol = SumCol + 1
If SumCol == val(Howmany) Then
UO.Print( 'Script finished' )
return
Endif
Else
UO.Print( 'Script finished' )
return
Endif
until False
endsub
#####################################################################
; Флипанье сандстоуновых стен. Автоматический анлок и лок в конце.
; Три варианта задания типа: через переменную, запрос на этот тип и
: прицел на образец (оставлен этот, остальные закомментарены).
; v.1.03b (c) Edred
sub FlipWall()
DIM typwalls[66]
typwalls[1] = '0x0158'
typwalls[2] = '0x0159'
typwalls[3] = '0x015A'
typwalls[4] = '0x015B'
typwalls[5] = '0x015C'
typwalls[6] = '0x015D'
typwalls[7] = '0x015E'
typwalls[8] = '0x015F'
typwalls[9] = '0x0160'
typwalls[10] = '0x0161'
typwalls[11] = '0x0162'
typwalls[12] = '0x0163'
typwalls[13] = '0x0164'
typwalls[14] = '0x0165'
typwalls[15] = '0x0166'
typwalls[16] = '0x0167'
typwalls[17] = '0x0168'
typwalls[18] = '0x0169'
typwalls[19] = '0x0160'
typwalls[20] = '0x016A'
typwalls[21] = '0x016B'
typwalls[22] = '0x016C'
typwalls[23] = '0x016D'
typwalls[24] = '0x016E'
typwalls[25] = '0x016F'
typwalls[26] = '0x0170'
typwalls[27] = '0x0171'
typwalls[28] = '0x0172'
typwalls[29] = '0x0173'
typwalls[30] = '0x0174'
typwalls[31] = '0x0175'
typwalls[32] = '0x0176'
typwalls[33] = '0x0177'
typwalls[34] = '0x0178'
typwalls[35] = '0x0179'
typwalls[36] = '0x017A'
typwalls[37] = '0x017B'
typwalls[38] = '0x017C'
typwalls[39] = '0x017D'
typwalls[40] = '0x017E'
typwalls[41] = '0x017F'
typwalls[42] = '0x0180'
typwalls[43] = '0x0181'
typwalls[44] = '0x0182'
typwalls[45] = '0x0183'
typwalls[46] = '0x0184'
typwalls[47] = '0x0185'
typwalls[48] = '0x0186'
typwalls[49] = '0x0187'
typwalls[50] = '0x0188'
typwalls[51] = '0x0189'
typwalls[52] = '0x018A'
typwalls[53] = '0x018B'
typwalls[54] = '0x018C'
typwalls[55] = '0x018D'
typwalls[56] = '0x018E'
typwalls[57] = '0x018F'
typwalls[58] = '0x0190'
typwalls[59] = '0x0191'
typwalls[60] = '0x0192'
typwalls[61] = '0x0193'
typwalls[62] = '0x0194'
typwalls[63] = '0x0195'
typwalls[64] = '0x0196'
typwalls[65] = '0x01CA'
VAR i, k, s, j, n
##############################################################
; Три варианта указания типа стены для верчения (переменная n)
; Уберите комментарий с нужной
##############################################################
# I вариант. Явное указание:
; n = 3
##############################################################
# II вариант. Запрос на ввод номера нужного типа:
; s = UO.asmInputString("Задайте номер нужного типа:","1")
; If s == '' Then
; UO.Print( 'Invalid number of type wall!' )
; return
; Endif
; n = val( s )
; If n < 1 OR n > 65 Then
; UO.Print( 'Invalid number of type wall!' )
; return
; Endif
##############################################################
# III вариант. Прицел для выбора образца:
UO.Print( 'Please, click to type of wall' )
UO.Exec('addobject WTypFlip')
While UO.Targeting()
Wait(100)
Wend
j = UO.GetGraphic( 'WTypFlip' )
For k = 1 To 65
If j == typwalls[k] Then
n = k
Endif
Next
##############################################################
UO.Print( 'Please, click to walls for flip' )
UO.Exec('addobject WFlip')
While UO.Targeting()
Wait(100)
Wend
If UO.GetGraphic( 'WFlip' ) <> typwalls[n] Then
UO.WaitTargetObject( 'WFlip' )
UO.Msg( 'i wish to unlock this' )
wait(1000)
repeat
UO.WaitTargetObject( 'WFlip' )
UO.Msg( 'i wish to flip this' )
wait(1000)
until UO.GetGraphic( 'WFlip' ) == typwalls[n]
UO.WaitTargetObject( 'WFlip' )
UO.Msg( 'i wish to lock this down' )
wait(1000)
Endif
endsub
#####################################################################
; Скрипт для подсчета всех объектов в любом
; контейнере. Запращивает прицел на
; контейнер. Потом считает объекты в контейнере и выдает на
; экран результат.
; v.1.00b (c) Edred, based on unknown script
sub CountResource()
VAR ContSer, last
UO.Print( "Click target to container" )
UO.Info( "self" )
last = UO.GetSerial( "lasttarget" )
UO.CancelTarget()
UO.Info()
while last == UO.GetSerial( "lasttarget" ) AND UO.Targeting()
wait(100)
wend
ContSer = UO.GetSerial( "lasttarget" )
UO.FindType( -1, -1, ContSer )
UO.Print( 'I find ' + str( UO.FindCount() ) + ' items' )
endsub
#####################################################################
; FishingAround. v.2.07b (c) Edred
;
; Рыбачим вокруг чара
;
sub FishingAround()
VAR Ms0 = "You can't see" ; не можем ловит здесь
VAR Ms1 = "You can't fish under the ship" ; не можем ловить здесь
VAR Ms2 = "You are too far away" ; далеко
VAR Ms3 = "There are no fish here" ; кончилось тут
VAR Ms4 = "You fish a while, but fail to catch anything" ; физл
VAR Ms5 = "You pull out" ; поймал что-то
VAR Ms6 = "Try fishing in water." ; не можем ловить здесь
VAR k, t, v, x, y
VAR MaxTime = 800
For y = -4 To 4
For x = -4 To 4
k = 0
repeat
If UO.Dead() Then
return
Endif
DeleteJournal(ms0)
DeleteJournal(ms1)
DeleteJournal(ms2)
DeleteJournal(ms3)
DeleteJournal(ms4)
DeleteJournal(ms5)
DeleteJournal(ms6)
t = UO.Timer()
If UO.Waiting() Then
UO.CancelTarget()
Endif
UO.WaitTargetTile( '0', STR( UO.GetX() + x ), STR( UO.GetY() + y ), '251')
UO.UseObject( UO.GetSerial( UO.ObjAtLayer( 'Lhand' ) ) )
repeat
wait(100)
until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR ((t + MaxTime) < UO.Timer())
k = k + 1
If UO.InJournal(ms5) Then
k = 0
Endif
If UO.Dead() Then
return
Endif
If UO.InJournal( ms5 ) Then
GetResultFish()
Endif
until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR (k > 6)
If UO.Dead() Then
return
Endif
Next
Next
endsub
Sub GetResultFish()
; ------- улов -------
DIM Fish[18]
Fish[0] = '0x170B' ; сапоги
Fish[1] = '0x170F' ; тапки
Fish[2] = '0x170D' ; сандалии
Fish[3] = '0x1711' ; сапоги
Fish[4] = '0x09CC' ; тип рыбы 1
Fish[5] = '0x09CD' ; тип рыбы 2
Fish[6] = '0x09CE' ; тип рыбы 3
Fish[7] = '0x09CF' ; тип рыбы 4
Fish[8] = '0x0FC4' ; ракушка, тип 1
Fish[9] = '0x0FC5' ; ракушка, тип 2
Fish[10] = '0x0FC6' ; ракушка, тип 3
Fish[11] = '0x0FC7' ; ракушка, тип 4
Fish[12] = '0x0FC8' ; ракушка, тип 5
Fish[13] = '0x0FC9' ; ракушка, тип 6
Fish[14] = '0x0FCA' ; ракушка, тип 7
Fish[15] = '0x0FCB' ; ракушка, тип 8
Fish[16] = '0x0FCC' ; ракушка, тип 9
Fish[17] = '0x14ED' ; карта
VAR Razmer = 17 ; размер массива - 1
VAR Scissor = '0x0F9E' ; тип ножниц
VAR Bandag = '0x0E21' ; Тип бинтов
VAR i
; Ищем что у нас валяется под ногами, если надо перерабатываем
; и складируем в трюм. Потом введем всякие мешочки разные и ящички.
For i = 0 To Razmer
UO.FindType( Fish[i], '-1', 'ground' )
If UO.FindCount() > 0 Then
If i < 4 Then
; обувь
UO.WaitTargetObject( 'finditem' )
UO.UseType( Scissor )
Wait( 3000 )
UO.FindType( Bandag )
Endif
UO.Grab( '0', 'finditem' )
Wait( 2000 )
If i > 7 AND i < 17 Then
; ракушка
UO.UseObject( 'finditem' )
wait(1000)
Endif
Endif
Next
endsub
#####################################################################
; Remember armor & weapon, disarm, healing from bandages, arm
sub Bandag()
UO.SetArm('CWeapon')
UO.Exec('bandageself')
wait(300)
UO.Arm('CWeapon')
endsub
#####################################################################
; Arrow() - cast magic arrow on laststatus
sub Arrow()
VAR ManaNeed=4
UO.Set('lasttarget','laststatus')
if UO.Mana>=ManaNeed then
UO.Cast('Magic Arrow','laststatus')
else
UO.Print("Low mana!!!")
endif
end sub
#####################################################################
; Poison() - cast poison on laststatus if target-char not
; poisoned and your char have enought mana
sub Poison()
VAR ManaNeed=9
VAR ScrollManaNeed=4
UO.Set('lasttarget','laststatus')
If NOT UO.Poisoned('lasttarget') Then
UO.FindType('0x1F40',-1,'my')
If UO.GetQuantity('finditem')>0 Then
If UO.Mana>=ScrollManaNeed Then
UO.WaitTargetObject('lasttarget')
UO.UseObject('finditem')
UO.Print("Scroll")
Else
UO.Print("Low mana!!! Scroll!")
Endif
Else
If UO.Mana>=ManaNeed Then
UO.Cast('Poison','laststatus')
Else
UO.Print("Low mana!!!")
Endif
Endif
Else
UO.Print("Character already poisoned!")
Endif
end sub
#####################################################################
; Flame() - cast Flame Strike to last status from scroll,
; if she found or from spellbook
sub Flame()
UO.Set('lasttarget','laststatus')
UO.FindType('0x1F5F',-1,'my')
If UO.GetQuantity('finditem')>0 then
if UO.Mana>=22 then
UO.WaitTargetObject('lasttarget')
UO.UseObject('finditem')
UO.Print("Scroll")
else
UO.Print("Low mana!!! Scroll!")
endif
else
if UO.Mana>=45 then
UO.Cast('Flame Strike','laststatus')
UO.Print("Spell")
else
UO.Print("Low mana!!! Spell!")
endif
endif
end sub
#####################################################################
; Light() - cast Lighting to last status from scroll,
; if she found or from spellbook
sub Light()
UO.Set('lasttarget','laststatus')
UO.FindType('0x1F4A',-1,'my')
If UO.GetQuantity('finditem')>0 then
if UO.Mana>=10 then
UO.WaitTargetObject('lasttarget')
UO.UseObject('finditem')
UO.Print("Scroll")
else
UO.Print("Low mana!!! Scroll!")
endif
else
if UO.Mana>=20 then
UO.Cast('Lightning','laststatus')
UO.Print("Spell")
else
UO.Print("Low mana!!! Spell!")
endif
endif
end sub
#####################################################################
sub NechegoDelat()
SpSpeak()
VAR SpiritTime = UO.Timer()
repeat
If ( UO.Timer() - SpiritTime ) / 600 > 5 Then
; Прошло 5 минут с момента последней прокачки Spirit Speak
SpSpeak()
SpiritTime = UO.Timer()
Else
wait(500)
Endif
until UO.Dead()
endsub
; Spirit Speak v.1.00b (c) Edred
;
; Разовая прокачка спирит спика. Предназначена для вызова из других скриптов.
;
Sub SpSpeak()
VAR mod = UO.WarMode(), num1
VAR fizzle = 'You fail your attempt'
VAR success = 'You establish a connection'
UO.WarMode( 0 )
DeleteJournal( success )
repeat
DeleteJournal( fizzle )
UO.UseSkill( 'Spirit Speak' )
num1 = 1
repeat
wait(100)
num1 = num1 + 1
until UO.InJournal( fizzle ) OR UO.InJournal( success ) OR num1 > 600
until UO.InJournal( success )
UO.WarMode( mod )
endsub
#####################################################################
; BUYREGS
; Скупка регов по байлисту
; v.1.01b (с) Edred
sub buyregs()
VAR i
DIM vendors[29]
vendors[0] = 'Kaspar'
vendors[1] = 'Austin'
vendors[2] = 'Reese'
vendors[3] = 'Alessa'
vendors[4] = 'Akina'
vendors[5] = 'Aileen'
vendors[6] = 'Alula'
vendors[7] = 'Kevin'
vendors[8] = 'Ainhoa'
vendors[9] = 'Aderes'
vendors[10] = 'Cassidy'
vendors[11] = 'Gideon'
vendors[12] = 'Canton'
vendors[13] = 'Alaqua'
vendors[14] = 'Doyle'
vendors[15] = 'Ali'
vendors[16] = 'Alake'
vendors[17] = 'Jabir'
vendors[18] = 'Beau'
vendors[19] = 'Morris'
vendors[20] = 'Aleka'
vendors[21] = 'Akili'
vendors[22] = 'Tremain'
vendors[23] = 'Terence'
vendors[24] = 'Brock'
vendors[25] = 'Alumit'
vendors[26] = 'Redmond'
vendors[27] = 'Adoncia'
vendors[28] = 'Rudyard'
;
UO.UseSkill( 'Meditation' )
wait(100)
UO.DeleteJournal()
For i = 0 To 28
UO.Buy( 'magic', vendors[i] )
wait(1000)
If UO.InJournal( 'I thank thee for thy' ) Then
UO.SayU( 'bye' )
return
Endif
Next
endsub
#####################################################################
; TestArmor. v.1.06b (c) Edred
;
; Выводит в текстовое окно информацию о армореклассе и износе всего,
; что надето на чара и взято им в руки
;
sub TestArmor()
DIM Lay[8]
Lay[0] = 'Lhand'
Lay[1] = 'Rhand'
Lay[2] = 'Arms'
Lay[3] = 'Legs'
Lay[4] = 'Gloves'
Lay[5] = 'Hat'
Lay[6] = 'Torso'
Lay[7] = 'Neck'
VAR i, ob, nam, l, k
UO.TextOpen()
UO.TextClear()
for i = 0 to 7
DeleteJournal( 'Quality' )
ob = UO.ObjAtLayer( Lay[i] )
If ob <> '' Then
UO.Click( ob )
wait(1000)
nam = UO.GetName( ob )
UO.TextPrint( nam )
UO.WaitTargetObject( ob )
UO.UseSkill( 'Arms Lore' )
k = 0
repeat
wait(300)
k = k + 1
until UO.InJournal( 'Quality' ) OR k > 30
l = UO.InJournal( 'Quality' )
nam = UO.Journal( l - 1 )
UO.TextPrint( nam )
Endif
next
endsub
#####################################################################
; AutoHeal. v.1.10b (c) Edred
;
; Автоматический подхил чара (здоровье минус 30). Автоматическое питие
; греатхил поушена при здоровье меньше 60. Автоматическое запоминание
; оружия и щита при запуске и взятие их в руки после подхилла.
;
sub AutoHeal()
VAR GreatHeal = '0x0F0C'
VAR MyFork = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
VAR MyShield = UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) )
If MyFork == '0x0000' Then
MyFork = ''
Endif
If MyShield == '0x0000' Then
MyShield = ''
Endif
repeat
If UO.Life < (UO.Str - 30) Then
RestoreChar( 0 )
GetWeapon( MyFork, MyShield )
Endif
If UO.Life < 60 Then
UO.UseType( GreatHeal )
Endif
wait(2000)
until UO.Dead()
endsub
; Процедура взятия в руки указанного оружия и щита. Если чар не может
; взять в руки оружие - автоматический диспел на себя.
;
Sub GetWeapon( Fork, Shield )
VAR msg1 = 'Not strong enough to equip'
DeleteJournal( msg1 )
; берем в руки оружие и щит. Динамические паузы и оптимитизация.
If Fork == '' AND Shield == '' Then
return
Endif
If Fork == '' Then
; только щит
If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield Then
; все есть
return
Else
GetOneWeaponOnly( 'Lhand', Shield )
return
Endif
Endif
If Shield == '' Then
; только оружие
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
; все есть
return
Else
GetOneWeaponOnly( 'Rhand', Fork )
return
Endif
Endif
If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield Then
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
; уже в руках все
return
Else
; надо взять в руки только оружие, щит не надо
GetOneWeaponOnly( 'Rhand', Fork )
Endif
Else
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
; в руках только оружие, надо еще щит взять
GetOneWeaponOnly( 'Lhand', Shield )
Else
; в руках нет ни оружия, ни щита
GetOneWeaponOnly( 'Rhand', Fork )
GetOneWeaponOnly( 'Lhand', Shield )
Endif
Endif
endsub
Sub GetOneWeaponOnly( lay, typ )
VAR msg1 = 'Not strong enough to equip'
UO.Equipt( lay, typ )
repeat
wait(50)
until UO.GetGraphic( UO.ObjAtLayer( lay ) ) == typ OR UO.InJournal( msg1 )
If UO.InJournal( msg1 ) Then
UO.WaitTargetSelf()
UO.Cast( 'Dispel' )
wait(4000)
GetOneWeaponOnly( lay, typ )
CheckLag()
Endif
endsub
; Процедура лечения чара с бинтов. Два варианта - разовый подхил или подхил
; до полного восстановления здоровья.
;
Sub RestoreChar( a )
VAR bandag = '0x0E21'
If a == 0 Then
If UO.Count( Bandag ) > 0 Then
UO.Bandageself()
wait( 300 )
Endif
return
Endif
If a == 1 Then
If UO.Count( Bandag ) > 0 Then
While UO.Life < 150
UO.Bandageself()
wait( 2000 )
Wend
Endif
return
Endif
endsub
#####################################################################
; AutoLoot. v.1.11b (c) Edred
;
; Автоматический лут трупа. Три варианта скрипта - первый на последний
; труп, второй вызывает прицел для указания трупа. Лутится только то,
; что указано в массиве. Третий вариант - лутим с земли около чара.
;
sub AutoLoot()
VAR Cleaver = '0x0EC2' ; кливер (тип)
; Считываем оружие и щит из рук
VAR MyFork = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
VAR MyShield = UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) )
If MyFork == '0x0000' Then
MyFork = ''
Endif
If MyShield == '0x0000' Then
MyShield = ''
Endif
;
VAR CorpseSer = UO.GetSerial( 'lastcorpse' )
CheckLag()
UO.WaitTargetObject( CorpseSer )
UO.UseType( Cleaver )
wait(1000)
CheckLag()
GetWeapon( MyFork, MyShield )
UO.UseObject( CorpseSer )
wait(500)
CheckLag()
CorpseLoot( CorpseSer )
endsub
;
sub AutoLoot2()
VAR Cleaver = '0x0EC2' ; кливер (тип)
; Считываем оружие и щит из рук
VAR MyFork = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
VAR MyShield = UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) )
If MyFork == '0x0000' Then
MyFork = ''
Endif
If MyShield == '0x0000' Then
MyShield = ''
Endif
;
If UO.Targeting() Then
UO.CancelTarget()
Endif
UO.Print( 'Please, choice of corpse:' )
UO.AddObject( 'CorpseForLoot' )
While UO.Targeting()
wait(100)
Wend
VAR CorpseSer = UO.GetSerial( 'CorpseForLoot' )
CheckLag()
UO.WaitTargetObject( CorpseSer )
UO.UseType( Cleaver )
wait(1000)
CheckLag()
GetWeapon( MyFork, MyShield )
UO.UseObject( CorpseSer )
wait(500)
CheckLag()
CorpseLoot( CorpseSer )
endsub
;
; Автоматически лутим с земли около чара. Одежду сразу режем на бинты.
;
sub AutoLootGround()
VAR Cleaver = '0x0EC2' ; кливер (тип)
VAR Scissor = '0x0F9E' ; Ножницы
VAR fastloot = 'FastLoot detected.'
DIM Nado[27]
Nado[0] = '0x170B' ; boots
Nado[1] = '0x1718' ;
Nado[2] = '0x1516' ; a skirt
Nado[3] = '0x1F03' ; a robe
Nado[4] = '0x1F01' ; a plain dress
Nado[5] = '0x1EFD' ; a fancy shirt
Nado[6] = '0x1541' ; a body sash
Nado[7] = '0x170B' ; boots
Nado[8] = '0x170D' ; sandals
Nado[9] = '0x1717' ; a straw hat
Nado[10] = '0x1539' ; long pants
Nado[11] = '0x152E' ; short pants
Nado[12] = '0x1515' ; a cloak
Nado[13] = '0x1FA1' ; tunic
Nado[14] = '0x0EED' ; gold coin
Nado[15] = '0x0F3F' ; arrows
Nado[16] = '0x0F7A' ; pearls, black pearls
Nado[17] = '0x0F7B' ; bood moss
Nado[18] = '0x0F7D' ; vials of blood
Nado[19] = '0x0F84' ; garlic
Nado[20] = '0x0F85' ; ginseng
Nado[21] = '0x0F86' ; mandrake root
Nado[22] = '0x0F88' ; night shade
Nado[23] = '0x0F8C' ; sulphorous ash
Nado[24] = '0x0F8D' ; spiders silk
Nado[25] = '0x14ED' ; a treasure map
Nado[26] = '0x0E75' ; backpack
VAR i
UO.Exec( 'set finddistance 3' )
For i = 0 To 25
UO.FindType( Nado[i], '-1', '1' )
While UO.FindCount() > 0
DeleteJournal( fastloot )
If i < 14 Then
UO.WaitTargetObject( 'finditem' )
UO.UseType( Scissor )
GetPause(500)
CheckLag()
Else
If i == 23 Then
If UO.GetQuantity( 'finditem' ) == 1 Then
UO.Ignore( 'finditem' )
Else
UO.MoveItem( 'finditem' )
GetPause(350)
CheckLag()
Endif
Else
UO.MoveItem( 'finditem' )
GetPause(350)
CheckLag()
Endif
Endif
UO.FindType( Nado[i], '-1', '1' )
Wend
Next
UO.Print( 'The loot was finished' )
endsub
;
; Лут указанного трупа
;
Sub CorpseLoot( Cont )
; лутим из Cont
DIM Nado[40]
; реги
Nado[0] = '0x0F7A' ; pearls, black pearls
Nado[1] = '0x0F7B' ; bood moss
Nado[2] = '0x0F84' ; garlic
Nado[3] = '0x0F85' ; ginseng
Nado[4] = '0x0F86' ; mandrake root
Nado[5] = '0x0F88' ; night shade
Nado[6] = '0x0F8C' ; sulphorous ash
Nado[7] = '0x0F8D' ; spiders silk
; то что надо резать ножницами
Nado[8] = '0x1078' ; leather
; основной лут
Nado[9] = '0x0F78' ; batwings
Nado[10] = '0x0F7E' ; bones
Nado[11] = '0x0F7D' ; vials of blood
Nado[12] = '0x0F80' ; daemons bones
Nado[13] = '0x0F81' ; fertile dirt
Nado[14] = '0x0F82' ; dragons blood
Nado[15] = '0x0F87' ; eyes of newt
Nado[16] = '0x0F8E' ; serpents scales
Nado[17] = '0x0F90' ; dead woods
Nado[18] = '0x0F91' ; wyrms hearts
Nado[19] = '0x0F8F' ; volcanic ash
Nado[20] = '0x0E34' ; blank scrolls
; золото и руда
Nado[21] = '0x0EED' ; gold coin
Nado[22] = '0x0F23' ; cintrines
Nado[23] = '0x19B7' ; magic ore
; прочий лут
Nado[24] = '0x0E24' ; water bottles
Nado[25] = '0x0F0E' ; empty bottles
Nado[26] = '0x0F0B' ; total refresh
Nado[27] = '0x0F09' ; total mana refresh
Nado[28] = '0x0F06' ; shrink
Nado[29] = '0x0F0C' ; greater heal
Nado[30] = '0x0F09' ; invisibility
Nado[31] = '0x0E21' ; bandages
Nado[32] = '0x0E20' ; bloody bandages - бинты
Nado[33] = '0x0F3F' ; arrows
Nado[34] = '0x1BD1' ; feathers
Nado[35] = '0x14ED' ; a treasure map
Nado[36] = '0x1078' ; pile of hides
Nado[37] = '0x0FAB' ; duing tub
Nado[38] = '0x1BFB' ; bolts
Nado[39] = '0x1089' ; necklace
VAR otherpack = '0x0E75' ; backpack
VAR i, typ, serpack
VAR Scissor = '0x0F9E' ; Ножницы
VAR fastloot = 'FastLoot detected.'
For i = 0 To 39
UO.FindType( Nado[i], -1, Cont )
While UO.FindCount() > 0
DeleteJournal( fastloot )
If i == 8 Then
If UO.GetColor( 'finditem' ) == '0x0000' Then
UO.WaitTargetObject( 'finditem' )
UO.UseType( Scissor )
GetPause(500)
CheckLag()
Else
UO.MoveItem( 'finditem' )
GetPause(500)
CheckLag()
Endif
Else
UO.MoveItem( 'finditem' )
GetPause(500)
CheckLag()
Endif
UO.FindType( Nado[i], -1, Cont )
Wend
Next
UO.FindType( otherpack, -1, Cont )
while UO.FindCount() > 0
serpack = UO.GetSerial( 'finditem' )
UO.Ignore( 'finditem' )
UO.UseObject( serpack )
wait(500)
CheckLag()
CorpseLoot( serpack )
wait(500)
UO.FindType( otherpack, -1, Cont )
wend
UO.Print( 'The loot was finished' )
endsub
;
; Пауза в переданных миллисекундах, с проверкой на сообщение о
; детекте фастлута. Не забудьте удалить эту фразу из журнала перед
; тем действием, после которого стоит эта пауза!
Sub GetPause( ms )
VAR t = 0
VAR msg = 'FastLoot detected.'
repeat
wait(50)
t = t + 50
until t >= ms OR UO.InJournal( msg )
If UO.InJournal( msg ) Then
wait(200)
Endif
endsub
#####################################################################
;
; EmptyPack. Разгрузка пака от результатов зоннерства.
;
; v. 1.12b (c) Edred
;
sub EmptyPack()
; VAR Sunduk = '0x40361048' ; сундук с барахлом
VAR Cont = '0x4043310C' ; куда сгружать все
VAR Regbag = '0x405F74B3' ; мешок для регов и поушенов
VAR Box1 = UO.GetGlobal( 'BoxRegs' ) ; regs
VAR Box2 = UO.GetGlobal( 'BoxBand' ) ; bandages, blood bandages, bottles
VAR Box3 = UO.GetGlobal( 'BoxPick' ) ; pickaxes, hatchets, cleavers, scissors
VAR Box4 = UO.GetGlobal( 'BoxArms' ) ; weapons, armors, robes
VAR i, mx = 23
VAR pak = '0x0E75', pakser
DIM DropType[24], DropColor[24]
; serpents scales
DropType[0] = '0x0F8E'
DropColor[0] = '0x0000'
; volcanic ash
DropType[1] = '0x0F8F'
DropColor[1] = '0x0000'
; bones
DropType[2] = '0x0F7E'
DropColor[2] = '0x0000'
; eyes of newt
DropType[3] = '0x0F87'
DropColor[3] = '0x0000'
; cintrines
DropType[4] = '0x0F23'
DropColor[4] = '0x0427'
; batwings
DropType[5] = '0x0F78'
DropColor[5] = '0x0000'
; vials of blood
DropType[6] = '0x0F7D'
DropColor[6] = '0x0000'
; feathers
DropType[7] = '0x1BD1'
DropColor[7] = '0x0000'
; dragons blood
DropType[8] = '0x0F82'
DropColor[8] = '0x0000'
; water bottles
DropType[9] = '0x0E24'
DropColor[9] = '0x0482'
; fertile dirt
DropType[10] = '0x0F81'
DropColor[10] = '0x0000'
; pearls
DropType[11] = '0x0F7A'
DropColor[11] = '0x05B2'
; dead woods
DropType[12] = '0x0F90'
DropColor[12] = '0x06FB'
; cut up leather
DropType[13] = '0x1067'
DropColor[13] = '0x0000'
; daemons bones
DropType[14] = '0x0F80'
DropColor[14] = '0x0000'
; wyrms hearts
DropType[15] = '0x0F91'
DropColor[15] = '0x0000'
; gold coin
DropType[16] = '0x0EED'
DropColor[16] = '0x0000'
; bloody bandages
DropType[17] = '0x0E20'
DropColor[17] = '0x0000'
; a Treasure Map
DropType[18] = '0x14ED'
DropColor[18] = '0x0000'
; empty bottles
DropType[19] = '0x0F0E'
DropColor[19] = '0x0000'
; pile of white hides
DropType[20] = '0x1078'
DropColor[20] = '0x0481'
; pile of black hides
DropType[21] = '0x1078'
DropColor[21] = '0x083A'
; pile of red hides
DropType[22] = '0x1078'
DropColor[22] = '0x0424'
; pile of green hides
DropType[23] = '0x1078'
DropColor[23] = '0x0426'
;
DIM Regs[8]
Regs[0] = '0x0F7A' ; black pearls
Regs[1] = '0x0F7B' ; bood moss
Regs[2] = '0x0F84' ; garlic
Regs[3] = '0x0F85' ; ginseng
Regs[4] = '0x0F86' ; mandrake root
Regs[5] = '0x0F88' ; night shade
Regs[6] = '0x0F8C' ; sulphorous ash
Regs[7] = '0x0F8D' ; spiders silk
VAR bandag = '0x0E21' ; бинты
UO.Exec( 'terminate AutoZonner' )
wait(500)
UO.Exec( 'terminate AutoHeal' )
wait(500)
If UO.Targeting() Then
UO.CancelTarget()
Endif
; UO.UseObject( Sunduk )
; wait(500)
; CheckLag()
UO.UseObject( Cont )
wait(500)
CheckLag()
; ------- вставляем предварительную очистку всех паков в бэкпаке
; v.1.10
UO.FindType( pak )
While UO.FindCount() > 0
pakser = UO.GetSerial( 'finditem' )
UO.UseObject( pakser )
wait(1000)
CheckLag()
UO.FindType( -1, -1, pakser )
While UO.FindCount() > 0
UO.MoveItem( 'finditem' )
wait(500)
CheckLag()
UO.FindType( -1, -1, pakser )
Wend
UO.Ignore( pakser )
UO.FindType( pak )
Wend
; ------- конец вставки очистки паков
for i = 0 to mx
; UO.Print( 'TEST. i = ' + str(i) )
UO.FindType( DropType[i], DropColor[i] )
While UO.FindCount() > 0
UO.MoveItem( 'finditem' , 0, Cont )
wait(500)
CheckLag()
UO.FindType( DropType[i], DropColor[i] )
Wend
next
; проверим бинты
UO.FindType( bandag )
While UO.FindCount() > 0
If UO.GetColor( 'finditem' ) <> '0x0000' Then
UO.MoveItem( 'finditem' , 0, Cont )
wait(500)
CheckLag()
Else
UO.Ignore( 'finditem' )
Endif
UO.FindType( bandag )
Wend
UO.IgnoreReset()
; переложим реги в спецмешок
for i = 0 to 7
UO.FindType( Regs[i] )
While UO.FindCount() > 0
UO.MoveItem( 'finditem' , 0, Regbag )
wait(500)
CheckLag()
UO.FindType( Regs[i] )
Wend
next
; тест оружия
TestArmor()
endsub
#####################################################################
########################## ############################
########################## ПРОЦЕДУРЫ ############################
#####################################################################
Sub GoHide()
While not UO.Hidden()
UO.UseSkill('Hiding')
Wait(4000)
Wend
endsub
#####################################################################
Sub GetDagger( Dagger )
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) <> Dagger Then
UO.FindType( Dagger )
If UO.FindCount() == 0 Then
return 0
Endif
UO.Equipt( 'Rhand', Dagger )
wait(1000)
Endif
return 1
endsub
#####################################################################
; ================================================================
; Процедура подкормки чара. Параметры: сериал контейнера с медом, номер
; сообщения до которого кормить, сколько съесть меда после сообщения,
; как часто кормить чара.
; Прохождение последнего периода контролируется через глобальную переменную
; TimeProcess.
;
; ver. 1.05 (c) Edred
;
Sub EatChar( Sunduk, Nom, Add, TimeWait )
; сообщения при кормежке
UO.Print( 'TEST: eat to ' + str( Nom ) + ' message and ' + str( Add ) + ' more each ' + str( TimeWait ) + ' minutes' )
VAR Eat1 = 'You eat the food, but are still extremely hungry'
VAR Eat2 = 'After eating the food, you fell much less hungry'
VAR Eat3 = 'You eat the food, and begin to feel more satiated'
VAR Eat4 = 'You are nearly stuffed, but manage to eat the food'
VAR Eat5 = 'You fell quite full after consuming the food'
VAR Eat6 = 'You are stuffed!'
VAR Eat7 = 'You are simply too full to eat any more!'
VAR Med = '0x09EC' ; тип меда для подкормки
VAR i, Eat, j
; проверим, пора ли кормиться
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 == 1 Then
Eat = Eat1
Endif
If Nom == 2 Then
Eat = Eat2
Endif
If Nom == 3 Then
Eat = Eat3
Endif
If Nom == 4 Then
Eat = Eat4
Endif
If Nom == 5 Then
Eat = Eat5
Endif
If Nom == 6 Then
Eat = Eat6
Endif
If Nom == 7 Then
Eat = Eat7
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 )
repeat
DeleteJournal( Eat )
UO.UseType( Med )
Wait( 1000 )
until NOT UO.InJournal( Eat )
If Add > 0 Then
For j = 1 To Add
UO.UseType( Med )
Wait( 1000 )
Next
Endif
; хватит кормиться
; выгрузим остатки меда обратно
UO.Findtype( Med, '-1', 'backpack' )
UO.MoveItem( 'finditem', 0, Sunduk )
Wait( 1000 )
; Сбросим счетчик
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
#####################################################################
Sub Recalling( Runbk, NRune )
; Runbk - сериал или ссылка на объект рунбуки
; NRune - десятичный номер (текстом) руны для реколла
VAR myx = UO.GetX()
VAR myy = UO.GetY()
VAR OldMana = UO.Mana
VAR i = 0
DeleteJournal( 'fizzles' )
UO.Exec("recall " + Runbk + " " + NRune)
repeat
CheckLag()
wait(1000)
i = i + 1
until ( i > 6 ) OR ( UO.Mana < OldMana - 8 ) OR UO.InJournal( 'fizzles' )
wait(500)
If myx == UO.GetX() AND myy == UO.GetY() Then
UO.WarMode( 'flip' )
wait(100)
UO.WarMode( 'flip' )
Recalling( Runbk, NRune )
Endif
endsub
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
VAR tmpst, i, dlin, kol = 0, start = 0
dlin = len( st )
For i=0 To dlin - 1
If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
kol = kol + 1
If kol == nom Then
; это первый пробел после нужного нам слова
tmpst = mid( st, start, i - start )
return tmpst
Else
While mid( st, i, 1 ) == ' '
i = i + 1
Wend
If kol == nom - 1 Then
start = i
Endif
Endif
Endif
Next
tmpst = ''
return tmpst
endsub
#================================================#
# ПРОЦЕДУРЫ ХОЖДЕНИЯ #
#================================================#
; Autor - Sergious, Edited - Edred.
;
; Процедура GoToTile( X, Y, D, T )
; X,Y: координаты точки назначения
; D: точность подхода (необходимое расстояние)
; T: строгость подхода (точно ли должно быть то расстояние... True/False)
;
; Установите в своем скрипте следующие глобальные переменные:
; -----------------------------------------------------------
; MovDelay - Пауза между шагами. Обычное значение - '1000'
; MovNumber - Количество шагов при смене дислокации
; KoefEp - Значение ширины угла хождения при определении направления.
; Если на пути встречаются сложные и широкие препятствия -
; увеличить. '0.172' - сбалансированный.
#===================================================================#
; ============== GOTOTILE ===
;
Sub GoToTile( OX, OY, N, S )
VAR myx, myy, MD, J
VAR Lx1, Ly1
VAR Lx2, Ly2
VAR Sx, Sy
VAR T
VAR Des = N
VAR MoveDelay = 100
J = 1
MD = MoveDelay * 1.5
myx = uo.getx()
myy = uo.gety()
MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False)
Sx = 0
Sy = 0
Lx1 = uo.getx() / 2
Ly1 = uo.gety() / 2
Lx2 = Lx1 / 2
Ly2 = Ly1 / 2
T = UO.Timer()
If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then
UO.Exec('exec PermResend')
EndIf
While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 )
If ( (UO.Timer() - T) * 15 > MoveDelay ) Then
T = UO.Timer()
Lx2 = Lx1
Ly2 = Ly1
Lx1 = myx
Ly1 = myy
myx = uo.getx()
myy = uo.gety()
endIf
MD=MoveDelay
If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then
MD = MD * 3 / GetDistance( ox, oy )
EndIf
wait(MD)
If GetDistance( OX, OY ) > Des Then
MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False)
Else
If S Then
If GetDistance(OX,OY)<Des Then
If GetDistance(OX,OY)<>0 Then
MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False)
Else
MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
EndIf
EndIf
EndIf
EndIf
If GetDistance(OX,OY)<>Des Then
If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then
If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then
J=1
EndIf
J=J+1
UO.Resend()
Sx = uo.getx()
Sy = uo.gety()
Stun(ox,oy,J)
EndIf
EndIf
Wend
UO.Exec( 'terminate PermResend' )
endsub
;
; ============ MOVEONCE ===
; Процедура MoveOnce - хождение в определённую сторону
; Направления:
; Система направлений по клавишам Нумпада
; 8 = 1 | 2 = -1
; 9 = 2 | 1 = -2
; 6 = 3 | 4 = -3
; 3 = 4 | 7 = -4
;
; Такая система позволяет с лёгкостью получать направление, обратное
; данному...
;
Sub MoveOnce( Dir, Del, Rev )
VAR Num
Var MoveNumber = 1
If Rev Then
Num = MoveNumber + 1
Else
Num = MoveNumber
EndIf
If ( Num > 0 ) and ( Dir <> 0 ) Then
If Dir == 1 Then
UO.Press( 38, Num, Del )
EndIf
If Dir == 2 Then
UO.Press( 33, Num, Del )
EndIf
If Dir == 3 Then
UO.Press( 39, Num, Del )
EndIf
If Dir == 4 Then
UO.Press( 34, Num, Del )
EndIf
If Dir == -1 Then
UO.Press( 40, Num-1, Del )
EndIf
If Dir == -2 Then
UO.Press( 35, Num, Del )
EndIf
If Dir == -3 Then
UO.Press( 37, Num, Del )
EndIf
If Dir == -4 Then
UO.Press( 36, Num, Del )
EndIf
If Rev Then
If Dir <> -1 Then
UO.Press( 40, 1, Del )
EndIf
EndIf
EndIf
endsub
;
; ============== GETDIR ===
; Функция GetDir возвращает направление, по которому надо идти
; к координате
;
Sub GetDir( myx, myy, ox, oy )
VAR I, J
J = 0
VAR X = ox - myx
VAR Y = oy - myy
I = GetQDir( Abs(X), Abs(Y) )
If X >= 0 Then
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -1
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 3
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
EndIf
Else
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -3
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 1
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
EndIf
EndIf
RETURN J
endsub
;
; =============== GETQDIR ===
;
;
Sub GetQDir( x, y )
VAR Ep = 0.172
VAR J = 0
If X == 0 Then
J = 1
Else
If ( Y / X ) < Ep Then
J = 3
Else
If ( X / Y ) < Ep Then
J = 1
Else
J = 2
EndIf
EndIf
EndIf
RETURN J
endsub
;
; ============== GETDISTANCE ===
; Функция GetDistance возвращает расстояние до координат
; (как UO.GetDistance - до объекта)
;
; Почему так - потому что учим математику :)
;
Sub GetDistance( X, Y )
VAR A, B, C
A = abs( X - UO.GetX() )
B = abs( Y - UO.GetY() )
If A > B Then
C = A
Else
C = B
EndIf
Return C
endsub
;
; ============= PERP ===
; Функция Perp возвращает направление, перпендикулярное введённому
;
Sub Perp( Dir )
VAR D = Dir
If Dir == 1 Then
D = 3
EndIf
If Dir == 2 Then
D = 4
EndIf
If Dir == 3 Then
D = -1
EndIf
If Dir == 4 Then
D = -2
EndIf
If Dir == -1 Then
D = -3
EndIf
If Dir == -2 Then
D = -4
EndIf
If Dir == -3 Then
D = 1
EndIf
If Dir == -4 Then
D = 2
EndIf
RETURN D
endsub
;
; =============== STUN ===
; Обход препятствий
;
Sub Stun( X, Y, N )
VAR I
VAR myx
VAR myy
VAR MoveDelay = 100
myx = uo.getx()
myy = uo.gety()
For I=1 to N
MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
EndIf
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False)
Next
Wait(MoveDelay)
Stun(x,y,N)
EndIf
endsub
;
; ============= ABS ===
; Убирает знак минуса в отрицательных числах
;
Sub abs( a )
VAR b
If a < 0 Then
b = -a
Else
b = a
endif
return b
endsub
;
; ============== PERMRESEND ===
;
Sub PermResend()
Var Mn = 9
VAR MoveDelay = 100
Repeat
UO.Resend()
Wait( MoveDelay * Mn )
Until ( 1 > 2 )
endsub