Полезные сниппеты и функции

imring

чо тут
Администратор
Lampo Team
Делитесь своими функциями, которые Вы считаете наиболее оптимальными и удобными для использования.

[b]Описание:[/b] *текст*
[b]Код:[/b]
[code=lua]*код*[/code]
[b]Пример использования:[/b]
[code=lua]*код примера*[/code]
 

imring

чо тут
Администратор
Lampo Team
MoonLoader
Описание:
удаляет метку на карте.
Lua:
local memory = require 'memory'
function deleteTargetBlip()
    removeBlip(memory.getint32(0xBA6748 + 0x2C))
    memory.setint32(0xBA6748 + 0x2C, 0)
end
 

imring

чо тут
Администратор
Lampo Team
MoonLoader
Описание:
рендерит свой бар
Lua:
local draw = ffi.cast('void (__cdecl *)(float, float, unsigned int, unsigned int, float, char, bool, bool, unsigned long, unsigned long)', 0x728640)
function draw_bar(x, y, width, height, progress, color)
    draw(x, y, width, height, progress, 0, false, true, color, color)
end
Пример:
Lua:
local ffi = require 'ffi'

local draw = ffi.cast('void (__cdecl *)(float, float, unsigned int, unsigned int, float, char, bool, bool, unsigned long, unsigned long)', 0x728640)
function draw_bar(x, y, width, height, progress, color)
    draw(x, y, width, height, progress, 0, false, true, color, color)
end

function onD3DPresent()
    draw_bar(40, 500, 400, 20, math.random(0, 100), 0xFF00FFCC)
end
 

imring

чо тут
Администратор
Lampo Team
LuaJIT-ImGui
Описание: перенос текста.
Lua:
-- https://github.com/juliettef/imgui_markdown/blob/master/imgui_markdown.h#L230
local function imgui_text_wrapped(clr, text)
    if clr then imgui.PushStyleColor(ffi.C.ImGuiCol_Text, clr) end

    text = ffi.new('char[?]', #text + 1, text)
    local text_end = text + ffi.sizeof(text) - 1
    local pFont = imgui.GetFont()

    local scale = 1.0
    local endPrevLine = pFont:CalcWordWrapPositionA(scale, text, text_end, imgui.GetContentRegionAvail().x)
    imgui.TextUnformatted(text, endPrevLine)

    while endPrevLine < text_end do
        text = endPrevLine
        if text[0] == 32 then text = text + 1 end
        endPrevLine = pFont:CalcWordWrapPositionA(scale, text, text_end, imgui.GetContentRegionAvail().x)
        if text == endPrevLine then
            endPrevLine = endPrevLine + 1
        end
        imgui.TextUnformatted(text, endPrevLine)
    end

    if clr then imgui.PopStyleColor() end
end
Использование:
Lua:
imgui_text_wrapped(imgui.ImVec4(1.0, 0.0, 0.0, 1.0) --[[red color]], 'Hello, World!')
Описание: заменяет цвет текста форматом RRGGBB(AA).
Вернуть цвет текста на стандартный (ImGuiCol_Text) - {STANDART}.
Lua:
local function imgui_text_color(text, wrapped)
    text = text:gsub('{(%x%x%x%x%x%x)}', '{%1FF}')
    local render_func = wrapped and imgui_text_wrapped or function(clr, text)
        if clr then imgui.PushStyleColor(ffi.C.ImGuiCol_Text, clr) end
        imgui.TextUnformatted(text)
        if clr then imgui.PopStyleColor() end
    end


    local color = colors[ffi.C.ImGuiCol_Text]
    for _, w in ipairs(split(text, '\n')) do
        local start = 1
        local a, b = w:find('{........}', start)
        while a do
            local t = w:sub(start, a - 1)
            if #t > 0 then
                render_func(color, t)
                imgui.SameLine(nil, 0)
            end

            local clr = w:sub(a + 1, b - 1)
            if clr:upper() == 'STANDART' then color = colors[ffi.C.ImGuiCol_Text]
            else
                clr = tonumber(clr, 16)
                if clr then
                    local r = bit.band(bit.rshift(clr, 24), 0xFF)
                    local g = bit.band(bit.rshift(clr, 16), 0xFF)
                    local b = bit.band(bit.rshift(clr, 8), 0xFF)
                    local a = bit.band(clr, 0xFF)
                    color = imgui.ImVec4(r / 255, g / 255, b / 255, a / 255)
                end
            end

            start = b + 1
            a, b = w:find('{........}', start)
        end
        imgui.NewLine()
        if #w > start then
            imgui.SameLine(nil, 0)
            render_func(color, w:sub(start))
        end
    end
end
Пример:
Lua:
imgui_text_color('{FFFFFF}text1 {STANDART}text2 {CCFF00}text3 {FF0000}text4')
 
Сверху