Скрипт умер, а ошибку забыл написать...

.KOHTOP.

Активный
Автор темы
226
35
Версия MoonLoader
.027.0-preview
moonloader:
[22:16:56.005921] (error)    123.lua: attempt to call a nil value
stack traceback:
[22:16:56.005921] (error)    123.lua: Script died due to an error. (01B7C3EC)
 
  • Bug
Реакции: Vespan
Решение
Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)

local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго...

.KOHTOP.

Активный
Автор темы
226
35
Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)

local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго окошка
local ui_meta = {
    __index = function(self, v)
        if v == "switch" then
            local switch = function()
                if self.process and self.process:status() ~= "dead" then
                    return false -- // Предыдущая анимация ещё не завершилась!
                end
                self.timer = os.clock()
                self.state = not self.state

                self.process = lua_thread.create(function()
                    local bringFloatTo = function(from, to, start_time, duration)
                        local timer = os.clock() - start_time
                        if timer >= 0.00 and timer <= duration then
                            local count = timer / (duration / 100)
                            return count * ((to - from) / 100)
                        end
                        return (timer > duration) and to or from
                    end

                    while true do wait(0)
                        local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
                        self.alpha = self.state and a or 1.00 - a
                        if a == 1.00 then break end
                    end
                end)
                return true -- // Состояние окна изменено!
            end
            return switch
        end
 
        if v == "alpha" then
            return self.state and 1.00 or 0.00
        end
    end
}


function main()
    while not isSampAvailable() do wait(0) end
        

    sampRegisterChatCommand('bot', cmd_bot)
    sampRegisterChatCommand('bot1', cmd_bot1)
    while true do
        wait(500)

        if isKeyJustPressed(VK_F) then
            start_menu[0] = not start_menu[0]
        end

         --[[     if changepos then -- редактирование позиции окошка
            posX, posY = getCursorPos()
            if isKeyJustPressed(1) then -- если нажата ЛКМ, то сохраняем позицию
                changepos = false
                return posX,posY
            end
        end
--]]

        if isKeyJustPressed(VK_F) then
            WinState[0] = not WinState[0]
        end

        if isKeyJustPressed(VK_F4) then
            if lbot == 0 then
                bot = 1
                lbot = 1
            else
                bot = 0
                lbot = 0
            end
        end
        if bot == 1 then
            function sampev.onShowTextDraw(id, data)
                if id == 2075 or id == 2073 then
                    lua_thread.create(function ()
                        wait(1500)
                        sampSendClickTextdraw(id)
                    end)
                end
            end
            if sampIsCursorActive() then
                
            else
                setVirtualKeyDown(18, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(18, false) -- отпускание 13 клавиши (Enter)
                wait(500)
                setVirtualKeyDown(13, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(13, false) -- отпускание 13 клавиши (Enter)
            end
        end
    end
end

function cmd_bot(arg)
    if arg == '1' then
        bot = 1
    elseif arg == '0' then
        bot = 0
    end
end

function cmd_bot(arg)
    start_menu[0] = not start_menu[0]
end

function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX( width / 2 - calc.x / 2 )
    imgui.Text(text)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    sampAddChatMessage(id, -1) -- 12124
    if id == 12124 then
        if pila == '1' then
            drova = drova + 1
        elseif pila == '2' then
            drova = drova + 4
        end
    end
end

imgui.OnFrame(function() return menu[0] and not isGamePaused() end,
function()
    imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
    imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
    imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
    imgui.CenterText(u8'Бот на лесопилку')
    imgui.Separator()
    imgui.Text(u8'Заработано дерева: ' .. drova)
    imgui.End()
end).HideCursor = true

imgui.OnFrame(function() return start_menu[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.Begin('Window One', WinState, imgui.WindowFlags.NoResize)
        if imgui.Button('Open new window') then -- вкл/выкл второе окошко
            menu[0] = not menu[0]
        end
        if imgui.ToggleButton(u8"", "", checkpila) then
            pila = '2'
        end
        if imgui.IsItemHovered() then
            imgui.BeginTooltip()
            imgui.Text(u8'Какая у вас пила\nВключен - супер пила (4 за раз)\nВыключено - обычная пила (1 за раз)')
            imgui.EndTooltip()
        end
        imgui.End()
    end
)

function imgui.ToggleButton(label, label_true, bool, a_speed)
    local p  = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
 
    local bebrochka = false

    local label      = label or ""                          -- Текст false
    local label_true = label_true or ""                     -- Текст true
    local h          = imgui.GetTextLineHeightWithSpacing() -- Высота кнопки
    local w          = h * 1.7                              -- Ширина кнопки
    local r          = h / 2                                -- Радиус кружка
    local s          = a_speed or 0.2                       -- Скорость анимации
 
    local function ImSaturate(f)
        return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
    end
 
    local x_begin = bool[0] and 1.0 or 0.0
    local t_begin = bool[0] and 0.0 or 1.0
 
    if LastTime == nil then
        LastTime = {}
    end
    if LastActive == nil then
        LastActive = {}
    end
 
    if imgui.InvisibleButton(label, imgui.ImVec2(w, h)) then
        bool[0] = not bool[0]
        LastTime[label] = os.clock()
        LastActive[label] = true
        bebrochka = true
    end

    if LastActive[label] then
        local time = os.clock() - LastTime[label]
        if time <= s then
            local anim = ImSaturate(time / s)
            x_begin = bool[0] and anim or 1.0 - anim
            t_begin = bool[0] and 1.0 - anim or anim
        else
            LastActive[label] = false
        end
    end
 
    local bg_color = imgui.ImVec4(x_begin * 0.13, x_begin * 0.9, x_begin * 0.13, imgui.IsItemHovered(0) and 0.7 or 0.9) -- Цвет прямоугольника
    local t_color  = imgui.ImVec4(1, 1, 1, x_begin) -- Цвет текста при false
    local t2_color = imgui.ImVec4(1, 1, 1, t_begin) -- Цвет текста при true
 
    dl:AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + w, p.y + h), imgui.GetColorU32Vec4(bg_color), r)
    dl:AddCircleFilled(imgui.ImVec2(p.x + r + x_begin * (w - r * 2), p.y + r), t_begin < 0.5 and x_begin * r or t_begin * r, imgui.GetColorU32Vec4(imgui.ImVec4(0.9, 0.9, 0.9, 1.0)), r + 5)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t_color), label_true)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t2_color), label)
    return bebrochka
