Исходник Underground Invisible

™ ChipFamily

По ту сторону надежды.
Автор темы
5,144
1,983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В теме с кряком я кидал сурс, закину отдельной темой дабы мне постоянно не писали в личные сообщение где скачать.
Lua:
local event = require('lib.samp.events')
local imgui = require('imgui')
local inicfg = require('inicfg')

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local i_menu = imgui.ImBool(false)
local i_allert = imgui.ImBool(true)
local i_onfoot = imgui.ImBool(true)
local i_incar = imgui.ImBool(true)
local i_onfoot_glubina = imgui.ImInt(5.0)
local i_incar_glubina = imgui.ImInt(5.0)
local i_autovisota = imgui.ImBool(false)
local i_litespusk = imgui.ImBool(false)

local invis_down = false
local invis_state = false
local invis_priv = true

function imgui.OnDrawFrame()
    local xw, yw = getScreenResolution()
    if i_menu.v then
        imgui.SetNextWindowSize(imgui.ImVec2(600, 210), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(xw/2 - 200, yw/2), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Invisible v0.3.4 | by MrCreepTon', i_menu, imgui.WindowFlags.NoResize)
        imgui.BeginChild('##bar', imgui.ImVec2(300, 175), true)
        imgui.Checkbox(u8'Onfoot невидимка', i_onfoot)
        if i_onfoot.v then
            imgui.SliderInt(u8'Глубина##1', i_onfoot_glubina, 2, 150)
        end
        imgui.Checkbox(u8'Incar невидимка', i_incar)
        if i_incar.v then
            imgui.SliderInt(u8'Глубина##2', i_incar_glubina, 2, 150)
        end
        imgui.Separator()
        if invis_priv == true then
            imgui.TextColoredRGB('Статус привязки: {00DD00}Активировано')
        else
            imgui.TextColoredRGB('Статус привязки: {FF5656}Не активировано')
        end
        imgui.TextColoredRGB('Ваш код: {2CB6DD}'..getserial())
        imgui.TextColoredRGB('ВК разработчика: {2CB6DD}vk.com/haclourred')
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild('##settings', imgui.ImVec2(280, 175), true)
        imgui.Checkbox(u8'Оповещения в чат', i_allert)
        imgui.Checkbox(u8'Автоподбор высоты земли', i_autovisota)
        imgui.Checkbox(u8'Плавный спуск', i_litespusk)
        if invis_down then
            imgui.TextColoredRGB('{FF5656}Внимание! Скрипт опускает вас под землю...')
        else
            imgui.Text(u8'')
        end
        if invis_state then
            if imgui.Button(u8'Выключить инвиз', imgui.ImVec2(-0.1, 20)) then
                invis()
            end
        else
            if imgui.Button(u8'Включить инвиз', imgui.ImVec2(-0.1, 20)) then
                invis()
            end
        end
        if imgui.Button(u8'Сохранить настройки', imgui.ImVec2(-0.1, 20)) then
            inicfg.save({
                settings =
                {
                    onfoot = i_onfoot.v,
                    incar = i_incar.v,
                    onfoot_glubina = i_onfoot_glubina.v,
                    incar_glubina = i_incar_glubina.v,
                    allert = i_allert.v,
                    autovisota = i_autovisota.v,
                    litespusk = i_litespusk.v
                }
            }, 'invisible0.3.4')
        end
        if imgui.Button(u8'Сбросить настройки', imgui.ImVec2(-0.1, 20)) then
            inicfg.save({
                settings =
                {
                    onfoot = true,
                    incar = true,
                    onfoot_glubina = 5,
                    incar_glubina = 5,
                    allert = true,
                    autovisota = false,
                    litespusk = false
                }
            }, 'invisible0.3.4')
            i_allert = imgui.ImBool(true)
            i_onfoot = imgui.ImBool(true)
            i_incar = imgui.ImBool(true)
            i_onfoot_glubina = imgui.ImInt(5.0)
            i_incar_glubina = imgui.ImInt(5.0)
            i_autovisota = imgui.ImBool(false)
            i_litespusk = imgui.ImBool(false)
        end
        imgui.EndChild()
        imgui.End()
    end
end

function main()
    repeat wait(0) until isSampAvailable()
    repeat wait(0) until invis_priv == true
    local inik = inicfg.load(nil, 'invisible0.3.4')
    if inik == nil then
        inicfg.save({
            settings =
            {
                onfoot = true,
                incar = true,
                onfoot_glubina = 5,
                incar_glubina = 5,
                allert = true,
                autovisota = false,
                litespusk = false
            }
        }, 'invisible0.3.4')
        sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}INI файл не найден, он автоматически создан!', -1)
    end
    local inik = inicfg.load(nil, 'invisible0.3.4')
    i_onfoot.v = inik.settings.onfoot
    i_incar.v = inik.settings.incar
    i_onfoot_glubina.v = inik.settings.onfoot_glubina
    i_incar_glubina.v = inik.settings.incar_glubina
    i_allert.v = inik.settings.allert
    i_autovisota.v = inik.settings.autovisota
    i_litespusk.v = inik.settings.litespusk
    wait(2000)
    sampRegisterChatCommand('invis', invis)
    sampRegisterChatCommand('invismenu', menu)
    if i_allert.v then
        sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Загружен!', -1)
        sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Автор: {2CB6DD}MrCreepTon', -1)
    end
    while true do
        wait(0)
        imgui.Process = i_menu.v
    end
