Отображение информации в окне имгуи

LeClark

Новичок
Автор темы
3
0
Приветствую, я бы хотел узнать каким образом можно отобразить информацию из диалогаi, приведу пример с аризоны, допyстим должно выводить информацию о текущем онлайне организации (/members), чтобы название окна было "Онлайн(и количество онлайна)" и ниже по списку шли ники людей которые в сети (Пример прикрепил)

1699440629532.png
 
Последнее редактирование:

YarikVL

Известный
Проверенный
4,795
1,814
Приветствую, я бы хотел узнать каким образом можно отобразить информацию из диалогаi, приведу пример с аризоны, допyстим должно выводить информацию о текущем онлайне организации (/members), чтобы название окна было "Онлайн(и количество онлайна)" и ниже по списку шли ники людей которые в сети (Пример прикрепил)

Посмотреть вложение 220594
Смотри пример и делай также:
Если погуглить, можно еще похожих найти.

Если не понятен код по ссылке выше. Значит смотри гайды на ютубе:
https://youtube.com/@ya_chapo?si=Ptye1ZoGZ0Tm451o https://youtube.com/playlist?list=PLtPWpYNCQaLfS_JWRpCGuaKzds7F6VDR0&si=zq7axD0F_ZXkzNl4
И гайды на бх: https://www.blast.hk/threads/22707/ https://www.blast.hk/forums/149/

Если лень - обращайся сюда:
 
  • Нравится
Реакции: LeClark и the same

LeClark

Новичок
Автор темы
3
0
Смотри пример и делай также:
Если погуглить, можно еще похожих найти.

Если не понятен код по ссылке выше. Значит смотри гайды на ютубе:
https://youtube.com/@ya_chapo?si=Ptye1ZoGZ0Tm451o https://youtube.com/playlist?list=PLtPWpYNCQaLfS_JWRpCGuaKzds7F6VDR0&si=zq7axD0F_ZXkzNl4
И гайды на бх: https://www.blast.hk/threads/22707/ https://www.blast.hk/forums/149/

Если лень - обращайся сюда:
Привет, проверил оба первые скрипта, один вводит /members и оффается, а другой не отображается и по кд открывает /quest
 

Dmitriy Makarov

25.05.2021
Проверенный
2,484
1,114
Мало подробностей. Те, кто на Аризоне не играют, не смогут тебе помочь, ибо не знают, как выглядит диалоговое окно members'а, чтобы оттуда игроков доставать. Да и вообще бесплатно тебе это мало кто сделает.
Lua:
require "lib.moonloader"
local imgui      = require "mimgui"
local sampev     = require "lib.samp.events"
local encoding   = require "encoding"

local u8         = encoding.UTF8
encoding.default = "CP1251"

local window = imgui.new.bool(true)
local tbl = {}
local lastDialogWasActive = 0

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

function main()
    while not isSampAvailable() do wait(100) end
    lua_thread.create(flooder)
    while true do wait(0)
        if sampIsDialogActive() then
            lastDialogWasActive = os.clock()
        end
    end
end

function flooder() -- https://www.blast.hk/threads/59761/
    while true do wait(0)
        if sampIsLocalPlayerSpawned() then
            while (os.clock() - lastDialogWasActive) < 2.00 do wait(0) end
            sampSendChat("/members")
            wait(10 * 1000)
        end
    end
end

imgui.OnFrame(function() return window[0] end, function(self)
    local sizeX, sizeY = getScreenResolution()
    self.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 1.1, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(300, 200), imgui.Cond.FirstUseEver)
    imgui.Begin("##", window, imgui.WindowFlags.NoTitleBar
    + imgui.WindowFlags.NoResize
    + imgui.WindowFlags.AlwaysAutoResize
    + imgui.WindowFlags.NoMove
    + imgui.WindowFlags.NoFocusOnAppearing)
    imgui.Text((u8"Игроков в сети: %s"):format(#tbl))
    if #tbl > 0 then
        for _, v in pairs(tbl) do
            imgui.TextUnformatted(("%s\n"):format(v))
        end
    end
    imgui.End()
end)

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if title:gsub("%{......%}", ""):find(".+%(В сети: %d+%) %| Организация") then
        lua_thread.create(function() wait(50)
            text = text:gsub("%{......%}", "")
            tbl = {}
            for line in text:gmatch("[^\n]+") do
                if line:gsub("%{......%}", ""):find("(.-)%(%d+%)%s*.+%(%d+%)%s*.+%s*%d+ шт") then
                    local names = line:match("(.-)%(%d+%)%s*.+%(%d+%)%s*.+%s*%d+ шт")
                    table.insert(tbl, names)
                end
            end
            sampSendDialogResponse(dialogId, 0, nil, nil)
        end)
        return false
    end
end
sa-mp-008.png
Я тоже не изучал эту тему с members'ом, ибо играю на Аризоне меньше месяца и редко захожу, поэтому сделал так, как у меня показывало. Возможно, могут быть проблемы, если в members'е будет много игроков и если диалоговое окно разделится на страницы, тогда придётся уже менять код и сделать так, чтобы он и страницы листал. Но, как я уже сказал, я сделал так, как у меня показывало (потому что я не знаю, как выглядит диалоговое окно со страницами).

P.S Минут 15 стоял и смотрел, как будет вести себя скрипт. С задержкой в 2 секунды (на 32-й строке) через секунд 20-30 игру крашило. С 10-ю секундами, как я уже сказал, стоял минут 15 и ничего не произошло.
 
  • Нравится
Реакции: LeClark и YarikVL

LeClark

Новичок
Автор темы
3
0
Мало подробностей. Те, кто на Аризоне не играют, не смогут тебе помочь, ибо не знают, как выглядит диалоговое окно members'а, чтобы оттуда игроков доставать. Да и вообще бесплатно тебе это мало кто сделает.
Lua:
require "lib.moonloader"
local imgui      = require "mimgui"
local sampev     = require "lib.samp.events"
local encoding   = require "encoding"

local u8         = encoding.UTF8
encoding.default = "CP1251"

local window = imgui.new.bool(true)
local tbl = {}
local lastDialogWasActive = 0

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

function main()
    while not isSampAvailable() do wait(100) end
    lua_thread.create(flooder)
    while true do wait(0)
        if sampIsDialogActive() then
            lastDialogWasActive = os.clock()
        end
    end
end

function flooder() -- https://www.blast.hk/threads/59761/
    while true do wait(0)
        if sampIsLocalPlayerSpawned() then
            while (os.clock() - lastDialogWasActive) < 2.00 do wait(0) end
            sampSendChat("/members")
            wait(10 * 1000)
        end
    end
end

imgui.OnFrame(function() return window[0] end, function(self)
    local sizeX, sizeY = getScreenResolution()
    self.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 1.1, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(300, 200), imgui.Cond.FirstUseEver)
    imgui.Begin("##", window, imgui.WindowFlags.NoTitleBar
    + imgui.WindowFlags.NoResize
    + imgui.WindowFlags.AlwaysAutoResize
    + imgui.WindowFlags.NoMove
    + imgui.WindowFlags.NoFocusOnAppearing)
    imgui.Text((u8"Игроков в сети: %s"):format(#tbl))
    if #tbl > 0 then
        for _, v in pairs(tbl) do
            imgui.TextUnformatted(("%s\n"):format(v))
        end
    end
    imgui.End()
end)

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if title:gsub("%{......%}", ""):find(".+%(В сети: %d+%) %| Организация") then
        lua_thread.create(function() wait(50)
            text = text:gsub("%{......%}", "")
            tbl = {}
            for line in text:gmatch("[^\n]+") do
                if line:gsub("%{......%}", ""):find("(.-)%(%d+%)%s*.+%(%d+%)%s*.+%s*%d+ шт") then
                    local names = line:match("(.-)%(%d+%)%s*.+%(%d+%)%s*.+%s*%d+ шт")
                    table.insert(tbl, names)
                end
            end
            sampSendDialogResponse(dialogId, 0, nil, nil)
        end)
        return false
    end
end
Посмотреть вложение 220768
Я тоже не изучал эту тему с members'ом, ибо играю на Аризоне меньше месяца и редко захожу, поэтому сделал так, как у меня показывало. Возможно, могут быть проблемы, если в members'е будет много игроков и если диалоговое окно разделится на страницы, тогда придётся уже менять код и сделать так, чтобы он и страницы листал. Но, как я уже сказал, я сделал так, как у меня показывало (потому что я не знаю, как выглядит диалоговое окно со страницами).

P.S Минут 15 стоял и смотрел, как будет вести себя скрипт. С задержкой в 2 секунды (на 32-й строке) через секунд 20-30 игру крашило. С 10-ю секундами, как я уже сказал, стоял минут 15 и ничего не произошло.
Благодарю за предоставленный код