ASI [1.0.3] Xcode

Musaigen

abobusnik
Автор темы
Проверенный
1,584
1,303
Если надо, то могу написать в теме отдельный пост о создании своей документации.
Ну как и обещал, запоздал пост конечно, ну ладно.

Основы​

Начну издалека, документации создаются в папке xcode/docs/lua
И пока что, они только для языка Lua (може-е-е-т быть, добавлю в будущих версиях и другие языки).
Документация является файлом формата json.
В документации есть два главных файла это index.json и %вставьте_название_языка%.json (В нашем случае - lua.json)
index.json - индексирует корневой файл (lua.json) и аддоны (Расширение документации).
index.json не может находиться в какой-либо папке.

lua.json​

Корневой файл имеет такой вид:
JSON:
{
    "name": "Lua", // Имя языка
    "comment-start": "--[[", // Начало multi-line комментария (в Lua забаговано, в других языках ХЗ.)
    "comment-end": "]]", // Конец multi-line комментария
    "single-line-comment": "--", // Однострочный комментарий
    "auto-indentation": true, // Авто-табуляция (true - включена / false - выключена.)
    "case-sensitive": true, // Регистрозависимость
    "keywords": [ // Ключевые слова в языке.
        "and",
        "break",
        "do",
        "else",
        "elseif",
        "end",
        "false",
        "for",
        "function",
        "if",
        "in",
        "local",
        "nil",
        "not",
        "or",
        "repeat",
        "return",
        "then",
        "true",
        "until",
        "while"
    ]
    // Также тут должны быть ещё два поля: regex и identifiers
    // regex убран в угоду собственного токенайзера, однако как поле вы его всё равно можете добавить
    // но, он не будет парситься.
    // identifiers расфасован по аддонам
    "regex": {
        "string": ["some regex", "some regex2"], // Регулярные выражения для строк
        "number": ["some regex"], // Для чисел
        "identifier": ["some regex"], // Для идентификаторов
        "punctuation": ["some regex228"] // Для пунктуации (например, .,:[]{}%+*-/=<>~ )
    } // На деле, регулярных выражений может быть больше, но в коде парсятся только эти 4.
    // Как оформляются identifiers рассмотрим позже.
}

index.json​

index.json имеет такой вид:
JSON:
{
    "root": "lua.json", // Корневой файл может быть в любой папке...
                        // Главное указать что он в находится именно в папке.
    "addons": [ // Список расширений (аддонов)
        /*
        Расширения могут находиться в папках, главное это указать.
        Расширения указываются через запятую.
        Расширений может быть сколько угодно.
        */
        "lua/basic.json",
        "lua/coroutine.json",
        "lua/module.json",
        "lua/string.json",
        "lua/table.json",
        "lua/math.json",
        "lua/io.json",
        "lua/os.json",
        "lua/debug.json",
         // Последнее расширение в списке не должно содержать запятой после себя.
        "moonloader/moonloader.json", // Содержит запятую, так как предпоследнее.
        "moonloader/snippets.json" // Не содержит запятую после себя, так как последнее.
    ]
}
Стандартные функции/переменные языка Lua расфасованы по отдельным JSON файлам в угоду удобства.

Оформление расширения и идентификатора​

Типичное расширение имеет такой вид:
JSON:
{
    // Массивы в JSON указываются в квадратных скобках,
    // Объекты в фигурных.
    "identifiers": [
        {
            "id": "print", // Название идентификатора, print взят чисто для примера
            "description": [ // Описание идентификатора, может указываться как одной строкой,
                // так и массивом
                "1337",
                "228"
            ],
            "signature": "print (...)" // Общий вид функции, т.е что она возвращает, какие аргументы принимает и т.д
            "snippet": "local result = print(\"1488\")" // Сниппет идентификатора, может указываться как одной строкой,
            // так и массивом.
            // Более подробно можно посмотреть в moonloader/snippets.json
        },
        {
            // Новый идентификатор, оформляется точно также, как и пример сверху.
            // Однако, поля "description", "signature", "snippet" не обязательны.
            // Если поля "id" не будет, парсер пропустит этот идентификатор.
        }
    ]
}
Все идентификаторы обязательно должны находиться в массиве "identifiers", иначе их не пропарсит.
Создание документации перенесу в следующий пост.
 

Musaigen

abobusnik
Автор темы
Проверенный
1,584
1,303

Создание документации​

В качестве примера создам документацию для двух функций из mimgui и один шаблон скрипта.
Создадим в "xcode/docs/lua" папку tutorial и поместим туда два файла: mimgui.json и template.json
Опишем функции imgui.Begin и imgui.End
mimgui.json:
{
    "identifiers": [
        {
            "id": "imgui.Begin",
            "description": [
                "Shows a window with name @name and flags @flags",
                "If @open is specified then the window can be closed."
            ],
            "signature": "local result = imgui.Begin(name, open, flags)"
        },
        {
            "id": "imgui.End",
            "description": "Ends the window drawing.",
            "signature": "imgui.End()"
        }
    ]
}
template.json:
{
    "identifiers": [
        {
            "id": "mimgui_script",
            "snippet": [
                "local imgui = require(\"mimgui\")",
                "local show = imgui.new.bool(true)",
                "",
                "function main()",
                "\twait(-1)",
                "end",
                "",
                "imgui.OnInitialize(function()",
                "\t-- init",
                "end)",
                "",
                "imgui.OnFrame(function()",
                "\treturn show[0] and not isGamePaused()",
                "end,",
                "function() end,",
                "function(self)",
                "\timgui.Begin(\"Test Window\", show)",
                "\timgui.Text(\"Ok\")",
                "\timgui.End()",
                "end)"
            ]
        }
    ]
}
Добавляем эти два файла в index.json, чтобы получилось вот так:
index.json:
{
    "root": "lua.json",
    "addons": [
        "lua/basic.json",
        "lua/coroutine.json",
        "lua/module.json",
        "lua/string.json",
        "lua/table.json",
        "lua/math.json",
        "lua/io.json",
        "lua/os.json",
        "lua/debug.json",
        "moonloader/moonloader.json",
        "moonloader/snippets.json",
        "tutorial/mimgui.json",
        "tutorial/template.json"
    ]
}
Ну и получаем это:
Screenshot_295.png