end
 
  • Bug
Реакции: Lance_Sterling

Lance_Sterling

Известный
956
336
Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)

local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго окошка
local ui_meta = {
    __index = function(self, v)
        if v == "switch" then
            local switch = function()
                if self.process and self.process:status() ~= "dead" then
                    return false -- // Предыдущая анимация ещё не завершилась!
                end
                self.timer = os.clock()
                self.state = not self.state

                self.process = lua_thread.create(function()
                    local bringFloatTo = function(from, to, start_time, duration)
                        local timer = os.clock() - start_time
                        if timer >= 0.00 and timer <= duration then
                            local count = timer / (duration / 100)
                            return count * ((to - from) / 100)
                        end
                        return (timer > duration) and to or from
                    end

                    while true do wait(0)
                        local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
                        self.alpha = self.state and a or 1.00 - a
                        if a == 1.00 then break end
                    end
                end)
                return true -- // Состояние окна изменено!
            end
            return switch
        end
 
        if v == "alpha" then
            return self.state and 1.00 or 0.00
        end
    end
}


function main()
    while not isSampAvailable() do wait(0) end
       

    sampRegisterChatCommand('bot', cmd_bot)
    sampRegisterChatCommand('bot1', cmd_bot1)
    while true do
        wait(500)

        if isKeyJustPressed(VK_F) then
            start_menu[0] = not start_menu[0]
        end

         --[[     if changepos then -- редактирование позиции окошка
            posX, posY = getCursorPos()
            if isKeyJustPressed(1) then -- если нажата ЛКМ, то сохраняем позицию
                changepos = false
                return posX,posY
            end
        end
--]]

        if isKeyJustPressed(VK_F) then
            WinState[0] = not WinState[0]
        end

        if isKeyJustPressed(VK_F4) then
            if lbot == 0 then
                bot = 1
                lbot = 1
            else
                bot = 0
                lbot = 0
            end
        end
        if bot == 1 then
            function sampev.onShowTextDraw(id, data)
                if id == 2075 or id == 2073 then
                    lua_thread.create(function ()
                        wait(1500)
                        sampSendClickTextdraw(id)
                    end)
                end
            end
            if sampIsCursorActive() then
               
            else
                setVirtualKeyDown(18, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(18, false) -- отпускание 13 клавиши (Enter)
                wait(500)
                setVirtualKeyDown(13, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(13, false) -- отпускание 13 клавиши (Enter)
            end
        end
    end
end

function cmd_bot(arg)
    if arg == '1' then
        bot = 1
    elseif arg == '0' then
        bot = 0
    end
end

function cmd_bot(arg)
    start_menu[0] = not start_menu[0]
end

function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX( width / 2 - calc.x / 2 )
    imgui.Text(text)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    sampAddChatMessage(id, -1) -- 12124
    if id == 12124 then
        if pila == '1' then
            drova = drova + 1
        elseif pila == '2' then
            drova = drova + 4
        end
    end
end

imgui.OnFrame(function() return menu[0] and not isGamePaused() end,
function()
    imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
    imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
    imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
    imgui.CenterText(u8'Бот на лесопилку')
    imgui.Separator()
    imgui.Text(u8'Заработано дерева: ' .. drova)
    imgui.End()
end).HideCursor = true

imgui.OnFrame(function() return start_menu[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.Begin('Window One', WinState, imgui.WindowFlags.NoResize)
        if imgui.Button('Open new window') then -- вкл/выкл второе окошко
            menu[0] = not menu[0]
        end
        if imgui.ToggleButton(u8"", "", checkpila) then
            pila = '2'
        end
        if imgui.IsItemHovered() then
            imgui.BeginTooltip()
            imgui.Text(u8'Какая у вас пила\nВключен - супер пила (4 за раз)\nВыключено - обычная пила (1 за раз)')
            imgui.EndTooltip()
        end
        imgui.End()
    end
)

function imgui.ToggleButton(label, label_true, bool, a_speed)
    local p  = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
 
    local bebrochka = false

    local label      = label or ""                          -- Текст false
    local label_true = label_true or ""                     -- Текст true
    local h          = imgui.GetTextLineHeightWithSpacing() -- Высота кнопки
    local w          = h * 1.7                              -- Ширина кнопки
    local r          = h / 2                                -- Радиус кружка
    local s          = a_speed or 0.2                       -- Скорость анимации
 
    local function ImSaturate(f)
        return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
    end
 
    local x_begin = bool[0] and 1.0 or 0.0
    local t_begin = bool[0] and 0.0 or 1.0
 
    if LastTime == nil then
        LastTime = {}
    end
    if LastActive == nil then
        LastActive = {}
    end
 
    if imgui.InvisibleButton(label, imgui.ImVec2(w, h)) then
        bool[0] = not bool[0]
        LastTime[label] = os.clock()
        LastActive[label] = true
        bebrochka = true
    end

    if LastActive[label] then
        local time = os.clock() - LastTime[label]
        if time <= s then
            local anim = ImSaturate(time / s)
            x_begin = bool[0] and anim or 1.0 - anim
            t_begin = bool[0] and 1.0 - anim or anim
        else
            LastActive[label] = false
        end
    end
 
    local bg_color = imgui.ImVec4(x_begin * 0.13, x_begin * 0.9, x_begin * 0.13, imgui.IsItemHovered(0) and 0.7 or 0.9) -- Цвет прямоугольника
    local t_color  = imgui.ImVec4(1, 1, 1, x_begin) -- Цвет текста при false
    local t2_color = imgui.ImVec4(1, 1, 1, t_begin) -- Цвет текста при true
 
    dl:AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + w, p.y + h), imgui.GetColorU32Vec4(bg_color), r)
    dl:AddCircleFilled(imgui.ImVec2(p.x + r + x_begin * (w - r * 2), p.y + r), t_begin < 0.5 and x_begin * r or t_begin * r, imgui.GetColorU32Vec4(imgui.ImVec4(0.9, 0.9, 0.9, 1.0)), r + 5)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t_color), label_true)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t2_color), label)
    return bebrochka
