Управление логическими типами:
В ASM есть понятие логических типов. Логический тип это набор каких-либо характерных свойств. Все объекты логического типа "рыба" имеют свойство распадаться на стейки когда на них используют нож. Все ячейки на карте логического типа "вода" могут быть использованы для отлова рыбы. И так далее.

Для установления связей между графическими и логическими типами ASM предоставляет такой инструмент как "списки типов". Существует четыре списка типов. Карты, Статики, Объектов и Персонажей. Такое разделение диктуется принципми работы УО. Так например тип 0x0003 это в случае карты - трава, в случае статики - крест, в случае объекта - тоже крест, в случае персонажа - зомби.

На списки типов наложено ограничение. Один графический тип не может быть связан с двумя или более логическими типами.

Для работы со списками типов есть такие функции:

UO.asmTLMapClear()
UO.asmTLStaticClear()
UO.asmTLObjectClear()
UO.asmTLCharClear()
Функции очищают соответствующие списки типов.

UO.asmTLMapOpen(string FileName)
UO.asmTLStaticOpen(string FileName)
UO.asmTLObjectOpen(string FileName)
UO.asmTLCharOpen(string FileName)
Функции загружают из файла FileName соответствующие списки типов. В целях безопасности открытие списков допустимо только из папки с Injection. Это значит что все имена файлов типа "C:\Windows\EXPLORER.EXE" будут преобразованы в "EXPLORER.EXE". Также не допускается работа с файлом "ilaunch.xml".

UO.asmTLMapSave(string FileName)
UO.asmTLStaticSave(string FileName)
UO.asmTLObjectSave(string FileName)
UO.asmTLCharSave(string FileName)
Функции сохраняют в файл FileName соответствующие списки типов. В целях безопасности сохранение списков допустимо только в папку с Injection. Это значит что все имена файлов типа "C:\Windows\EXPLORER.EXE" будут преобразованы в "EXPLORER.EXE". Также не допускается работа с файлом "ilaunch.xml".

UO.asmTLMapAdd(number GraphicType, string LogicType)
UO.asmTLStaticAdd(number GraphicType, string LogicType)
UO.asmTLObjectAdd(number GraphicType, string LogicType)
UO.asmTLCharAdd(number GraphicType, string LogicType)
Функции устанавливают в соответствующих списках типов связи графического типа GraphicType и логического типа LogicType.

UO.asmTLMapGRemove(number GraphicType)
UO.asmTLStaticGRemove(number GraphicType)
UO.asmTLObjectGRemove(number GraphicType)
UO.asmTLCharGRemove(number GraphicType)
Функции уничтожают в соответствующих списках типов связи графического типа GraphicType и любого логического типа.

string UO.asmTLMapGetLogic(number GraphicType)
string UO.asmTLStaticGetLogic(number GraphicType)
string UO.asmTLObjectGetLogic(number GraphicType)
string UO.asmTLCharGetLogic(number GraphicType)
Функции позволяют определить принадлежит ли указанный графический тип к одному из логических. И если принадлежит, функции возвращают имя этого логического типа.

Привожу только примеры управления списком. Примеры использования списков будут рассматриваться в других разделах.

Примеры:
;Ловим рыбу 1
sub main()
  ;Очищаем список типов карты.
  UO.asmTLMapClear()
  ;Добавляем в список типов карты связь логического типа 'water' с графическим 0x00aa.
  UO.asmTLMapAdd(0x00aa,'water')
  ;Добавляем в список типов карты связь логического типа 'water' с графическим 0x00ab.
  UO.asmTLMapAdd(0x00ab,'water')
  ;Вызываем функцию ловли рыбы.
  CatchFishSee()
  ;Очищаем список типов карты.
  UO.asmTLMapClear()
end sub

;Ловим рыбу 2
sub main()
  ;Очищаем список типов карты.
  UO.asmTLMapClear()
  ;Загружаем в список типов карты связи логического типа 'water' с графическими.
  UO.asmTLMapOpen('WaterMapTiles.dat')
  ;Вызываем функцию ловли рыбы.
  CatchFishSee()
  ;Очищаем список типов карты.
  UO.asmTLMapClear()
end sub