Меня постоянно спрашивают как сделать автопоиск деревьев и вообще написать ламбер, используя АСМ от АГРСа. Объясняю один раз.
1. Создаем в папке инжекта файл Resource_Static.dat, в него помещаем типы деревьев, с указанием логического типа 'tree'. Такой файл обычно создается простеньким скриптом с командой asmGetStaticTiles(), но в последних версиях эта команда не работает. Поэтому типы можно либо выдрать из вердаты, либо считать командой ,infotlie - не забудьте только преобразовать в шестнадцатиричные. Я привожу вам содержание этого файла (выше), но у вас на шарде могут быть и другие типы деревьев (маловероятно):
Code:
0x0c95=tree
0x0c96=tree
0x0cca=tree
0x0ccb=tree
0x0ccc=tree
0x0ccd=tree
0x0cd0=tree
0x0cd3=tree
0x0cd6=tree
0x0cd8=tree
0x0cd9=tree
0x0cda=tree
0x0cdb=tree
0x0cdc=tree
0x0cdd=tree
0x0cde=tree
0x0cdf=tree
0x0ce0=tree
0x0ce3=tree
0x0ce6=tree
0x0cf8=tree
0x0cfb=tree
0x0cfe=tree
0x0d01=tree
0x0d41=tree
0x0d42=tree
0x0d43=tree
0x0d44=tree
0x0d57=tree
0x0d58=tree
0x0d59=tree
0x0d5a=tree
0x0d5b=tree
0x0d6e=tree
0x0d6f=tree
0x0d70=tree
0x0d71=tree
0x0d72=tree
0x0d84=tree
0x0d85=tree
0x0d86=tree
2. Теперь берем следующий скрипт, отходим в лес в любое место и запускаем.
Code:
#####################################################################
; LumberAround. v.3.25b (c) Edred
;
; Рубим вокруг чара. Используется ASM-модуль для инжекта для поиска деревьев.
;
sub LamberAround()
VAR t, k, CanMine, cx, cy, tmpx, tmpy, pointX, pointY
VAR MaxTime = 600 ; измеряется в 1/10 сек.
VAR ms1 = "There are no logs here to chop" ; нет логов
VAR ms2 = "You can't use" ; не можем
VAR ms3 = "in your pack." ; вырубили логи
VAR ms4 = "You fail to produce" ; физл
VAR ms5 = "You are too far away" ; стоим далеко
VAR ms6 = "It appears immune to your blow" ; не проходит удар
VAR ms7 = "You can't see that" ; не можем увидеть
VAR ms8 = "is destroyed*" ; топор развалился
VAR ms9 = "Try to kill my spirit at first!" ; вырубили духа дерева
UO.asmTLStaticOpen('Resource_Static.dat') ; Загрузим таблицу типов статики
VAR i, strpoint
VAR MaxVes = 580
cx = UO.GetX()
cy = UO.GetY()
for tmpx = -3 to 3
for tmpy = -3 to 3
k = 0
pointX = cx + tmpx
pointY = cy + tmpy
strpoint = str(pointX) + ' ' + str(pointY)
repeat
UO.DeleteJournal()
t = UO.Timer() + MaxTime
k = k + 1
wait(300)
CanMine = UO.asmWaitTargetStaticTile( 'tree', PointX, PointY, 0 )
If CanMine Then
UO.UseObject(UO.ObjAtLayer('Lhand'))
repeat
wait(100)
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 UO.InJournal(ms9) OR (t < UO.Timer())
Endif
If UO.Weight > MaxVes Then
; Вес превышен!
return
Endif
If UO.InJournal( ms8 ) Then
; топор накрылся!
return
Endif
If UO.InJournal( ms9 ) Then
; дух дерева!
return
Endif
until NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10)
Endif
next
next
endsub
3. Копаетесь в коде скрипта, пока не сделаете то, что вам нужно