end

function menu()
    i_menu.v = not i_menu.v
end

function invis()
    if invis_state then
        lua_thread.create(up)
        invis_state = false
    else
        lua_thread.create(down)
        invis_state = true
    end
end

function down()
    if isCharOnFoot(PLAYER_PED) then
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        local Zt = Z - i_onfoot_glubina.v
        local oZ = Z
        invis_down = true
        while Z > Zt do
            Z = Z - 1
            local data = samp_create_sync_data('player')
            data.health = getCharHealth(PLAYER_PED)
            data.armor = getCharArmour(PLAYER_PED)
            data.weapon = getCurrentCharWeapon(PLAYER_PED)
            data.position.x = X
            data.position.y = Y
            data.position.z = Z
            data.send()
            if i_litespusk.v then
                wait(10)
            end
        end
        invis_down = false
        if i_allert.v then
            sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Включен!', -1)
        end
    else
        local veh = getCarCharIsUsing(PLAYER_PED)
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        local Zt = Z - i_incar_glubina.v
        invis_down = true
        while Z > Zt do
            Z = Z - 1
            local data = samp_create_sync_data('vehicle')
            data.vehicleHealth = getCarHealth(veh)
            data.playerHealth = getCharHealth(PLAYER_PED)
            data.armor = getCharArmour(PLAYER_PED)
            data.currentWeapon = getCurrentCharWeapon(PLAYER_PED)
            data.position.x = X
            data.position.y = Y
            data.position.z = Z
            data.send()
            if i_litespusk.v then
                wait(10)
            end
        end
        invis_down = false
        if i_allert.v then
            sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Включен!', -1)
        end
    end
end

function up()
    if isCharOnFoot(PLAYER_PED) then
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        local Zt = Z - i_onfoot_glubina.v
        invis_down = true
        while Zt < Z do
            Zt = Zt + 1
            local data = samp_create_sync_data('player')
            data.health = getCharHealth(PLAYER_PED)
            data.armor = getCharArmour(PLAYER_PED)
            data.weapon = getCurrentCharWeapon(PLAYER_PED)
            data.position.x = X
            data.position.y = Y
            data.position.z = Zt
            data.send()
            if i_litespusk.v then
                wait(10)
            end
        end
        invis_down = false
        if i_allert.v then
            sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Выключен!', -1)
        end
    else
        local veh = getCarCharIsUsing(PLAYER_PED)
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        local Zt = Z - i_incar_glubina.v
        invis_down = true
        while Zt < Z do
            Zt = Zt + 1
            local data = samp_create_sync_data('vehicle')
            data.vehicleHealth = getCarHealth(veh)
            data.playerHealth = getCharHealth(PLAYER_PED)
            data.armor = getCharArmour(PLAYER_PED)
            data.currentWeapon = getCurrentCharWeapon(PLAYER_PED)
            data.position.x = X
            data.position.y = Y
            data.position.z = Zt
            data.send()
            if i_litespusk.v then
                wait(10)
            end
        end
        invis_down = false
        if i_allert.v then
            sampAddChatMessage('{2CB6DD}[Invisible]: {FFFFFF}Выключен!', -1)
        end
    end
end

function async_http_request(method, url, args, resolve, reject)
    local request_lane = lanes.gen('*', {package = {path = package.path, cpath = package.cpath}}, function()
        local requests = require 'requests'
        local ok, result = pcall(requests.request, method, url, args)
        if ok then
            result.json, result.xml = nil, nil -- cannot be passed through a lane
            return true, result
        else
            return false, result -- return error
        end
    end)
    if not reject then reject = function() end end
    lua_thread.create(function()
        local lh = request_lane()
        while true do
            local status = lh.status
            if status == 'done' then
                local ok, result = lh[1], lh[2]
                if ok then resolve(result) else reject(result) end
                return
            elseif status == 'error' then
                return reject(lh[1])
            elseif status == 'killed' or status == 'cancelled' then
                return reject(status)
            end
            wait(0)
        end
    end)
end

