Script.dll + include
Moderators: Murderator+, Murderator
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
о_О такого тоже не наблюдалось ещё...
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Флаг камня определяет как 0x00000040 но пишет что тайл проходимый, очевидно считает его не 0x40. if contains(val(UO.GetTileFlags(1, tileid)), 0x00000040) then не помогло
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Личку прочти, может камень это статика мира, а не карты.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Похоже беда получается, у деревьев флаг 0х00020040, у кустов 0ч00004040, у сухих кустов 0х40000060 и т.д.
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Code: Select all
if contains(val(UO.GetTileFlags(1, tileid)), 0x00000040) then
Замени на
Code: Select all
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000040) then
val не хочет нормально переводить HEX строку, юзай uo.hex2int()
С ним всё норм)
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Прийдется побегать пособирать флаги тайлов и массив сделать. Оно воспримет значение типа
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), Flags[i]) then
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), Flags[i]) then
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include

-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Дошло, значения же соединяются. Все что имеет в конце 40 - непроходимый тайл. Значит 201 добавляем, что делать с 0х04000000? Я так понимаю если выдает 0x04000000 значит в этом месте нет статики, так пишет на всех пустых тайлах, значит если получаем 0x04000000 то значит тайл без объектов статики, и идем проверять его на проходимость земли. Нашел описание на русском
0x00000001; //Фон
0x00000002; //Оружие
0x00000004; //Прозрачный
0x00000008; //Полупрозрачный
0x00000010; //Стена
0x00000020; //Повреждающий
0x00000040; //Непроходимый
0x00000080; //Мокрый
0x00000100; //Неизвестно
0x00000200; //Поверхность
0x00000400; //Мост
0x00000800; //Складывается в стопку
0x00001000; //Окно
0x00002000; //Не простреливается
0x00004000; //Артикль "A"
0x00008000; //Артикль "An"
0x00010000; //Внутренний (вещи типа волос, бород, и т.д.)
0x00020000; //Листва
0x00040000; //Частично окрашиваемо
0x00080000; //Неизвестно 1
0x00100000; //Карта
0x00200000; //Контейнер
0x00400000; //Одеваемо
0x00800000; //Источник света
0x01000000; //Анимируемо
0x02000000; //Без диагонали
0x04000000; //Неизвестно 2
0x08000000; //Броня
0x10000000; //Крыша
0x20000000; //Дверь
0x40000000; //Лестница задняя
0x80000000; //Лестница правая
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Да, все верно, вот такой скриптик показывает правильно тайлы. Но очередной облом, тайлы с номером 0х00000201 есть и камни и деревья, но есть и растения проходимые

Code: Select all
sub Test()
var x = uo.getx(), y = uo.gety() + 1, tileid
tileid = uo.getstatictiles(x, y, 0)
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000040) or contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000201) then
uo.print("Непроходимый тайл!")
else
if not contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x04000000) then
uo.print("Проходимый тайл!")
else
tileid = uo.getlandscapetile(x, y, 0)
if contains(uo.hex2int(UO.GetTileFlags(0, tileid)), 0x00000040) then
uo.print("Непроходимый тайл!")
else
uo.print("Проходимый тайл!")
end if
end if
end if
end sub
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Ты тайлы статики разделяй или хоть в принт выводи их, чтоб видеть, что там насобирала эта функция, она записывает все ид статики в заданных координатах через запятую, если ты целиком эту строку со всеми тайлами отправишь на флаг – она не правильно выдаст флаги.
0x201 от куда взял флаг? Если хочешь узнать проходимо или нет – проверяй только на 0x40, 201 это флаги тайла, выуди из них что содердит данный тайл и сделай вывод, какой именно флаг ты ищешь. В инсайд уо детали тайла нажми, он напишет какие флаги содержит объект. Или на этом тайле находится еще какая–то статика, может скрытая патчем верды.
0x201 от куда взял флаг? Если хочешь узнать проходимо или нет – проверяй только на 0x40, 201 это флаги тайла, выуди из них что содердит данный тайл и сделай вывод, какой именно флаг ты ищешь. В инсайд уо детали тайла нажми, он напишет какие флаги содержит объект. Или на этом тайле находится еще какая–то статика, может скрытая патчем верды.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Откуда взял 201? uo.print(UO.GetTileFlags(1, tileid)), все эти влаги им и смотрел. В инсайд уо нет информации по флагу, только номера.
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Там список названий флагов написан где–то, вроде в скобках рядом с флагом
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Открываем инсайд, тыкаем на дерево (к примеру). Видим следующее:
Его флаги 0x20040 (как и то, где ты нашел 0x201)
Там же описывается, какие именно флаги входят в набор:
Flags: Impassable, Foliage (0x20040)
Находим индексы флагов, выбираем нужный индекс и настраиваем фильтр только по этому флагу.
Запись не актуальна.
Code: Select all
Overall Index: 19678 (0x4CDE)
Tag: 0001
Group: Static Tiles
Group Relative Lookup Offset: 3059 (0xBF3)
Group Index: 3294 (0xCDE)
Flags: Impassable, Foliage (0x20040)
Weight: 255 (0xFF)
Quality: 0 (0x0)
Unknown: 0 (0x0)
Unknown1: 0 (0x0)
Quantity: 0 (0x0)
Anim Id: 0 (0x0)
Unknown2: 0 (0x0)
Hue: 0 (0x0)
Unknown3: 0 (0x0)
Height: 2 (0x2)
Name: oak leaves
Его флаги 0x20040 (как и то, где ты нашел 0x201)
Там же описывается, какие именно флаги входят в набор:
Flags: Impassable, Foliage (0x20040)
Находим индексы флагов, выбираем нужный индекс и настраиваем фильтр только по этому флагу.
Code: Select all
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000040)
нули можно сократить
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x40)
Запись
Code: Select all
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000201)
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
В Details у меня появляется окно Details under construction и ппц. Окна с информацией нет.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Скачал уофидлер, он нормально показывает, в итоге имеем
и, хотя есть флаг непроходимости, скрипт видит его как проходимый объект, только что проверил.
Code: Select all
Name: willow tree
Graphic: 0x0CE6 (3302)
Height/Capacity: 10
Weight: 255
Animation: 0
Quality/Layer/Light: 0
Quantity: 0
Hue: 0
StackingOffset/Unk4: 0
Flags: Background, Impassable, ArticleA
и, хотя есть флаг непроходимости, скрипт видит его как проходимый объект, только что проверил.
-
- Posts: 820
- Joined: 2011-06-11 19:54:23
Re: Script.dll + include
Code: Select all
sub Test()
uo.textclear()
uo.textopen()
uo.setmulpath('E:\Ultima Online')
var tileid='0x0CE6'
uo.textprint('tileid='+tileid)
var f=UO.GetTileFlags(1,tileid)
uo.textprint('tile='+tileid)
uo.textprint('flags='+f)
if contains(uo.hex2int(f),0x40) then
uo.textprint("Непроходимый тайл!")
else
uo.textprint("Проходимый тайл!")
endif
end sub
Выдаст
Code: Select all
tileid=0x0CE6
tile=0x0CE6
flags=0x00004041
Непроходимый тайл!
Запринть какой он у тебя тайл проверяет в данный момент, скорее всего это не этот тайл.
-
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Script.dll + include
Code: Select all
0x0D29(0),0x0CE7(0),0x0CE6(0)
0x00000201
Проходимый тайл!
Сразу три каких-то.