Как открыть имгуи окно при входе в спек за игроком?

calculatorxss

Новичок
Автор темы
20
2
Версия MoonLoader
.026-beta
Нужно что-бы при входе в слежку за игроком открывалось имгуи окно. Как это реализовать?

Имгуи окно:
local test_window = imgui.ImBool(false)

function main()
    while not isSampAvailable() do wait(100) end
        sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
  test_window.v = not  test_window.v
  imgui.Process = test_window.v
end
function imgui.OnDrawFrame()
    if test_window.v then
    local m, a = ToScreen(200, 410)
        imgui.SetNextWindowPos(imgui.ImVec2(m, a), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(537, 60), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Piska", test_window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar)
        local bet = imgui.ImVec2(70, 0)
        if imgui.Button(u8'<< BACK', bet) then
        end
        imgui.End()
    end
end

И нужно чтобы при входе в /re за челом открывалась менюшка имгуи test_window.v
 
  • Эм
Реакции: YarikVL и Hinаta
Решение
Хз, на каком-то бонуснике всё работает.
1699201797719.png
1699201809449.png
1699201817855.png

Lua:
local imgui = require "imgui"
local sampev = require "lib.samp.events"
local main_window_state = imgui.ImBool(false)
local playerId = -1
function main()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("imgui", function() main_window_state.v = not main_window_state.v end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
end
function imgui.OnDrawFrame()
    if main_window_state.v then
        local sw, sh = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 1.15), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200...

calculatorxss

Новичок
Автор темы
20
2
Lua:
local sampev = require "lib.samp.events"
local playerId = -1 -- В начало

function sampev.onTogglePlayerSpectating(state)
    test_window.v = state
end

function sampev.onSpectatePlayer(id, type)
    if test_window.v then
        playerId = id
    end
end
не работает

Вот что вышло

Код:
local test_window = imgui.ImBool(false)
local sampev = require "lib.samp.events"
local playerId = -1

function main()
    while not isSampAvailable() do wait(100) end
        sampRegisterChatCommand('test', cmd_test)
end

function cmd_test(arg)
  test_window.v = not  test_window.v
  imgui.Process = test_window.v
end
function sampev.onTogglePlayerSpectating(state)
  test_window.v = state
end

function sampev.onSpectatePlayer(id, type)
  if test_window.v then
      playerId = id
  end
end
function imgui.OnDrawFrame()
    if test_window.v then
    local m, a = ToScreen(200, 410)
        imgui.SetNextWindowPos(imgui.ImVec2(m, a), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(537, 60), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Piska", test_window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar)
        local bet = imgui.ImVec2(70, 0)
        if imgui.Button(u8'<< BACK', bet) then
        end
        imgui.End()
    end
end
 
Последнее редактирование:

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,131
Хз, на каком-то бонуснике всё работает.
1699201797719.png
1699201809449.png
1699201817855.png

Lua:
local imgui = require "imgui"
local sampev = require "lib.samp.events"
local main_window_state = imgui.ImBool(false)
local playerId = -1
function main()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("imgui", function() main_window_state.v = not main_window_state.v end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
end
function imgui.OnDrawFrame()
    if main_window_state.v then
        local sw, sh = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 1.15), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Test script", main_window_state)
        imgui.Text("Spec: "..(playerId ~= -1 and sampGetPlayerNickname(playerId).."["..playerId.."]" or "None"))
        imgui.End()
    end
end
function sampev.onTogglePlayerSpectating(state)
    main_window_state.v = state
end
function sampev.onSpectatePlayer(id, type)
    if main_window_state.v then
        playerId = id
    end
end
Ну, у тебя imgui.Process включается по команде /test только, а при спеке ничего не происходит.
Под 15-й строкой у тебя пропиши:
imgui.Process = test_window.v
1699201309245.png
 
Последнее редактирование:

calculatorxss

Новичок
Автор темы
20
2
Хз, на каком-то бонуснике всё работает.
Посмотреть вложение 220255Посмотреть вложение 220257Посмотреть вложение 220258
Lua:
local imgui = require "imgui"
local sampev = require "lib.samp.events"
local main_window_state = imgui.ImBool(false)
local playerId = -1
function main()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("imgui", function() main_window_state.v = not main_window_state.v end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
end
function imgui.OnDrawFrame()
    if main_window_state.v then
        local sw, sh = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 1.15), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
        imgui.Begin("Test script", main_window_state)
        imgui.Text("Spec: "..(playerId ~= -1 and sampGetPlayerNickname(playerId).."["..playerId.."]" or "None"))
        imgui.End()
    end
end
function sampev.onTogglePlayerSpectating(state)
    main_window_state.v = state
end
function sampev.onSpectatePlayer(id, type)
    if main_window_state.v then
        playerId = id
    end
end

Ну, у тебя imgui.Process включается по команде /test только, а при спеке ничего не происходит.
Под 15-й строкой у тебя пропиши:
imgui.Process = test_window.v
Посмотреть вложение 220252
Может ли это быть из-за того, что у меня есть еще 7 имгуи окон?

Вот что у меня в imgui.OnDrawFrame()
Lua:
function imgui.OnDrawFrame()
  imgui.Process = test_window.v
    if not main_window.v and not two_window.v and not three_window.v and not four_window.v and not five_window.v and not six_window.v and not seven_window.v and not test_window.v then
        imgui.Process = false
    end
    imgui.ShowCursor = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v

И вот что в беск.цикле
Lua:
   imgui.Process = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
 

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,131
Я бы вообще с этим imgui.Process так много не шаманил. Оставь просто то, что в бесконечном цикле и не трогай его в других местах.
Посмотри в том коде, что я дал сверху, как это реализовано. В беск. цикле 1 раз прописал и забыл.

Можешь то, что в OnDrawFrame убрать (кроме курсора).
Убери также и из onTogglePlayerSpectating этот imgui.Process и проверь.

Вообще, можешь на mimgui переходить, там этой каши с imgui.Process'ом нет.
 
  • Нравится
Реакции: calculatorxss

calculatorxss

Новичок
Автор темы
20
2
Все, я сделал.
Надо было убрать просто из imgui.OnDrawFrame() процесы как ты говорил, и добавить в
function sampev.onTogglePlayerSpectating(state)
test_window.v = not test_window.v
imgui.Process = test_window.v
тоесть сделать так
Lua:
function sampev.onTogglePlayerSpectating(state)
  test_window.v = not test_window.v
  imgui.Process = test_window.v
end
Спасибо за помощь!
 
Последнее редактирование:
  • Нравится
Реакции: Dmitriy Makarov

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,131
Всё ещё не работает, вот код

Lua:
local sampev = require "lib.samp.events"
local playerId = -1
local main_window = imgui.ImBool(false)
local two_window = imgui.ImBool(false)
local three_window = imgui.ImBool(false)
local four_window = imgui.ImBool(false)
local five_window = imgui.ImBool(false)
local six_window = imgui.ImBool(false)
local seven_window = imgui.ImBool(false)
local test_window = imgui.ImBool(false)

function main()
    while not isSampAvailable() do wait(100) end
    initializeRender()
    sampAddChatMessage("[CTOOLS] {FFFFFF}by artemich loaded! Use /ctools or F3  ", 0x00FF00)
    sampRegisterChatCommand('ctools', cmd_ctools)
    sampRegisterChatCommand('ctools2', cmd_ctools2)
    sampRegisterChatCommand('ctools3', cmd_ctools3)
    sampRegisterChatCommand('ctools4', cmd_ctools4)
    sampRegisterChatCommand('ctools5', cmd_ctools5)
    sampRegisterChatCommand('ctools6', cmd_ctools6)
    sampRegisterChatCommand('ctools7', cmd_ctools7)
    sampRegisterChatCommand('test', cmd_test)


    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)


    while true do
        wait(0)

        if wasKeyPressed(keys.VK_F3) then
          main_window.v = not main_window.v
          imgui.Process = main_window.v
        end
         imgui.Process = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    end
  
    function sampev.onTogglePlayerSpectating(state)
end

function sampev.onSpectatePlayer(id, type)
  if test_window.v then
      playerId = id
  end
end

function cmd_ctools(arg)
    main_window.v = not main_window.v
    imgui.Process = main_window.v
end
function cmd_ctools2(arg)
    two_window.v = not two_window.v
    imgui.Process = two_window.v
end
function cmd_ctools3(arg)
    three_window.v = not three_window.v
    imgui.Process = three_window.v
end
function cmd_ctools4(arg)
  four_window.v = not four_window.v
  imgui.Process = four_window.v
end
function cmd_ctools5(arg)
  five_window.v = not five_window.v
  imgui.Process = five_window.v
end
function cmd_ctools6(arg)
  six_window.v = not six_window.v
  imgui.Process = six_window.v
end
function cmd_ctools7(arg)
  seven_window.v = not seven_window.v
  imgui.Process = seven_window.v
end
function cmd_test(arg)
  test_window.v = not test_window.v
  imgui.Process = test_window.v
end

function imgui.OnDrawFrame()
    imgui.ShowCursor = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    ----Тут все 7 окон
    if test_window.v then
      if imgui.IsMouseClicked(1) then
        imgui.ShowCursor = not imgui.ShowCursor
    end 
    local m, a = ToScreen(200, 410)
    imgui.SetNextWindowPos(imgui.ImVec2(m, a), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(537, 60), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"China", test_window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar)
    local bet = imgui.ImVec2(70, 0)
    if imgui.Button(u8'<< BACK', bet) then
    end
    imgui.End()
  end
end
Ну это у тебя что-то..
Ты мне даёшь кусочек кода, я его подправляю под себя и он у меня работает..

1699203791054.png

Lua:
local imgui = require "imgui"
local sampev = require "lib.samp.events"
local playerId = -1
local main_window = imgui.ImBool(false)
local two_window = imgui.ImBool(false)
local three_window = imgui.ImBool(false)
local four_window = imgui.ImBool(false)
local five_window = imgui.ImBool(false)
local six_window = imgui.ImBool(false)
local seven_window = imgui.ImBool(false)
local test_window = imgui.ImBool(false)

function main()
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage("[CTOOLS] {FFFFFF}by artemich loaded! Use /ctools or F3  ", 0x00FF00)
    sampRegisterChatCommand('ctools', function() main_window.v = not main_window.v end)
    sampRegisterChatCommand('ctools2', function() two_window.v = not two_window.v end)
    sampRegisterChatCommand('ctools3', function() three_window.v = not three_window.v end)
    sampRegisterChatCommand('ctools4', function() four_window.v = not four_window.v end)
    sampRegisterChatCommand('ctools5', function() five_window.v = not five_window.v end)
    sampRegisterChatCommand('ctools6', function() six_window.v = not six_window.v end)
    sampRegisterChatCommand('ctools7', function() seven_window.v = not seven_window.v end)
    sampRegisterChatCommand('test', function() test_window.v = not test_window.v end)
    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)
    while true do wait(0)
        if wasKeyPressed(0x72) then
            main_window.v = not main_window.v
        end
        imgui.Process = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    end
