Почему через чекбокс не включается/выключается скрипт?

lightmetal

Участник
Автор темы
34
3
Версия MoonLoader
.026-beta
Подскажите почему в чекбоксе не включается/выключается скрипт. Отметил код который отвечает за это и который должен включать/выключаться(111-146). Делал включение/выключение скрипта по первому чекбоксу,всё работала. Начал делать второй по такому же принципу, он не включается(постоянно выключен)
Код:
require 'moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local inicfg = require "inicfg"
local dlstatus = require('moonloader').download_status
local sampev = require('lib.samp.events')
local fa = require 'faIcons'
local fonts = renderCreateFont("Arial", 9, 5)
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new


local tab = 1
local WinState = imgui.new.bool()
local active_script = imgui.new.bool()
local active_scriptuval = imgui.new.bool()

local words = {'псж','psj','увал','увольте'}
local font = renderCreateFont('TimesNewRoman', 12, 5)
local st = {
    nick = '',
    bool = false,
    timer = -1,
    id = -1,
}

function imgui.Link(link, text) -- link
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end

imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(700, 420), imgui.Cond.Always)
    imgui.Begin(u8'Пример', WinState, imgui.WindowFlags.NoResize)
 
    imgui.BeginChild('##left', imgui.ImVec2(160, 365), true)
    for numberTab, nameTab in pairs({'Основное','Настройки','Инфа', 'Тест', 'Тест2',  'Тест3'}) do
        if imgui.Button(u8(nameTab), imgui.ImVec2(148,55)) then
            tab = numberTab
        end
    end
    imgui.EndChild()
    imgui.SameLine()
     imgui.SetCursorPos(imgui.ImVec2(170, 30))
     if imgui.BeginChild('right'..tab, imgui.ImVec2(510, 365), true) then
        -- Содержимое вкладок
        if tab == 1 then
        imgui.Checkbox(u8'Быстрый инвайт', active_script)
        imgui.Checkbox(u8'Быстрое увольнение', active_scriptuval)
        end
    end


    if tab == 2 then
        imgui.Text(u8'Текущая тема: '..colorList[colorListNumber[0]+1])
        if imgui.Combo(u8'Темы',colorListNumber,colorListBuffer, #colorList) then
            theme[colorListNumber[0]+1].change()
        end
    end

    if tab == 3 then
        imgui.Text(u8'Скрипт создан для упрощения игры в гетто или на каптах')
        imgui.Link("https://vk.com",u8'vk')
    end
    imgui.End()
end)



function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('ghelperr', function() WinState[0] = not WinState[0] end)
    while true do
        if active_script[0] then
            if wasKeyPressed(0x31) and not sampIsChatInputActive() and not sampIsDialogActive() then
                local result, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
                if result then
                    _, id = sampGetPlayerIdByCharHandle(ped)
                    sampSendChat('/me передал бандану')
                    wait(1000)
                    sampSendChat('/givecbook '..id..' 100')
                    wait(100)
                    sampSendChat('/invite '..id)
                    setVirtualKeyDown(13, true)
                    wait(100)
                    setVirtualKeyDown(13, false)
                    if accept and t:find("(%S+)_(%S+) принял ваше предложение вступить к вам в организацию.") then
                        sampSendChat("/giverank "..id.." 6")
                        accept = false
                    end
                end
                    accept = true
                end
            end
            wait(0)
        end
        return 1
    end
 
    function uval()
        while true do
            if active_scriptuval[0] then
            if st.bool and st.timer ~= -1 then
                timer = os.clock()-st.timer
                renderFontDrawText(font,'Нажми Y чтоб уволить '..st.nick..' или N чтоб не увольнять\nВремени на раздумья 6 сек, прошло: '..tostring(os.date("!*t", timer).sec), 500, 500, 0xFFFFFFFF)
                if timer > 5 or wasKeyPressed(0x59) or wasKeyPressed(0x4E) then
                    if wasKeyPressed(0x59) then
                        sampSendChat('/uninvite '..st.id..' ПСЖ')
                    end
                    st.bool = false
                    st.timer = -1
                end
            end
        end
    end
    wait(0)
