(для последующего использования в стелсе)
В данной версии:
1. маршрут пишется в текстовое окно, а не файл.
2. Если чар пришел к дереву и повернулся, а потом начал рубить - данная точка запишется в маршрут дважды: сначала с нулями на конце, потом с типом и координатами тайлов. Для ходилок это несущественно, хотя можно и удалить (пока только вручную)
3. Сериал чара, сказавшего Finish, не проверяется.
Полученный маршрут может быть легко использован в ваших скриптах на ламбер по следующей схеме: считываем файл в стринглист, бежим по строкам, берем первые два числа, идем в эти координаты, проверяем, если третье число не ноль - рубим тайл по типу и координатам. Понятное дело что такой ламбер не требует придумывания способа обхода препятствий.
Code: Select all
sub MarkRail()
; ====================================================
; ВНИМАНИЕ! Это скрипт для инжекта, а не для стелса!!!
; ====================================================
; Скрипт разметки маршрута передвижения чара и копки/рубки
; Создает файл со строками вида:
; X Y TileType TileX TileY TileZ
; где: X, Y - координаты чара в узловой точке
;      TileType   - тип цели. То есть тип тайла или статики,
;                   которую либо рубим/либо копаем
;      TileX, TileY, TileZ - координаты цели
; Узловые точки могут быть двух видов - либо тут копаем/рубим,
; либо тут чар должен повернуть при передвижении. Если второе, то
; последние четыре параметра равны 0. Учитывайте это в своих скриптах.
; 
; Как работает? Записываются начальные координаты с нулями в четырех последних
; параметрах, запоминается направление взгляда чара, чистится журнал.
; Потом каждые 50 мс проверяются: не изменилось ли направление взгляда чара, не
; появилось ли сообщение в журнале о копке/рубке. Если одно из условий выполнено,
; то в файл записывается строка с текущими данными чара. То есть, если чар повернул,
; но копка/рубка не началась - пишется строка с четырьмя нулями в конце, если есть
; сообщение - пишутся координаты ласттайла и тип из-под него.
; Скрипт прекращает работу при появлении в журнале слова Finish, произнесенного
; данным чаром (проверяется по сериалу строки журнала).
;
; v.1.01b (с) Edred
;
; В данной версии данные пишутся в текстовое окно, а не файл.
; Также не проверяется сериал чара, сказавшего Finish.
;
	VAR msg1 = 'You put the'
	VAR msg2 = 'There is nothing'
	VAR msgf = 'Finish'
	VAR cx1, cy1, cdir1, tx1, ty1, tz1, ttyp1, oldx, oldy
	UO.TextOpen()
	UO.TextClear()
	cx1 = UO.GetX()
	cy1 = UO.GetY()
	cdir1 = UO.GetDir()
	UO.TextPrint(str(cx1) + ' ' + str(cy1) + ' ' + '0 0 0 0')
	oldx = cx1
	oldy = cy1
	repeat
		UO.DeleteJournal()
		repeat
			wait(50)
		until UO.InJournal(msg1) OR UO.InJournal(msg2) OR UO.InJournal(msgf) OR UO.GetDir() <> cdir1
		if UO.InJournal(msgf) then
			return
		endif
		If UO.InJournal(msg1) OR UO.InJournal(msg2) Then
			cx1 = UO.GetX()
			cy1 = UO.GetY()
			ttyp1 = UO.LastTile( 0 )
			tx1 = UO.LastTile( 1 )
			ty1 = UO.LastTile( 2 )
			tz1 = UO.LastTile( 3 )
			UO.TextPrint(str(cx1) + ' ' + str(cy1) + ' ' + str(ttyp1) + ' ' + str(tx1) + ' ' + str(ty1) + ' ' + str(tz1))
			oldx = cx1
			oldy = cy1
			cdir1 = UO.GetDir()
		Else
			cx1 = UO.GetX()
			cy1 = UO.GetY()
			if (cx1 <> oldx) OR (cy1 <> oldy) then
				UO.TextPrint(str(cx1) + ' ' + str(cy1) + ' ' + '0 0 0 0')
				oldx = cx1
				oldy = cy1
			endif
			cdir1 = UO.GetDir()
		Endif
	until false
endsub




 Я тебе конкуренции не составлю, т.к. играю на богом забытом сервере называется IPY Alkar Pre-Aos
 Я тебе конкуренции не составлю, т.к. играю на богом забытом сервере называется IPY Alkar Pre-Aos 
