• На форуме разыгрывается более 300 ключей на приватные читы! Для этого нужно всего-лишь нажать соответствующую кнопку в теме!

    Подробности по ссылке:
    https://t.me/yougame_official/66

Дайте cheat revealer для Skeet crack

Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2024
Сообщения
18
Реакции[?]
2
Поинты[?]
2K
Дайте луа которая показывает кто с каким читом как луа на примо unmatched gg
 
Эксперт
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
1,388
Реакции[?]
449
Поинты[?]
5K
ахахах кому не похуй у кого какой чит бляяяяяядь
хвхашеры вы такие угарные, это пиздец
 
Imgui Seller
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2023
Сообщения
411
Реакции[?]
40
Поинты[?]
38K
cheat_revealer.lua:
-- | LEAK BY PILOT (GS BETA, SON OF OSU!TERIK), CONTACT p.#2527

local uilib = require("gamesense/uilib")
local http = require("gamesense/http")
local ffi = require("ffi")
local bit = require("bit")
local color = require("gamesense/color")
local filesystem_interface = ffi.cast(ffi.typeof("void***"), client.create_interface("filesystem_stdio.dll", "VFileSystem017"))
local filesystem_remove_file = ffi.cast("void (__thiscall*)(void*, const char*, const char*)", filesystem_interface[0][20])
local filesystem_create_directories = ffi.cast("void (__thiscall*)(void*, const char*, const char*)", filesystem_interface[0][22])
local filesystem_find = ffi.cast("const char* (__thiscall*)(void*, const char*, int*)", filesystem_interface[0][32])

local function remove_file(file, path_id)
    filesystem_remove_file(filesystem_interface, file, path_id)
end

local function create_directories(file, path_id)
    filesystem_create_directories(filesystem_interface, file, path_id)
end

local exists = function(file)
    local int_ptr = ffi.new("int[1]")
    local res = filesystem_find(filesystem_interface, file, int_ptr)
    if res == ffi.NULL then
        return nil
    end

    return int_ptr, ffi.string(res)
end

if not exists("materials\\panorama\\images\\icons\\revealer") then
    create_directories("materials\\panorama\\images\\icons\\revealer", "revealer")
    create_directories("materials\\panorama\\images\\icons\\revealer\\multicolored", "multicolored")
    create_directories("materials\\panorama\\images\\icons\\revealer\\unicolored", "unicolored")
    create_directories("materials\\panorama\\images\\icons\\revealer\\nadoryha", "nadoryha")
end

local missing_icons = {}
local downloaded_icons = {}

local function download_icon(path, cheat)
    local file_path = ("csgo/materials/panorama/images/icons/revealer/%s/%s.png"):format(path, cheat)

    http.get(("https://ghproxy.com/https://raw.githubusercontent.com/dave3x8/revealer-icons/main/%s/%s.png"):format(path, cheat), function(status, response)
        if not status then
            return error("Revealer: Couldn't retrieve " .. path .. " " .. cheat:upper() .. " icon due to " .. response.status_message:lower())
        end

        writefile(file_path, response.body)

        downloaded_icons[#downloaded_icons + 1] = path .. " " .. cheat:upper()
    end)
end

for path, cheats in pairs({
    multicolored = {
        "nl1",
        "nl2",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    },
    unicolored = {
        "nl1",
        "nl2",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    },
    nadoryha = {
        "nl",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    }
}) do
    for _, cheat in ipairs(cheats) do
        local old_file = readfile("csgo/materials/panorama/images/icons/achievements/" .. path .. "_" .. cheat .. ".png")
        if not old_file and not readfile("csgo/materials/panorama/images/icons/revealer/" .. path .. "/" .. cheat .. ".png") then
            missing_icons[#missing_icons + 1] = path .. " " .. cheat:upper()
            download_icon(path, cheat)
        elseif old_file then
            writefile("csgo/materials/panorama/images/icons/revealer/" .. path .. "/" .. cheat .. ".png", old_file)
            remove_file(("materials\\panorama\\images\\icons\\achievements\\%s_%s.png"):format(path, cheat), "")
        end
    end
end

if #missing_icons > 0 then
    print("Revealer: Missing icons: " .. table.concat(missing_icons, ", "))
end

local voice_data_t = ffi.typeof([[
    struct {
        char         pad_0000[8];
        int32_t    client;
        int32_t    audible_mask;
        uint32_t xuid_low;
        uint32_t xuid_high;
        void*        voice_data;
        bool         proximity;
        bool         caster;
        char         pad_001E[2];
        int32_t    format;
        int32_t    sequence_bytes;
        uint32_t section_number;
        uint32_t uncompressed_sample_offset;
        char         pad_0030[4];
        uint32_t has_bits;
    } *
]])

local js = panorama.loadstring([[
// @ the guy trying to see what panorama i got (again?), chill bruh
let entity_panels = {}
let entity_data = {}
let event_callbacks = {}
    let SLOT_LAYOUT = `
        <root>
            <Panel style="min-width: 3px; padding-top: 2px; padding-left: 0px;" scaling='stretch-to-fit-y-preserve-aspect'>
                <Image id="smaller" textureheight="15" style="horizontal-align: center; opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; overflow: noclip; padding: 3px 5px; margin: -3px -5px;"    />
                <Image id="small" textureheight="17" style="horizontal-align: center; opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; overflow: noclip; padding: 3px 5px; margin: -3px -5px;" />
                <Image id="image" textureheight="21" style="opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; padding: 3px 5px; margin: -3px -5px; margin-top: -5px;" />
            </Panel>
        </root>
    `
    let _DestroyEntityPanel = function (key) {
        let panel = entity_panels[key]
        if(panel != null && panel.IsValid()) {
            var parent = panel.GetParent()
            let musor = parent.GetChild(0)
            musor.visible = true
            if(parent.FindChildTraverse("id-sb-skillgroup-image") != null) {
                parent.FindChildTraverse("id-sb-skillgroup-image").style.margin = "0px 0px 0px 0px"
            }
            panel.DeleteAsync(0.0)
        }
        delete entity_panels[key]
    }
    let _DestroyEntityPanels = function() {
        for(key in entity_panels){
            _DestroyEntityPanel(key)
        }
    }
    let _GetOrCreateCustomPanel = function(xuid) {
        if(entity_panels[xuid] == null || !entity_panels[xuid].IsValid()){
            entity_panels[xuid] = null
            let scoreboard_context_panel = $.GetContextPanel().FindChildTraverse("ScoreboardContainer").FindChildTraverse("Scoreboard") || $.GetContextPanel().FindChildTraverse("id-eom-scoreboard-container").FindChildTraverse("Scoreboard")
            if(scoreboard_context_panel == null){
                _Clear()
                _DestroyEntityPanels()
                return
            }
            scoreboard_context_panel.FindChildrenWithClassTraverse("sb-row").forEach(function(el){
                let scoreboard_el
                if(el.m_xuid == xuid) {
                    el.Children().forEach(function(child_frame){
                        let stat = child_frame.GetAttributeString("data-stat", "")
                        if(stat == "rank")
                            scoreboard_el = child_frame.GetChild(0)
                    })
                    if(scoreboard_el) {
                        let scoreboard_el_parent = scoreboard_el.GetParent()
                        let custom_icons = $.CreatePanel("Panel", scoreboard_el_parent, "revealer-icon", {
                        })
                        if(scoreboard_el_parent.FindChildTraverse("id-sb-skillgroup-image") != null) {
                            scoreboard_el_parent.FindChildTraverse("id-sb-skillgroup-image").style.margin = "0px 0px 0px 0px"
                        }
                        scoreboard_el_parent.MoveChildAfter(custom_icons, scoreboard_el_parent.GetChild(1))
                        let prev_panel = scoreboard_el_parent.GetChild(0)
                        prev_panel.visible = false
                        let panel_slot_parent = $.CreatePanel("Panel", custom_icons, [ICODE]icon[/ICODE])
                        panel_slot_parent.visible = false
                        panel_slot_parent.BLoadLayoutFromString(SLOT_LAYOUT, false, false)
                        entity_panels[xuid] = custom_icons
                        return custom_icons
                    }
                }
            })
        }
        return entity_panels[xuid]
    }
    let _UpdatePlayer = function(entindex, path_to_image) {
        if(entindex == null || entindex == 0)
            return
        entity_data[entindex] = {
            applied: false,
            image_path: path_to_image
        }
    }
    let _ApplyPlayer = function(entindex) {
        let xuid = GameStateAPI.GetPlayerXuidStringFromEntIndex(entindex)
        let panel = _GetOrCreateCustomPanel(xuid)
        if(panel == null)
            return
        let panel_slot_parent = panel.FindChild([ICODE]icon[/ICODE])
        panel_slot_parent.visible = true
        let panel_slot = panel_slot_parent.FindChild("image")
        panel_slot.visible = true
        panel_slot.style.opacity = "1"
        panel_slot.SetImage(entity_data[entindex].image_path)
        return true
    }
    let _ApplyData = function() {
        for(entindex in entity_data) {
            entindex = parseInt(entindex)
            let xuid = GameStateAPI.GetPlayerXuidStringFromEntIndex(entindex)
            if(!entity_data[entindex].applied || entity_panels[xuid] == null || !entity_panels[xuid].IsValid()) {
                if(_ApplyPlayer(entindex)) {
                    entity_data[entindex].applied = true
                }
            }
        }
    }
    let _Create = function() {
        event_callbacks["OnOpenScoreboard"] = $.RegisterForUnhandledEvent("OnOpenScoreboard", _ApplyData)
        event_callbacks["Scoreboard_UpdateEverything"] = $.RegisterForUnhandledEvent("Scoreboard_UpdateEverything", function(){
            _ApplyData()
        })
        event_callbacks["Scoreboard_UpdateJob"] = $.RegisterForUnhandledEvent("Scoreboard_UpdateJob", _ApplyData)
    }
    let _Clear = function() { entity_data = {} }
    let _Destroy = function() {
        // clear entity data
        _Clear()
        _DestroyEntityPanels()
        for(event in event_callbacks){
            $.UnregisterForUnhandledEvent(event, event_callbacks[event])
            delete event_callbacks[event]
        }
    }
    return {
        create: _Create,
        destroy: _Destroy,
        clear: _Clear,
        update: _UpdatePlayer,
        destroy_panel: _DestroyEntityPanels
    }
]], "CSGOHud")()

js.create()

local tab = "Visuals"
local container = "Player ESP"
local images_path = "file://{images}/icons/revealer/multicolored/%s.png"

local main_data_table

local function get_players()
    local players = {}
    local player_resource = entity.get_player_resource()

    for i = 1, globals.maxplayers() do
        repeat
            if entity.get_prop(player_resource, "m_bConnected", i) == 0 then
                if main_data_table.users[i] then
                    main_data_table.users[i] = nil
                end

                break
            else
                local flags = entity.get_prop(i, "m_fFlags")
                if not flags then
                    break
                end

                if bit.band(flags, 512) == 512 then
                    break
                end
            end

            players[#players + 1] = i
        until true
    end

    return players
end

local function find_duplicate_element(array, divisor)
    local visited_elements = {}

    for current_index = 1, #array do
        local current_element = array[current_index]

        if not visited_elements[current_element] then
            visited_elements[current_element] = true

            for next_index = current_index + 4, #array do
                if current_index % divisor == 0 then
                    if array[next_index] == current_element then
                        return true
                    end
                elseif array[next_index] == current_element then
                    return false
                end
            end
        end
    end

    return false
end


main_data_table = {
    main = uilib.new_checkbox(tab, container, "Cheat revealer"),
    display_method = uilib.new_multiselect(tab, container, "\nCheat revealer display options", {
        "Scoreboard icon",
        "Flag"
    }),
    icon_type = uilib.new_multiselect(tab, container, "\nCheat revealer icon set", {
        "Multicolored",
        "Unicolored",
        "Nado & Ryha",
        "Alternative NL icon"
    }),
    plist_handler = uilib.create_plist(),
    yeah = {
        names = {
            gs = {
                long = "gamesense",
                color = color.hex("95B80CFF")
            },
            nl = {
                long = "neverlose",
                color = color.hex("037696FF")
            },
            nw = {
                long = "nixware",
                color = color.hex("FFFFFFFF")
            },
            pd = {
                long = "pandora",
                color = color.hex("D4A9FFFF")
            },
            pr = {
                long = "primordial",
                color = color.hex("E2B6C7FF")
            },
            ot = {
                long = "onetap",
                color = color.hex("f7a414FF")
            },
            ft = {
                long = "fatality",
                color = color.hex("f00657FF")
            },
            pl = {
                long = "plaguecheat",
                color = color.hex("6BFF87FF")
            },
            ev = {
                long = "ev0lve",
                color = color.hex("42B7FFFF")
            },
            r7 = {
                long = "rifk7",
                color = color.hex("FF00FFFF")
            },
            af = {
                long = "airflow",
                color = color.hex("8E76C0FF")
            },
            wh = {
                long = "unknown",
                color = color.hex("9F9F9FFF")
            }
        },
        colored_names = {
            gs = {
                short = "\aEAEAEAFFG\a95B80CFFS",
                long = "\aEAEAEAFFgame\a95B80CFFsense"
            },
            nl = {
                short = "\a037696FFNL",
                long = "\aEAEAEAFFnever\a037696FFlose"
            },
            nw = {
                short = "\aFFFFFFFFNW",
                long = "\aFFFFFFFFnixware"
            },
            pd = {
                short = "\aD4A9FFFFPD",
                long = "\aD4A9FFFFpandora"
            },
            pr = {
                short = "\aE2B6C7FFPR",
                long = "\aE2B6C7FFprimordial"
            },
            ot = {
                short = "\aEAEAEAFFO\af7a414FFT",
                long = "\aEAEAEAFFone\af7a414FFtap"
            },
            ft = {
                short = "\af00657FFFT",
                long = "\aF00657FFfatality"
            },
            pl = {
                short = "\a6BFF87FFPLG",
                long = "\a6BFF87FFplaguecheat"
            },
            ev = {
                short = "\a42B7FFFFEV0",
                long = "\a42B7FFFFev0\aFFFFFFFFlve"
            },
            r7 = {
                short = "\a00F600FFR\aFF00FFFF7",
                long = "\a00F600FFrifk\aFF00FFFF7"
            },
            af = {
                short = "\a8E76C0FFAF",
                long = "\a8E76C0FFairflow"
            },
            wh = {
                short = false,
                long = "\a515364FFunknown"
            }
        },
    },
    users = {}
}

main_data_table.list_label = main_data_table.plist_handler:add(ui.new_label, "Cheat: " .. main_data_table.yeah.colored_names.wh.long)

local scoreboard_icon_enabled = false

main_data_table.display_method:add_callback(function(method)
    if method:contains("Scoreboard icon") then
        js.create()
    else
        js.destroy()
    end

    scoreboard_icon_enabled = method:contains("Scoreboard icon")
end)

local esp_flag_enabled = false

local last_scoreboard_icon_enabled = false
local last_esp_flag_enabled = false

local nl_path = nil

local is_multicolored = false
local is_unicolored = false
local is_nadoryha = false
local is_alternate_nl_icon = false

local icon_changed = false

main_data_table.icon_type:add_callback(function(icon_type)
    icon_changed = true
    if icon_type:contains("Unicolored") and (is_multicolored or is_nadoryha) then
        icon_type:remove("Multicolored")
        icon_type:remove("Nado & Ryha")
    elseif icon_type:contains("Multicolored") and (is_unicolored or is_nadoryha) then
        icon_type:remove("Unicolored")
        icon_type:remove("Nado & Ryha")
    elseif icon_type:contains("Nado & Ryha") and (is_multicolored or is_unicolored) then
        icon_type:remove("Unicolored")
        icon_type:remove("Multicolored")
        icon_type:remove("Alternative NL icon")
    elseif icon_type:contains("Alternative NL icon") and is_nadoryha then
        icon_type:remove("Alternative NL icon")
    else
        icon_type:add(is_multicolored and "Multicolored" or is_unicolored and "Unicolored" or is_nadoryha and "Nado & Ryha" or "Multicolored")
    end

    is_nadoryha = icon_type:contains("Nado & Ryha")
    is_unicolored = icon_type:contains("Unicolored")
    is_multicolored = icon_type:contains("Multicolored")
    nl_path = not is_nadoryha and (icon_type:contains("Alternative NL icon") and "nl2" or "nl1") or "nl"
    images_path = "file://{images}/icons/revealer/" .. (is_multicolored and "multicolored" or is_unicolored and "unicolored" or is_nadoryha and "nadoryha") .. "/%s.png"

    for _, user in pairs(main_data_table.users) do
        user.icon_set = false
    end
end)
main_data_table.icon_type:add("Multicolored")

local detection_storage_table = {
    nl = {
        sig_count = {},
        found = {}
    },
    nw = {},
    pd = {},
    ot = {},
    ft = {},
    pl = {},
    ev = {},
    r7 = {},
    af = {},
    gs = {}
}
local detector_table = {
    nl = function(packet, target)
        if packet.xuid_high == 0 then
            return
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 22)[0])

        if sig == detection_storage_table.current_signature then
            detection_storage_table.nl.sig_count[target] = (detection_storage_table.nl.sig_count[target] or 0) + 1

            if detection_storage_table.nl.sig_count[target] > 24 then
                detection_storage_table.nl.found[target] = 1

                return true
            else
                detection_storage_table.nl.sig_count[target] = nil
            end
        end

        if #detection_storage_table.nl.found > 3 then
            return false
        end

        if not detection_storage_table.nl[target] then
            detection_storage_table.nl[target] = {}
        end

        detection_storage_table.nl[target][#detection_storage_table.nl[target] + 1] = packet.xuid_high

        if #detection_storage_table.nl[target] > 24 then
            if find_duplicate_element(detection_storage_table.nl[target], 4) and packet.xuid_high ~= 0 then
                detection_storage_table.current_signature = sig
                detection_storage_table.nl[target] = {}

                return true
            end

            table.remove(detection_storage_table.nl[target], 1)
        end

        return false
    end,
    nw = function(packet, target)
        if not detection_storage_table.nw[target] then
            detection_storage_table.nw[target] = 0
        end

        if detection_storage_table.nw[target] > 34 then
            detection_storage_table.nw[target] = nil

            return true
        elseif packet.xuid_high == 0 then
            detection_storage_table.nw[target] = detection_storage_table.nw[target] + 1
        else
            detection_storage_table.nw[target] = 0
        end

        return false
    end,
    pd = function(packet, target)
        if not detection_storage_table.pd[target] then
            detection_storage_table.pd[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.pd[target] > 24 then
            return true
        elseif sig == "695B" or sig == "1B39" then
            detection_storage_table.pd[target] = detection_storage_table.pd[target] + 1
        else
            detection_storage_table.pd[target] = 0
        end

        return false
    end,
    ot = function(packet, target)
        if not detection_storage_table.ot[target] then
            detection_storage_table.ot[target] = {}
        end

        detection_storage_table.ot[target][#detection_storage_table.ot[target] + 1] = {
            sequence_bytes = packet.sequence_bytes,
            xuid_low = packet.xuid_low,
            section_number = packet.section_number,
            umcompressed_sample_offset = packet.uncompressed_sample_offset
        }

        if #detection_storage_table.ot[target] > 16 then
            local oldest_packet = detection_storage_table.ot[target][1]

            for i = 2, #detection_storage_table.ot[target] do
                local loop_packet = detection_storage_table.ot[target][i]
                if loop_packet.xuid_low ~= oldest_packet.xuid_low or loop_packet.section_number ~= oldest_packet.section_number or loop_packet.uncompressed_sample_offset ~= oldest_packet.uncompressed_sample_offset then
                    table.remove(detection_storage_table.ot[target], 1)

                    return false
                end
            end

            table.remove(detection_storage_table.ot[target], 1)

            return true
        end

        return false
    end,
    ft = function(packet, target)
        if not detection_storage_table.ft[target] then
            detection_storage_table.ft[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.ft[target] > 36 then
            return true
        elseif sig == "7FFA" or sig == "7FFB" then
            detection_storage_table.ft[target] = detection_storage_table.ft[target] + 1
        end

        return false
    end,
    pl = function(packet, target)
        if not detection_storage_table.pl[target] then
            detection_storage_table.pl[target] = 0
        end

        if detection_storage_table.pl[target] > 24 then
            return true
        elseif ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 44)[0]) == "7275" then
            detection_storage_table.pl[target] = detection_storage_table.pl[target] + 1
        else
            detection_storage_table.pl[target] = 0
        end

        return false
    end,
    ev = function(packet, target)
        if not detection_storage_table.ev[target] then
            detection_storage_table.ev[target] = {}
        end

        detection_storage_table.ev[target][#detection_storage_table.ev[target] + 1] = packet.xuid_high

        if #detection_storage_table.ev[target] > 44 then
            for i = 1, #detection_storage_table.ev[target] - 4 do
                local loop_info = detection_storage_table.ev[target][i]
                if detection_storage_table.ev[target][i + 1] + detection_storage_table.ev[target][i + 2] == detection_storage_table.ev[target][i] * 2 and detection_storage_table.ev[target][i + 4] == loop_info + 1 then
                    detection_storage_table.ev[target] = {}

                    return true
                end
            end

            table.remove(detection_storage_table.ev[target], 1)
        end

        return false
    end,
    r7 = function(packet, target)
        if not detection_storage_table.r7[target] then
            detection_storage_table.r7[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.r7[target] > 24 then
            return true
        elseif sig == "234" or sig == "134" then
            detection_storage_table.r7[target] = detection_storage_table.r7[target] + 1
        else
            detection_storage_table.r7[target] = 0
        end

        return false
    end,
    af = function(packet, target)
        if not detection_storage_table.af[target] then
            detection_storage_table.af[target] = 0
        end

        if detection_storage_table.af[target] > 24 then
            return true
        elseif ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0]) == "AFF1" then
            detection_storage_table.af[target] = detection_storage_table.af[target] + 1
        else
            detection_storage_table.af[target] = 0
        end

        return false
    end,
    gs = function(packet, target)
        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 22)[0])
        local sequence_bytes = string.sub(packet.sequence_bytes, 1, 4)

        if not detection_storage_table.gs[target] then
            detection_storage_table.gs[target] = {
                repeated = 0,
                packet = sig,
                bytes = sequence_bytes
            }
        end

        if sequence_bytes ~= detection_storage_table.gs[target].bytes and sig ~= detection_storage_table.gs[target].packet then
            detection_storage_table.gs[target].packet = sig
            detection_storage_table.gs[target].bytes = sequence_bytes
            detection_storage_table.gs[target].repeated = detection_storage_table.gs[target].repeated + 1
        else
            detection_storage_table.gs[target].repeated = 0
        end

        if detection_storage_table.gs[target].repeated >= 36 then
            detection_storage_table.gs[target] = {
                repeated = 0,
                packet = sig,
                bytes = sequence_bytes
            }

            return true
        end

        return false
    end
}

