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

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

Author:  Gromiz [ 2013-01-19 07:40:27 ]
Post subject:  Re: Script.dll + include

Image

как получилось добавить пустую строку, но никак удалить не могу)
баг не баг, я не знаю.

Author:  Juicy Fruit [ 2013-01-19 08:59:59 ]
Post subject:  Re: Script.dll + include

Не, так и должно быть)

Author:  Gromiz [ 2013-01-20 09:00:15 ]
Post subject:  Re: Script.dll + include

иногда, когда редактирую скрипт в окне инжи, вылетает ошибка и игра закрывается.
на всякий случай добавил лог инжекта в прикреление

Attachments:
File comment: ошибки инжекта
injection_log.txt [8.63 KiB]
Downloaded 264 times

Author:  Qualis Eram [ 2013-05-16 22:18:10 ]
Post subject:  Re: Script.dll + include

Функция скрипта uo.exec("exec __PauseAll") поставит на паузу все запущенные скрипты.
В игре: ,exec __PauseAll
А можно это сделать на хоткей? Если да, то как?

Author:  Juicy Fruit [ 2013-05-17 00:50:39 ]
Post subject:  Re: Script.dll + include

exec __PauseAll
Без запятой только.

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

Обновил модули.
Добавил функции по работе с тайлами:
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_gettile()
   uo.setmulpath('E:\Ultima Online')
   uo.setshowz(1)
   uo.print('Landscape Tile ID(Z) = '+uo.getlandscapetile(4376,1119,0))
   uo.print('Array of Static Tile ID(Z) = '+uo.getstatictiles(4376,1119,0))
   uo.setshowz(0)
   uo.print('Decimal Landscape Tile ID = '+str(uo.hex2int(uo.getlandscapetile(4372,1119,0))))
   if (contains(0x12,0x10)) then
      uo.print('0x12 Have! 0x10')
   else
      uo.print('0x12 NOT have 0x10!')
   endif
   if (contains(0x9,0x10)) then
      uo.print('0x9 Have! 0x10')
   else
      uo.print('0x9 NOT have 0x10!')
   endif
end sub

Выведет в чат:
Code:
Landscape Tile ID(Z) = 0x00C4(0)
Array of Static Tile ID(Z) = 0x177C(0)
Decimal Landscape Tile ID = 218
0x12 Have! 0x10
0x9 NOT have 0x10!


Чтоб узнать, проходимый это тайл или нет:
Узнайте TileID, укажите TileGroup (земля (0) или статика (1))
Флаг проходимости тайлов 0x40
Проверьте тайл на проходимость:
Code:
if Contains(uo.hex2int(UO.GetTileFlags(TileGroup,TileID)),0x40) then
   //Непроходимый тайл
endif


