Работа скрипта при определенном диапазоне чисел

nvl

Новичок
Автор темы
9
0
Версия MoonLoader
.026-beta
Есть такой код:
Lua:
require "lib.moonloader"
local sampev = require 'lib.samp.events'

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, "Ваша « Сытость »: 0 / 100", 1, true) then
        sampAddChatMessage("123") return false
        end
end

По задумке, функция должна вылавливать из чата сообщение "Ваша сытость" и делать действие при значении сытости в диапазоне 0-10 / 100 и при любых других значениях не делать ничего. Я знаю, что в моем случае действие будет выполнятся при конкретном сообщении, просто я не могу найти как можно добавить диапазон конкретных чисел.
 
Последнее редактирование:
Решение
та же ошибка в if satiety <= 10
но зато теперь она выскакивает при этом коде
до этого мне приходилось вписывать свое значение сытости на сервере в string.find
Очень странно, но почему-то text:match с %d+ возвращает не число, а строку, починил.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: (%d+) / 100') then
        local satiety = tonumber(text:match('Ваша « Сытость »: (%d+) / 100'))
        if satiety <= 10 then
            sampAddChatMessage("сытость меньше 10", -1)
        end
    end
end

CaJlaT

07.11.2024 14:55
Модератор
2,835
2,673
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, "Ваша « Сытость »: %d+ / 100", 1, true) then
        local satiety = text:match('%d+ / 100')
        if sateity <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
 
Последнее редактирование:

meowprd

Тот самый Котовский
Проверенный
1,278
720
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, "Ваша « Сытость »: 0 / 100", 1, true) then
        local satiety = text:match('%d+ / 100')
        if sateity <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
не сработает, исправь (ну вернее только при нулевой сытости)
Lua:
if string.find(text, "Ваша « Сытость »: 0 / 100", 1, true) then -- 0 / 100 = %d+ / 100
 
  • Нравится
Реакции: CaJlaT

nvl

Новичок
Автор темы
9
0
не сработает, исправь (ну вернее только при нулевой сытости)
Lua:
if string.find(text, "Ваша « Сытость »: 0 / 100", 1, true) then -- 0 / 100 = %d+ / 100
Почему-то не работает, вроде исправил же:
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, 'Ваша « Сытость »: %d+ / 100', 1, true) then
        local satiety = text:match('%d+ / 100')
        if sateity <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
Попробовал вписать в string.find свое конкретное значение сытости на сервере и выдало вот эту ошибку в логе: attempt to compare number with nil stack traceback. Ругается на эту строчку:
Код:
if sateity <= 10 then
 

meowprd

Тот самый Котовский
Проверенный
1,278
720
Почему-то не работает, вроде исправил же:
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, 'Ваша « Сытость »: %d+ / 100', 1, true) then
        local satiety = text:match('%d+ / 100')
        if sateity <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
Попробовал вписать в string.find свое конкретное значение сытости на сервере и выдало вот эту ошибку в логе: attempt to compare number with nil stack traceback. Ругается на эту строчку:
Код:
if sateity <= 10 then
Салат ошибся в переменных немного, символы перепутал.
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, 'Ваша « Сытость »: %d+ / 100', 1, true) then
        local satiety = text:match('%d+ / 100')
        if satiety <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
 

nvl

Новичок
Автор темы
9
0
Салат ошибся в переменных немного, символы перепутал.
Lua:
function  sampev.onServerMessage(color, text)
    if string.find(text, 'Ваша « Сытость »: %d+ / 100', 1, true) then
        local satiety = text:match('%d+ / 100')
        if satiety <= 10 then
            sampAddChatMessage('Работаем', -1)
        else
            sampAddChatMessage('Сытость больше 10', -1)
        end
    end
end
(error) attempt to compare number with string stack traceback
та же строчка
 
Последнее редактирование:

meowprd

Тот самый Котовский
Проверенный
1,278
720
(error) attempt to compare number with string stack traceback
та же строчка
Салат видимо не выспался, а я невнимательный оказался.
Переписал, должно работать.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: %d+ / 100') then
        local satiety = text:match('Ваша « Сытость »: (%d+) / 100')
        if satiety <= 10 then
           sampAddChatMessage("Сытость меньше 10", -1)
        end
    end
end
 
  • Нравится
Реакции: CaJlaT

nvl

Новичок
Автор темы
9
0
Салат видимо не выспался, а я невнимательный оказался.
Переписал, должно работать.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: %d+ / 100') then
        local satiety = text:match('Ваша « Сытость »: (%d+) / 100')
        if satiety <= 10 then
           sampAddChatMessage("Сытость меньше 10", -1)
        end
    end
end
та же ошибка в if satiety <= 10
(error) attempt to compare number with string stack traceback

но зато теперь она выскакивает при этом коде
до этого мне приходилось вписывать свое конкретное значение сытости на сервере в string.find
получается, что диапазон работает теперь, но не совсем
 

meowprd

Тот самый Котовский
Проверенный
1,278
720
та же ошибка в if satiety <= 10
но зато теперь она выскакивает при этом коде
до этого мне приходилось вписывать свое значение сытости на сервере в string.find
Очень странно, но почему-то text:match с %d+ возвращает не число, а строку, починил.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: (%d+) / 100') then
        local satiety = tonumber(text:match('Ваша « Сытость »: (%d+) / 100'))
        if satiety <= 10 then
            sampAddChatMessage("сытость меньше 10", -1)
        end
    end
end
 
  • Нравится
Реакции: loverhasha

nvl

Новичок
Автор темы
9
0
Очень странно, но почему-то text:match с %d+ возвращает не число, а строку, починил.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: (%d+) / 100') then
        local satiety = tonumber(text:match('Ваша « Сытость »: (%d+) / 100'))
        if satiety <= 10 then
            sampAddChatMessage("сытость меньше 10", -1)
        end
    end
end
Все, теперь работает. Большое спасибо!
 

Quasper

Известный
835
354
Очень странно, но почему-то text:match с %d+ возвращает не число, а строку, починил.
Lua:
function  sampev.onServerMessage(color, text)
    if text:match('Ваша « Сытость »: (%d+) / 100') then
        local satiety = tonumber(text:match('Ваша « Сытость »: (%d+) / 100'))
        if satiety <= 10 then
            sampAddChatMessage("сытость меньше 10", -1)
        end
    end
end
не странно а вполне логично, match это функция работы со строками, следовательно результирующий ответ от функции будет nil либо полученная строка
 

meowprd

Тот самый Котовский
Проверенный
1,278
720
не странно а вполне логично, match это функция работы со строками, следовательно результирующий ответ от функции будет nil либо полученная строк
%d соответствует любому числу и когда я использовал в личных проектах кучу регулярок с вытаскиванием числа проблем никаких не было, не нужно было переводить строку в число
 

Quasper

Известный
835
354
%d соответствует любому числу и когда я использовал в личных проектах кучу регулярок с вытаскиванием числа проблем никаких не было, не нужно было переводить строку в число
ну %d это шаблон для парсинга числа из строки, сама функция всегда вернет тип данных как строку хоть это и число, видимо ты не применял математических функций после