end
После чего это началось?
 

Lance_Sterling

Известный
956
336
  • Bug
Реакции: ARMOR

Дядя Энрик.

Активный
336
81
Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)

local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго окошка
local ui_meta = {
    __index = function(self, v)
        if v == "switch" then
            local switch = function()
                if self.process and self.process:status() ~= "dead" then
                    return false -- // Предыдущая анимация ещё не завершилась!
                end
                self.timer = os.clock()
                self.state = not self.state

                self.process = lua_thread.create(function()
                    local bringFloatTo = function(from, to, start_time, duration)
                        local timer = os.clock() - start_time
                        if timer >= 0.00 and timer <= duration then
                            local count = timer / (duration / 100)
                            return count * ((to - from) / 100)
                        end
                        return (timer > duration) and to or from
                    end

                    while true do wait(0)
                        local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
                        self.alpha = self.state and a or 1.00 - a
                        if a == 1.00 then break end
                    end
                end)
                return true -- // Состояние окна изменено!
            end
            return switch
        end
 
        if v == "alpha" then
            return self.state and 1.00 or 0.00
        end
    end
}


function main()
    while not isSampAvailable() do wait(0) end
       

    sampRegisterChatCommand('bot', cmd_bot)
    sampRegisterChatCommand('bot1', cmd_bot1)
    while true do
        wait(500)

        if isKeyJustPressed(VK_F) then
            start_menu[0] = not start_menu[0]
        end

         --[[     if changepos then -- редактирование позиции окошка
            posX, posY = getCursorPos()
            if isKeyJustPressed(1) then -- если нажата ЛКМ, то сохраняем позицию
                changepos = false
                return posX,posY
            end
        end
--]]

        if isKeyJustPressed(VK_F) then
            WinState[0] = not WinState[0]
        end

        if isKeyJustPressed(VK_F4) then
            if lbot == 0 then
                bot = 1
                lbot = 1
            else
                bot = 0
                lbot = 0
            end
        end
        if bot == 1 then
            function sampev.onShowTextDraw(id, data)
                if id == 2075 or id == 2073 then
                    lua_thread.create(function ()
                        wait(1500)
                        sampSendClickTextdraw(id)
                    end)
                end
            end
            if sampIsCursorActive() then
               
            else
                setVirtualKeyDown(18, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(18, false) -- отпускание 13 клавиши (Enter)
                wait(500)
                setVirtualKeyDown(13, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(13, false) -- отпускание 13 клавиши (Enter)
            end
        end
    end
end

function cmd_bot(arg)
    if arg == '1' then
        bot = 1
    elseif arg == '0' then
        bot = 0
    end
end

function cmd_bot(arg)
    start_menu[0] = not start_menu[0]
end

function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX( width / 2 - calc.x / 2 )
    imgui.Text(text)
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    sampAddChatMessage(id, -1) -- 12124
    if id == 12124 then
        if pila == '1' then
            drova = drova + 1
        elseif pila == '2' then
            drova = drova + 4
        end
    end
end

imgui.OnFrame(function() return menu[0] and not isGamePaused() end,
function()
    imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
    imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
    imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
    imgui.CenterText(u8'Бот на лесопилку')
    imgui.Separator()
    imgui.Text(u8'Заработано дерева: ' .. drova)
    imgui.End()
end).HideCursor = true

imgui.OnFrame(function() return start_menu[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.Begin('Window One', WinState, imgui.WindowFlags.NoResize)
        if imgui.Button('Open new window') then -- вкл/выкл второе окошко
            menu[0] = not menu[0]
        end
        if imgui.ToggleButton(u8"", "", checkpila) then
            pila = '2'
        end
        if imgui.IsItemHovered() then
            imgui.BeginTooltip()
            imgui.Text(u8'Какая у вас пила\nВключен - супер пила (4 за раз)\nВыключено - обычная пила (1 за раз)')
            imgui.EndTooltip()
        end
        imgui.End()
    end
)

function imgui.ToggleButton(label, label_true, bool, a_speed)
    local p  = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
 
    local bebrochka = false

    local label      = label or ""                          -- Текст false
    local label_true = label_true or ""                     -- Текст true
    local h          = imgui.GetTextLineHeightWithSpacing() -- Высота кнопки
    local w          = h * 1.7                              -- Ширина кнопки
    local r          = h / 2                                -- Радиус кружка
    local s          = a_speed or 0.2                       -- Скорость анимации
 
    local function ImSaturate(f)
        return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
    end
 
    local x_begin = bool[0] and 1.0 or 0.0
    local t_begin = bool[0] and 0.0 or 1.0
 
    if LastTime == nil then
        LastTime = {}
    end
    if LastActive == nil then
        LastActive = {}
    end
 
    if imgui.InvisibleButton(label, imgui.ImVec2(w, h)) then
        bool[0] = not bool[0]
        LastTime[label] = os.clock()
        LastActive[label] = true
        bebrochka = true
    end

    if LastActive[label] then
        local time = os.clock() - LastTime[label]
        if time <= s then
            local anim = ImSaturate(time / s)
            x_begin = bool[0] and anim or 1.0 - anim
            t_begin = bool[0] and 1.0 - anim or anim
        else
            LastActive[label] = false
        end
    end
 
    local bg_color = imgui.ImVec4(x_begin * 0.13, x_begin * 0.9, x_begin * 0.13, imgui.IsItemHovered(0) and 0.7 or 0.9) -- Цвет прямоугольника
    local t_color  = imgui.ImVec4(1, 1, 1, x_begin) -- Цвет текста при false
    local t2_color = imgui.ImVec4(1, 1, 1, t_begin) -- Цвет текста при true
 
    dl:AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + w, p.y + h), imgui.GetColorU32Vec4(bg_color), r)
    dl:AddCircleFilled(imgui.ImVec2(p.x + r + x_begin * (w - r * 2), p.y + r), t_begin < 0.5 and x_begin * r or t_begin * r, imgui.GetColorU32Vec4(imgui.ImVec4(0.9, 0.9, 0.9, 1.0)), r + 5)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t_color), label_true)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t2_color), label)
    return bebrochka
