Иконка ресурса

SAMP.Lua 2024-10-14

Нет прав для скачивания
  • Автор cl0udMe
  • Дата создания
  • Ваша группа достигла максимального количества скачиваний в день.
Изначально эта библиотека задумывалась как простой апи исключительно для обработки сетевых пакетов, но в процессе было решешо, что лучше бы сделать её полноценной библиотекой для работы с сампом, в будущем это позволит избавить от необходимости использования SAMPFUNCS. Пока реализован только модуль, значительно упрощающий работу с пакетами, так что говорить сейчас будем о нём.

SAMP.Events
Этот модуль добавляет событийную обработку входящих и исходящих RakNet пакетов. Имеет удобный API, полностью кастомизируем, предоставляет те же возможности, что и обычные хуки: чтение, перезапись, игнорирование.

Использование
Простой пример обработки исходящего сообщения в чат:
Lua:

local sampev = require 'lib.samp.events'

function sampev.onSendChat(msg)
print('You said: ' .. msg)
end

Да, настолько просто. Нужно лишь загрузить библиотеку и добавить функцию с соответствующими аргументами, вот и всё.
Перезапись данных в пакете настолько же проста, нужно лишь вернуть из функции все значения в том же порядке, занеся их в таблицу.
Lua:

function sampev.onSendChat(msg)
return {'I said: ' .. msg}
end
Будет дописывать текст "I said:" в начало каждого отправляемого сообщения.
Если вернуть из функции false, то пакет будет проигнорирован клиентом. Этот код запретит серверу изменять позицию игрока:
Lua:

function sampev.onSetPlayerPos(position)
print(string.format('Server tried to change your position to %0.2f %0.2f %0.2f', position.x, position.y, position.z))
return false
end
Структуры всех пакетов находятся в файле events.lua.

Перезапись исходящих пакетов синхронизации слегка отличается от всех остальных - они не требуют возврата аргументов, а вместо этого данные перезаписываются как в обычной таблице lua. Это сделано для повышения производительности.
Пример перезаписи позиции в исходящих данных синхронизации игрока:
Lua:

function sampev.onSendPlayerSync(data)
print('Original position:', data.position.x, data.position.y, data.position.z)
data.position.x = 1337
data.position.y = 1488
data.position.z = 228
end
Это применимо только в событиях onSendPlayerSync, onSendVehicleSync, onSendPassengerSync, onSendAimSync, onSendUnoccupiedSync, onSendTrailerSync, onSendBulletSync, onSendSpectatorSync.
Структуры всех пакетов синхронизации находятся в файле synchronization.lua.

Примеры скриптов
AntiCarJack - перехват и игнорирование входящего RPC и пакета синхронизации
Bubble Sniffer - перехват и обработка входящего RPC
DerpCam - перезапись данных исходящего пакета синхронизации
Chat Bliss - перезапись, игнорирование и обработка исходящего RPC

Спойлер: Для опытных разработчиков


Что касается всей библиотеки в целом, то она ещё находится на зачаточной стадии и обсуждать кроме планов нечего. По сути она должна заменить собой основную часть SAMPFUNCS - моддинг сампа.

Скачать последнюю версию и следить за изменениями всегда можно на GitHub.
Установка: скачать samp.zip из последнего релиза и целиком скопировать папку 'samp' (не содержимое папки!) из архива в каталог 'moonloader/lib/'.

Любая помощь в разработке приветствуется, особенно с добавлением новых структур. Предложите Pull request на гитхабе или напишите в этой теме.

Ну и конечно же крохотное нано-спасибо hnnssy за помощь.
Автор
cl0udMe
Скачиваний
0
Просмотры
78
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Еще ресурсы от cl0udMe

Сверху Снизу
AdBlock Detected

Мы понимаем, реклама раздражает!

Конечно, программы для блокировки рекламы отлично справляются с блокировкой рекламы, но они также блокируют полезные функции нашего веб-сайта. Для лучшей работы с сайтом, пожалуйста, отключите блокировщик рекламы.

Я отключил AdBlock