Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- https://vk.com/haclourred
- 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
Add Comment
Please, Sign In to add comment