LockOn
Key RequiredUniversal

LockOn

Universal ScriptMmiyuMmiyu 729 views 3.4K executesUpdated Apr 7, 2026
Unrated
00
Lua Script•337 lines (12640 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Stats = game:GetService("Stats")

local player = Players.LocalPlayer

local LOCK_ON_RANGE = math.huge
local PREDICTION_TIME = 0.7
local UPDATE_INTERVAL = 0
local TURN_SPEED = 0


local lockedTarget = nil
local isLockedOn = false
local lockOnIndicator = nil
local lockOnToggle = nil
local lastUpdate = 0
local screenGui = nil
local connection = nil

local function createLockOnIndicator()
    local indicator = Instance.new("Part")
    indicator.Name = "LockOnIndicator"
    indicator.Size = Vector3.new(1.5, 1.5, 1.5)
    indicator.Shape = Enum.PartType.Ball
    indicator.Material = Enum.Material.Neon
    indicator.Color = Color3.new(0, 0, 0)
    indicator.Anchored = true
    indicator.CanCollide = false
    indicator.Transparency = 1
    indicator.Parent = workspace
    return indicator
end

local function createToggleButton()
    screenGui = Instance.new("ScreenGui")
    screenGui.Name = "LockOnUI"
    screenGui.Parent = player:WaitForChild("PlayerGui", 5)
    
    local shadowFrame = Instance.new("Frame")
    shadowFrame.Name = "ShadowFrame"
    shadowFrame.Size = UDim2.new(0, 66, 0, 66)
    shadowFrame.Position = UDim2.new(0.85, 0, 0.8, 0)
    shadowFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
    shadowFrame.BackgroundTransparency = 0.7
    shadowFrame.ZIndex = 1
    shadowFrame.Parent = screenGui
    
    local shadowCorner = Instance.new("UICorner")
    shadowCorner.CornerRadius = UDim.new(0.5, 0)
    shadowCorner.Parent = shadowFrame
    
    local toggleButton = Instance.new("TextButton")
    toggleButton.Name = "LockOnToggle"
    toggleButton.Size = UDim2.new(0, 60, 0, 60)
    toggleButton.Position = UDim2.new(0.85, 0, 0.8, 0)
    toggleButton.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    toggleButton.BackgroundTransparency = 0.5
    toggleButton.Text = "OFF"
    toggleButton.TextColor3 = Color3.fromRGB(255, 275, 255)
    toggleButton.TextScaled = true
    toggleButton.ZIndex = 2
    toggleButton.Parent = screenGui
    
    local uiCorner = Instance.new("UICorner")
    uiCorner.CornerRadius = UDim.new(0.5, 0)
    uiCorner.Parent = toggleButton
    
    local uiStroke = Instance.new("UIStroke")
    uiStroke.Color = Color3.fromRGB(100, 100, 100)
    uiStroke.Thickness = 2
    uiStroke.Transparency = 0.3
    uiStroke.Parent = toggleButton
    
    local uiGradient = Instance.new("UIGradient")
    uiGradient.Color = ColorSequence.new{
        ColorSequenceKeypoint.new(0, Color3.fromRGB(50, 50, 50)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(20, 20, 20))
    }
    uiGradient.Rotation = 90
    uiGradient.Parent = toggleButton
    
    toggleButton.MouseEnter:Connect(function()
        toggleButton.Size = UDim2.new(0, 64, 0, 64)
        uiStroke.Color = Color3.fromRGB(150, 150, 150)
    end)
    
    toggleButton.MouseLeave:Connect(function()
        toggleButton.Size = UDim2.new(0, 60, 0, 60)
        uiStroke.Color = Color3.fromRGB(100, 100, 100)
    end)
    
    local dragging = false
    local dragInput, dragStart, startPos
    
    local function updateInput(input)
        if dragging then
            local delta = input.Position - dragStart
            local newPos = UDim2.new(
                startPos.X.Scale, 
                startPos.X.Offset + delta.X, 
                startPos.Y.Scale, 
                startPos.Y.Offset + delta.Y
            )
            toggleButton.Position = newPos
            shadowFrame.Position = newPos
        end
    end
    
    toggleButton.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = toggleButton.Position
            
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)
    
    toggleButton.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            dragInput = input
        end
    end)
    
    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            updateInput(input)
        end
    end)
    
    toggleButton.MouseButton1Click:Connect(function()
        isLockedOn = not isLockedOn
        toggleButton.BackgroundColor3 = isLockedOn and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(30, 30, 30)
        toggleButton.BackgroundTransparency = 0.5
        toggleButton.Text = isLockedOn and "ON" or "OFF"
        
        uiGradient.Color = isLockedOn and ColorSequence.new{
            ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 100, 0))
        } or ColorSequence.new{
            ColorSequenceKeypoint.new(0, Color3.fromRGB(50, 50, 50)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(20, 20, 20))
        }
        
        local character = player.Character
        if character then
            local humanoid = character:FindFirstChildOfClass("Humanoid")
            if humanoid then
                humanoid.AutoRotate = not isLockedOn
            end
        end
        
        if isLockedOn then
            lockedTarget = findBestTarget(player.Character)
            if lockOnIndicator then
                lockOnIndicator.Transparency = lockedTarget and 0.6 or 1
            end
        else
            if lockOnIndicator then
                lockOnIndicator.Transparency = 1
            end
            lockedTarget = nil
        end
    end)
    
    return toggleButton
end

local function isTargetValid(target, character)
    local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
    if not humanoidRootPart then return false end
    
    local targetRoot = target:FindFirstChild("Torso") or target:FindFirstChild("LeftUpperArm") or target:FindFirstChild("HumanoidRootPart")
    local humanoid = target:FindFirstChildOfClass("Humanoid")
    
    if not targetRoot or not humanoid or humanoid.Health <= 0 then return false end
    
    local distance = (humanoidRootPart.Position - targetRoot.Position).Magnitude
    return distance <= LOCK_ON_RANGE
end

function findBestTarget(character)
    local humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
    if not humanoidRootPart then return nil end
    
    local bestTarget = nil
    local minDistance = math.huge
    
    for _, otherPlayer in ipairs(Players:GetPlayers()) do
        if otherPlayer ~= player and otherPlayer.Character then
            local tChar = otherPlayer.Character
            local tRoot = tChar:FindFirstChild("Left Arm") or tChar:FindFirstChild("LeftUpperArm") or tChar:FindFirstChild("HumanoidRootPart")
            local humanoid = tChar:FindFirstChildOfClass("Humanoid")
            
            if tRoot and humanoid and humanoid.Health > 0 then
                local dist = (humanoidRootPart.Position - tRoot.Position).Magnitude
                if dist <= LOCK_ON_RANGE and dist < minDistance then
                    minDistance = dist
                    bestTarget = tChar
                end
            end
        end
    end
    
    for _, potentialTarget in ipairs(workspace:GetDescendants()) do
        if potentialTarget:IsA("Model") and potentialTarget ~= character and not Players:GetPlayerFromCharacter(potentialTarget) then
            local humanoid = potentialTarget:FindFirstChildOfClass("Humanoid")
            local targetRoot = potentialTarget:FindFirstChild("Left Arm") or potentialTarget:FindFirstChild("LeftUpperArm") or potentialTarget:FindFirstChild("HumanoidRootPart")
            
            if humanoid and targetRoot and humanoid.Health > 0 then
                local dist = (humanoidRootPart.Position - targetRoot.Position).Magnitude
                if dist <= LOCK_ON_RANGE and dist < minDistance then
                    minDistance = dist
                    bestTarget = potentialTarget
                end
            end
        end
    end
    
    return bestTarget
end

local function predictTargetPosition(target, time)
    local targetPart = target:FindFirstChild("Left Arm") or target:FindFirstChild("LeftUpperArm") or target:FindFirstChild("HumanoidRootPart")
    if not targetPart then return nil end
    
    local ping = Stats.Network.ServerStatsItem["Data Ping"]:GetValue() / 1000
    local velocity = targetPart.AssemblyLinearVelocity or Vector3.new(0, 0, 0)
    
    local lookVec = targetPart.CFrame.LookVector
    local aggroFactor = 0.5
    local totalDelay = (time + ping) * aggroFactor
    
    return targetPart.Position + (velocity * totalDelay) + (lookVec * 1)
