Информация Гайд Отправка и получение данных через IRC

Статус
В этой теме нельзя размещать новые ответы.

Laine_prikol

ДИДЖЕЙ МАДЕСТ
Автор темы
Проверенный
260
216
Здорова! Бывает ситуация когда нужно отправлять/принимать данные между другими скриптами, а покупать хост, писать серверные скрипты или ломать голову с сетевым движком игры (Raknet) желания нету. Вот тогда можно использовать небольшой хак - взять готовый IRC сервер и кидать всю информацию через IRC-сообщения. Но стоит заметить - это подходит если у вас не идёт потоковая или очень частая отправка данных иначе IRC сервер начнёт кикать клиентов за флуд (зависит от настроек IRC сервера и канала) также одно IRC сообщение не может быть больше 511 байт, ещё ~30 байт отдаётся на хостнейм и ник отправителя и поэтому у вас остаётся около 480 байт на сообщение. Ну вот, вроде со всеми подводными камнями мы ознакомились, теперь начнём! Для начала из вложений нам нужно скачать архив, в нём находится всё для работы сети и IRC протокола, и перекинуть в папку moonloader.

Теперь можно начать писать код!
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
Время тестов!
B7Lf0Om.png

Всё работает! (можно сравнить по таймстампам сампа и IRC клиента)
 

Вложения

  • IRCLibs.zip
    137.2 KB · Просмотры: 152
Последнее редактирование:

FYP

Известный
Администратор
1,758
5,721
между другими скриптами? локальными?
 

AnWu

Guardian of Order
Всефорумный модератор
4,687
5,164
на практике нах ненужно.
 

Laine_prikol

ДИДЖЕЙ МАДЕСТ
Автор темы
Проверенный
260
216
на практике нах ненужно.
ну хз, по быстрому зафигачить связь между скриптами. А можно например сделать вот такую хрень - сделать бота который управляется через IRC. Отошёл от компьютера, заходишь через телефон в IRC на канальчик и мониторишь всё и управляешь игрой удалённо. Типа мини аналог ракбота
 

AnWu

Guardian of Order
Всефорумный модератор
4,687
5,164
ну хз, по быстрому зафигачить связь между скриптами. А можно например сделать вот такую хрень - сделать бота который управляется через IRC. Отошёл от компьютера, заходишь через телефон в IRC на канальчик и мониторишь всё и управляешь игрой удалённо. Типа мини аналог ракбота
кажется в этом мало смысла...
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
Гайд конечно, заебок, но он что-то не работает.
Мой ник - Katsuro_Kobayashi, ну эт типо там проверка)

Lua:
require 'luairc'
CHANNEL = "#yeahmanpearsprojectkekda"

--main()

local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
if result then
    local name = sampGetPlayerNickname(playerID)
    cl = irc.new{nick = name}
end

