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 -- задаём начальную позицию второго...
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
После чего это началось?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
создания mimgui окнаПосле чего это началось?
Удали его и все станет нормальнопосле
создания mimgui окна
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
странно, раньше работало)
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Как я понял - ты хотел сделать плавное появление окна. Вот пофикшеный код с анимацией появления/исчезания.
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
Тогда зачем тебе в скрипте код на плавное появление ImGui окна? Который занимает половину коданет, я просто хотел сделать mimgui
это код для плавной анимации радиобаттонТогда зачем тебе в скрипте код на плавное появление ImGui окна? Который занимает половину кода
это код для плавной анимации радиобаттон
а, я просто вырезал код с моего скрипта, которому 2-4 недели, я в него не заходил с тех порПосмотреть вложение 204572
Вот это RadioButton
Посмотреть вложение 204573
Вот это код взят из этой темы: https://www.blast.hk/threads/111268/