Загрузка данных


-- КАК ПОЛЬЗОВАТЬСЯ
-- №4 + ЛКМ: запустить помощь на текущую очередь.
-- После запуска боковую можно отпустить.
-- Отпустил ЛКМ: помощь остановилась, усиление сбросилось.
-- Одна ЛКМ без запуска боковой: обычная стрельба.
--
-- При отпущенной ЛКМ:
-- Shift + №4        = увеличить силу.
-- Ctrl + №4         = уменьшить силу.
-- Shift + Ctrl + №4 = вернуть исходную силу.

-- ===== НАСТРОЙКИ =====

local holdButton = 4      -- Боковая кнопка запуска

local startStep = 4       -- Шаг вниз в начале помощи
local endStep = 9         -- Шаг вниз после усиления
local rampMs = 1000       -- Время усиления: 1000 мс = 1 секунда
local delayMs = 6         -- Пауза между движениями
local horizontalStep = 1  -- 0 = без сдвига; 1 = вправо; -1 = влево
local smoothRamp = true   -- true = плавно; false = ступеньками

local defaultPower = 100  -- Исходная сила в процентах
local powerStep = 5       -- Шаг изменения силы
local minPower = 50       -- Минимальная сила
local maxPower = 200      -- Максимальная сила

-- Проценты меняют только движение вниз.
-- При активации профиля сила возвращается к defaultPower.

-- ===== ДАЛЬШЕ МЕНЯТЬ НЕ НУЖНО =====

local power = defaultPower

local function SetPower(value, label)
    power = math.max(minPower, math.min(maxPower, value))
    OutputLogMessage(
        "%s | POWER: %d%% | START: %.2f | END: %.2f\n",
        label, power,
        startStep * power / 100,
        endStep * power / 100
    )
end

function OnEvent(event, arg)
    if event == "PROFILE_ACTIVATED" then
        EnablePrimaryMouseButtonEvents(true)
        SetPower(defaultPower, "READY")
        return
    end

    if event ~= "MOUSE_BUTTON_PRESSED" then return end
    if arg ~= 1 and arg ~= holdButton then return end

    -- Регулировка силы при отпущенной ЛКМ
    if arg == holdButton and not IsMouseButtonPressed(1) then
        local shift = IsModifierPressed("shift")
        local ctrl = IsModifierPressed("ctrl")

        if shift and ctrl then
            SetPower(defaultPower, "RESET")
        elseif shift then
            SetPower(power + powerStep, "UP")
        elseif ctrl then
            SetPower(power - powerStep, "DOWN")
        end
        return
    end

    -- Для запуска нужны обе кнопки одновременно
    if not IsMouseButtonPressed(1)
        or not IsMouseButtonPressed(holdButton) then
        return
    end

    -- Усиление начинается именно с момента запуска помощи
    local startedAt = GetRunningTime()
    local remainder = 0

    -- После запуска проверяем только ЛКМ:
    -- боковую теперь можно отпустить
    while IsMouseButtonPressed(1) do
        local progress = math.min(
            (GetRunningTime() - startedAt) / math.max(rampMs, 1), 1
        )

        local step = startStep + (endStep - startStep) * progress
        if not smoothRamp then step = math.floor(step) end

        local movement = step * power / 100 + remainder
        local wholeStep = math.floor(movement)
        remainder = movement - wholeStep

        MoveMouseRelative(horizontalStep, wholeStep)

        -- Проверяем отпускание ЛКМ во время паузы
        local pauseStarted = GetRunningTime()
        repeat
            if not IsMouseButtonPressed(1) then return end
            Sleep(1)
        until GetRunningTime() - pauseStarted >= math.max(delayMs, 1)
    end
end