вывод информации из диалога

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
у меня есть некий диалог:
mg 04-03-2022 19-21-23 [0].png


Подскажите, как сделать вывод members'a на экран.
А т.е, выше я предоставил скриншот как выглядит диалоговое окно members, как сделать вывод этого members на экран, по типу:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
и т.д
если же есть игроки которые находятся в выходном, то, в списке это будет обозначено, по типу:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д

Если можно, то, дайте пожалуйста пример(если будет не трудно, то, пояснения еще бы) по скриншоту который я кинул выше, ибо, ранее я не работал с диалогами.
Мне всего лишь нужно увидеть пример, остальные задумки которые у меня есть - я сам добавлю.
 

awserver

Участник
55
23
Lua:
local sampev = require 'lib.samp.events'
local memberstable = {}
local font = renderCreateFont('Verdana', 9, 9)

function sampev.onShowDialog(id, style, title, btn1, btn2, text)
    for line in text:gmatch('[^\r\n]+') do
       if line:find('тут сам заполнишь')
            table.insert(memberstable, line) -- добавляем строку в таблицу
        end
    end
end

function main()
while true do wait(0)
   for i=1, #memberstable do -- перебор каждого значения в таблице
renderFontDrawText(font, '{afafaf}'..memberstable[i] --[[таблица]], x, y+(15 --[[отступ]] * i), 0xFFFFFFFF)
        end
    end
end
 
Последнее редактирование:

SomaGnoma

Известный
442
152
Lua:
local sampev = require 'lib.samp.events'
local memberstable = {}
local font = renderCreateFont('Verdana', 9, 9)

function sampev.onShowDialog(id, style, title, btn1, btn2, text)
    for line in text:gmatch('[^\r\n]+') do
       if line:find('тут сам заполнишь')
            table.insert(memberstable, line) -- добавляем строку в таблицу
        end
    end
end

function main()
while true do wait(0)
   for i=1, #memberstable do -- перебор каждого значения в таблице
renderFontDrawText(font, '{afafaf}'..memberstable[i] --[[таблица]], x, y+(15 --[[отступ]] * i), 0xFFFFFFFF)
        end
    end
end
Проще было бы конкатенировать таблицу через \n
 

W1ll04eison

Участник
Автор темы
328
19
Lua:
local sampev = require 'lib.samp.events'
local memberstable = {}
local font = renderCreateFont('Verdana', 9, 9)

function sampev.onShowDialog(id, style, title, btn1, btn2, text)
    for line in text:gmatch('[^\r\n]+') do
       if line:find('тут сам заполнишь')
            table.insert(memberstable, line) -- добавляем строку в таблицу
        end
    end
end

function main()
while true do wait(0)
   for i=1, #memberstable do -- перебор каждого значения в таблице
renderFontDrawText(font, '{afafaf}'..memberstable[i] --[[таблица]], x, y+(15 --[[отступ]] * i), 0xFFFFFFFF)
        end
    end
end
Если вот сюда:
if line:find('тут сам заполнишь') then

Я вставлю вот так:
if line:find('%[%d+%] %w+_%w+ .+ %[%d+%]') then
То, оно будет считывать и выводить вот так:
[id] Nick_Name ранг [номер]
???

Скрин я кинул выше

если же есть игроки которые находятся в выходном, то, в списке это будет обозначено, по типу:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д
Что на счет этого?
 

awserver

Участник
55
23
Если вот сюда:
if line:find('тут сам заполнишь') then

Я вставлю вот так:
if line:find('%[%d+%] %w+_%w+ .+ %[%d+%]') then
То, оно будет считывать и выводить вот так:
[id] Nick_Name ранг [номер]
???

Скрин я кинул выше


Что на счет этого?
1. да
2. абсолютно такую же проверку вставляешь после первой, но уже
Lua:
if line:find('%[Выходные%]') then
   table.insert(memberstable, line)
end
забыл уточнить про получение самой инфы, просто в цикле или в потоке открывай диалог и скрывай его через хук оншовдиалог
а еще лучше поразбирай подобные скрипты, ибо там много нюансов по типу сброса полученной инфы во избежания повторов итд
 

W1ll04eison

Участник
Автор темы
328
19
2. абсолютно такую же проверку вставляешь после первой, но уже
А как это сделать, что-бы это отображалось вот так:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д
Ибо, если я сделаю эту проверку после первой, то, если даже кто-то есть в выходном, то, он не будет отображатся корректно, вместо вот этого:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д
Будет что-то подобное:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
и т.д