end
    function sampev.onServerMessage(color, text)
        for k, v in pairs(words) do
            local nick, msg = text:match('(.+) говорит: (.+)')
            if nick and msg:find(v) then
                st.nick = nick
                st.id = sampGetPlayerIdByNickname(nick:gsub(' ','_'))
                st.bool = true
                st.timer = os.clock()
            end
        end
    end
    function sampGetPlayerIdByNickname(nick)
        local _, myid = sampGetPlayerIdByCharHandle(playerPed)
        if tostring(nick:gsub('%[%d+%]','')) == sampGetPlayerNickname(myid):gsub('%[%d+%]','') then return myid end
        for i = 0, sampGetMaxPlayerId() do
            if sampIsPlayerConnected(i) and sampGetPlayerNickname(i):gsub('%[%d+%]','') == nick then return i end
        end
    end

Нужно вот этот код
Код:
   function uval()
            while true do wait(0)
                if st.bool and st.timer ~= -1 then
                    timer = os.clock()-st.timer
                    renderFontDrawText(font,'Нажми Y чтоб уволить '..st.nick..' или N чтоб не увольнять\nВремени на раздумья 6 сек, прошло: '..tostring(os.date("!*t", timer).sec), 500, 500, 0xFFFFFFFF)
                    if timer > 5 or wasKeyPressed(0x59) or wasKeyPressed(0x4E) then
                        if wasKeyPressed(0x59) then
                            sampSendChat('/uninvite '..st.id..' ПСЖ')
                        end
                        st.bool = false
                        st.timer = -1
                    end
                end
            end
        end
    end
        function sampev.onServerMessage(color, text)
            for k, v in pairs(words) do
                local nick, id, msg = text:match('%[F%] (.+)%[(%d+)%]: (.+)')
                if nick and id and msg:find(v) then
                    st.nick = nick
                    st.id = id
                    st.bool = true
                    st.timer = os.clock()
                end
            end
        end

засунуть во второй чекбокс
Код:
imgui.Checkbox(u8'Быстрое увольнение', active_scriptUVAL)
 

ChаtGPT

Активный
395
96
Чтобы код выполнялся после нажатия чекбокса нужно делать проверку if imgui.Checkbox(u8'Быстрое увольнение', active_scriptUVAL) then

Попробуй так

Lua:
require 'moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local inicfg = require "inicfg"
local dlstatus = require('moonloader').download_status
local sampev = require('lib.samp.events')
local fa = require 'faIcons'
local fonts = renderCreateFont("Arial", 9, 5)
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new


local tab = 1
local WinState = imgui.new.bool()
local active_script = imgui.new.bool()
local active_scriptuval = imgui.new.bool()

local words = {'псж','psj','увал','увольте'}
local font = renderCreateFont('TimesNewRoman', 12, 5)
local st = {
    nick = '',
    bool = false,
    timer = -1,
    id = -1,
}

function imgui.Link(link, text) -- link
    text = text or link
    local tSize = imgui.CalcTextSize(text)
    local p = imgui.GetCursorScreenPos()
    local DL = imgui.GetWindowDrawList()
    local col = { 0xFFFF7700, 0xFFFF9900 }
    if imgui.InvisibleButton("##" .. link, tSize) then os.execute("explorer " .. link) end
    local color = imgui.IsItemHovered() and col[1] or col[2]
    DL:AddText(p, color, text)
    DL:AddLine(imgui.ImVec2(p.x, p.y + tSize.y), imgui.ImVec2(p.x + tSize.x, p.y + tSize.y), color)
end

