Script.dll + include

ASM, Perl, IRW, other injections and script modules

Moderators: Murderator+, Murderator

Locked
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

Image

как получилось добавить пустую строку, но никак удалить не могу)
баг не баг, я не знаю.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Не, так и должно быть)
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Script.dll + include

Post by Gromiz »

иногда, когда редактирую скрипт в окне инжи, вылетает ошибка и игра закрывается.
на всякий случай добавил лог инжекта в прикреление
Attachments
injection_log.txt
ошибки инжекта
(8.63 KiB) Downloaded 323 times
Qualis Eram
Posts: 104
Joined: 2005-04-16 23:33:13
Contact:

Re: Script.dll + include

Post by Qualis Eram »

Функция скрипта uo.exec("exec __PauseAll") поставит на паузу все запущенные скрипты.
В игре: ,exec __PauseAll
А можно это сделать на хоткей? Если да, то как?
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

exec __PauseAll
Без запятой только.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Обновил модули.
Добавил функции по работе с тайлами:

Code: Select all

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: Select all

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: Select all

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: Select all

if Contains(uo.hex2int(UO.GetTileFlags(TileGroup,TileID)),0x40) then
   //Непроходимый тайл
endif


Флаги УО (источник http://uo.stratics.com/heptazane/fileformats.shtml):

Code: Select all

 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
Last edited by Juicy Fruit on 2013-06-17 22:12:08, edited 3 times in total.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

Например в заданных координатах мы проверяем тайл на статику, если есть статика и она проходимая то идем, а если статики там нет? То нужно делать еще одну проверку но уже проходимости земли а не статики?
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Думаю да. Нужно учесть еще Z координату, проверить мост ли это (думаю 0x00000400 Bridge подойдет флаг, не проверял его).
Или можно сразу проверить землю, если проходимый - проверять статику, если вода - проверять на наличие моста и т.д.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

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

Скачал модуль, надеюсь крашить не будет, так как когда-то качал его раньше и вылетала инжа не помню даже нашли проблему или нет. И дизайн редактора тоже не изменился, едреная голубая полоска :P. Хотелось бы что нибудь не утомляющее глаз :oops: типа
Image
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

"на карте номер Map" - что за карта и что за номер? :?
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Map - это map0.mul, map1.mul, map2.mul и т.д. Индекс карты. Для клиентов, использующих дополнительные карты)
Есть сорцы твоего редактора? Могу прикрутить с дллку. Щас могу изменить только цвет, в исходники хайлайтера больше не полезу скорее всего)
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

Редактор - Notepad++ :)
Вообщем мне можно писать на месте мап - 0? UO.GetStaticTiles(X, Y, 0)
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Оу)
Да, ставь 0, если не правильно будет определять - поиграйся с номером карты.
.where пишет, если карта не 0
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

Та же байда осталась, жмешь лог аут, и когда вышел жмешь крестик чтобы закрыть клиент и вылетает :cry:
Image
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

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

Code: Select all

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
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Script.dll + include

Post by Juicy Fruit »

Ошибка из-за того, что инжект почему-то не отлавливает одно сообщение и скриптовая дллка выгружается с ошибками, но это если на Quit жать, чтоб на крестик - не было ещё такого.
Перекачай модуль плиз, там баг был с определением флагов, теперь всё работает правильно.
И статику надо сначала разделить.

Code: Select all

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
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

У нас в клиенте крестик вместо Quit.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

Скачал модуль, уо не заходит, просто исчезает окно с экрана когда последний раз нажимаешь на стрелочку.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

Зашло, вылетало раз 5.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Script.dll + include

Post by Incorrect User »

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