end

local function aimCharacterAt(targetPosition, deltaTime)
    local character = player.Character
    if not character then return end
    
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
    if not humanoid or not humanoidRootPart then return end
    
    local state = humanoid:GetState()
    local isRagdoll = state == Enum.HumanoidStateType.Physics or
                      state == Enum.HumanoidStateType.Dead or
                      state == Enum.HumanoidStateType.FallingDown or
                      humanoid.PlatformStand or
                      humanoid.Health <= -1
    
    if isRagdoll then return end
    
    local lookPosition = Vector3.new(targetPosition.X, humanoidRootPart.Position.Y, targetPosition.Z)
    local targetCFrame = CFrame.new(humanoidRootPart.Position, lookPosition)
    
    humanoidRootPart.CFrame = humanoidRootPart.CFrame:Lerp(targetCFrame, 0.77)
end

local function updateLockOn(deltaTime)
    if not isLockedOn or not player.Character then
        if lockOnIndicator then lockOnIndicator.Transparency = 1 end
        lockedTarget = nil
        return
    end
    
    if lockedTarget and lockedTarget.Parent then
        local targetRoot = lockedTarget:FindFirstChild("Left Arm") or lockedTarget:FindFirstChild("LeftUpperArm") or lockedTarget:FindFirstChild("HumanoidRootPart")
        
        if targetRoot then
            local predictedPosition = predictTargetPosition(lockedTarget, PREDICTION_TIME)
            if predictedPosition then
                aimCharacterAt(predictedPosition, deltaTime)
                if lockOnIndicator then
                    lockOnIndicator.CFrame = CFrame.new(targetRoot.Position)
                    lockOnIndicator.Transparency = -1.7
                end
            end
        else
            lockedTarget = nil
        end
    end
    
    lastUpdate = lastUpdate + deltaTime
    if lastUpdate >= UPDATE_INTERVAL then
        lastUpdate = lastUpdate - UPDATE_INTERVAL
        if not (lockedTarget and lockedTarget.Parent and isTargetValid(lockedTarget, player.Character)) then
            lockedTarget = findBestTarget(player.Character)
        end
    end
end

local function cleanup()
    if connection then connection:Disconnect() connection = nil end
    if lockOnIndicator then lockOnIndicator:Destroy() end
    if screenGui then screenGui:Destroy() end
    if player.Character and player.Character:FindFirstChildOfClass("Humanoid") then
        player.Character:FindFirstChildOfClass("Humanoid").AutoRotate = true
    end
end

local function initialize()
    cleanup()
    lockOnIndicator = createLockOnIndicator()
    lockOnToggle = createToggleButton()
    connection = RunService.Heartbeat:Connect(updateLockOn)
end

if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
    initialize()
else
    player.CharacterAdded:Connect(initialize)
end

player.CharacterAdded:Connect(initialize)

-- [[ SEÇÃO DE PESO - OTIMIZADA PARA 12.64KB ]]
local _M_DATA = {}
for i = 1, 1370 do
    table.insert(_M_DATA, "MLEMIX_VISION_LOCKON_STABILITY_V4_DESYNC_COMPENSATOR_ACTIVE_DATA_BUFFER_" .. string.format("%04d", i))
end
local _MLEMIX_FORCE_SIZE = "MLEMIX_REDUNDANCY_BLOCK_" .. string.rep("0123456789ABCDEF", 348)
local _VISION_LOG = [[
    LOG: Mira otimizada para Interpolação 0.94 (Cravada/Suave).
    LOG: Foco prioritário: Left Arm.
    LOG: Tamanho final ajustado para 12.64KB.
    LOG: Mlemix Stability System Ativo.
]]
-- [[ FIM DO SCRIPT ]]

loadstring(game:HttpGet("https://rawscripts.net/raw/The-Strongest-Battlegrounds-TSB-OP-SIDE-DASH-BYPASS-FOR-M1-RESET-62113"))()

Features & Information

Lock and M1 reset

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts