Вот предположим, мне нужно взять координаты последнего тайла по которому нажал не я и инжект...Например:
Есть скрипт который марчит тайлы с рудой, но так как руками их промарчить сложновато на скале я запускаю простейший скрипт на обкопку вокруг себя...но инжа возращает ласттайл который был кликнут из клиента ручками, а не тот который нашёл сам скрипт...может есть у кого автомарк тайлов для скал?
Подскажите по тайлам плиз
Moderators: Murderator+, Murderator
-
- Posts: 51
- Joined: 2004-08-26 16:47:05
Code: Select all
var tochka
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'
VAR msg2 = 'There is no'
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
sub minround()
VAR Kirka = '0x0E85' ; Тип Кирки
VAR TileNum = '1339' ; Тайл пола пещеры (наиболее распространенный тип)
VAR x, y, t, k
VAR MaxTime = 100 ; измеряется в 1/10 сек.
VAR ms1 = "There is no ore here to mine"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen some rocks"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining"
VAR ms7 = "You have no"
VAR ms8 = "You must wait"
for y=0 to 2
for x=-2 to 2
k = 0
repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.CancelTarget()
wait(300)
UO.WaitTargetTile( 0, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
repeat
wait(300)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR ((t + MaxTime) < UO.Timer())
until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
next
next
endsub
Предположим вот так...я примерно на данный момент сделал следующее, но имхо не правильно:
Code: Select all
sub maining()
UO.TextOpen()
UO.TextClear()
VAR Xi,Yi,mx,my,ttyp1,tx1,ty1,tz1
VAR msg1 = 'You put'
VAR msg2 = 'There is no'
VAR msg3 = 'You loosen'
start:
FOR Xi = -1 TO 2
FOR Yi = -3 TO 3
UO.DeleteJournal()
UO.Exec("waittargettile 3126 "+STR(UO.GetX()+Xi)+" "+STR(UO.GetY()+Yi)+" 0")
UO.Exec("usetype 0x0E85")
waiter()
wait(1000)
if UO.InJournal(msg1) OR UO.InJournal(msg2) OR UO.InJournal(msg3) then
mx = UO.GetX()
my = UO.GetY()
ttyp1 = UO.LastTile( 0 )
tx1 = mx+Xi
ty1 = my+Yi
tz1 = UO.LastTile( 3 )
UO.TextPrint(str(mx) + ' ' + str(my) + ' ' + str(ttyp1) + ' ' + str(tx1) + ' ' + str(ty1) + ' ' + str(tz1))
end if
NEXT
NEXT
goto start
end sub
sub Waiter()
VAR Zdat = 0
UO.DeleteJournal()
While UO.InJournal("You put the")==0 and UO.InJournal("You must wait")==0 and UO.InJournal("You loosen some rocks")==0 and UO.InJournal("There is no ore")==0 and UO.InJournal("Try mining in rock")==0 and UO.InJournal("That is too far away")==0 and Zdat < 200 and UO.InJournal("You have no line of sight to that location")==0
Wait(100)
Zdat = Zdat + 1
Wend
end sub
Вот теперь думаю, как объеденить предыдущий скрипт на метку маршрута, с тем, что я написал.