Lua Advanced DL (update)

markiz.desead

Потрачен
580
464
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
не говнокодьте больше, пожалуйста.
ниже прикрепил нормальную версию без говнокода.

(ну и добавил выравнивание текста по центру, а то чет как-то топорно выглядело + убрал округление вниз показателей health, distance, speed)
Кому не похуй на говнокод, кроме таких, как ты? Пиздец, чел, обычный юзер не будет смотреть на строчки и дрочить на них, всем похуй, кроме тебя и ещё каких-то экспертов.

Не нравится, пиши свой подобный скрипт и выкладывай
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,743
Так тут меню состоит из имгуи, остальной рендер через d3d, где тут имгуи тогда😶
 
  • Нравится
Реакции: James Saula

пицца с арбузом

Известный
599
268
1632240283212.png

че за 2 слой на модели?
хуево выглядят пробелы, если использовать не все пункты
 

shitcodes

Известный
Автор темы
1,430
658

inxanity!

Известный
388
119
Бля ты не можешь посчитать двери?) там только автобус и пару тачек отличается, а так в мотиках два места
бля ты не можешь посчитать сколько хп у твоего авто?) удар на скорости ~100 км/ч в стену отнимает 200хп c 1500, там только полиц кар и пару авто отличаеться
 
  • Нравится
Реакции: atizoff

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,743
Можно же было постараться.
У тебя несколько переменных были пустыми и не задействованы вообще.
imgui.Process = windowRender.v достаточно в бесконечном цикле.
Массивы поизучай, будет намного удобнее делать многие вещи. Также не лишним было бы тернарные операции и лямбды.
Также, когда ты получаешь переменные о результате транспорта, то лучше сразу проверять на его видимость, чтоб было меньше нагрузки. То есть в переменных ничего не будет храниться пока ты не видишь транспорт, а получается и нет смысла получать результат транспорта который находится сзади тебя.
Я чуть упростил, не писал так сложно, надеюсь ты сможешь понять.
Lua:
local imgui = require 'imgui'
--imgui vars
local showhealth = imgui.ImBool(false)
local showcolours = imgui.ImBool(false)
local showid = imgui.ImBool(false)
local showmodel = imgui.ImBool(false)
local showspeed = imgui.ImBool(false)
local showdistance = imgui.ImBool(false)
local windowRender = imgui.ImBool(false)
--other vars
local active = false
local font = renderCreateFont("Arial", 8, 5)
local sw, sh = getScreenResolution()

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('adl', function() active = not active end)
    sampRegisterChatCommand('adl.set', function() windowRender.v = not windowRender.v end)
    while true do
        wait(0)
        imgui.Process = windowRender.v
        for i = 1, 2000 do
            local result, carHandle = sampGetCarHandleBySampVehicleId(i)
            if result and isCarOnScreen(carHandle) then
                local carX, carY, carZ = getCarCoordinates(carHandle)
                local myX, myY, myZ = getCharCoordinates(playerPed)
                local cdistance = getDistanceBetweenCoords3d(carX, carY, carZ, myX, myY, myZ)
                if cdistance <= 25 then
                    local infoPosX, infoPosY = convert3DCoordsToScreen(carX, carY, carZ)
                    local colour1, colour2 = getCarColours(carHandle)
                    local health, speed = getCarHealth(carHandle), getCarSpeed(carHandle)
                    local carmodel = getCarModel(carHandle) < 612 and getNameOfVehicleModel(getCarModel(carHandle)) or 'Luxe Авто. Название будет добавлено в скором времени'

                    local tSpeed = showspeed.v and 'Speed: '..math.floor(tostring(speed))..'\n' or ''
                    local tId = showid.v and 'ID: '..i..'\n' or ''
                    local tHealth = showhealth.v and 'Health: '..health..'\n' or ''
                    local tModel = showmodel.v and 'Model: '..carmodel..' ('..getCarModel(carHandle)..')\n' or ''
                    local tColors = showcolours.v and 'Colours: '..colour1..' '..colour2..'\n' or ''
                    local tDistance = showdistance.v and 'Distance: '..math.floor(cdistance) or ''
                    local text = tSpeed..tId..tHealth..tModel..tColors..tDistance
                    if showspeed.v or showhealth.v or showid.v or showcolours.v or showdistance.v or showmodel.v then
                        renderFontDrawText(font, text, infoPosX+5,infoPosY, 0xFFFFFFFF)
                    end
                end
            end
        end
    end
