Crack Lua Blame.lua | neverlose.cc

Начинающий
Статус
Оффлайн
Регистрация
2 Мар 2022
Сообщения
10
Реакции[?]
5
Поинты[?]
0

Данный скрипт не проверялся модераторами, так как является кряком приватной LUA и в нём может присутствовать обфускация. Даже известные пользователи могут выложить вредоносный скрипт под видом крякнутого, поэтому любое использование исключительно на свой страх и риск.

another shit lua
Код:
----------------------------------------- FFI -----------------------------------------

ffi.cdef[[
    typedef struct {
        unsigned short wYear;
        unsigned short wMonth;
        unsigned short wDayOfWeek;
        unsigned short wDay;
        unsigned short wHour;
        unsigned short wMinute;
        unsigned short wSecond;
        unsigned short wMilliseconds;
    } SYSTEMTIME, *LPSYSTEMTIME;
    void GetSystemTime(LPSYSTEMTIME lpSystemTime);
    void GetLocalTime(LPSYSTEMTIME lpSystemTime);

    typedef struct {
        float x;
        float y;
        float z;
        float h;
    } vec3_struct;

    typedef void*(__thiscall* c_entity_list_get_client_entity_t)(void*, int);
    typedef void*(__thiscall* c_entity_list_get_client_entity_from_handle_t)(void*, uintptr_t);

    typedef int(__thiscall* c_weapon_get_muzzle_attachment_index_first_person_t)(void*, void*);
    typedef int(__thiscall* c_weapon_get_muzzle_attachment_index_third_person_t)(void*);
    typedef bool(__thiscall* c_entity_get_attachment_t)(void*, int, vec3_struct*);
    
    bool CreateDirectoryA(const char* lpPathName, void* lpSecurityAttributes);
    void* __stdcall URLDownloadToFileA(void* LPUNKNOWN, const char* LPCSTR, const char* LPCSTR2, int a, int LPBINDSTATUSCALLBACK);
    void* __stdcall ShellExecuteA(void* hwnd, const char* op, const char* file, const char* params, const char* dir, int show_cmd);

    bool DeleteUrlCacheEntryA(const char* lpszUrlName);

    void* GetProcAddress(void* hModule, const char* lpProcName);
    void* GetModuleHandleA(const char* lpModuleName);
    
    typedef struct {
        uint8_t r;
        uint8_t g;
        uint8_t b;
        uint8_t a;
    } color_struct_t;

    typedef void (*console_color_print)(const color_struct_t&, const char*, ...);

    typedef void* (__thiscall* get_client_entity_t)(void*, int);
]]






----------------------------------------- LOADING -----------------------------------------
EngineClient.ExecuteClientCmd("clear")

local ffi_helpers = {
    color_print_fn = ffi.cast("console_color_print", ffi.C.GetProcAddress(ffi.C.GetModuleHandleA("tier0.dll"), "?ConColorMsg@@YAXABVColor@@PBDZZ")),
    color_print = function(self, text, color)
        local col = ffi.new("color_struct_t")

        col.r = color[1]
        col.g = color[2]
        col.b = color[3]
        col.a = color[4]

        self.color_print_fn(col, text)
    end
}

ffi_helpers:color_print('░░░░░░░░░░░▄▄▄▄▄\n', {198, 0, 0, 255})
ffi_helpers:color_print('░░░░░░░▄▄█████████▄▄\n', {198, 0, 0, 255})
ffi_helpers:color_print('░░░░▄▀▀▀▀█▀▀▀▀▀▀█████▄\n', {198, 0, 0, 255})
ffi_helpers:color_print('░░▄██████░░░░░░░░░░░▀██\n', {198, 0, 0, 255}) 
ffi_helpers:color_print('░▐██████▌░░░░░░░░░░░░░▐▌\n', {198, 0, 0, 255})
ffi_helpers:color_print('░███████▌░░░░░░░░░░░░░░█\n', {198, 0, 0, 255})
ffi_helpers:color_print('▐████████░░░░░░░░░░░░░░░█\n', {198, 0, 0, 255})
ffi_helpers:color_print('▐██████▌░░░░░▄▀▀▀▀▀▄░▀░▄▄▌\n', {198, 0, 0, 255})
ffi_helpers:color_print('░█▀▀███▀░░░░░░▄▀█▀░░░▐▄▄▄▌         ▄▄▄▄· ▄▄▌   ▄▄▄· • ▌ ▄ ·. ▄▄▄ .\n', {198, 0, 0, 255})
ffi_helpers:color_print('▐░▌▀▄░░░░░░░░░░▄▄▄▀░░░▌▀░▌        ▐█ ▀█▪██•  ▐█ ▀█ ·██ ▐███▪▀▄.▀·\n', {198, 0, 0, 255})
ffi_helpers:color_print('░▌▐░░▌░░░░░░░░░░░▀░░░░▐░▐         ▐█▀▀█▄██▪  ▄█▀▀█ ▐█ ▌▐▌▐█·▐▀▀▪▄\n', {198, 0, 0, 255})
ffi_helpers:color_print('░▐░▀▄▐░░░░░░░░░░░▌▌░▄▄░▐░▌        ██▄▪▐█▐█▌▐▌▐█ ▪▐▌██ ██▌▐█▌▐█▄▄▌\n', {198, 0, 0, 255})
ffi_helpers:color_print('░░▀█░▄▀░░░░░░░░░▐░▐▄▄▄▄▀▐         ·▀▀▀▀ .▀▀▀  ▀  ▀ ▀▀  █▪▀▀▀ ▀▀▀ \n', {198, 0, 0, 255})
ffi_helpers:color_print('░░░▐░░░░░░░░░▌░░░▄▀▀▀▀▄▐\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░░▌░░░░░░░░░▐░░░░░▄▄░░▌\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░█▀▄░░░▐░▐░░░░░░░░░░░█\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░█░█░▀▀▄░▌░█░░░▀▀▄▄▄▄▀\n', {198, 0, 0, 255})   
ffi_helpers:color_print('█░░░▀▄░░▀▀▄▄█░░░░░▄▀\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░░░░░▀▄░░░░▀▀▄▄▄▀▐\n', {198, 0, 0, 255})   
ffi_helpers:color_print('█░░░░░░░▀▄░░░░░▐░▌▐\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░█░░░░░░░░▀▄░░░▌░▐▌▐\n', {198, 0, 0, 255}) 
ffi_helpers:color_print('░░█░░░░░░░░░█░▐░▄▄▌░█▀▄\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░░█░░░░░░░░░█▌▐░▄▐░░▀▄▀▀▄▄\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░░░█░░░░░░░░░▀▄░░▐░░░▀▄░░░▀▀▄▄\n', {198, 0, 0, 255})   
ffi_helpers:color_print('░░░░░▀▄░▄▀█░░░░░█░░▌░░░░▀▄░░░░░█\n', {198, 0, 0, 255})   

ffi_helpers:color_print('                   version: 1.0  | build: stable\n', {130, 80, 255, 255})   
print('\n')
print('\n')
print('\n')
print('\n')


----------------------------------------- MENU -----------------------------------------

local menu_elements = {


    ------------------------>>>>>  GLOBAL
    Menu.Text("» Global", "Blame - Information", "Welcome, ".. Cheat.GetCheatUserName() .."!"),
    Menu.Text("» Global", "Blame - Information", " "),
    Menu.Text("» Global", "Blame - Information", "Latest Update: 25.04.2022"),
    Menu.Text("» Global", "Blame - Information", "Current Version: 1.0"),
    Menu.Text("» Global", "Blame - Information", "Current Build: Stable"),

    --d_switch = Menu.Switch("» Global", "Blame - Global",  "Dormant Aimbot", false, "Makes Aimbot shoots at {dormant} targets."),
    --d_min_damage = Menu.SliderInt("» Global", "Blame - Global",  "Minimum Damage", 1, 1, 100),
    enable_change_draw_caracter = Menu.Switch("» Global", "Blame - Global", "Enable Animation Breaker", false, "Your animations will be broken"),
    change_draw_caracter = Menu.MultiCombo("» Global", "Blame - Global", "Select Breaker", {"Static legs in air", "Leg Breaker" , "Pitch 0 on land"}, 0),
    --hitsound = Menu.Switch("» Global", "Blame - Global", "Enable Hitsound" , false),
    --hitsound_list = Menu.Combo("» Global", "Blame - Global", "Select Hitsound", {"Skeet", "Alternative"}, 0),
    --hitsound_vol = Menu.SliderInt("» Global", "Blame - Global" , "Hitsound Volume" , 75 , 0 , 100),

    
    load_def = Menu.Button("» Global", "Blame - Configuration", "                   Load Default Config                       ", "Load a default config who was made by the staff!"),
    

    ------------------------>>>>>  RAGEBOT
    --quick_peek = Menu.Switch("» Ragebot", "Blame - Ragebot", "Quick Peek", false),
    Enable = Menu.Switch("» Ragebot", "Blame - Ragebot", "Auto Teleport In Air", false, "Enable Auto Teleport In Air"),
    Teleport_Weapons = Menu.MultiCombo("» Ragebot", "Blame - Ragebot", "Teleport Weapons", {"Scout", "AWP", "Pistols", "Zeus", "Knife", "Nades", "Other"}, 0),
    air_hitchance = Menu.Switch("» Ragebot","Blame - Ragebot", "InAir Override Hitchance", false),
    air_hitchance_value = Menu.SliderInt("» Ragebot","Blame - Ragebot", " ", 50, 1, 100),
    ns_hitchance = Menu.Switch("» Ragebot","Blame - Ragebot", "NoScope Override Hitchance", false),
    ns_hitchance_value = Menu.SliderInt("» Ragebot","Blame - Ragebot", "  ", 51, 1, 100),


    ------------------------>>>>>  ANTIAIM
    antiaims = Menu.Combo("» AntiAim","Blame - AntiAim", "Choose AntiAim Type", {"Disabled", "Tank AA", "Custom"},0),
    exploits = Menu.Combo("» AntiAim","Blame - AntiAim", "Exploits", {"Disabled", "Extended Desync", "Masive Extended Desync"},0),
    refEnabled = Menu.Switch("» AntiAim", "Blame - AntiAim", "EdgeYaw", false, ""),
    legitAA = Menu.Switch("» AntiAim", "Blame - AntiAim", "Legit AA", false, "Just enable it you dont need to bind it!"),
    antibackstabon = Menu.Switch("» AntiAim", "Blame - AntiAim", "Avoid-Backstab", false, ""),
    radius = Menu.SliderInt("» AntiAim", "Blame - AntiAim", "Avoid-Backstab Radius", 1, 1, 200),

    switchbruteforce = Menu.Switch("» AntiAim", "Blame - Anti-Bruteforce", "Anti-Bruteforce" , false),

    ------------------------>>>>>  VISUALS
    custom_visuals = Menu.MultiCombo("» Visuals", "Blame - Visuals","Screen Visuals", {"Indicators","Damage Indicator","Clantag", "Glow AutoPeek", "Manual Arrows", "Custom Scope", "Viewmodel in scope", "Lethal Indicator", "Snaplines"}, 0),
    windows = Menu.MultiCombo("» Visuals", "Blame - Visuals","Windows", {"Select","Watermark","Keybinds"}, 0),


    ------------------------>>>>>  VISUALS -->> SETTINGS
    snapelines_render = Menu.Combo("» Visuals", "Blame - Settings" , "Snaplines Position" , {"Crosshair" , "Hitbox Center"} , 0),
    snapelines_color = Menu.ColorEdit("» Visuals", "Blame - Settings", "Snaplines color", Color.RGBA(255, 255, 255, 255)),
    min_damage_indicator_pos = Menu.Combo("» Visuals", "Blame - Settings", "Damage Indicator Pos", {"Right Up", "Left Up", "Centre Up"}, 0, ""),
    arrows = Menu.Combo("» Visuals","Blame - Settings", "Arrows", {"Select", "Teamskeet"}, 0, ""),
    arrows_color = Menu.ColorEdit("» Visuals","Blame - Settings", "Arrows color", Color.RGBA(125, 125, 255, 255)),
    arrows_colorsecond = Menu.ColorEdit("» Visuals","Blame - Settings", "Second arrows color", Color.RGBA(125, 125, 255, 255)),
    --colorsmain = Menu.ColorEdit("» Visuals", "Blame - Settings", "Indicators Color", Color.new(100 / 255, 100 / 255, 255 / 255, 255 / 255)),
    indicatorscolor = Menu.ColorEdit("» Visuals","Blame - Settings", "Indicators Color", Color.new(0.49,0.49,1,1)),
    glowpeekcolor = Menu.ColorEdit("» Visuals", "Blame - Settings", "Glow AutoPeek Color", Color.new(255.0, 255.0, 255.0, 255.0)),
    custom_scope_color = Menu.ColorEdit("» Visuals", "Blame - Settings", "Scope lines color", Color.new(255.0, 255.0, 255.0, 255.0)),
    custom_scope_gap = Menu.SliderInt("» Visuals", "Blame - Settings", "Scope Lines Gap", 15, 0, 500),
    custom_scope_length = Menu.SliderInt("» Visuals", "Blame - Settings", "Scope Lines Length", 190, 0, 500),
    custom_scope_fade = Menu.SliderInt("» Visuals", "Blame - Settings", "Fade Animation Speed", 12, 3, 20),
    

        ------------------------>>>>>  VISUALS -->> Blame UI
        uicustomi = Menu.Switch("» Visuals", "Blame - UI","UI Customization", false, ""),
        Blamecolor = Menu.ColorEdit("» Visuals", "Blame - UI","UI Color", Color.RGBA(198, 0, 0, 255), ""),
    
        uitextline = Menu.Switch("» Visuals", "Blame - UI","Line in the middle of the text", false, ""),
        avatarcombo = Menu.Combo("» Visuals", "Blame - UI","Avatars", {"Neverlose Avatar", "Blame Logo"}, 0, ""),
    
        textoutlinekeybinds        = Menu.Switch("» Visuals", "Blame - UI","Text Outline", false),
        UI_Keybinds_X          = Menu.SliderInt("» Visuals", "Blame - UI","Keybinds X", 1, 1, EngineClient.GetScreenSize().x),
        UI_Keybinds_Y          = Menu.SliderInt("» Visuals", "Blame - UI","Keybinds Y", 1, 1, EngineClient.GetScreenSize().y),
    

    ------------------------>>>>>  MISC
    eventlogs = Menu.Switch("» Misc", "Blame - Miscellaneous", "Eventlogs", false, "Enable eventlogs (Hits, Misses)"),
    eventtype = Menu.MultiCombo("» Misc", "Blame - Miscellaneous", "Eventlogs Type", {"Hits", "Misses"}, 0),
    ttonkill = Menu.Switch("» Misc", "Blame - Miscellaneous", "Killsay", false),
    languageonkill = Menu.Combo("» Misc", "Blame - Miscellaneous", "Select Language", {"Russian", "English", "Poland", "Romanian"}, 0),

}


