- 1,789
- 2,131
Не так давно меня спрашивали о возможности сделать на основе SL:NET гибридную систему, совмещающую с себе и возможность создавать сервера (хост-функция), и возможность подключаться к созданному серверу - чтобы всё это было в одном и том же скрипте.
Выше выкладывался пример чата, который имеет стандартную модель работы: несколько клиентов и отдельный сервер. Сейчас же мной публикуется скрипт, который имеет гибридную систему работы. Один из клиентов может стать сервером, а остальные подключиться к нему. При этом и клиент, ставший сервером, и все остальные клиенты будут иметь возможность видеть и отправлять сообщения.
Также в данном примере продемонстрирована система подключения и отключения клиентов, а также автоматическое исключение клиент в случае, если никаких входящих пакетов с его стороны не обнаружено на протяжение 30 секунд, т.е. система бездействия пользователя.
/chat.host [chat name] - стать хостом чата, т.е. создать новый чат для подключения
/chat.connect [chat IP] - присоединиться к созданному кем-то чату
/ch [chat message] - отправить свое сообщение в чат, к которому вы подключены
Для работы этого примера требуется SA:MP, ибо, как можно догадаться, он привязан к SA:MP чату.
Система автоматического отключения иногда не срабатывает, но это не так страшно - система бездействия всё сделает.
Ещё один пример скрипта с гибридной системой работы. Здесь представлен пример того, как можно реализовать синхронизацию между игроками в какой-либо игре. Скрипт зависим от mimgui, так что для тестирования нужно будет его установить. В общем и целом, в примере представлена простейшая синхронизация перемещения игроков по игровому полю, представленному в 2D-пространстве.
Никакой задачи в игре нет, изначально хотел, чтобы можно было что-то собирать на поле, но мне стало немного лень, поэтому игроки, представленный кружочками с никнеймами над собой, просто катаются по полю при помощи WASD и ускоряются с помощью SHIFT.
Так же, как и в прошлом примере, реализована система бездействия и автоматического выкидывания игрока. Система ручного отключения не сделана, также не добавлял различные проверки на одинаковые никнеймы, координаты и прочее. Пример этого всего есть в скрипте выше, поэтому при желании можно понять что и как работает. Без этих проверок при желании можно выкинуть игрока за карту.
/slgame - открыть окно примера
Для работы этого примера требуется SA:MP, ибо, как можно догадаться, он привязан к SA:MP чату.
Надеюсь, этот пример также будет полезен и посодействует созданию ваших собственных проектов.
Посмотреть вложение 71329
Добавлен SL:NET модуль, работающий на базе C++ с поддержкой Windows и UNIX систем. Умеет работать вместе со стандартным SL:NET на Lua, но лишен некоторой функциональности. Например, не умеет повторно отправлять пакеты при неудачной отправке, возможно добавлю чуть позже.
SLMP-Team/SLNet
SL:NET - network interface based on LuaSocket UDP. Contribute to SLMP-Team/SLNet development by creating an account on GitHub.github.com