Данный мод позволяет ускорить и в разы облегчить разработку модов.
Данный мод ( Библиотека ) на данный момент не имеет конкурентов.
Особенности:
Event Manager на замену ScriptInvoker, CallQueue
имеет ряд преимуществ, не вызывает задержек при вызове.
Имеет свою структуру данных. Позволяет хранить любые данные.
И создавать совершенно разные преимущества перед остальными.
А так же является универсальным загрузчиком и инициализатором вашим модов или скриптов.
Network
Самая интересная и сложная в реализации класс.
Выполняет роль получения и отправки пакетов, позволяет отправлять и получать данные в любом порядке.
А самое главное поддерживает очень широкий список данных для отправки по сети.
* Поддерживает следующие типы
* # float
* # int
* # string
* # class
* # managed
* # vector
Инструкция по запуску мода, без modded:
1. Начнем с создания класса
ref _NEW_CLASS newClass = new _NEW_CLASS ();
class _NEW_CLASS { ... }
2. Нам нужно инициализировать событие в классе
обычно мы в missionServer / GameplayMission вписываем наш мол что бы он заработал, но благодаря данному апи, нам больше не требуется вмешиваться в данные файлы. Напишем следующий код.
void _NEW_CLASS_()
{
event.AddWaitFunc(this, "Init", event.SERVER.ON_INIT)
}
void Init()
{
Print("Скрипт _NEW_CLASS_ Запустился, Сервер принимает подключения");
}
Теперь наша функция Init() сработала, после того как сервер начал принимать подключения новых игроков. А значит все настройки сервера были завершены.
Инструкция Network:
class _NEW_CLASS_
{
Здесь можно создать Network 2-мя способами.
//ref Network networkServer = new Network(this); // Здесь имя сети примет, имя вашего класса. т.е '_NEW_CLASS_'
ref Network networkServer = new Network(this, "You Custom Name Network"); // меня не устраивает имя '_NEW_CLASS_' задал свое имя
void _NEW_CLASS_()
{
event.AddWaitFunc(this, "Init", event.SERVER.ON_INIT) // Иницилизируем наш мод. На окончание загрузки сервера.
}
void ExecCommand()
{
if(networkServer.GetData() == null) return; // В дальнейшех патчах исправлю null сигнатуру.
string noTitle;
if(networkServer.GetData().Read(noTitle)) Print(noTitle); // Нужно читать строго по порядку записи.
string titleText;
if(networkServer.GetData().Read("titleCommand", titleText)) Print(titleText); // Можем читать в любом порядке.
}
void Init()
{
Print("Скрипт _NEW_CLASS_ Запустился, Сервер принимает подключения");
//Теперь представим, что весь код который здесь находится на клиенте.
//Я хочу выполнить команду ExecCommand, которая находится на сервере
NetworkCommand cmd = new NetworkCommand("You Custom Name Network"); // Пишем сюда имя сети. Которое указали выше.
cmd.Data.Write("Hello World Example 1"); // Здесь записываем порядочные данные. Читать тоже придется по порядку.
cmd.Data.Write("titleCommand", "Hello World Example 1"); // Записываем по заголовку. Можем читать как хотим.
// Сами данные могут быть любые, из поддерживаемых форматов.
// Например cmd.Data.Write("playerBase", m_player); //playerBase - является заголовком для пакета.
cmd.SendPacket("ExecCommand"); // Сюда пишем название функции, которую хотим выполнить.
//cmd.ClearData() - можем очистить записанные данные, что бы записать новые данные и отправить другим пакетом.
//Используя текущий коммандер
}
}
Если захотите отблагодарить за проделанную работу
реквизиты можете посмотреть в мастерской стим.
APIWrapper
https://steamcommunity.com/sharedfiles/filedetails/?id=1839439370