----------------------------------------- VARS -----------------------------------------
local legs = Menu.FindVar("Aimbot", "Anti Aim", "Misc", "Leg Movement")
local dt_ref = Menu.FindVar("Aimbot", "Ragebot", "Exploits", "Double Tap")
local hs_ref = Menu.FindVar("Aimbot", "Ragebot", "Exploits", "Hide Shots")
local sw_ref = Menu.FindVar("Aimbot", "Anti Aim", "Misc", "Slow Walk")
local yaw_base_ref = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Base")
local damage_ref = Menu.FindVar("Aimbot","Ragebot","Accuracy","Minimum Damage")
local body_ref = Menu.FindVar("Aimbot", "Ragebot", "Misc", "Body Aim")
local safepoints_ref = Menu.FindVar("Aimbot","Ragebot","Misc","Safe Points")

----------------------------------------- BUTTONS -----------------------------------------



local button = Menu.Button("» Global", "Blame - Information", "                        Join Our Discord                        ", "Official Blame Discord! You can find some configs and talk with users.",function()
    Panorama.Open().SteamOverlayAPI.OpenExternalBrowserURL("https://discord.gg/T6DS6d2MMc")
end)


local ffi = require("ffi")
 
ffi.cdef[[
    bool CreateDirectoryA(const char* lpPathName, void* lpSecurityAttributes);
    void* __stdcall URLDownloadToFileA(void* LPUNKNOWN, const char* LPCSTR, const char* LPCSTR2, int a, int LPBINDSTATUSCALLBACK);

    bool DeleteUrlCacheEntryA(const char* lpszUrlName);
]]
local urlmon = ffi.load 'UrlMon'
local wininet = ffi.load 'WinInet'

local function Download(from, to)
    wininet.DeleteUrlCacheEntryA(from)
    urlmon.URLDownloadToFileA(nil, from, to, 0,0)
end

local function CreateDir(path)
    ffi.C.CreateDirectoryA(path, NULL)
end

local get_font = Menu.Button("» Global", "Blame - Information", "                        Download Files                           ", "You need some files for the indicators and display damage etc.. so download it!", function()
    CreateDir("nl\\Blame\\")
    CreateDir("nl\\Blame\\fonts")
    CreateDir("csgo\\sound\\Blame\\")
    CreateDir("csgo\\sound\\Blame\\hitsound\\")
    Download('https://cdn.discordapp.com/attachments/908414741481934938/961656879623336006/smallest_pixel-7.ttf', 'nl\\Blame\\fonts\\smallest_pixel-7.ttf')
    Cheat.AddNotify("Blame" , "Files have been downloaded! Please reload the script!")
    end)

Download('https://cdn.discordapp.com/attachments/856592298132242432/931265632861818930/skeet.wav', 'csgo\\sound\\Blame\\hitsound\\hitsound.wav') -- hitsound
--Download('https://cdn.discordapp.com/attachments/959550720963645450/966782338413502554/loading.wav', 'csgo\\sound\\Blame\\hitsound\\loading.wav') -- hitsound & when the script load



----------------------------------------- GLOBAL -----------------------------------------





----------------------------------------- ANIMATION BREAKER
ffi.cdef [[
    int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
    void* VirtualAlloc(void* lpAddress, unsigned long dwSize, unsigned long  flAllocationType, unsigned long flProtect);
    int VirtualFree(void* lpAddress, unsigned long dwSize, unsigned long dwFreeType);

    typedef uintptr_t (__thiscall* GetClientEntity_4242425_t)(void*, int);
    typedef bool ( __thiscall* setupbones_t)( void*, void*, int, int, float );
    typedef struct
    {
        float x;
        float y;
        float z;
    } Vector_t;

    typedef struct
  {
      char    pad0[0x60]; // 0x00
      void* pEntity; // 0x60
      void* pActiveWeapon; // 0x64
      void* pLastActiveWeapon; // 0x68
      float        flLastnew_versioning_Time; // 0x6C
      int            iLastnew_versioning_Frame; // 0x70
      float        flLastnew_versioning_Increment; // 0x74
      float        flEyeYaw; // 0x78
      float        flEyePitch; // 0x7C
      float        flGoalFeetYaw; // 0x80
      float        flLastFeetYaw; // 0x84
      float        flMoveYaw; // 0x88
      float        flLastMoveYaw; // 0x8C // changes when moving/jumping/hitting ground
      float        flLeanAmount; // 0x90
      char    pad1[0x4]; // 0x94
      float        flFeetCycle; // 0x98 0 to 1
      float        flMoveWeight; // 0x9C 0 to 1
      float        flMoveWeightSmoothed; // 0xA0
      float        flDuckAmount; // 0xA4
      float        flHitGroundCycle; // 0xA8
      float        flRecrouchWeight; // 0xAC
      Vector_t        vecOrigin; // 0xB0
      Vector_t        vecLastOrigin;// 0xBC
      Vector_t        vecVelocity; // 0xC8
      Vector_t        vecVelocityNormalized; // 0xD4
      Vector_t        vecVelocityNormalizedNonZero; // 0xE0
      float        flVelocityLenght2D; // 0xEC
      float        flJumpFallVelocity; // 0xF0
      float        flSpeedNormalized; // 0xF4 // clamped velocity from 0 to 1
      float        flRunningSpeed; // 0xF8
      float        flDuckingSpeed; // 0xFC
      float        flDurationMoving; // 0x100
      float        flDurationStill; // 0x104
      bool        bOnGround; // 0x108
      bool        bHitGroundAnimation; // 0x109
      char    pad2[0x2]; // 0x10A
      float        flNextLowerBodyYawnew_versioning_Time; // 0x10C
      float        flDurationInAir; // 0x110
      float        flLeftGroundHeight; // 0x114
      float        flHitGroundWeight; // 0x118 // from 0 to 1, is 1 when standing
      float        flWalkToRunTransition; // 0x11C // from 0 to 1, doesnt change when walking or crouching, only running
      char    pad3[0x4]; // 0x120
      float        flAffectedFraction; // 0x124 // affected while jumping and running, or when just jumping, 0 to 1
      char    pad4[0x208]; // 0x128
      float        flMinBodyYaw; // 0x330
      float        flMaxBodyYaw; // 0x334
      float        flMinPitch; //0x338
      float        flMaxPitch; // 0x33C
      int            iAnimsetVersion; // 0x340
  } CCSGOPlayerAnimationState_534535_t;

  struct animlayer_s {
    float   m_anim_time;
    float   m_fade_out_time;
    int     m_flags;
    int     m_activty;
    int     m_priority;
    int     m_order;     
    int     m_sequence;
    float   m_prev_cycle;
    float   m_weight;
    float   m_weight_delta_rate;
    float   m_playback_rate;
    float   m_cycle;
    int     m_owner;
    int     m_bits;
};
]]

local hook = {hooks = {}}

local ENTITY_LIST_POINTER = ffi.cast("void***", Utils.CreateInterface("client.dll", "VClientEntityList003")) or error("Failed to find VClientEntityList003!")
local GET_CLIENT_ENTITY_FN = ffi.cast("uintptr_t (__thiscall*)(void*, int)", ENTITY_LIST_POINTER[0][3])

local ffi_volunteeringers = {
    get_entity_location = function(entity_index)
        local addr = GET_CLIENT_ENTITY_FN(ENTITY_LIST_POINTER, entity_index)
        return addr
    end
}

function hook.new(cast, callback, hook_addr, size, trampoline, org_bytes_tramp)
    local size = size or 5
    local trampoline = trampoline or false
    local new_hook, mt = {}, {}
    local detour_addr = tonumber(ffi.cast('intptr_t', ffi.cast('void*', ffi.cast(cast, callback))))
    local void_addr = ffi.cast('void*', hook_addr)
    local old_prot = ffi.new('unsigned long[1]')
    local org_bytes = ffi.new('uint8_t[?]', size)
    ffi.copy(org_bytes, void_addr, size)
    if trampoline then
        local alloc_addr = ffi.gc(ffi.C.VirtualAlloc(nil, size + 5, 0x1000, 0x40), function(addr) ffi.C.VirtualFree(addr, 0, 0x8000) end)
        local trampoline_bytes = ffi.new('uint8_t[?]', size + 5, 0x90)
        if org_bytes_tramp then
            local bytes = {}
            for byte in org_bytes_tramp:gmatch('(%x%x)') do
                table.insert(bytes, tonumber(byte, 16))
            end
            trampoline_bytes = ffi.new('uint8_t[?]', size + 5, bytes)
        else
            ffi.copy(trampoline_bytes, org_bytes, size)
        end
        trampoline_bytes[size] = 0xE9
        ffi.cast('uint32_t*', trampoline_bytes + size + 1)[0] = hook_addr - tonumber(ffi.cast('intptr_t', ffi.cast('void*', ffi.cast(cast, alloc_addr)))) - size
        ffi.copy(alloc_addr, trampoline_bytes, size + 5)
        new_hook.call = ffi.cast(cast, alloc_addr)
        mt = {__call = function(self, ...)
            return self.call(...)
        end}
    else
        new_hook.call = ffi.cast(cast, hook_addr)
        mt = {__call = function(self, ...)
            self.stop()
            local res = self.call(...)
            self.start()
            return res
        end}
    end
    local hook_bytes = ffi.new('uint8_t[?]', size, 0x90)
    hook_bytes[0] = 0xE9
    ffi.cast('uint32_t*', hook_bytes + 1)[0] = detour_addr - hook_addr - 5
    new_hook.status = false
    local function put_at_status(bool)
        new_hook.status = bool
        ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot)
        ffi.copy(void_addr, bool and hook_bytes or org_bytes, size)
        ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot)
    end
    new_hook.stop = function() put_at_status(false) end
    new_hook.start = function() put_at_status(true) end
    new_hook.start()

    table.insert(hook.hooks, new_hook)
    return setmetatable(new_hook, mt)
end

local new_versioning_location_of_counter_attack_animations = Utils.PatternScan("client.dll", "8B F1 80 BE ? ? ? ? ? 74 36", -5)
function starthooks()
    new_versioning_counter_attack_animation_function = hook.new('void(__fastcall*)(void*, void*)', new_versioning_conter_attack_painting_draw_char, ffi.cast("uintptr_t", new_versioning_location_of_counter_attack_animations))
end


local passage_of_ticks_grounded = 1000

