Как оптмизировать код и лучше сделать настройку цветов скрита? ну и скорее без монета
set_color_script:
local imgui = require 'mimgui'
local encoding = require 'encoding'
local monet = require 'MoonMonet'
local bit = require 'bit'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local renderColorEditor = imgui.new.bool(false)
local scriptColor = imgui.new.float[3](1.0, 1.0, 1.0)
local palette = {}
local function convertDecimalToRGBA(u32, alpha)
local a = bit.band(bit.rshift(u32, 24), 0xFF) / 0xFF
local r = bit.band(bit.rshift(u32, 16), 0xFF) / 0xFF
local g = bit.band(bit.rshift(u32, 8), 0xFF) / 0xFF
local b = bit.band(u32, 0xFF) / 0xFF
return imgui.ImVec4(r, g, b, a * (alpha or 1.0))
end
local function theme(color, chroma_multiplier, accurate_shades)
imgui.SwitchContext()
palette = monet.buildColors(color, chroma_multiplier, accurate_shades)
local style = imgui.GetStyle()
local colors = style.Colors
local flags = imgui.Col
style.WindowPadding = imgui.ImVec2(5, 5)
style.FramePadding = imgui.ImVec2(5, 5)
style.ItemSpacing = imgui.ImVec2(5, 5)
style.ItemInnerSpacing = imgui.ImVec2(5, 5)
style.TouchExtraPadding = imgui.ImVec2(0, 0)
style.IndentSpacing = 20
style.ScrollbarSize = 12.5
style.GrabMinSize = 10
style.WindowBorderSize = 0
style.ChildBorderSize = 1
style.PopupBorderSize = 1
style.FrameBorderSize = 0
style.TabBorderSize = 0
style.WindowRounding = 3
style.ChildRounding = 3
style.PopupRounding = 3
style.FrameRounding = 3
style.ScrollbarRounding = 1.5
style.GrabRounding = 3
style.TabRounding = 3
style.WindowTitleAlign = imgui.ImVec2(0.50, 0.50)
colors[flags.Text] = convertDecimalToRGBA(palette.neutral1.color_50)
colors[flags.TextDisabled] = convertDecimalToRGBA(palette.neutral1.color_400)
colors[flags.WindowBg] = convertDecimalToRGBA(palette.accent2.color_900)
colors[flags.ChildBg] = convertDecimalToRGBA(palette.accent2.color_900)
colors[flags.PopupBg] = convertDecimalToRGBA(palette.accent2.color_900)
colors[flags.Border] = convertDecimalToRGBA(palette.accent2.color_300)
colors[flags.BorderShadow] = imgui.ImVec4(0, 0, 0, 0)
colors[flags.FrameBg] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.FrameBgHovered] = convertDecimalToRGBA(palette.accent1.color_500)
colors[flags.FrameBgActive] = convertDecimalToRGBA(palette.accent1.color_400)
colors[flags.TitleBgActive] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.ScrollbarBg] = convertDecimalToRGBA(palette.accent2.color_800)
colors[flags.ScrollbarGrab] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.ScrollbarGrabHovered] = convertDecimalToRGBA(palette.accent1.color_500)
colors[flags.ScrollbarGrabActive] = convertDecimalToRGBA(palette.accent1.color_400)
colors[flags.CheckMark] = convertDecimalToRGBA(palette.neutral1.color_50)
colors[flags.SliderGrab] = convertDecimalToRGBA(palette.accent2.color_400)
colors[flags.SliderGrabActive] = convertDecimalToRGBA(palette.accent2.color_300)
colors[flags.Button] = convertDecimalToRGBA(palette.accent2.color_700)
colors[flags.ButtonHovered] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.ButtonActive] = convertDecimalToRGBA(palette.accent1.color_500)
colors[flags.Header] = convertDecimalToRGBA(palette.accent1.color_800)
colors[flags.HeaderHovered] = convertDecimalToRGBA(palette.accent1.color_700)
colors[flags.HeaderActive] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.Separator] = convertDecimalToRGBA(palette.accent2.color_200)
colors[flags.SeparatorHovered] = convertDecimalToRGBA(palette.accent2.color_100)
colors[flags.SeparatorActive] = convertDecimalToRGBA(palette.accent2.color_50)
colors[flags.ResizeGrip] = convertDecimalToRGBA(palette.accent2.color_900)
colors[flags.ResizeGripHovered] = convertDecimalToRGBA(palette.accent2.color_800)
colors[flags.ResizeGripActive] = convertDecimalToRGBA(palette.accent2.color_700)
colors[flags.Tab] = convertDecimalToRGBA(palette.accent1.color_700)
colors[flags.TabHovered] = convertDecimalToRGBA(palette.accent1.color_600)
colors[flags.TabActive] = convertDecimalToRGBA(palette.accent1.color_500)
colors[flags.PlotLines] = convertDecimalToRGBA(palette.accent3.color_300)
colors[flags.PlotLinesHovered] = convertDecimalToRGBA(palette.accent3.color_50)
colors[flags.PlotHistogram] = convertDecimalToRGBA(palette.accent3.color_300)
colors[flags.PlotHistogramHovered] = convertDecimalToRGBA(palette.accent3.color_50)
colors[flags.DragDropTarget] = convertDecimalToRGBA(palette.accent1.color_100)
colors[flags.ModalWindowDimBg] = imgui.ImVec4(0.00, 0.00, 0.00, 0.95)
end
local function getTheme()
local dec = imgui.GetColorU32Vec4(imgui.ImVec4(scriptColor[0], scriptColor[1], scriptColor[2], 1.0))
local color = bit.tohex(bit.bswap(dec))
local hex = ('%s'):format(color:sub(1, #color - 2))
theme(tonumber('0x' .. hex), 1.5, true)
end
imgui.OnInitialize(function()
imgui.GetIO().IniFilename = nil
getTheme()
end)
imgui.OnFrame(function() return renderColorEditor[0] end, function()
imgui.SetNextWindowSize(imgui.ImVec2(400, 150), imgui.Cond.FirstUseEver)
local sw, sh = getScreenResolution()
imgui.SetNextWindowPos(imgui.ImVec2(sw * 0.5, sh * 0.5), imgui.Cond.Appearing, imgui.ImVec2(0.5, 0.5))
if imgui.Begin(u8"Настройка цвета", renderColorEditor, imgui.WindowFlags.NoCollapse) then
imgui.Text(u8"Здесь настраивается базовый акцент темы.\n Остальные цвета генерируются автоматически.")
imgui.Spacing()
local flags = imgui.ColorEditFlags.NoAlpha + imgui.ColorEditFlags.DisplayRGB
if imgui.ColorEdit3(u8('Цвет скрипта'), scriptColor, flags) then
getTheme()
end
imgui.End()
end
end)
function main()
while not isSampAvailable() do wait(0) end
sampAddChatMessage("{00FFFF}[Set_color_script] {FFFFFF}Загружен. Активация {00FFFF}/setcl", -1)
sampRegisterChatCommand("setcl", function() renderColorEditor[0] = not renderColorEditor[0] end)
wait(-1)
end