-- Твои основные настройки
local startStep = 4
local endStep = 9
local rampMs = 1000
local delayMs = 6
-- Сила при каждом запуске профиля
local defaultPower = 100
-- Управление
local toggleButton = 4
local powerStep = 5
local minPower = 50
local maxPower = 200
-- Служебные переменные
local enabled = false
local power = defaultPower
local sideWasDown = false
local function ClampPower(value)
return math.max(minPower, math.min(maxPower, value))
end
local function ShowStatus()
local state = enabled and "ON" or "OFF"
OutputLogMessage("%s | POWER: %d%%\n", state, power)
end
local function CheckControls()
local sideIsDown = IsMouseButtonPressed(toggleButton)
-- Одно действие на одно нажатие
if sideIsDown and not sideWasDown then
local shift = IsModifierPressed("shift")
local ctrl = IsModifierPressed("ctrl")
if shift and ctrl then
-- При одновременном Shift + Ctrl ничего не меняем.
elseif shift then
power = ClampPower(power + powerStep)
ShowStatus()
elseif ctrl then
power = ClampPower(power - powerStep)
ShowStatus()
else
enabled = not enabled
ShowStatus()
end
end
sideWasDown = sideIsDown
end
function OnEvent(event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
enabled = false
power = ClampPower(defaultPower)
sideWasDown = IsMouseButtonPressed(toggleButton)
ShowStatus()
return
end
if event == "PROFILE_DEACTIVATED" then
enabled = false
return
end
if event ~= "MOUSE_BUTTON_PRESSED"
and event ~= "MOUSE_BUTTON_RELEASED" then
return
end
CheckControls()
if not enabled or not IsMouseButtonPressed(1) then
return
end
local startedAt = GetRunningTime()
local remainder = 0
while IsMouseButtonPressed(1) do
-- Кнопка работает и во время удержания ЛКМ
CheckControls()
if not enabled then
break
end
local elapsed = GetRunningTime() - startedAt
local progress = math.min(
elapsed / math.max(rampMs, 1), 1
)
-- Исходное усиление от startStep до endStep
local baseStep = math.floor(
startStep + (endStep - startStep) * progress
)
-- Применяем проценты и сохраняем дробный остаток
local movement = baseStep * power / 100 + remainder
local wholeStep = math.floor(movement)
remainder = movement - wholeStep
if wholeStep ~= 0 then
MoveMouseRelative(1, wholeStep)
end
Sleep(math.max(delayMs, 1))
end
end