client.register_esp_flag("", 220, 220, 220, function(target)
    if not main_data_table.main.value then
        return false
    end

    if not main_data_table.users[target] or not main_data_table.users[target].cheat then
        return false
    end

    local cheat = main_data_table.users[target].cheat or "wh"

    if not esp_flag_enabled or not cheat or cheat == "wh" then
        return false
    end

    return true, (entity.is_dormant(target) and cheat or main_data_table.yeah.colored_names[cheat].short or ""):upper()
end)

local function info_update_callback()
    main_data_table.icon_type.vis = main_data_table.main.value
    main_data_table.display_method.vis = main_data_table.main.value
    scoreboard_icon_enabled = main_data_table.display_method:contains("Scoreboard icon") and main_data_table.main.value
    esp_flag_enabled = main_data_table.display_method:contains("Flag") and main_data_table.main.value

    if icon_changed then
        icon_changed = false
        for _, user in pairs(main_data_table.users) do
            user.icon_set = false
        end
    end

    if scoreboard_icon_enabled and not last_scoreboard_icon_enabled then
        last_scoreboard_icon_enabled = true

        js.create()
    elseif not scoreboard_icon_enabled and last_scoreboard_icon_enabled then
        last_scoreboard_icon_enabled = false

        for _, user in pairs(main_data_table.users) do
            user.icon_set = false
        end

        js.destroy()
    end
