Skip to content

Инструментарий для работы с файлами формата AIN(Valve SDK, GMOD, TF2 и др.)

License

Notifications You must be signed in to change notification settings

anrej0705/Valve-CAinFile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Valve CAinFile

Инструментарий для работы с форматом AIN от Valve(Valve SDK, GMOD, TF2 и проч.)

Простой пример работы(большего и не нужно!)

#include "CAinFileDecoder.h"
int main()
{
    CAinFileDecoder ain("gm_construct.ain");  //Вся работа с AIN осуществляется в процессе создания объекта

    //output -> gm_construct(excel 97).ain.xls

    //Подведение итогов:
    std::vector<ain_node> n_list(*ain.node_list);
    std::vector<ain_link> l_list(*ain.link_list);
    std::vector<int> lut_list(*ain.lut);
}

Need help with EN comments trasnalation!


Структура GMOD AIN

Поле Размер Тип Описание
ain_header 8 байт struct Заголовк карты. Для GMOD значения составляют 37 и 17
numNodes 4 байта int32_t Поле содержащее количество узлов
ain_node n * 61 байт struct Узел
numLinks 4 байта int32_t Поле содерщаее количество межузловых соединений
ain_link n * 40 байт struct Межузловые соединения
lut_int n * 4 байта int32_t Список ИД узлов

Структура заголовка

struct ain_header
{
    int ainet_ver;  //Версия файла(37 для GMOD)
    int map_ver;    //Версия карты(17 для GMOD)
};
Поле Размер Тип Описание
ainet_ver 4 байта int32_t Версия файла(37 для GMOD)
map_ver 4 байта int32_t Версия карты(17 для GMOD)

Структура узла

#deinfe NUM_HULLS 10            //99% карт читаются с таким параметром

PACKED_DATA(struct ain_node     //Размер 61 байт
{
    Vector3 pos;                //[0 +12]x, y, z
    float yaw;                  //[12+4 ]Радиус поиска подсказок для ИИ
    float flOffsets[NUM_HULLS]; //[16+40]Вертикальное смещение для каждого типа сущности, можно оставить 0
    uint8_t nodeType;           //[56+1 ]Тип узла(определяется через перечислитель NodeType_enum)
    uint16_t nodeInfoBits;      //[57+2 ]Биты настройки ноды
    uint8_t zone;               //[59+1 ]??? AI_ZoneIds ???, по умолчанию 0
    uint8_t next;               //[60+1 ]Первая ссылка для проверки?
});
Поле Размер Тип Описание
pos 12 байт Vector3 Структура состоящая из 3 float координат(см Vector3)
yaw 4 байта float Радиус поиска подсказок для ИИ
flOffsets 4 * NUM_HULLS байт float Вертикальное смещение для каждого типа сущности, можно оставить 0
nodeType 1 байт uint8_t Тип узла(определяется через перечислитель NodeType_enum)
nodeInfoBits 2 байта uint16_t Биты настройки ноды
zone 1 байт uint8_t По умолчанию 0
next 1 байт uint8_t Первая ссылка для проверки?

Структура межузлового соединения

#deinfe NUM_HULLS 10            //99% карт читаются с таким параметром

PACKED_DATA(struct ain_link     //Размер 40 байт
{                       
    int16_t srcId;              //Номер узла, который будет соединён
    int16_t desId;              //Номер узла, к которой присоединяется
    uint8_t moves[NUM_HULLS];   //Как правило тут 1, разрешает переход для конкретного типа сущности(1 - разрешён, 0 - не разрешён)
});
Поле Размер Тип Описание
srcId 2 байта int16_t Номер узла, который будет соединён
desId 2 байта int16_t Номер узла, к которой присоединяется
moves 1 байт uint8_t Как правило тут 1, разрешает переход для конкретного типа сущности(1 - разрешён, 0 - не разрешён)

lut_int содержит массив int32_t с ИД всех описанных в файле узлов


Структура Vector3

struct Vector3
{
    float x;
    float y;
    float z;
};
Поле Размер Тип Описание
x 4 байта float X координата
y 4 байта float Y координата
z 4 байта float Z координата

About

Инструментарий для работы с файлами формата AIN(Valve SDK, GMOD, TF2 и др.)

Topics

Resources

License

Stars

Watchers

Forks

Languages