Помогите достать любое число из диалога

RoflHaHaWF

Известный
Автор темы
1,093
458
Версия SA-MP
  1. 0.3.7 (R1)
  2. 0.3.7-R2
  3. 0.3.7-R3
  4. 0.3.7-R4
  5. 0.3DL
  6. 0.3e (R1) / CR-MP
  7. CR-MP 0.3.7
  8. Любая
  9. Другая
Помогите пожалуйста, желательно напишите к каждой строке что она значит. Мне нужно вытащить любое число из репорта на аризоне. Именно тот айди, на кого пишут в репорт. К примеру 337 айди чит или чит айди 337. Нужно достать как-то это айди
 

Вложения

  • Discord_VSH0m1DE8A.png
    Discord_VSH0m1DE8A.png
    42.4 KB · Просмотры: 31

RoflHaHaWF

Известный
Автор темы
1,093
458

Andrinall

Известный
680
532
Спасибо братан, а как достать любое число именно из репорта, а не от кого пришел репорт?
Если тебе нужен ID того человека, который прислал этот репорт конкретно из того диалога, который у тебя на скрине в первом сообщении:
Lua:
local ev = require 'lib.samp.events'
function ev.onShowDialog(dialogId, style, title, button1, button2, text) -- хукаешь получение RPC 61 "RPC_SCRSHOWDIALOG"
    if text:find("Жалоба/Вопрос от:") then -- чекаешь, показан ли нужный тебе диалог, например по его содержимому.
        local pNick, pId = text:match("от: (%w+_%w+)%[(%d+)%]") -- выдёргиваешь из текста данные, соответствующие паттерну.
        -- дальше делаешь с этим что тебе нужно.
    end
end

Вроде ничего не забыл и нигде не косякнул.


UPD:

Не сразу увидел это
К примеру 337 айди чит или чит айди 337. Нужно достать как-то это айди
Для этого я бы чекал диалог по линиям всё же.
Lua:
for line in text:gmatch("[^\n]+") do
    if not line:find("Жалоба/Вопрос") then
        if line:find("какое-то ключевое слово") then
            local id, reason = line:match("(%d+)%S(.*)") -- или иной паттерн, тут уже для себя конкретно подстроишь.
                                                         -- Здесь самый простой репорт, например, "2 чит".
                                                         -- Но можешь не учитывать ключевое слово,
                                                         -- а просто вырывать первое число из строки через (%d+)
        end
    end
end
 
Последнее редактирование:
  • Нравится
Реакции: ARMOR и RoflHaHaWF

RoflHaHaWF

Известный
Автор темы
1,093
458
Если тебе нужен ID того человека, который прислал этот репорт конкретно из того диалога, который у тебя на скрине в первом сообщении:
Lua:
local ev = require 'lib.samp.events'
function ev.onShowDialog(dialogId, style, title, button1, button2, text) -- хукаешь получение RPC 61 "RPC_SCRSHOWDIALOG"
    if text:find("Жалоба/Вопрос от:") then -- чекаешь, показан ли нужный тебе диалог, например по его содержимому.
        local pNick, pId = text:match("от: (%w+_%w+)%[(%d+)%]") -- выдёргиваешь из текста данные, соответствующие паттерну.
        -- дальше делаешь с этим что тебе нужно.
    end
end

Вроде ничего не забыл и нигде не косякнул.


UPD:

Не сразу увидел это

Для этого я бы чекал диалог по линиям всё же.
Lua:
for line in text:gmatch("[^\n]+") do
    if not line:find("Жалоба/Вопрос") then
        if line:find("какое-то ключевое слово") then
            local id, reason = line:match("(%d+)%S(.*)") -- или иной паттерн, тут уже для себя конкретно подстроишь.
                                                         -- Здесь самый простой репорт, например, "2 чит".
                                                         -- Но можешь не учитывать ключевое слово,
                                                         -- а просто вырывать первое число из строки через (%d+)
        end
    end
end
Спасибо, проверю!