end

function sampev.onTogglePlayerSpectating(state)
    test_window.v = state
end

function sampev.onSpectatePlayer(id, type)
    if test_window.v then
        playerId = id
    end
end

function imgui.OnDrawFrame()
    imgui.ShowCursor = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    imgui.SetNextWindowPos(imgui.ImVec2(200, 410), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(537, 60), imgui.Cond.FirstUseEver)
    imgui.Begin("China", test_window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar)
    local bet = imgui.ImVec2(70, 0)
    if imgui.Button('<< BACK', bet) then

    end
    imgui.End()
end
 

calculatorxss

Новичок
Автор темы
20
2
Ну это у тебя что-то..
Ты мне даёшь кусочек кода, я его подправляю под себя и он у меня работает..

Посмотреть вложение 220264
Lua:
local imgui = require "imgui"
local sampev = require "lib.samp.events"
local playerId = -1
local main_window = imgui.ImBool(false)
local two_window = imgui.ImBool(false)
local three_window = imgui.ImBool(false)
local four_window = imgui.ImBool(false)
local five_window = imgui.ImBool(false)
local six_window = imgui.ImBool(false)
local seven_window = imgui.ImBool(false)
local test_window = imgui.ImBool(false)

function main()
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage("[CTOOLS] {FFFFFF}by artemich loaded! Use /ctools or F3  ", 0x00FF00)
    sampRegisterChatCommand('ctools', function() main_window.v = not main_window.v end)
    sampRegisterChatCommand('ctools2', function() two_window.v = not two_window.v end)
    sampRegisterChatCommand('ctools3', function() three_window.v = not three_window.v end)
    sampRegisterChatCommand('ctools4', function() four_window.v = not four_window.v end)
    sampRegisterChatCommand('ctools5', function() five_window.v = not five_window.v end)
    sampRegisterChatCommand('ctools6', function() six_window.v = not six_window.v end)
    sampRegisterChatCommand('ctools7', function() seven_window.v = not seven_window.v end)
    sampRegisterChatCommand('test', function() test_window.v = not test_window.v end)
    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)
    while true do wait(0)
        if wasKeyPressed(0x72) then
            main_window.v = not main_window.v
        end
        imgui.Process = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    end
end

function sampev.onTogglePlayerSpectating(state)
    test_window.v = state
end

function sampev.onSpectatePlayer(id, type)
    if test_window.v then
        playerId = id
    end
end

function imgui.OnDrawFrame()
    imgui.ShowCursor = main_window.v or two_window.v or three_window.v or four_window.v or five_window.v or six_window.v or seven_window.v or test_window.v
    imgui.SetNextWindowPos(imgui.ImVec2(200, 410), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(537, 60), imgui.Cond.FirstUseEver)
    imgui.Begin("China", test_window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar)
    local bet = imgui.ImVec2(70, 0)
    if imgui.Button('<< BACK', bet) then

    end
    imgui.End()
end
Незнаю, может это из-за количества имгуи окон или их процесов