Где ошибка в скрипте

KOHTOP

Участник
Автор темы
138
17
Сорри за код, карявый, учусь меньше 3-ёх часов. Имгуи не открывается в сампе (ввожу покамнду, а имгуи не работает), открывалась ранее через раз


Script:
script_name('Admin Tools')

require "lib.moonloader" -- подключение библиотеки
local keys = require "vkeys"
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'ANSI'
u8 = encoding.UTF8

local tag = '{00FFFF}[Admin Tools]: ' -- локальная переменная
local main_color = 0xF90000
local main_color_text = 0x00FFFF

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

    function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    
    sampAddChatMessage(tag .. '{F90000} Loading...', 0xFFFFFF )
    sampRegisterChatCommand("test", cmd_normal)
    sampRegisterChatCommand("sd", cmd_normals)
    sampRegisterChatCommand("as", cmd_admin)
    imgui.Process = false
    -- Блок выполняется один раз после старта сампа
    while true do
        wait(0)
        
        if main_window_state.v == false then
            imgui.Process = false
        end
  -- Блок выполняется бесконечно (пока самп активен)
 
    end
end

function cmd_normal (arg)
    sampAddChatMessage(tag .. "{F90000}привет", main_color_text)
end

function cmd_admin(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

function imgui.OnDrawFrame()
    imgui.Begin(u8"Настройки", main_window_state)
    imgui.InputText("Текст", text_buffer)
    imgui.Text("text_buffer")
    imgui.End()
end
 
Решение
Lua:
script_name('Admin Tools')
-- подключение библиотеки
require("lib.moonloader")
local keys = require("vkeys")
local imgui = require('imgui')

local encoding = require('encoding')
encoding.default = 'CP1251' -- наша кодировка CP1251(windows-1251)
u8 = encoding.UTF8

-- локальные переменные
local tag = '{00FFFF}[Admin Tools]: '
local main_color = 0xF90000
local main_color_text = 0x00FFFF

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    while not isSampAvailable() do wait(100) end
  
    sampAddChatMessage(tag .. '{F90000} Loading...', 0xFFFFFF )
    sampRegisterChatCommand("test", cmd_normal) -- регистрируем одну команду на одну функцию
    sampRegisterChatCommand("as"...

qdIbp

Автор темы
Проверенный
1,387
1,143
Lua:
script_name('Admin Tools')
-- подключение библиотеки
require("lib.moonloader")
local keys = require("vkeys")
local imgui = require('imgui')

local encoding = require('encoding')
encoding.default = 'CP1251' -- наша кодировка CP1251(windows-1251)
u8 = encoding.UTF8

-- локальные переменные
local tag = '{00FFFF}[Admin Tools]: '
local main_color = 0xF90000
local main_color_text = 0x00FFFF

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    while not isSampAvailable() do wait(100) end
  
    sampAddChatMessage(tag .. '{F90000} Loading...', 0xFFFFFF )
    sampRegisterChatCommand("test", cmd_normal) -- регистрируем одну команду на одну функцию
    sampRegisterChatCommand("as", 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 cmd_normal() -- не пиши ничего в скобке если не собираешься работать с аргументами функции
    sampAddChatMessage(tag .. "{F90000}привет", main_color_text)
end

function imgui.OnDrawFrame()
    if main_window_state.v then
        imgui.Begin(u8"Настройки", main_window_state)
            imgui.InputText(u8"Текст", text_buffer) -- добавляем u8 чтобы понить что написано
            imgui.Text("text_buffer")
        imgui.End()
    end
end

Также на проверку false можно делать так

Lua:
local test = false
if not test then --[[     как известно not переворачивает значение, в данном уславии он вернет true
                        так как not false = true
                        так что если бы test был равен true то в этом условии not его
                        перевернет и был бы false и условие не с работает
                        можешь тут проверить данный код и поменять значение с true на false и на оборот
                        https://rextester.com/l/lua_online_compiler
                    ]]
    print(1)
else
    print(not test)
end
 
Последнее редактирование:

KOHTOP

Участник
Автор темы
138
17
Lua:
script_name('Admin Tools')
-- подключение библиотеки
require("lib.moonloader")
local keys = require("vkeys")
local imgui = require('imgui')

local encoding = require('encoding')
encoding.default = 'CP1251' -- наша кодировка CP1251(windows-1251)
u8 = encoding.UTF8

-- локальные переменные
local tag = '{00FFFF}[Admin Tools]: '
local main_color = 0xF90000
local main_color_text = 0x00FFFF

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    while not isSampAvailable() do wait(100) end
 
    sampAddChatMessage(tag .. '{F90000} Loading...', 0xFFFFFF )
    sampRegisterChatCommand("test", cmd_normal) -- регистрируем одну команду на одну функцию
    sampRegisterChatCommand("as", 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 cmd_normal() -- не пиши ничего в скобке если не собираешься работать с аргументами функции
    sampAddChatMessage(tag .. "{F90000}привет", main_color_text)
end

function imgui.OnDrawFrame()
    if main_window_state.v then
        imgui.Begin(u8"Настройки", main_window_state)
            imgui.InputText(u8"Текст", text_buffer) -- добавляем u8 чтобы понить что написано
            imgui.Text("text_buffer")
        imgui.End()
    end
end

Также на проверку false можно делать так

Lua:
local test = false
if not test then --[[     как известно not переворачивает значение, в данном уславии он вернет true
                        так как not false = true
                        так что если бы test был равен true то в этом условии not его
                        перевернет и был бы false и условие не с работает
                        можешь тут проверить данный код и поменять значение с true на false и на оборот
                        https://rextester.com/l/lua_online_compiler
                    ]]
    print(1)
else
    print(not test)
end
Спасибо, очень помог!
 
  • Нравится
Реакции: qdIbp