Page 1 of 1

open door

Posted: 2006-06-11 19:34:34
by Bangbuss
kak otkrivat` i zakrivat` srazu 2 dveri? u menja dom takoj i nado 6tob bistro mozhno bilo zakrit` 2 dveri srazu.

Posted: 2006-06-11 22:56:31
by Edred
В одном из моих скриптов есть такая функция, возьми ее за основу для своего скрипта:

Code: Select all

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

Posted: 2006-06-15 00:32:25
by ZWERb
Встроенный макрос клиента!!!! OpenDoor(s)
Иногда проще пользоватца встроенными макросами клиента чем парить мозги над инжой =-)

Posted: 2006-06-15 07:13:50
by Savage
У дверей есть сериал и тип. Если это двери твоего дома то просто юзаешь сериал и проверяешь тип.

Posted: 2006-06-15 07:14:33
by Savage
опендоор может открыть самую неожиданную дверь :) так что не канает

Posted: 2006-06-15 08:24:47
by Askaneli
Причём стоя у дверей дома может открыть калитку которая дальше находится. Лучше всё таки сериал юзать и тип проверять ...

Posted: 2006-06-15 21:48:25
by Edred
Еще добавлю: если дверь двойная, opendoor() может открыть не ту половинку, перед которой стоит чар. И тогда, если чар на макре, зайдет он или нет - будет зависить от продвинутости ходилки...