Андрюха из Одессы wrote:
Есть ли возможность запилить передачу информации из клиента в журнал инжекта, без костылей, как хотелось реализовать
здесь?
Еще бы радовала возможность сворачивать условия, циклы, массивы или целые скрипты, если много скриптов в одном файле. Либо сделать интеграцию в notepad++ или sublime text.
В скриптовом модуле есть некоторые функции по работе с файлами статики:
Code:
UO.SetMulPath(Path) - Установить путь к папке с *.mul файлами (map*.mul, statics*.mul, staidx*.mul, tiledata.mul). Path - строка.
UO.SetShowZ(Mode) - Установить режим отображения Z координаты в информации. 0 - отключить, 1 - включить. Mode - число.
UO.GetLandscapeTile(X, Y, Map) - Получить ИД тайла земли в координатах X,Y на карте номер Map. X, Y, Map - числа. Возвращает строку.
UO.GetStaticTiles(X, Y, Map) - Получить ИД всех тайлов статики в координатах X,Y на карте номер Map. X, Y, Map - числа. Возсращает строку.
UO.GetTileFlags(TileGroup, TileID) - Получить флаги тайла соответствующей группы (TileGroup=0 - Landscape Tile, TileGroup=1 - Static Tile). TileGroup - число, TileID - строка. Возвращает строку.
Contains(Source, Flag) - Узнать, входит ли Flag в набор Source. Source, Flag - числа. Возвращает 1 если Source содержит Flag и 0 если нет.
GetLandscapeTile возвращает информацию в формате TileID, при включенной ShowZ в формате TileID(Z)
GetStaticTiles так же, как и GetLandscapeTile, но перечисляет все тайлы статики, находящиеся в заданных координатах через запятую. Если тайлов статики не обнаружено - вернет пустую строку.
При ошибке возвращают строку -1.
Можно через эти функции сделать автомарк не сходя с места, вот пример как пользоваться:
Code:
sub Test()
uo.setmulpath('E:\Ultima Online') #Путь к мулам
UO.SetShowZ(true)
var tileid = uo.getstatictiles(uo.getx(), uo.gety() + 1, 0) #Сюда вписываем координаты, где искать тайлы
uo.print('tileid='+tileid)
if tileid=='' then
uo.print('Тут нет статики.')
return
endif
dim tiles[20] #20 хватит думаю
dim tinfo[2] #Буффер для tile_id, tile_z
var l=Str2Tiles(tiles,tileid)
var i
if l>0 then
for i=0 to l-1
if (tiles[i]==tree_tile) then
Str2IDZ(tinfo,tiles[i])
#Это тайл дерева, пишем его в файл или куда-то там в формате (tinfo[0] X Y tinfo[1])
#tinfo[0] - это TileID, tinfo[1] - это TileZ
endif
next
endif
end sub
Sub Str2Tiles(a,s)
var i,l=len(s),b='',ptr=0
if not l then
return 0
endif
for i=0 to l-1
if s[i]<>',' then
b=b+s[i]
else
a[ptr]=b
b=''
ptr=ptr+1
endif
next
a[ptr]=b
ptr=ptr+1
return ptr
end sub
Sub Str2IDZ(a,s)
var i,l=len(s),b='',ptr=0
if not l then
return 0
endif
for i=0 to l-1
if s[i]<>'(' and s[i]<>')' then
b=b+s[i]
else
a[ptr]=b
b=''
ptr=ptr+1
endif
next
return ptr
end sub
Не запускал, но по-идее должно работать, это всё в цикл сунь на нужную дистанцию и для каждого тайла смотри, что там есть.
Список тайлов деревьев где-то был, в скрипте вот указатель на тайл дерева tree_tile
Сворачивалку/разворачивалку сделаем когда до скрипт.дллки доберемся. Пока что инжект.длл и лаунчер насилуем)