Флаги УО (источник http://uo.stratics.com/heptazane/fileformats.shtml):
Code:
 0x00000001 Background
 0x00000002 Weapon
 0x00000004 Transparent
 0x00000008 Translucent
 0x00000010 Wall
 0x00000020 Damaging
 0x00000040 Impassable
 0x00000080 Wet
 0x00000100 Unknown
 0x00000200 Surface
 0x00000400 Bridge
 0x00000800 Generic/Stackable
 0x00001000 Window
 0x00002000 No Shoot
 0x00004000 Prefix A
 0x00008000 Prefix An
 0x00010000 Internal (things like hair, beards, etc)
 0x00020000 Foliage
 0x00040000 Partial Hue
 0x00080000 Unknown 1
 0x00100000 Map
 0x00200000 Container
 0x00400000 Wearable
 0x00800000 LightSource
 0x01000000 Animated
 0x02000000 No Diagonal
 0x04000000 Unknown 2
 0x08000000 Armor
 0x10000000 Roof
 0x20000000 Door
 0x40000000 StairBack
 0x80000000 StairRight

Author:  Incorrect User [ 2013-06-17 20:33:39 ]
Post subject:  Re: Script.dll + include

Например в заданных координатах мы проверяем тайл на статику, если есть статика и она проходимая то идем, а если статики там нет? То нужно делать еще одну проверку но уже проходимости земли а не статики?

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

Думаю да. Нужно учесть еще Z координату, проверить мост ли это (думаю 0x00000400 Bridge подойдет флаг, не проверял его).
Или можно сразу проверить землю, если проходимый - проверять статику, если вода - проверять на наличие моста и т.д.

Author:  Incorrect User [ 2013-06-17 20:51:11 ]
Post subject:  Re: Script.dll + include

А Z координата чара не прокатит? Хотя помоему инжект не очень с ней дружит. Надо определиться с формулой проверки. Думаю так и будет, проверяем на статичные обьекты, обычно если есть проходимая статика на земле или воде то проход свободен, на это и будем расчитывать. И уже если объектов статики нет то будем проверять проходимость земли.

Скачал модуль, надеюсь крашить не будет, так как когда-то качал его раньше и вылетала инжа не помню даже нашли проблему или нет. И дизайн редактора тоже не изменился, едреная голубая полоска :P. Хотелось бы что нибудь не утомляющее глаз :oops: типа
Image

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

"на карте номер Map" - что за карта и что за номер? :?

Author:  Juicy Fruit [ 2013-06-17 21:15:35 ]
Post subject:  Re: Script.dll + include

Map - это map0.mul, map1.mul, map2.mul и т.д. Индекс карты. Для клиентов, использующих дополнительные карты)
Есть сорцы твоего редактора? Могу прикрутить с дллку. Щас могу изменить только цвет, в исходники хайлайтера больше не полезу скорее всего)

Author:  Incorrect User [ 2013-06-17 21:25:29 ]
Post subject:  Re: Script.dll + include

Редактор - Notepad++ :)
Вообщем мне можно писать на месте мап - 0? UO.GetStaticTiles(X, Y, 0)

Author:  Juicy Fruit [ 2013-06-17 21:29:25 ]
Post subject:  Re: Script.dll + include

Оу)
Да, ставь 0, если не правильно будет определять - поиграйся с номером карты.
.where пишет, если карта не 0

Author:  Incorrect User [ 2013-06-17 21:33:29 ]
Post subject:  Re: Script.dll + include

Та же байда осталась, жмешь лог аут, и когда вышел жмешь крестик чтобы закрыть клиент и вылетает :cry:
Image

Author:  Incorrect User [ 2013-06-17 21:36:00 ]
Post subject:  Re: Script.dll + include

Теперь по скрипту, я правильно все сделал? Подхожу к дереву, пишет проходимый тайл, значит не понимает что оно непроходимый обьект?
Code:
sub Test()
  var x = uo.getx(), y = uo.gety() + 1, tileid
  tileid = uo.getstatictiles(x, y, 0)
  if contains(val(UO.GetTileFlags(1, tileid)),0x40) then
  uo.print("Непроходимый тайл!")
  else
  uo.print("Проходимый тайл!")
  end if
end sub

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

Ошибка из-за того, что инжект почему-то не отлавливает одно сообщение и скриптовая дллка выгружается с ошибками, но это если на Quit жать, чтоб на крестик - не было ещё такого.
Перекачай модуль плиз, там баг был с определением флагов, теперь всё работает правильно.
И статику надо сначала разделить.
Code:
sub Test()
   uo.setmulpath('E:\Ultima Online')
   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 хватит думаю
   var l=Str2Tiles(tiles,tileid)
   var i,f
   if l>0 then
      for i=0 to l-1
         f=UO.GetTileFlags(1,tiles[i])
         uo.print('tile='+tiles[i])
         uo.print('flags='+f)
         if contains(uo.hex2int(f),0x40) then
            uo.print("Непроходимый тайл!")
         else
            uo.print("Проходимый тайл!")
         end if
      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

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

У нас в клиенте крестик вместо Quit.

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

Скачал модуль, уо не заходит, просто исчезает окно с экрана когда последний раз нажимаешь на стрелочку.

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

Зашло, вылетало раз 5.

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

Похоже вылетает если чар еще не исчез, когда исчез - заходит.

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