Помощь с кодом lua

PinkFloyd

Новичок
Автор темы
18
0
Версия MoonLoader
.026-beta
Эксперты, проверьте мой код пожалуйста, хочу убедиться в коде ли ошибка или что то с библиотекой.
Суть скрипта в том чтобы парсить последнее сообщение в чате с сервера, и с помощью операции if проверять сообщение на условие "Есть ли в сообщение фрагмент [VIP] или [PREMIUM], если true то писать в чат с задержкой в 3 секунды свой текст".

Короче автопиар в вип чат.


Lua:
script_name('SecondScript')
script_author('Pinky')
script_description('My second test script')


require "lib.moonloader"
local keys = require "vkeys"
local sampev = require 'lib.samp.events'

local white_clr = 0xFFFFFF
local white_clr_txt = '{FFFFFF}'
local blue_clr = 0x5E6DB5
local drkred_clr_txt = "{B05A5A}"

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    while true do
        wait(0)
    end
        
end



function sampev.onServerMessage(color, text)

    
    if string.find(text, '[VIP] ' or '[PREMIUM] ' or '[Administrator] ', 1, true) then
        wait(3123)
        sampAddChatMessage('/vr Продам булку с маслом. Звоните')
    end
    
end
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
908
1,775
Так?
Lua:
script_name('SecondScript')
script_author('Pinky')
script_description('My second test script')

local sampev = require 'lib.samp.events'

local white_clr = 0xFFFFFF
local white_clr_txt = '{FFFFFF}'
local blue_clr = 0x5E6DB5
local drkred_clr_txt = "{B05A5A}"

function sampev.onServerMessage(color, text)
    if text:find('%[VIP%]') or text:find('%[PREMIUM%]') or text:find('%[Administrator%]') then
        lua_thread.create(function()
            wait(3000)
            sampSendChat('/vr Продам булку с маслом. Звоните')
        end)
    end
end
Вот так не работал, не знаю как правильно, если до этого работало с этим, то можете вернуть if string.find(text, '[VIP] ' or '[PREMIUM] ' or '[Administrator] ', 1, true) then
UPD: Переменные с цветами вообще не знаю зачем тебе сейчас.
 
Последнее редактирование:

Smeruxa

Известный
1,361
722
Так?
Lua:
script_name('SecondScript')
script_author('Pinky')
script_description('My second test script')

local sampev = require 'lib.samp.events'

local white_clr = 0xFFFFFF
local white_clr_txt = '{FFFFFF}'
local blue_clr = 0x5E6DB5
local drkred_clr_txt = "{B05A5A}"

function sampev.onServerMessage(color, text)
    if text:find('%[VIP%]') or text:find('%[PREMIUM]%') or text:find('%[Administrator%]') then
        lua_thread.create(function()
            wait(3000)
            sampSendChat('/vr Продам булку с маслом. Звоните')
        end)
    end
end
Вот так не работал, не знаю как правильно, если до этого работало с этим, то можете вернуть if string.find(text, '[VIP] ' or '[PREMIUM] ' or '[Administrator] ', 1, true) then
Поправь скобочку где премиум
 
  • Нравится
Реакции: PanSeek

Hatiko

Известный
Проверенный
1,502
620
Чутка подкорректирую выше приведённые примеры. Метод find использует "регулярные выражения", где квадратные скобки являются служебными символами, применяемые для указания диапазона поиска букв, символов, которые были перечислены в скобках. Так как их нужно учитывать в поиске текста, то их следует экранировать. Да, код будет работать, но скрипт будет постоянно срабатывать на любые сообщения в чате, где есть любые из перечисленных буквы V I P R E M U A D N.
Можно также добавить в начало в начало каждого поиска ^{......} , чтобы точно реагировал на именно вип чат, но думаю, тебе и так сойдёт. Все равно главная цель - отправить сообщение.

Lua:
function sampev.onServerMessage(color, text)
    if text:find('%[VIP%]') or text:find('%[PREMIUM%]') or text:find('%[ADMIN%]') then
        lua_thread.create(function()
        wait(3123)
        sampAddChatMessage('/vr Продам булку с маслом. Звоните')
        end)
    end
end


P.S. Первый пример правильный был, не обратил внимание. Можно сказать, дополнил )
 

PinkFloyd

Новичок
Автор темы
18
0
Чутка подкорректирую выше приведённые примеры. Метод find использует "регулярные выражения", где квадратные скобки являются служебными символами, применяемые для указания диапазона поиска букв, символов, которые были перечислены в скобках. Так как их нужно учитывать в поиске текста, то их следует экранировать. Да, код будет работать, но скрипт будет постоянно срабатывать на любые сообщения в чате, где есть любые из перечисленных буквы V I P R E M U A D N.
Можно также добавить в начало в начало каждого поиска ^{......} , чтобы точно реагировал на именно вип чат, но думаю, тебе и так сойдёт. Все равно главная цель - отправить сообщение.

Lua:
function sampev.onServerMessage(color, text)
    if text:find('%[VIP%]') or text:find('%[PREMIUM%]') or text:find('%[ADMIN%]') then
        lua_thread.create(function()
        wait(3123)
        sampAddChatMessage('/vr Продам булку с маслом. Звоните')
        end)
    end
end


P.S. Первый пример правильный был, не обратил внимание. Можно сказать, дополнил )
Спасибо за объяснение. Хотел бы спросить, как можно реализовать такую штуку: нужно чтобы не просто с задержкой 3 секунды выводился текст а в зависимости от времени после отправки последнего сообщения в вип чат и + 3 секунды. И если в чате выдавалась ошибка о том что в вип чат можно писать раз в 30 секунд то нужно будет подождать 30 секунд, и если по истечении 30 секунд мы попытались отправить сообщение в вип чат и нам выдало ошибку о том что можно писать только раз в 3 секунды, мы бы вновь подождали 3 секунды. Попытался сам реализовать - не получилось.
 

Smeruxa

Известный
1,361
722
Спасибо за объяснение. Хотел бы спросить, как можно реализовать такую штуку: нужно чтобы не просто с задержкой 3 секунды выводился текст а в зависимости от времени после отправки последнего сообщения в вип чат и + 3 секунды. И если в чате выдавалась ошибка о том что в вип чат можно писать раз в 30 секунд то нужно будет подождать 30 секунд, и если по истечении 30 секунд мы попытались отправить сообщение в вип чат и нам выдало ошибку о том что можно писать только раз в 3 секунды, мы бы вновь подождали 3 секунды. Попытался сам реализовать - не получилось.
os.clock хуякнуть)
Lua:
local time = os.clock()

if text:find("%[VIP%]") then
    if ((os.clock() - time) >= 3) then
        sampSendChat(text, -1)
    else
        time = os.clock()
    end
end