- 11
- 2
Всем привет! Решил создать бота для проекта "Жизнь в деревне (1 сервер) ферма номер 2" из исходного кода для Аризоны. Поменял координаты, добавил imgui, но... После запуска бота: он телепортировался на ферму и его сразу кикает (а мне нужно, чтобы он шел, ну это я потом заменю) и просто стоит. Посмотрите, кто может, исправьте ошибки.
FarmBot:
script_name('FarmBot')
script_author('angel.wqxx')
script_version(1.3)
local farms = {
[1] = {
farm = {x = 433.85577392578, y = 1518.6507568359, z = 11.826860427856},
barn = {x = 438.37326049805, y = 1551.1828613281, z = 11.510150909424},
barrel = {x = 446.02053833008, y = 1569.9761962891, z = 11.510150909424},
corners = {
{x = 449.27932739258, y = 1528.5333251953, z = 8.4226112365723},
{x = 460.7633972168, y = 1488.54455566411, z = 5.0918140411377}
},
tasks = 0,
selected = false
},
}
local samp = require 'samp.events'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local window = imgui.ImBool(false)
local stats = imgui.ImBool(false)
local active = imgui.ImBool(false)
local SelectedCrop = imgui.ImInt(0)
local SelectedFarm = imgui.ImInt(0)
local crops = {
[0] = u8'Автоматически',
}
local LabelFarms = {
[0] = u8'Автоматически',
u8'Ферма №2',
}
local states = {u8'Выкапывание', u8'Посев', u8'Полив', u8'Прополка', u8'Сбор урожая'}
local labels = {}
local loop = 0
local hands = true
local processed = false
local filled = false
local farm = 0
local scrop = ''
local choosing = false
local start = os.clock()
local status = ''
local tasks = 0
local income = 0
local count = 0
local bed = 0
local stuck_count = 0
local stuck_timer = os.clock()+15
local stuck_pos = {}
local tasklist = {}
function main()
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while not isSampAvailable() do wait(100) end
sampAddChatMessage("БОТ: Ферма [BY ANGEL]", 0x00DD00)
sampRegisterChatCommand('fbot', function()
window.v = not window.v
end)
while true do
wait(0)
imgui.Process = window.v or stats.v
imgui.ShowCursor = window.v
farm = SelectedFarm.v ~= 0 and SelectedFarm.v or farm
scrop = SelectedCrop.v ~= 0 and crops[SelectedCrop.v] or scrop
if active.v then
for i, v in ipairs(getAllVehicles()) do deleteCar(v) end
if stuck_timer-os.clock() <= 0 then
local x, y, z = getCharCoordinates(PLAYER_PED)
if getDistanceBetweenCoords3d(x, y, z, stuck_pos[1], stuck_pos[2], stuck_pos[3]) <= 3 then
stuck_count = stuck_count + 1
stuck_timer = os.clock()+15
stuck_pos = {getCharCoordinates(PLAYER_PED)}
if stuck_count >= 8 then
print('Сработала защита от простоя. Перезапуск бота.')
sampAddChatMessage('[FarmBot] {FFFFFF}Сработала защита от простоя. Перезапуск бота.', 0x993066)
if bot_thread then bot_thread:terminate() loop = 0 end
bot_thread = lua_thread.create(bot)
end
else
stuck_count = 0
stuck_timer = os.clock()+15
stuck_pos = {getCharCoordinates(PLAYER_PED)}
end
end
end
end
end
function imgui.OnDrawFrame()
if window.v then
local X, Y = getScreenResolution()
imgui.SetNextWindowSize(imgui.ImVec2(227, 145), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(X / 2, Y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin(u8'Бот Фермер', window, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)
if imgui.Checkbox(u8'Включить бота', active) then
sampAddChatMessage('[FarmBot] {FFFFFF}'..(active.v and 'Включен' or 'Выключен'), 0x993066)
if active.v then
start = os.clock()
stuck_count = 0
stuck_timer = os.clock()+15
stuck_pos = {getCharCoordinates(PLAYER_PED)}
tasks = 0
income = 0
bot_thread = lua_thread.create(bot)
else
if bot_thread then bot_thread:terminate() loop = 0 end
end
end
imgui.Checkbox(u8'Статистика', stats)
imgui.PushItemWidth(155)
imgui.Combo(u8'Ферма', SelectedFarm, LabelFarms)
imgui.Combo(u8'Культура', SelectedCrop, crops)
imgui.PopItemWidth()
imgui.SetCursorPosX((imgui.GetWindowSize().x-imgui.CalcTextSize('by angel.wqxx').x)/2)
imgui.TextDisabled('by angel.wqxx')
imgui.End()
end
if stats.v then
local X, Y = getScreenResolution()
imgui.SetNextWindowSize(imgui.ImVec2(190, 148), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(convertGameScreenCoordsToWindowScreenCoords(560, 350)), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin('##stats', _, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoScrollbar)
imgui.SetCursorPosX((190-imgui.CalcTextSize(u8'Статистика бота').x)/2)
imgui.Text(u8'Статистика бота')
imgui.Text(u8'Прошло:') imgui.SameLine()
imgui.TextDisabled(active.v and os.date('!%H:%M:%S', os.clock()-start) or '00:00:00')
imgui.Text(u8'Заработано:') imgui.SameLine()
imgui.TextDisabled(splitMoney(income)..'$')
imgui.Text(u8'Статус:') imgui.SameLine()
imgui.TextDisabled(active.v and status or u8'Выключен')
imgui.Text(u8'Этап:') imgui.SameLine()
imgui.TextDisabled((active.v and loop ~= 0) and states[loop]..' ('..bed..'/'..(bed > count and bed or count)..')' or u8'Ожидание')
imgui.Text(u8'Ферма:') imgui.SameLine()
imgui.TextDisabled(tostring(farm))
imgui.Text(u8'Культура:') imgui.SameLine()
imgui.TextDisabled(scrop)
imgui.SetCursorPosX((imgui.GetWindowSize().x-imgui.CalcTextSize('angel.wqxx').x)/2)
imgui.TextDisabled('angel.wqxx')
imgui.End()
end
end
function samp.onShowDialog(id, s, t, b1, b2 ,text)
if active.v then
if id == 15182 then
sampSendDialogResponse(id, (SelectedCrop.v == 0 and choosing) and 1 or (getCharModel(PLAYER_PED) == 132 and 0 or 1), (SelectedCrop.v == 0 and choosing) and 1 or 0, _)
choosing = SelectedCrop.v == 0 and choosing or false
return false
end
if id == 15161 then
if loop == 2 then
sampSendDialogResponse(id, 1, 0, _)
else
sampSendDialogResponse(id, 1, 1, _)
end
return false
elseif id == 15162 then
if loop == 1 or loop == 5 then
sampSendDialogResponse(id, 1, 0, _)
hands = false
return false
elseif loop == 2 then
local i = 0
for n in text:gmatch('[^\r\n]+') do
if n:find(u8:decode(scrop)) then
sampSendDialogResponse(id, 1, i-1, _)
hands = false
return false
end
i = i + 1
end
elseif loop == 3 then
sampSendDialogResponse(id, 1, 2, _)
hands = false
return false
elseif loop == 4 then
sampSendDialogResponse(id, 1, 1, _)
hands = false
return false
end
elseif id == 15184 then
local i = 0
for n in text:gmatch('[^\r\n]+') do
if n:find(u8:decode(scrop)) then
sampSendDialogResponse(id, 1, i, _)
return false
end
i = i + 1
end
end
if t:find('Багажник') then sampSendDialogResponse(id, 0) return false end -- Фикс хуйни
if choosing then
if id == 705 then sampSendDialogResponse(id, 1, 7) return false end
if id == 15160 then
local t = {}
for n in text:gmatch('[^\r\n]+') do
if n:find('Ферма №') then
local farm, tasks = n:match('Ферма №(%d)%s*(%d+)')
table.insert(t, {farm = tonumber(farm), tasks = tonumber(tasks), selected = farms[tonumber(farm)].selected})
end
end
table.sort(t, function(a, b)
if not a.selected and b.selected then return true
elseif a.selected and not b.selected then return false end
return a.tasks > b.tasks
end)
if t[1].selected then
for i = 1, 5 do
farms[i].selected = false
end
table.sort(t, function(a, b)
if not a.selected and b.selected then return true
elseif a.selected and not b.selected then return false end
return a.tasks > b.tasks
end)
end
farm = t[1].farm
farms[farm].selected = true
choosing = false
sampSendDialogResponse(id, 1, farm-1)
return false
end
if id == 15183 then
tasklist = {}
for n in text:gmatch('[^\r\n]+') do
if n:find('^%d+%.%s*(.-)%s*(%d+)%s*(.-)%s*%d+') then
local task, tasks, crop = n:match('^%d+%.%s*(.-)%s*(%d+)%s*(.-)%s*%d+')
local found = false
for i, v in ipairs(tasklist) do
if v.crop == crop then
v.tasks = v.tasks + 1
v.total = v.total + tonumber(tasks)
found = true
end
end
if not found then
table.insert(tasklist, {crop = crop, tasks = 1, total = tonumber(tasks)})
end
end
end
table.sort(tasklist, function(a, b)
if a.tasks > b.tasks then return true
elseif a.tasks < b.tasks then return false end
return a.total > b.total
end)
if #tasklist == 0 or tasklist[1].tasks < 5 then
lua_thread.create(function()
wait(0)
if bot_thread then bot_thread:terminate() loop = 0 end
wait(100)
bot_thread = lua_thread.create(bot)
print('На ферме кончились задания. Меняем ферму...')
sampAddChatMessage('[FarmBot] {FFFFFF}На ферме кончились задания. Меняем ферму...', 0x993066)
end)
end
choosing = false
sampSendDialogResponse(id, 0, 0, _)
return false
end
end
end
--print(text)
end
function samp.onCreate3DText(id, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
if text:find('Бочка с водой {31B404}%( {ffffff}ферма №'..farm) and active.v then
local water = text:match('(%d+) из %d+ литров')
if tonumber(water) < 10 then -- Скип фермы, если в бочке меньше 10л воды
lua_thread.create(function()
if bot_thread then bot_thread:terminate() loop = 0 end
wait(100)
bot_thread = lua_thread.create(bot)
print('На ферме закончилась вода. Меняем ферму...')
sampAddChatMessage('[FarmBot] {FFFFFF}На ферме закончилась вода. Меняем ферму...', 0x993066)
end)
end
end
if text:find('выкопана ямка') then
local crop = text:match('для посадки саженца "(.-)"')
for i, v in ipairs(labels) do
if getDistanceBetweenCoords3d(position.x, position.y, position.z, v.pos.x, v.pos.y, v.pos.z) <= 1 then
v.state = 'seeding'
v.crop = crop
return true
end
end
table.insert(labels, {state = 'seeding', crop = crop, pos = position})
elseif text:find('посажено') then
local crop = text:match('посажено: %"(.-)%"')
local state = 'none'
if text:find('до сбора урожая') then
state = 'growing'
elseif text:find('полить') then
state = 'watering'
elseif text:find('прополоть') then
state = 'weeding'
elseif text:find('урожай') then
state = 'harvesting'
end
for i, v in ipairs(labels) do
if getDistanceBetweenCoords3d(position.x, position.y, position.z, v.pos.x, v.pos.y, v.pos.z) <= 1 then
v.state = state
v.crop = crop
return true
end
end
table.insert(labels, {state = state, crop = crop, pos = position})
elseif text:find('свободное место') then
for i, v in ipairs(labels) do
if getDistanceBetweenCoords3d(position.x, position.y, position.z, v.pos.x, v.pos.y, v.pos.z) <= 1 then
v.state = 'free'
v.crop = 'none'
return true
end
end
table.insert(labels, {state = 'free', crop = 'none', pos = position})
end
end
function samp.onServerMessage(color, text)
if active.v then
if text:find('Вы выполнили задание') and loop == 2 then
hands = true
end
if text:find('Вы взяли') then
hands = false
elseif text:find('Вы вернули') or text:find('Вы не можете набрать воды без ведра') then
hands = true
elseif text:find('Вы набрали полное ведро воды') or text:find('У вас итак полное ведро') then
filled = true
elseif text:find('Вы выполнили задание, получено: (%d+)%$') then
local salary = text:match('Вы выполнили задание, получено: (%d+)%$')
income = income + tonumber(salary)
if not pocessed then processed = true end
elseif (text:find('Вы не можете выкопать ямку без лопаты')
or text:find('У вас нет саженца')
or text:find('Для начала возьмите ведро')
or text:find('Для прополки нужны грабли')
or text:find('Тут еще рано собирать урожай')
or text:find('У вас должно быть полное ведро воды')
or text:find('Вы не можете выкопать урожай без лопаты')
or text:find('у вас уже есть в руках урожай')
or text:find('Тут уже работает другой игрок'))
and not processed then
processed = true
elseif text:find('Вы не можете работать, так как владельцу этой фермы нечем оплачивать вашу работу') then
lua_thread.create(function()
if bot_thread then bot_thread:terminate() loop = 0 end
wait(100)
bot_thread = lua_thread.create(bot)
print('У владельца фермы кончились деньги. Меняем ферму...')
sampAddChatMessage('[FarmBot] {FFFFFF}У владельца фермы кончились деньги. Меняем ферму...', 0x993066)
end)
elseif text:find('Сейчас нет заданий на') then
lua_thread.create(function()
if bot_thread then bot_thread:terminate() loop = 0 end
wait(100)
bot_thread = lua_thread.create(bot)
print('Кончились заданияна на '..u8:decode(scrop)..'. Обновляем список...')
sampAddChatMessage('[FarmBot] {FFFFFF}Кончились задания на {993066}'..u8:decode(scrop)..'{FFFFFF}. Обновляем список...', 0x993066)
end)
end
end
end
function bot()
status = ''
wait(500)
local x, y, z = getCharCoordinates(PLAYER_PED)
if getDistanceBetweenCoords3d(x, y, z, 728.13690185547, 1799.5808105469, 1602.0047607422) <= 10 then
status = u8'Выходим из фермы'
runToPoint(728.51934814453, 1799.4985351563, 1602.0047607422)
setGameKeyState(21, 255)
wait(5000)
end
if SelectedFarm.v == 0 then
status = u8'Выбираем ферму'
choosing = true
sampSendChat('/gps')
while choosing do wait(0) end
print('Теперь бот будет работать на ферме №'..farm)
sampAddChatMessage('[FarmBot] {FFFFFF}Теперь бот будет работать на {993066}ферме №'..farm, 0x993066)
end
teleport(farms[farm].farm.x, farms[farm].farm.y, farms[farm].farm.z)
if getCharModel(PLAYER_PED) ~= 132 or SelectedCrop.v == 0 then
status = u8'Заходим в ферму'
runToPoint(438.58700561523, 1530.0145263672, 10.813278198242)
runToPoint(433.9250793457, 1518.7917480469, 11.826860427856)
wait(500)
setGameKeyState(21, 255)
wait(5000)
runToPoint(731.12725830078, 1799.9642333984, 1602.0047607422)
wait(1000)
setGameKeyState(21, 255)
wait(500)
setVirtualKeyDown(13, false)
while choosing do wait(0) pressAlt() end
status = u8'Выходим из фермы'
runToPoint(728.51934814453, 1799.4985351563, 1602.0047607422)
setGameKeyState(21, 255)
wait(5000)
end
loop = 1
hands = true
while true do
wait(0)
for i, v in ipairs(tasklist) do
if v.tasks >= 5 then
scrop = u8(v.crop)
status = u8'Ищем грядки'
count = checkLabels()
wait(0)
teleport(farms[farm].barn.x, farms[farm].barn.y, farms[farm].barn.z) -- амбар
if count > 0 then
while hands do wait(500) if hands then pressAlt() status = u8'Берём '..(loop == 2 and u8'саженец' or u8'инструмент') end end
if loop == 1 then
for i, v in ipairs(labels) do
if checkSquare(v.pos.x, v.pos.y) then
if v.state == 'free' then
status = u8'Вскапываем грядку'
bed = bed + 1
teleport(v.pos.x, v.pos.y, v.pos.z)
wait(500)
pressAlt()
wait(500)
processed = false
while not processed do wait(500) if not processed then pressAlt() end end
end
end
end
elseif loop == 2 then
for i, v in ipairs(labels) do
if checkSquare(v.pos.x, v.pos.y) then
if v.state == 'seeding' and v.crop == u8:decode(scrop) then
status = u8'Сажаем саженец'
bed = bed + 1
teleport(v.pos.x, v.pos.y, v.pos.z)
wait(500)
processed = false
while not processed do wait(500) if not processed then pressAlt() end end
status = u8'Берём саженец'
teleport(farms[farm].barn.x, farms[farm].barn.y, farms[farm].barn.z) -- амбар
wait(500)
hands = true
while hands do wait(0) pressAlt() end
end
end
end
elseif loop == 3 then
for i, v in ipairs(labels) do
if checkSquare(v.pos.x, v.pos.y) then
if v.state == 'watering' and v.crop == u8:decode(scrop) then
status = u8'Набираем ведро'
bed = bed + 1
teleport(farms[farm].barrel.x, farms[farm].barrel.y, farms[farm].barrel.z) -- бочка
wait(500)
filled = false
while not filled do
wait(0)
status = u8'Набираем ведро'
teleport(farms[farm].barrel.x, farms[farm].barrel.y, farms[farm].barrel.z)
pressAlt()
while hands do -- Фикс хуйни
wait(500)
status = u8'Берём '..(loop == 2 and u8'саженец' or u8'инструмент')
teleport(farms[farm].barn.x, farms[farm].barn.y, farms[farm].barn.z)
if hands then pressAlt() end
end
end
status = u8'Поливаем грядку'
wait(100)
teleport(v.pos.x, v.pos.y, v.pos.z)
wait(500)
processed = false
while not processed do wait(500) if not processed then pressAlt() end end
wait(200)
end
end
end
elseif loop == 4 then
for i, v in ipairs(labels) do
if checkSquare(v.pos.x, v.pos.y) then
if v.state == 'weeding' and v.crop == u8:decode(scrop) then
status = u8'Пропалываем грядку'
bed = bed + 1
teleport(v.pos.x, v.pos.y, v.pos.z)
wait(500)
processed = false
while not processed do wait(500) if not processed then pressAlt() end end
end
end
end
elseif loop == 5 then
for i, v in ipairs(labels) do
if checkSquare(v.pos.x, v.pos.y) then
if v.state == 'harvesting' and v.crop == u8:decode(scrop) then
status = u8'Собираем урожай'
bed = bed + 1
teleport(v.pos.x, v.pos.y, v.pos.z)
wait(500)
processed = false
while not processed do wait(500) if not processed then pressAlt() end end
status = u8'Относим урожай'
teleport(farms[farm].barn.x, farms[farm].barn.y, farms[farm].barn.z) -- амбар
hands = true
while hands do wait(500) if hands then pressAlt() end end
end
end
end
end
end
end
loop = loop >= 5 and 1 or loop + 1
hands = true
bed = 0
end
end
end
function teleport(x, y, z) setCharCoordinates(PLAYER_PED, x, y, z) end
function pressAlt()
--setGameKeyState(21, 1)
local x, y, z = getCharCoordinates(PLAYER_PED)
local data = allocateMemory(18)
setStructElement(data, 4, 2, 1024, true)
setStructFloatElement(data, 6, x, true)
setStructFloatElement(data, 10, y, true)
setStructFloatElement(data, 14, z, true)
sampSendSpectatorData(data)
freeMemory(data)
end
function checkLabels()
local num = 0
for i, label in ipairs(labels) do
if checkSquare(label.pos.x, label.pos.y) then
if (loop == 1 and label.state == 'free')
or (loop == 2 and label.state == 'seeding' and label.crop == u8:decode(scrop))
or (loop == 3 and label.state == 'watering' and label.crop == u8:decode(scrop))
or (loop == 4 and label.state == 'weeding' and label.crop == u8:decode(scrop))
or (loop == 5 and label.state == 'harvesting' and label.crop == u8:decode(scrop))
then
num = num + 1
end
end
end
return num
end
function checkSquare(x, y)
return x > farms[farm].corners[1].x and
x < farms[farm].corners[2].x and
y > farms[farm].corners[1].y and
y < farms[farm].corners[2].y
end
function splitMoney(n)
local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$')
return left..(num:reverse():gsub('(%d%d%d)','%1.'):reverse())..right
end
function purple_style()
imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4
style.WindowRounding = 10
style.ChildWindowRounding = 10
style.FrameRounding = 6.0
style.ItemSpacing = imgui.ImVec2(9.0, 3.0)
style.ItemInnerSpacing = imgui.ImVec2(3.0, 3.0)
style.IndentSpacing = 21
style.ScrollbarSize = 10.0
style.ScrollbarRounding = 13
style.GrabMinSize = 17.0
style.GrabRounding = 16.0
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
colors[clr.FrameBg] = ImVec4(0.46, 0.11, 0.29, 1.00)
colors[clr.FrameBgHovered] = ImVec4(0.69, 0.16, 0.43, 1.00)
colors[clr.FrameBgActive] = ImVec4(0.58, 0.10, 0.35, 1.00)
colors[clr.TitleBg] = ImVec4(0.00, 0.00, 0.00, 1.00)
colors[clr.TitleBgActive] = ImVec4(0.61, 0.16, 0.39, 1.00)
colors[clr.TitleBgCollapsed] = ImVec4(0.00, 0.00, 0.00, 0.51)
colors[clr.CheckMark] = ImVec4(0.94, 0.30, 0.63, 1.00)
colors[clr.SliderGrab] = ImVec4(0.85, 0.11, 0.49, 1.00)
colors[clr.SliderGrabActive] = ImVec4(0.89, 0.24, 0.58, 1.00)
colors[clr.Button] = ImVec4(0.46, 0.11, 0.29, 1.00)
colors[clr.ButtonHovered] = ImVec4(0.69, 0.17, 0.43, 1.00)
colors[clr.ButtonActive] = ImVec4(0.59, 0.10, 0.35, 1.00)
colors[clr.Header] = ImVec4(0.46, 0.11, 0.29, 1.00)
colors[clr.HeaderHovered] = ImVec4(0.69, 0.16, 0.43, 1.00)
colors[clr.HeaderActive] = ImVec4(0.58, 0.10, 0.35, 1.00)
colors[clr.Separator] = ImVec4(0.69, 0.16, 0.43, 1.00)
colors[clr.SeparatorHovered] = ImVec4(0.58, 0.10, 0.35, 1.00)
colors[clr.SeparatorActive] = ImVec4(0.58, 0.10, 0.35, 1.00)
colors[clr.ResizeGrip] = ImVec4(0.46, 0.11, 0.29, 0.70)
colors[clr.ResizeGripHovered] = ImVec4(0.69, 0.16, 0.43, 0.67)
colors[clr.ResizeGripActive] = ImVec4(0.70, 0.13, 0.42, 1.00)
colors[clr.TextSelectedBg] = ImVec4(1.00, 0.78, 0.90, 0.35)
colors[clr.Text] = ImVec4(1.00, 1.00, 1.00, 1.00)
colors[clr.TextDisabled] = ImVec4(0.60, 0.19, 0.40, 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] = ImVec4(0.08, 0.08, 0.08, 0.94)
colors[clr.Border] = ImVec4(0.49, 0.14, 0.31, 1.00)
colors[clr.BorderShadow] = ImVec4(0.49, 0.14, 0.31, 0.00)
colors[clr.MenuBarBg] = ImVec4(0.15, 0.15, 0.15, 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.20, 0.20, 0.20, 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.ModalWindowDarkening] = ImVec4(0.80, 0.80, 0.80, 0.35)
end
purple_style()
Последнее редактирование: