- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 537
- Реакции
- 14
Пока Ubisoft пытается в очередной раз «перебалансить» отдачу, старый добрый софт от Logitech продолжает стабильно работать. Если у тебя грызун G-серии, то этот Lua-скрипт — мастхэв для комфортного гейминга без лишнего потения над паттернами зажима.
Это не инжект, в память игры мы не лезем, работаем чисто на уровне софта мыши. Риск детекта минимален, но голову включать всё равно стоит — за мануалбан никто не впряжется.
Подготовка:
Управление и фичи:
Основной скрипт (Core Logic):
Полный список оффсетов для всех оперов уже забит внутри таблиц. Если чувствуете, что тянет не туда — просто поправьте значения под свой стиль. Скрипт подхватывает изменения на лету после сохранения.
Тестируйте на полигоне перед тем, как идти в ранкед, и делитесь своими значениями оффсетов под кастомный DPI.
Это не инжект, в память игры мы не лезем, работаем чисто на уровне софта мыши. Риск детекта минимален, но голову включать всё равно стоит — за мануалбан никто не впряжется.
Подготовка:
- Нужна любая мышь Logitech G-серии с поддержкой встроенной памяти или LUA.
- Ставим официальный Logitech G HUB.
- В G HUB выбираем профиль -> Управление профилями -> Иконка Scripting -> Создать новый скрипт.
- Вставляем код из спойлера ниже и жмем Ctrl + S.
- Ставим профиль как перманентный (Persistent), чтобы настройки не слетали при альт-табе.
Для идеальной работы скрипта выставляйте следующие параметры:
Windows:
Скорость указателя: 6/11 (дефолт)
Повышенная точность: Выкл (обязательно)
G HUB:
DPI: 800
In-game Settings:
Разрешение: 1920x1080
Соотношение сторон: 4:3
FOV: 89
Чувствительность: Horizontal — 5, Vertical — 5
ADS Sensitivity: 1x — 42, 2.5x — 57, 3.5x — 65, 5.0x — 75, 12.0x — 60
Windows:
Скорость указателя: 6/11 (дефолт)
Повышенная точность: Выкл (обязательно)
G HUB:
DPI: 800
In-game Settings:
Разрешение: 1920x1080
Соотношение сторон: 4:3
FOV: 89
Чувствительность: Horizontal — 5, Vertical — 5
ADS Sensitivity: 1x — 42, 2.5x — 57, 3.5x — 65, 5.0x — 75, 12.0x — 60
Управление и фичи:
- Разверните консоль в редакторе скриптов до упора вверх, чтобы видеть текущий статус пресета.
- Смена оперативника: Ctrl + MMB (средняя кнопка мыши).
- Переключение между атакой и защитой: Scroll Lock.
- Активация компенсации: Зажатие ПКМ + ЛКМ (стрельба в прицеле).
Основной скрипт (Core Logic):
Код:
attackers = {
"Ace","Amaru","Ash","Blackbeard","Brava","Buck","Capitao","Deimos",
"Dokkaebi","Finka","Flores","Fuze","Glaz","Gridlock","Grim","Hibana",
"Iana","IQ","Jackal","Kali","Lion","Maverick","Nokk","Nomad","Osa",
"Rauora","Ram","Sens","Sledge","Solid Snake","Striker","Thatcher","Thermite","Twitch","Ying",
"Zero","Zofia"
}
defenders = {
"Alibi","Aruni","Azami","Bandit","Castle","Caveira","Clash","Denari",
"Doc","Echo","Ela","Fenrir","Frost","Goyo","Jager","Kaid","Kapkan",
"Lesion","Maestro","Melusi","Mira","Mozzie","Mute","Oryx","Pulse",
"Rook","Sentry","Skopos","Solis","Smoke","Tachanka","Thorn","Thunderbird",
"Tubarao","Valkyrie","Vigil","Wamai","Warden"
}
attacker_index = 1 -- Ace
defender_index = 1 -- Alibi
recoil = {}
recoil["Ace"] = {0, 46, 80, -1, 38, 600, -1, 40, 520, -1, 44, 900}
recoil["Alibi"] = {0, 32, 60, 1, 22, 600, 2, 25, 200, 2, 25, 300, 2, 25, 680}
recoil["Aruni"] = {-1, 23, 50}
recoil["Amaru"] = {0, 36, 150, -1, 32, 400, -1, 35, 700, -1, 35, 300, -1, 36, 150, -2, 37, 400, -2, 37, 550, -2, 37, 300, -1, 40, 250, -1, 41, 250}
recoil["Ash"] = {-1, 45, 50, -1, 43, 600, -1, 46, 1100}
recoil["Azami"] = {-1, 37, 60}
recoil["Bandit"] = {0, 18, 70, 0, 17, 800, 0, 19, 300, 0, 20, 500, -2, 19, 300}
recoil["Blackbeard"] = {0, 20, 150, 2, 15, 250, 3, 16, 650, 1, 17, 900}
recoil["Brava"] = {0, 28, 150, -1, 26, 400, 0, 29, 1000, -1, 32, 900, 0, 36, 300}
recoil["Buck"] = {0, 41, 150, 0, 30, 650, 0, 33, 650, -2, 36, 400, -1, 37, 300}
recoil["Capitao"] = {0, 28, 150, -1, 26, 400, 0, 29, 1000, -1, 32, 900, 0, 36, 300}
recoil["Castle"] = {0, 21, 30, 0, 10, 250, 0, 11, 700, -1, 11, 900, 0, 11, 700}
recoil["Caveira"] = {0, 10, 1000, -1, 9, 900, 0, 10, 600, 0, 9, 400, -1, 11, 400}
recoil["Clash"] = {0, 16, 1000, 0, 13, 400}
recoil["Deimos"] = {0, 43, 70, -1, 21, 1200, -1, 24, 700, -1, 25, 1000, -1, 27, 750}
recoil["Denari"] = {0, 36, 60, 2, 20, 400, 2, 29, 400, 3, 30, 500, 2, 31, 500, 2, 30, 300}
recoil["Doc"] = {0, 24, 30, 0, 16, 600, 0, 18, 300, 1, 19, 500, 0, 19, 1600}
recoil["Dokkaebi"] = {-1, 23, 50}
recoil["Echo"] = {0, 26, 30, -1, 16, 600, 0, 18, 300, -1, 19, 1250}
recoil["Ela"] = {0, 36, 60, 2, 20, 400, 2, 29, 400, 3, 30, 500, 2, 31, 500, 2, 30, 300}
recoil["Fenrir"] = {0, 18, 70, 0, 17, 800, 0, 19, 300, 0, 20, 500, -2, 19, 300}
recoil["Finka"] = {0, 48, 50, -1, 39, 400, -1, 42, 500, 0, 43, 500, -1, 44, 500, 0, 46, 500}
recoil["Flores"] = {0, 38, 80, -1, 26, 350, 0, 28, 300, -1, 30, 200, -1, 32, 1000}
recoil["Frost"] = {0, 18, 30, 0, 11, 600, 0, 11, 1100, 1, 11, 500, 0, 12, 1300}
recoil["Fuze"] = {0, 46, 80, -1, 38, 600, -1, 40, 520, -1, 44, 900}
recoil["Glaz"] = {0, 34, 60, 0, 28, 500, -1, 27, 800}
recoil["Goyo"] = {0, 27, 60, 1, 25, 250, 1, 25, 300, 1, 28, 600}
recoil["Gridlock"] = {0, 42, 50, -1, 31, 400, -1, 33, 500, -1, 36, 500, 0, 37, 500, 0, 38, 300}
recoil["Grim"] = {0, 37, 110, 0, 27, 500, -1, 29, 500, -1, 31, 850, 0, 32, 600}
recoil["Hibana"] = {0, 42, 40, -1, 35, 600, -1, 36, 300, -2, 37, 500}
recoil["Iana"] = {0, 45, 60, -1, 28, 700, -1, 29, 400, -1, 32, 500}
recoil["IQ"] = {0, 37, 110, 0, 27, 500, -1, 29, 500, -1, 31, 850, 0, 32, 600}
recoil["Jager"] = {0, 25, 60, -1, 21, 300, -1, 22, 1000, 0, 22, 600}
recoil["Jackal"] = {0, 44, 70, 0, 41, 500, -1, 42, 600, -1, 46, 500, -1, 48, 500}
recoil["Kaid"] = {0, 23, 60, 1, 15, 300, 1, 16, 800, 0, 17, 700, 0, 18, 700}
recoil["Kali"] = {0, 16, 1000, 0, 13, 400}
recoil["Kapkan"] = {0, 30, 10, 0, 19, 650, -1, 20, 800, 0, 21, 400, -1, 22, 500}
recoil["Lesion"] = {0, 22, 50, 0, 21, 500, -1, 22, 300, 0, 23, 300, -1, 24, 100, 1, 23, 800}
recoil["Lion"] = {0, 43, 60, 0, 24, 300, 0, 28, 1700, 0, 33, 2150}
recoil["Maestro"] = {0, 32, 20, 0, 17, 500, 0, 20, 500, 0, 21, 500, -1, 21, 600, 0, 21, 600, 0, 23, 2500}
recoil["Maverick"] = {0, 52, 50, -1, 34, 500, -1, 35, 500, -1, 38, 500, -1, 40, 700}
recoil["Melusi"] = {0, 24, 40, 0, 18, 600, -1, 20, 900, -1, 21, 700}
recoil["Mira"] = {0, 27, 60, 1, 25, 250, 1, 25, 300, 1, 28, 600}
recoil["Mozzie"] = {0, 26, 50, 0, 15, 300, -1, 16, 300, 0, 18, 400, 0, 18, 400, 0, 18, 400}
recoil["Mute"] = {0, 39, 60, 0, 32, 650}
recoil["Nokk"] = {0, 22, 40, 1, 16, 200, 0, 17, 800, 1, 19, 1200}
recoil["Nomad"] = {0, 45, 60, -1, 28, 700, -1, 29, 400, -1, 32, 500}
recoil["Oryx"] = {0, 22, 50, 0, 21, 500, -1, 22, 300, 0, 23, 300, -1, 24, 100, 1, 23, 800}
recoil["Osa"] = {0, 28, 80, 2, 24, 600, 2, 25, 300, 3, 26, 1600}
recoil["Pulse"] = {0, 21, 30, 0, 10, 250, 0, 11, 700, -1, 11, 900, 0, 11, 700}
recoil["Rauora"] = {0, 25, 50, -1, 22, 1500, -1, 28, 800, -1, 27, 2300, -1, 29, 4600}
recoil["Ram"] = {-1, 45, 50, -1, 43, 600, -1, 46, 1100}
recoil["Rook"] = {0, 24, 30, 0, 16, 600, 0, 18, 300, 1, 19, 500, 0, 19, 1600}
recoil["Sens"] = {1, 48, 40, 0, 30, 400, 0, 31, 1600, -1, 33, 300, -1, 33, 800, -1, 33, 800}
recoil["Sentry"] = {0, 26, 50, 0, 15, 300, -1, 16, 300, 0, 18, 400, 0, 18, 400, 0, 18, 400}
recoil["Skopos"] = {0, 18, 50, 0, 16, 500, -1, 16, 500, 0, 16, 500, -1, 17, 700}
recoil["Sledge"] = {0, 38, 60, 1, 24, 450, 2, 26, 300, 2, 27, 1500, 2, 29, 300}
recoil["Smoke"] = {0, 39, 60, 0, 32, 650}
recoil["Solid Snake"] = {0, 55, 80, -1, 52, 600, 0, 53, 200, -1, 54, 650}
recoil["Solis"] = {0, 39, 60, 0, 32, 650}
recoil["Striker"] = {0, 52, 50, -1, 34, 500, -1, 35, 500, -1, 38, 500, -1, 40, 700}
recoil["Tachanka"] = {0, 14, 50, 1, 8, 2900, 2, 8, 4600}
recoil["Thatcher"] = {0, 38, 60, 1, 24, 450, 2, 26, 300, 2, 27, 1500, 2, 29, 300}
recoil["Thermite"] = {0, 28, 80, 2, 24, 600, 2, 25, 300, 3, 26, 1600}
recoil["Thorn"] = {0, 23, 50, 0, 18, 500, 1, 19, 500, 1, 21, 500, 0, 21, 300}
recoil["Thunderbird"] = {0, 25, 30, -1, 22, 250, 0, 22, 250, -1, 23, 500, 0, 24, 500, -1, 24, 500, 0, 25, 400}
recoil["Tubarao"] = {0, 25, 60}
recoil["Twitch"] = {0, 55, 80, -1, 52, 600, 0, 53, 200, -1, 54, 650}
recoil["Valkyrie"] = {0, 24, 20, 0, 17, 500, 0, 18, 500, 0, 18, 500, -1, 19, 500}
recoil["Vigil"] = {0, 22, 30, 0, 19, 300, -1, 20, 500, -1, 21, 1700}
recoil["Wamai"] = {0, 23, 40, 0, 18, 500, 1, 19, 500, 1, 20, 500, 0, 19, 500, 0, 22, 400}
recoil["Warden"] = {0, 24, 20, 0, 17, 500, 0, 18, 500, 0, 18, 500, -1, 19, 500}
recoil["Ying"] = {0, 38, 60, -1, 29, 300, -1, 30, 450, 0, 32, 1800, 2, 36, 4700}
recoil["Zero"] = {0, 51, 40, -1, 40, 200, -1, 42, 700, -1, 45, 350, 0, 47, 500}
recoil["Zofia"] = {0, 56, 50, 1, 36, 600, 1, 37, 500, -1, 40, 600, 0, 42, 600}
weaponInfo = {}
weaponInfo["Ace"] = "AK-12 (2.5x, compensator, angled grip)"
weaponInfo["Alibi"] = "Mx4 Storm (x1, compensator, angled grip)"
weaponInfo["Aruni"] = "Mk 14 EBR (2.5x, muzzle brake, angled grip)"
weaponInfo["Amaru"] = "G8A1 (2.5x, compensator, angled grip)"
weaponInfo["Ash"] = "R4-C (2.5x, compensator, angled grip)"
weaponInfo["Azami"] = "ACS12 (2.5x, angled grip)"
weaponInfo["Bandit"] = "MP7 (x1, compensator)"
weaponInfo["Blackbeard"] = "MK17 CQB (2.5x, compensator, angled grip)"
weaponInfo["Brava"] = "PARA-308 (2.5x, compensator, angled grip)"
weaponInfo["Buck"] = "C8SFW (2.5x, compensator)"
weaponInfo["Capitao"] = "PARA-308 (2.5x, compensator, angled grip)"
weaponInfo["Castle"] = "UMP45 (x1, compensator, angled grip)"
weaponInfo["Caveira"] = "M12 (x1, compensator)"
weaponInfo["Clash"] = "SPSMG9 (x1, compensator)"
weaponInfo["Deimos"] = "AK-74M (2.5x, compensator, angled grip)"
weaponInfo["Denari"] = "SCORPION EVO 3 A1 (x1, compensator, angled grip)"
weaponInfo["Doc"] = "P90 (x1, compensator)"
weaponInfo["Dokkaebi"] = "Mk 14 EBR (2.5x, muzzle brake, angled grip)"
weaponInfo["Echo"] = "MP5SD (x1, angled grip)"
weaponInfo["Ela"] = "SCORPION EVO 3 A1 (x1, compensator, angled grip)"
weaponInfo["Fenrir"] = "MP7 (x1, compensator)"
weaponInfo["Finka"] = "SPEAR .308 (2.5x, compensator, angled grip)"
weaponInfo["Flores"] = "AR33 (2.5x, compensator, angled grip)"
weaponInfo["Frost"] = "9mm C1 (x1, compensator, angled grip)"
weaponInfo["Fuze"] = "AK-12 (2.5x, compensator, angled grip)"
weaponInfo["Glaz"] = "BEARING 9 (x1, compensator)"
weaponInfo["Goyo"] = "VECTOR .45 ACP (x1, compensator, angled grip)"
weaponInfo["Gridlock"] = "F90 (2.5x, compensator, angled grip)"
weaponInfo["Grim"] = "552 COMMANDO (2.5x, compensator, angled grip)"
weaponInfo["Hibana"] = "TYPE-89 (2.5x, compensator, angled grip)"
weaponInfo["Iana"] = "ARX200 (2.5x, compensator, angled grip)"
weaponInfo["IQ"] = "552 COMMANDO (2.5x, compensator, angled grip)"
weaponInfo["Jager"] = "416-C CARBINE (x1, compensator, angled grip)"
weaponInfo["Jackal"] = "C7E (2.5x, compensator, angled grip)"
weaponInfo["Kaid"] = "AUG A3 (x1, compensator, angled grip)"
weaponInfo["Kali"] = "SPSMG9 (x1, compensator)"
weaponInfo["Kapkan"] = "9x19VSN (x1, compensator, angled grip)"
weaponInfo["Lesion"] = "T-5 SMG (x1, compensator, angled grip)"
weaponInfo["Lion"] = "V308 (2.5x, compensator, angled grip)"
weaponInfo["Maestro"] = "ALDA 5.56 (x1, compensator, vertical grip)"
weaponInfo["Maverick"] = "M4 (2.5x, compensator, angled grip)"
weaponInfo["Melusi"] = "MP5 (x1, compensator, angled grip)"
weaponInfo["Mira"] = "VECTOR .45 ACP (x1, compensator, angled grip)"
weaponInfo["Mozzie"] = "COMMANDO 9 (x1, compensator, angled grip)"
weaponInfo["Mute"] = "SMG-11 (x1, compensator, angled grip)"
weaponInfo["Nokk"] = "FMG-9 (x1, compensator)"
weaponInfo["Nomad"] = "ARX200 (2.5x, compensator, angled grip)"
weaponInfo["Oryx"] = "T-5 SMG (x1, compensator, angled grip)"
weaponInfo["Osa"] = "556Xl (2.5x, compensator, angled grip)"
weaponInfo["Pulse"] = "UMP45 (x1, compensator, angled grip)"
weaponInfo["Rauora"] = "M249 (2.5x, compensator, angled grip)"
weaponInfo["Ram"] = "R4-C (2.5x, compensator, angled grip)"
weaponInfo["Rook"] = "P90 (x1, compensator)"
weaponInfo["Sens"] = "POF-9 (2.5x, compensator, angled grip)"
weaponInfo["Sentry"] = "COMMANDO 9 (x1, compensator, angled grip)"
weaponInfo["Skopos"] = "PCX-33 (x1, compensator, angled grip)"
weaponInfo["Sledge"] = "L85A2 (2.5x, compensator, angled grip)"
weaponInfo["Smoke"] = "SMG-11 (x1, compensator, angled grip)"
weaponInfo["Solid Snake"] = "F2 (2.5x, compensator, angled grip)"
weaponInfo["Solis"] = "SMG-11 (x1, compensator, angled grip)"
weaponInfo["Striker"] = "M4 (2.5x, compensator, angled grip)"
weaponInfo["Tachanka"] = "DP27 (1x)"
weaponInfo["Thatcher"] = "L85A2 (2.5x, compensator, angled grip)"
weaponInfo["Thermite"] = "556Xl (2.5x, compensator, angled grip)"
weaponInfo["Thorn"] = "UZK50Gl (x1, compensator, angled grip)"
weaponInfo["Thunderbird"] = "SPEAR .308 (1x, compensator, angled grip)"
weaponInfo["Tubarao"] = "AR-15.50 (2.5x, muzzle brake, angled grip)"
weaponInfo["Twitch"] = "F2 (2.5x, compensator, angled grip)"
weaponInfo["Valkyrie"] = "MPX (1x, compensator, angled grip)"
weaponInfo["Vigil"] = "K1A (1x, compensator, angled grip)"
weaponInfo["Wamai"] = "AUG A2 (1x, compensator)"
weaponInfo["Warden"] = "MPX (1x, compensator, angled grip)"
weaponInfo["Ying"] = "T-95 LSW (2.5x, compensator, angled grip)"
weaponInfo["Zero"] = "SC3000K (2.5x, compensator, angled grip)"
weaponInfo["Zofia"] = "M762 (2.5x, compensator, angled grip)"
function getCurrentOperator()
if IsKeyLockOn("scrolllock") then
return defenders[defender_index]
else
return attackers[attacker_index]
end
end
function nextOperator()
if IsKeyLockOn("scrolllock") then
defender_index = defender_index + 1
if defender_index > #defenders then
defender_index = 1
end
else
attacker_index = attacker_index + 1
if attacker_index > #attackers then
attacker_index = 1
end
end
end
function drawGrid(list, selected, columns)
local PADDING = 2
local maxLen = 0
for i = 1, #list do
local len = string.len(list[i])
if len > maxLen then
maxLen = len
end
end
local CELL_WIDTH = maxLen + PADDING * 2
local function centerText(text, width)
local len = string.len(text)
if len >= width then
return text
end
local left = math.floor((width - len) / 2)
local right = width - len - left
return string.rep(" ", left)
.. text
.. string.rep(" ", right)
end
local result = ""
local rows = math.ceil(#list / columns)
result = result ..
"+" ..
string.rep("-", CELL_WIDTH * columns + columns - 1) ..
"+\n"
for r = 1, rows do
result = result .. "|"
for c = 1, columns do
local i = r + (c-1)*rows
local name = list[i]
if name then
if name == selected then
local label =
"> "
.. string.upper(name)
.. " <"
result =
result
.. centerText(label, CELL_WIDTH)
else
result =
result
.. centerText(name, CELL_WIDTH)
end
else
result =
result
.. string.rep(" ", CELL_WIDTH)
end
if c < columns then
result = result .. "|"
end
end
result = result .. "|\n"
end
result = result ..
"+" ..
string.rep("-", CELL_WIDTH * columns + columns - 1) ..
"+\n"
return result
end
function Log()
ClearLog()
local op = getCurrentOperator()
local gun = weaponInfo[op] or "unknown"
if IsKeyLockOn("scrolllock") then
OutputLogMessage(" MODE: > > > DEFENDERS < < <\n\n")
else
OutputLogMessage(" MODE: > > > ATTACKERS < < <\n\n")
end
OutputLogMessage(
"SELECTED OPERATOR: ► ► ► %s\nSELECTED WEAPON: ► ► ► %s\n\n",
op,
gun
)
if IsKeyLockOn("scrolllock") then
OutputLogMessage(drawGrid(defenders, op, 4))
else
OutputLogMessage(drawGrid(attackers, op, 4))
end
end
function applyRecoil(pattern)
for i=3,#pattern,3 do
local start = GetRunningTime()
local x = pattern[i-2]
local y = pattern[i-1]
local duration = pattern[i]
repeat
MoveMouseRelative(x,y)
Sleep(10)
until GetRunningTime() - start >= duration
or not IsMouseButtonPressed(1)
or not IsMouseButtonPressed(3)
end
end
function OnEvent(event,arg)
EnablePrimaryMouseButtonEvents(true)
if event == "PROFILE_ACTIVATED" then
Log()
end
if event == "MOUSE_BUTTON_PRESSED"
and arg == 3
and IsModifierPressed("lctrl") then
nextOperator()
Log()
end
if event == "MOUSE_BUTTON_PRESSED"
and arg == 1
and IsMouseButtonPressed(3) then
local op = getCurrentOperator()
local pattern = recoil[op]
if pattern then
applyRecoil(pattern)
end
end
end
Полный список оффсетов для всех оперов уже забит внутри таблиц. Если чувствуете, что тянет не туда — просто поправьте значения под свой стиль. Скрипт подхватывает изменения на лету после сохранения.
Тестируйте на полигоне перед тем, как идти в ранкед, и делитесь своими значениями оффсетов под кастомный DPI.