end

main_data_table.main:add_event_callback("paint", function()
    if not scoreboard_icon_enabled then
        return
    end

    if (not is_multicolored) and (not is_unicolored) and (not is_nadoryha) then
        return
    end

    for _, target in pairs(get_players()) do
        local user = main_data_table.users[target]
        if user then
            if not user.icon_set then
                js.update(target, images_path:format(user.cheat and (user.cheat == "nl" and nl_path or user.cheat) or target == entity.get_local_player() and "gs" or "wh"))

                user.icon_set = true
            end
        else
            main_data_table.users[target] = {}
        end
    end
end)

main_data_table.main:add_event_callback("voice", function(event)
    local packet = ffi.cast(voice_data_t, event.data)
    local target = (ffi.cast("char*", packet) + 8)[0] + 1
    if not main_data_table.users[target] then
        main_data_table.users[target] = {}
    end

    local user = main_data_table.users[target]

    for cheat_identifier, cheat_detection_function in pairs(detector_table) do
        repeat
            local cheat = user.cheat
            if user.cheat ~= cheat_identifier and (cheat_identifier ~= "nl" or user.cheat ~= "ev" and user.cheat ~= "gs" and user.cheat ~= "pl" and user.cheat ~= "pd" and user.cheat ~= "r7" and user.cheat ~= "af" and user.cheat ~= "ft") and (cheat_identifier ~= "nw" or user.cheat ~= "nl") and (cheat_identifier ~= "ev" or user.cheat ~= "pd" and user.cheat ~= "nl" and user.cheat ~= "ft") and (cheat_identifier ~= "gs" or user.cheat ~= "ev" and user.cheat ~= "ot" and user.cheat ~= "pl" and user.cheat ~= "pd" and user.cheat ~= "r7" and user.cheat ~= "ft") and (cheat_identifier ~= "ot" or user.cheat ~= "nw" and user.cheat ~= "ft" and user.cheat ~= "pd" and user.cheat ~= "pl") then
                if cheat_identifier == "ft" and (user.cheat == "nw" or user.cheat == "pd") then
                    break
                end

                if cheat_detection_function(packet, target) then
                    user.cheat = cheat_identifier
                    user.icon_set = false

                    main_data_table.plist_handler:set_state(main_data_table.list_label, target, ("Cheat: %s"):format(main_data_table.yeah.colored_names[cheat_identifier].long) or main_data_table.yeah.colored_names.wh.long)

                    if (user.cheat or "wh") == "wh" or cheat ~= cheat_identifier then
                        client.fire_event("cheat_detected", {
                            player = target,
                            cheat_id = cheat_identifier,
                            cheat_long = main_data_table.yeah.names[cheat_identifier].long,
                            cheat_color = main_data_table.yeah.names[cheat_identifier].color
                        })
                    end
                end
            end
        until true
    end
end)
main_data_table.main:add_event_callback("player_connect_full", function(event)
    local target = client.userid_to_entindex(event.userid)
    if target == entity.get_local_player() then
        main_data_table.users = {}

        js.clear()
        js.destroy()
        client.delay_call(0.5, function()
            js.create()
        end)
    else
        for _, user in pairs(main_data_table.users) do
            user[target] = {}
        end
    end
end)
main_data_table.main:add_event_callback("game_start", function()
    for _, user in pairs(main_data_table.users) do
        user.icon_set = false
    end
end)
main_data_table.main:add_callback(info_update_callback)
main_data_table.display_method:add_callback(info_update_callback)
main_data_table.icon_type:add_callback(info_update_callback)
main_data_table.main:invoke()
client.set_event_callback("shutdown", function()
    js.clear()
    js.destroy()
end)

package.preload["gamesense/cheat_revealer"] = function()
    return {
        get_cheat = function(target)
            local cheat = main_data_table.users[target].cheat or "wh"

            return {
                cheat_id = cheat,
                cheat_long = main_data_table.yeah.names[cheat].long or "unknown",
                cheat_color = main_data_table.yeah.names[cheat].color or color.hex("9F9F9FFF")
            }
        end,
        has_data = function(target)
            return main_data_table.users[target] ~= nil
        end,
        clear_data = function(target)
            if main_data_table.users[target] == nil then
                return false
            end

            main_data_table.users[target] = nil

            for _, detection in pairs(detection_storage_table) do
                detection[target] = nil
            end

            return true
        end
    }
