Гайд: взаимодействие lua с чатом.

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

Freym

Известный
Автор темы
485
203
Здравствуйте, недавно перешел на lua, хочу больше развиваться в lua-скриптинге. Сейчас хочу научиться работать с чатом. У кого есть туториалы, то есть, агр на сообщение, агр на сообщение и импортирование данных в чат? Ну вообщем хочу научиться работать с чатом. Жду ваших уроков. Спасибо.
 
  • Нравится
Реакции: cfrfvvghh
Решение
ну а что тут учить
добавить сообщение в чат по стандарту

Lua:
sampAddChatMessage('one', -1) -- текст в кавычках - тот текст, что собственно надо показать, второй аргумент - цвет, в данном случае -1(белый), указывается в AHEX
это сообщение покажется в чате на стороне клиента, если же надо отправить сообщение в чат для сервера, то :
Lua:
sampSendChat('text')


для обработки серверных сообщений , таких как сообщение от игрока, новости, сообщение от админа и т.д используется хук(samp.events func):
пример:

Lua:
require('samp.events').onServerMessage = function(color, text) -- тут 2 входящих значения, это color, то есть цвет самого сообщения, и текст(ну это понятно), им присваивается значение локальной переменной для хука
    if...

Freym

Известный
Автор темы
485
203
Lua:
local SE = require 'samp.events'

function SE.onServerMessage(color, text)
    if text == "УУУУУУУ СУКА АГР НА ЧАТ" then
        print('Я ТАКОЙ ТРИГЕРНУТЫЙ НА ЕБУЧИЙ ЧАТ')
    end
end
Лул, так легко?) спасибо. А можно еще импорт данных в сообщение.
 

Oi Nikazum

Потрачен
182
232
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну а что тут учить
добавить сообщение в чат по стандарту

Lua:
sampAddChatMessage('one', -1) -- текст в кавычках - тот текст, что собственно надо показать, второй аргумент - цвет, в данном случае -1(белый), указывается в AHEX
это сообщение покажется в чате на стороне клиента, если же надо отправить сообщение в чат для сервера, то :
Lua:
sampSendChat('text')


для обработки серверных сообщений , таких как сообщение от игрока, новости, сообщение от админа и т.д используется хук(samp.events func):
пример:

Lua:
require('samp.events').onServerMessage = function(color, text) -- тут 2 входящих значения, это color, то есть цвет самого сообщения, и текст(ну это понятно), им присваивается значение локальной переменной для хука
    if text:match('Привет') then -- делается проверка по переменной text при получении серверного сообщения, если там находится слово: Привет, тогда
        sampAddChatMessage('найдено слово привет, триггер', -1) -- отправляем аддмеседж
    end -- и закрываем if
    if text:match('Как дела') then -- окей, с агром разобрались, теперь посложнее, заменим сообщение Как дела на Как жизнь, допустим
        msg = text:match('Как дела') -- мы сделали проверку, что такой текст действительно есть, затем присвоили переменную именно части  'как дела'
         str = string.gsub (text, msg, "Как жизнь") -- в самом тексте мы заменяем Как дела из переменной msg на Как жизнь и возвращаем значения
        return {color, str} -- вместо text возвращаем str
    end -- закрываем проверку
    if text:match('Удали меня') then -- окей, теперь, удаление сообщений, самое простое, если сообщение найдено, то
        return false -- игнорируем его, и все, оно не отобразится
    end
    -- теперь, попробуем регулярные выражения , они нужны в основном для доставания чего либо из строки, допустим, у нас text = '[Server] Money: 59395', надо получить из него число, делаем так
    if text:match('%d+') then -- %d - Любое int число, + это  продолжение, получаем, если найдено любое продолжительное число то
       num = text:match('%d+') -- получаем в переменную num  число 59395, думаю, понятно
    end
end

сообщения по типу Server closed the connection , You are banned from this server надо отлавливать уже не в хуке, а в onReceivePacket

в хуке чтобы сделать проверку по цвету то надо сначала отловить его, так как у всех серверов свои цвета сообщений, делается так

Lua:
require('samp.events').onServerMessage = function(clr, msg)
    print('Сообщение: '..msg..' [Его цвет: '..clr..']') -- отлавливаем в консоль сф цвет
end

потом уже чисто проверку ебашишь по этому цвету

Lua:
require('samp.events').onServerMessage = function(clr, msg)
    if clr == -1 then
      print('triggered, серый цвет')
     end
end
 
Последнее редактирование:

AnWu

Guardian of Order
Всефорумный модератор
4,683
5,129
ну а что тут учить
добавить сообщение в чат по стандарту