end
1686660377731.png
 

ARMOR

Модератор по раксампу
Модератор
4,936
6,733
Как я понял - ты хотел сделать плавное появление окна. Вот пофикшеный код с анимацией появления/исчезания.

Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)
local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго окошка
local ui_meta = {
    __index = function(self, v)
        if v == "switch" then
            local switch = function()
                if self.process and self.process:status() ~= "dead" then
                    return false -- // Предыдущая анимация ещё не завершилась!
                end
                self.timer = os.clock()
                self.state = not self.state
                self.process = lua_thread.create(function()
                    local bringFloatTo = function(from, to, start_time, duration)
                        local timer = os.clock() - start_time
                        if timer >= 0.00 and timer <= duration then
                            local count = timer / (duration / 100)
                            return count * ((to - from) / 100)
                        end
                        return (timer > duration) and to or from
                    end
                    while true do wait(0)
                        local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
                        self.alpha = self.state and a or 1.00 - a
                        if a == 1.00 then break end
                    end
                end)
                return true -- // Состояние окна изменено!
            end
            return switch
        end
 
        if v == "alpha" then
            return self.state and 1.00 or 0.00
        end
    end
}
local bot = { state = false, duration = 0.5 }
setmetatable(bot, ui_meta)
local bot1 = { state = false, duration = 0.5 }
setmetatable(bot1, ui_meta)
function main()
    while not isSampInit() do wait(0) end
       
    sampRegisterChatCommand('bot', bot.switch)
    sampRegisterChatCommand('bot1', bot1.switch)
    while true do
        wait(500)
        if isKeyJustPressed(VK_F) then
            start_menu[0] = not start_menu[0]
        end
         --[[     if changepos then -- редактирование позиции окошка
            posX, posY = getCursorPos()
            if isKeyJustPressed(1) then -- если нажата ЛКМ, то сохраняем позицию
                changepos = false
                return posX,posY
            end
        end
--]]
        if isKeyJustPressed(VK_F) then
            WinState[0] = not WinState[0]
        end
        if isKeyJustPressed(VK_F4) then
            if lbot == 0 then
                bot = 1
                lbot = 1
            else
                bot = 0
                lbot = 0
            end
        end
        if bot == 1 then
            function sampev.onShowTextDraw(id, data)
                if id == 2075 or id == 2073 then
                    lua_thread.create(function ()
                        wait(1500)
                        sampSendClickTextdraw(id)
                    end)
                end
            end
            if sampIsCursorActive() then
               
            else
                setVirtualKeyDown(18, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(18, false) -- отпускание 13 клавиши (Enter)
                wait(500)
                setVirtualKeyDown(13, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(13, false) -- отпускание 13 клавиши (Enter)
            end
        end
    end
end
function cmd_bot(arg)
    if arg == '1' then
        bot = 1
    elseif arg == '0' then
        bot = 0
    end
end
function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX( width / 2 - calc.x / 2 )
    imgui.Text(text)
end
local bot_frame = imgui.OnFrame(
    function() return bot.alpha > 0.0 end,
    function(self)
        self.HideCursor = not bot.state 
        imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
        imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
        imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, bot.alpha)
        imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
            imgui.CenterText(u8'Бот на лесопилку')
            imgui.Separator()
            imgui.Text(u8'Заработано дерева: ' .. drova)
        imgui.End()
        imgui.PopStyleVar()
    end
)
imgui.OnFrame(function() return menu[0] and not isGamePaused() end,
function()
    imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
    imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
    imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
    imgui.CenterText(u8'Бот на лесопилку')
    imgui.Separator()
    imgui.Text(u8'Заработано дерева: ' .. drova)
    imgui.End()
end).HideCursor = true

local bot1_frame = imgui.OnFrame(
    function() return bot1.alpha > 0.0 end,
    function(self)
        self.HideCursor = not bot1.state 
        imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, bot1.alpha)
        imgui.Begin('Window One', WinState, imgui.WindowFlags.NoResize)
        if imgui.Button('Open new window') then -- вкл/выкл второе окошко
            bot.switch()
        end
        if imgui.ToggleButton(u8"", "", checkpila) then
            pila = '2'
        end
        if imgui.IsItemHovered() then
            imgui.BeginTooltip()
            imgui.Text(u8'Какая у вас пила\nВключен - супер пила (4 за раз)\nВыключено - обычная пила (1 за раз)')
            imgui.EndTooltip()
        end
        imgui.End()
        imgui.PopStyleVar()
    end
)
function sampev.onShowDialog(id, style, title, button1, button2, text)
    sampAddChatMessage(id, -1) -- 12124
    if id == 12124 then
        if pila == '1' then
            drova = drova + 1
        elseif pila == '2' then
            drova = drova + 4
        end
    end