поразбирай подобные скрипты
Если не трудно, то, скинь ссылки на эти скрипты, ибо скрипт подобного типа я нашел только один, и то для аризоны
 
Последнее редактирование:

awserver

Участник
55
23
А как это сделать, что-бы это отображалось вот так:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д
Ибо, если я сделаю эту проверку после первой, то, если даже кто-то есть в выходном, то, он не будет отображатся корректно, вместо вот этого:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
[id] Nick_Name ранг [номер]
и т.д
Будет что-то подобное:
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[id] Nick_Name ранг [номер]
[Выходные]
и т.д


Если не трудно, то, скинь ссылки на эти скрипты, ибо скрипт подобного типа я нашел только один, и то для аризоны
можешь сделать легче, просто проверка по диалогу, и следующий код
Lua:
-- тут проверка по диалогу итд
if line:find('.+') then
     table.insert(memberstable, line)
end
такой код будет выводить все так, как оно расположено в диалоге
 

Вложения

  • connect_leave_monitor.lua
    6 KB · Просмотры: 20

W1ll04eison

Участник
Автор темы
328
19
как правильно открывать диалог(ввод команды для открытия диалога) с определенной задержкой?
я сделал это в бесконечном цикле, все нормально, все открывало.
но, с помощью sampSendDialogResponse (sampSendDialogResponse(22, 0, 0, '')) диалог не закрывался.
как это сделать (открытие диалога с определенной задержкой и затем закрытие его)?
 

xMercy

Известный
147
116
как правильно открывать диалог(ввод команды для открытия диалога) с определенной задержкой?
я сделал это в бесконечном цикле, все нормально, все открывало.
но, с помощью sampSendDialogResponse (sampSendDialogResponse(22, 0, 0, '')) диалог не закрывался.
как это сделать (открытие диалога с определенной задержкой и затем закрытие его)?
Он закрывается для сервера, а для тебя остаётся. Используй return false после sampSendDialogResponse(22, 0, 0, '')
 

W1ll04eison

Участник
Автор темы
328
19
абсолютно такую же проверку вставляешь после первой, но уже
Lua:
if line:find('%[Выходные%]') then
table.insert(memberstable, line)
end
забыл уточнить про получение самой инфы, просто в
как можно совместить вот это:
lua:
            if line:find('%[Выходные%]') then
                numbers, vix = string.match(line, "(%[%d+%]) (%[Выходные%])")
                local linee = string.format("%s", numbers)
               
           
            end
и вот это:
lua:
            if line:find('%w+_%w+')then
                local number, id, name, rang, idrang, afk = string.match(line, "%[(%d+)%] (%[%d+%]) (%w+_%w+)(.+) (%[%d+%])(.+)")
                local lineee = string.format("%s%s  %s%s  {FF0000}%s", name, id, rang, idrang, afk)
               
            end
что-бы вот сюда:
table.insert(memberstable, text)
вместо text поставить одно значение, ибо два значения к примеру linee и lineee не получается ставить.

или же, если делать вот так:
lua:
if line:find('.+') then
    table.insert(memberstable, line)
end
то, в renderFontDrawText отображается строка:
[ID] Имя Ранг [Номер] [AFK секунд]
то, как ее убрать?
 
Последнее редактирование:

awserver

Участник
55
23
как можно совместить вот это:
lua:
            if line:find('%[Выходные%]') then
                numbers, vix = string.match(line, "(%[%d+%]) (%[Выходные%])")
                local linee = string.format("%s", numbers)
              
          
            end
и вот это:
lua:
            if line:find('%w+_%w+')then
                local number, id, name, rang, idrang, afk = string.match(line, "%[(%d+)%] (%[%d+%]) (%w+_%w+)(.+) (%[%d+%])(.+)")
                local lineee = string.format("%s%s  %s%s  {FF0000}%s", name, id, rang, idrang, afk)
              
            end
что-бы вот сюда:
table.insert(memberstable, text)
вместо text поставить одно значение, ибо два значения к примеру linee и lineee не получается ставить.

или же, если делать вот так:
lua:
if line:find('.+') then
    table.insert(memberstable, line)
