Как написать луа на неверлуз

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)

local RotationJitter = 15 local FakeLagSwitch = menu.Switch(«Fake Lag«, «Randomizer«, false) local FakeLagRandomMode = menu.Combo(«Fake Lag«, «Randomizer presets«, {«Off«, «Always on«, «On enemy visible«, «While enemy visible«}, 0, «Safe always works, Max is Risky but OP«) local ESwitch = menu.Switch(«Anti-Aim«,«Legit AA«, false) local SafeMax = menu.Combo(«Anti-Aim«, «Legit AA«, {«Safe«, «Max«, «Middle«}, 0, «Safe always works, Max is Risky but OP«) local Jitter = menu.Switch(«Anti-Aim«, «Jitter«, false) local JitterAngle = menu.SliderInt(«Anti-Aim«, «Jitter Angle«, 0, 58 ,58) local TrashTalk = menu.Switch(«Misc«, «Trash phrases«, false) local JitterOff = menu.Switch(«Anti-Aim«,«JitterOffset«, false) local Jitter1 = menu.Slider(«Anti-Aim«, «First Jitter«, 0, 58, 58) local Jitter2 = menu.Slider(«Anti-Aim«, «Second Jitter«, 0, 58, 58) local LBYJitter1 = menu.Slider(«Anti-Aim«, «First LBY Jitter«, 0, 180, 180) local LBYJitter2 = menu.Slider(«Anti-Aim«, «Second LBY Jitter«, 0, 180, 180) local WatermarkSwitch = menu.Switch(«Misc«, «Watermark«, true) local Resolver = menu.Switch(«Rage Bot«, «God resolver«, false, «Click this to hit head all day everyday«) local ForceLethal = menu.Switch(«Rage Bot«, «Force Lethal on unarmoured«, false, «Forces lethal if you have scout/revolver and they are one shot«) local WatermarkX = menu.Slider(«Misc«, «X Watermark«, 0, 25, 50) local WatermarkY = menu.Slider(«Misc«, «Y Watermark«, 0, 20, 40) local forcelethalfunc=function() local forcelethalYN = ForceLethal:GetBool() if ragebot_shot.damage > 100 then ragebot.OverrideMinDamage(1, 101) ragebot.ForceSafety(1) end end local resolverfunc=function() local ResolverTN = Resolver:GetBool() ragebot.OverrideMinDamage(1, 101) ragebot.ForceSafety(1) ragebot.SetHitboxPriority(1, 0, 100) ragebot.OverrideHitchance(1, 80) ragebot.ForceHitboxSafety(1, 0) ragebot.EnableMultipoints(1, 0, true) end resolverfunc() Resolver.RegisterCallback(resolverfunc) local watermark=function() local username = cheat.GetCheatUserName() local text = «Bokkie Script | « .. username local textSize = g_Render:CalcTextSize(text, 12) local position = Vector2.new(WatermarkX(), WatermarkY()) local indent = Vector2.new(WatermarkX(5), WatermarkY(5)) cheat.RegisterCallback(«draw«, function() g_Render:BoxFilled(Vector2.new(position.x indent.x, position.y indent.y), Vector2.new(position.x + textSize.x + indent.x, position.y + textSize.y + indent.y), Color.new(0, 0, 0, 0.7)) g_Render:Text(text, Vector2.new(position.x, position.y), Color.new(1, 1, 1, 1), 12) end) end watermark() WatermarkSwitch.RegisterCallback(watermark) function JitterOffset() if (RotationJitter == 10) then antiaim.OverrideLBYOffset(Jitter1:GetValue()) RotationJitter = 11 elseif (RotationJitter == 11) then antiaim.OverrideLBYOffset(Jitter2:GetValue()) RotationJitter = 10 end end JitterOffset() JitterOff.RegisterCallback(JitterOffset) Talk shit get ripped local phrases= { «Fire Burns«, «Get sent to the Psych Ward«, «Ez Media«, «gAmsense CraCk«, «Yato touches kids«, «Jordan’s a pedo«, «Springs fakes media« } local get_phrase=function() return phrases[math.random(1, #phrases):gsub(«, )] end local Trash=function() if TrashTalk:GetBool() == true then cheat.RegisterCallback(«events«, function(event) if event:GetName() ~= «player_death« then return end local me = g_EngineClient:GetLocalPlayer() local victim = g_EngineClient:GetPlayerForUserId(event:GetInt(«userid«)) local attacker = g_EngineClient:GetPlayerForUserId(event:GetInt(«attacker«)) if victim == attacker or attacker ~= me then return end g_EngineClient:ExecuteClientCmd(say « .. get_phrase() .. «) end) end end Trash() TrashTalk:RegisterCallback(Trash) local JitterFunc=function() local jitteron=jitter:GetBool() JitterSlide:SetVisible(jitteron) while Jitter == true do local RandNum = math.random(10,10) antiaim.OverrideLBYOffset(JitterSlide RandNum) end end JitterFunc() jitter:RegisterCallback(JitterFunc) local FakeLag=function() local FakeLagSwtichONOFF = FakeLagSwitch:GetBool() FakeLagRandomSlider:SetVisible(FakeLagSwitchONOFF) end FakeLag() FakeLagSwitch:RegisterCallback(FakeLag) local LegitAA=function() private() local OnOFF = ESwitch:GetBool() if OnOFF == true then antiaim.OverridePitch(90) UP antiaim.OverrideInverter(true) antiaim.OverrideDesyncOnShot(4) antiaim.OverrideYawOffset(0) if SafeMax == Safe then antiaim.OverrideLBYOffset(29) safe if SafeMax == Max then antiaim.OverrideLBYOffset(58) else antiaim.OverrideLBYOffset(35) end end end LegitAA() ESwtichcheat.RegisterCallback(LegitAA)end


an anonymous user
·

December 01, 2021


Lua

if dopamine == nil then
    RunScript("dopamine.lua")
end

local timing_switch = 40

local frametime = 0
local fps = 0
local cur_mode = 0
local timing = timing_switch

local function get_kd() -- """borrowed""" from Nexxed
    local kills = entities.GetPlayerResources():GetPropInt("m_iKills", entities.GetLocalPlayer():GetIndex())
    local deaths = entities.GetPlayerResources():GetPropInt("m_iDeaths", entities.GetLocalPlayer():GetIndex())

    if deaths == 0 then deaths = 1 end

    return (math.floor((kills / deaths) * (10^(2 or 0)) + 0.5) / (10^(2 or 0)))
end


local clantag_timing = {
    [1] = function() return "gamesense" end,
    [2] = function() return "amesense " end,
    [3] = function() return "mesense  " end,
	[4] = function() return "esense   " end,
	[5] = function() return "sense    " end,
	[6] = function() return "ense     " end,
	[7] = function() return "nse      " end,
	[8] = function() return "se       " end,
	[9] = function() return "e        " end,
	[10] = function() return "         " end,
	[11] = function() return "        g" end,
	[12] = function() return "       ga" end,
	[13] = function() return "      gam" end,
	[14] = function() return "     game" end,
	[15] = function() return "    games" end,
	[16] = function() return "   gamese" end,
	[17] = function() return "  gamesen" end,
	[18] = function() return " gamesens" end,
	[19] = function() return "gamesense" end,
	[20] = function() return "gamesense" end,
	[21] = function() return "gamesense" end,
	[22] = function() return "gamesense" end,
	[23] = function() return "gamesense" end,
	[24] = function() return "gamesense" end,
	[25] = function() return "gamesense" end,
	[26] = function() return "gamesense" end,
	[27] = function() return "gamesense" end,
	[28] = function() return "gamesense" end
}

local function hk_create_move(cmd)
    timing = timing + 1
end

local function hk_draw()
    -- also """borrowed""" from Nexxed :)
    frametime = 0.9 * frametime + (1.0 - 0.9) * globals.AbsoluteFrameTime()
    fps = math.floor((1.0 / frametime) + 0.5)

    if not dopamine.available() then
        return
    end
    
    if timing >= timing_switch then
        cur_mode = cur_mode + 1

        if cur_mode > #clantag_timing then
            cur_mode = 1
        end
        
        dopamine.set_clan_tag(clantag_timing[cur_mode]())
        timing = 0
    end
end

callbacks.Register("CreateMove", hk_create_move)
callbacks.Register("Draw", hk_draw)

Output

(Run the program to view its output)

Написанный на Lua скрипт не имеет какой-либо специальной функции, с которой начиналось бы его выполнение. Скрипт можно рассматривать просто как набор команд (инструкций), который выполняется, начиная с первой инструкции.

Скрипт может быть как очень простым, состоящим всего из одной команды, так и весьма сложным, содержащим десятки, сотни и даже тысячи инструкций. Следующие друг за другом инструкции могут разделяться точкой с запятой (;). Однако это требование не является обязательным, поэтому весь приведённый ниже код является корректным с точки зрения синтаксиса:

Переменные используются для хранения значений в процессе выполнения скрипта.

Именами (идентификаторами) переменных в Lua могут быть любые последовательности из букв, цифр и символа подчеркивания, начинающиеся не с цифры.

Обратите внимание

Язык Lua различает регистр символов, поэтому abc, Abc, ABC являются различными именами.

В таблице ниже приведены слова, которые зарезервированы языком Lua и не могут использоваться в именах переменных:

and break do else elseif

end false for function if

in local nil not or

repeat return then true until

while

Кроме того, все имена, начинающиеся с символа подчеркивания, за которым идут заглавные буквы (например, _VERSION) также являются зарезервированными.

Какие переменные бывают в Lua?

Переменные в Lua могут быть глобальными и локальными. Если переменная не объявлена явно как локальная, она считается глобальной.

Глобальные переменные Lua

Глобальная переменная появляется в момент присваивания ей первого значения. До присваивания первого значения обращение к глобальной переменной даёт nil.

MsgBox(tostring (g))  —> nil

g = 1

MsgBox(tostring (g))  —> 1

Глобальная переменная существует до тех пор, пока существует среда исполнения скрипта и доступна любому Lua-коду, выполняемому в этой среде.

При необходимости удалить глобальную переменную можно явным образом, просто присвоив ей значение nil.

g = 1 — создаем глобальную переменную g со значением 1

g = nil — удаляем глобальную переменную g

MsgBox(tostring (g)) —> nil

Все глобальные переменные являются полями обычной таблицы, называемой глобальным окружением. Эта таблица доступна через глобальную переменную _G. Поскольку полями глобального окружения являются все глобальные переменные (включая саму _G), то _G._G == _G.

Локальные переменные Lua

Любые локальные переменные должны быть объявлены явно с использованием ключевого слова local. Объявить локальную переменную можно в любом месте скрипта. Объявление может включать в себя присваивание переменной начального значения. Если значение не присвоено, переменная содержит nil.

local a — объявляем локальную переменную a

local b = 1 — объявляем локальную переменную b, присваиваем ей значение 1

local c, d = 2, 3 — объявляем локальные переменные c и d, присваиваем им значения 2 и 3

Область видимости локальной переменной начинается после объявления и продолжается до конца блока.

Примечание

Областью видимости переменной называется участок кода программы, в пределах которого можно получить доступ к значению, хранящемуся в данной переменной.

Под блоком понимается:

тело управляющей конструкции (if-then, else, for, while, repeat);

тело функции;

фрагмент кода, заключённый в ключевые слова do…end.

Если локальная переменная определена вне какого-либо блока, её область видимости распространяется до конца скрипта.

a = 5 — глобальная переменная a

local i = 1  — переменная i локальна в пределах скрипта

   while i <= a do — цикл от 1 до 5

   local a = i^2 — переменная а локальна внутри цикла while

   MsgBox(a) —> 1, 4, 9, 16, 25

   i = i + 1

end

MsgBox(a) —> 5 (здесь обращение к глобальной a)

if i > 5 then

   local a — переменная а локальна внутри then

   a = 10

   MsgBox(a) —> 10

else

   MsgBox(a) —> 5 (здесь обращение к глобальной a)

end

do

   local a = 20 — переменная а локальна внутри do-end

   MsgBox(a) —> 20

end

MsgBox(a) —> 5 (здесь обращение к глобальной a)

Обратите внимание

Когда возможно, рекомендуется использовать локальные переменные вместо глобальных. Это позволит избежать «засорения» глобального пространства имён и обеспечит лучшую производительность (поскольку доступ к локальным переменным в Lua выполняется несколько быстрее, чем к глобальным).

Типы данных Lua

Какие типы данных поддерживает язык Lua?

Lua поддерживает следующие типы данных:

1. Nil (ничего). Соответствует отсутствию у переменной значения. Этот тип представлен единственным значением — nil.

2. Boolean (логический). К данному типу относятся значения false (ложь) и true (истина).

При выполнении логических операций значение nil рассматривается как false. Все остальные значения, включая число 0 и пустую строку, рассматриваются как true.

3. Number (числовой). Служит для представления числовых значений.

В числовых константах можно указывать необязательную дробную часть и необязательный десятичный порядок, задаваемый символами «e» или «E». Целочисленные числовые константы можно задавать в шестнадцатеричной системе, используя префикс 0x.

Примеры допустимых числовых констант: 3, 3.0, 3.1415926, 314.16e-2, 0xff.

4. String (строковый). Служит для представления строк.

Строковые значения задаются в виде последовательности символов, заключённой в одинарные или двойные кавычки:

a = «это строка»

b = ‘это вторая строка’

Строки, заключённые в двойные кавычки, могут интерпретировать C-подобные управляющие последовательности (escape-последовательности), начинающиеся с символа «» (обратный слэш):

b (пробел),

n (перевод строки),

 r (возврат каретки);

t (горизонтальная табуляция),

 \ (обратный слеш);

» (двойная кавычка);

‘ (одинарная кавычка).

Обратите внимание

Символ в строке также может быть представлен своим кодом с помощью escape-последовательности:

ddd,

где ddd — последовательность из не более чем трёх цифр.

Кроме кавычек для определения строки могут также использоваться двойные квадратные скобки:

local a = [[Компания «Кронос»]]

Определение строки с помощью двойных квадратных скобок позволяет игнорировать все escape-последовательности, т. е. строка создаётся полностью так, как описана:

local a = [[string

string1

string2

   string3

]] — «string

       string1

       string2

          string3»

Примечание

При определении строки с помощью двойных квадратных скобок учитываются символы табуляции и переноса.

Двойные скобки могут быть вложенными. Для того чтобы их не перепутать, между скобками вставляется символ«равно» (=):

local a = [=[определение строки [[string]] в Lua]=]

— будет срока: «определение строки [[string]] в Lua»

5. Function (функция). Функции в Lua могут быть записаны в переменные, переданы как параметры в другие функции ивозвращены как результат выполнения функций.

6. Table (таблица). Таблица представляет собой набор пар «ключ» — «значение», которые называют полями илиэлементами таблицы. Как ключи, так и значения полей таблицы могут иметь любой тип, за исключением nil. Таблицы не имеют фиксированного размера: в любой момент времени в них можно добавить произвольное число элементов.

Подробнее — в статье «Создание таблиц в Lua»

7. Userdata (пользовательские данные). Является особым типом данных. Значения этого типа не могут быть созданы или изменены непосредственно в Lua-скрипте.

Userdata используется для представления новых типов, созданных в вызывающей скрипт программе или в библиотеках, написанных на языке С. Например, библиотеки расширений Lua для «CronosPRO» используют этот тип для представления таких объектов, как:

банки данных (класс Bank);

базы данных (класс Base);

записи (класс Record) и т. п.

8. Thread (поток). Соответствует потоку выполнения. Эти потоки никаким образом не связаны с операционной системой и поддерживаются исключительно средствами самого Lua.

Как в Lua задать тип переменной?

Lua не предусматривает явного задания типа переменной. Тип переменной устанавливается в момент присвоения переменной значения. Любой переменной может быть присвоено значение любого типа (вне зависимости от того, значение какого типа она содержала ранее).

a = 123 — переменная a имеет тип number

a = «123» — теперь переменная a имеет тип string

a = true — теперь переменная a имеет тип boolean

a = {} — теперь переменная a имеет тип table

Обратите внимание

Переменные типа table, function, thread и userdata не содержат самих данных, а хранят ссылки на соответствующие объекты. При присваивании, передачи в функцию в качестве аргумента и возвращении из функции в качестве результата копирования объектов не происходит, копируются только ссылки на них.

a = {} — создаем таблицу. В переменную a помещается ссылка на таблицу

b = a — переменная b ссылается на ту же таблицу, что и a

a[1] = 10 — элементу таблицы с индексом 1 присвоено значение 10

MsgBox(b[1]) —> ’10’

b[1] = 20

MsgBox(a[1]) —> ’20’

Остальные данные являются непосредственными значениями.

a = 10

b = a

a = 20

MsgBox(a) —> ’20’

MsgBox(b) —> ’10’

Как в Lua получить тип переменной?

Тип значения, сохранённого в переменной, можно выяснить при помощи стандартной функции type. Эта функция возвращает строку, содержащую название типа («nil», «number», «string», «boolean», «table», «function», «thread», «userdata»).

t = type («это строка») — t равно «string»

t = type (123) — t равно «number»

t = type (type) — t равно «function»

t = type (true) — t равно «boolean»

t = type (nil) — t равно «nil»

t = type (CroApp.GetBank()) — t равно «userdata»

Как в Lua преобразовать тип переменной?

Lua при необходимости автоматически преобразует числа в строки и наоборот. Например, если строковое значение является операндом в арифметической операции, оно преобразуется в число. Аналогично числовое значение, встретившееся в том месте, где ожидается строковое, будет преобразовано в строку.

a = «10» + 2 — a равно 12

a = «10» + 2 — a равно «10 + 2»

a = «-5.3e-10″*«2» — a равно -1.06e-09

a = «строка» + 2 — Ошибка! Невозможно преобразовать «строка» в число

Значение любого типа можно явным образом преобразовать в строку с помощью стандартной функции tostring.

a = tostring (10) — a равно «10»

a = tostring (true) — a равно «true»

a = tostring (nil) — a равно «nil»

a = tostring ({[1] = «это поле 1»}) — a равно «table: 06DB1058»

Из предыдущего примера видно, что содержимое таблиц функцией tostring не преобразуется. Выполнить такое преобразование можно с помощью функции render.

a = render (10) — a равно «10»

a = render (true) — a равно «true»

a = render (nil) — a равно «nil»

a = render ({[1] = «это поле 1»}) — a равно «{[1] = «это поле 1»}»

Для явного преобразования значения в число можно использовать стандартную функцию tonumber. Если значение является строкой, которую можно преобразовать в число (или уже является числом), функция возвращает результат преобразования, в противном случае возвращает nil.

a = tonumber («10») — a равно «10»

a = tonumber («10»..».5″) — a равно 10.5

a = tonumber (true) — a равно «nil»

a = tonumber (nil) — a равно «nil»

Расстановка комментариев в Lua

Комментарий в Lua начинается двумя знаками «минус» (—) и продолжается до конца строки.

local a = 1 — однострочный комментарий

Если непосредственно после символов «—» идут две открывающие квадратные скобки ([[), комментарий являетсямногострочным и продолжается до двух закрывающих квадратных скобок (]]).

local a = 1 — [[ многострочный

комментарий ]]

Двойные скобки в комментариях могут быть вложенными. Для того чтобы их не перепутать, между скобками вставляется знак равенства (=):

local a = [[Компания «Кронос»]] — [=[

local a = [[Компания «Кронос»]]

]=]

Количество символов «=» определяет вложенность:

local a = [=[определение некоторой строки [[string]] в языке Lua]=] —[==[

local a = [=[определение некоторой строки [[string]] в языке Lua]=]

]==]

Операции, применяемые в Lua

В выражениях, написанных на Lua, могут применяться следующие виды операций:

1. Арифметические операции.

Lua поддерживает следующие арифметические операции:

+ (сложение);

— (вычитание);

* (умножение);

/ (деление);

^ (возведение в степень);

% (остаток от деления).

Обратите внимание

Арифметические операции применимы как к числам, так и к строкам, которые в этом случае преобразуются в числа.

2. Операции сравнения.

В Lua допустимы следующие операции сравнения величин:

== (равно);

~= (не равно);

< (меньше);

> (больше);

<= (меньше или равно);

>= (больше или равно).

Обратите внимание

Операции сравнения всегда возвращают логическое значение true или false.

Правила преобразования чисел в строки (и наоборот) при сравнениях не работают, т. е. выражение «0» == 0 даёт в результате false.

3. Логические операции.

К логическим операциям относятся:

and (логическое И).

Операция and возвращает свой первый операнд, если он имеет значение false или nil. В противном случае, операция возвращает второй операнд (причём этот операнд может быть произвольного типа).

a = (nil and 5) — a равно nil

a == (false and 5) — a равно false

a == (4 and 5) — a равно 5

or (логическое ИЛИ).

Операция or возвращает первый операнд, если он не false и не nil, иначе он возвращает второй операнд.

a == (4 or 5) — a равно 4

a == (false or 5) — a равно 5

Обратите внимание

Логические операции and и or могут возвращать значения любых типов.

Логические операции and и or вычисляют значение второго операнда только в том случае, если его нужно вернуть. Если этого не требуется, второй операнд не вычисляется. Например:

a == (4 or f()) — вызова функции f() не произойдет

not (логическое НЕ).

Операция not всегда возвращает true или false.

4. Операция конкатенации.

Для конкатенации (объединения) строк служит операция… (две точки).

a = «Кронос»..»-«..«Информ» — переменная a получит значение «Кронос-Информ»

Обратите внимание

Если один или оба операнда являются числами, выполняется их преобразование в строки.

a = 0..1 — переменная a получит значение «01»

5. Операция получения длины.

В Lua определена операция длины #, которую можно использовать для получения длины строки.

a = «строка»

len = #a — len равно 6

len = #«ещё строка» — len равно 10

Обратите внимание

С помощью операции # можно также узнать максимальный индекс (или размер) массива. Подробнее — в статье «Работа с массивами в Lua» .

Приоритет операций в Lua

В языке Lua выполнение операций осуществляется в соответствии со следующим приоритетом (в порядке убывания):

1. ^

2. not # — (унарный)

3. * / %

4. + —

5. ..

6. < > <= >= ~= ==

7. and

8. or

 Вызов скриптов из форм

С каждой формой (включая вложенные формы) связан отдельный скрипт, который обычно содержит функции, выполняющие обработку событий формы и её элементов.

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

Необходимо отметить, что скрипт формы, хотя и не содержит вызова функции module, фактически является модулем. Это означает, что переменные, объявленные в скрипте формы без ключевого слова local, не выносятся в глобальное окружение и доступны только внутри этого скрипта. Если необходимо сделать какое-либо значение доступным для скриптов других форм, его следует явным образом определить в глобальной таблице _G:

_G.var = 123

Другой скрипт форм сможет прочитать это значение следующим образом:

local a = _G.var

Блоки операторов (инструкций)

К основным операторам Lua относятся:

присваивание;

условный оператор;

операторы для организации циклов.

Группа операторов может быть объединена в блок (составной оператор) при помощи конструкции do… end.

do — начало блока

   <оператор1> — тело блока

   <оператор2>

   …

   <операторN>

end — конец блока

Блок открывает новую область видимости, в которой можно определять локальные переменные.

a = 5 — глобальная переменная a

do

   local a = 20 — внутри do-end определяется локальная переменная а

   MsgBox(a) —> 20

end

MsgBox(a) —> 5 (здесь обращение уже к глобальной a)

Оператор присваивания в Lua

Присваивание изменяет значение переменной или поля таблицы. В простейшем виде присваивание может выглядеть так:

a = 1 — переменной a присвоено значение 1

a = b + c — переменной a присвоена сумма значений переменных b и с

a = f(x) — переменной a присвоено значение, возвращённое функцией f(x)

В Lua допускается так называемое множественное присваивание, когда несколько переменных, находящихся слева от оператора присваивания, получают значения нескольких выражений, записанных справа от оператора присваивания:

a, b = 1, 5*c — a равно 1; b равно 5*c

Если переменных больше чем значений, «лишним» переменным присваивается nil.

a, b, c = 1, 2 — a равно 1; b равно 2; c равно nil

Если значений больше чем переменных, «лишние» значения игнорируются.

a, b = 1, 2, 3 — a равно 1; b равно 2; значение 3 не использовано

Множественное присваивание можно использовать для обмена значениями между переменными:

a = 10; b = 20 — a равно 10, b равно 20

a, b = b, a — теперь a равно 20, b равно 10

Условный оператор (if) в Lua

Оператор if проверяет истинность заданного условия. Если условие является истинным, выполняется часть кода, следующая за ключевым словом then (секция then). В противном случае, выполняется код, следующий за ключевым словом else (секция else).

if a > b then

   return a — если a больше b, вернуть a

else

   return b — в противном случае — вернуть b

end

Секция else является необязательной.

if a < 0 then

   a = 0 — если a меньше 0, присвоить a значение 0

end

Вместо вложенных операторов if можно использовать конструкцию elseif. Например, приведенный код:

if a == 1 then

   return «Иван» — если a равно 1

else

   if a == 2 then

     return «Петр» — если a равно 2

   else

      if a == 3 then

         return «Сергей» — если a равно 3

      else

         return «Нет такого игрока» — если a — ни одно из перечисленных

      end

   end

end

будет проще для восприятия, если заменить его следующим:

if a == 1 then

   return «Иван» — если a равно 1

elseif a == 2 then

   return «Петр» — если a равно 2

elseif a == 3 then

   return «Сергей» — если a равно 3

else

   return «Нет такого игрока» — если a — ни одно из перечисленных

end

Цикл с предусловием (while) в Lua

Оператор while предназначен для организации циклов с предусловием и имеет следующий вид:

while <condition> do

   … — тело цикла

end

Перед каждой итерацией цикла проверяется условие <condition>:

если условие ложно, цикл завершается и управление передаётся первому оператору, следующему за оператором while;

если условие истинно, выполняется тело цикла, после чего все действия повторяются.

i = 10; t = {}

while i > 0 do — цикл от 10 до 1

   t[i] = «поле »..i

   i = i — 1

end

Для выхода из цикла до его завершения можно использовать оператор break.

a = {3, 5, 8, -6, 5}

i = #a

while i > 0 do — ищем в массиве отрицательное значение

   if a[i] < 0 then break end — если найдено, прерываем цикл

   i = i — 1 — иначе переходим к следующему элементу

end

if i > 0 then

   MsgBox («Индекс отрицательного значения: »..i)

else

   MsgBox («Массив не содержит отрицательных значений»)

end

Примечание

Подробнее об особенностях использования оператора break — в статье «Операторы break и return»

Цикл с постусловием (repeat) в Lua

Оператор repeat предназначен для организации циклов с постусловием и имеет следующий вид:

repeat

   … — тело цикла

until <condition>

Тело цикла выполняется до тех пор, пока условие <condition> не станет истинным. Проверка условия осуществляется после выполнения тела цикла, поэтому в любом случае тело цикла выполнится хотя бы один раз.

— суммируем значения массива a, пока сумма не превысит 10

a = {3, 2, 5, 7, 9}

i = 0; sum = 0

repeat

   i = i + 1

   sum = sum + a[i]

until sum > 10

MsgBox («Сложено »..i..» элементов. Сумма равна «..sum)

Для выхода из цикла до его завершения можно использовать оператор break.

Примечание

Подробнее об особенностях использования оператора break — в статье «Операторы break и return»

Циклы с оператором for в Lua

Оператор for предназначен для организации циклов и допускает две формы записи:

простую (числовой for);

расширенную (универсальный for).

Простая форма оператора for

Простая форма оператора for имеет следующий вид:

for var = exp1, exp2, exp3 do

   … — тело цикла

end

Тело цикла выполняется для каждого значения переменной цикла (счётчика) var в интервале от exp1 до exp2, с шагом exp3.

Примечание

Шаг может не задаваться. В этом случае он принимается равным 1.

for i = 1, 10 do — цикл от 1 до 10 с шагом 1

MsgBox («i равно »..i)

end

for i = 10, 1, -1 do — цикл от 10 до 1 с шагом -1

   MsgBox («i равно »..i)

end

Обратите внимание

Выражения exp1, exp2 и exp3 вычисляются всего один раз, перед началом цикла. Так, в примере ниже, функция f(x) будет вызвана для вычисления верхнего предела цикла только один раз:

for i = 1, f(x) do — цикл от 1 до значения, возвращенного функцией f()

MsgBox («i равно »..i)

end

Переменная цикла является локальной для оператора цикла и по его окончании не определена.

for i = 1, 10 do — цикл от 1 до значения, возвращенного функцией f()

   MsgBox («i равно »..i)

end

MsgBox («После выхода из цикла i равно »..i) — Неверно! i равно nil

Обратите внимание

Значение переменной цикла нельзя изменять внутри цикла: последствия такого изменения непредсказуемы.

Для выхода из цикла до его завершения используется оператор break.

a = {3, 5, 8, -6, 5}

for i = 1,#a do — ищем в массиве отрицательное значение

   if a[i] < 0 then — если найдено…

      index = i — сохраняем индекс найденного значения…

      break — и прерываем цикл

   end

end

MsgBox («Индекс отрицательного значения: »..index)

Примечание

Подробнее об особенностях использования оператора break — в статье «Операторы break и return»    )

нужен.

Like this post? Please share to your friends:
  • Как написать лп чтобы она заплакала
  • Как написать лошадь маслом
  • Как написать лоу фай
  • Как написать лотос
  • Как написать лопух