function new_versioning_conter_attack_painting_draw_char(thisptr, edx)
    local LocalPlayer = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
    if not LocalPlayer then return new_versioning_counter_attack_animation_function(thisptr, edx) end
    local local_active_person_point_in_space = ffi_volunteeringers.get_entity_location(EngineClient.GetLocalPlayer())
    local ref_slide = Menu.FindVar("Aimbot", "Anti Aim", "Misc", "Leg Movement")

    if not menu_elements.enable_change_draw_caracter:Get() then    new_versioning_counter_attack_animation_function(thisptr, edx) return end
    if menu_elements.change_draw_caracter:GetBool(2) then
        if not menu_elements.enable_change_draw_caracter:Get() then return end
        local ticks = GlobalVars.tickcount
        if ticks % 3 == 0 then ref_slide:SetInt(2)
        elseif ticks % 3 == 1 then ref_slide:SetInt(1) end
        end

    if  not ( menu_elements.change_draw_caracter:GetBool(1)  or menu_elements.change_draw_caracter:GetBool(3)) or not menu_elements.enable_change_draw_caracter:Get()  then    new_versioning_counter_attack_animation_function(thisptr, edx) return end

    if menu_elements.change_draw_caracter:GetBool(1) then
        ffi.cast("float*" , local_active_person_point_in_space+10104)[6] = 1
    end
    if menu_elements.change_draw_caracter:GetBool(3) then
        if bit.band(LocalPlayer:GetProp("m_fFlags") , 1 ) == 0 then
            passage_of_ticks_grounded = 0
        end

        passage_of_ticks_grounded = passage_of_ticks_grounded + 0.05

        if passage_of_ticks_grounded < 25 and passage_of_ticks_grounded > 1 then
            ffi.cast("float*" , local_active_person_point_in_space+10104)[12] = 0.5
        end
    end


    new_versioning_counter_attack_animation_function(thisptr, edx)

    if menu_elements.change_draw_caracter:GetBool(1) then
        ffi.cast("float*" , local_active_person_point_in_space+10104)[6] = 1
    end

    if menu_elements.change_draw_caracter:GetBool(3) then
        if bit.band(LocalPlayer:GetProp("m_fFlags") , 1 ) == 0 then
            passage_of_ticks_grounded = 0
        end

        passage_of_ticks_grounded = passage_of_ticks_grounded + 0.05

        if passage_of_ticks_grounded < 25 and passage_of_ticks_grounded > 1 then
            ffi.cast("float*" , local_active_person_point_in_space+10104)[12] = 0.5
        end
    end


end

Cheat.RegisterCallback("events", function(e)

    if e:GetName()=="player_death" then
         passage_of_ticks_grounded = 1000
    end

    if e:GetName()=="round_start" then
        passage_of_ticks_grounded = 1000
    end

end)


Cheat.RegisterCallback("destroy", function()
    for i, hook in ipairs(hook.hooks) do
        if hook.status then
            hook.stop()
        end
    end
end)

----------------------------------------- VISUALS -----------------------------------------

----------------------------------------- FULL CUSTOM VISUALS

----------------------------------------- CLANTAG

put_at_clan_tag_fn = ffi.cast("int(__fastcall*)(const char*, const char*)", Utils.PatternScan("engine.dll", "53 56 57 8B DA 8B F9 FF 15"))
put_at_clan_tag = function(tag)
    put_at_clan_tag_fn(tag, tag)
end

function build_tag(tag)
    local arr = {}

    for i = 1, #tag do
        arr[#arr+1] = tag:sub(1, i)
    end

    return arr
end

clantag = build_tag(" blame.luaಠ▄ಠ ")

first1 = false

function tag()
    if not menu_elements.custom_visuals:GetBool(3) then
        if first1 then
            put_at_clan_tag("")
            first1 = false
        end
        return
    end

    first1 = true
    local curtime = math.floor(GlobalVars.curtime * 2)

    if old_time ~= curtime then
        put_at_clan_tag(clantag[curtime % #clantag + 1])
        old_time = curtime
    end
end

function disable_clantag()

    if first1 then
        put_at_clan_tag("")
        first1 = false
    end
end


--------------------------------- LETHAL INDICATOR
ESP.CustomText("Lethal", "enemies", "LETHAL", function(ent)
    return ent:GetProp('m_iHealth') <= 91 and "Lethal" or ""
end)

local a = 0


local font  = {
    pixel = Render.InitFont("nl\\Blame\\fonts\\smallest_pixel-7.ttf", 11),
}

local speed = 4

local function lethalme()
    if a < 255 and not minusing then
      a = a + speed
    end
    if a == 255 then
        minusing = true
        end
    if minusing then
        a = a - speed
    end
    if a <= 0 then
        minusing = false
    end
    
    a = a > 255 and 255 or a

    local x = EngineClient.GetScreenSize().x
    local y = EngineClient.GetScreenSize().y
    local local_player = EntityList.GetLocalPlayer()
   if local_player:GetProp('m_iHealth') <= 91 then
        Render.Text("*Baimmable*", Vector2.new(x/2+30, y/2-45), Color.RGBA(255, 101, 93, a), 11,font.pixel, true)
    end
 end


--------------------------------- VIEWMODEL IN SCOPE
local function viewmodelchuj()
    local cheats = CVar.FindVar("sv_cheats")
    local scope = CVar.FindVar("fov_cs_debug")
    if menu_elements.custom_visuals:GetBool(7) then
        cheats:SetInt(1)
        scope:SetInt(90)
    else
        scope:SetInt(0)
    end
    end

--------------------------------- CUSTOM SCOPE
local function clamp(v, min, max) local num = v; num = num < min and min or num; num = num > max and max or num; return num end
local function linear(t, b, c, d) return c * t / d + b end
local m_alpha = 0
local function custom_scope()
    menu_elements.custom_scope_color:SetVisible(menu_elements.custom_visuals:GetBool(6))
    menu_elements.custom_scope_gap:SetVisible(menu_elements.custom_visuals:GetBool(6))
    menu_elements.custom_scope_length:SetVisible(menu_elements.custom_visuals:GetBool(6))
    menu_elements.custom_scope_fade:SetVisible(menu_elements.custom_visuals:GetBool(6))
    if menu_elements.custom_visuals:GetBool(6) then
        Menu.FindVar("Visuals", "View", "Camera", "Remove Scope"):SetInt(2)
        local localplayer = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
        if not localplayer then return end
    
        if localplayer:GetProp("DT_BasePlayer", "m_iHealth") > 0 then
            local screen_size = EngineClient.GetScreenSize()
            local width, height = screen_size.x, screen_size.y
            local offset, initial_position, speed, color =
            menu_elements.custom_scope_length:Get() * screen_size.y / 1080,
            menu_elements.custom_scope_gap:Get() * screen_size.y / 1080,
            menu_elements.custom_scope_fade:Get(),
            menu_elements.custom_scope_color:GetColor()

            local me = localplayer:GetPlayer()
            local wpn = me:GetActiveWeapon()
    
            local scope_level, scoped, resume_zoom =
                wpn:GetProp("m_zoomLevel"),
                me:GetProp("m_bIsScoped"),
                me:GetProp("m_bResumeZoom")
                
            local act = wpn ~= nil and scope_level ~= nil and scope_level > 0 and scoped and not resume_zoom

            local FT = speed > 3 and GlobalVars.frametime * speed or 1
            local alpha = linear(m_alpha, 0, 1, 1)
        
            Render.GradientBoxFilled(Vector2.new(width / 2 - initial_position + 2, height / 2), Vector2.new(width / 2 + 2 - offset, height / 2 + 1), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, 0)) -- LEFT
            Render.GradientBoxFilled(Vector2.new(width / 2 + offset, height / 2), Vector2.new(width / 2 + initial_position, height / 2 + 1), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, color.a * alpha)) -- RIGHT
        
            Render.GradientBoxFilled(Vector2.new(width / 2, height / 2 - initial_position + 2), Vector2.new(width / 2 + 1, height / 2 + 2 - offset), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, 0)) -- TOP
            Render.GradientBoxFilled(Vector2.new(width / 2, height / 2 + offset), Vector2.new(width / 2 + 1, height / 2 + initial_position), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, 0), Color.new(color.r, color.g, color.b, color.a * alpha), Color.new(color.r, color.g, color.b, color.a * alpha))
        
            m_alpha = clamp(m_alpha + (act and FT or -FT), 0, 1)
        end
    end
end

--------------------------------- GLOW AUTOPEEK
local autopeekuwu = Menu.FindVar("Miscellaneous","Main","Movement","Auto Peek")
local function glowautopeek()
    local lp = EntityList.GetLocalPlayer()
    if autopeekuwu:Get() and menu_elements.custom_visuals:GetBool(4) then
    if autopeek_origin == nil then
        autopeek_origin = lp:GetProp('m_vecOrigin')
    end
    for i = 1, 60 do
        local autopeek_value = 1/i
        if i <= 60 then
            autopeek_value = autopeek_value + 1.5
        end
        local autopeek_color = menu_elements.glowpeekcolor:GetColor()
        if autopeekuwu:Get() then
            Render.Circle3DFilled(autopeek_origin, 28, i / -2.5, Color.new(autopeek_color.r, autopeek_color.g, autopeek_color.b, autopeek_value / 40 * autopeek_color.a))
            Render.Circle3DFilled(autopeek_origin, 18, i / -2.6, Color.new(autopeek_color.r, autopeek_color.g, autopeek_color.b, autopeek_value / 40 * autopeek_color.a))
        end
    end
else
    autopeek_origin = nil
end
end

--------------------------------- MANUAL ARROWS
local function drawArrows()
    local arrows = menu_elements.arrows:Get()
    local lp = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
    if lp == nil then return end
    if lp:GetPlayer():IsAlive() then
        local invert = AntiAim.GetInverterState() == false
        local manual = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Base")
        local x = EngineClient.GetScreenSize().x/2 
        local y = EngineClient.GetScreenSize().y/2
        if menu_elements.custom_visuals:GetBool(5) and menu_elements.arrows:Get(1) then
            local LPx = Vector2.new(x - 43, y + 9)
            local LPy = Vector2.new(x - 43, y - 9)
            local LPz = Vector2.new(x - 56, y)
            local RPx = Vector2.new(x + 43, y + 9)
            local RPy = Vector2.new(x + 43, y - 9)
            local RPz = Vector2.new(x + 56, y)
            Render.PolyFilled(manual:GetInt() == 2 and menu_elements.arrows_color:Get() or Color.RGBA(25, 25, 25, 150), RPx, RPz, RPy)
            Render.PolyFilled(manual:GetInt() == 3 and menu_elements.arrows_color:Get() or Color.RGBA(25, 25, 25, 150), LPx, LPz, LPy)
            Render.BoxFilled(Vector2.new(x - 40, y - 9), Vector2.new(x - 42, y + 10), invert and Color.RGBA(25, 25, 25, 150) or menu_elements.arrows_colorsecond:Get())
            Render.BoxFilled(Vector2.new(x + 40, y - 9), Vector2.new(x + 42, y + 10), invert and menu_elements.arrows_colorsecond:Get() or Color.RGBA(25, 25, 25, 150))
        end
    end
end

--------------------------------- INDICATORS
local font =
{
    pixel = Render.InitFont("nl\\Blame\\fonts\\smallest_pixel-7.ttf", 10),
}

local normalize_yaw = function(yaw)
    while yaw > 180 do yaw = yaw - 360 end
    while yaw < -180 do yaw = yaw + 360 end

    return yaw
end
local function indicatorsdrwa()
    if menu_elements.custom_visuals:GetBool(1) then
    local lp = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
    if not lp then return end
    local health = lp:GetProp("m_iHealth")
    if health > 0 then
        local color = Color.new(menu_elements.indicatorscolor:GetColor().r, menu_elements.indicatorscolor:GetColor().g, menu_elements.indicatorscolor:GetColor().b)
        local x = EngineClient.GetScreenSize().x
        local y = EngineClient.GetScreenSize().y
        local ay = 19
        local dmg = false
        local binds = Cheat.GetBinds()
        for i = 1, #binds do
            local bind = binds[i]
            if bind:GetName() == 'Minimum Damage' then
                dmg = true
            end
        end

        --fake
        local desync = AntiAim.GetFakeRotation()
        local real = AntiAim.GetCurrentRealRotation()
        local delta_to_draw = math.abs(normalize_yaw(real % 360 - desync % 360)) / 2
        local fake = string.format("%.1f", delta_to_draw)

        --Render Indicators
        local Render_Indicator = function(text, ay2, color, size, font, outline, sas)
            local ts = Render.CalcTextSize(text, size, font)
            Render.Text(text, Vector2.new(x/2-ts.x/2 - sas, y/2+ay2), color, size, font, outline)
        end
        --render
        local alpha = math.min(math.floor(math.sin((GlobalVars.realtime%3) * 4) * 175 + 50), 255)
        local sz = Render.CalcTextSize("0°", 10, font.pixel)
        Render_Indicator("Blame", ay, color, 10, font.pixel, true, sz.x)
        --Render_Indicator("*".. aa_state .."*", ay, color, 10, font.pixel, true, sz.x)

        local sz = Render.CalcTextSize("Blame", 10, font.pixel)
        Render_Indicator(""..math.floor(fake).."°", ay, Color.RGBA(255, 255, 255, 255), 10, font.pixel, true, -sz.x/2)
        ay = ay + 10
        if dt_ref:GetBool() then
            Render_Indicator("DT", ay, Exploits.GetCharge() == 1 and Color.RGBA(80, 255, 80, 255) or Color.RGBA(255, 80, 80, 255), 10, font.pixel, true, 0)
            ay = ay + 10
        end

        if hs_ref:GetBool() then
            Render_Indicator("HS", ay, Color.RGBA(250, 173, 181, 255), 10, font.pixel, true, 0)
            ay = ay + 10
        end

        if safepoints_ref:GetInt() == 2 then
            Render_Indicator("SP", ay, Color.RGBA(255, 255, 255, 255), 10, font.pixel, true, 0)
            ay = ay + 10
        end

        if body_ref:GetInt() == 2 then
            Render_Indicator("BAIM", ay, Color.RGBA(255, 255, 255, 255), 10, font.pixel, true, 0)
            ay = ay + 10
        end

        local local_player1 = EngineClient.GetLocalPlayer()
        local player = EntityList.GetClientEntity(local_player1)
        local is_moving = #(EntityList.GetLocalPlayer():GetProp("m_vecVelocity"))>5
        if not player then
            return
        end

        local flags = player:GetProp("m_fFlags")
        
        local aa_state = "STANDING"
        if is_moving then
            aa_state = "MOVING"
        end
        
        if (flags == 256) then
            aa_state = "AIR"
        end

        if player:GetProp("m_flDuckAmount") > 0.9 then
            aa_state = "CROUCHING"   
        end

        if sw_ref:GetBool() then
            aa_state = "SLOW-WALKING"
        end
        local ts = Render.CalcTextSize("Blame", 10, font.pixel)
        Render.Text("*".. aa_state .."*", Vector2.new(x/-ts.x, y/2), color, 10, font.pixel, true)
    end
end
end

--------------------------------- DAMAGE INDICATOR

local dmg_indicator_font = Render.InitFont("nl\\Blame\\fonts\\smallest_pixel-7.ttf", 10)

local damage_screen = EngineClient.GetScreenSize()
local vecPositions = {
    [0] = Vector2.new(damage_screen.x/2 + 10, damage_screen.y/2 - 30),
    [1] = Vector2.new(damage_screen.x/2 - 15, damage_screen.y/2 - 30),
    [2] = Vector2.new(damage_screen.x/2 - 2, damage_screen.y/2 - 30)
}

local function damage_indicator_dmg()
    local player1234 = EntityList.GetLocalPlayer();   
    if not player1234 then return end   
    local lifeState1234 = player1234:GetProp("m_lifeState");
    if not lifeState1234 then
    if menu_elements.custom_visuals:GetBool(2) then
    Render.Text(tostring(Menu.FindVar("Aimbot", "Ragebot", "Accuracy", "Minimum Damage"):GetInt()) , vecPositions[menu_elements.min_damage_indicator_pos:GetInt()], Color.new(1.0, 1.0, 1.0, 1.0), 10, dmg_indicator_font, true)
end
end
end

--------------------------------- SNAPLINES
function is_alive1234()
    local player = EntityList.GetLocalPlayer()
    if not player then return end
    local lifeState = player:GetProp("m_lifeState")
    
    return not lifeState
    end

TP = Menu.FindVar("Visuals", "View", "Thirdperson", "Enable Thirdperson")
function snape_lines()
    if not is_alive1234() then return end
    if not menu_elements.custom_visuals:GetBool(9) then return end
    local screen_size = EngineClient.GetScreenSize()
       local lines_color = menu_elements.snapelines_color:GetColor()
       local players = EntityList.GetPlayers()
       local local_player = EntityList.GetLocalPlayer()
      
       for _, player_ptr in ipairs(players) do
          if player_ptr == local_index or player_ptr:IsTeamMate() then goto skip end
          local position = Render.WorldToScreen(player_ptr:GetEyePosition())
          local pos2 = Render.WorldToScreen(EntityList.GetLocalPlayer():GetHitboxCenter(5))
          local vec = Cheat.AngleToForward(EngineClient.GetViewAngles())

          pos2 = TP:Get() and pos2 or Render.WorldToScreen(EntityList.GetLocalPlayer():GetRenderOrigin())
          local lifeState = player_ptr:GetProp("m_lifeState"); if lifeState then goto skip end
          if player_ptr:IsDormant() then goto skip end
          if menu_elements.snapelines_render:GetInt()==0 then
          Render.Line(position, Vector2.new(screen_size.x / 2, screen_size.y / 2), lines_color)
          end
          if menu_elements.snapelines_render:GetInt()==1 then
        Render.Line(position, pos2, lines_color)
          end
         ::skip::
       end
   end
-- snaplines end



--------------------------------- TRASHTALK

local phrases = {
    "1 пидорасина ебаная спи",
    "l2p bot",
    "iq ? HAHAHA",
    "BY SANCHEZJ (◣_◢)",
    "sleep",
    "обоссан",
    "GLhf.exe Activated",
    "ᛈᗗᛈᗴῷ Кᗗᛕ δ৮ᛈᛠᚦᚖאᚖᚨนҋ",
    "ᛈᗗᛈᗗለᗗ ᛠ৮ ᛈᚖᛒᛈᗴᛗ",
    "ты понимаешь, что клитор твоей матери эта зона чрезвычайно опасная ??",
    "сру в тя в классе",
    "У тебя бешенство начинается?",
    "Звучит, как иди на хуй",
    "Это выгодно мне/тебе/нам",
    "ой иди на хуй !!!!",
    "похуй я Же говорю я Бобрик из Гетто!",
    "как же я с тебя ору",
    "НЕ делай одолжений, просто делай мне минет!",
    "хуем тибя щас уебу)0",
    "сасеш норм)0",
    "чота ты сосешь мне)0",
    "чота мать тваю выкинул)0",
    "гариш слетая)0",
    "ЕБАТЬ ТЫ НИЩИЙ, СОСИ)0))",
    "УБИТО СОСЁШЬ МНЕ, КУКОЛД)0))",
    "нихуя я тя красиво бомбанул",
    "может уже купишь луашку Blame.lua? Я устал тебя ебашить((",
    "легко сочнярик",
    "уебище учись играть",
    "изи мусорила ебанная",
    "я твоей матери горло ёршиком промывал что бы заглатывала лучше ебаная свинья",
    "ебаный сын подъезда как ты пикаешь",
    "сын ебаной жирной жабы"
    
}

local english = {
    "I'll keep hitting Baim until you die",
    "I'll put my dick down your throat",
    "you got it wrong HAHAHAHAH",
    "Nice desync, is that Eternity?",
    "You get Baim and you run XD",
    "Fucking bitch from the countryside",
    "Did you shoot with your left hand? XD",
    "Nice miss sucker HAAHAH",
    "You were looking in the wrong direction",
    "What was that xd",
    "Go take a bath and give me a blowjob",
    "You're a bitch from the village looking for ravens with a bag",
    "I'm a famous shepherd, give you my dick to graze",
    "Hi boy are you lost?",
    "You're so fat you can be seen through three walls",
    "beautiful",
    "sit dog",
    "You and your dad's stomach is constantly sticking out ... Baim!",
    "uff... I'm the King of Baim! $$",
    "Hallelujah, you sucked my .!.",
    "lol i disabled the resolver xDD",
    "The most nervous dinner of my life",
    "BaIm bAiM BaIm",
    "Okay, I'm silent, I'm leaving you alone",
    "Hmm ... I don't know how to tell you this, but ... did you see me as a firefighter when I put my dick on your shoulder?",
    "I put my cock on your chest",
    "Will you send the cfg to osiris?",
    '˜" ° • .˜ "° • 1 • °" ˜. • ° "˜',
    "easy xD",
    "I fucked you through the wall",
    "I hit your head with my dick",
    "1 enters in baldness head",
    "Look at it on the right side, at least you hit the wall xD",
    "ESC -> Help and Options -> How to Play",
    "For pregnant girls, I recommend skeet with vitamins",
    "Hakuna matataaaa, how 1 comes hereeee...",
    "You looked at me like you nodded",
    "fuck you, fuck me like a villager",
    "Are you scared? Yeah!",
    "grill cold ice cream", 
}

local poland = {
    "Będę walił Baima, aż zginiesz",
    "Włożę ci penisa w gardło",
    "źle trafiłeś HAHAHAHAH",
    "Dobry desync, to ethernity?",
    "Dostajesz Baima i uciekasz XD",
    "Jebana suka ze wsi",
    "Strzelałeś lewą ręką? XD",
    "Nice miss frajerze HAAHAH",
    "Patrzyłeś w złą stronę",
    "co to było xd",
    "Idź się umyj i zrób mi loda",
    "Jesteś suką ze wsi szukającą kruków z woreczkiem",
    "Jestem znanym pasterzem, daję Ci kutasa do wypasania",
    "Cześć chłopcze, zgubiłeś się?",
    "Jesteś tak gruby, że było cie widać przez trzy ściany",
    "VeRy NeRvoS BaIm",
    "pięknie",
    "siadaj psie",
    "Tobie i twojemu staremu ciągle wystaje brzuch... Baim!",
    "uff... Król Baim'a! $$",
    "Alleluja, obciągnąłęś mi.!.",
    "lol, wyłączyłem resolver xDD",
    "Najbardziej nerwowa kolacja w moim życiu",
    "BaIm bAiM BaIm",
    "Dobra milczę, daję ci spokój",
    "Nie no, żartowałem xD",
    "Hmm… Nie wiem, jak ci to powiedzieć, ale… czy postrzegałeś mnie jako strażaka, gdy położyłem ci penisa na ramieniu?",
    "kładę Ci fiuta na piersi",
    "Podeślesz cfg do osirisa?",
    '˜" ° • .˜ "° • 1 • °" ˜. • ° "˜',
    "łatwo xD",
    "Zajebałem Ci liścia przez ścianę",
    "uderzyłem Ci w głowę kutasem",
    "1 wchodzi w łysinę",
    "Spójrz na to dobrą stroną, przynajmniej ściane obiłeś xD",
    "ESC -> Pomoc i opcje -> Jak grać",
    "Dziewczynom w ciąży polecam skeeta z witaminami",
    "Hakuna matataaaa, jak 1 wchodzi tuuu...",
    "Tak na mnie patrzyłeś, jakbyś skinął głową",
    "pieprz się, pieprz mnie jak wieśniak",
    "Boisz się? Taaak!",
    "grilluj zimnego loda",
}

local romanian = {
    'stai jos dog',
    'sugi pula',
    'Ai cumva cheat-ul ala de la Llama?',
    'efortless',
    'foaie verde castravete ti-am dat 1 prin perete',
    'cand pun ochiu in luneta o vad pe ma-ta pe mocheta',
    'Juan ',
    'foaie verde si-o spatula ti-am dat cap cu ma-ta-n pula',
    'mama coaie am dat click manual zici ca sunt alien cosminel',
    '1 by esoterik bro',
    '1 by pleata lui darth',
    'foaie verde be the heda ti-ai luat tap de la wanheda',
    'fie viata cat de grea iti dau tap ce pula mea',
    'foaie verde butelie intra glontu in chelie',
    'hacker de sentimente sparg capuri si apartamente',
    'skeet in buzunare sa-i dau tap lui fleeekkk',
    'Priveste partea buna, macar ai dat 100 damage la peretele din spatele meu !',
    'ESC --> volunteering & Options --> How to Play',
    '1 1 1 VeRy NeRvOs hEaDsHoT 1 1 1',
    'Pt fetele gravide recomand skeet cu vitamine.',
    '1 tie 1 lui ma-ta',
    'Asa a dat si ma-ta ochii peste cum ai dat tu cu capul',
    'futu-ti mortii ma-tii sa-ti fut de taran',
    'Tragem pula in mamele voastre!!!',
    'Te-ai speriat? Eu da!',
    'ai capul ala zici ca e made in china',
    'da-te ca-mi bag pula',
    'ai gresit 1way-ul',
    'alo baiatu, te-ai pierdut ? iti bag waze-u ?',
    'Ai corpul ala zici ca e halba de bere.',
    'ai corpul ala zici ca e lumanare de botez.',
    'VeRy NeRvoS BaIm',
    'stai jos caine',
    'Tu si Oana Roman ce mai stati cu burta pe afara.',
    'apas f pt tine <3',
    'scz eram cu legitbotu on',
    'rostogoli-mi-as pula-n ma-ta cum se rostogoleste crocodilu-n apa',
    'coaie ce corp ai zici ca esti desenat cu stanga',
    'foaie verde de cucuta hai la tata sa te futa',
    'aleluia ai luat muia .!.',
    'nice desync, esti cu eternity ?',
    'lol aveam resolver-ul off.',
    'Cel mai nervos baim din viata mea',
    'asta ajunge la war montage ms ms',
    'BaIm bAiM BaIm',
    'ceapa verde foaie iute uite baimu cum se duce',
    'Foaie verde praf de ciori iti iei baim pana mori',
    'Foaie verde si-o lamaie iti dau baim si iei muie',
    'foaie verde acadea ia cu baim in pula mea',
    'sunt haiduc cunoscut, iti dau pula la pascut',
    'sunt tac-tu, hai sa-ti dau lape',
    'ba..nu stiu cum sa-ti spun, dar...isi mai da ma-ta filme ca-i pompier de cand i-am pus pula peste umar?',
    'sa-ti pun pula pe piept ',
    'hai back to canal boschetare',
    'hai la gratar sa-ti frig o muie',
    "smecherii fut",
    "fraierii isi iau cap"
}

