LUA скрипт [NIXWARE] Проверка состояния игрока: in slow walking, in air, standing, running, crouching(standing), crouching(moving), crouching(in air)

На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,454
Реакции[?]
434
Поинты[?]
36K
RU:
Вот скрипт, позволяющий вычислить состояние игрока [in slow walking, in air, standing, running, crouching(standing), crouching(moving), crouching(in air)].
Постарался максимально возможно всё прокомментировать, что бы всем всё было понятно.
ENG:
Here is a script, than calculate the state of the player [in slow walking, in air, standing, running, crouching(standing), crouching(moving), crouching(in air)].
I tried to comment on everything as much as possible(in russian, use translator) so that everyone would understand everything.

code_language.lua:
local slowWalkActive = ui.get_key_bind("antihit_extra_slowwalk_bind")
local fontLogo = renderer.setup_font("C:/windows/fonts/verdanab.ttf", 30, 0)
local positionDetected = "standing"
local screen = engine.get_screen_size()
local localPlayer = entitylist.get_local_player()

local function indicators()
    if engine.is_connected() then            -- Проверяем подключены ли мы к серверу, иначе смысла от выполнения кода не будет
        m_vecVelocity = {
            [0] = se.get_netvar("DT_BasePlayer", "m_vecVelocity[0]"),
            [1] = se.get_netvar("DT_BasePlayer", "m_vecVelocity[1]")
        }
        velocity = math.sqrt(localPlayer:get_prop_float(m_vecVelocity[0]) ^ 2 + localPlayer:get_prop_float(m_vecVelocity[1]) ^ 2)    -- Вычисляем скорость игрока
        m_hGroundEntity = localPlayer:get_prop_int(se.get_netvar("DT_BasePlayer", "m_hGroundEntity"))        -- Через нетвар "DT_BasePlayer", и его оффсет "m_hGroundEntity" вычисляем, на земле ли персонаж
        m_bDucked = localPlayer:get_prop_int(se.get_netvar("DT_BasePlayer", "m_bDucked"))                    -- Через нетвар "DT_BasePlayer", и его оффсет "m_bDucked" вычисляем, находится ли персонаж в состоянии присяда. Важно заметить, что если персонаж будет находится не на земле, но с зажатым контролом, оффсет будет выдавать что персонаж не находится в состоянии присяда, эта информация нам позже пригодится
        if slowWalkActive:is_active() and m_hGroundEntity ~= -1 and m_bDucked == 0 and math.floor(velocity) > 1 then    -- Проверяем, идёт ли игрок на слоуволке
            positionDetected = "in slow walking"      -- Если да, то записываем это в переменную "positionDetected", в которой в конечном итоге будет храниться информация о состоянии игрока
        else
            if  m_hGroundEntity == -1 then            -- Если персонаж не на земле, то...
                if client.is_key_pressed(162) then            -- Тут происходит проверка на нахождение персонажа в воздухе в состоянии присяда, но как я говорил ранее, оффсет "m_bDucked" сделать такую проверку не позволит, так что воспользуемcя "кастылём" и делаем проверку на зажатую клавишу "ctrl"
                    positionDetected = "crouching(in air)"    -- Если да - вписываем информацию об этом в переменную
                else
                    positionDetected = "in air"               -- А если контрол не нажат, значит персонаж просто находится в воздухе, записываем это в переменную
                end
            elseif m_bDucked == 0 and math.floor(velocity) > 1 and m_hGroundEntity ~= -1 and not slowWalkActive:is_active() then     -- Тут происходит проверка на то, бежит ли игрок
                positionDetected = "running"       -- Если та - записываем в переменную
            else
                if m_bDucked == 1 and math.floor(velocity) <= 1 then     -- Если нет, то остаётся три варианта: Персонаж находится в состоянии присяда и НЕ двигается[crouching(standing)], персонаж находится в состоянии приcяда и двигается[crouching(moving)] или персонаж просто стоит[standing]
                    positionDetected = "crouching(standing)"
                elseif m_bDucked == 1 then
                    positionDetected = "crouching(moving)"
                else
                    positionDetected = "standing"
                end
            end
        end
    end
    renderer.text(positionDetected, fontLogo, vec2_t.new(screen.x / 2, screen.y / 2 + 20), 14, color_t.new(252, 199, 248, 255))   -- Выводим информацию о состоянии игрока на экран
end

client.register_callback("paint", indicators)
В основном это написано для начинающих недо-пастерков как я, которые даже не знают что такое нетвары..
 
Забаненный
Статус
Оффлайн
Регистрация
23 Авг 2020
Сообщения
2,110
Реакции[?]
597
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кредиты бы указал на linius .
 
На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,454
Реакции[?]
434
Поинты[?]
36K
Забаненный
Статус
Оффлайн
Регистрация
23 Авг 2020
Сообщения
2,110
Реакции[?]
597
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
26 Сен 2019
Сообщения
35
Реакции[?]
15
Поинты[?]
1K
для аиров пропер будет

bit.band(EntityList.GetLocalPlayer():GetProp("m_fFlags"), 1) == 0
 
Забаненный
Статус
Оффлайн
Регистрация
23 Авг 2020
Сообщения
2,110
Реакции[?]
597
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Олдфаг
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
2,585
Реакции[?]
1,437
Поинты[?]
1K
эти elseif ужас ебаный

Уж лучше так
Пример* работать не будет
Код:
get_player_state = function()
    if not me:IsAlive() then
        return "Dead"
    end

    if is_in_air then
        return "In Air"
    end

    if in_slowwalking then
        return "Slow Walking"
    end

    return "Standing"
end
 
Последнее редактирование:
На ваш бан.
Эксперт
Статус
Оффлайн
Регистрация
7 Дек 2020
Сообщения
1,454
Реакции[?]
434
Поинты[?]
36K
эти elseif ужас ебаный

Уж лучше так
Пример* работать не будет
Код:
get_player_state = function()
    if not me:IsAlive() then
        return "Dead"
    end

    if is_in_air then
        return "In Air"
    end

    if in_slowwalking then
        return "Slow Walking"
    end

    return "Standing"
end
и зачем так?
 
life is cheap, death is free!
Эксперт
Статус
Оффлайн
Регистрация
9 Дек 2019
Сообщения
1,603
Реакции[?]
517
Поинты[?]
2K
Вызывайте скорую, у меня инфаркт, сука не лучший исход на ДР

Какой же код ужас, если будет время, скину норм Код, а то братан, на это больно смотреть
 
Забаненный
Статус
Оффлайн
Регистрация
23 Авг 2020
Сообщения
2,110
Реакции[?]
597
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Олдфаг
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
2,585
Реакции[?]
1,437
Поинты[?]
1K
Сверху Снизу