Yoko
http://forum.yoko.com.ua/

Script.dll + include
http://forum.yoko.com.ua/viewtopic.php?f=12&t=16689
Page 7 of 10

Author:  Juicy Fruit [ 2013-06-17 22:20:43 ]
Post subject:  Re: Script.dll + include

о_О такого тоже не наблюдалось ещё...

Author:  Incorrect User [ 2013-06-17 22:24:17 ]
Post subject:  Re: Script.dll + include

TeamViewer есть? Покажу )

Author:  Incorrect User [ 2013-06-17 22:44:56 ]
Post subject:  Re: Script.dll + include

Флаг камня определяет как 0x00000040 но пишет что тайл проходимый, очевидно считает его не 0x40. if contains(val(UO.GetTileFlags(1, tileid)), 0x00000040) then не помогло

Author:  Juicy Fruit [ 2013-06-17 22:52:11 ]
Post subject:  Re: Script.dll + include

Личку прочти, может камень это статика мира, а не карты.

Author:  Incorrect User [ 2013-06-17 22:54:10 ]
Post subject:  Re: Script.dll + include

Проверил, камень статика, не исчезает.

Author:  Incorrect User [ 2013-06-17 23:03:05 ]
Post subject:  Re: Script.dll + include

Похоже беда получается, у деревьев флаг 0х00020040, у кустов 0ч00004040, у сухих кустов 0х40000060 и т.д.

Author:  Juicy Fruit [ 2013-06-17 23:04:36 ]
Post subject:  Re: Script.dll + include

Code:
if contains(val(UO.GetTileFlags(1, tileid)), 0x00000040) then

Замени на
Code:
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000040) then

val не хочет нормально переводить HEX строку, юзай uo.hex2int()
С ним всё норм)

Author:  Incorrect User [ 2013-06-17 23:13:13 ]
Post subject:  Re: Script.dll + include

Прийдется побегать пособирать флаги тайлов и массив сделать. Оно воспримет значение типа
if contains(uo.hex2int(UO.GetTileFlags(1, tileid)), Flags[i]) then

Author:  Incorrect User [ 2013-06-18 01:14:10 ]
Post subject:  Re: Script.dll + include

:shock: скрипт распознает и деревья и кусты как непроходимые тайлы, хотя у них совсем другие номера, пока только камень и дерево с номером 0х00000201 считает проходимым, они статика, я проверил и 0х04000000 тайл скалы тоже считает проходимым. В чем прикол? Номера разные а считает как нужно, а некоторые наоборот считает проходимыми.

Author:  Incorrect User [ 2013-06-18 01:39:23 ]
Post subject:  Re: Script.dll + include

Дошло, значения же соединяются. Все что имеет в конце 40 - непроходимый тайл. Значит 201 добавляем, что делать с 0х04000000? Я так понимаю если выдает 0x04000000 значит в этом месте нет статики, так пишет на всех пустых тайлах, значит если получаем 0x04000000 то значит тайл без объектов статики, и идем проверять его на проходимость земли. Нашел описание на русском
Quote:
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; //Лестница правая

Author:  Incorrect User [ 2013-06-18 01:53:23 ]
Post subject:  Re: Script.dll + include

Да, все верно, вот такой скриптик показывает правильно тайлы. Но очередной облом, тайлы с номером 0х00000201 есть и камни и деревья, но есть и растения проходимые :evil:
Code:
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

Author:  Juicy Fruit [ 2013-06-18 07:59:35 ]
Post subject:  Re: Script.dll + include

Ты тайлы статики разделяй или хоть в принт выводи их, чтоб видеть, что там насобирала эта функция, она записывает все ид статики в заданных координатах через запятую, если ты целиком эту строку со всеми тайлами отправишь на флаг – она не правильно выдаст флаги.
0x201 от куда взял флаг? Если хочешь узнать проходимо или нет – проверяй только на 0x40, 201 это флаги тайла, выуди из них что содердит данный тайл и сделай вывод, какой именно флаг ты ищешь. В инсайд уо детали тайла нажми, он напишет какие флаги содержит объект. Или на этом тайле находится еще какая–то статика, может скрытая патчем верды.

Author:  Incorrect User [ 2013-06-18 11:46:57 ]
Post subject:  Re: Script.dll + include

Откуда взял 201? uo.print(UO.GetTileFlags(1, tileid)), все эти влаги им и смотрел. В инсайд уо нет информации по флагу, только номера.

Author:  Juicy Fruit [ 2013-06-18 13:42:51 ]
Post subject:  Re: Script.dll + include

Там список названий флагов написан где–то, вроде в скобках рядом с флагом

Author:  Incorrect User [ 2013-06-18 14:03:17 ]
Post subject:  Re: Script.dll + include

Похоже мы о разных вещах говорим, не пойму о чем ты.

Author:  Juicy Fruit [ 2013-06-18 17:34:48 ]
Post subject:  Re: Script.dll + include

Открываем инсайд, тыкаем на дерево (к примеру). Видим следующее:
Code:
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:
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000040)
нули можно сократить
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x40)

Запись
Code:
contains(uo.hex2int(UO.GetTileFlags(1, tileid)), 0x00000201)
не актуальна.

Author:  Incorrect User [ 2013-06-18 17:50:18 ]
Post subject:  Re: Script.dll + include

В Details у меня появляется окно Details under construction и ппц. Окна с информацией нет.

Author:  Incorrect User [ 2013-06-18 18:03:46 ]
Post subject:  Re: Script.dll + include

Скачал уофидлер, он нормально показывает, в итоге имеем
Code:
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

и, хотя есть флаг непроходимости, скрипт видит его как проходимый объект, только что проверил.

Author:  Juicy Fruit [ 2013-06-18 18:07:35 ]
Post subject:  Re: Script.dll + include

Code:
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:
tileid=0x0CE6
tile=0x0CE6
flags=0x00004041
Непроходимый тайл!

Запринть какой он у тебя тайл проверяет в данный момент, скорее всего это не этот тайл.

Author:  Incorrect User [ 2013-06-18 18:23:35 ]
Post subject:  Re: Script.dll + include

Code:
0x0D29(0),0x0CE7(0),0x0CE6(0)
0x00000201
Проходимый тайл!

Сразу три каких-то.

Page 7 of 10 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/