Перейти к основному содержимому

mouse

Синтетический mouse input + чтение click-state. 5 канонических функций.

Функций5 (11 с алиасами)
Проверено вживую5 из 5
Требуемый eventнет
Сайд-эффектыClick, Press, Release, Scroll инжектят OS-level mouse-input который игра и OS видят как реальный

Алиасы. Click, Press, Release, Scroll имеют по две формы (PascalCase + lowercase). IsClicked имеет три формы. См. Обзор / Конвенция именования.

Курсорный запрос. В этой либе нет GetPos / SetPos. Используй utility.GetMousePos и utility.MoveMouse для координат курсора.

Идентификаторы кнопок, два разных registry

Чит делит mouse-button аргументы на две registry с разными принимаемыми значениями. Проверено вживую: передача неправильного идентификатора в неправильную функцию даёт чёткую ошибку.

IsClicked registry, read-only state-проба

ФормаЗаметки
"left", "LEFT", "Left"case-insensitive
"right"
"mouse4"side X1
"mouse5"side X2
0, 1, 2numeric, внутренний маппинг
"middle"❌ не поддерживается, используй VK код 4 через workaround
любая другая строка❌ raise "Unknown key or button name: '<lowercased>'"

Click / Press / Release registry, synthetic input

Эта API не принимает дружественные "left" / "right" строки несмотря на то что они в lookup-таблице. Принимает только:

ФормаМаппится вVerified
1VK_LBUTTON (left)
2VK_RBUTTON (right)
4VK_MBUTTON (middle)
5VK_XBUTTON1 (= "mouse4")
6VK_XBUTTON2 (= "mouse5")
"mouse4"side X1
"mouse5"side X2
"left" / "right""Invalid mouse button specified for Press" (или Click / Release в зависимости от вызова)
0, 3"Invalid mouse button specified for ..."
"middle", "lbutton", "LMB", "button1" и т.д."Unknown key or button name: '<lowercased>'"

Рекомендуемый паттерн: определи константы один раз и используй везде:

local MOUSE = {
LEFT = 1,
RIGHT = 2,
MIDDLE = 4,
X1 = 5,
X2 = 6,
}

mouse.Click(MOUSE.LEFT)
if mouse.IsClicked("left") then ... end

Краткий справочник

ФункцияСигнатураЗаметкаСтатус
Click(button: number | "mouse4" | "mouse5")press + release одним вызовом (synthetic)проверено
Press(button: number | "mouse4" | "mouse5")нажать, оставить удержаннойпроверено
Release(button: number | "mouse4" | "mouse5")отпустить ранее нажатуюпроверено
Scroll(amount: number)wheel scroll, положительное = вверхпроверено
IsClicked(button: string | number) → booltrue пока кнопка удерживаетсяпроверено

IsClicked

mouse.IsClicked(button: string | number) → bool

Возвращает true пока названная кнопка удерживается.

Проверено вживую с IsClicked registry выше.

cheat.Register("onUpdate", function()
if mouse.IsClicked("left") then

end
end)

Click

mouse.Click(button: number | "mouse4" | "mouse5", delay_ms?: number)

Синтезирует press-and-release названной кнопки. Опциональный delay_ms вставляет задержку между press и release (default ~0). Проверено вживую: mouse.Click(1) производит LMB-клик который downstream-приложения видят как реальный.

mouse.Click(1)
mouse.Click(2)
mouse.Click(4)
mouse.Click("mouse4")
mouse.Click(1, 50)
OS-level input

Этот вызов идёт через Windows synthetic-input API. Клик доставляется в фокусное окно, включая non-Roblox окна. Убедись что Roblox в фокусе или защищай через utility.GetMenuState.


Press / Release

mouse.Press(button: number | "mouse4" | "mouse5")
mouse.Release(button: number | "mouse4" | "mouse5")

Press удерживает кнопку, Release отпускает. Всегда парь их, иначе кнопка останется удержанной до следующего реального OS-event'а. Проверено вживую с Press(1) / Release(1), наблюдаемо через IsClicked("left") ставший true между двумя вызовами.


mouse.Press(2)

mouse.Release(2)

Scroll

mouse.Scroll(amount: number)

Синтетический wheel-scroll. Положительный amount обычно вверх, отрицательный вниз. Проверено вживую: Scroll(120), Scroll(-120), Scroll(0) все возвращают nil чисто. Magnitude следует OS wheel-delta конвенции (одна засечка обычно 120, но per-application interpretation варьируется).

mouse.Scroll(120)
mouse.Scroll(-360)
ВызовРезультат
Scroll()"bad argument #1 to '?' (number expected, got no value)"
Scroll(nil)"bad argument #1 to '?' (number expected, got nil)"
Scroll("s")"bad argument #1 to '?' (number expected, got string)"

Паттерны

Hold LMB пока цель в crosshair

local was_holding = false

cheat.Register("onUpdate", function()
local target = entity.GetTarget()
local should_hold = target ~= nil and target.IsAlive

if should_hold and not was_holding then
mouse.Press(1)
was_holding = true
elseif not should_hold and was_holding then
mouse.Release(1)
was_holding = false
end
end)

cheat.Register("shutdown", function()
if was_holding then mouse.Release(1) end
end)

Triggerbot с cooldown

local last_click = 0

cheat.Register("onUpdate", function()
local target = entity.GetTarget()
if not target or not target.IsAlive then return end

local now = utility.GetTickCount()
if now - last_click > 200 then
mouse.Click(1)
last_click = now
end
end)

Side-button hotkey через IsClicked

cheat.Register("onUpdate", function()
if mouse.IsClicked("mouse4") then

end
end)

Маппинг дружественных имён вручную

local MOUSE = { LEFT = 1, RIGHT = 2, MIDDLE = 4, X1 = 5, X2 = 6 }

local function click(name)
mouse.Click(MOUSE[name:upper()] or error("unknown: "..name))
end

click("left"); click("right"); click("middle")