end
function imgui.ToggleButton(label, label_true, bool, a_speed)
    local p  = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
 
    local bebrochka = false
    local label      = label or ""                          -- Текст false
    local label_true = label_true or ""                     -- Текст true
    local h          = imgui.GetTextLineHeightWithSpacing() -- Высота кнопки
    local w          = h * 1.7                              -- Ширина кнопки
    local r          = h / 2                                -- Радиус кружка
    local s          = a_speed or 0.2                       -- Скорость анимации
 
    local function ImSaturate(f)
        return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
    end
 
    local x_begin = bool[0] and 1.0 or 0.0
    local t_begin = bool[0] and 0.0 or 1.0
 
    if LastTime == nil then
        LastTime = {}
    end
    if LastActive == nil then
        LastActive = {}
    end
 
    if imgui.InvisibleButton(label, imgui.ImVec2(w, h)) then
        bool[0] = not bool[0]
        LastTime[label] = os.clock()
        LastActive[label] = true
        bebrochka = true
    end
    if LastActive[label] then
        local time = os.clock() - LastTime[label]
        if time <= s then
            local anim = ImSaturate(time / s)
            x_begin = bool[0] and anim or 1.0 - anim
            t_begin = bool[0] and 1.0 - anim or anim
        else
            LastActive[label] = false
        end
    end
 
    local bg_color = imgui.ImVec4(x_begin * 0.13, x_begin * 0.9, x_begin * 0.13, imgui.IsItemHovered(0) and 0.7 or 0.9) -- Цвет прямоугольника
    local t_color  = imgui.ImVec4(1, 1, 1, x_begin) -- Цвет текста при false
    local t2_color = imgui.ImVec4(1, 1, 1, t_begin) -- Цвет текста при true
 
    dl:AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + w, p.y + h), imgui.GetColorU32Vec4(bg_color), r)
    dl:AddCircleFilled(imgui.ImVec2(p.x + r + x_begin * (w - r * 2), p.y + r), t_begin < 0.5 and x_begin * r or t_begin * r, imgui.GetColorU32Vec4(imgui.ImVec4(0.9, 0.9, 0.9, 1.0)), r + 5)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t_color), label_true)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t2_color), label)
    return bebrochka
