- 260
- 218
Здорова! Бывает ситуация когда нужно отправлять/принимать данные между другими скриптами, а покупать хост, писать серверные скрипты или ломать голову с сетевым движком игры (Raknet) желания нету. Вот тогда можно использовать небольшой хак - взять готовый IRC сервер и кидать всю информацию через IRC-сообщения. Но стоит заметить - это подходит если у вас не идёт потоковая или очень частая отправка данных иначе IRC сервер начнёт кикать клиентов за флуд (зависит от настроек IRC сервера и канала) также одно IRC сообщение не может быть больше 511 байт, ещё ~30 байт отдаётся на хостнейм и ник отправителя и поэтому у вас остаётся около 480 байт на сообщение. Ну вот, вроде со всеми подводными камнями мы ознакомились, теперь начнём! Для начала из вложений нам нужно скачать архив, в нём находится всё для работы сети и IRC протокола, и перекинуть в папку moonloader.
Теперь можно начать писать код!
Время тестов!
Всё работает! (можно сравнить по таймстампам сампа и IRC клиента)
Теперь можно начать писать код!
Lua:
-- Пример простой отправки/приёма сообщения
require "luairc"
local cl = irc.new{nick = "bh_client"} -- Ник в IRC, сюда лучше вводить случайные ники или брать ник с сампа, но либа сама может менять буквы в нике если он будет занят.
CHANNEL = "#bh" -- Канал, чтобы скрипты могли общаться между собой нужно чтобы они были в одном канале
function main()
while not isSampAvailable() do wait(100) end -- Ждём загрузки ЫАМП
sampRegisterChatCommand("sendhello", sendServerMsg)
cl:hook("OnChat", function(user, channel, message) -- Хук на входящие сообщения из канала
if message == "hello" then -- если нам пришло сообщение hello то принтим сообщение
sampAddChatMessage("user: "..user.nick.." sends hello for you!", -1) -- Вывод сообщения. user.nick - это переменная в которой записывается кто прислал нам сообщение
end
end)
-- Let's go!
cl:connect("irc.esper.net") -- Сюда вводим адрес IRC сервера который работает на 6667 порту без TLS
cl:join(CHANNEL) -- Подключаемся к каналу!
while true do
cl:think() -- Поддержка работы клиента - обрабатывает калбеки, отвечает на пинги.
wait(500)
end
end
function sendServerMsg(param)
sampAddChatMessage("Send hello!", -1)
cl:sendChat(CHANNEL, "hello") -- Отправка сообщения в чат
end
Всё работает! (можно сравнить по таймстампам сампа и IRC клиента)
Вложения
Последнее редактирование: