Взаимодействие с текстом чата

Lo_Smite

Участник
Автор темы
56
9
Версия MoonLoader
.026-beta
Вот к примеру возьмем даже команду /pay
Когда ты получаешь деньги или даешь определенную сумму в чате пишется сколько. Как мне сделать так, чтобы мой скрипт работал именно на цифру в этом, т.е. менял цвет только его.
Ну и заодно хотелось бы узнать про диапазоны цифр. Как сделать диапазон 1-1000 к примеру
 

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
работал именно на цифру в этом, т.е. менял цвет только его
Цвет чего?

Lua:
local samp = require 'samp.events'



function samp.onServerMessage(col, text)
    if text:find("Вы получили (%d+)") then -- поменяй на свою строку
        local money = text:match("Вы получили (%d+)")
        if money <= 1 or money >= 10000 then return end
        --code
    end
end
 

Lo_Smite

Участник
Автор темы
56
9
Цвет чего?

Lua:
local samp = require 'samp.events'



function samp.onServerMessage(col, text)
    if text:find("Вы получили (%d+)") then -- поменяй на свою строку
        local money = text:match("Вы получили (%d+)")
        if money <= 1 or money >= 10000 then return end
        --code
    end
end
У меня не получается. В консоле выдает ошибку:
(error) Автоответчик: C:\GTA San Andreas\moonloader\Автоответчик.lua:115: attempt to compare number with string
stack traceback:
C:\GTA San Andreas\moonloader\Автоответчик.lua:115: in function 'callback'
C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:82: in function <C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:54>
[ML] (error) Автоответчик: Script died due to an error. (34A0E2D4)

Lua:
function sampev.onServerMessage(color, text)
if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if money <= 1 or money >= 100000 then return end
            color = colorMONEY
        end
        if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if money <= 1 or money >= 100000 then return end
            color = colorMONEY
        end
end
 

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
У меня не получается. В консоле выдает ошибку:
(error) Автоответчик: C:\GTA San Andreas\moonloader\Автоответчик.lua:115: attempt to compare number with string
stack traceback:
C:\GTA San Andreas\moonloader\Автоответчик.lua:115: in function 'callback'
C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:82: in function <C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:54>
[ML] (error) Автоответчик: Script died due to an error. (34A0E2D4)

Lua:
function sampev.onServerMessage(color, text)
if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if money <= 1 or money >= 100000 then return end
            color = colorMONEY
        end
        if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if money <= 1 or money >= 100000 then return end
            color = colorMONEY
        end
end
Так ты строчку из чата скинь, чтобы нормальную регулярку составить
 

Lo_Smite

Участник
Автор темы
56
9
Так ты строчку из чата скинь, чтобы нормальную регулярку составить
Вы получили 1 вирт, от Bill_Shelby[410]

Мне нужно чтобы цвет изменил только "1 вирт". При этом никнейм там может быть разный
 

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
Вы получили 1 вирт, от Bill_Shelby[410]

Мне нужно чтобы цвет изменил только "1 вирт". При этом никнейм там может быть разный
с цветами, это обязательно! Из чат-лога кинь полностью строчку
 
  • Злость
Реакции: Izvinisb

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
В чат логе оно также, там только время еще с моего пк стоит и все
Пробуй
Lua:
--Вы получили 1 вирт, от Bill_Shelby[410]
local samp = require 'samp.events'
function samp.onServerMessage(col, text)
    if text:find("Вы получили (.+), от (.+)%[%(d+)%]") then
        local money = text:match("Вы получили (.+), от .+%[%d+%]")
        sampAddChatMessage(text:gsub(money, '{ff0000}'..money..'{'..bit.tohex(col, 6))..'}'), bit.rshift(col, 8))
        return false
    end
end
 

Lo_Smite

Участник
Автор темы
56
9
Пробуй
Lua:
--Вы получили 1 вирт, от Bill_Shelby[410]
local samp = require 'samp.events'
function samp.onServerMessage(col, text)
    if text:find("Вы получили (.+), от (.+)%[%(d+)%]") then
        local money = text:match("Вы получили (.+), от .+%[%d+%]")
        sampAddChatMessage(text:gsub(money, '{ff0000}'..money..'{'..bit.tohex(col, 6))..'}'), bit.rshift(col, 8))
        return false
    end
end
Автоответчик.lua: C:\GTA San Andreas\moonloader\Автоответчик.lua:94: unexpected symbol near ','
При этом я пробовал разные места посмотреть, убирать запятые, все равно эта ошибка где-то показывается

-1263159297 - Ид цвета с игры
 

andrey_hacker

Известный
274
88
Lua:
function sampev.onServerMessage(color, text)
if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
        if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
end
 
  • Нравится
Реакции: Lo_Smite

Lo_Smite

Участник
Автор темы
56
9
Lua:
function sampev.onServerMessage(color, text)
if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
        if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
end

Работает но текст не меняет, могу через sampAddChatMessage выводить, но там ник теряется
 

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
Автоответчик.lua: C:\GTA San Andreas\moonloader\Автоответчик.lua:94: unexpected symbol near ','
При этом я пробовал разные места посмотреть, убирать запятые, все равно эта ошибка где-то показывается

-1263159297 - Ид цвета с игры
лишняя скобка была
Lua:
local samp = require 'samp.events'
function samp.onServerMessage(col, text)
    if text:find("Вы получили (.+), от (.+)%[%(d+)%]") then
        local money = text:match("Вы получили (.+), от .+%[%d+%]")
        sampAddChatMessage(text:gsub(money, '{ff0000}'..money..'{'..bit.tohex(col, 6)..'}'), bit.rshift(col, 8))
        return false
    end
end
 
  • Нравится
Реакции: Lo_Smite

Lo_Smite

Участник
Автор темы
56
9
лишняя скобка была
Lua:
local samp = require 'samp.events'
function samp.onServerMessage(col, text)
    if text:find("Вы получили (.+), от (.+)%[%(d+)%]") then
        local money = text:match("Вы получили (.+), от .+%[%d+%]")
        sampAddChatMessage(text:gsub(money, '{ff0000}'..money..'{'..bit.tohex(col, 6)..'}'), bit.rshift(col, 8))
        return false
    end
end
(error) Автоответчик: C:\GTA San Andreas\moonloader\Автоответчик.lua:97: attempt to compare number with nil
stack traceback:
C:\GTA San Andreas\moonloader\Автоответчик.lua:97: in function 'callback'
C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:82: in function <C:\GTA San Andreas\moonloader\lib\samp\events\core.lua:54>
[ML] (error) Автоответчик: Script died due to an error. (27E423E4)
Lua:
function sampev.onServerMessage(color, text)
if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
        if text:find("Вы получили (%d+)") then
            local money = text:match("Вы получили (%d+)")
            if tonumber(money) <= 1 or tonumber(money) >= 100000 then return end
            color = colorMONEY
        end
end

А как сделать в этом случае? Оно крашит т.к. там ник а не число. Ник опять же всегда разный
Вы передали Emily_Delevingne[407] 1 вирт
 
Последнее редактирование: