помощь с таймером

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
Подскажите, как правило сделать таймер.
Если в чате будет какая либо определенная строка, к примеру:
Вы украли открытку у Nick_Name. Прогресс: 20 / 50. У вас 21 открыток.
То, через 5 минут, как появилась эта строка в чат отправится: "Можно красть открыту".

Как это выглядит в чат логе:
[New Year 2022]{FFFFFF} Вы украли открытку у Nick_Name. Прогресс: 20 / 50. У Вас 21 открыток.

Я пробовал делать вот так:
Lua:
local samp = require 'samp.events'

local timer = -1

function main()
    while not isSampAvailable() do wait(0) end
    while true do wait(0)
        if timer > 0 and os.clock() - timer >= 300 then
            sampAddChatMessage('Можно красть открытку', -1)
            timer = -1
        end
    end
end

function samp.onServerMessage(clr, msg)
    timer = msg:find('Вы украли открытку у %a+_%a+. Прогресс: %d+ / %d+. У вас %d+ открыток.') and os.clock()
end
То, ничего не происходит по истечению 5 минут (300 секунд)

И пробовал делать вот так:
Lua:
local samp = require 'samp.events'

local timer = -1

function main()
    while not isSampAvailable() do wait(0) end
    while true do wait(0)
        if timer > 0 and os.clock() - timer >= 300 then
            sampAddChatMessage('Можно красть открытку', -1)
            timer = -1
        end
    end
end

function samp.onServerMessage(clr, msg)
    timer = msg:find('Вы украли открытку у') and os.clock()
end
То, выдает ошибку на вот это:
if timer > 0 and os.clock() - timer >= 300 then
сама ошибка:
attempt to compare number with nil


Подскажите как правильно написать / сделать такой, данный таймер
 

RedHolms

Известный
Проверенный
617
360
Подскажите, как правило сделать таймер.
Если в чате будет какая либо определенная строка, к примеру:
Вы украли открытку у Nick_Name. Прогресс: 20 / 50. У вас 21 открыток.
То, через 5 минут, как появилась эта строка в чат отправится: "Можно красть открыту".

Как это выглядит в чат логе:
[New Year 2022]{FFFFFF} Вы украли открытку у Nick_Name. Прогресс: 20 / 50. У Вас 21 открыток.

Я пробовал делать вот так:
Lua:
local samp = require 'samp.events'

local timer = -1

function main()
    while not isSampAvailable() do wait(0) end
    while true do wait(0)
        if timer > 0 and os.clock() - timer >= 300 then
            sampAddChatMessage('Можно красть открытку', -1)
            timer = -1
        end
    end
end

function samp.onServerMessage(clr, msg)
    timer = msg:find('Вы украли открытку у %a+_%a+. Прогресс: %d+ / %d+. У вас %d+ открыток.') and os.clock()
end
То, ничего не происходит по истечению 5 минут (300 секунд)

И пробовал делать вот так:
Lua:
local samp = require 'samp.events'

local timer = -1

function main()
    while not isSampAvailable() do wait(0) end
    while true do wait(0)
        if timer > 0 and os.clock() - timer >= 300 then
            sampAddChatMessage('Можно красть открытку', -1)
            timer = -1
        end
    end
end

function samp.onServerMessage(clr, msg)
    timer = msg:find('Вы украли открытку у') and os.clock()
end
То, выдает ошибку на вот это:
if timer > 0 and os.clock() - timer >= 300 then
сама ошибка:
attempt to compare number with nil


Подскажите как правильно написать / сделать такой, данный таймер
У тебя когда timer = msg:find('Вы украли открытку у') and os.clock(), то timer равно nil, если ничего не было найдено.
Почитай про то, что делает and

Lua:
function samp.onServerMessage(clr, msg)
    if msg:match('%[New Year 2022%]%{FFFFFF%} Вы украли открытку у .*%. Прогресс: %d+ / %d+%. У Вас %d+ открыток%.') then
        timer = os.clock()
    end
end
 
  • Нравится
Реакции: W1ll04eison