function event.onSendPlayerSync(data)
    if invis_down then
        return false
    elseif invis_state and i_onfoot.v then
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        if i_autovisota.v then
            local Zt = getGroundZFor3dCoord(X, Y, Z + 100)
            data.position.z = Zt - i_onfoot_glubina.v
        else
            data.position.z = Z - i_onfoot_glubina.v
        end
    end
end

function event.onPassengerSync(data)
    if invis_state and i_incar.v then
        return false
    end
end

function event.onSendVehicleSync(data)
    if invis_down then
        return false
    elseif invis_state and i_incar.v then
        local X, Y, Z = getCharCoordinates(PLAYER_PED)
        if i_autovisota.v then
            local Zt = getGroundZFor3dCoord(X, Y, Z + 100)
            data.position.z = Zt - i_incar_glubina.v
        else
            data.position.z = Z - i_incar_glubina.v
        end
    end
end

function getserial()
    local ffi = require("ffi")
    ffi.cdef[[
    int __stdcall GetVolumeInformationA(
    const char* lpRootPathName,
    char* lpVolumeNameBuffer,
    uint32_t nVolumeNameSize,
    uint32_t* lpVolumeSerialNumber,
    uint32_t* lpMaximumComponentLength,
    uint32_t* lpFileSystemFlags,
    char* lpFileSystemNameBuffer,
    uint32_t nFileSystemNameSize
    );
    ]]
    local serial = ffi.new("unsigned long[1]", 0)
    ffi.C.GetVolumeInformationA(nil, nil, 0, serial, nil, nil, nil, 0)
    return serial[0]
end

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

    style.WindowRounding = 2.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.84)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 2.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    -- style.Alpha =
    -- style.WindowPadding =
    -- style.WindowMinSize =
    -- style.FramePadding =
    -- style.ItemInnerSpacing =
    -- style.TouchExtraPadding =
    -- style.IndentSpacing =
    -- style.ColumnsMinSpacing = ?
    -- style.ButtonTextAlign =
    -- style.DisplayWindowPadding =
    -- style.DisplaySafeAreaPadding =
    -- style.AntiAliasedLines =
    -- style.AntiAliasedShapes =
    -- style.CurveTessellationTol =

    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.FrameBg]                = ImVec4(0.16, 0.29, 0.48, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)
    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.CheckMark]              = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Button]                 = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.06, 0.53, 0.98, 1.00)
    colors[clr.Header]                 = ImVec4(0.26, 0.59, 0.98, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(0.26, 0.59, 0.98, 0.80)
    colors[clr.HeaderActive]           = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.26, 0.59, 0.98, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.26, 0.59, 0.98, 0.95)
    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.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.80, 0.80, 0.80, 0.35)
end

apply_custom_style()


function samp_create_sync_data(sync_type, copy_from_player)
    local ffi = require 'ffi'
    local sampfuncs = require 'sampfuncs'
    -- from SAMP.Lua
    local raknet = require 'samp.raknet'

    copy_from_player = copy_from_player or true
    local sync_traits = {
        player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC, sampStorePlayerOnfootData},
        vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC, sampStorePlayerIncarData},
        passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC, sampStorePlayerPassengerData},
        aim = {'AimSyncData', raknet.PACKET.AIM_SYNC, sampStorePlayerAimData},
        trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC, sampStorePlayerTrailerData},
        unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC, nil},
        bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC, nil},
        spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC, nil}
    }
    local sync_info = sync_traits[sync_type]
    local data_type = 'struct ' .. sync_info[1]
    local data = ffi.new(data_type, {})
    local raw_data_ptr = tonumber(ffi.cast('uintptr_t', ffi.new(data_type .. '*', data)))
    -- copy player's sync data to the allocated memory
    if copy_from_player then
        local copy_func = sync_info[3]
        if copy_func then
            local _, player_id
            if copy_from_player == true then
                _, player_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
            else
                player_id = tonumber(copy_from_player)
            end
            copy_func(player_id, raw_data_ptr)
        end
    end
    -- function to send packet
    local func_send = function()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, sync_info[2])
        raknetBitStreamWriteBuffer(bs, raw_data_ptr, ffi.sizeof(data))
        raknetSendBitStreamEx(bs, sampfuncs.HIGH_PRIORITY, sampfuncs.UNRELIABLE_SEQUENCED, 1)
        raknetDeleteBitStream(bs)
    end
    -- metatable to access sync data and 'send' function
    local mt = {
        __index = function(t, index)
            return data[index]
        end,
        __newindex = function(t, index, value)
            data[index] = value
        end
    }
    return setmetatable({send = func_send}, mt)
end

function imgui.TextColoredRGB(text)
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], u8(text[i]))
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(u8(w)) end
        end
    end

    render_text(text)
end
 
  • Bug
Реакции: Shepi