Screenshot_296.png

Screenshot_298.png
 

Gruzin Gang

Всефорумный Грузин
824
610
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 96066
Описание: Редактор кода .lua файлов прямо в игре.
Возможности:
  1. Независимость от версии SA:MP (возможен запуск на самых древних версиях). Возможен запуск на чистой GTA (Хотя этот плагин предназначался в первую очередь для написания скриптов под MoonLoader).
  2. Поддержка кириллицы (Чтение/запись из/в файл(а)).
  3. Подсветка синтаксиса и функций (стандартные в Lua + функции MoonLoader).
  4. Авто-табуляция.
  5. Работа с файлами через удобный интерфейс.
  6. Autocomplete.
  7. Возможность редактировать документацию функций/переменных (проще говоря, добавлять свои/редактировать подсказки в autocomplete).
  8. Работа с несколькими файлами (вкладки).
Конфликты:
d3d9 (Собейт)Синглплеер GTA:SA
Краш при выходе из игры, в остальном работа нормальная.
Ломает работу некоторых патчей Xcode (например, патч включения scoreboard).
Написание кода возможно только в меню (при игре, например, прохождении миссии, можно лишь любоваться на меню плагина).
Краш при выходе из игры, в остальном работа нормальная.
С SAMPFUNCS, CLEO, MoonLoader, SA:MP конфликтов не замечено.
TODO:
  1. Подсветка ошибок.
  2. Исправить работу с собейтом, а также работу в одиночной игре.
Фотокарточки: Credits:
  1. ocornut - imgui (MIT License)
  2. BalazsJako - ImGuiColorTextEdit (MIT License)
  3. AirGuanZ - imgui-filebrowser (MIT License)
  4. nlohmann - json (MIT License)
Зависимости: Silent's ASI Loader, gta_sa.exe 1.0 US
Активация: F2
Установка: Распаковать содержимое ZIP архива в папку с игрой.
Source code: In the future...
Другое: Не изменяйте название плагина.
1621786288033.png

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

Musaigen

abobusnik
Автор темы
Проверенный
1,584
1,303
зависимость от сампа: привет
Её не будет. Хук на конструктор, с хука берёшь указатель на инпут, потом через pattern search находишь адрес функции регистрации команды и всё. Адрес конструктора тоже через паттерны.
 
  • Нравится
  • Вау
Реакции: CaJlaT и kizn

Musaigen

abobusnik
Автор темы
Проверенный
1,584
1,303
на рабочем столе а винда установлена на D
Тогда прав на редактирование файла мб нет.
Ибо я файлы открываю спокойно.
Отпишитесь у кого ещё такая проблема есть (да и те у кого её нет - тоже отпишитесь)
 

kotletza.

Новичок
6
6
Посмотреть вложение 96066
Описание: Редактор кода .lua файлов прямо в игре.
Возможности:
  1. Независимость от версии SA:MP (возможен запуск на самых древних версиях). Возможен запуск на чистой GTA (Хотя этот плагин предназначался в первую очередь для написания скриптов под MoonLoader).
  2. Поддержка кириллицы (Чтение/запись из/в файл(а)).
  3. Подсветка синтаксиса и функций (стандартные в Lua + функции MoonLoader).
  4. Авто-табуляция.
  5. Работа с файлами через удобный интерфейс.
  6. Autocomplete.
  7. Возможность редактировать документацию функций/переменных (проще говоря, добавлять свои/редактировать подсказки в autocomplete).
  8. Работа с несколькими файлами (вкладки).
Конфликты:
d3d9 (Собейт)Синглплеер GTA:SA
Краш при выходе из игры, в остальном работа нормальная.
Ломает работу некоторых патчей Xcode (например, патч включения scoreboard).
Написание кода возможно только в меню (при игре, например, прохождении миссии, можно лишь любоваться на меню плагина).
Краш при выходе из игры, в остальном работа нормальная.
С SAMPFUNCS, CLEO, MoonLoader, SA:MP конфликтов не замечено.
TODO:
  1. Подсветка ошибок.
  2. Исправить работу с собейтом, а также работу в одиночной игре.
Фотокарточки: Credits:
  1. ocornut - imgui (MIT License)
  2. BalazsJako - ImGuiColorTextEdit (MIT License)
  3. AirGuanZ - imgui-filebrowser (MIT License)
  4. nlohmann - json (MIT License)
Зависимости: Silent's ASI Loader, gta_sa.exe 1.0 US
Активация: F2
Установка: Распаковать содержимое ZIP архива в папку с игрой.
Source code: In the future...
Другое: Не изменяйте название плагина.
Годная тема,ато бесит когда пишешь скрипт,заходишь тестить а он не работает,потом выходить,фиксить его,это утомительно,поэтому лично для меня это очень полезно.
 
  • Нравится
Реакции: deadraze и raze.

Musaigen

abobusnik
Автор темы
Проверенный
1,584
1,303
Её не будет. Хук на конструктор, с хука берёшь указатель на инпут, потом через pattern search находишь адрес функции регистрации команды и всё. Адрес конструктора тоже через паттерны.
На деле можно ещё проще, достаточно хукнуть регистрацию команды и в ней зарегистрировать уже свою.