end
 

.KOHTOP.

Активный
Автор темы
226
35
Как я понял - ты хотел сделать плавное появление окна. Вот пофикшеный код с анимацией появления/исчезания.

Lua:
require('lib.moonloader')
local sampev = require('lib.samp.events')
local vkeys = require 'vkeys'
local fa = require 'fAwesome6'
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна
local bot = 0
local bot1 = 1
local heal = 0
local menu = 0
local lbot = 0
local posX = 500
local posY = 500
local pila = '1'
local drova = 0
local checkpila = new.bool(false)
local menu, start_menu = imgui.new.bool(), imgui.new.bool()
local changepos = false -- статус редактирования позиции окошка
local posX, posY = 500, 500 -- задаём начальную позицию второго окошка
local ui_meta = {
    __index = function(self, v)
        if v == "switch" then
            local switch = function()
                if self.process and self.process:status() ~= "dead" then
                    return false -- // Предыдущая анимация ещё не завершилась!
                end
                self.timer = os.clock()
                self.state = not self.state
                self.process = lua_thread.create(function()
                    local bringFloatTo = function(from, to, start_time, duration)
                        local timer = os.clock() - start_time
                        if timer >= 0.00 and timer <= duration then
                            local count = timer / (duration / 100)
                            return count * ((to - from) / 100)
                        end
                        return (timer > duration) and to or from
                    end
                    while true do wait(0)
                        local a = bringFloatTo(0.00, 1.00, self.timer, self.duration)
                        self.alpha = self.state and a or 1.00 - a
                        if a == 1.00 then break end
                    end
                end)
                return true -- // Состояние окна изменено!
            end
            return switch
        end
 
        if v == "alpha" then
            return self.state and 1.00 or 0.00
        end
    end
}
local bot = { state = false, duration = 0.5 }
setmetatable(bot, ui_meta)
local bot1 = { state = false, duration = 0.5 }
setmetatable(bot1, ui_meta)
function main()
    while not isSampInit() do wait(0) end
      
    sampRegisterChatCommand('bot', bot.switch)
    sampRegisterChatCommand('bot1', bot1.switch)
    while true do
        wait(500)
        if isKeyJustPressed(VK_F) then
            start_menu[0] = not start_menu[0]
        end
         --[[     if changepos then -- редактирование позиции окошка
            posX, posY = getCursorPos()
            if isKeyJustPressed(1) then -- если нажата ЛКМ, то сохраняем позицию
                changepos = false
                return posX,posY
            end
        end
--]]
        if isKeyJustPressed(VK_F) then
            WinState[0] = not WinState[0]
        end
        if isKeyJustPressed(VK_F4) then
            if lbot == 0 then
                bot = 1
                lbot = 1
            else
                bot = 0
                lbot = 0
            end
        end
        if bot == 1 then
            function sampev.onShowTextDraw(id, data)
                if id == 2075 or id == 2073 then
                    lua_thread.create(function ()
                        wait(1500)
                        sampSendClickTextdraw(id)
                    end)
                end
            end
            if sampIsCursorActive() then
              
            else
                setVirtualKeyDown(18, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(18, false) -- отпускание 13 клавиши (Enter)
                wait(500)
                setVirtualKeyDown(13, true) -- зажатие 13 клавиши (Enter)
                wait(500) -- задержка на секунду
                setVirtualKeyDown(13, false) -- отпускание 13 клавиши (Enter)
            end
        end
    end
end
function cmd_bot(arg)
    if arg == '1' then
        bot = 1
    elseif arg == '0' then
        bot = 0
    end
end
function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX( width / 2 - calc.x / 2 )
    imgui.Text(text)
end
local bot_frame = imgui.OnFrame(
    function() return bot.alpha > 0.0 end,
    function(self)
        self.HideCursor = not bot.state
        imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
        imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
        imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, bot.alpha)
        imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
            imgui.CenterText(u8'Бот на лесопилку')
            imgui.Separator()
            imgui.Text(u8'Заработано дерева: ' .. drova)
        imgui.End()
        imgui.PopStyleVar()
    end
)
imgui.OnFrame(function() return menu[0] and not isGamePaused() end,
function()
    imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.Always, imgui.ImVec2(1, 1))
    imgui.SetNextWindowSize(imgui.ImVec2(255, 90), imgui.Cond.Always)
    imgui.Begin('Window Two', show, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs)
    imgui.CenterText(u8'Бот на лесопилку')
    imgui.Separator()
    imgui.Text(u8'Заработано дерева: ' .. drova)
    imgui.End()