end
 
Новичок
Статус
Оффлайн
Регистрация
9 Дек 2024
Сообщения
0
Реакции[?]
0
Поинты[?]
0
cheat_revealer.lua:
-- | LEAK BY PILOT (GS BETA, SON OF OSU!TERIK), CONTACT p.#2527

local uilib = require("gamesense/uilib")
local http = require("gamesense/http")
local ffi = require("ffi")
local bit = require("bit")
local color = require("gamesense/color")
local filesystem_interface = ffi.cast(ffi.typeof("void***"), client.create_interface("filesystem_stdio.dll", "VFileSystem017"))
local filesystem_remove_file = ffi.cast("void (__thiscall*)(void*, const char*, const char*)", filesystem_interface[0][20])
local filesystem_create_directories = ffi.cast("void (__thiscall*)(void*, const char*, const char*)", filesystem_interface[0][22])
local filesystem_find = ffi.cast("const char* (__thiscall*)(void*, const char*, int*)", filesystem_interface[0][32])

local function remove_file(file, path_id)
    filesystem_remove_file(filesystem_interface, file, path_id)
end

local function create_directories(file, path_id)
    filesystem_create_directories(filesystem_interface, file, path_id)
end

local exists = function(file)
    local int_ptr = ffi.new("int[1]")
    local res = filesystem_find(filesystem_interface, file, int_ptr)
    if res == ffi.NULL then
        return nil
    end

    return int_ptr, ffi.string(res)
end

if not exists("materials\\panorama\\images\\icons\\revealer") then
    create_directories("materials\\panorama\\images\\icons\\revealer", "revealer")
    create_directories("materials\\panorama\\images\\icons\\revealer\\multicolored", "multicolored")
    create_directories("materials\\panorama\\images\\icons\\revealer\\unicolored", "unicolored")
    create_directories("materials\\panorama\\images\\icons\\revealer\\nadoryha", "nadoryha")
end

local missing_icons = {}
local downloaded_icons = {}