end
то, в renderFontDrawText отображается строка:
[ID] Имя Ранг [Номер] [AFK секунд]
то, как ее убрать?
1. зачем а главное зачем?
2.
Lua:
if line:find('%[%d+%] .+') then
     table.insert(memberstable, line)
end
 

W1ll04eison

Участник
Автор темы
328
19
1. зачем а главное зачем?
2.
Lua:
if line:find('%[%d+%] .+') then
     table.insert(memberstable, line)
end
сделал так как ты написал.
выводит вот так:
mg 07-03-2022 19-47-42 [6].png

1. Как убрать нумерацию строк(указал стрелкой).
2. Как решить проблему, ники и название рангов смешиваются(подчеркнул).

Сделал я через string.format, выводит вот так:
mg 07-03-2022 19-37-50 [4].png

Но, слово «[Выходные]» не выводиться корректно.
через string.format я убрал эту нумерацию строк, перенес ид игрока(поставил после ника, когда стояло до ника), перекрасил ник игрока в зависимости его clist'a.
Но, как через string.format убрать нумерацию строк, при этом сохранить слово «[Выходные]» я что-то не могу понять.
Или же как это можно сделать?
 

awserver

Участник
55
23
сделал так как ты написал.
выводит вот так:
Посмотреть вложение 138995
1. Как убрать нумерацию строк(указал стрелкой).
2. Как решить проблему, ники и название рангов смешиваются(подчеркнул).

Сделал я через string.format, выводит вот так:
Посмотреть вложение 138996
Но, слово «[Выходные]» не выводиться корректно.
через string.format я убрал эту нумерацию строк, перенес ид игрока(поставил после ника, когда стояло до ника), перекрасил ник игрока в зависимости его clist'a.
Но, как через string.format убрать нумерацию строк, при этом сохранить слово «[Выходные]» я что-то не могу понять.
Или же как это можно сделать?
не должно быть нумерации, размер шрифта меньше сделай, чтобы пробелы были в норме
 

W1ll04eison

Участник
Автор темы
328
19
не должно быть нумерации
была нумерация

размер шрифта меньше сделай, чтобы пробелы были в норме
это и так размер шрифта 10, если делать меньше, то, там под лупой только рассматривать если


крч...я решил обе эти проблемы:
то что была нумерация и не было пробелов
вот как я поступил:

lua:
for line in text:gmatch('[^\r\n]+') do
            if line:find('%[%d+%] .+') then
                local number, idts, name, rang, idrang, afk = string.match(line, "%[(%d+)%] %[(.+)%] (%w+_%w+)(.+) %[(%d+)%](.+)")

                local ccolor = sampGetPlayerColor(idts)
                ccolor = string.format("%X", tonumber(ccolor))
                if #ccolor == 8 then _, ccolor = string.match(ccolor, "(..)(......)") end
             
                local lineee = string.format("{"..ccolor.."} %s[%s]{afafaf}  %s[%s]  {FF0000}%s", name, idts, rang, idrang, afk)
                if idts == nil then lineee = " {D95A41}[Выходные]" end
         
                table.insert(memberstable, lineee) -- добавляем строку в таблицу
            end
        end
        sampSendDialogResponse(id, 0, 0, nil)
        return false

теперь отображает все хорошо
mg 07-03-2022 23-35-15 [0].png


Но, теперь вопрос в следующем, как сделать так, что-бы members «обновлялся»(прописывалась команда «/members») только тогда, когда никакой диалог не активен, когда поле ввода не активно(когда в чат ничего я не пишу)...Потому что данное «обновление» members сбивает другие диалоги, и если во время «обновления» members я что-то отправлю в чат, то это просто не отправляется и в чат пишет: «Не флуди»

как я пробовал делать:

lua:
lua_thread.create(flooder) --в main

function flooder() --вне main
        while true do wait(0)
            if not sampIsChatVisible() and not sampIsDialogActive() and not sampIsChatInputActive() then
                if sampIsLocalPlayerSpawned() then
                    wait(10000)
                    sampSendChat('/members')
                end
            end
        end
end
Но, выше написанный код резуальтатов не дал, если при каком либо активном диалоге происходить «обновление» members и тот диалог который был открыт - он сбивается(закрывается).
Если я в чат что-то пишу во время «обновления» members, то как я уже сказал ранее: (это просто не отправляется и в чат пишет: «Не флуди»)
 
Последнее редактирование: