• Вопрос Вопрос
smart edgebug

Всем привет я хотел бы узнать как пишеться smart edgebug (моделька сама подводит тебя что бы ты эджбагнул) видел в clarity сначала а потом уже в interiume


Заранее спасибо и не ругайтесь на меня пожалуйста что я не умею кодить :)

  • Вопрос Вопрос
Помогите с LUA на Неверлуз

Кто может Из этой луа-шки оставить только Ватемарку и Клантег?

Код:
Развернуть Свернуть Копировать
local TrashTalk = menu.Switch("Misc", "TrashTalk enabled", false)
local language = menu.Combo("Misc", "language", {"RU", "ENG"}, 1)

local ena = menu.Switch("Misc", "Enable snow effect", false)
local in_game = menu.Switch("Misc", "Show in game", false)

local background_alpha = 0
local snowflake_alpha = 0

local function clamp(min, max, val)
    if val > max then return max end
    if val < min then return min end
    return val
end

local function draw_line(x, y, x1, y1, r, g, b, a)
    if ena:GetBool() then
    g_Render:Line(Vector2.new(x, y), Vector2.new(x1, y1), Color.new(r, g, b, a/255))
    end
end

local function draw_rect(x, y, w, h, r, g, b, a)
    if ena:GetBool() then
    g_Render:BoxFilled(Vector2.new(x, y), Vector2.new(x + w, y + h), Color.new(r, g, b, a/255))
    end
end

local function draw_snowflake(x, y, size)
    if ena:GetBool() then
        local base = 4 + size

        draw_line(x - base, y - base, x + base + 1, y + base + 1, 255, 255, 255, snowflake_alpha - 75)
        draw_line(x + base, y - base, x - base, y + base, 255, 255, 255, snowflake_alpha - 75)

        base = 5 + size

        draw_line(x - base, y, x + base + 1, y, 255, 255, 255, snowflake_alpha - 75)
        draw_line(x, y - base, x, y + base + 1, 255, 255, 255, snowflake_alpha - 75)
    end
end

local snowflakes = {}
local time = 0
local stored_time = 0

screen = g_EngineClient:GetScreenSize()


local message2 = {
    "Get Good, Get Onetap",
    "Dead",
    "You finally learned to put your crosshair on me, cute.",
    "Did you really sold your anal virginity for that cheat?",
    "Change that mindmg5.cfg",
    "Give me ur selly so i can fix that trash cfg lmao",
    "Stop trying so hard nn hhh",
    "Did you really sold your anal virginity for that cheat? btw 1",
    "Lol u dead hhh",
    "Stop trying so hard ufff ur min dmg is 5 so just stop",
    "BaimGOD ez hhh",
    "Ouu I\'m sorry, you were not fast enough.",
    "Too Slow",
    "Good for you, you finally hit something!",
    "You finally killed me, Good Job!",
    "get good get vantap4ik",
    "you pay for that? refund so maybe youll afford some food for your family thirdworld monkey",
    "thats going in my media compilation right there get shamed retard rofl",
    "imagine the only thing you eat being bullets man being a thirdworlder must suck rofl",
    "uid police here present your user identification number right now",
    "too fucking easy",
    "effortless",
    "easiest kill of my life",
    "retard blasted",
    "cleans?",
    "hello mind explaining what happened there",
    "1",
    "EZ",
    "so easy",
    "lmao ur so ugly irl like bro doesnt it hurt to live like that, btw you know you can just end it all",
}

local message = {
    "Нифига ты упал))",
    "1 нищий",
    "ez собака",
    "Боже почему так легко???",
    "Слишком изи",
    "хахахахахахаха, боже, ты такой бездарный, понять никак не могу, как таких земля носит, аххахаха",
    "ну какой же ты нищий",
    "улетаешь со своего ванвея хуесос",
    "иди приклей подорожник к ебальнику, а то мать родная не узнает",
    "рекомендую позвонить маме",
    "сука, какой ты тупорылый, как ты блять живешь глупый овощь, пошел нахуй с отсюда тупое ты создание",
    "че, пососал глупый даун?",
    "почему ты такое бесполезный?",
    "зубы в следующем раунде подберешь там же, где уронил",
    "ты ебаный сочник, нахуй ты вообще на хвх зашел",
    "ливни с хвх дурааа",
    "1",
    "Соси бич",
    "обоссал мемюзера лол",
    "алло это скорая? тут такая ситуация нищ упал))) ОЙ А ВЫ НИЩАМ ТО НЕ ПОМОГАЕТЕ?? ПОНЯТНО Я ПОЙДУ ТОГДА)))))))",
    "дал юид за щеку проверяй",
    "сразу видно юид иссуе хуле тут",
    "а ты и в жизни ньюкамыч????",
    "*DEAD* пофикси нищ",
    "iq больше двух будет пмнешь ок???",
    "на завод иди",
    "лютый крякер отлетел",
    "на бутылку русак",
    "как там жизнь с рупастой??",
    "але может не будешь тратить мамкину зарплату на говнопасты?",
    "бля я рядом только прошел а ты уже упал АУУ НИЩ С ТОБОЙ ВСЕ ХОРОШО??????????))",
    "с тобой там все хорошо??????  а да ты нищ нахуя я спрашиваю ПХАХАХАХАХХА",
    "БЛЯ НИЩ ХУЯК ХУЯК И ТЕБЯ НЕТ КАК МОЖНО ТАКИМ БЫТЬ?????? ОБЬЯСНИСЬ БЛЯТЬ",
    "НИХУЯ ТАМ НЬЮКАМЫЧА ОРОШИЛИ СТРУЕЙ МОЧИ АХАХХАХАХАХАХАХАХА",
    "научи потом как так сосать на хвх",
    "надеюсь после этой катки ты пойдешь в роблокс...",
    "1 СЛИТЫЙЙ",
    "Ну ты и нуб конечно",
    "Без брэйна ясно хахах",
    "Ты кого убить хотел со своей пастой нищ",
    "Изи мапа олень",
    "Не думал что будет настолько изи",
    "Иди в бравл старс играй увалень",
    "не думал что существуют софты хуже ппхуда",
    "1 нн дог изи",
    "а ты вообще знаешь что такое iq",
    "лучше бы мозг купил!!",
    "Закерил бота",
    "легкооо",
    "На кого лезишь кусок дауна???",
    "Может все таки тебе уйти с хвх)))",
    "ты вообще знаешь эту карту?? Такое ощущение, что первый раз играешь!!",
    "По игре тебе лет 5",
    "Ебать ты соснулл",
    "даже 1 писать стремно тебе скорее 0.5",
    "Кто тебе про хвх рассказал дитя",
    "Ты что с кряком??",
    "кинь свой uid? если ты конечно знаешь что это))",
    "чет изи",
    "Ебать ты бездарный",
    "отлетел лютый крякер...",
    "иди лунтика смотри без мозглый",
    "самая легкая игра, которую я играл когда либо",
    "Изи ньюкамер 2021",
    "ахахахахааха слов нет про твой скил как, и его впринцепе",
}

local Informations = menu.Switch("Mics", "Info-Talk", false)

local message3 = {
    "Самая крупная жемчужина в мире достигает 6 килограммов в весе.",
    "Законодательство США допускало отправку детей по почте до 1913 года.",
    "В языке древних греков не существовало слова, которое обозначало религию.",
    "В современной истории есть промежуток времени, когда на счетах компании «Apple», было больше средств, чем у американского правительства.",
    "Среднее облако весит порядка 500 тонн, столько же весят 80 слонов.",
    "В Ирландии никогда не было кротов.",
    "Флот США содержит больше авианосцев, чем все флоты мира вместе взятые.",
    "Скорость распространения лавы после извержения, близка к скорости бега гончей.",
    "Изначально, отвертка была изобретена для выковыривания гвоздей, шуруп был изобретен на 100 лет позже.",
    "Библия – книга, которую чаще всего воруют в американских магазинах.",
    "Примерно 1/3 всей соли, производимой в США, расходуется на очистку дорог ото льда.",
    "Существует пробирка, диаметр которой, в 10000 раз меньше диаметра человеческого волоса.",
    "Саудовская Аравия не содержит рек.",
    "В Антарктиде существует единственная река – Оникс, она течет всего 60 дней в году.",
    "У медуз нет мозгов и кровеносных сосудов.",
    "Ежедневно 60 человек становятся миллионерами.",
    "До 17 века термометры заполняли коньяком.",
    "Кошки спят больше половины своей жизни.",
    "Лимон содержит больше сахара, чем клубника.",
    "Самый долгий полёт курицы продолжался 13 секунд.",
    "Ладожское озеро является самым большим в Европе.",
    "За год на Землю падает до 500 кг марсианского метеорита.",
    "Земля делает полный оборот вокруг своей оси за 23 часа 56 минут и 4 секунды.",
    "На Юпитере регулярно идут алмазные дожди.",
    "Во вселенной больше звёзд, чем песчинок на всех пляжах Земли.",
    "В мире всего 7% левшей",
    "Правое лёгкое человека вмещает больше воздуха, чем левое.",
    "Самая трудно излечимая фобия – боязнь страха.",
    "Алмазы могут гореть.",
    "Корова может подняться по лестнице, но не может спуститься.",
    "Утки способны нырять на глубину до 6 метров.",
    "Китайский язык является самым популярным в мире.",
    "У жирафа и человека одинаковое количество шейных позвонков.",
    "Самое высокое здание в Европе находится в Москве.",
    "Страусы развивают скорость до 70 км в час.",
    "Около 80% пользователей Живого Журнала зарегистрированы в Америке.",
    "Женщины справляются с парковкой автомобиля лучше, чем мужчины.",
    "В среднем человек с 20 до 70 лет тратит около 600 часов или 25 дней, занимаясь сексом",
    "В среднем дети смеются около 400 раз в день, взрослые смеются около 15 раз в день",
    "Вы разделяете свой день рождения почти с 20 миллионами человек в мире",
    "Женщины съедают большую часть помады, которой они пользуются.",
    "В возрасте шести-семи месяцев ребёнок может одновременно дышать и глотать",
    "Каждые три минуты кто-то на Земле объявляет, что видел НЛО",
    "В Западном Китае в чай вместо сахара кладут соль. Интересный факт",
    "Самое распространённое имя в мире – Мухаммед.",
    "Большинство мальчиков рождается днём, большинство девочек – ночью.",
}





cheat.RegisterCallback("events", function(event)
    if TrashTalk:GetBool() then
        Informations:SetBool(false)
        if(language:GetInt() == 0) then
    if event:GetName() == "player_death" then

        local victim = g_EngineClient:GetPlayerForUserId(event:GetInt("userid"))
        local attacker = g_EngineClient:GetPlayerForUserId(
                             event:GetInt("attacker"))

        if victim ~= attacker and attacker == g_EngineClient:GetLocalPlayer() then
            g_EngineClient:ExecuteClientCmd("say " ..message[math.random(1, (#message))])
                end
             end
        end
    end
    if(language:GetInt() == 1) then
        if TrashTalk:GetBool() then
        if event:GetName() == "player_death" then

            local victim = g_EngineClient:GetPlayerForUserId(event:GetInt("userid"))
            local attacker = g_EngineClient:GetPlayerForUserId(
                                 event:GetInt("attacker"))
        if victim ~= attacker and attacker == g_EngineClient:GetLocalPlayer() then
            g_EngineClient:ExecuteClientCmd("say " ..message2[math.random(1, (#message2))])
                     end   
                        end
                    end
        end
                    if Informations:GetBool() then
                        if event:GetName() == "player_death" then
                    
                            local victim = g_EngineClient:GetPlayerForUserId(event:GetInt("userid"))
                            local attacker = g_EngineClient:GetPlayerForUserId(
                                                 event:GetInt("attacker"))
                        if victim ~= attacker and attacker == g_EngineClient:GetLocalPlayer() then
                            g_EngineClient:ExecuteClientCmd("say " ..message3[math.random(1, (#message3))]) 
end
    end
         end
    end)




    local language = menu.Combo("ClanTag", "Tags", {"Disable", "Onetap", "Fatality", "Aimware", "Nixware", "gamesense", "Gaysex"}, 1)



    ffi.cdef[[
        typedef int(__fastcall* clantag_t)(const char*, const char*);
    ]]
    local fn_change_clantag = utils.PatternScan("engine.dll", "53 56 57 8B DA 8B F9 FF 15")
    local set_clantag = ffi.cast("clantag_t", fn_change_clantag)
    
    local onetap = {
        "onetap"
    }
    
    
    
    local Fatalityo = {
        "f",
        "fa",
        "fat",
        "fata",
        "fatal",
        "fatali",
        "fatalit",
        "fatality",
        "fatality.",
        "fatality.w",
        "fatality.wi",
        "fatality.win",
        "fatality.win",
        "fatality.win",
        "fatality.wi",
        "fatality.w",
        "fatality.",
        "fatality",
        "fatalit",
        "fatali",
        "fatal",
        "fata",
        "fat",
        "fa",
        "f",
        ""
    }
    
    
    
    
    local Aimwaree = {
        " AIMWARE.net ",
        " AIMWARE.net ",
        " AIMWARE.net ",
        " IMWARE.net  ",
        " MWARE.net A ",
        " WARE.net AI ",
        " ARE.net AIM ",
        " RE.net AIMW ",
        " E.net AIMWA ",
        " .net AIMWAR ",
        " net AIMWARE ",
        " et AIMWARE. ",
        " t AIMWARE.n ",
        "  AIMWARE.ne "
    }
    
    
    
    local nixwaree = {
        "n",
        "ni",
        "nix",
        "nixw",
        "nixwa",
        "nixwar",
        "nixware",
        "nixware.",
        "nixware.c",
        "nixware.cc",
        "nixware.cc",
        "nixware.c",
        "nixware.",
        "nixware",
        "nixwar",
        "nixwa",
        "nixw",
        "nix",
        "ni",
        "n",
        ""
    
    }
    
    local gamesensee = {
        "ga",
        "gam",
        "game",
        "games",
        "gamese",
        "gamesen",
        "gamesens",
        "gamesense",
        "gamesense",
        "gamesense",
        "gamesense",
        "gamesense",
        "gamesense",
        "amesense",
        "mesense",
        "esense",
        "sense",
        "ense",
        "nse",
        "se",
        "e",
        ""
    }
    
    
    
    local Gaysen = {
        "  ",
        " G ",
        " Ga ",
        " Gay ",
        " Gays ",
        " Gayse ",
        " Gaysex ",
        " Gaysex ",
        " Gaysex ",
        " Gayse ",
        " Gays ",
        " Gay ",
        " Ga ",
        " G ",
        " "
    }
    
    
    local animationoff = {
        "",
    }
 
    

    local water = menu.Switch("Watermark", "Enabled", false)
    local water_clr = menu.ColorEdit("Watermark", "Color", Color.new( 102/255,118/255,202/255 ) )
    local water_rainbow = menu.Switch("Watermark", "Rainbow", false)
    local r, g, b
    
    local font = g_Render:InitFont("Verdana",12)
    
    local frame_rate = 0.0
    local function get_abs_fps()
        if water:GetBool() then
    frame_rate = 0.9 * frame_rate + (1.0 - 0.9) * g_GlobalVars.absoluteframetime
    return math.floor((1.0 / frame_rate) + 0.5)
        end
    end
    
    local function get_latency()
        if water:GetBool() then
    local netchann_info = g_EngineClient:GetNetChannelInfo()
    if netchann_info == nil then return "0" end
    local latency = netchann_info:GetLatency(0)
    return string.format("%1.f", math.max(0.0, latency) * 1000.0)
        end
    end
    
    local textSize = 0



    
local FB = menu.Switch("Visual", "Fullbright", false)
local FBCV = g_CVar:FindVar("mat_fullbright")
local checkbox = menu.Switch("Other", "Radar remove", false);
local rg = menu.Switch("Visual", "RGB line", false)
local screen = g_EngineClient:GetScreenSize()
local vector1 = Vector2.new(0,0)
local vector2 = Vector2.new(screen.x,4)
local r, g, b

    
    local old_time = 0
    cheat.RegisterCallback("draw", function()
        if(language:GetInt() == 1) then
        local curtime = math.floor(g_GlobalVars.curtime)
        if old_time ~= curtime then
            set_clantag(onetap[curtime % #onetap+1], onetap[curtime % #onetap+1])
        end
        old_time = curtime
    end
            if(language:GetInt() == 0) then
                local curtime = math.floor(g_GlobalVars.curtime)
                if old_time ~= curtime then
                    set_clantag(animationoff[curtime % #animationoff+1], animationoff[curtime % #animationoff+1])
                end
                old_time = curtime
            end
                if(language:GetInt() == 2) then
                    local curtime = math.floor(g_GlobalVars.curtime)
                    if old_time ~= curtime then
                        set_clantag(Fatalityo[curtime % #Fatalityo+1], Fatalityo[curtime % #Fatalityo+1])
                    end
                    old_time = curtim
                end
                    if(language:GetInt() == 3) then
                        local curtime = math.floor(g_GlobalVars.curtime)
                        if old_time ~= curtime then
                            set_clantag(Aimwaree[curtime % #Aimwaree+1], Aimwaree[curtime % #Aimwaree+1])
                        end
                        old_time = curtime
                    end
                    if(language:GetInt() == 4) then
                        local curtime = math.floor(g_GlobalVars.curtime)
    
                        if old_time ~= curtime then
                            set_clantag(nixwaree[curtime % #nixwaree+1], nixwaree[curtime % #nixwaree+1])
                        end
                        old_time = curtime
                    end
                    if(language:GetInt() == 5) then
                        local curtime = math.floor(g_GlobalVars.curtime)
                        if old_time ~= curtime then
                            set_clantag(gamesensee[curtime % #gamesensee+1], gamesensee[curtime % #gamesensee+1])
                        end
                        old_time = curtime
                    end
                    if(language:GetInt() == 6) then
                        local curtime = math.floor(g_GlobalVars.curtime)
                        if old_time ~= curtime then
                            set_clantag(Gaysen[curtime % #Gaysen+1], Gaysen[curtime % #Gaysen+1])
                        end
                        old_time = curtime
                    end
        if FB:GetBool() then
            FBCV:SetInt(1)
        else
        FBCV:SetInt(0)
        end
        if rg:GetBool() then
            gametime = g_GlobalVars.realtime
            
            r = (math.floor(math.sin(g_GlobalVars.realtime * 1) * 127 + 128)) / 1000 * 3.92
            g = (math.floor(math.sin(g_GlobalVars.realtime * 1 + 2) * 127 + 128)) / 1000 * 3.92
            b = (math.floor(math.sin(g_GlobalVars.realtime * 1 + 4) * 127 + 128)) / 1000 * 3.92
            
            local clr = Color.new(r,g, b ,100)
            
            g_Render:BoxFilled(vector1, vector2, clr)
                end
                local radar_draw = g_CVar:FindVar("cl_drawhud_force_radar");
                if checkbox:GetBool() then
                  radar_draw:SetInt(-1);
                else
                  radar_draw:SetInt(1);
                end
                local show_in_game = in_game:GetBool()
                if ena:GetBool() then
                    if cheat.IsMenuVisible() and background_alpha ~= 255 then
                        background_alpha = clamp(0, 255, background_alpha + 10)
                        snowflake_alpha = clamp(0, 255, snowflake_alpha + 10)
                    end
            
                    if not cheat.IsMenuVisible() and background_alpha ~= 0 then
                        background_alpha = clamp(0, 255, background_alpha - 10)
                        snowflake_alpha = clamp(0, 255, snowflake_alpha - 10)
                    end
            
                    if cheat.IsMenuVisible() or background_alpha ~= 0 then
                        draw_rect(0, 0, screen.x, screen.y, 0, 0, 0, background_alpha - 90)
                    end
                end
            
                if not show_in_game and not cheat.IsMenuVisible() then
                    return
                end
            
                if show_in_game then
                    snowflake_alpha = 255
                end
            
                local frametime = g_GlobalVars.frametime
            
                time = time + frametime
            
                if #snowflakes < 128 then
                    if time > stored_time then
                        stored_time = time
            
                        table.insert(snowflakes, {
                            math.random(10, screen.x - 10),
                            1,
                            math.random(1, 3),
                            math.random(-60, 60) / 100,
                            math.random(-3, 0)
                        })
                    end
                end
            
                local fps = 1 / frametime
            
                for i = 1, #snowflakes do
                    local snowflake = snowflakes[i]
                    local x, y, vspeed, hspeed, size = snowflake[1], snowflake[2], snowflake[3], snowflake[4], snowflake[5]
            
                    if screen.y <= y then
                        snowflake[1] = math.random(10, screen.x - 10)
                        snowflake[2] = 1
                        snowflake[3] = math.random(1, 3)
                        snowflake[4] = math.random(-60, 60) / 100
                        snowflake[5] = math.random(-3, 0)
                    end
            
                    draw_snowflake(x, y, size)
            
                    snowflake[2] = snowflake[2] + vspeed / fps * 100
                    snowflake[1] = snowflake[1] + hspeed / fps * 100
            end
            if water:GetBool() then
                r = (math.floor(math.sin(g_GlobalVars.realtime * 6) * 127 + 128)) / 1000 * 3.92
                g = (math.floor(math.sin(g_GlobalVars.realtime * 6 + 2) * 127 + 128)) / 1000 * 3.92
                b = (math.floor(math.sin(g_GlobalVars.realtime * 6 + 4) * 127 + 128)) / 1000 * 3.92
                
                
                local screen = g_EngineClient:GetScreenSize()
                local fps = get_abs_fps()
                local ping = get_latency()
                local ticks = math.floor(1.0 / g_GlobalVars.interval_per_tick)
                
                local rightPadding = 20
                local var = screen.x - textSize - rightPadding
                
                local x = var - 10
                local y = 9
                local w = textSize + 20
                local h = 17
                
                g_Render:BoxFilled(Vector2.new(x,y+2),Vector2.new(x+textSize+20,h * 1.5 + 2), Color.new(17/255,17/255,17/255,100/255))
                
                if not water_rainbow:GetBool() then
                g_Render:BoxFilled(Vector2.new(x,y),Vector2.new(x+textSize+20,h-6), water_clr:GetColor())
                else
                g_Render:BoxFilled(Vector2.new(x,y),Vector2.new(x+textSize+20,h-6),  Color.new(r,g, b ,255))
                end
                
                    
                local nexttext = "sin.lua"
                
                g_Render:Text(nexttext, Vector2.new(var,12), Color.new(255,255,255), 12, font)
                local wide = g_Render:CalcTextSize(nexttext, 12, font)
                var = var + wide.x
                
                local username = string.lower(cheat.GetCheatUserName())
                nexttext = " | " .. username
                g_Render:Text(nexttext, Vector2.new(var,12), Color.new(255,255,255), 12,font)
                
                wide = g_Render:CalcTextSize(nexttext, 12,font)
                var = var + wide.x
                
                nexttext = " | delay: ".. ping .."ms"
                
                g_Render:Text(nexttext, Vector2.new(var,12), Color.new(255,255,255), 12,font)
                
                wide = g_Render:CalcTextSize(nexttext, 12,font)
                var = var + wide.x
                
                nexttext = " | " .. ticks .. "tick"
                
                g_Render:Text(nexttext, Vector2.new(var,12), Color.new(255,255,255), 12,font)
                
                wide = g_Render:CalcTextSize(nexttext, 12,font)
                var = var + wide.x
                
                textSize = var - (screen.x - textSize - rightPadding)
                    end
    end)

  • Вопрос Вопрос
Помогите с компилом Extrenel чита.

Столкнулся с такой проблемой при создании чита для Apex, и появляется ещё такая ошибка при инжекте через kdmapper.
Так же вопрос как добыть driver.sys:D
Кто знает как это всё сделать, помогите плиз(

Вложения

  • Screenshot_2.png
    Screenshot_2.png
    5.6 KB · Просмотры: 150
  • изображение_2021-05-26_191639.png
    изображение_2021-05-26_191639.png
    6.6 KB · Просмотры: 136

  • Закрыта
  • Вопрос Вопрос
Вопрос Не могу Скомпилить длл

При попытке скомпилить любой длл появляеться эта ошибка:
1>------ Build started: Project: Legendware, Configuration: Release Win32 ------ ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

  • Вопрос Вопрос
Кто может вырезать?

JavaScript:
Развернуть Свернуть Копировать
var menu_elements_t = [];
var menu_c = [];
const menu_spacer = "                                                                                  ";

menu_c.label = function(label, upper, lower)
{
    if (upper)
        UI.AddLabel(" ");

    UI.AddLabel(label);

    if (lower)
        UI.AddLabel(" ");
}

menu_c.call = function(func, name, label, properties)
{
    if (label in menu_elements_t)
        throw new Error("[Menu] The label must be unique!");

    const final_name = name + menu_spacer + label;
    var final_props = [final_name];
    const element_info_t = {
        name: name,
        label: label,
        properties: properties
    };

    if (properties !== null)
    {
        for (var i = 0; i < properties.length; i++)
        {
            final_props.push(properties[i]);
        }
    }

    func.apply(null, final_props);
    menu_elements_t[label] = element_info_t;
    return label;
}

menu_c.get = function(label)
{
    if (!(label in menu_elements_t))
        throw new Error("[Menu] This element's label doesn't exist!");

    const properties = menu_elements_t[label];
    const final_name = properties.name + menu_spacer + properties.label;

    return UI.GetValue("Misc", "JAVASCRIPT", "Script items", final_name);
}

menu_c.get_color = function(label)
{
    if (!(label in menu_elements_t))
        throw new Error("[Menu] This element's label doesn't exist!");

    const properties = menu_elements_t[label];
    const final_name = properties.name + menu_spacer + properties.label;

    return UI.GetColor("Misc", "JAVASCRIPT", "Script items", final_name);
}

menu_c.set = function(label, value)
{
    if (!(label in menu_elements_t))
        throw new Error("[Menu] This element's label doesn't exist!");

    const properties = menu_elements_t[label];
    const final_name = properties.name + menu_spacer + properties.label;

    UI.SetValue("Misc", "JAVASCRIPT", "Script items", final_name, value);
}

menu_c.visibility = function(label, visible)
{
    if (!(label in menu_elements_t))
        throw new Error("[Menu] This element's label doesn't exist!");

    const properties = menu_elements_t[label];
    const final_name = properties.name + menu_spacer + properties.label;

    UI.SetEnabled("Misc", "JAVASCRIPT", "Script items", final_name, visible);
}

var vec3 = {__index: "vec3"};

vec3.new = function(x, y, z)
{
    if (x instanceof Array)
        return {
            x: x[0],
            y: x[1],
            z: x[2]
        };

    return {
        x: x,
        y: y,
        z: z
    }
}

vec3.unpack = function(self)
{
    return [self.x, self.y, self.z];
}

vec3.add = function(vec, vec2)
{
    if (vec2 instanceof Number)
        return {
            x: vec.x + vec2,
            y: vec.y + vec2,
            z: vec.z + vec2
    }

    return {
        x: vec.x + vec2.x,
        y: vec.y + vec2.y,
        z: vec.z + vec2.z
    }
}

vec3.sub = function(vec, vec2)
{
    if (vec2 instanceof Number)
        return {
            x: vec.x - vec2,
            y: vec.y - vec2,
            z: vec.z - vec2
    }

    return {
        x: vec.x - vec2.x,
        y: vec.y - vec2.y,
        z: vec.z - vec2.z
    }
}

vec3.multiply = function(vec, vec2)
{
    if (vec2 instanceof Number)
        return {
            x: vec.x * vec2,
            y: vec.y * vec2,
            z: vec.z * vec2
    }

    return {
        x: vec.x * vec2.x,
        y: vec.y * vec2.y,
        z: vec.z * vec2.z
    }
}

vec3.divide = function(vec, vec2)
{
    if (vec2 instanceof Number)
        return {
            x: vec.x / vec2,
            y: vec.y / vec2,
            z: vec.z / vec2
    }

    return {
        x: vec.x / vec2.x,
        y: vec.y / vec2.y,
        z: vec.z / vec2.z
    }
}

vec3.length = function(self)
{
    return Math.sqrt((self.x * self.x) + (self.y * self.y) + (self.z * self.z));
}

vec3.distance = function(self, destination)
{
    return vec3.length(vec3.sub(destination, self));
}

var color = {/* @mio#9999 zZz */};

color.new_rgba = function(r, g, b, a)
{
    if (!r || !g || !b || !a)
        throw new Error("[Color] Invalid color values!");

    return {
        r: r,
        g: g,
        b: b,
        a: a
    };
};

color.new_hexa = function(hex, a)
{
    if (!hex || !a)
        throw new Error("[Color] Invalid color values!");

    var r, g, b;

    if (hex.length > 6)
    {
        r = parseInt(hex.substring(1, 3), 16);
        g = parseInt(hex.substring(3, 5), 16);
        b = parseInt(hex.substring(5, 7), 16);
    } else {
        r = parseInt(hex.substring(0, 2), 16);
        g = parseInt(hex.substring(2, 4), 16);
        b = parseInt(hex.substring(4, 6), 16);
    }

    return {
        r: r,
        g: g,
        b: b,
        a: a,

        hex: hex
    };
};

color.new_hsla = function(h, s, l, a)
{
    if (!h || !s || !l || !a)
        throw new Error("[Color] Invalid color values!");

    var r, g, b;

    h /= 360;
    s /= 100;
    l /= 100;

    if (s === 0)
    {
        r = g = b = l;

    } else {

        var hue2rgb = function(p, q, t)
        {
            if (t < 0) t += 1;
            if (t > 1) t -= 1;
            if (t < 1/6) return p + (q - p) * 6 * t;
            if (t < 1/2) return q;
            if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        }

        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;

        r = Math.round(hue2rgb(p, q, h + 1/3) * 255);
        g = Math.round(hue2rgb(p, q, h) * 255);
        b = Math.round(hue2rgb(p, q, h - 1/3) * 255);
    }

    return {
        r: r,
        g: g,
        b: b,
        a: a,

        h: h,
        s: s,
        l: l
    };
};

color.is_valid = function(self)
{
    return ((self instanceof Array) && self.r && self.g && self.b && self.a);
}

color.to_hex = function(self)
{
    if (!color.is_valid(self))
        throw new Error("[Color] Invalid color instance!");

    var str = "#";

    str += self.r.toString(16);
    str += self.g.toString(16);
    str += self.b.toString(16);

    return str;
};

color.unpack = function(self)
{

    return [
        self.r,
        self.g,
        self.b,
        self.a
    ];
};

color.new_offset = function(base, r, g, b, a)
{
    if (!color.is_valid(self) || (!r && !g && !b && !a))
        throw new Error("[Color] Invalid color instance and/or values!");

    return {
        r: base.r + r,
        g: base.g + g,
        b: base.b + b,
        a: base.a + a,

        offset: {
            r: r,
            g: g,
            b: b,
            a: a
        }
    };
};

color.is_zero = function(self, tolerance)
{
    if (!color.is_valid(self))
        throw new Error("[Color] Invalid color instance!")

    tolerance = tolerance || 0;

    return ((self.r < tolerance) && (self.g < tolerance) && (self.b < tolerance) && (self.a < tolerance));
}

color.is_transparent = function(self, tolerance)
{
    if (!color.is_valid(self))
        throw new Error("[Color] Invalid color instance!")

    tolerance = tolerance || 0;

    return ((self.a < tolerance))
}

color.shift_hue = function(self, amount)
{
    if (!color.is_valid(self) || !amount || !self.h || !self.s || !self.l)
        throw new Error("[Color] Invalid color instance and/or shift amount!")

    amount += self.h;

    if (amount > 360)
        amount = 360 - amount;

    return color.new_hsla(amount, self.s, self.l, self.a);
}

function text(x, y, a, text, color, font)
{
    Render.StringCustom(x + 1, y + 1, a, text, [15, 15, 15, 55], font);
    Render.StringCustom(x, y, a, text, color, font);
}

function draw_container(x, y, w, title)
{
    const colors = [
        color.new_hexa("#FDDC93", 225),
        color.new_hexa("#DA9F56", 255),
        color.new_hexa("#FFFFFF", 255),
        color.new_hexa("#28282F", 75)
    ]

    const font_title = Render.AddFont("Segoe UI", 8, 400);

    Render.GradientRect(x, y, w / 2, 2, 1, color.unpack(colors[1]), color.unpack(colors[0]));
    Render.GradientRect(x + w / 2, y, w / 2, 2, 1, color.unpack(colors[0]), color.unpack(colors[1]));
    Render.FilledRect(x, y + 2, w, 16, color.unpack(colors[3]));
    text(x + w / 2, y + 2, 1, title, color.unpack(colors[2]), font_title);
}

const clamp = function(v, min, max)
{
    return Math.min(Math.max(v, min), max);
}

const exec = function(cmd, args)
{
    const str = cmd + " ";

    if (args)
    {
        for (var i = 0; i < args.length; i++)
        {
            str += args[i];
            str += " ";
        }
    }

    Cheat.ExecuteCommand(str);
}

const setup_color = function(label, def)
{
    if (menu_c.get_color(label)[3] !== 0)
        return menu_c.get_color(label);

    return def;
};

const CHAT_COLOR = {
    WHITE: '\x01',
    RED: '\x02',
    LIGHT_PURPLE: '\x03',
    GREEN: '\x04',
    LIGHT_GREEN: '\x05',
    LIME: '\x06',
    GRAY: '\x08',
    YELLOW: '\x09',
    LIGHT_BLUE: '\x0A',
    CYAN: '\x0B',
    BLUE: '\x0C',
    MAGENTA: '\x0D',
    PINK: '\x0E',
    LIGHT_RED: '\x0F',
    GOLD: '\x10',
};

const max_radius = Math.PI * 2;
const step = max_radius / 24;

var unduck = false;
var is_lj = false;

var last_log = 0;
var last_delta = 0;
var last_color = null;
var velocity_data = [];

var last_position = null;
var last_angles = null;
var last_mode = 0;
const practice_modes = [
    "Vanilla",
    "Vanilla KZ",
    "NoPre KZ"
];

const configurations = [
    {air_accel: 12, accel: 5.5, stamina: 80, ladder_accel: 0.78, speed_cap: 0}, // Vanilla
    {air_accel: 12, accel: 6.5, stamina: 0, ladder_accel: 1, speed_cap: 1}, // Vanilla KZ
    {air_accel: 100, accel: 6.5, stamina: 0, ladder_accel: 1, speed_cap: 1} // NoPre KZ
];

// Regarding the jumpstats
var last_jumping = false;
var jump_positions = [];
var last_pre = 0;

const scores = [
    [220, 225, 235], // Perfect
    [230, 235, 245], // Impressive
    [240, 245, 255], // Godlike
    [245, 255, 265] // Ownage
];

const sounds = [
    "perfect",
    "impressive",
    "godlike",
    "ownage"
];

menu_c.label("| Movement features", true, false);

const jb = menu_c.call(UI.AddHotkey, "Automatic jumpbug", "mv_jumpbug", null);
const cb = menu_c.call(UI.AddHotkey, "Automatic crouchbug", "mv_crouchbug", null);
const lj = menu_c.call(UI.AddHotkey, "Automatic strafer", "mv_strafer", null);

menu_c.label("| Miscellaneous features", true, false);

const movement_type = menu_c.call(UI.AddDropdown, "Movement mode", "mv_practice_mode", [practice_modes]);
const practice = menu_c.call(UI.AddCheckbox, "Enable practice mode", "mv_practice", null);
const jumpstats = menu_c.call(UI.AddCheckbox, "Enable jumpstats", "mv_jumpstats", null);

menu_c.label("| Visual features", true, false);

const info = menu_c.call(UI.AddCheckbox, "Draw speed graph", "mv_showinfo", null);
const keystatus = menu_c.call(UI.AddCheckbox, "Draw keystatus", "mv_showkeys", null);
const info_offset = menu_c.call(UI.AddSliderInt, "Drawing vertical offset", "mv_showinfo_offset", [0, 500]);

menu_c.label("| Settings", true, false);

const setup_keys = menu_c.call(UI.AddCheckbox, "Setup keys", "mv_setup_keys", null);
const practice_hotkeys = {
    get: menu_c.call(UI.AddHotkey, "Save position", "keys_save", null),
    set: menu_c.call(UI.AddHotkey, "Set position", "keys_set", null),
};
const move_hotkeys = {
    forward: menu_c.call(UI.AddHotkey, "Move forward", "keys_fwrd", null),
    backward: menu_c.call(UI.AddHotkey, "Move backwards", "keys_back", null),
    left: menu_c.call(UI.AddHotkey, "Move to the left", "keys_left", null),
    right: menu_c.call(UI.AddHotkey, "Move to the right", "keys_right", null)
};

const hotkeys_t = [
    practice_hotkeys,
    move_hotkeys
];

const setup_colors = menu_c.call(UI.AddCheckbox, "Setup colors", "mv_setup_colors", null);
const chart_colors = {
    main: menu_c.call(UI.AddColorPicker, "Chart: Main", "clrs_chart_main", null),
    axis: menu_c.call(UI.AddColorPicker, "Chart: Axis", "clrs_chart_axis", null),
    speed_loss: menu_c.call(UI.AddColorPicker, "Chart: Speed (loss)", "clrs_chart_velocity_loss", null),
    speed_stable: menu_c.call(UI.AddColorPicker, "Chart: Speed (normal)", "clrs_chart_velocity_stable", null),
    speed_gain: menu_c.call(UI.AddColorPicker, "Chart: Speed (gain)", "clrs_chart_velocity_gain", null),
    land_speed: menu_c.call(UI.AddColorPicker, "Chart: Landing speed", "clrs_chart_velocity_land", null),
    unit: menu_c.call(UI.AddColorPicker, "Chart: Unit", "clrs_chart_unit", null)
};
const keystatus_colors = {
    dormant: menu_c.call(UI.AddColorPicker, "Keystatus: Dormant", "clrs_hotkeys_dormant", null),
    active: menu_c.call(UI.AddColorPicker, "Keystatus: Active", "clrs_hotkeys_active", null),
    overlap: menu_c.call(UI.AddColorPicker, "Keystatus: Overlap", "clrs_hotkeys_overlap", null)
};
const practice_colors = {
    dormant: menu_c.call(UI.AddColorPicker, "Practice: Dormant", "clrs_practice_dormant", null),
    active: menu_c.call(UI.AddColorPicker, "Practice: Active", "clrs_practice_active", null)
};

const colors_t = [
    chart_colors,
    keystatus_colors,
    practice_colors
];

function handle_menu_visibility()
{
    for (var i = 0; i < hotkeys_t.length; i++)
    {
        const group = hotkeys_t[i];

        for (var elem in group)
        {
            const label = group[elem];
            const enabled = menu_c.get(setup_keys);

            menu_c.visibility(label, enabled);
        }
    }

    for (var i = 0; i < colors_t.length; i++)
    {
        const group = colors_t[i];

        for (var elem in group)
        {
            const label = group[elem];
            const enabled = menu_c.get(setup_colors);

            menu_c.visibility(label, enabled);
        }
    }
}

const hotkey_status = {get: false, set: false};
function handle_hotkeys()
{
    if (!menu_c.get(practice))
        return;

    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    if (menu_c.get_hotkey(practice_hotkeys.get) === hotkey_status.get &&
        menu_c.get_hotkey(practice_hotkeys.set) === hotkey_status.set)
            return;

    hotkey_status.get = menu_c.get_hotkey(practice_hotkeys.get);
    hotkey_status.set = menu_c.get_hotkey(practice_hotkeys.set);

    if (hotkey_status.get)
    {
        last_position = Entity.GetRenderOrigin(player);
        last_angles = Local.GetViewAngles();
        exec("playvol", ["buttons\\blip1", "1"]);
    }

    if (hotkey_status.set)
    {
        if (last_position && last_angles)
        {
            exec("setpos_exact", [last_position[0], last_position[1], last_position[2]]);
            exec("setang_exact", [last_angles[0], last_angles[1]]);

            exec("playvol", ["buttons\\blip1", "1"]);
        }
    }
}

function do_keystatus_ui()
{

    if (!menu_c.get(keystatus))
        return;

    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    const colors = {
        dormant: setup_color(keystatus_colors.dormant, [150, 150, 150, 125]),
        active: setup_color(keystatus_colors.active, [225, 225, 225, 200]),
        overlap: setup_color(keystatus_colors.overlap, [225, 0, 75, 125])
    };

    const x = Render.GetScreenSize()[0], y = Render.GetScreenSize()[1] + menu_c.get(info_offset);

    const status = {
        forward: menu_c.get_hotkey(move_hotkeys.forward),
        backward: menu_c.get_hotkey(move_hotkeys.backward),
        left: menu_c.get_hotkey(move_hotkeys.left),
        right: menu_c.get_hotkey(move_hotkeys.right)
    };

    if ((status.forward && status.backward) || (status.left && status.right))
    {
        colors.dormant = colors.overlap;
        colors.active = colors.overlap;
    };

    Render.String(x / 2 - 39, y / 2 + 205, 0, "W", status.forward ? colors.active : colors.dormant, 4);
    Render.String(x / 2 - 14, y / 2 + 205, 0, "A", status.left ? colors.active : colors.dormant, 4);
    Render.String(x / 2 + 5, y / 2 + 205, 0, "S", status.backward ? colors.active : colors.dormant, 4);
    Render.String(x / 2 + 19, y / 2 + 205, 0, "D", status.right ? colors.active : colors.dormant, 4);
}

function do_practice_ui()
{
    if (!menu_c.get(practice))
        return;

    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    const y = Render.GetScreenSize()[1];

    const font_practice = Render.AddFont("Segoe UI", 14, 800);

    const colors = {
        dormant: setup_color(practice_colors.dormant, [255, 210, 35, 125]),
        active: setup_color(practice_colors.active, [255, 225, 225, 200])
    };

    draw_container(5, y / 2 - 100, 200, "practice mode (" + practice_modes[menu_c.get(movement_type)] + ")");
    text(5, y / 2 - 80, 0, "1. Checkpoint", hotkey_status.get ? colors.active : colors.dormant, font_practice);
    text(5, y / 2 - 60, 0, "2. Teleport", hotkey_status.set ? colors.active : colors.dormant, font_practice);
}

function handle_movement_mode()
{
    const type = menu_c.get(movement_type);

    if (type === last_mode)
        return;

    last_mode = type;

    exec("sv_airaccelerate", [configurations[type].air_accel]);
    exec("sv_accelerate", [configurations[type].accel]);
    exec("sv_staminamax", [configurations[type].stamina]);
    exec("sv_ladder_scale_speed", [configurations[type].ladder_accel]);
}

function handle_jumpstats()
{
    if (!menu_c.get(jumpstats))
        return;

    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    const vec = vec3.new(Entity.GetProp(player, "CBasePlayer", "m_vecVelocity[0]"));
    const flags = Entity.GetProp(player, "CBasePlayer", "m_fFlags");
    var landed = false;

    if (!(flags & 1))
    {
        if (!last_jumping)
        {
            jump_positions[0] = vec3.new(Entity.GetRenderOrigin(player));
            last_pre = Math.round(Math.sqrt(vec.x ** 2 + vec.y ** 2) * 10) / 10;
        }

        last_jumping = true;
        return;
    }

    if (flags & 1)
    {
        if (last_jumping)
        {
            landed = true;
            jump_positions[1] = vec3.new(Entity.GetRenderOrigin(player));
        }

        last_jumping = false;
    }

    if (!landed)
        return;

    const sub = vec3.sub(jump_positions[1], jump_positions[0])
    const dist = Math.round((Math.sqrt(sub.x * sub.x + sub.y * sub.y) + 31) * 100) / 100;

    const get_jump_level = function(dist)
    {
        const type = menu_c.get(movement_type);
        const data = {level: -1, color: CHAT_COLOR.WHITE};
        const current_scores = {
            perfect: scores[0][type],
            impressive: scores[1][type],
            godlike: scores[2][type],
            ownage: scores[3][type]
        };

        if (dist < current_scores.perfect)
        {
            return data;
        }
        else if (dist >= current_scores.perfect && dist < current_scores.impressive)
        {
            data.level = 0;
            data.color = CHAT_COLOR.CYAN;
            return data;
        }
        else if (dist >= current_scores.impressive && dist < current_scores.godlike)
        {
            data.level = 1;
            data.color = CHAT_COLOR.GREEN;
            return data;
        }
        else if (dist >= current_scores.godlike && dist < current_scores.ownage)
        {
            data.level = 2;
            data.color = CHAT_COLOR.RED;
            return data;
        }
        else if (dist >= current_scores.ownage)
        {
            data.level = 3;
            data.color = CHAT_COLOR.GOLD;
            return data;
        }
    }

    if (flags & (1 << 1))
        dist += 5;

    const jump_data = get_jump_level(dist);

    if (dist > 220 && dist < 300 && Math.abs(jump_positions[1].z - jump_positions[0].z) < 8)
    {
        if (jump_data.level > -1)
        {
            Cheat.ExecuteCommand("playvol " + sounds[jump_data.level] + " 1");
        }

        Global.PrintChat(" " + CHAT_COLOR.GRAY + "[" + CHAT_COLOR.YELLOW + "JS" + CHAT_COLOR.GRAY + "] Distance: " + jump_data.color + dist.toString() +
        CHAT_COLOR.GRAY + " | Pre-speed: " + CHAT_COLOR.WHITE + last_pre.toString());
    }

}

function do_jump_bug(should_jump)
{
    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    if (!menu_c.get_hotkey(jb) && !menu_c.get_hotkey(cb))
    {
        if (unduck)
        {
            unduck = false;
            Cheat.ExecuteCommand("-duck");
        }

        return;
    }

    if (unduck)
    {
        unduck = false;
        Cheat.ExecuteCommand("-duck");
    }

    const flags = Entity.GetProp(player, "CBasePlayer", "m_fFlags");
    const origin = vec3.new(Entity.GetProp(player, "CBaseEntity", "m_vecOrigin"));
    const vel = vec3.new(Entity.GetProp(player, "CBasePlayer", "m_vecVelocity[0]"));

    vel = vec3.multiply(vel, vec3.new(Globals.TickInterval(), Globals.TickInterval(), 0));
    origin = vec3.add(origin, vel);

    if (flags & 1)
    {
        if (should_jump)
        {
            UserCMD.ForceJump();
        }

        return;
    }

    for (var i = 0; i < max_radius; i+=step)
    {
        const start = vec3.add(origin, vec3.new(Math.cos(i) * 17, Math.sin(i) * 17, 0));
        const end = vec3.add(origin, vec3.new(Math.cos(i) * 17, Math.sin(i) * 17, -128));

        const trace_t = Trace.Line(player, vec3.unpack(start), vec3.unpack(end));

        if (trace_t[1] * 128 < 9)
        {
            Cheat.ExecuteCommand("+duck");
            unduck = true;
            return;
        }
    }
}


function do_long_jump()
{
    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    const flags = Entity.GetProp(player, "CBasePlayer", "m_fFlags");

    if (!menu_c.get_hotkey(lj))
    {
        if (is_lj)
        {
            is_lj = false;
            Cheat.ExecuteCommand("-jump");
            UI.SetValue("Misc", "Movement", "Auto strafe", 0);
        }

        return;
    }

    if (flags & 1)
    {

        if (is_lj)
        {
            is_lj = false;
            Cheat.ExecuteCommand("-jump");
            UI.SetValue("Misc", "Movement", "Auto strafe", 0);
            return;
        }

    } else {

        if (!is_lj)
        {
            is_lj = true;
            UI.SetValue("Misc", "Movement", "Auto strafe", 3);
            return;
        }

        Cheat.ExecuteCommand("+jump");
    }

}

const get_delta_color = function(delta)
{
    delta = Math.round(delta);

        if (delta > 0)
        {
            delta = setup_color(chart_colors.speed_loss, [255, 200, 200, 200]);
    } else
        if (delta < 0)
        {
            delta = setup_color(chart_colors.speed_gain, [220, 255, 200, 200]);
    } else
        if (delta > -1 && delta < 1)
        {
            delta = setup_color(chart_colors.speed_stable, [255, 255, 200, 200]);
        }

    return delta;
}

function do_velocity_info()
{
    const player = Entity.GetLocalPlayer();

    if (!player || !Entity.IsAlive(player))
        return;

    if (!menu_c.get(info))
        return;

    const x = Render.GetScreenSize()[0], y = Render.GetScreenSize()[1] + menu_c.get(info_offset);

    const vec = Entity.GetProp(player, "CBasePlayer", "m_vecVelocity[0]");
    const velocity = Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]);
    const in_air = Entity.GetProp(player, "CBasePlayer", "m_fFlags") & 1 || Entity.GetProp(player, "CBasePlayer", "m_fFlags") & 17;

    const colors = {
        main: setup_color(chart_colors.main, [200, 200, 200, 255]),
        unit: setup_color(chart_colors.unit, [225, 225, 225, 225]),
        axis: setup_color(chart_colors.axis, [100, 100, 100, 125]),
        land_speed: setup_color(chart_colors.land_speed, [255, 200, 200, 255])
    };

    Render.String(x / 2, y / 2 + 150, 1, Math.round(velocity).toString(), get_delta_color(last_delta), 4);
    Render.String(x / 2 + 1, y / 2 + 185, 1, "u/s", colors.unit, 2);

    Render.Line(x / 2 - 100, y / 2 + 25, x / 2 - 100, y / 2 + 145, colors.axis);
    Render.Line(x / 2 - 115, y / 2 + 130, x / 2 + 95, y / 2 + 130, colors.axis);

    // Update our velocity data every tick
    if (Globals.Curtime() - last_log > Globals.TickInterval())
    {
        last_log = Globals.Curtime();

        velocity_data.unshift([velocity, in_air]);
    }

    if (velocity_data.length < 2)
    {
        Render.String(x / 2, 120, 1, "CREATING CHART...", [200, 200, 200, Math.sin((Globals.Realtime() % 3) * 4) * (255 / 2 - 1) + 255 / 2], 12);
        return;
    }

    if (velocity_data.length > 40)
        velocity_data.pop();

    for (var i = 0; i < velocity_data.length - 1; i++)
    {
        const cur = velocity_data[i][0];
        const next = velocity_data[i + 1][0];
        const landed = velocity_data[i][1] && !velocity_data[i + 1][1];

        if (i === 0)
            last_delta = next - cur;

        Render.Line(x / 2 + 90 - (i - 1) * 5, y / 2 + 130 - (clamp(cur, 0, 450) * 75 / 320), x / 2 + 90 - i * 5, y / 2 + 130 - (clamp(next, 0, 450) * 75 / 320), colors.main);

        if (landed)
        {
            Render.String(x / 2 + 100 - (i + 1) * 5, y / 2 + 115 - (clamp(next, 0, 450) * 75 / 320), 0, Math.round(next).toString(), colors.land_speed, 3);
        }
    }
}

handle_menu_visibility();

function on_create_move()
{
    const should_jump = menu_c.get_hotkey(jb);

    handle_hotkeys();
    handle_movement_mode();

    handle_jumpstats();

    handle_menu_visibility();

    do_jump_bug(should_jump);
    do_long_jump();
}

function on_paint()
{
    do_practice_ui();
    do_velocity_info();
    do_keystatus_ui();
}

function reset()
{
    last_log = Globals.Curtime();
    velocity_data = [];

    last_jumping = false;
    last_pre = 0;
    jump_positions = [];

    last_position = [];
    last_angles = [];
}

Cheat.RegisterCallback("CreateMove", "on_create_move");
Cheat.RegisterCallback("Draw", "on_paint");
Cheat.RegisterCallback("player_connect_full", "reset");

Кто вырезать всё кроме Automatic jumpbug чтобы работало, а то я не могу

  • Закрыта
  • Вопрос Вопрос
Вопрос Как сдампить длл файл мануалом чтобы через проверку Procces Hacker 2 никак не найти

Как сдампить длл файл мануалом чтобы через проверку Procces Hacker 2 никак не найти?

просто об этом упоминал @Colby5Covington
этой цитатой

Мануал мапишь длл файл и процесс хакер твой идёт сосать глубоко

Пользователи онлайн

Статистика форума

Темы
29,178
Сообщения
187,188
Пользователи
129,073
Новый пользователь
waodoaidoaif
Назад
Сверху Снизу