imgui.OnFrame(function() return WinState[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(700, 420), imgui.Cond.Always)
    imgui.Begin(u8'Пример', WinState, imgui.WindowFlags.NoResize)
 
    imgui.BeginChild('##left', imgui.ImVec2(160, 365), true)
    for numberTab, nameTab in pairs({'Основное','Настройки','Инфа', 'Тест', 'Тест2',  'Тест3'}) do
        if imgui.Button(u8(nameTab), imgui.ImVec2(148,55)) then
            tab = numberTab
        end
    end
    imgui.EndChild()
    imgui.SameLine()
     imgui.SetCursorPos(imgui.ImVec2(170, 30))
     if imgui.BeginChild('right'..tab, imgui.ImVec2(510, 365), true) then
        -- Содержимое вкладок
        if tab == 1 then
        imgui.Checkbox(u8'Быстрый инвайт', active_script)
        imgui.Checkbox(u8'Быстрое увольнение', active_scriptuval)
        end
    end


    if tab == 2 then
        imgui.Text(u8'Текущая тема: '..colorList[colorListNumber[0]+1])
        if imgui.Combo(u8'Темы',colorListNumber,colorListBuffer, #colorList) then
            theme[colorListNumber[0]+1].change()
        end
    end

    if tab == 3 then
        imgui.Text(u8'Скрипт создан для упрощения игры в гетто или на каптах')
        imgui.Link("https://vk.com",u8'vk')
    end
    imgui.End()
end)



function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('ghelperr', function() WinState[0] = not WinState[0] end)

    while true do
        wait(0)
        if active_script[0] then
            if wasKeyPressed(0x31) and not sampIsChatInputActive() and not sampIsDialogActive() then
                local result, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
                if result then
                    _, id = sampGetPlayerIdByCharHandle(ped)
                    sampSendChat('/me передал бандану')
                    wait(1000)
                    sampSendChat('/givecbook '..id..' 100')
                    wait(100)
                    sampSendChat('/invite '..id)
                    setVirtualKeyDown(13, true)
                    wait(100)
                    setVirtualKeyDown(13, false)

                    if accept and t:find("(%S+)_(%S+) принял ваше предложение вступить к вам в организацию.") then
                        sampSendChat("/giverank "..id.." 6")
                        accept = false
                    end
                    accept = true
                end
            end       
        end

        if active_scriptuval[0] then
            if st.bool and st.timer ~= -1 then
                timer = os.clock()-st.timer
                renderFontDrawText(font,'Нажми Y чтоб уволить '..st.nick..' или N чтоб не увольнять\nВремени на раздумья 6 сек, прошло: '..tostring(os.date("!*t", timer).sec), 500, 500, 0xFFFFFFFF)
                if timer > 5 or wasKeyPressed(0x59) or wasKeyPressed(0x4E) then
                    if wasKeyPressed(0x59) then
                        sampSendChat('/uninvite '..st.id..' ПСЖ')
                    end
                    st.bool = false
                    st.timer = -1
                end
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    for k, v in pairs(words) do
        local nick, msg = text:match('(.+) говорит: (.+)')
        if nick and msg:find(v) then
            st.nick = nick
            st.id = sampGetPlayerIdByNickname(nick:gsub(' ','_'))
            st.bool = true
            st.timer = os.clock()
        end
    end
end

function sampGetPlayerIdByNickname(nick)
    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
    if tostring(nick:gsub('%[%d+%]','')) == sampGetPlayerNickname(myid):gsub('%[%d+%]','') then return myid end
    for i = 0, sampGetMaxPlayerId() do
        if sampIsPlayerConnected(i) and sampGetPlayerNickname(i):gsub('%[%d+%]','') == nick then return i end
    end
end
 
Последнее редактирование:
  • Нравится
Реакции: lightmetal

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,992
2,187
E:\gta #skayfom\moonloader\testv1.lua: in function <E:\gta #skayfom\moonloader\testv1.lua:317>
[22:54:53.719222] (error) testv1.lua: Script died due to an error. (0CB4698C)
Выделил из за чего происходит
яб тебе порекомендовал обратиться в раздел работ и услуг, потому что сам разбираться в этом ты явно не настроен

 
  • Нравится
Реакции: stach