local function download_icon(path, cheat)
    local file_path = ("csgo/materials/panorama/images/icons/revealer/%s/%s.png"):format(path, cheat)

    http.get(("https://ghproxy.com/https://raw.githubusercontent.com/dave3x8/revealer-icons/main/%s/%s.png"):format(path, cheat), function(status, response)
        if not status then
            return error("Revealer: Couldn't retrieve " .. path .. " " .. cheat:upper() .. " icon due to " .. response.status_message:lower())
        end

        writefile(file_path, response.body)

        downloaded_icons[#downloaded_icons + 1] = path .. " " .. cheat:upper()
    end)
end

for path, cheats in pairs({
    multicolored = {
        "nl1",
        "nl2",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    },
    unicolored = {
        "nl1",
        "nl2",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    },
    nadoryha = {
        "nl",
        "gs",
        "ft",
        "nw",
        "ev",
        "ot",
        "pd",
        "pl",
        "r7",
        "af",
        "wh"
    }
}) do
    for _, cheat in ipairs(cheats) do
        local old_file = readfile("csgo/materials/panorama/images/icons/achievements/" .. path .. "_" .. cheat .. ".png")
        if not old_file and not readfile("csgo/materials/panorama/images/icons/revealer/" .. path .. "/" .. cheat .. ".png") then
            missing_icons[#missing_icons + 1] = path .. " " .. cheat:upper()
            download_icon(path, cheat)
        elseif old_file then
            writefile("csgo/materials/panorama/images/icons/revealer/" .. path .. "/" .. cheat .. ".png", old_file)
            remove_file(("materials\\panorama\\images\\icons\\achievements\\%s_%s.png"):format(path, cheat), "")
        end
    end
end

if #missing_icons > 0 then
    print("Revealer: Missing icons: " .. table.concat(missing_icons, ", "))
end

local voice_data_t = ffi.typeof([[
    struct {
        char         pad_0000[8];
        int32_t    client;
        int32_t    audible_mask;
        uint32_t xuid_low;
        uint32_t xuid_high;
        void*        voice_data;
        bool         proximity;
        bool         caster;
        char         pad_001E[2];
        int32_t    format;
        int32_t    sequence_bytes;
        uint32_t section_number;
        uint32_t uncompressed_sample_offset;
        char         pad_0030[4];
        uint32_t has_bits;
    } *
]])

local js = panorama.loadstring([[
// @ the guy trying to see what panorama i got (again?), chill bruh
let entity_panels = {}
let entity_data = {}
let event_callbacks = {}
    let SLOT_LAYOUT = `
        <root>
            <Panel style="min-width: 3px; padding-top: 2px; padding-left: 0px;" scaling='stretch-to-fit-y-preserve-aspect'>
                <Image id="smaller" textureheight="15" style="horizontal-align: center; opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; overflow: noclip; padding: 3px 5px; margin: -3px -5px;"    />
                <Image id="small" textureheight="17" style="horizontal-align: center; opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; overflow: noclip; padding: 3px 5px; margin: -3px -5px;" />
                <Image id="image" textureheight="21" style="opacity: 0.01; transition: opacity 0.1s ease-in-out 0.0s, img-shadow 0.12s ease-in-out 0.0s; padding: 3px 5px; margin: -3px -5px; margin-top: -5px;" />
            </Panel>
        </root>
    `
    let _DestroyEntityPanel = function (key) {
        let panel = entity_panels[key]
        if(panel != null && panel.IsValid()) {
            var parent = panel.GetParent()
            let musor = parent.GetChild(0)
            musor.visible = true
            if(parent.FindChildTraverse("id-sb-skillgroup-image") != null) {
                parent.FindChildTraverse("id-sb-skillgroup-image").style.margin = "0px 0px 0px 0px"
            }
            panel.DeleteAsync(0.0)
        }
        delete entity_panels[key]
    }
    let _DestroyEntityPanels = function() {
        for(key in entity_panels){
            _DestroyEntityPanel(key)
        }
    }
    let _GetOrCreateCustomPanel = function(xuid) {
        if(entity_panels[xuid] == null || !entity_panels[xuid].IsValid()){
            entity_panels[xuid] = null
            let scoreboard_context_panel = $.GetContextPanel().FindChildTraverse("ScoreboardContainer").FindChildTraverse("Scoreboard") || $.GetContextPanel().FindChildTraverse("id-eom-scoreboard-container").FindChildTraverse("Scoreboard")
            if(scoreboard_context_panel == null){
                _Clear()
                _DestroyEntityPanels()
                return
            }
            scoreboard_context_panel.FindChildrenWithClassTraverse("sb-row").forEach(function(el){
                let scoreboard_el
                if(el.m_xuid == xuid) {
                    el.Children().forEach(function(child_frame){
                        let stat = child_frame.GetAttributeString("data-stat", "")
                        if(stat == "rank")
                            scoreboard_el = child_frame.GetChild(0)
                    })
                    if(scoreboard_el) {
                        let scoreboard_el_parent = scoreboard_el.GetParent()
                        let custom_icons = $.CreatePanel("Panel", scoreboard_el_parent, "revealer-icon", {
                        })
                        if(scoreboard_el_parent.FindChildTraverse("id-sb-skillgroup-image") != null) {
                            scoreboard_el_parent.FindChildTraverse("id-sb-skillgroup-image").style.margin = "0px 0px 0px 0px"
                        }
                        scoreboard_el_parent.MoveChildAfter(custom_icons, scoreboard_el_parent.GetChild(1))
                        let prev_panel = scoreboard_el_parent.GetChild(0)
                        prev_panel.visible = false
                        let panel_slot_parent = $.CreatePanel("Panel", custom_icons, [ICODE]icon[/ICODE])
                        panel_slot_parent.visible = false
                        panel_slot_parent.BLoadLayoutFromString(SLOT_LAYOUT, false, false)
                        entity_panels[xuid] = custom_icons
                        return custom_icons
                    }
                }
            })
        }
        return entity_panels[xuid]
    }
    let _UpdatePlayer = function(entindex, path_to_image) {
        if(entindex == null || entindex == 0)
            return
        entity_data[entindex] = {
            applied: false,
            image_path: path_to_image
        }
    }
    let _ApplyPlayer = function(entindex) {
        let xuid = GameStateAPI.GetPlayerXuidStringFromEntIndex(entindex)
        let panel = _GetOrCreateCustomPanel(xuid)
        if(panel == null)
            return
        let panel_slot_parent = panel.FindChild([ICODE]icon[/ICODE])
        panel_slot_parent.visible = true
        let panel_slot = panel_slot_parent.FindChild("image")
        panel_slot.visible = true
        panel_slot.style.opacity = "1"
        panel_slot.SetImage(entity_data[entindex].image_path)
        return true
    }
    let _ApplyData = function() {
        for(entindex in entity_data) {
            entindex = parseInt(entindex)
            let xuid = GameStateAPI.GetPlayerXuidStringFromEntIndex(entindex)
            if(!entity_data[entindex].applied || entity_panels[xuid] == null || !entity_panels[xuid].IsValid()) {
                if(_ApplyPlayer(entindex)) {
                    entity_data[entindex].applied = true
                }
            }
        }
    }
    let _Create = function() {
        event_callbacks["OnOpenScoreboard"] = $.RegisterForUnhandledEvent("OnOpenScoreboard", _ApplyData)
        event_callbacks["Scoreboard_UpdateEverything"] = $.RegisterForUnhandledEvent("Scoreboard_UpdateEverything", function(){
            _ApplyData()
        })
        event_callbacks["Scoreboard_UpdateJob"] = $.RegisterForUnhandledEvent("Scoreboard_UpdateJob", _ApplyData)
    }
    let _Clear = function() { entity_data = {} }
    let _Destroy = function() {
        // clear entity data
        _Clear()
        _DestroyEntityPanels()
        for(event in event_callbacks){
            $.UnregisterForUnhandledEvent(event, event_callbacks[event])
            delete event_callbacks[event]
        }
    }
    return {
        create: _Create,
        destroy: _Destroy,
        clear: _Clear,
        update: _UpdatePlayer,
        destroy_panel: _DestroyEntityPanels
    }
]], "CSGOHud")()

js.create()

local tab = "Visuals"
local container = "Player ESP"
local images_path = "file://{images}/icons/revealer/multicolored/%s.png"

local main_data_table

local function get_players()
    local players = {}
    local player_resource = entity.get_player_resource()

    for i = 1, globals.maxplayers() do
        repeat
            if entity.get_prop(player_resource, "m_bConnected", i) == 0 then
                if main_data_table.users[i] then
                    main_data_table.users[i] = nil
                end

                break
            else
                local flags = entity.get_prop(i, "m_fFlags")
                if not flags then
                    break
                end

                if bit.band(flags, 512) == 512 then
                    break
                end
            end

            players[#players + 1] = i
        until true
    end

    return players
end

local function find_duplicate_element(array, divisor)
    local visited_elements = {}

    for current_index = 1, #array do
        local current_element = array[current_index]

        if not visited_elements[current_element] then
            visited_elements[current_element] = true

            for next_index = current_index + 4, #array do
                if current_index % divisor == 0 then
                    if array[next_index] == current_element then
                        return true
                    end
                elseif array[next_index] == current_element then
                    return false
                end
            end
        end
    end

    return false
end


main_data_table = {
    main = uilib.new_checkbox(tab, container, "Cheat revealer"),
    display_method = uilib.new_multiselect(tab, container, "\nCheat revealer display options", {
        "Scoreboard icon",
        "Flag"
    }),
    icon_type = uilib.new_multiselect(tab, container, "\nCheat revealer icon set", {
        "Multicolored",
        "Unicolored",
        "Nado & Ryha",
        "Alternative NL icon"
    }),
    plist_handler = uilib.create_plist(),
    yeah = {
        names = {
            gs = {
                long = "gamesense",
                color = color.hex("95B80CFF")
            },
            nl = {
                long = "neverlose",
                color = color.hex("037696FF")
            },
            nw = {
                long = "nixware",
                color = color.hex("FFFFFFFF")
            },
            pd = {
                long = "pandora",
                color = color.hex("D4A9FFFF")
            },
            pr = {
                long = "primordial",
                color = color.hex("E2B6C7FF")
            },
            ot = {
                long = "onetap",
                color = color.hex("f7a414FF")
            },
            ft = {
                long = "fatality",
                color = color.hex("f00657FF")
            },
            pl = {
                long = "plaguecheat",
                color = color.hex("6BFF87FF")
            },
            ev = {
                long = "ev0lve",
                color = color.hex("42B7FFFF")
            },
            r7 = {
                long = "rifk7",
                color = color.hex("FF00FFFF")
            },
            af = {
                long = "airflow",
                color = color.hex("8E76C0FF")
            },
            wh = {
                long = "unknown",
                color = color.hex("9F9F9FFF")
            }
        },
        colored_names = {
            gs = {
                short = "\aEAEAEAFFG\a95B80CFFS",
                long = "\aEAEAEAFFgame\a95B80CFFsense"
            },
            nl = {
                short = "\a037696FFNL",
                long = "\aEAEAEAFFnever\a037696FFlose"
            },
            nw = {
                short = "\aFFFFFFFFNW",
                long = "\aFFFFFFFFnixware"
            },
            pd = {
                short = "\aD4A9FFFFPD",
                long = "\aD4A9FFFFpandora"
            },
            pr = {
                short = "\aE2B6C7FFPR",
                long = "\aE2B6C7FFprimordial"
            },
            ot = {
                short = "\aEAEAEAFFO\af7a414FFT",
                long = "\aEAEAEAFFone\af7a414FFtap"
            },
            ft = {
                short = "\af00657FFFT",
                long = "\aF00657FFfatality"
            },
            pl = {
                short = "\a6BFF87FFPLG",
                long = "\a6BFF87FFplaguecheat"
            },
            ev = {
                short = "\a42B7FFFFEV0",
                long = "\a42B7FFFFev0\aFFFFFFFFlve"
            },
            r7 = {
                short = "\a00F600FFR\aFF00FFFF7",
                long = "\a00F600FFrifk\aFF00FFFF7"
            },
            af = {
                short = "\a8E76C0FFAF",
                long = "\a8E76C0FFairflow"
            },
            wh = {
                short = false,
                long = "\a515364FFunknown"
            }
        },
    },
    users = {}
}

main_data_table.list_label = main_data_table.plist_handler:add(ui.new_label, "Cheat: " .. main_data_table.yeah.colored_names.wh.long)

local scoreboard_icon_enabled = false

main_data_table.display_method:add_callback(function(method)
    if method:contains("Scoreboard icon") then
        js.create()
    else
        js.destroy()
    end

    scoreboard_icon_enabled = method:contains("Scoreboard icon")
end)

local esp_flag_enabled = false

local last_scoreboard_icon_enabled = false
local last_esp_flag_enabled = false

local nl_path = nil

local is_multicolored = false
local is_unicolored = false
local is_nadoryha = false
local is_alternate_nl_icon = false

local icon_changed = false

main_data_table.icon_type:add_callback(function(icon_type)
    icon_changed = true
    if icon_type:contains("Unicolored") and (is_multicolored or is_nadoryha) then
        icon_type:remove("Multicolored")
        icon_type:remove("Nado & Ryha")
    elseif icon_type:contains("Multicolored") and (is_unicolored or is_nadoryha) then
        icon_type:remove("Unicolored")
        icon_type:remove("Nado & Ryha")
    elseif icon_type:contains("Nado & Ryha") and (is_multicolored or is_unicolored) then
        icon_type:remove("Unicolored")
        icon_type:remove("Multicolored")
        icon_type:remove("Alternative NL icon")
    elseif icon_type:contains("Alternative NL icon") and is_nadoryha then
        icon_type:remove("Alternative NL icon")
    else
        icon_type:add(is_multicolored and "Multicolored" or is_unicolored and "Unicolored" or is_nadoryha and "Nado & Ryha" or "Multicolored")
    end

    is_nadoryha = icon_type:contains("Nado & Ryha")
    is_unicolored = icon_type:contains("Unicolored")
    is_multicolored = icon_type:contains("Multicolored")
    nl_path = not is_nadoryha and (icon_type:contains("Alternative NL icon") and "nl2" or "nl1") or "nl"
    images_path = "file://{images}/icons/revealer/" .. (is_multicolored and "multicolored" or is_unicolored and "unicolored" or is_nadoryha and "nadoryha") .. "/%s.png"

    for _, user in pairs(main_data_table.users) do
        user.icon_set = false
    end
end)
main_data_table.icon_type:add("Multicolored")

local detection_storage_table = {
    nl = {
        sig_count = {},
        found = {}
    },
    nw = {},
    pd = {},
    ot = {},
    ft = {},
    pl = {},
    ev = {},
    r7 = {},
    af = {},
    gs = {}
}
local detector_table = {
    nl = function(packet, target)
        if packet.xuid_high == 0 then
            return
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 22)[0])

        if sig == detection_storage_table.current_signature then
            detection_storage_table.nl.sig_count[target] = (detection_storage_table.nl.sig_count[target] or 0) + 1

            if detection_storage_table.nl.sig_count[target] > 24 then
                detection_storage_table.nl.found[target] = 1

                return true
            else
                detection_storage_table.nl.sig_count[target] = nil
            end
        end

        if #detection_storage_table.nl.found > 3 then
            return false
        end

        if not detection_storage_table.nl[target] then
            detection_storage_table.nl[target] = {}
        end

        detection_storage_table.nl[target][#detection_storage_table.nl[target] + 1] = packet.xuid_high

        if #detection_storage_table.nl[target] > 24 then
            if find_duplicate_element(detection_storage_table.nl[target], 4) and packet.xuid_high ~= 0 then
                detection_storage_table.current_signature = sig
                detection_storage_table.nl[target] = {}

                return true
            end

            table.remove(detection_storage_table.nl[target], 1)
        end

        return false
    end,
    nw = function(packet, target)
        if not detection_storage_table.nw[target] then
            detection_storage_table.nw[target] = 0
        end

        if detection_storage_table.nw[target] > 34 then
            detection_storage_table.nw[target] = nil

            return true
        elseif packet.xuid_high == 0 then
            detection_storage_table.nw[target] = detection_storage_table.nw[target] + 1
        else
            detection_storage_table.nw[target] = 0
        end

        return false
    end,
    pd = function(packet, target)
        if not detection_storage_table.pd[target] then
            detection_storage_table.pd[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.pd[target] > 24 then
            return true
        elseif sig == "695B" or sig == "1B39" then
            detection_storage_table.pd[target] = detection_storage_table.pd[target] + 1
        else
            detection_storage_table.pd[target] = 0
        end

        return false
    end,
    ot = function(packet, target)
        if not detection_storage_table.ot[target] then
            detection_storage_table.ot[target] = {}
        end

        detection_storage_table.ot[target][#detection_storage_table.ot[target] + 1] = {
            sequence_bytes = packet.sequence_bytes,
            xuid_low = packet.xuid_low,
            section_number = packet.section_number,
            umcompressed_sample_offset = packet.uncompressed_sample_offset
        }

        if #detection_storage_table.ot[target] > 16 then
            local oldest_packet = detection_storage_table.ot[target][1]

            for i = 2, #detection_storage_table.ot[target] do
                local loop_packet = detection_storage_table.ot[target][i]
                if loop_packet.xuid_low ~= oldest_packet.xuid_low or loop_packet.section_number ~= oldest_packet.section_number or loop_packet.uncompressed_sample_offset ~= oldest_packet.uncompressed_sample_offset then
                    table.remove(detection_storage_table.ot[target], 1)

                    return false
                end
            end

            table.remove(detection_storage_table.ot[target], 1)

            return true
        end

        return false
    end,
    ft = function(packet, target)
        if not detection_storage_table.ft[target] then
            detection_storage_table.ft[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.ft[target] > 36 then
            return true
        elseif sig == "7FFA" or sig == "7FFB" then
            detection_storage_table.ft[target] = detection_storage_table.ft[target] + 1
        end

        return false
    end,
    pl = function(packet, target)
        if not detection_storage_table.pl[target] then
            detection_storage_table.pl[target] = 0
        end

        if detection_storage_table.pl[target] > 24 then
            return true
        elseif ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 44)[0]) == "7275" then
            detection_storage_table.pl[target] = detection_storage_table.pl[target] + 1
        else
            detection_storage_table.pl[target] = 0
        end

        return false
    end,
    ev = function(packet, target)
        if not detection_storage_table.ev[target] then
            detection_storage_table.ev[target] = {}
        end

        detection_storage_table.ev[target][#detection_storage_table.ev[target] + 1] = packet.xuid_high

        if #detection_storage_table.ev[target] > 44 then
            for i = 1, #detection_storage_table.ev[target] - 4 do
                local loop_info = detection_storage_table.ev[target][i]
                if detection_storage_table.ev[target][i + 1] + detection_storage_table.ev[target][i + 2] == detection_storage_table.ev[target][i] * 2 and detection_storage_table.ev[target][i + 4] == loop_info + 1 then
                    detection_storage_table.ev[target] = {}

                    return true
                end
            end

            table.remove(detection_storage_table.ev[target], 1)
        end

        return false
    end,
    r7 = function(packet, target)
        if not detection_storage_table.r7[target] then
            detection_storage_table.r7[target] = 0
        end

        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0])

        if detection_storage_table.r7[target] > 24 then
            return true
        elseif sig == "234" or sig == "134" then
            detection_storage_table.r7[target] = detection_storage_table.r7[target] + 1
        else
            detection_storage_table.r7[target] = 0
        end

        return false
    end,
    af = function(packet, target)
        if not detection_storage_table.af[target] then
            detection_storage_table.af[target] = 0
        end

        if detection_storage_table.af[target] > 24 then
            return true
        elseif ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 16)[0]) == "AFF1" then
            detection_storage_table.af[target] = detection_storage_table.af[target] + 1
        else
            detection_storage_table.af[target] = 0
        end

        return false
    end,
    gs = function(packet, target)
        local sig = ("%.02X"):format(ffi.cast("uint16_t*", ffi.cast("uintptr_t", packet) + 22)[0])
        local sequence_bytes = string.sub(packet.sequence_bytes, 1, 4)

        if not detection_storage_table.gs[target] then
            detection_storage_table.gs[target] = {
                repeated = 0,
                packet = sig,
                bytes = sequence_bytes
            }
        end

        if sequence_bytes ~= detection_storage_table.gs[target].bytes and sig ~= detection_storage_table.gs[target].packet then
            detection_storage_table.gs[target].packet = sig
            detection_storage_table.gs[target].bytes = sequence_bytes
            detection_storage_table.gs[target].repeated = detection_storage_table.gs[target].repeated + 1
        else
            detection_storage_table.gs[target].repeated = 0
        end

        if detection_storage_table.gs[target].repeated >= 36 then
            detection_storage_table.gs[target] = {
                repeated = 0,
                packet = sig,
                bytes = sequence_bytes
            }

            return true
        end

        return false
    end
}