end).HideCursor = true

local bot1_frame = imgui.OnFrame(
    function() return bot1.alpha > 0.0 end,
    function(self)
        self.HideCursor = not bot1.state
        imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always)
        imgui.PushStyleVarFloat(imgui.StyleVar.Alpha, bot1.alpha)
        imgui.Begin('Window One', WinState, imgui.WindowFlags.NoResize)
        if imgui.Button('Open new window') then -- вкл/выкл второе окошко
            bot.switch()
        end
        if imgui.ToggleButton(u8"", "", checkpila) then
            pila = '2'
        end
        if imgui.IsItemHovered() then
            imgui.BeginTooltip()
            imgui.Text(u8'Какая у вас пила\nВключен - супер пила (4 за раз)\nВыключено - обычная пила (1 за раз)')
            imgui.EndTooltip()
        end
        imgui.End()
        imgui.PopStyleVar()
    end
)
function sampev.onShowDialog(id, style, title, button1, button2, text)
    sampAddChatMessage(id, -1) -- 12124
    if id == 12124 then
        if pila == '1' then
            drova = drova + 1
        elseif pila == '2' then
            drova = drova + 4
        end
    end
end
function imgui.ToggleButton(label, label_true, bool, a_speed)
    local p  = imgui.GetCursorScreenPos()
    local dl = imgui.GetWindowDrawList()
 
    local bebrochka = false
    local label      = label or ""                          -- Текст false
    local label_true = label_true or ""                     -- Текст true
    local h          = imgui.GetTextLineHeightWithSpacing() -- Высота кнопки
    local w          = h * 1.7                              -- Ширина кнопки
    local r          = h / 2                                -- Радиус кружка
    local s          = a_speed or 0.2                       -- Скорость анимации
 
    local function ImSaturate(f)
        return f < 0.0 and 0.0 or (f > 1.0 and 1.0 or f)
    end
 
    local x_begin = bool[0] and 1.0 or 0.0
    local t_begin = bool[0] and 0.0 or 1.0
 
    if LastTime == nil then
        LastTime = {}
    end
    if LastActive == nil then
        LastActive = {}
    end
 
    if imgui.InvisibleButton(label, imgui.ImVec2(w, h)) then
        bool[0] = not bool[0]
        LastTime[label] = os.clock()
        LastActive[label] = true
        bebrochka = true
    end
    if LastActive[label] then
        local time = os.clock() - LastTime[label]
        if time <= s then
            local anim = ImSaturate(time / s)
            x_begin = bool[0] and anim or 1.0 - anim
            t_begin = bool[0] and 1.0 - anim or anim
        else
            LastActive[label] = false
        end
    end
 
    local bg_color = imgui.ImVec4(x_begin * 0.13, x_begin * 0.9, x_begin * 0.13, imgui.IsItemHovered(0) and 0.7 or 0.9) -- Цвет прямоугольника
    local t_color  = imgui.ImVec4(1, 1, 1, x_begin) -- Цвет текста при false
    local t2_color = imgui.ImVec4(1, 1, 1, t_begin) -- Цвет текста при true
 
    dl:AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + w, p.y + h), imgui.GetColorU32Vec4(bg_color), r)
    dl:AddCircleFilled(imgui.ImVec2(p.x + r + x_begin * (w - r * 2), p.y + r), t_begin < 0.5 and x_begin * r or t_begin * r, imgui.GetColorU32Vec4(imgui.ImVec4(0.9, 0.9, 0.9, 1.0)), r + 5)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t_color), label_true)
    dl:AddText(imgui.ImVec2(p.x + w + r, p.y + r - (r / 2) - (imgui.CalcTextSize(label).y / 4)), imgui.GetColorU32Vec4(t2_color), label)
    return bebrochka
end
нет, я просто хотел сделать mimgui
 
  • Вау
Реакции: ARMOR

.KOHTOP.

Активный
Автор темы
226
35
  • Bug
Реакции: Hero_0_, chromiusj и ARMOR

.KOHTOP.

Активный
Автор темы
226
35
  • Ха-ха
Реакции: ARMOR