W1ll04eison

Участник
Автор темы
328
19
У тебя когда timer = msg:find('Вы украли открытку у') and os.clock(), то timer равно nil, если ничего не было найдено.
Почитай про то, что делает and

Lua:
function samp.onServerMessage(clr, msg)
    if msg:match('%[New Year 2022%]%{FFFFFF%} Вы украли открытку у .*%. Прогресс: %d+ / %d+%. У Вас %d+ открыток%.') then
        timer = os.clock()
    end
end
Сможешь объяснить почему перед [New Year 2022] и после стоят знаки процента?
" %[New Year 2022%] ".
С этим: %{FFFFFF%} - понятно, ибо если убрать "%" то поиск будет воспринимать как текст, а если поставить знаки процента " %{FFFFFF%} " то воспримет как покраску текста.

Так почему же текст [New Year 2022] с переди и с зади обозначен знаками процента (%[New Year 2022%])?
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,635
2,485
С этим: %{FFFFFF%} - понятно, ибо если убрать "%" то поиск будет воспринимать как текст, а если поставить знаки процента " %{FFFFFF%} " то воспримет как покраску текста.
Полный бред и знаки процента там не нужны. В строках нет понятия "покраска текста" и все эти цветовые теги являются таким же текстом.
Знаки процента перед некоторыми символами ставятся только потому, что некоторые символы являются элементами регулярных выражений
 
  • Нравится
Реакции: W1ll04eison и RTD

W1ll04eison

Участник
Автор темы
328
19
Полный бред и знаки процента там не нужны. В строках нет понятия "покраска текста" и все эти цветовые теги являются таким же текстом.
Знаки процента перед некоторыми символами ставятся только потому, что некоторые символы являются элементами регулярных выражений
А как же это?

И так, допустим, у нас после Гос.Новости [МЧС] идет текст, но уже с другим цветом, в этом и фишка, что после того как ставится следующий HEX код сервером, то его необходимо экранировать, если мы хотим получить полноценное предложение без {FFFFFF}.
Когда мы использовали %{......%}, там 6 точек, это HEX код, т.е. он может быть любым, напомню, одна точка - один символ, по скольку наши точки под экранированием, то они учитываются, что мы получим: "Текст", а не: "{FFFFFF}Текст".
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,635
2,485
А как же это?

И так, допустим, у нас после Гос.Новости [МЧС] идет текст, но уже с другим цветом, в этом и фишка, что после того как ставится следующий HEX код сервером, то его необходимо экранировать, если мы хотим получить полноценное предложение без {FFFFFF}.
Когда мы использовали %{......%}, там 6 точек, это HEX код, т.е. он может быть любым, напомню, одна точка - один символ, по скольку наши точки под экранированием, то они учитываются, что мы получим: "Текст", а не: "{FFFFFF}Текст".
Бред собачий
 
  • Нравится
Реакции: RTD

RedHolms

Известный
Проверенный
617
360
Сможешь объяснить почему перед [New Year 2022] и после стоят знаки процента?
" %[New Year 2022%] ".
С этим: %{FFFFFF%} - понятно, ибо если убрать "%" то поиск будет воспринимать как текст, а если поставить знаки процента " %{FFFFFF%} " то воспримет как покраску текста.

Так почему же текст [New Year 2022] с переди и с зади обозначен знаками процента (%[New Year 2022%])?
Почитай про регулярки. % - экранирование, то же, что и \ в обычных регулярках.
Экранировать цвета необязательно, но я привык делать так)
 

RTD

Нестандартное звание
Модератор
391
414
Так почему же текст [New Year 2022] с переди и с зади обозначен знаками процента (%[New Year 2022%])?
Потому что [] "магический" символ
Почитай про регулярки. % - экранирование, то же, что и \ в обычных регулярках.
Экранировать цвета необязательно, но я привык делать так)
Да почитай(ссылки ниже), ты на луа пишешь, тут не регулярка, а патерны и тут нет {} в магических символах, их экранировать не нужно
 
  • Нравится
Реакции: W1ll04eison и #Northn