client.register_esp_flag("", 220, 220, 220, function(target)
    if not main_data_table.main.value then
        return false
    end

    if not main_data_table.users[target] or not main_data_table.users[target].cheat then
        return false
    end

    local cheat = main_data_table.users[target].cheat or "wh"

    if not esp_flag_enabled or not cheat or cheat == "wh" then
        return false
    end

    return true, (entity.is_dormant(target) and cheat or main_data_table.yeah.colored_names[cheat].short or ""):upper()
end)

local function info_update_callback()
    main_data_table.icon_type.vis = main_data_table.main.value
    main_data_table.display_method.vis = main_data_table.main.value
    scoreboard_icon_enabled = main_data_table.display_method:contains("Scoreboard icon") and main_data_table.main.value
    esp_flag_enabled = main_data_table.display_method:contains("Flag") and main_data_table.main.value

    if icon_changed then
        icon_changed = false
        for _, user in pairs(main_data_table.users) do
            user.icon_set = false
        end
    end

    if scoreboard_icon_enabled and not last_scoreboard_icon_enabled then
        last_scoreboard_icon_enabled = true

        js.create()
    elseif not scoreboard_icon_enabled and last_scoreboard_icon_enabled then
        last_scoreboard_icon_enabled = false

        for _, user in pairs(main_data_table.users) do
            user.icon_set = false
        end

        js.destroy()
    end