local function get_phrase()
    return phrases[Utils.RandomInt(1, #phrases)]:gsub('\"', '')
end

local function get_phrase2()
    return english[Utils.RandomInt(1, #english)]:gsub('\"', '')
end

local function get_phrase3()
    return poland[Utils.RandomInt(1, #poland)]:gsub('\"', '')
end

local function get_phrase4()
    return romanian[Utils.RandomInt(1, #romanian)]:gsub('\"', '')
end

Cheat.RegisterCallback("events", function(event)
    if not menu_elements.ttonkill:Get() then return end
    if event:GetName() ~= "player_death" then return end

    local me = EntityList.GetLocalPlayer()
    local victim = EntityList.GetPlayerForUserID(event:GetInt("userid"))
    local attacker = EntityList.GetPlayerForUserID(event:GetInt("attacker"))

    if victim == attacker or attacker ~= me then return end

    if menu_elements.languageonkill:GetInt()==0 then
    EngineClient.ExecuteClientCmd('say "' .. get_phrase() .. '"')
    end
    if menu_elements.languageonkill:GetInt()==1 then
    EngineClient.ExecuteClientCmd('say "' .. get_phrase2() .. '"')
    end
    if menu_elements.languageonkill:GetInt()==2 then
    EngineClient.ExecuteClientCmd('say "' .. get_phrase3() .. '"')
    end
    if menu_elements.languageonkill:GetInt()==3 then
    EngineClient.ExecuteClientCmd('say "' .. get_phrase4() .. '"')
    end
end)


--------------------------------- EVENTLOGS
local math_lib = {
    clamp = function(val, lower, upper)
        if lower > upper then lower, upper = upper, lower end
        return math.max(lower, math.min(upper, val))
    end
}
local lua = {
    color = Color.RGBA(157, 162, 255, 255),
    font = Render.InitFont('nl\\Blame\\fonts\\smallest_pixel-7.ttf', 11),
    screen = EngineClient.GetScreenSize(),
    logs = {
        stuff = {},
        num = 0,
        reason = {
            [1] = 'unknown',
            [2] = 'spread',
            [3] = 'occlusion',
            [4] = 'prediction error'
        },   
        hitgroups = {
            [0] = "generic",
            [1] = "head",
            [2] = "chest",
            [3] = "stomach",
            [4] = "left arm",
            [5] = "right arm",
            [6] = "left leg",
            [7] = "right leg",
            [10] = "gear"
        }
    }
}
local render = {
    box = function(string,y,alpha)
        local stringsize = Render.CalcTextSize(string,11,lua.font).x
        Render.BoxFilled(Vector2.new(lua.screen.x/2-stringsize/2-4.1,lua.screen.y-100-y),Vector2.new(lua.screen.x/2+stringsize/2+4.1,lua.screen.y-80-y),Color.RGBA(0,0,0,120), 18)
        Render.Box(Vector2.new(lua.screen.x/2-stringsize/2-4.1,lua.screen.y-100-y),Vector2.new(lua.screen.x/2+stringsize/2+4.1,lua.screen.y-80-y),lua.color, 18)
        Render.Text(string,Vector2.new(lua.screen.x/2,lua.screen.y-90-y),lua.color,11,lua.font,true,true)
    end
}

function eventdraw()
    lua.color = Color.RGBA(255,255,255,254)
    for i, log in ipairs(lua.logs.stuff) do
        render.box(log.text,i*28,255)
        if log.time + 4.5 < GlobalVars.realtime then table.remove(lua.logs.stuff,i) end
    end
end

function eventshot(shot)
    lua.logs.num = lua.logs.num + 1
    if menu_elements.eventlogs:Get() and menu_elements.eventtype:Get(1) then
        local player = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
        if not player then return end
        if player:GetProp("m_iHealth") > 0 then
        if shot.reason == 0 then
            table.insert(lua.logs.stuff,{text = '[Blame] Hit ' .. EntityList.GetClientEntity(shot.target_index):GetPlayer():GetName() .. "'s in " .. lua.logs.hitgroups[math_lib.clamp(shot.hitgroup,0,10)] .. ' for ' .. shot.damage .. ' damage [spread: ' .. string.format('%.3f°',shot.spread_degree) .. '] [hitchance:' .. shot.hitchance ..' | backtrack:' .. shot.backtrack ..']',time = GlobalVars.realtime})
            print('[Blame] Hit ' .. EntityList.GetClientEntity(shot.target_index):GetPlayer():GetName() .. "'s in " .. lua.logs.hitgroups[math_lib.clamp(shot.hitgroup,0,10)] .. ' for ' .. shot.damage .. ' damage [spread: ' .. string.format('%.3f°',shot.spread_degree) .. '] [hitchance:' .. shot.hitchance ..' | backtrack:' .. shot.backtrack ..']')
        end
    end
end
end

function eventmiss(shot)
    lua.logs.num = lua.logs.num + 1
    if menu_elements.eventlogs:Get() and menu_elements.eventtype:Get(2) then
        local player = EntityList.GetClientEntity(EngineClient.GetLocalPlayer())
        if not player then return end
        if player:GetProp("m_iHealth") > 0 then
        if not shot.reason == 0 then
            table.insert(lua.logs.stuff,{text = '[Blame] Missed shot in ' .. EntityList.GetClientEntity(shot.target_index):GetPlayer():GetName() .. "'s " .. lua.logs.hitgroups[math_lib.clamp(shot.wanted_hitgroup,0,10)] .. ' due to ' .. lua.logs.reason[shot.reason] .. ' [spread: ' .. string.format('%.3f°',shot.spread_degree) .. '] [hitchance:' .. shot.hitchance ..' | backtrack:' .. shot.backtrack ..']',time = GlobalVars.realtime})
            print('[Blame] Missed shot in ' .. EntityList.GetClientEntity(shot.target_index):GetPlayer():GetName() .. "'s " .. lua.logs.hitgroups[math_lib.clamp(shot.wanted_hitgroup,0,10)] .. ' due to ' .. lua.logs.reason[shot.reason] .. ' [spread: ' .. string.format('%.3f°',shot.spread_degree) .. '] [hitchance:' .. shot.hitchance ..' | backtrack: '.. shot.backtrack ..']')
        end
    end
end
end



--------------------------------- KEYBINDS & WATERMARK
local Font  = {
    Verdana = Render.InitFont('Verdana', 11,{'r'}),
    Verdana2 = Render.InitFont('Verdana', 13,{'r'}),
    Tahoma  = Render.InitFont("Tahoma", 8),
    pixel = Render.InitFont("nl\\Blame\\fonts\\smallest_pixel-7.ttf", 11),
}

local function GetPing()
    if EngineClient.GetNetChannelInfo() ~= nil then
        return string.format("%1.f", math.max(0.0, EngineClient.GetNetChannelInfo():GetLatency(0)) * 1000.0)
    else
        return "0"
    end
end

local function GetTime()
    local hours   = math.floor((math.floor(Utils.UnixTime() / 1000) / 3600 + 3) % 24)
    local minutes = math.floor(math.floor(Utils.UnixTime() / 1000) / 60 % 60)
    local sec     = math.floor(math.floor(Utils.UnixTime() / 1000) % 60)

    if sec < 10     then sec = "0" .. sec         end
    if minutes < 10 then minutes = "0" .. minutes end
    if hours < 10   then hours = "0" .. hours     end

    return hours .. ":" .. minutes .. ":" .. sec
end
-------------------------------------------------------- WATERMARK

-- avatar from neverlose
local image_size = Vector2.new(33, 33)
local url = "https://en.neverlose.cc/static/avatars/"..Cheat.GetCheatUserName().. ".png"
local bytes = Http.Get(url)
local avatar = Render.LoadImage(bytes, image_size)

-- Blame logo
local image_size1 = Vector2.new(42, 42)
local url1 = "https://cdn.discordapp.com/attachments/959550720963645450/967451535585984582/Nowy_projekt.png"
local bytes1 = Http.Get(url1)
local Blamelogo = Render.LoadImage(bytes1, image_size1)

local function watermark()
    if menu_elements.windows:GetBool(2) then
    local x = EngineClient.GetScreenSize().x
    local y = EngineClient.GetScreenSize().y
    local uicolor = menu_elements.Blamecolor:Get()
    local text     = Cheat.GetCheatUserName().. "  delay: " .. GetPing() .."ms  " .. string.format("%s", GetTime())
    local textSize = Render.CalcTextSize(text, 11, Font.Verdana)
    local position = Vector2.new(EngineClient:GetScreenSize().x - textSize.x - 13, 30)


    ------ RIGHT BOX WITH INFORMATIONS   
    Render.Box(Vector2.new(position.x - 4, position.y - 21), Vector2.new(position.x + textSize.x + 4, position.y + 18), uicolor, 5)
    Render.BoxFilled(Vector2.new(position.x - 3, position.y - 20), Vector2.new(position.x + textSize.x + 3, position.y + 17), Color.RGBA(0, 0, 0, 211), 4)
    Render.Text(text, Vector2.new(position.x, position.y - 10), Color.RGBA(255, 255, 255, 255), 11, Font.Verdana, false)
    --Render.Text("Blame", Vector2.new(position.x + 10, position.y - 18), Color.RGBA(255, 255, 255, 255), 11, Font.pixel, false)
    --Render.Text("Stable", Vector2.new(position.x + 10, position.y + 2), Color.RGBA(255, 255, 255, 255), 11, Font.pixel, false)
    ------ AVATAR
    ------ Render.Circle(Vector2.new(position.x - 46, position.y - 18), 1.0, 30, uicolor)
    Render.Box(Vector2.new(position.x - 51, position.y - 21), Vector2.new(position.x - 9, position.y + 18), uicolor, 5)
    Render.BoxFilled(Vector2.new(position.x - 50, position.y - 20), Vector2.new(position.x - 10, position.y + 17), Color.RGBA(0, 0, 0, 211), 4)
    ------ DOWN LOGO
    --Render.Box(Vector2.new(position.x - 101, position.y - 21), Vector2.new(position.x - 59, position.y + 18), uicolor, 4)
    --Render.BoxFilled(Vector2.new(position.x - 100, position.y - 20), Vector2.new(position.x - 60, position.y + 17), Color.RGBA(0, 0, 0, 211), 4)

    if menu_elements.avatarcombo:Get() == 0 then
        Render.Image(avatar, Vector2.new(position.x - 46, position.y - 18), image_size)   
    else
        Render.Image(Blamelogo, Vector2.new(position.x - 50, position.y - 24), image_size1)   
    end


    if menu_elements.uitextline:GetBool() then
    Render.Box(Vector2.new(position.x + 31, position.y + 15), Vector2.new(position.x + 31, position.y - 19), uicolor) -- line
    Render.Box(Vector2.new(position.x + 94, position.y + 15), Vector2.new(position.x + 94, position.y - 19), uicolor) -- line
    end
end
end

-------------------------------------------------------- KEYBINDS

local function color(r, g, b, a) return Color.new(r / 255, g / 255, b / 255, a / 255) end
local function clamp(val, min, max) if val > max then return max end if min > val then return min end return val end

local function render_adaptive_box(type, x, y, name, alpha)
    local name_size = Render.CalcTextSize(name, 12, Font.Verdana)
    Render.Box(Vector2.new(x, y), Vector2.new(x + 150, y + 27), Color.new(menu_elements.Blamecolor:GetColor().r, menu_elements.Blamecolor:GetColor().g, menu_elements.Blamecolor:GetColor().b, 255 * alpha), 5)
    Render.BoxFilled(Vector2.new(x, y), Vector2.new(x + 150, y + 27), color(0, 0, 0, 110 * alpha), 4)
    Render.Text(name, Vector2.new(x + 150 / 2 - name_size.x / 2, y + 7), Color.new(255,255,255, 255 * alpha), 13, Font.Verdana2, menu_elements.textoutlinekeybinds:GetBool())
end


local keybinds_alpha = 0

local in_bounds = function(area, point)
    return point.x > area.x and point.x < area.x2 and point.y > area.y and point.y < area.y2;
end

local new = function(x, y, w, h)
    local area_info_t = {
        x = x,
        y = y,
        x2 = x + w,
        y2 = y + h
    }
    return area_info_t;
end

local point =  function(x, y)
    local point_info_t = {
        x = x,
        y = y
    }
    return point_info_t;
end

local drag = false
local width = 0

local function draw_keybinds()
    if menu_elements.windows:GetBool(3) then
    local binds = Cheat.GetBinds()
    local keybinds_next_line = 0

    local keybinds_x = menu_elements.UI_Keybinds_X:GetInt()
    local keybinds_y = menu_elements.UI_Keybinds_Y:GetInt()

    
    if #binds > 0 or Cheat.IsMenuVisible() then
        keybinds_alpha = clamp(keybinds_alpha + (1 / .15) * GlobalVars.frametime, 0, 1)
    else
        keybinds_alpha = clamp(keybinds_alpha - (1 / .15) * GlobalVars.frametime, 0, 1)
    end

    local function render_binds(binds)
        if not binds:IsActive() then return end
        local bind_name = binds:GetName()
        local bind_state = binds:GetMode()
            
        local statetext = string.format("")
        
        if bind_state == 0 then
            statetext = string.format("[toggled]")
        else
            statetext = string.format("[holding]")
        end

        local binds_state_size = Render.CalcTextSize(statetext, 11, Font.Verdana)

        Render.Text(bind_name, Vector2.new(keybinds_x + 1, keybinds_y + 27 + keybinds_next_line), Color.new(255,255,255,keybinds_alpha), 11, Font.Verdana, menu_elements.textoutlinekeybinds:GetBool())
        Render.Text(statetext, Vector2.new(keybinds_x + 149 - binds_state_size.x, keybinds_y + 27 + keybinds_next_line), Color.new(255,255,255,keybinds_alpha), 11, Font.Verdana, menu_elements.textoutlinekeybinds:GetBool())

        keybinds_next_line = keybinds_next_line + 16
    end

    render_adaptive_box("keybinds", keybinds_x, keybinds_y, "keybinds", keybinds_alpha)

    for i = 1, #binds do
        render_binds(binds[i])
    end

    local mouse = Cheat.GetMousePos()
    local max_width = 0
    width = math.max(150, max_width)

    if Cheat.IsKeyDown(1) then
        if mouse.x >= menu_elements.UI_Keybinds_X:GetInt() and mouse.y >= menu_elements.UI_Keybinds_Y:GetInt() and mouse.x <= menu_elements.UI_Keybinds_X:GetInt() + width and mouse.y <= menu_elements.UI_Keybinds_Y:GetInt() + 18 or drag then
            if not drag then
                drag = true
            else
                menu_elements.UI_Keybinds_X:SetInt(mouse.x - math.floor(width / 2))
                menu_elements.UI_Keybinds_Y:SetInt(mouse.y - 8)
            end
        end
    else
        drag = false
    end
end
end


--------------------------------- EVENTLOGS



----------------------------------------- RAGEBOT -----------------------------------------

----------------------------------------- QUCIKPEEK


----------------------------------------- air/noscope hitchange dmg
----------------------------------------- ANTIAIM -----------------------------------------



----------------------------------------- OTHER FUNCTIONS ANTIAIM...






----------------------------------------- ANTIBACKSTAB









----------------------------------------- ANTIBRUTEFORCE
local anti_brute = {
    working = false,
    num_phases = Menu.SliderInt("» AntiAim", "Blame - Anti-Bruteforce","" , 2 , 2 , 10),
    cur_phase = 0,
    timer = 0,
    phases = {},


    adjust_abrute = function(self)
        local n = self.num_phases:Get()
        local b = menu_elements.switchbruteforce:Get()
        self.add_phase:SetVisible(b)
        self.remove_phase:SetVisible(b)
        for i=1 , 10 do
            self.phases[i]:SetVisible(i-1<n and b)
        end
    end
}

for i=1 , 10 do
    anti_brute.phases[i] = Menu.SliderInt("» AntiAim", "Blame - Anti-Bruteforce",  "Phase "..i , 60 , -60 , 60)
end

anti_brute.num_phases:SetVisible(false)

anti_brute.add_phase = Menu.Button("» AntiAim", "Blame - Anti-Bruteforce",  "Add Phase" , "" , function()





    if anti_brute.num_phases:Get() > 9 then
        Cheat.AddNotify("Blame.lua" , "Cannot add more phases")
        return
    end


    anti_brute.num_phases:Set( anti_brute.num_phases:Get() +1)
    anti_brute:adjust_abrute()
end)

anti_brute.remove_phase = Menu.Button("» AntiAim", "Blame - Anti-Bruteforce", "Remove Phase" , "" , function()
    if anti_brute.num_phases:Get() < 3 then
        Cheat.AddNotify("Blame.lua" , "Cannot remove more phases")
        return
    end

    anti_brute.num_phases:Set( anti_brute.num_phases:Get() -1)
    anti_brute:adjust_abrute()
end)

menu_elements.switchbruteforce:RegisterCallback(function() anti_brute:adjust_abrute() end)
anti_brute:adjust_abrute()

local abrute_pred = function()

    if not anti_brute.working then return end



    if (not anti_brute.working) or #anti_brute.phases==0  then return end
    if not menu_elements.switchbruteforce:Get() then return end
    
    anti_brute.timer = anti_brute.timer - GlobalVars.interval_per_tick

    if anti_brute.timer < 0 then anti_brute.timer = 0 end
    

    if anti_brute.timer == 0 and (anti_brute.working )  then anti_brute.working= false  end




    --print(globals.abrute_phases , globals.abrute_phase , #ui.aa.phases)

    if anti_brute.phases[anti_brute.cur_phase +1] and anti_brute.working then
        AntiAim.OverrideInverter( anti_brute.phases[anti_brute.cur_phase +1]:Get() < 0)
        AntiAim.OverrideLimit(math.abs( anti_brute.phases[anti_brute.cur_phase +1]:Get()))
    end

end

--------------- extended desync

Cheat.RegisterCallback("prediction", function(cmd)
    if not menu_elements.extendeddesync:GetBool(1) then return end

    if  sw_ref:Get() or  EntityList.GetLocalPlayer():GetProp("m_vecVelocity"):Length() <20 then

    local side = AntiAim.GetInverterState() and 1 or -1
    cmd.viewangles.roll = 44 * side
    end
end)

--------------- legitaa
local start_curtime = GlobalVars.curtime
            local reference_pitch = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Pitch")
            local reference_yawbase = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Base")
            local yawbase_backup = reference_yawbase:Get()
            local override_legitAA = true
            
                local function legitaa(cmd)
                if menu_elements.legitAA:GetBool() then
                local localp = EntityList.GetLocalPlayer()
                local legitAA = true
            
                if not localp then return end
            
                Entities = {}
                table.insert(Entities, EntityList.GetEntitiesByName("CPlantedC4"))
                table.insert(Entities, EntityList.GetEntitiesByName("CHostage"))
            
                for Entity in pairs(Entities) do
                    for i in pairs(Entities[Entity]) do
            
                        local localplayer_origin = localp:GetRenderOrigin()
                        local entity_origin = Entities[Entity][i]:GetRenderOrigin()
            
                        local entity_distance = localplayer_origin:DistTo(entity_origin)
                        local distance = entity_distance < 65 and entity_distance > 1
                        local localplayer_is_ct = localp:GetProp("m_iTeamNum") == 3
            
                        if distance and localplayer_is_ct then
                            menu_elements.legitAA = false
                        end
                    end
                end
            
                if bit.band(cmd.buttons, 32) == 32 and menu_elements.legitAA then
                    if GlobalVars.curtime - start_curtime > 0.02 then
                        cmd.buttons = bit.band(cmd.buttons, bit.bnot(32))
                        reference_pitch:Set(0)
                        if override_legitAA then
                            yawbase_backup = reference_yawbase:Get()
                            override_legitAA = false
                        end
                        reference_yawbase:Set(0)
                        AntiAim.OverrideYawOffset(0 -Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Add"):Get())
                    end
                else
                    reference_pitch:Set(1)
                    if not override_legitAA then
                        reference_yawbase:Set(yawbase_backup)
                        override_legitAA = true
                    end
                    start_curtime = GlobalVars.curtime
                end
            end
                end

    Cheat.RegisterCallback("pre_prediction", function(cmd)
    legitaa(cmd)
        end)

Cheat.RegisterCallback("draw", draw)


--------------- edgeyaw blat
function VectorLerp(vecSource, vecDestination, flPercentage)
    return vecSource + (vecDestination - vecSource) * flPercentage
end

function NormalizeYaw(flYaw)
    while flYaw > 180 do flYaw = flYaw - 360 end
    while flYaw < -180 do flYaw = flYaw + 360 end
    return flYaw
end

local refEnabled = menu_elements.refEnabled
local vecTraceStart = Vector.new()

Cheat.RegisterCallback('pre_prediction', function(UserCmd)
    if not refEnabled:GetBool() then return end

    local iLocalPlayerEntIndex = EngineClient.GetLocalPlayer()
    if not iLocalPlayerEntIndex then return end

    local pLocalPlayerEntity = EntityList.GetClientEntity(iLocalPlayerEntIndex)
    local pLocalPlayer = pLocalPlayerEntity:GetPlayer()

    local flVelocityZ = pLocalPlayer:GetProp('m_vecVelocity[2]')
    local bInJump = bit.band(UserCmd.buttons, 2) == 2
    if flVelocityZ ~= 0 or bInJump then return end

    if ClientState.m_choked_commands == 0 then
        vecTraceStart = pLocalPlayer:GetEyePosition()
    end

    local aTraceEnd = {}

    local angViewAngles = EngineClient.GetViewAngles()
    for flYaw = 18, 360, 18 do
        flYaw = NormalizeYaw(flYaw)

        local angEdge = QAngle.new(0, flYaw, 0)

        local vecTraceEnd = vecTraceStart + Cheat.AngleToForward(angEdge) * 0x60

        local traceInfo = EngineTrace.TraceRay(vecTraceStart, vecTraceEnd,
                                               pLocalPlayerEntity, 0x200400B)

        local flFraction = traceInfo.fraction
        local pEntity = traceInfo.hit_entity

        if pEntity and pEntity:GetClassName() == 'CWorld' and flFraction < 0.3 then
            aTraceEnd[#aTraceEnd + 1] = {
                vecTraceEnd = traceInfo.endpos,
                flYaw = flYaw
            }
        end
    end

    table.sort(aTraceEnd, function(a, b) return a.flYaw < b.flYaw end)

    local angEdge

    if #aTraceEnd >= 2 then
        local vecTraceCenter = VectorLerp(aTraceEnd[1].vecTraceEnd,
                                          aTraceEnd[#aTraceEnd].vecTraceEnd, 0.5)

        angEdge = Cheat.VectorToAngle(vecTraceStart - vecTraceCenter)
    end

    if angEdge then
        local flYaw = angViewAngles.yaw
        local flEdgeYaw = angEdge.yaw

        local flDiff = NormalizeYaw(flEdgeYaw - flYaw)

        if math.abs(flDiff) < 90 then
            flDiff = 0
            flYaw = NormalizeYaw(flEdgeYaw + 180)
        end

        -- Static yaw
        local flNewYaw = -flYaw

        -- Apply edge yaw
        flNewYaw = NormalizeYaw(flNewYaw + flEdgeYaw + 180)

        flNewYaw = NormalizeYaw(flNewYaw + flDiff)

        AntiAim.OverrideYawOffset(flNewYaw)
    end
end)


----------------------------------------- FULL AA (PRESETS & CUSTOM AA)
local ref = {}
ref.antiaim = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Enable Anti Aim")
ref.base = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Base")
ref.yawadd = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Add")
ref.yawmodifier = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Modifier")
ref.yawmodifierdegree = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Modifier Degree")
ref.inverter = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Inverter")
ref.leftlimit = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Left Limit")
ref.rightlimit = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Right Limit")
ref.fakeoptions = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Fake Options")
ref.desync_freestand = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Freestanding Desync")
ref.lbymode = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "LBY Mode")
ref.onshot = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Desync On Shot")

local left_limit = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","Left Limit")
local right_limit = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","Right Limit")
local options = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","Fake Options")
local lby_mode = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","LBY Mode")
local freestand = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","Freestanding Desync")
local onshot = Menu.FindVar("Aimbot","Anti Aim","Fake Angle","Desync On Shot")
local yaw_base = Menu.FindVar("Aimbot","Anti Aim","Main","Yaw Base")
local SW = Menu.FindVar("Aimbot","Anti Aim","Misc","Slow Walk")
local FD = Menu.FindVar("Aimbot","Anti Aim","Misc","Fake Duck")
local pitch = Menu.FindVar("Aimbot","Anti Aim","Main","Pitch")
local yaw_add = Menu.FindVar("Aimbot","Anti Aim","Main","Yaw Add")
local yaw_modifier = Menu.FindVar("Aimbot","Anti Aim","Main","Yaw Modifier")
local modifier_degree = Menu.FindVar("Aimbot","Anti Aim","Main","Modifier Degree")

local state = {"Shared", "Stand", "Moving", "Air", "Duck", "Slow walk"}
local uiaantiaim = {}
uiaantiaim.aa = {}
uiaantiaim.aa[0] =
{
    antiaim = Menu.Combo("» AntiAim","Blame - AntiAim Builder", "Conditions", state, 0),
}
for i = 1, 6 do
    uiaantiaim.aa[i] = {
        custom_enable = Menu.Switch("» AntiAim","Blame - AntiAim Builder", string.format("Enable %s AntiAim", state[i]), false, string.format("Override %s settings", state[i])),
        custom_yaw_base = Menu.Combo("» AntiAim","Blame - AntiAim Builder", "Yaw Base", {"Forward", "Backward", "Right", "Left", "At Target", "Freestanding"}, 1),
        custom_yaw_add_left = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Yaw Add Left", 0, -180, 180),
        custom_yaw_add_right = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Yaw Add Right", 0, -180, 180),
        custom_yaw_modifier = Menu.Combo("» AntiAim","Blame - AntiAim Builder", "Yaw Modifier", {"Disabled", "Center", "Offset", "Random", "Spin"}, 0),
        custom_modifier_degree = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Modifier Degree", 0, -180, 180),
        custom_fake_type = Menu.Combo("» AntiAim","Blame - AntiAim Builder","Fake Type", {"Static","Jitter","Random"}, 0),
        custom_left_limit = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Left Limit", 60, 0, 60),
        custom_right_limit = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Right Limit", 60, 0, 60),
        custom_left_limit2 = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Left Limit [2]", 60, 0, 60),
        custom_right_limit2 = Menu.SliderInt("» AntiAim","Blame - AntiAim Builder", "Right Limit [2]", 60, 0, 60),
        custom_options = Menu.MultiCombo("» AntiAim","Blame - AntiAim Builder","Fake Options", {"Avoid Overlap","Jitter","Randomize Jitter", "Anti Bruteforce"}, 0),
        custom_lby = Menu.Combo("» AntiAim","Blame - AntiAim Builder","LBY Mode", {"Disabled","Opposite","Sway"}, 1),
        custom_fs = Menu.Combo("» AntiAim","Blame - AntiAim Builder","Freestanding Desync", {"Off","Peek Fake","Peek Real"}, 0),
        custom_onshot = Menu.Combo("» AntiAim","Blame - AntiAim Builder","Desync On Shot", {"Disabled","Opposite","Freestanding","Switch"}, 0),
    }
end
--in air check omgggggggggggg
function C_BasePlayer:InAir()
    return bit.band(self:GetProp("m_fFlags"), bit.lshift(1,0)) == 0
end

--crouch check rly work
function C_BasePlayer:Crouch()
    return self:GetProp("m_flDuckAmount") > 0.8
end

--velocity get 100%
function C_BasePlayer:GetVelocity()
    return self:GetProp("m_vecVelocity"):Length2D()
end

--something for anti aim (best function 100%)
function yaw(h, l, y)
    h:SetInt(AntiAim.GetInverterState() and l or y)
end

--one more best function for aa
function jitter(c, q)
    return math.random(0, 1) == 0 and c or q
end

function tankaa()
    if menu_elements.antiaims:Get(1) then
        if Cheat.IsMenuVisible() then
            ref.antiaim:Set(true)
            ref.base:Set(4)
            ref.yawadd:Set(0)
            ref.yawmodifier:Set(0)
            ref.yawmodifierdegree:Set(0)
            ref.inverter:Set(false)
            ref.leftlimit:Set(0)
            ref.rightlimit:Set(0)
            ref.fakeoptions:Set(0)
            ref.desync_freestand:Set(0)
            ref.lbymode:Set(0)
            ref.onshot:Set(0)   
        else
            ref.antiaim:Set(true)
            ref.base:Set(4)
            ref.yawadd:Set(0)
            ref.yawmodifier:Set(1)
            ref.yawmodifierdegree:Set(60)
            ref.inverter:Set(true)
            ref.leftlimit:Set(18)
            ref.rightlimit:Set(18)
            ref.fakeoptions:Set(2)
            ref.desync_freestand:Set(0)
            ref.lbymode:Set(1)
            ref.onshot:Set(2)
        end
    end
    if menu_elements.antiaims:Get(2) then
            local lp = EntityList.GetLocalPlayer()
            if lp == nil then return end
        
            local players = EntityList.GetPlayers()
        
            local active_weapon = lp:GetPlayer():GetActiveWeapon()
            if active_weapon == nil then return end
        
            if SW:Get() and uiaantiaim.aa[6].custom_enable:Get() then
                --slow walk
                stateid = 6
            elseif lp:InAir() and uiaantiaim.aa[4].custom_enable:Get() then
                --air
                stateid = 4
            elseif lp:Crouch() and uiaantiaim.aa[5].custom_enable:Get() or FD:Get() and uiaantiaim.aa[5].custom_enable:Get() then
                --duck
                stateid = 5
            elseif lp:GetVelocity() > 2 and uiaantiaim.aa[3].custom_enable:Get() then
                --move
                stateid = 3
            elseif lp:GetVelocity() < 2 and uiaantiaim.aa[2].custom_enable:Get() then
                --stand
                stateid = 2
            else
                --shared
                stateid = 1
            end
        
        
    
        pitch:Set(1)
        yaw(yaw_add, uiaantiaim.aa[stateid].custom_yaw_add_left:Get(), uiaantiaim.aa[stateid].custom_yaw_add_right:Get())
        yaw_modifier:Set(uiaantiaim.aa[stateid].custom_yaw_modifier:Get())
        modifier_degree:Set(uiaantiaim.aa[stateid].custom_modifier_degree:Get())
        if uiaantiaim.aa[stateid].custom_fake_type:Get() == 0 then
        left_limit:Set(uiaantiaim.aa[stateid].custom_left_limit:Get())
        right_limit:Set(uiaantiaim.aa[stateid].custom_right_limit:Get())
        elseif uiaantiaim.aa[stateid].custom_fake_type:Get() == 1 then
        left_limit:Set(jitter(uiaantiaim.aa[stateid].custom_left_limit:Get(), uiaantiaim.aa[stateid].custom_left_limit2:Get()))
        right_limit:Set(jitter(uiaantiaim.aa[stateid].custom_right_limit:Get(), uiaantiaim.aa[stateid].custom_right_limit2:Get()))
        elseif uiaantiaim.aa[stateid].custom_fake_type:Get() == 2 then
        left_limit:Set(math.random(uiaantiaim.aa[stateid].custom_left_limit:Get(), uiaantiaim.aa[stateid].custom_left_limit2:Get()))
        right_limit:Set(math.random(uiaantiaim.aa[stateid].custom_right_limit:Get(), uiaantiaim.aa[stateid].custom_right_limit2:Get()))
        end
        options:Set(uiaantiaim.aa[stateid].custom_options:Get())
        lby_mode:Set(uiaantiaim.aa[stateid].custom_lby:Get())
        freestand:Set(uiaantiaim.aa[stateid].custom_fs:Get())
        onshot:Set(uiaantiaim.aa[stateid].custom_onshot:Get())
    end
    end
local function visualfunc()
    local vis = function(s, d)
        s:SetVisible(d)
    end

    local set =
    {
        anti_aim = menu_elements.antiaims:Get() == 2
    }
 
    --anti aim

    vis(uiaantiaim.aa[0].antiaim, set.anti_aim)

    currentid = uiaantiaim.aa[0].antiaim:Get()+1

    uiaantiaim.aa[1].custom_enable:SetBool(true)
    vis(uiaantiaim.aa[1].custom_enable, false)

    vis(uiaantiaim.aa[2].custom_enable, set.anti_aim and currentid == 2)
    vis(uiaantiaim.aa[3].custom_enable, set.anti_aim and currentid == 3)
    vis(uiaantiaim.aa[4].custom_enable, set.anti_aim and currentid == 4)
    vis(uiaantiaim.aa[5].custom_enable, set.anti_aim and currentid == 5)
    vis(uiaantiaim.aa[6].custom_enable, set.anti_aim and currentid == 6)

    for i = 1, 6 do
        local isAA = set.anti_aim and uiaantiaim.aa[i].custom_enable:Get()
        local isAAF = uiaantiaim.aa[i].custom_fake_type:Get() == 1 and isAA or uiaantiaim.aa[i].custom_fake_type:Get() == 2 and isAA
        vis(uiaantiaim.aa[i].custom_yaw_base, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_yaw_add_left, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_yaw_add_right, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_yaw_modifier, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_modifier_degree, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_left_limit, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_right_limit, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_left_limit2, isAAF and currentid == i)
        vis(uiaantiaim.aa[i].custom_right_limit2, isAAF and currentid == i)
        vis(uiaantiaim.aa[i].custom_options, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_lby, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_fs, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_onshot, isAA and currentid == i)
        vis(uiaantiaim.aa[i].custom_fake_type, isAA and currentid == i)
    end
end
-- FULL AA END















----------------------------------------- MENU VISIBLITY -----------------------------------------

local function menuvisiblity()

    menu_elements.air_hitchance_value:SetVisible(menu_elements.air_hitchance:Get())
    menu_elements.ns_hitchance_value:SetVisible(menu_elements.ns_hitchance:Get())
    menu_elements.Teleport_Weapons:SetVisible(menu_elements.Enable:Get())

    menu_elements.change_draw_caracter:SetVisible(menu_elements.enable_change_draw_caracter:GetBool())

    menu_elements.glowpeekcolor:SetVisible(menu_elements.custom_visuals:GetBool(4))

    menu_elements.arrows:SetVisible(menu_elements.custom_visuals:GetBool(5))
    menu_elements.arrows_color:SetVisible(menu_elements.custom_visuals:GetBool(5))
    menu_elements.arrows_colorsecond:SetVisible(menu_elements.custom_visuals:GetBool(5))

    menu_elements.indicatorscolor:SetVisible(menu_elements.custom_visuals:GetBool(1))

    menu_elements.snapelines_color:SetVisible(menu_elements.custom_visuals:GetBool(9))
    menu_elements.snapelines_render:SetVisible(menu_elements.custom_visuals:GetBool(9))

    menu_elements.uitextline:SetVisible(menu_elements.uicustomi:GetBool() and menu_elements.windows:GetBool(2))
    menu_elements.Blamecolor:SetVisible(menu_elements.uicustomi:GetBool() and menu_elements.windows:GetBool(2) and menu_elements.windows:GetBool(3))

    menu_elements.avatarcombo:SetVisible(menu_elements.uicustomi:GetBool() and menu_elements.windows:GetBool(2))

    menu_elements.UI_Keybinds_X:SetVisible(menu_elements.windows:GetBool(3) and menu_elements.uicustomi:GetBool())
    menu_elements.UI_Keybinds_Y:SetVisible(menu_elements.windows:GetBool(3) and menu_elements.uicustomi:GetBool())
    menu_elements.textoutlinekeybinds:SetVisible(menu_elements.windows:GetBool(3) and menu_elements.uicustomi:GetBool())

    menu_elements.min_damage_indicator_pos:SetVisible(menu_elements.custom_visuals:GetBool(2))


end

----------------------------------------- LOCALS -----------------------------------------
function GetEnemies()
    local Enemies = {}

    for _, Player in pairs(EntityList.GetPlayers()) do
        if (not Player:IsTeamMate() and Player:IsAlive()) then
            table.insert(Enemies, Player:GetPlayer())
        end
    end

    return Enemies
end

function C_BasePlayer:CanHit()
    local Localplayer = EntityList.GetLocalPlayer()
    local TraceInfo = Cheat.FireBullet(self, self:GetEyePosition(), Localplayer:GetEyePosition())

    if (TraceInfo.damage > 0 and ((TraceInfo.trace.hit_entity and TraceInfo.trace.hit_entity:GetPlayer() == Localplayer) or false)) then
        return true
    end

    return false
end

function C_BasePlayer:GetFlag(shift)
    return bit.band(self:GetProp("m_fFlags"), bit.lshift(1, shift)) ~= 0
end

function C_BasePlayer:IsLocalPlayer()
    return self == EntityList.GetLocalPlayer()
end

function C_BasePlayer:IsEnemy()
    return EntityList.GetLocalPlayer() and self:IsTeamMate() == false
end

----------------------------------------- CALLBACKS -----------------------------------------

EngineClient.ExecuteClientCmd("playvol Blame\\hitsound\\hitsound.wav 0.75")


Cheat.RegisterCallback("prediction", function(cmd)
    if (menu_elements.Enable:Get() and menu_elements.Teleport_Weapons:Get() ~= 0 and dt_ref:Get()) then
        local Allow_Work = false
        local Need_Teleport = false

        local Localplayer = EntityList.GetLocalPlayer()
        local Weapon = Localplayer:GetActiveWeapon()
        local WeaponID = Weapon:GetWeaponID()

        local IsScout = WeaponID == 40
        local IsAWP = WeaponID == 9
        local IsPistols = Weapon:IsPistol()
        local IsZeus = WeaponID == 31
        local IsKnife = Weapon:IsKnife()
        local IsNades = Weapon:IsGrenade()

        for i, Weapons in pairs({
            IsScout,
            IsAWP,
            IsPistols,
            IsZeus,
            IsKnife,
            IsNades,
            not (IsScout or IsAWP or IsPistols or IsZeus or IsKnife or IsNades)
        }) do
            if (menu_elements.Teleport_Weapons:Get(i) and Weapons) then
                Allow_Work = true
            end
        end

        if (Allow_Work) then
            for _, Enemy in pairs(GetEnemies()) do
                if (not Enemy:IsDormant() and Enemy:CanHit()) then
                    Need_Teleport = true
                end
            end
        end

        if (Need_Teleport and not Localplayer:GetFlag(0)) then
            Exploits.ForceTeleport()
        end
    end
    tankaa()
end)




Cheat.RegisterCallback("draw", function()
    glowautopeek()
    menuvisiblity()
    custom_scope()
    viewmodelchuj()
    visualfunc()
    indicatorsdrwa()
    drawArrows()
    watermark()
    tag()
    draw_keybinds()
    damage_indicator_dmg()
    snape_lines()
    eventdraw()
end)

Cheat.RegisterCallback('registered_shot',function(shot)
    eventshot(shot)
    eventmiss(shot)
end)

starthooks()

----------------------------------------- CONFIGS -----------------------------------------
local ffi = require("ffi")
--@ffi
ffi.cdef[[
    typedef int(__thiscall* GetClipboardTextCount_t)(void*);
    typedef void(__thiscall* GetClipboardText_t)(void*, int, const char*, int);
    typedef struct {
        uint8_t r, g, b, a;
    } color_struct_t;
    typedef struct {
        unsigned short wYear;
        unsigned short wMonth;
        unsigned short wDayOfWeek;
        unsigned short wDay;
        unsigned short wHour;
        unsigned short wMinute;
        unsigned short wSecond;
        unsigned short wMilliseconds;
    } SYSTEMTIME, *LPSYSTEMTIME;
    void GetSystemTime(LPSYSTEMTIME lpSystemTime);
    void GetLocalTime(LPSYSTEMTIME lpSystemTime);
    typedef struct {
        uint8_t r;
        uint8_t g;
        uint8_t b;
        uint8_t a;
    } color_struct_t;
    typedef void (__cdecl* console_color_print)(void*,const color_struct_t&, const char*, ...);
    typedef float*(__thiscall* bound)(void*);
    typedef void*(__thiscall* c_entity_list_get_client_entity_t)(void*, int);
    typedef void*(__thiscall* c_entity_list_get_client_entity_from_handle_t)(void*, uintptr_t);
    struct pose_params_t {
        char pad[8];
        float     m_flStart;
        float     m_flEnd;
        float     m_flState;
    };
    bool PlaySound(const char *pszSound, void *hmod, uint32_t fdwSound);
]]


local vgui_system010 = Utils.CreateInterface("vgui2.dll", "VGUI_System010")
local raw_vgui_system010 = ffi.cast(ffi.typeof("void***"), vgui_system010) or error("raw_VGUI_System010", 2)
local GetClipboardTextCount = ffi.cast("GetClipboardTextCount_t", raw_vgui_system010[0][7]) or error("GetClipboardTextCount")
local GetClipboardText = ffi.cast("GetClipboardText_t", raw_vgui_system010[0][11]) or error("GetClipboardText")

local GetClipboardData = function()
    local text_len = GetClipboardTextCount(raw_vgui_system010[0][7])
    if text_len <= 0 then return "" end
    
    local buffer = ffi.new('char[?]', text_len)
    local size = text_len * ffi.sizeof('char[?]', text_len)

    GetClipboardText(raw_vgui_system010[0][11], 0, buffer, size)

    return ffi.string(buffer, text_len - 1)
end

local js = Panorama.Open()
js.JSON = Panorama.LoadString([[
    return {
        stringify: JSON.stringify,
        parse: JSON.parse
    };
]], "CSGOMainMenu")()

local lp = EntityList.GetLocalPlayer()
if not EngineClient.IsConnected() then return end

if SW:Get() and uiaantiaim.aa[6].custom_enable:Get() then
    --slow walk
    stateid = 6
elseif lp:InAir() and uiaantiaim.aa[4].custom_enable:Get() then
    --air
    stateid = 4
elseif lp:Crouch() and uiaantiaim.aa[5].custom_enable:Get() or FD:Get() and uiaantiaim.aa[5].custom_enable:Get() then
    --duck
    stateid = 5
elseif lp:GetVelocity() > 2 and uiaantiaim.aa[3].custom_enable:Get() then
    --move
    stateid = 3
elseif lp:GetVelocity() < 2 and uiaantiaim.aa[2].custom_enable:Get() then
    --stand
    stateid = 2
else
    --shared
    stateid = 1
end

local get_config_from_elements = {
    menu_elements.enable_change_draw_caracter,
    menu_elements.change_draw_caracter,
    menu_elements.Enable,
    menu_elements.Teleport_Weapons,
    menu_elements.air_hitchance,
    menu_elements.air_hitchance_value,
    menu_elements.ns_hitchance,
    menu_elements.ns_hitchance_value,
    menu_elements.antiaims,
    menu_elements.exploits,
    menu_elements.refEnabled,
    menu_elements.legitAA,
    menu_elements.switchbruteforce,
    menu_elements.custom_visuals,
    menu_elements.windows,
    menu_elements.min_damage_indicator_pos,
    menu_elements.arrows,
    menu_elements.custom_scope_gap,
    menu_elements.custom_scope_length,
    menu_elements.custom_scope_fade,
    menu_elements.uicustomi,
    menu_elements.uitextline,
    menu_elements.avatarcombo,
    menu_elements.textoutlinekeybinds,
    menu_elements.UI_Keybinds_X,
    menu_elements.UI_Keybinds_Y,
    menu_elements.eventlogs,
    menu_elements.eventtype,
    menu_elements.ttonkill,
    menu_elements.languageonkill,
    --menu_elements.snapelines_color,
    menu_elements.snapelines_render,
    ------------- uiaantiaim
    uiaantiaim.aa[2].custom_enable,
    uiaantiaim.aa[3].custom_enable,
    uiaantiaim.aa[4].custom_enable,
    uiaantiaim.aa[5].custom_enable,
    uiaantiaim.aa[6].custom_enable,
    uiaantiaim.aa[1].custom_yaw_add_left,
    uiaantiaim.aa[2].custom_yaw_add_left,
    uiaantiaim.aa[3].custom_yaw_add_left,
    uiaantiaim.aa[4].custom_yaw_add_left,
    uiaantiaim.aa[5].custom_yaw_add_left,
    uiaantiaim.aa[6].custom_yaw_add_left,
    uiaantiaim.aa[1].custom_yaw_add_right,
    uiaantiaim.aa[2].custom_yaw_add_right,
    uiaantiaim.aa[3].custom_yaw_add_right,
    uiaantiaim.aa[4].custom_yaw_add_right,
    uiaantiaim.aa[5].custom_yaw_add_right,
    uiaantiaim.aa[6].custom_yaw_add_right,
    uiaantiaim.aa[1].custom_yaw_modifier,
    uiaantiaim.aa[2].custom_yaw_modifier,
    uiaantiaim.aa[3].custom_yaw_modifier,
    uiaantiaim.aa[4].custom_yaw_modifier,
    uiaantiaim.aa[5].custom_yaw_modifier,
    uiaantiaim.aa[6].custom_yaw_modifier,
    uiaantiaim.aa[1].custom_modifier_degree,
    uiaantiaim.aa[2].custom_modifier_degree,
    uiaantiaim.aa[3].custom_modifier_degree,
    uiaantiaim.aa[4].custom_modifier_degree,
    uiaantiaim.aa[5].custom_modifier_degree,
    uiaantiaim.aa[6].custom_modifier_degree,
    uiaantiaim.aa[1].custom_fake_type,
    uiaantiaim.aa[2].custom_fake_type,
    uiaantiaim.aa[3].custom_fake_type,
    uiaantiaim.aa[4].custom_fake_type,
    uiaantiaim.aa[5].custom_fake_type,
    uiaantiaim.aa[6].custom_fake_type,
    uiaantiaim.aa[1].custom_left_limit,
    uiaantiaim.aa[2].custom_left_limit,
    uiaantiaim.aa[3].custom_left_limit,
    uiaantiaim.aa[4].custom_left_limit,
    uiaantiaim.aa[5].custom_left_limit,
    uiaantiaim.aa[6].custom_left_limit,
    uiaantiaim.aa[1].custom_right_limit,
    uiaantiaim.aa[2].custom_right_limit,
    uiaantiaim.aa[3].custom_right_limit,
    uiaantiaim.aa[4].custom_right_limit,
    uiaantiaim.aa[5].custom_right_limit,
    uiaantiaim.aa[6].custom_right_limit,
    uiaantiaim.aa[1].custom_left_limit2,
    uiaantiaim.aa[2].custom_left_limit2,
    uiaantiaim.aa[3].custom_left_limit2,
    uiaantiaim.aa[4].custom_left_limit2,
    uiaantiaim.aa[5].custom_left_limit2,
    uiaantiaim.aa[6].custom_left_limit2,
    uiaantiaim.aa[1].custom_right_limit2,
    uiaantiaim.aa[2].custom_right_limit2,
    uiaantiaim.aa[3].custom_right_limit2,
    uiaantiaim.aa[4].custom_right_limit2,
    uiaantiaim.aa[5].custom_right_limit2,
    uiaantiaim.aa[6].custom_right_limit2,
    uiaantiaim.aa[1].custom_options,
    uiaantiaim.aa[2].custom_options,
    uiaantiaim.aa[3].custom_options,
    uiaantiaim.aa[4].custom_options,
    uiaantiaim.aa[5].custom_options,
    uiaantiaim.aa[6].custom_options,
    uiaantiaim.aa[1].custom_lby,
    uiaantiaim.aa[2].custom_lby,
    uiaantiaim.aa[3].custom_lby,
    uiaantiaim.aa[4].custom_lby,
    uiaantiaim.aa[5].custom_lby,
    uiaantiaim.aa[6].custom_lby,
    uiaantiaim.aa[1].custom_fs,
    uiaantiaim.aa[2].custom_fs,
    uiaantiaim.aa[3].custom_fs,
    uiaantiaim.aa[4].custom_fs,
    uiaantiaim.aa[5].custom_fs,
    uiaantiaim.aa[6].custom_fs,
    uiaantiaim.aa[1].custom_onshot,
    uiaantiaim.aa[2].custom_onshot,
    uiaantiaim.aa[3].custom_onshot,
    uiaantiaim.aa[4].custom_onshot,
    uiaantiaim.aa[5].custom_onshot,
    uiaantiaim.aa[6].custom_onshot
}

local save = Menu.Button("» Global", "Blame - Configuration", "                            Save Config                              ", "Save the config to clipboard!")
local load = Menu.Button("» Global", "Blame - Configuration", "                            Load Config                             ", "Load the config from clipboard")


save:RegisterCallback(function()
    local config = {}
    for i = 1, #config do
        print(config[i])
        config[i] = nil
    end

    for i = 1, #get_config_from_elements do
        config[i] = get_config_from_elements[i]:Get()
    end

    js.SteamOverlayAPI.CopyTextToClipboard(js.JSON.stringify(config))
end)


load:RegisterCallback(function()
    local status, config = pcall(function() return js.JSON.parse(GetClipboardData()) end)
    if not status then return end
    for i = 1, #config do
        get_config_from_elements[i]:Set(config[i])
    end
end)
 
Сверху Снизу