Загрузка данных
-- КАК ПОЛЬЗОВАТЬСЯ
-- Нажатие №4 добавляет время работы помощи.
-- Пока время осталось, ЛКМ запускает компенсацию.
-- Каждая очередь начинает усиление заново.
-- Если время истекло во время очереди:
-- помощь продолжается до отпускания ЛКМ.
--
-- При отпущенной ЛКМ:
-- Shift + №4 = увеличить силу.
-- Ctrl + №4 = уменьшить силу.
-- Shift + Ctrl + №4 = вернуть исходную силу.
-- Эти сочетания время не добавляют.
-- ===== НАСТРОЙКИ =====
local sideButton = 5
local addSeconds = 5 -- Сколько секунд добавляет одно нажатие
local startStep = 3 -- Шаг вниз в начале очереди
local endStep = 9 -- Шаг вниз после усиления
local rampMs = 1200 -- Время усиления, мс
local delayMs = 7 -- Пауза между движениями, мс
local horizontalStep = 0 -- 0 = без сдвига; 1 = вправо
local smoothRamp = true -- Плавное усиление
local defaultPower = 100 -- Исходная сила, %
local powerStep = 5 -- Шаг изменения силы
local minPower = 50
local maxPower = 200
-- ===== ДАЛЬШЕ МЕНЯТЬ НЕ НУЖНО =====
local power = defaultPower
local activeUntil = 0
local sideWasDown = false
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
local function AddTime()
local now = GetRunningTime()
activeUntil = math.max(now, activeUntil)
+ math.max(addSeconds, 0) * 1000
OutputLogMessage(
"TIME LEFT: %.1f sec | POWER: %d%%\n",
(activeUntil - now) / 1000, power
)
end
local function CheckSide(isDown)
if isDown == nil then
isDown = IsMouseButtonPressed(sideButton)
end
if isDown and not sideWasDown then
if 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")
else
AddTime()
end
else
-- Во время стрельбы боковая добавляет время
AddTime()
end
end
sideWasDown = isDown
end
function OnEvent(event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
activeUntil = 0
sideWasDown = IsMouseButtonPressed(sideButton)
SetPower(defaultPower, "READY")
return
end
if event == "PROFILE_DEACTIVATED" then
activeUntil = 0
return
end
if event ~= "MOUSE_BUTTON_PRESSED"
and event ~= "MOUSE_BUTTON_RELEASED" then
return
end
if arg == sideButton then
CheckSide(event == "MOUSE_BUTTON_PRESSED")
end
if event ~= "MOUSE_BUTTON_PRESSED" then return end
if arg ~= 1 and arg ~= sideButton then return end
if not IsMouseButtonPressed(1) then return end
if GetRunningTime() >= activeUntil then return end
local startedAt = GetRunningTime()
local remainder = 0
-- Начатую очередь завершаем независимо от таймера
while IsMouseButtonPressed(1) do
CheckSide()
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
CheckSide()
if not IsMouseButtonPressed(1) then return end
Sleep(1)
until GetRunningTime() - pauseStarted >= math.max(delayMs, 1)
end
end