end

local arrayVars = {showspeed, showhealth, showid, showcolours, showdistance, showmodel}
function imgui.OnDrawFrame()
    if windowRender.v then
        imgui.SetNextWindowSize(imgui.ImVec2(250,300), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(sw/5.5, sh/2.7), imgui.Cond.FirstUseEver)
        imgui.Begin('Settings', windowRender)
        imgui.Text('Choose active functions:')
        imgui.Columns(2, id, false)
        imgui.Checkbox('Show speed', showspeed)
        imgui.Checkbox('Show health', showhealth)
        imgui.Checkbox('Show id', showid)
        imgui.Checkbox('Show colours', showcolours)
        imgui.Checkbox('Show distance', showdistance)
        imgui.Checkbox('Show model', showmodel)
        imgui.NextColumn()
        if imgui.Button('On all') then
            for k, v in ipairs(arrayVars) do v.v = true end
        end
        if imgui.Button('Off all') then
            for k, v in ipairs(arrayVars) do v.v = false end
        end
        imgui.Columns(1, id, false)
        imgui.End()
    end
end

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    local ImVec2 = imgui.ImVec2

    style.WindowPadding = ImVec2(15, 15)
    style.WindowRounding = 5.0
    style.FramePadding = ImVec2(5, 5)
    style.FrameRounding = 4.0
    style.ItemSpacing = ImVec2(12, 8)
    style.ItemInnerSpacing = ImVec2(8, 6)
    style.IndentSpacing = 25.0
    style.ScrollbarSize = 15.0
    style.ScrollbarRounding = 9.0
    style.GrabMinSize = 5.0
    style.GrabRounding = 3.0

    colors[clr.Text] = ImVec4(0.80, 0.80, 0.83, 1.00)
    colors[clr.TextDisabled] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.WindowBg] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ChildWindowBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.PopupBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.Border] = ImVec4(0.80, 0.80, 0.83, 0.88)
    colors[clr.BorderShadow] = ImVec4(0.92, 0.91, 0.88, 0.00)
    colors[clr.FrameBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.FrameBgHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.FrameBgActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.TitleBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.TitleBgCollapsed] = ImVec4(1.00, 0.98, 0.95, 0.75)
    colors[clr.TitleBgActive] = ImVec4(0.07, 0.07, 0.09, 1.00)
    colors[clr.MenuBarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ScrollbarGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ScrollbarGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ComboBg] = ImVec4(0.19, 0.18, 0.21, 1.00)
    colors[clr.CheckMark] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
    colors[clr.SliderGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.Button] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.ButtonHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
    colors[clr.ButtonActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.Header] = ImVec4(0.10, 0.09, 0.12, 1.00)
    colors[clr.HeaderHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.HeaderActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.ResizeGrip] = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.ResizeGripHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
    colors[clr.ResizeGripActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton] = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered] = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive] = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotLinesHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.PlotHistogram] = ImVec4(0.40, 0.39, 0.38, 0.63)
    colors[clr.PlotHistogramHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
    colors[clr.TextSelectedBg] = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
end
apply_custom_style()
UPD: Также можно сделать одну команду, просто добавить аргумент .set, вместо двух команд. Либо использовать хук.
Вообще лучше переходи на mimgui, там проще делать некоторые вещи и сам ImGui новее.
 

Вложения

  • adl.lua
    6.7 KB · Просмотры: 13
  • Нравится
  • Влюблен
Реакции: James Saula и shitcodes

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,761
11,191
можешь еще добавить возможность не переносить текст на новую строку, а так же добавить возможность изменять порядок строк, например как тут:
1632247268444.png
1632247280942.png

1632247295081.png

Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local window = imgui.ImBool(false)

local settings = {
    font = {
        name = 'Tahoma',
        size = 13,
        flags = 5,
    },
    main = {
        dist = 50,
    }
}

local list = {
    {'Car HP', hp, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car ID', id, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car Model ID', modelid, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car Model ID Name', model, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car Driver', driver, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car Coordinates', pos, imgui.ImBool(false), imgui.ImBool(true)},
    {'Car Colors', colors, imgui.ImBool(false), imgui.ImBool(true)},
}

local font = renderCreateFont('Tahoma', 13, 5)

function compileString()
    for i = 1, #list do
        text = text..''..list[i][1]..(list[i][3] and ', ' or '\n')
    end
    print(text)
end


local active = false

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adl', function()
        active = not active
    end)
    imgui.Process = false
    window.v = true  --show window
    while true do
        wait(0)
        imgui.Process = window.v
        if active then
            for k, v in ipairs(getAllVehicles()) do
                local myX, myY, myZ = getCharCoordinates(PLAYER_PED)
                local x, y, z = getCarCoordinates(v)
                if isCarOnScreen(v) and getDistanceBetweenCoords3d(myX, myY, myZ, x, y, z) <= settings.main.dist then
                    local hp = getCarHealth(v)
                    local result, id = sampGetVehicleIdByCarHandle(v)
                    local modelid = getCarModel(v)
                    local model_ = getNameOfVehicleModel(modelid)
                    if not model_ then model = 'unknown' else model = model_ end -- что бы скрипт не крашился если ты сел в машину, названия которой нет в игре (например в лаунчере арз)
                    local driverPedHandle = getDriverOfCar(v)
                    local driverId = select(2, sampGetPlayerIdByCharHandle(driverPedHandle))
                    if driverId == -1 then driver = 'No driver' else driver = sampGetPlayerNickname(driverId)..' ['..driverId..']' end
                    local color1, color2 = getCarColours(v)
                    local color = color1..', '..color2
                    local pos = string.format('%.0f', x)..', '..string.format('%.0f', y)..', '..string.format('%.0f', z)
                    local rX, rY = convert3DCoordsToScreen(x, y, z)
                    local data = {hp, id, modelid, model, driver, pos, color}
                    local text = ''
                    for i = 1, #list do
                        if list[i][4].v then text = text..''..list[i][1]..': '..data[i]..(list[i][3].v and ', ' or '\n') end
                    end
                    renderFontDrawText(font, text, rX, rY, 0xFFFFFFFF, 0x90000000)
                end
            end
        end
    end
end

function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        imgui.Begin('Advanced DL ( /adl )', window)
        for i = 1, #list do
            imgui.Checkbox(u8(list[i][1]), list[i][4])
            imgui.SameLine()
            imgui.SetCursorPosX(140)
            if imgui.Button('/\\##'..tostring(i), imgui.ImVec2(20, 20)) then
                local TEMP_FROM = list[i]
                local TEMP_TO = list[i - 1]
                list[i] = TEMP_TO
                list[i - 1] = TEMP_FROM
            end
            imgui.SameLine()
            if imgui.Button('\\/##'..tostring(i), imgui.ImVec2(20, 20)) then
                local TEMP_FROM = list[i]
                local TEMP_TO = list[i + 1]
                list[i] = TEMP_TO
                list[i + 1] = TEMP_FROM
            end
            imgui.SameLine()
            imgui.Checkbox('##'..tostring(i), list[i][3])
            if imgui.IsItemHovered() then
                imgui.BeginTooltip()
                imgui.Text('Show on previous line')
                imgui.EndTooltip()
            end
        end
        imgui.End()
    end
end
в переменной лист 1 - название, 2 - не используется (забыл удалить), 3 - рисовать на прошлой строке, 4 - рисовать ли вообще

аБаЛдЕтЬ кто-то юзает имгуи паузу!
 

shitcodes

Известный
Автор темы
1,430
658
обновил
- оптимизация кода (спасибо @PanSeek and @chapo
- возможность настроить дистанцию срабатывания
-рендеринг статуса дверей (открыто закрыто)


🙂
 
Последнее редактирование:

sаnеk

Всефорумный sanek
Друг
2,107
2,057
обновил
- оптимизация кода (спасибо @PanSeek and @chapo
- возможность настроить дистанцию срабатывания
-рендеринг статуса дверей (открыто закрыто)


🙂
[07:28:57.463224] (error) advdl2.1.lua: attempt to call a nil value
stack traceback:
[07:28:57.464225] (error) advdl2.1.lua: Script died due to an error. (121ECF14)