Edred, вот он:
Code:
Sub OpenMyDoor( x1, y1 )
; Любые двери!
;
UO.Set( 'finddistance', '2' )
DIM ClosedDoor[4]
DIM OpenedDoor[4]
DIM ChangeX[4]
DIM ChangeY[4]
; дверь 1-9
; левая створка
ClosedDoor[0] = '0x06AD'
OpenedDoor[0] = '0x06AE'
ChangeX[0] = -1
ChangeY[0] = -1
; правая створка
ClosedDoor[1] = '0x06AF'
OpenedDoor[1] = '0x06B0'
ChangeX[1] = -1
ChangeY[1] = 1
; дверь 7-3
; левая створка
ClosedDoor[2] = '0x06A5'
OpenedDoor[2] = '0x06A6'
ChangeX[2] = 1
ChangeY[2] = -1
; правая створка
ClosedDoor[3] = '0x06A7'
OpenedDoor[3] = '0x06A8'
ChangeX[3] = -1
ChangeY[3] = -1
VAR i, flag = 0, SerFI, DoorX, DoorY, s
VAR nemogu = "You can't reach that."
# Поехали!
DeleteJournal( nemogu )
For i = 0 To 3
UO.FindType( OpenedDoor[i], '-1', '1' )
If UO.FindCount() > 0 Then
DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
CheckLag()
UO.Print( 'Already open' )
return
Endif
Next
For i = 0 To 3
UO.FindType( ClosedDoor[i], '-1', '1' )
If UO.FindCount() > 0 Then
SerFI = UO.GetSerial( 'finditem' )
UO.OpenDoor()
flag = 1
wait(500)
CheckLag()
UO.FindType( OpenedDoor[i], '-1', '1' )
If UO.FindCount() > 0 Then
DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
CheckLag()
UO.Print( 'Allright' )
return
Else
If UO.InJournal( nemogu ) Then
GoToXY( str( x1 ), str( y1 ), '0', Timeout )
Endif
wait(1000)
; Не получилось мытьем, попробуем катаньем
UO.Print( 'Use double click...' )
s = 0
repeat
UO.UseObject( SerFI )
wait( 1000 )
CheckLag()
s = s + 1
UO.FindType( OpenedDoor[i], '-1', '1' )
until UO.Findcount() OR s > 10
If s > 10 Then
return
Endif
DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
CheckLag()
UO.Print( 'Allright' )
return
Endif
Endif
Next
endsub
Но что-то тут мудрено для меня. Плюс там еще элементы ходилки, координаты там же...