cript_name('Custom NameTags')
script_author('SK1DGARD')
script_description('Кастомные name tag\'y ajustes detallados')
script_version(2)
script_dependencies('Imgui', 'FontAwesome 5', 'SAMPFUNCS')
local sampev = require('lib.samp.events')
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local fa = require 'fAwesome5'
local imgui = require 'imgui'
local window_state = imgui.ImBool(false)
local memory = require 'memory'
local ffi = require('ffi')
local get_bone_pos = ffi.cast("int (__thiscall*)(void*, float*, int, bool)", 0x5E4280)
local inicfg = require'inicfg'
local ini = inicfg.load({
NICKNAME = {
enabled = true,
vertical_offset = 16,
font_name = 'Arial',
font_size = 10,
font_flag = 13,
opacity = 255,
display_afk = true
},
HEALTH_BAR = {
enabled = true,
size_x = 80,
size_y = 10,
border_size = 1,
main_color = 0xFFFF0000,
border_color = 0xFF000000,
background_color = 0x68000000
},
ARMOR_BAR = {
enabled = true,
indent = 3,
size_x = 80,
size_y = 10,
border_size = 1,
main_color = 0xFFFFFFFF,
border_color = 0xFF000000,
background_color = 0x68000000
},
HEALTH_COUNT = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
font_color = 0xFFFFFFFF
},
ARMOR_COUNT = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
font_color = 0xFFFFFFFF
},
CHAT_BUBBLE = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
opacity = 255,
max_symbols = 15,
indent = 10,
line_offset = 2
},
GENERAL = {
on = true,
vertical_indent = 0.3
}
}, 'Custom NameTags\\Custom NameTags.ini')
local nick_buffer = imgui.ImBuffer(256) --IMGUI FONT BUFFERS
local hp_buffer = imgui.ImBuffer(256) --IMGUI FONT BUFFERS
local armor_buffer = imgui.ImBuffer(256) --IMGUI FONT BUFFERS
local bubble_buffer = imgui.ImBuffer(256) --IMGUI FONT BUFFERS
local nick_font, hp_font, armor_font, bubble_font = nil --FONTS
local current_table = 1 --SELECTED IMGUI TABLE
local nt_drawdist = 40 --NT DRAW DISTANCE
local bubble_pool = {} -- ['player_id'] = text, color, remove_time, distance
function main()
if not doesDirectoryExist('moonloader\\config') then createDirectory('moonloader\\config') end
if not doesDirectoryExist('moonloader\\config\\Custom NameTags') then createDirectory('moonloader\\config\\Custom NameTags') end
if not doesFileExist('Custom NameTags\\Custom NameTags.ini') then
if not inicfg.save(ini, 'Custom NameTags\\Custom NameTags.ini') then sampAddChatMessage('{FB4343}[Custom NameTags]{FFFFFF}: El script no puede crear el archivo de configuracion. :(', 0xFFFFFF) end
end
while not isSampAvailable() do wait(0) end
sampAddChatMessage('{FB4343}[Custom NameTags]{FFFFFF}: El guion esta activado. Activacion: {FB4343}/cusnt', -1)
while not isCharOnScreen(PLAYER_PED) do wait(0) end
local pStSet = sampGetServerSettingsPtr()
memory.setint8(pStSet + 56, ini.GENERAL.on and 0 or 1) --DISABLE NT
nt_drawdist = memory.getfloat(pStSet + 39) --GET NT DRAWDIST
nt_drawdist = nt_drawdist * nt_drawdist - 1 --GET NT SQUARED
to_imgui()
load_fonts()
sampRegisterChatCommand('cusnt', function() window_state.v = not window_state.v end)
while true do wait(0)
if ini.GENERAL.on then
local ped_pool = getAllChars()
local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
for _, ped in pairs(ped_pool) do
if ped ~= PLAYER_PED and isCharOnScreen(ped) then
local x, y, z = get_bodypart_coordinates(ped, 5)
local alive, player_id = sampGetPlayerIdByCharHandle(ped)
if isLineOfSightClear(cam_x, cam_y, cam_z, x, y, z, true, false, false, true, false) and alive and get_dist_squared(x, y, z, cam_x, cam_y, cam_z) < nt_drawdist and is_nt_visible(player_id) then
z = z + ini.GENERAL.vertical_indent.v
local hp = limit_input(sampGetPlayerHealth(player_id), 0, 100)
local armor = sampGetPlayerArmor(player_id)
local pl_x, pl_y, pl_z = getCharCoordinates(PLAYER_PED)
local distance_sq = get_dist_squared(pl_x, pl_y, pl_z, x, y, z)
local screen_x, screen_y = convert3DCoordsToScreen(x, y, z)
draw_nt(ped, player_id, screen_x, screen_y, hp, armor, distance_sq, ini.NICKNAME.enabled.v, ini.HEALTH_BAR.enabled.v, ini.ARMOR_BAR.enabled.v, ini.HEALTH_COUNT.enabled.v, ini.ARMOR_COUNT.enabled.v, ini.CHAT_BUBBLE.enabled.v)
end
end
end
end
imgui.Process = window_state.v
end
end
function onScriptTerminate(script, _)
if script == thisScript() then
local pStSet = sampGetServerSettingsPtr()
memory.setint8(pStSet + 56, 1)
end
end
function sampev.onPlayerChatBubble(playerId, color, distance, duration, message)
lua_thread.create(
function()
while isGamePaused() do wait(0) end
if ini.GENERAL.on and ini.CHAT_BUBBLE.enabled.v and playerId ~= nil then
local var = {
['text'] = message,
['color'] = rgba_to_argb(color),
['remove_time'] = os.time() + duration / 1000.0,
['distance'] = distance * distance
}
table.insert(bubble_pool, playerId, var)
end
end)
return false
end
function sampev.onPlayerQuit(playerId, _)
if bubble_pool[playerId] ~= nil then table.remove(bubble_pool, playerId) end
end
local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
function imgui.BeforeDrawFrame()
if fa_font == nil then
local font_config = imgui.ImFontConfig()
font_config.MergeMode = true
font_config.SizePixels = 15.0;
font_config.GlyphExtraSpacing.x = 0.1
fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader\\config\\Custom NameTags\\fa5.ttf', font_config.SizePixels, font_config, fa_glyph_ranges)
end
end
function imgui.OnDrawFrame()
if window_state.v then
imgui.SetNextWindowPos(imgui.ImVec2(imgui.GetIO().DisplaySize.x / 4, imgui.GetIO().DisplaySize.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(723, 420), imgui.Cond.FirstUseEver)
apply_style()
imgui.Begin(fa.ICON_COGS .. u8(' Custom name tags | Author: SK1DGARD'), window_state, imgui.WindowFlags.AlwaysAutoResize)
imgui.BeginChild(1, imgui.ImVec2(85, 85), true)
imgui.SetCursorPos(imgui.ImVec2(5, 5))
if imgui.CustomButton(
fa.ICON_POWER_OFF,
ini.GENERAL.on and imgui.ImVec4(0.15, 0.59, 0.18, 0.7) or imgui.ImVec4(1, 0.19, 0.19, 0.5),
ini.GENERAL.on and imgui.ImVec4(0.15, 0.59, 0.18, 0.5) or imgui.ImVec4(1, 0.19, 0.19, 0.3),
ini.GENERAL.on and imgui.ImVec4(0.15, 0.59, 0.18, 0.4) or imgui.ImVec4(1, 0.19, 0.19, 0.2),
imgui.ImVec2(75, 75)) then
ini.GENERAL.on = not ini.GENERAL.on
sampAddChatMessage(string.format('{FB4343}[Custom NameTags]{FFFFFF}: Guion %s.', ini.GENERAL.on and '{5BFF83}Encendido' or '{FB4343}Apagado'), -1)
local pStSet = sampGetServerSettingsPtr()
memory.setint8(pStSet + 56, ini.GENERAL.on and 0 or 1)
end
imgui.EndChild()
imgui.SetCursorPosY(112)
imgui.BeginChild(2, imgui.ImVec2(85, 313), true)
imgui.SetCursorPos(imgui.ImVec2(5, 5))
if imgui.CustomButton(
fa.ICON_SAVE,
imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(75, 75)) then
from_imgui()
if inicfg.save(ini, 'Custom NameTags\\Custom NameTags.ini') then
sampAddChatMessage('{FB4343}[Custom NameTags]{FFFFFF}: ajustes correctamente {5BFF83}guardados.', -1)
else
sampAddChatMessage('{FB4343}[Custom NameTags]{FFFFFF}: La configuracion no se guarda, no se puede hacer nada{FB4343} :(', -1)
end
to_imgui()
end
imgui.SetCursorPos(imgui.ImVec2(5, 81))
if imgui.CustomButton(
fa.ICON_REDO_ALT,
imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(75, 75)) then
ini = {
NICKNAME = {
enabled = true,
vertical_offset = 16,
font_name = 'Arial',
font_size = 10,
font_flag = 13,
opacity = 255,
display_afk = true
},
HEALTH_BAR = {
enabled = true,
size_x = 80,
size_y = 10,
border_size = 1,
main_color = 0xFFFF0000,
border_color = 0xFF000000,
background_color = 0x68000000
},
ARMOR_BAR = {
enabled = true,
indent = 3,
size_x = 80,
size_y = 10,
border_size = 1,
main_color = 0xFFFFFFFF,
border_color = 0xFF000000,
background_color = 0x68000000
},
HEALTH_COUNT = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
font_color = 0xFFFFFFFF
},
ARMOR_COUNT = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
font_color = 0xFFFFFFFF
},
CHAT_BUBBLE = {
enabled = true,
font_name = 'Arial',
font_size = 7,
font_flag = 5,
opacity = 255,
max_symbols = 15,
indent = 10,
line_offset = 2
},
GENERAL = {
on = true,
vertical_indent = 0.3
}
}
to_imgui()
load_fonts()
sampAddChatMessage('{FB4343}[Custom Nametags]{FFFFFF}: reiniciar la configuracion', -1)
end
imgui.SetCursorPos(imgui.ImVec2(5, 157))
end
imgui.SetCursorPos(imgui.ImVec2(5, 233))
if imgui.CustomButton(
fa.ICON_PAPER_PLANE,
imgui.ImVec4(0.207, 0.674, 0.878, 0.7),
imgui.ImVec4(0.207, 0.674, 0.878, 0.5),
imgui.ImVec4(0.207, 0.674, 0.878, 0.4),
imgui.ImVec2(75, 75)) then
os.execute('explorer "hhhhh"')
end
imgui.EndChild()
imgui.SetCursorPos(imgui.ImVec2(92, 28))
imgui.BeginChild(3, imgui.ImVec2(615, 85), true)
imgui.SetCursorPos(imgui.ImVec2(5,5))
if imgui.CustomButton(fa.ICON_MALE .. ' Nombre',
current_table == 1 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 1
end
imgui.SetCursorPos(imgui.ImVec2(106, 5))
if imgui.CustomButton(fa.ICON_HEART .. ' Barra vida',
current_table == 2 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 2
end
imgui.SetCursorPos(imgui.ImVec2(207, 5))
if imgui.CustomButton(fa.ICON_SHIELD_ALT .. ' Barra chaleco',
current_table == 3 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 3
end
imgui.SetCursorPos(imgui.ImVec2(308, 5))
if imgui.CustomButton(fa.ICON_HEARTBEAT .. ' Status vida',
current_table == 4 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 4
end
imgui.SetCursorPos(imgui.ImVec2(409, 5))
if imgui.CustomButton(fa.ICON_SHIELD_ALT .. ' Status chaleco',
current_table == 5 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 5
end
imgui.SetCursorPos(imgui.ImVec2(510, 5))
if imgui.CustomButton(fa.ICON_PENCIL_ALT .. ' Burbuja chat',
current_table == 6 and imgui.ImVec4(0.56, 0.16, 0.16, 1) or imgui.ImVec4(0.16, 0.16, 0.16, 0.9),
imgui.ImVec4(0.40, 0.12, 0.12, 1),
imgui.ImVec4(0.30, 0.08, 0.08, 1),
imgui.ImVec2(100, 75)) then
current_table = 6
end
imgui.EndChild()
imgui.SetCursorPos(imgui.ImVec2(92, 112))
imgui.BeginChild(4, imgui.ImVec2(615, 276), true)
if current_table == 1 then
imgui.PushItemWidth(300)
imgui.Checkbox('Draw player nicknames##nick', ini.NICKNAME.enabled)
imgui.InputText('##font_nick', nick_buffer)
imgui.SameLine()
imgui.SetCursorPosX(312)
if imgui.Button(fa.ICON_CHECK .. ' Confirm##nick', imgui.ImVec2(94, 20)) then
ini.NICKNAME.font_name = u8:decode(nick_buffer.v)
nick_font = renderCreateFont(ini.NICKNAME.font_name, ini.NICKNAME.font_size.v, ini.NICKNAME.font_flag.v)
end
imgui.SameLine()
imgui.SetCursorPosX(412)
imgui.Text(fa.ICON_FONT .. u8(string.format(' Font Name (%s)', ini.NICKNAME.font_name)))
if imgui.InputInt(fa.ICON_TEXT_WIDTH .. " Font size##nick", ini.NICKNAME.font_size) then
ini.NICKNAME.font_size.v = limit_input(ini.NICKNAME.font_size.v, 1, 145)
nick_font = renderCreateFont(ini.NICKNAME.font_name, ini.NICKNAME.font_size.v, ini.NICKNAME.font_flag.v)
end
if imgui.InputInt(fa.ICON_FLAG .. " Font flag##nick", ini.NICKNAME.font_flag) then
ini.NICKNAME.font_flag.v = limit_input(ini.NICKNAME.font_flag.v, 0, 600)
nick_font = renderCreateFont(ini.NICKNAME.font_name, ini.NICKNAME.font_size.v, ini.NICKNAME.font_flag.v)
end
imgui.SliderInt(fa.ICON_ARROW_UP .. ' Nickname offset by Y axis##nick', ini.NICKNAME.vertical_offset, -100, 100)
imgui.SliderInt(fa.ICON_MOON .. ' Nickname color opacity##nick', ini.NICKNAME.opacity, 0, 255)
imgui.Checkbox('Display indicator if player is Paused', ini.NICKNAME.display_afk)
imgui.PopItemWidth()
end
if current_table == 2 then
imgui.PushItemWidth(460)
imgui.Checkbox('Display player health bar##hpbar', ini.HEALTH_BAR.enabled)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Health bar width##hpbar', ini.HEALTH_BAR.size_x, 0, 400)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Health bar height##hpbar', ini.HEALTH_BAR.size_y, 0, 400)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Border thickness##hpbar', ini.HEALTH_BAR.border_size, 0, 60)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Main color##hpbar", ini.HEALTH_BAR.main_color)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Background color##hpbar", ini.HEALTH_BAR.background_color)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Border color##hpbar", ini.HEALTH_BAR.border_color)
imgui.PopItemWidth()
end
if current_table == 3 then
imgui.PushItemWidth(460)
imgui.Checkbox('Display player armor bar##armor', ini.ARMOR_BAR.enabled)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Armor bar width##armor', ini.ARMOR_BAR.size_x, 0, 400)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' armor bar height##armor', ini.ARMOR_BAR.size_y, 0, 400)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Border thickness##armor', ini.ARMOR_BAR.border_size, 0, 60)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Main color##armor", ini.ARMOR_BAR.main_color)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Background color##armor", ini.ARMOR_BAR.background_color)
imgui.ColorEdit4(fa.ICON_SPINNER .. " Border color##armor", ini.ARMOR_BAR.border_color)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Armor vertical offset##armor', ini.ARMOR_BAR.indent, 0, 200)
imgui.PopItemWidth()
end
if current_table == 4 then
imgui.PushItemWidth(300)
imgui.Checkbox('Draw player health count##hpcount', ini.HEALTH_COUNT.enabled)
imgui.ColorEdit4(fa.ICON_SPINNER .. ' Font color##hpcount', ini.HEALTH_COUNT.font_color)
imgui.PopItemWidth()
end
if current_table == 5 then
imgui.PushItemWidth(300)
imgui.Checkbox('Draw player armor count##armorcount', ini.ARMOR_COUNT.enabled)
imgui.InputText('##font_armor', armor_buffer)
imgui.SameLine()
imgui.SetCursorPosX(312)
if imgui.Button(fa.ICON_CHECK .. ' Confirm##armorcount', imgui.ImVec2(94, 20)) then
ini.ARMOR_COUNT.font_name = u8:decode(armor_buffer.v)
armor_font = renderCreateFont(ini.ARMOR_COUNT.font_name, ini.ARMOR_COUNT.font_size.v, ini.ARMOR_COUNT.font_flag.v)
end
imgui.SameLine()
imgui.SetCursorPosX(412)
imgui.Text(fa.ICON_FONT .. u8(string.format(' Font Name (%s)', ini.ARMOR_COUNT.font_name)))
if imgui.InputInt(fa.ICON_TEXT_WIDTH .. " Font size##armorcount", ini.ARMOR_COUNT.font_size) then
ini.ARMOR_COUNT.font_size.v = limit_input(ini.ARMOR_COUNT.font_size.v, 1, 145)
armor_font = renderCreateFont(ini.ARMOR_COUNT.font_name, ini.ARMOR_COUNT.font_size.v, ini.ARMOR_COUNT.font_flag.v)
end
if imgui.InputInt(fa.ICON_FLAG .. " Font flag##armorcount", ini.ARMOR_COUNT.font_flag) then
ini.ARMOR_COUNT.font_flag.v = limit_input(ini.ARMOR_COUNT.font_flag.v, 0, 600)
armor_font = renderCreateFont(ini.ARMOR_COUNT.font_name, ini.ARMOR_COUNT.font_size.v, ini.ARMOR_COUNT.font_flag.v)
end
imgui.ColorEdit4(fa.ICON_SPINNER .. ' Font color##armorcount', ini.ARMOR_COUNT.font_color)
imgui.PopItemWidth()
end
if current_table == 6 then
imgui.PushItemWidth(300)
imgui.Checkbox('Draw player chat bubble##chatbubble', ini.CHAT_BUBBLE.enabled)
imgui.InputText('##font_chatbubble', bubble_buffer)
imgui.SameLine()
imgui.SetCursorPosX(312)
if imgui.Button(fa.ICON_CHECK .. ' Confirm##chatbubble', imgui.ImVec2(94, 20)) then
ini.CHAT_BUBBLE.font_name = u8:decode(bubble_buffer.v)
bubble_font = renderCreateFont(ini.CHAT_BUBBLE.font_name, ini.CHAT_BUBBLE.font_size.v, ini.CHAT_BUBBLE.font_flag.v)
end
imgui.SameLine()
imgui.SetCursorPosX(412)
imgui.Text(fa.ICON_FONT .. u8(string.format(' Font Name (%s)', ini.CHAT_BUBBLE.font_name)))
if imgui.InputInt(fa.ICON_TEXT_WIDTH .. " Font size##chatbubble", ini.CHAT_BUBBLE.font_size) then
ini.CHAT_BUBBLE.font_size.v = limit_input(ini.CHAT_BUBBLE.font_size.v, 1, 145)
bubble_font = renderCreateFont(ini.CHAT_BUBBLE.font_name, ini.CHAT_BUBBLE.font_size.v, ini.CHAT_BUBBLE.font_flag.v)
end
if imgui.InputInt(fa.ICON_FLAG .. " Font flag##chatbubble", ini.CHAT_BUBBLE.font_flag) then
ini.CHAT_BUBBLE.font_flag.v = limit_input(ini.CHAT_BUBBLE.font_flag.v, 0, 600)
bubble_font = renderCreateFont(ini.CHAT_BUBBLE.font_name, ini.CHAT_BUBBLE.font_size.v, ini.CHAT_BUBBLE.font_flag.v)
end
imgui.SliderInt(fa.ICON_SPINNER .. ' Chat bubble text opacity', ini.CHAT_BUBBLE.opacity, 0, 255)
imgui.SliderInt(fa.ICON_ARROW_UP .. ' Chat bubble offset by Y axis', ini.CHAT_BUBBLE.indent, 0, 200)
imgui.SliderInt(fa.ICON_SLIDERS_H .. ' Offset between lines', ini.CHAT_BUBBLE.line_offset, 0, 200)
if imgui.InputInt(fa.ICON_FONT .. ' Maximal symbols in chat bubble line', ini.CHAT_BUBBLE.max_symbols) then
ini.CHAT_BUBBLE.max_symbols.v = limit_input(ini.CHAT_BUBBLE.max_symbols.v, 1, 500)
end
imgui.PopItemWidth()
end
imgui.EndChild()
imgui.SetCursorPos(imgui.ImVec2(92, 387))
imgui.BeginChild(5, imgui.ImVec2(615, 38), true)
imgui.SetCursorPos(imgui.ImVec2(10, 10))
imgui.PushItemWidth(430)
imgui.SliderFloat(fa.ICON_COGS .. ' NameTag vertical offset', ini.GENERAL.vertical_indent, -2, 2)
imgui.PopItemWidth()
imgui.EndChild()
imgui.End()
end
end
function draw_nt(ped, player_id, screen_x, screen_y, hp, armor, distance_sq, draw_nick, draw_health_bar, draw_armor_bar, draw_health_count, draw_armor_count, draw_chat_bubble)
if draw_health_bar then
renderDrawBoxWithBorder(
screen_x - ini.HEALTH_BAR.size_x.v / 2,
screen_y - ini.HEALTH_BAR.size_y.v / 2,
ini.HEALTH_BAR.size_x.v,
ini.HEALTH_BAR.size_y.v,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.background_color.v[3], ini.HEALTH_BAR.background_color.v[2], ini.HEALTH_BAR.background_color.v[1], ini.HEALTH_BAR.background_color.v[4]):GetVec4()):GetU32(),
ini.HEALTH_BAR.border_size.v,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.border_color.v[3], ini.HEALTH_BAR.border_color.v[2], ini.HEALTH_BAR.border_color.v[1], ini.HEALTH_BAR.border_color.v[4]):GetVec4()):GetU32())
renderDrawBox(
screen_x - ini.HEALTH_BAR.size_x.v / 2 + ini.HEALTH_BAR.border_size.v,
screen_y - ini.HEALTH_BAR.size_y.v / 2 + ini.HEALTH_BAR.border_size.v,
(ini.HEALTH_BAR.size_x.v - ini.HEALTH_BAR.border_size.v * 2) * hp / 100.0,
ini.HEALTH_BAR.size_y.v - ini.HEALTH_BAR.border_size.v * 2,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.main_color.v[3], ini.HEALTH_BAR.main_color.v[2], ini.HEALTH_BAR.main_color.v[1], ini.HEALTH_BAR.main_color.v[4]):GetVec4()):GetU32())
end
if draw_health_count then
renderFontDrawText(
hp_font,
hp,
screen_x - renderGetFontDrawTextLength(hp_font, hp) / 2,
screen_y - renderGetFontDrawHeight(hp_font) / 2,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_COUNT.font_color.v[3], ini.HEALTH_COUNT.font_color.v[2], ini.HEALTH_COUNT.font_color.v[1], ini.HEALTH_COUNT.font_color.v[4]):GetVec4()):GetU32())
end
if armor > 0 then
screen_y = screen_y - ini.HEALTH_BAR.size_y.v / 2 - ini.ARMOR_BAR.indent.v - ini.ARMOR_BAR.size_y.v
if draw_armor_bar then
renderDrawBoxWithBorder(
screen_x - ini.ARMOR_BAR.size_x.v / 2,
screen_y,
ini.ARMOR_BAR.size_x.v,
ini.ARMOR_BAR.size_y.v,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.background_color.v[3], ini.ARMOR_BAR.background_color.v[2], ini.ARMOR_BAR.background_color.v[1], ini.ARMOR_BAR.background_color.v[4]):GetVec4()):GetU32(),
ini.ARMOR_BAR.border_size.v,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.border_color.v[3], ini.ARMOR_BAR.border_color.v[2], ini.ARMOR_BAR.border_color.v[1], ini.ARMOR_BAR.border_color.v[4]):GetVec4()):GetU32())
renderDrawBox(
screen_x - ini.ARMOR_BAR.size_x.v / 2 + ini.ARMOR_BAR.border_size.v,
screen_y + ini.ARMOR_BAR.border_size.v,
(ini.ARMOR_BAR.size_x.v - ini.ARMOR_BAR.border_size.v * 2) * armor / 100.0,
ini.ARMOR_BAR.size_y.v - ini.ARMOR_BAR.border_size.v * 2,
imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.main_color.v[3], ini.ARMOR_BAR.main_color.v[2], ini.ARMOR_BAR.main_color.v[1], ini.ARMOR_BAR.main_color.v[4]):GetVec4()):GetU32())
end
if draw_armor_count then
renderFontDrawText(
armor_font,
armor,
screen_x - renderGetFontDrawTextLength(armor_font, armor) / 2,
screen_y + (ini.ARMOR_BAR.size_y.v / 2 - renderGetFontDrawHeight(armor_font) / 2),
imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_COUNT.font_color.v[3], ini.ARMOR_COUNT.font_color.v[2], ini.ARMOR_COUNT.font_color.v[1], ini.ARMOR_COUNT.font_color.v[4]):GetVec4()):GetU32())
end
end
if draw_nick then
screen_y = screen_y - ini.NICKNAME.vertical_offset.v - renderGetFontDrawHeight(nick_font) / 2
local ped_nick = sampGetPlayerNickname(player_id)
ped_nick = string.format('%s[%d]%s', ped_nick, player_id, (ini.NICKNAME.display_afk.v and sampIsPlayerPaused(player_id)) and ' {FFFFFF}<AFK>' or '')
local clr = argb_to_rgb(sampGetPlayerColor(player_id), ini.NICKNAME.opacity.v)
renderFontDrawText(
nick_font,
ped_nick,
screen_x - renderGetFontDrawTextLength(nick_font, ped_nick) / 2,
screen_y,
clr)
end
if draw_chat_bubble and bubble_pool[player_id] ~= nil and distance_sq < bubble_pool[player_id].distance then
if os.time() < bubble_pool[player_id].remove_time then
render_text_wrapped(
bubble_font,
screen_x,
screen_y - ini.CHAT_BUBBLE.indent.v,
bubble_pool[player_id].text,
bubble_pool[player_id].color,
ini.CHAT_BUBBLE.max_symbols.v,
ini.CHAT_BUBBLE.line_offset.v)
else
table.remove(bubble_pool, player_id)
end
end
end
function render_text_wrapped(font, x, y, text, color, max_symbols, line_offset)
local str_list = {}
local last_str = ''
for i = 1, #text do
if #last_str == max_symbols then
table.insert(str_list, last_str)
last_str = ''
end
last_str = last_str .. string.sub(text, i, i)
end
if #last_str > 0 then table.insert(str_list, last_str) end
for i = 1, #str_list do
renderFontDrawText(
font,
str_list[i],
x - renderGetFontDrawTextLength(font, str_list[i]) / 2,
y - renderGetFontDrawHeight(font) * (#str_list - i ) - line_offset * (#str_list - i - 1),
color)
end
end
function get_dist_squared(x1, y1, z1, x2, y2, z2)
return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2)
end
function limit_input(var, min, max)
if var < min then var = min end
if max < var then var = max end
return var
end
function rgba_to_argb(rgba)
local r, g, b, a = hex_to_argb(rgba)
return argb_to_hex(ini.CHAT_BUBBLE.opacity.v, r, g, b)
end
function argb_to_rgb(argb, new_a)
local a, r, g, b = hex_to_argb(argb)
return argb_to_hex(new_a, r, g, b)
end
function argb_to_hex(a, r, g, b)
local argb = b
argb = bit.bor(argb, bit.lshift(g, 8))
argb = bit.bor(argb, bit.lshift(r, 16))
argb = bit.bor(argb, bit.lshift(a, 24))
return argb
end
function hex_to_argb(hex)
return
bit.band(bit.rshift(hex, 24), 255),
bit.band(bit.rshift(hex, 16), 255),
bit.band(bit.rshift(hex, 8), 255),
bit.band(hex, 255)
end
function is_nt_visible(id)
local StructPtr = readMemory(sampGetPlayerStructPtr(id), 4, true)
local Element = getStructElement(StructPtr, 179, 2, false)
if Element == 0 then return false else return true end
end
function get_bodypart_coordinates(handle, id)
if doesCharExist(handle) then
local pedptr = getCharPointer(handle)
local vec = ffi.new("float[3]")
get_bone_pos(ffi.cast("void*", pedptr), vec, id, true)
return vec[0], vec[1], vec[2]
end
end
function imgui.CustomButton(name, color, colorHovered, colorActive, size)
local clr = imgui.Col
imgui.PushStyleColor(clr.Button, color)
imgui.PushStyleColor(clr.ButtonHovered, colorHovered)
imgui.PushStyleColor(clr.ButtonActive, colorActive)
if not size then size = imgui.ImVec2(0, 0) end
local result = imgui.Button(name, size)
imgui.PopStyleColor(3)
return result
end
function load_fonts()
nick_font = renderCreateFont(ini.NICKNAME.font_name, ini.NICKNAME.font_size.v, ini.NICKNAME.font_flag.v)
hp_font = renderCreateFont(ini.HEALTH_COUNT.font_name, ini.HEALTH_COUNT.font_size.v, ini.HEALTH_COUNT.font_flag.v)
armor_font = renderCreateFont(ini.ARMOR_COUNT.font_name, ini.ARMOR_COUNT.font_size.v, ini.ARMOR_COUNT.font_flag.v)
bubble_font = renderCreateFont(ini.CHAT_BUBBLE.font_name, ini.CHAT_BUBBLE.font_size.v, ini.CHAT_BUBBLE.font_flag.v)
end
function to_imgui()
local temp_a, temp_r, temp_g, temp_b = nil
ini.NICKNAME.enabled = imgui.ImBool(ini.NICKNAME.enabled)
ini.NICKNAME.vertical_offset = imgui.ImInt(ini.NICKNAME.vertical_offset)
--ini.NICKNAME.font_name =
ini.NICKNAME.font_size = imgui.ImInt(ini.NICKNAME.font_size)
ini.NICKNAME.font_flag = imgui.ImInt(ini.NICKNAME.font_flag)
ini.NICKNAME.opacity = imgui.ImInt(ini.NICKNAME.opacity)
ini.NICKNAME.display_afk = imgui.ImBool(ini.NICKNAME.display_afk)
ini.HEALTH_BAR.enabled = imgui.ImBool(ini.HEALTH_BAR.enabled)
ini.HEALTH_BAR.size_x = imgui.ImInt(ini.HEALTH_BAR.size_x)
ini.HEALTH_BAR.size_y = imgui.ImInt(ini.HEALTH_BAR.size_y)
ini.HEALTH_BAR.border_size = imgui.ImInt(ini.HEALTH_BAR.border_size)
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.HEALTH_BAR.main_color)
ini.HEALTH_BAR.main_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.HEALTH_BAR.border_color)
ini.HEALTH_BAR.border_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.HEALTH_BAR.background_color)
ini.HEALTH_BAR.background_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
ini.ARMOR_BAR.enabled = imgui.ImBool(ini.ARMOR_BAR.enabled)
ini.ARMOR_BAR.indent = imgui.ImInt(ini.ARMOR_BAR.indent)
ini.ARMOR_BAR.size_x = imgui.ImInt(ini.ARMOR_BAR.size_x)
ini.ARMOR_BAR.size_y = imgui.ImInt(ini.ARMOR_BAR.size_y)
ini.ARMOR_BAR.border_size = imgui.ImInt(ini.ARMOR_BAR.border_size)
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.ARMOR_BAR.main_color)
ini.ARMOR_BAR.main_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.ARMOR_BAR.border_color)
ini.ARMOR_BAR.border_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.ARMOR_BAR.background_color)
ini.ARMOR_BAR.background_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
ini.HEALTH_COUNT.enabled = imgui.ImBool(ini.HEALTH_COUNT.enabled)
--ini.HEALTH_COUNT.font_name =
ini.HEALTH_COUNT.font_size = imgui.ImInt(ini.HEALTH_COUNT.font_size)
ini.HEALTH_COUNT.font_flag = imgui.ImInt(ini.HEALTH_COUNT.font_flag)
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.HEALTH_COUNT.font_color)
ini.HEALTH_COUNT.font_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
ini.ARMOR_COUNT.enabled = imgui.ImBool(ini.ARMOR_COUNT.enabled)
--ini.ARMOR_COUNT.font_name =
ini.ARMOR_COUNT.font_size = imgui.ImInt(ini.ARMOR_COUNT.font_size)
ini.ARMOR_COUNT.font_flag = imgui.ImInt(ini.ARMOR_COUNT.font_flag)
temp_a, temp_r, temp_g, temp_b = hex_to_argb(ini.ARMOR_COUNT.font_color)
ini.ARMOR_COUNT.font_color = imgui.ImFloat4(imgui.ImColor(temp_r, temp_g, temp_b, temp_a):GetFloat4())
ini.CHAT_BUBBLE.enabled = imgui.ImBool(ini.CHAT_BUBBLE.enabled)
--ini.CHAT_BUBBLE.font_name =
ini.CHAT_BUBBLE.font_size = imgui.ImInt(ini.CHAT_BUBBLE.font_size)
ini.CHAT_BUBBLE.font_flag = imgui.ImInt(ini.CHAT_BUBBLE.font_flag)
ini.CHAT_BUBBLE.opacity = imgui.ImInt(ini.CHAT_BUBBLE.opacity)
ini.CHAT_BUBBLE.max_symbols = imgui.ImInt(ini.CHAT_BUBBLE.max_symbols)
ini.CHAT_BUBBLE.indent = imgui.ImInt(ini.CHAT_BUBBLE.indent)
ini.CHAT_BUBBLE.line_offset = imgui.ImInt(ini.CHAT_BUBBLE.line_offset)
--ini.GENERAL.on = imgui.ImBool(ini.GENERAL.on)
ini.GENERAL.vertical_indent = imgui.ImFloat(ini.GENERAL.vertical_indent)
end
function from_imgui()
ini.NICKNAME.enabled = ini.NICKNAME.enabled.v
ini.NICKNAME.vertical_offset = ini.NICKNAME.vertical_offset.v
ini.NICKNAME.font_size = ini.NICKNAME.font_size.v
ini.NICKNAME.font_flag = ini.NICKNAME.font_flag.v
ini.NICKNAME.opacity = ini.NICKNAME.opacity.v
ini.NICKNAME.display_afk = ini.NICKNAME.display_afk.v
ini.HEALTH_BAR.enabled = ini.HEALTH_BAR.enabled.v
ini.HEALTH_BAR.size_x = ini.HEALTH_BAR.size_x.v
ini.HEALTH_BAR.size_y = ini.HEALTH_BAR.size_y.v
ini.HEALTH_BAR.border_size = ini.HEALTH_BAR.border_size.v
ini.HEALTH_BAR.main_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.main_color.v[3], ini.HEALTH_BAR.main_color.v[2], ini.HEALTH_BAR.main_color.v[1], ini.HEALTH_BAR.main_color.v[4]):GetVec4()):GetU32()
ini.HEALTH_BAR.border_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.border_color.v[3], ini.HEALTH_BAR.border_color.v[2], ini.HEALTH_BAR.border_color.v[1], ini.HEALTH_BAR.border_color.v[4]):GetVec4()):GetU32()
ini.HEALTH_BAR.background_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_BAR.background_color.v[3], ini.HEALTH_BAR.background_color.v[2], ini.HEALTH_BAR.background_color.v[1], ini.HEALTH_BAR.background_color.v[4]):GetVec4()):GetU32()
ini.ARMOR_BAR.enabled = ini.ARMOR_BAR.enabled.v
ini.ARMOR_BAR.indent = ini.ARMOR_BAR.indent.v
ini.ARMOR_BAR.size_x = ini.ARMOR_BAR.size_x.v
ini.ARMOR_BAR.size_y = ini.ARMOR_BAR.size_y.v
ini.ARMOR_BAR.border_size = ini.ARMOR_BAR.border_size.v
ini.ARMOR_BAR.main_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.main_color.v[3], ini.ARMOR_BAR.main_color.v[2], ini.ARMOR_BAR.main_color.v[1], ini.ARMOR_BAR.main_color.v[4]):GetVec4()):GetU32()
ini.ARMOR_BAR.border_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.border_color.v[3], ini.ARMOR_BAR.border_color.v[2], ini.ARMOR_BAR.border_color.v[1], ini.ARMOR_BAR.border_color.v[4]):GetVec4()):GetU32()
ini.ARMOR_BAR.background_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_BAR.background_color.v[3], ini.ARMOR_BAR.background_color.v[2], ini.ARMOR_BAR.background_color.v[1], ini.ARMOR_BAR.background_color.v[4]):GetVec4()):GetU32()
ini.HEALTH_COUNT.enabled = ini.HEALTH_COUNT.enabled.v
ini.HEALTH_COUNT.font_size = ini.HEALTH_COUNT.font_size.v
ini.HEALTH_COUNT.font_flag = ini.HEALTH_COUNT.font_flag.v
ini.HEALTH_COUNT.font_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.HEALTH_COUNT.font_color.v[3], ini.HEALTH_COUNT.font_color.v[2], ini.HEALTH_COUNT.font_color.v[1], ini.HEALTH_COUNT.font_color.v[4]):GetVec4()):GetU32()
ini.ARMOR_COUNT.enabled = ini.ARMOR_COUNT.enabled.v
ini.ARMOR_COUNT.font_size = ini.ARMOR_COUNT.font_size.v
ini.ARMOR_COUNT.font_flag = ini.ARMOR_COUNT.font_flag.v
ini.ARMOR_COUNT.font_color = imgui.ImColor(imgui.ImColor.FromFloat4(ini.ARMOR_COUNT.font_color.v[3], ini.ARMOR_COUNT.font_color.v[2], ini.ARMOR_COUNT.font_color.v[1], ini.ARMOR_COUNT.font_color.v[4]):GetVec4()):GetU32()
ini.CHAT_BUBBLE.enabled = ini.CHAT_BUBBLE.enabled.v
ini.CHAT_BUBBLE.font_size = ini.CHAT_BUBBLE.font_size.v
ini.CHAT_BUBBLE.font_flag = ini.CHAT_BUBBLE.font_flag.v
ini.CHAT_BUBBLE.opacity = ini.CHAT_BUBBLE.opacity.v
ini.CHAT_BUBBLE.max_symbols = ini.CHAT_BUBBLE.max_symbols.v
ini.CHAT_BUBBLE.indent = ini.CHAT_BUBBLE.indent.v
ini.CHAT_BUBBLE.line_offset = ini.CHAT_BUBBLE.line_offset.v
ini.GENERAL.vertical_indent = ini.GENERAL.vertical_indent.v
end
function apply_style()
imgui.SwitchContext()
local ImVec4 = imgui.ImVec4
local ImVec2 = imgui.ImVec2
local style = imgui.GetStyle()
style.WindowRounding = 0
style.WindowPadding = ImVec2(8, 8)
style.WindowTitleAlign = ImVec2(0.5, 0.5)
style.ChildWindowRounding = 0
style.FrameRounding = 0
style.ItemSpacing = ImVec2(8, 4)
style.ScrollbarSize = 10
style.ScrollbarRounding = 3
style.GrabMinSize = 10
style.GrabRounding = 0
style.Alpha = 1
style.FramePadding = ImVec2(4, 3)
style.ItemInnerSpacing = ImVec2(4, 4)
style.TouchExtraPadding = ImVec2(0, 0)
style.IndentSpacing = 21
style.ColumnsMinSpacing = 6
style.ButtonTextAlign = ImVec2(0.5, 0.5)
style.DisplayWindowPadding = ImVec2(22, 22)
style.DisplaySafeAreaPadding = ImVec2(4, 4)
style.AntiAliasedLines = true
style.AntiAliasedShapes = true
style.CurveTessellationTol = 1.25
local colors = style.Colors
local clr = imgui.Col
colors[clr.FrameBg] = ImVec4(0.48, 0.16, 0.16, 0.54)
colors[clr.FrameBgHovered] = ImVec4(0.98, 0.26, 0.26, 0.40)
colors[clr.FrameBgActive] = ImVec4(0.98, 0.26, 0.26, 0.67)
colors[clr.TitleBg] = ImVec4(0.04, 0.04, 0.04, 1.00)
colors[clr.TitleBgActive] = ImVec4(0.48, 0.16, 0.16, 1.00)
colors[clr.TitleBgCollapsed] = ImVec4(0.00, 0.00, 0.00, 0.51)
colors[clr.CheckMark] = ImVec4(0.98, 0.26, 0.26, 1.00)
colors[clr.SliderGrab] = ImVec4(0.88, 0.26, 0.24, 1.00)
colors[clr.SliderGrabActive] = ImVec4(0.98, 0.26, 0.26, 1.00)
colors[clr.Button] = ImVec4(0.98, 0.26, 0.26, 0.40)
colors[clr.ButtonHovered] = ImVec4(0.98, 0.26, 0.26, 1.00)
colors[clr.ButtonActive] = ImVec4(0.98, 0.06, 0.06, 1.00)
colors[clr.Header] = ImVec4(0.98, 0.26, 0.26, 0.31)
colors[clr.HeaderHovered] = ImVec4(0.98, 0.26, 0.26, 0.80)
colors[clr.HeaderActive] = ImVec4(0.98, 0.26, 0.26, 1.00)
colors[clr.Separator] = colors[clr.Border]
colors[clr.SeparatorHovered] = ImVec4(0.75, 0.10, 0.10, 0.78)
colors[clr.SeparatorActive] = ImVec4(0.75, 0.10, 0.10, 1.00)
colors[clr.ResizeGrip] = ImVec4(0.98, 0.26, 0.26, 0.25)
colors[clr.ResizeGripHovered] = ImVec4(0.98, 0.26, 0.26, 0.67)
colors[clr.ResizeGripActive] = ImVec4(0.98, 0.26, 0.26, 0.95)
colors[clr.TextSelectedBg] = ImVec4(0.98, 0.26, 0.26, 0.35)
colors[clr.Text] = ImVec4(1.00, 1.00, 1.00, 1.00)
colors[clr.TextDisabled] = ImVec4(0.50, 0.50, 0.50, 1.00)
colors[clr.WindowBg] = ImVec4(0.06, 0.06, 0.06, 0.94)
colors[clr.ChildWindowBg] = ImVec4(1.00, 1.00, 1.00, 0.00)
colors[clr.PopupBg] = ImVec4(0.08, 0.08, 0.08, 0.94)
colors[clr.ComboBg] = colors[clr.PopupBg]
colors[clr.Border] = ImVec4(0.43, 0.43, 0.50, 0.50)
colors[clr.BorderShadow] = ImVec4(0.00, 0.00, 0.00, 0.00)
colors[clr.MenuBarBg] = ImVec4(0.14, 0.14, 0.14, 1.00)
colors[clr.ScrollbarBg] = ImVec4(0.02, 0.02, 0.02, 0.53)
colors[clr.ScrollbarGrab] = ImVec4(0.31, 0.31, 0.31, 1.00)
colors[clr.ScrollbarGrabHovered] = ImVec4(0.41, 0.41, 0.41, 1.00)
colors[clr.ScrollbarGrabActive] = ImVec4(0.51, 0.51, 0.51, 1.00)
colors[clr.CloseButton] = ImVec4(0.41, 0.41, 0.41, 0.50)
colors[clr.CloseButtonHovered] = ImVec4(0.98, 0.39, 0.36, 1.00)
colors[clr.CloseButtonActive] = ImVec4(0.98, 0.39, 0.36, 1.00)
colors[clr.PlotLines] = ImVec4(0.61, 0.61, 0.61, 1.00)
colors[clr.PlotLinesHovered] = ImVec4(1.00, 0.43, 0.35, 1.00)
colors[clr.PlotHistogram] = ImVec4(0.90, 0.70, 0.00, 1.00)
colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
colors[clr.ModalWindowDarkening] = ImVec4(0.80, 0.80, 0.80, 0.35)
end