if data.options.phchat == true then
    print('1')
    sampRegisterChatCommand("chat", sendServerMsg)

 
  cl:hook("OnChat", function(user, channel, message)
    print('pinging')
    while true do wait(0)
        if user ~= nil and message ~= nil and channel == CHANNEL then
            print('yeah')
            if user.nick == 'Katsuro_Kobayashi' or user.nick == 'Christian_Enrimuerta' then
                print('huy')
                sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {BF0000}Основатель {ffffff}"..user.nick..": "..message, 0x0088ff)
            else
                print('none')
                local idchat = sampGetPlayerIdByNickname(user.nick)
                if idchat ~= nil then
                    print('huy3')
                    local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(idchat)))
                    if color ~= nil then
                        print('huy4')
                        if color == 'FFFFFF' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: Неизвестно | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '0066FF' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {0066FF}LSPD{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '6666FF' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {6666FF}FBI{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == 'F4A460' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {F4A460}ARMY{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == 'FF6666' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {FF6666}Мин.Здрав{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == 'FFCC66' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {FFCC66}CNN{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '000080' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {000080}SFPD{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '333300' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {333300}Призыв{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '00CC99' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {00CC99}ВВС{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        elseif color == '339966' and user.nick ~= 'Katsuro_Kobayashi' and user.nick ~= 'Christian_Enrimuerta' then
                            sampAddChatMessage("[ PHELP ] [CHAT]{ffffff}: {339966}ВМФ{ffffff} | "..user.nick..": "..message, 0x0088ff)
                        end
                    end
                end
            end
        end
    end
end)

    print('2')
    cl:connect('irc.ircnet.ru')
    cl:join(CHANNEL)
    print('connected')

    lua_thread.create(function()
        while true do
            cl:think()
            wait(500)
        end
    end)
    print('3')

    lua_thread.create(function()
        while true do wait(0)
            if customtextz == true then
                wait(3000)
                customtextz = false
            end
        end
    end)
    print('4')

end --КОД ВЫШЕ НЕ В БЕСКОНЕЧНОМ ЦИКЛЕ

--там дальше бесконечный цикл и т.д, ну и конечно же конец

function sendServerMsg(param)
    local customtext = string.match(param, '%s*(.+)')
    if customtext ~= nil then
        if customtextz ~= true then
            cl:sendChat(CHANNEL, customtext)
            customtextz = true
        else
            sampAddChatMessage('[ PHELP ] {FFFFFF}Вам необходимо подождать 3 секунды, прежде чем отправить сообщение.', 0x0088ff)
        end
    else
        sampAddChatMessage('[ PHELP ] {FFFFFF}Локальный чат скрипта Police Helper. [{0088ff} /k Текст{FFFFFF} ]', 0x0088ff)
    end
end

Вроде как пингует, зависает при запуске скрипта на 5-10 сек и отвисает, но всё равно если что-то отправить в чат, то в ответ нифига.
Проходит все этапы (я про print('номер'), т.е с 1 до 4.
Пишет pinging, ну а дальше нифига не работает, не проходит он глубоко в хук и не показывает ничего в чате (sampAddChatMessage) и в консоле ничего нет. Он даже не доходит до "yeah"

@Laine_prikol
убери в хуке OnChat беск. цикл.
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,482
убери в хуке OnChat беск. цикл.
Всё равно не работает.
Попробовал поменять даже местами хук и коннект, всё равно, даже "yeah" не отправляет.
Попробовал сразу после функции поставить такую проверку:
Lua:
if user.nick ~= nil and message ~= nil and channel == CHANNEL then
Даже это не помогает.
Поменял 3 сервера - ничего.
 

TheWille

Участник
43
4
Через некоторое время в AFK скрипт крашится, что можно сделать?
[14:24:18.252190] (error) SAMPIrcClient: C:\GTA\moonloader\irctest.lua:244: Closing Link: Мой IP (Ping timeout: 198 seconds)
stack traceback:
[C]: in function 'error'
C:\GTA\moonloader\lib\handlers.lua:173: in function 'handle'
C:\GTA\moonloader\lib\luairc.lua:175: in function 'think'
C:\GTA\moonloader\irctest.lua:244: in function <C:\GTA\moonloader\irctest.lua:200>
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,482
убери в хуке OnChat беск. цикл.
UPD: Вывел на экран текст, который получаю, и там написано VERSION.
Мне нужно как-то ответить на этот запрос чем-то или что?

UPD2: Наконец получилось, но тут при долгом AFK кикает из сервера и скрипт крашит.
Как решить эту проблему?

UPD3: Работа в свёрнутом режиме помогла.
 
Последнее редактирование:

serhiyrubin

Известный
396
104
UPD: Вывел на экран текст, который получаю, и там написано VERSION.
Мне нужно как-то ответить на этот запрос чем-то или что?

UPD2: Наконец получилось, но тут при долгом AFK кикает из сервера и скрипт крашит.
Как решить эту проблему?

UPD3: Работа в свёрнутом режиме помогла.
Работа в свёрнутом режиме от Sampfuncs которая? Работает на полный экран когда?
В скрипте своем поставил script_properties("work-in-pause") и антипаузу от сф
Все равно через 10 минут афк вылетел скрипт
 
  • Нравится
Реакции: MrCreepTon

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,482
Работа в свёрнутом режиме от Sampfuncs которая? Работает на полный экран когда?
В скрипте своем поставил script_properties("work-in-pause") и антипаузу от сф
Все равно через 10 минут афк вылетел скрипт
 

Вложения

  • WorkInPause.cs
    52 байт · Просмотры: 28
  • Нравится
Реакции: serhiyrubin
Статус
В этой теме нельзя размещать новые ответы.