(для последующего использования в стелсе)
В данной версии:
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