Скрипт Lua для взаимодействия между ботом и pvpgn уже готов, все эти функции и события реализованы, в т.ч. таймер. То есть, все это возможно.
Чтение и отправка нестандартных пакетов возможно добавить самостоятельно через C++ код, чтобы затем его можно было использовать в Lua (событие для получения "сырых" пакетов, и функцию для их отправки). Функции для стандартных вычислений предоставляет сам движок Lua https://www.lua.org/manual/5.1/
Функции определены в luafunctions.cpp, и они же регистрируются в luainterface.cpp. Здесь же внизу файла определены события (events). В luaobjects.cpp функции для получения объектов (аккаунт, канал, игра, клан).
Те функции и события, которые созданы в С++ и транслированы через движок Lua, можно вызывать из скриптов Lua.
Касательно реализации текущего механизма встраивания Lua движка, у меня есть сомнения в плане производительности. Например, сейчас в память загружаются все скрипты из папки lua. Всё функции загружаются в глобальную область видимости, и перед вызовом любой из функций происходит итерация всех доступных функций. Возможно, с этим особых проблем и нет, но правильнее было бы загружать каждый используемый файл через require/include, как это везде делается.
Неправильно сделана реализация ряда функций, экспортируемых из C++ в Lua. В C++ коде обращение происхдит по указателю (быстро), но для тех же функций Lua все объекты загружается в память (медленно). Например, get_account_object загружает аккаунта юзера со всеми его свойствами в память.
Это упрощает доступ к объекту, например можно получить аккаунт и обращаться к его свойствам как к объекту:
account = account_get_by_id(123)
name = account.name
Вместо аналогичного кода в C++, где чтобы получить любое из свойств, нужно вызвать соответствующую функцию, которая, при необходимости, обратится к бд в нужный момент
account = account_get_by_id(123)
name = account_get_name(account.id)
Поэтому в Lua, в противоположность к удобству, это значит, что если потребуется посчитать сколько юзеров находятся в играх, придется обойти все аккаунты и фактически для каждого из них загрузятся все данные из базы данных.
Lua работает в том же потоке, в котором и выполняется вся остальная работа, и длительные операции будут тормозить весь сервер (таймеры в Lua я сделал без блокирования потока, так что их можно использовать без проблем). Но это уже проблема самого pvpgn, т.к. в нем не заложена многопоточноть.
Стоит обратить внимание, что сейчас встроен Lua 5.1, и он не совместим с последней версией 5.3, которую как-то по-другому нужно встраивать, и у меня не получилось. На тот момент везде советовали 5.1, и готовые решения были только для него.
Сейчас, если бы была возможность, я бы лучше добавил Javascript вместо Lua. У него больше стандартных возможностей, и как по мне, под него проще писать скрипты.
В целом, сейчас Lua годен для небольших серверов, и требует доработки для использования на крупных серверах. Так что будем считать что он в режиме experimental.
---
Вся информация по использованию сейчас только в самих файлах *.lua, на примерах. Как уже писал выше, нет файла с точкой входа - загружаются все файлы разом. Названия файлов и папок не имеют значения, и можно было бы без изменений в один файл всё соединить.
Все новые команды добавляются в handle_command.lua в таблицу lua_command_table. Для удобного разделения я решил добавлять каждую новую команду в отдельный файл, в папке lua/command/.
Do not ask for support in PM.