Как брвть информацию из /members (evolve rp)

demonvir

Новичок
Автор темы
9
2
Версия MoonLoader
.026-beta
Хотел сделать скрипт простой структуризации информации из members. Но почему-то не получается брать информацию пробовал парсить и текст и цвет. Видел похожий вопрос, но там он был связан с диалогом. Также видел скрипт, но он не работает.
 

pastow

Активный
213
67
Хотел сделать скрипт простой структуризации информации из members. Но почему-то не получается брать информацию пробовал парсить и текст и цвет. Видел похожий вопрос, но там он был связан с диалогом. Также видел скрипт, но он не работает.
Это цеф или обычный диалог(самповский интерфейс)?
 

demonvir

Новичок
Автор темы
9
2
2026-02-08 10-23-18-376.png

когда человек в AFK в конце ещё добавляется ❘ белым {AFK}: 3 секунд

Это цеф или обычный диалог(самповский интерфейс)?
не сильно шарю поэтому объяснил так
 

pastow

Активный
213
67

demonvir

Новичок
Автор темы
9
2
2026-02-08 10-44-39-838.png
2026-02-08 10-44-01-062.png

Отправь интерфейс мемберса просто ( или это просто сообщения из чата? )

Я пытался парсить это как текст из чата не работало, то ли у меня шаблон не тот то ли что
 
  • Вау
Реакции: pastow

demonvir

Новичок
Автор темы
9
2

Lua:
script_name("Members Ex Console")
script_author("You")

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local events = require 'samp.events'

local tMembers = {}
local bPairs = false

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

    sampRegisterChatCommand("mbs", function()
        tMembers = {}
        bPairs = true
        sampSendChat("/members")
        print("Запрос /members отправлен, ожидаем список...")
    end)

    while true do wait(0) end
end

function events.onServerMessage(_, message)
    if not bPairs then return end

    -- Ловим строки с ID и ником, игнорируем остальное
    local id, nick = message:match("ID:%s*(%d+)%s*|.-|%s*([%w_]+)%s*:")
    if id and nick then
        -- Проверяем, нет ли уже такого игрока
        local exists = false
        for _, v in ipairs(tMembers) do
            if v.id == id then
                exists = true
                break
            end
        end
        if not exists then
            table.insert(tMembers, {id=id, nick=nick})
            print(("Найден игрок: %s [%s]"):format(nick, id))
        end
    end

    -- Ловим конец списка
    if message:find("Всего:%s*%d+ человек") then
        bPairs = false
        print(("Всего игроков в мемберсе: %d"):format(#tMembers))
        print("Все игроки:")
        for _, v in ipairs(tMembers) do
            print(("%s [%s]"):format(v.nick, v.id))
        end
    end

    return false
end
пробовал уже много вариантов даже упрощал код
 

менталейшн

Известный
1,282
233
Lua:
script_name("Members Ex Console")
script_author("You")

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local events = require 'samp.events'

local tMembers = {}
local bPairs = false

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

    sampRegisterChatCommand("mbs", function()
        tMembers = {}
        bPairs = true
        sampSendChat("/members")
        print("Запрос /members отправлен, ожидаем список...")
    end)

    while true do wait(0) end
end

function events.onServerMessage(_, message)
    if not bPairs then return end

    -- Ловим строки с ID и ником, игнорируем остальное
    local id, nick = message:match("ID:%s*(%d+)%s*|.-|%s*([%w_]+)%s*:")
    if id and nick then
        -- Проверяем, нет ли уже такого игрока
        local exists = false
        for _, v in ipairs(tMembers) do
            if v.id == id then
                exists = true
                break
            end
        end
        if not exists then
            table.insert(tMembers, {id=id, nick=nick})
            print(("Найден игрок: %s [%s]"):format(nick, id))
        end
    end

    -- Ловим конец списка
    if message:find("Всего:%s*%d+ человек") then
        bPairs = false
        print(("Всего игроков в мемберсе: %d"):format(#tMembers))
        print("Все игроки:")
        for _, v in ipairs(tMembers) do
            print(("%s [%s]"):format(v.nick, v.id))
        end
    end

    return false
end
пробовал уже много вариантов даже упрощал код
Код:
function events.onServerMessage(_, message)
    if not bPairs then return end

    local id, nick = message:match("ID:%s*(%d+)%s*|.-|%s*([%w_]+)%[%d+%]")
    if id and nick then
        -- Проверяем дубликат
        local exists = false
        for _, v in ipairs(tMembers) do
            if v.id == id then
                exists = true
                break
            end
        end
        if not exists then
            table.insert(tMembers, {id = id, nick = nick})
            print(("Найден игрок: %s [%s]"):format(nick, id))
        end
    end

    -- фразу под сервак подстрой
    if message:find("Всего:%s*%d+ человек") then
        bPairs = false
        print(("Всего игроков в мемберсе: %d"):format(#tMembers))
        print("Все игроки:")
        for _, v in ipairs(tMembers) do
            print(("%s [%s]"):format(v.nick, v.id))
        end
    end

    return false
end