Если тебе нужен ID того человека, который прислал этот репорт конкретно из того диалога, который у тебя на скрине в первом сообщении:
Lua:
local ev = require 'lib.samp.events'
function ev.onShowDialog(dialogId, style, title, button1, button2, text) -- хукаешь получение RPC 61 "RPC_SCRSHOWDIALOG"
    if text:find("Жалоба/Вопрос от:") then -- чекаешь, показан ли нужный тебе диалог, например по его содержимому.
        local pNick, pId = text:match("от: (%w+_%w+)%[(%d+)%]") -- выдёргиваешь из текста данные, соответствующие паттерну.
        -- дальше делаешь с этим что тебе нужно.
    end
end

Вроде ничего не забыл и нигде не косякнул.


UPD:

Не сразу увидел это

Для этого я бы чекал диалог по линиям всё же.
Lua:
for line in text:gmatch("[^\n]+") do
    if not line:find("Жалоба/Вопрос") then
        if line:find("какое-то ключевое слово") then
            local id, reason = line:match("(%d+)%S(.*)") -- или иной паттерн, тут уже для себя конкретно подстроишь.
                                                         -- Здесь самый простой репорт, например, "2 чит".
                                                         -- Но можешь не учитывать ключевое слово,
                                                         -- а просто вырывать первое число из строки через (%d+)
        end
    end
end
Вот у тебя
Lua:
    if not line:find("Жалоба/Вопрос") then
            if line:find("какое-то ключевое слово") then
Если не нашло строку "Жалоба/Вопрос", то он ищет ключевое слово? Вот мне нужно просто вырвать первое число из строки. Мне нужно просто
Lua:
if line:find("Жалоба/Вопрос") then
   local id = line:match("(%d+)")
и потом взаимодействовать с local id? То-есть если нашло в диалоге строчку "Жалоба/Вопрос", то local id будет принят за первое число?
 
Последнее редактирование:
  • Нравится
Реакции: Andrinall

Andrinall

Известный
680
532
Спасибо, проверю!


Вот у тебя
Lua:
    if not line:find("Жалоба/Вопрос") then
            if line:find("какое-то ключевое слово") then
Если не нашло строку "Жалоба/Вопрос", то он ищет ключевое слово? Вот мне нужно просто вырвать первое число из строки. Мне нужно просто
Lua:
if line:find("Жалоба/Вопрос") then
   local id = line:match("(%d+)")
и потом взаимодействовать с local id? То-есть если нашло в диалоге строчку "Жалоба/Вопрос", то local id будет принят за первое число?
Если ты не ставишь not перед line:find("Жалоба/Вопрос") - первым числом будет ID отправившего репорт игрока для этой строки.

Если ставить not, то строка с ником и id отправившего будет пропущена и цикл пойдёт дальше по строкам, наткнётся на ту строку с текстом этой жалобы/вопроса и уже оттуда будет вытаскивать число.
Lua:
if not line:find("Жалоба/Вопрос") then -- пропустит строку с ником и id отправившего и пойдёт дальше
    -- дойдёт до строки с текстом жалобы и оттуда схавает число
    local id = line:match("(%d+)")
    -- но нужно учитывать, что это число не всегда окажется ID т.к. контекст может быть разным, это стоит учесть
end
С недосыпа сложно понимать что хотят сделать люди, уж извини если туплю.


Скрытое содержимое для пользователя(ей): RoflHaHaWF
 
  • Нравится
Реакции: RoflHaHaWF

RoflHaHaWF

Известный
Автор темы
1,093
458
Если ты не ставишь not перед line:find("Жалоба/Вопрос") - первым числом будет ID отправившего репорт игрока для этой строки.

Если ставить not, то строка с ником и id отправившего будет пропущена и цикл пойдёт дальше по строкам, наткнётся на ту строку с текстом этой жалобы/вопроса и уже оттуда будет вытаскивать число.
Lua:
if not line:find("Жалоба/Вопрос") then -- пропустит строку с ником и id отправившего и пойдёт дальше
    -- дойдёт до строки с текстом жалобы и оттуда схавает число
    local id = line:match("(%d+)")
    -- но нужно учитывать, что это число не всегда окажется ID т.к. контекст может быть разным, это стоит учесть
end
С недосыпа сложно понимать что хотят сделать люди, уж извини если туплю.


*** Скрытый текст не может быть процитирован. ***
Понял, спасибо, удачи)
 
  • Нравится
Реакции: Andrinall