Ну короче, вот тебе рабочий анти-чит для Роблокса. Я постарался объяснить всё максимально просто, чтобы даже если ты не супер разбираешься в скриптах, смог это настроить.
Что делает этот анти-чит?
Он следит за игроками и, если кто-то юзает читы, сначала кикает, а потом, если нарушений будет много, банит навсегда. Вот что он проверяет:
Телепорты – если игрок резко переместился слишком далеко.
Скорость – если бежит быстрее, чем должно быть.
Высота прыжка – если прыгнул выше нормы.
Резкие повороты камеры – если дергает камерой слишком сильно, как будто чит наводит прицел.
Аим-бот на монстра – если подозрительно долго и точно смотрит на голову монстра.
Штрафы – за первое нарушение кик, за 5 нарушений бан навсегда.
Что нужно сделать?
Открываешь Studio.
В Explorer находишь ServerScriptService (если нет – нажми View → Explorer).
Создаёшь новый Script (правой кнопкой Insert Object → Script).
Вставляешь туда вот этот код:
lua
Копируй
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local BanDataStore = DataStoreService:GetDataStore("BanList")
-- Настройки анти-чита
local MAX_TELEPORT_DISTANCE = 50
local MAX_WALK_SPEED = 16
local MAX_JUMP_HEIGHT = 50
local MAX_AIM_ANGLE = 150
local MONSTER_HEAD_NAME = "Head"
local AUTO_TRACK_TIME = 10
local violations = {}
-- Проверка на бан
local function checkBan(player)
local success, isBanned = pcall(function()
return BanDataStore:GetAsync(player.UserId)
end)
if success and isBanned then
player:Kick("Ты забанен за читы, удачи.")
return true
end
return false
end
-- Функция бана
local function banPlayer(player)
local success, err = pcall(function()
BanDataStore:SetAsync(player.UserId, true)
end)
if success then
player:Kick("Ты в перманентном бане. Читы не помогут!")
else
warn("Ошибка бана: " .. tostring(err))
end
end
-- Отслеживание игрока
local function trackPlayer(player)
local character = player.Character
if not character then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid then return end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if not rootPart then return end
local lastPosition = rootPart.Position
local lastCameraCFrame = nil
local aimStartTime = nil
while player and player.Parent do
task.wait(0.1)
if not character or not humanoid or not rootPart then break end
-- Проверка на телепорт
local distanceMoved = (rootPart.Position - lastPosition).Magnitude
if distanceMoved > MAX_TELEPORT_DISTANCE then
violations[player] = (violations[player] or 0) + 1
player:Kick("Телепорт detected.")
return
end
lastPosition = rootPart.Position
-- Проверка на скорость
if humanoid.WalkSpeed > MAX_WALK_SPEED then
violations[player] = (violations[player] or 0) + 1
player:Kick("Ты слишком быстрый.")
return
end
-- Проверка на высоту прыжка
if humanoid.JumpPower > MAX_JUMP_HEIGHT then
violations[player] = (violations[player] or 0) + 1
player:Kick("Слишком высоко прыгаешь.")
return
end
-- Проверка на резкие повороты камеры
local cameraCFrame = workspace.CurrentCamera.CFrame
if lastCameraCFrame then
local angleDiff = math.deg((cameraCFrame.LookVector:Dot(lastCameraCFrame.LookVector)))
if math.abs(angleDiff) > MAX_AIM_ANGLE then
violations[player] = (violations[player] or 0) + 1
player:Kick("Камера слишком резкая, читер?")
return
end
end
lastCameraCFrame = cameraCFrame
-- Проверка на аим-бот (если игрок долго фиксируется на голове монстра)
local lookingAtMonster = false
for _, monster in pairs(workspace:GetChildren()) do
if monster:FindFirstChild(MONSTER_HEAD_NAME) then
local head = monster[MONSTER_HEAD_NAME]
local direction = (head.Position - rootPart.Position).unit
local dotProduct = direction:Dot(cameraCFrame.LookVector)
if dotProduct > 0.98 then
lookingAtMonster = true
break
end
end
end
if lookingAtMonster then
if not aimStartTime then
aimStartTime = tick()
elseif tick() - aimStartTime > AUTO_TRACK_TIME then
violations[player] = (violations[player] or 0) + 1
player:Kick("Аим-бот не пройдет.")
return
end
else
aimStartTime = nil
end
-- Бан после 5 нарушений
if violations[player] and violations[player] >= 5 then
banPlayer(player)
return
end
end
end
-- Когда игрок заходит в игру
Players.PlayerAdded:Connect(function(player)
if checkBan(player) then return end
violations[player] = 0
player.CharacterAdded:Connect(function()
task.wait(2)
trackPlayer(player)
end)
end)
Как это работает?
✅ Если игрок телепортируется – кик.
✅ Если его скорость больше нормы – кик.
✅ Если он прыгает выше положенного – кик.
✅ Если камера поворачивается слишком резко – кик.
✅ Если слишком долго смотрит на монстра – кик.
✅ Если нарушит 5 раз – бан навсегда.
Что делать дальше?
Сохранить игру.
Протестировать анти-чит (можно через команды в Command Bar: game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = 50).