Bowcraft
Posted: 2004-06-29 17:22:16
Вот свеженький скриптец. Для соседнего топика пока не очень годится, так как процедура смены даггера (или другого инструмента) при поломке не оттестирована (на нашем шарде инструмент ломается крайне редко). Кто качает - потестите плиз. Постарался сделать скрипт максимально шардонезависимым
ЗЫ: Измените в переменной Kolvo количество логов на нужное вам для разового крафта шафтов. У нас, к сожалению, нужно 10 логов (и никакими багами не воспользоваться - скилл переписан)

ЗЫ: Измените в переменной Kolvo количество логов на нужное вам для разового крафта шафтов. У нас, к сожалению, нужно 10 логов (и никакими багами не воспользоваться - скилл переписан)
Code: Select all
#####################################################################
; Bowcraft. v.1.02b (c) Edred
;
; Чар берет из сундука логи, крафтит из них шафты
; и складывает эти шафты в этот же сундук.
; Если логи закончились - выход.
; Если даггер (или что вы там используете) сломался -
; скрипт найдет аналогичный по типу в бэкпаке и возьмет
; в руки.
;
sub bowcraft()
VAR Sunduk = '0x4042B1A1' ; Сериал сундука
VAR Logi = '0x1BDD' ; Тип логов
VAR Shafts = '0x1BD4' ; Тип шафтов
VAR Kolvo = 10 ; Брать логов для одного крафта
VAR k = 0, j, dagger
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
While TRUE
UO.FindType( Logi, -1, Sunduk ) ; Ищем логи в сундуке
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
return
else
j = UO.GetQuantity( 'finditem' )
If j > Kolvo Then
UO.Print( 'I can use ' + str( j ) + ' logs' )
else
UO.Print( "I can't use " + str( j ) + " logs" )
return
Endif
Endif
UO.Grab( Str( Kolvo ), 'finditem' )
; Чтобы не сблочило УНСП
wait(500)
; А это - динамическая пауза на мув
while UO.Count( Logi ) < Kolvo
wait(100)
wend
; проверка на то, что в руках по-прежнему даггер
If CheckInstr() == 0 Then
UO.Print("You don't have daggers!" )
return
Endif
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitMenu ('What do you want to carve', 'shaft' )
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Shafts ) > 0 then
UO.FindType( Shafts, -1, -1 )
UO.MoveItem( 'finditem', 0, Sunduk )
wait(500)
while UO.Count( Shafts ) > 0
wait(100)
wend
UO.Print( 'Shafts moved' )
Endif
Wend
end sub
sub CheckInstr()
; проверим, есть ли в правой руке инструмент того же
; типа, что и в глобальной переменной instrtype
; если нет - найдем в бэкпаке такой инструмент и
; возьмем в правую руку.
VAR typ = UO.GetGlobal( 'instrtype' )
VAR cur = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
If typ == cur Then
return 1
Endif
UO.FindType( typ )
If UO.FindCount() == 0 Then
return 0
Endif
UO.Equip( 'RHand' , 'finditem' )
wait(1000)
return 1
endsub