end

main_data_table.main:add_event_callback("paint", function()
    if not scoreboard_icon_enabled then
        return
    end

    if (not is_multicolored) and (not is_unicolored) and (not is_nadoryha) then
        return
    end

    for _, target in pairs(get_players()) do
        local user = main_data_table.users[target]
        if user then
            if not user.icon_set then
                js.update(target, images_path:format(user.cheat and (user.cheat == "nl" and nl_path or user.cheat) or target == entity.get_local_player() and "gs" or "wh"))

                user.icon_set = true
            end
        else
            main_data_table.users[target] = {}
        end
    end
end)

main_data_table.main:add_event_callback("voice", function(event)
    local packet = ffi.cast(voice_data_t, event.data)
    local target = (ffi.cast("char*", packet) + 8)[0] + 1
    if not main_data_table.users[target] then
        main_data_table.users[target] = {}
    end

    local user = main_data_table.users[target]

    for cheat_identifier, cheat_detection_function in pairs(detector_table) do
        repeat
            local cheat = user.cheat
            if user.cheat ~= cheat_identifier and (cheat_identifier ~= "nl" or user.cheat ~= "ev" and user.cheat ~= "gs" and user.cheat ~= "pl" and user.cheat ~= "pd" and user.cheat ~= "r7" and user.cheat ~= "af" and user.cheat ~= "ft") and (cheat_identifier ~= "nw" or user.cheat ~= "nl") and (cheat_identifier ~= "ev" or user.cheat ~= "pd" and user.cheat ~= "nl" and user.cheat ~= "ft") and (cheat_identifier ~= "gs" or user.cheat ~= "ev" and user.cheat ~= "ot" and user.cheat ~= "pl" and user.cheat ~= "pd" and user.cheat ~= "r7" and user.cheat ~= "ft") and (cheat_identifier ~= "ot" or user.cheat ~= "nw" and user.cheat ~= "ft" and user.cheat ~= "pd" and user.cheat ~= "pl") then
                if cheat_identifier == "ft" and (user.cheat == "nw" or user.cheat == "pd") then
                    break
                end

                if cheat_detection_function(packet, target) then
                    user.cheat = cheat_identifier
                    user.icon_set = false

                    main_data_table.plist_handler:set_state(main_data_table.list_label, target, ("Cheat: %s"):format(main_data_table.yeah.colored_names[cheat_identifier].long) or main_data_table.yeah.colored_names.wh.long)

                    if (user.cheat or "wh") == "wh" or cheat ~= cheat_identifier then
                        client.fire_event("cheat_detected", {
                            player = target,
                            cheat_id = cheat_identifier,
                            cheat_long = main_data_table.yeah.names[cheat_identifier].long,
                            cheat_color = main_data_table.yeah.names[cheat_identifier].color
                        })
                    end
                end
            end
        until true
    end
end)
main_data_table.main:add_event_callback("player_connect_full", function(event)
    local target = client.userid_to_entindex(event.userid)
    if target == entity.get_local_player() then
        main_data_table.users = {}

        js.clear()
        js.destroy()
        client.delay_call(0.5, function()
            js.create()
        end)
    else
        for _, user in pairs(main_data_table.users) do
            user[target] = {}
        end
    end
end)
main_data_table.main:add_event_callback("game_start", function()
    for _, user in pairs(main_data_table.users) do
        user.icon_set = false
    end
end)
main_data_table.main:add_callback(info_update_callback)
main_data_table.display_method:add_callback(info_update_callback)
main_data_table.icon_type:add_callback(info_update_callback)
main_data_table.main:invoke()
client.set_event_callback("shutdown", function()
    js.clear()
    js.destroy()
end)

package.preload["gamesense/cheat_revealer"] = function()
    return {
        get_cheat = function(target)
            local cheat = main_data_table.users[target].cheat or "wh"

            return {
                cheat_id = cheat,
                cheat_long = main_data_table.yeah.names[cheat].long or "unknown",
                cheat_color = main_data_table.yeah.names[cheat].color or color.hex("9F9F9FFF")
            }
        end,
        has_data = function(target)
            return main_data_table.users[target] ~= nil
        end,
        clear_data = function(target)
            if main_data_table.users[target] == nil then
                return false
            end

            main_data_table.users[target] = nil

            for _, detection in pairs(detection_storage_table) do
                detection[target] = nil
            end

            return true
        end
    }
end
why error
 
Сверху Снизу