Lua:
sampAddChatMessage('one', -1) -- текст в кавычках - тот текст, что собственно надо показать, второй аргумент - цвет, в данном случае -1(белый), указывается в AHEX
это сообщение покажется в чате на стороне клиента, если же надо отправить сообщение в чат для сервера, то :
Lua:
sampSendChat('text')


для обработки серверных сообщений , таких как сообщение от игрока, новости, сообщение от админа и т.д используется хук(samp.events func):
пример:

Lua:
require('samp.events').onServerMessage = function(color, text) -- тут 2 входящих значения, это color, то есть цвет самого сообщения, и текст(ну это понятно), им присваивается значение локальной переменной для хука
    if text:match('Привет') then -- делается проверка по переменной text при получении серверного сообщения, если там находится слово: Привет, тогда
        sampAddChatMessage('найдено слово привет, триггер', -1) -- отправляем аддмеседж
    end -- и закрываем if
    if text:match('Как дела') then -- окей, с агром разобрались, теперь посложнее, заменим сообщение Как дела на Как жизнь, допустим
        msg = text:match('Как дела') -- мы сделали проверку, что такой текст действительно есть, затем присвоили переменную именно части  'как дела'
         str = string.gsub (text, msg, "Как жизнь") -- в самом тексте мы заменяем Как дела из переменной msg на Как жизнь и возвращаем значения
        return {color, str} -- вместо text возвращаем str
    end -- закрываем проверку
    if text:match('Удали меня') then -- окей, теперь, удаление сообщений, самое простое, если сообщение найдено, то
        return false -- игнорируем его, и все, оно не отобразится
    end
    -- теперь, попробуем регулярные выражения , они нужны в основном для доставания чего либо из строки, допустим, у нас text = '[Server] Money: 59395', надо получить из него число, делаем так
    if text:match('%d+') then -- %d - Любое int число, + это  продолжение, получаем, если найдено любое продолжительное число то
       num = text:match('%d+') -- получаем в переменную num  число 59395, думаю, понятно
    end
end

сообщения по типу Server closed the connection , You are banned from this server надо отлавливать уже не в хуке, а в onReceivePacket
На счет последнего пиздеж, просто нужен хук не РПЦ, а функции addChatMessage сампа)
 

Oi Nikazum

Потрачен
182
232
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
На счет последнего пиздеж, просто нужен хук не РПЦ, а функции addChatMessage сампа)
ахахахах нет, не знал, что ты не знал, а ты наверное не знал, что я не знал, что ты не знал
там можно сделать проверку по последней строке, но это говнокод, а так это все делается в onReceivePacket , ид вроде 36-37

можешь проверить
Lua:
function onReceivePacket(id)
    if id == 36 or id == 37 or id == 32 then
        sampAddChatMessage('не addmessage извини')
    end
end
 

ШPEK

Известный
1,476
523
ахахахах нет, не знал, что ты не знал, а ты наверное не знал, что я не знал, что ты не знал
там можно сделать проверку по последней строке, но это говнокод, а так это все делается в onReceivePacket , ид вроде 36-37

можешь проверить
Lua:
function onReceivePacket(id)
    if id == 36 or id == 37 or id == 32 then
        sampAddChatMessage('не addmessage извини')
    end
end
Хук на samp.dll+0x64010 надо делать
 

AnWu

Guardian of Order
Всефорумный модератор
4,683
5,129
ахахахах нет, не знал, что ты не знал, а ты наверное не знал, что я не знал, что ты не знал
там можно сделать проверку по последней строке, но это говнокод, а так это все делается в onReceivePacket , ид вроде 36-37

можешь проверить
Lua:
function onReceivePacket(id)
    if id == 36 or id == 37 or id == 32 then
        sampAddChatMessage('не addmessage извини')
    end
end
можно и правильно разные вещи
 

Cake_

Известный
Проверенный
263
313
Как перехватить аргумент из команды типо как /pagesize 10 ?
Lua:
local sampev = require "lib.samp.events"

function sampev.onSendCommand(command)
    if command:find("/open %d+") then
        local id = command:match("/open (%d+)")
        print(id)
    end
end
С локальными командами не будет катить скорее всего, придется тогда уже ставить хук на функции сампа

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••
upd: 0x65C60
 
Последнее редактирование:
  • Нравится
Реакции: Double Tap Inside

Double Tap Inside

Известный
Проверенный
1,897
1,245
Lua:
local sampev = require "lib.samp.events"

function sampev.onSendCommand(command)
    if command:find("/open %d+") then
        local id = command:match("/open (%d+)")
        print(id)
    end
end
С локальными командами не будет катить скорее всего, придется тогда уже ставить хук на функции сампа

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••
upd: 0x65C60
бля, локалки и надо перехваить как раз =(. Через RegisterCommand я могу их заменить, но мне надо чтобы они свою то функцию тоже выполняли =(
 
Статус
В этой теме нельзя размещать новые ответы.