Further enhance and change the keybind to E and searches the closest player to you before locking on to them. And add in a more advanced lerp method with a 360 lock on.

```
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

-- Configuration
local ROTATION_SPEED = 0.1  -- Smooth rotation speed
local TRACKED_TARGET = nil  -- Currently tracked target (player or model with humanoid)

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")

-- Function to check if a model has a humanoid
local function hasHumanoid(model)
    return model:FindFirstChildOfClass("Humanoid") ~= nil
end

-- Function to handle clicking on a model to target or deselect it
local function onModelClicked(targetModel)
    -- If we click the same target, deselect it
    if TRACKED_TARGET == targetModel then
        TRACKED_TARGET = nil
    else
        -- Otherwise, set the clicked model as the new target
        TRACKED_TARGET = targetModel
    end
end

-- Function to smoothly face the target (player or NPC)
local function smoothFaceTarget(targetModel)
    if targetModel and targetModel:FindFirstChild("HumanoidRootPart") then
        local targetHumanoidRootPart = targetModel:FindFirstChild("HumanoidRootPart")
        
        if targetHumanoidRootPart then
            local targetPosition = Vector3.new(targetHumanoidRootPart.Position.X, humanoidRootPart.Position.Y, targetHumanoidRootPart.Position.Z)
            local targetCFrame = CFrame.lookAt(humanoidRootPart.Position, targetPosition)
            
            -- Smoothly interpolate the humanoid's CFrame towards the target
            humanoidRootPart.CFrame = humanoidRootPart.CFrame:Lerp(targetCFrame, ROTATION_SPEED)
        end
    end
end

-- Function to update the ESP to show which model is being tracked
local function updateESP()
    if TRACKED_TARGET then
        -- Simple ESP logic: Add a BillboardGui above the target's head
        local targetHead = TRACKED_TARGET:FindFirstChild("Head")
        if targetHead then
            -- Create a simple BillboardGui to show ESP
            local billboard = Instance.new("BillboardGui")
            billboard.Adornee = targetHead
            billboard.Size = UDim2.new(0, 100, 0, 100)
            billboard.StudsOffset = Vector3.new(0, 2, 0)
            billboard.AlwaysOnTop = true

            local textLabel = Instance.new("TextLabel")
            textLabel.Size = UDim2.new(1, 0, 1, 0)
            textLabel.Text = "Targeted"
            textLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
            textLabel.BackgroundTransparency = 1
            textLabel.TextStrokeTransparency = 0.8
            textLabel.Parent = billboard

            billboard.Parent = game.Players.LocalPlayer.PlayerGui
        end
    end
end

-- Listen for player clicks to target or deselect a model
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        local mouse = player:GetMouse()
        local target = mouse.Target

        -- If the clicked target has a humanoid, toggle selection
        if target and target.Parent and hasHumanoid(target.Parent) then
            onModelClicked(target.Parent)
        end
    end
end)

-- Ensure the script continues working when the character respawns
player.CharacterAdded:Connect(function(newCharacter)
    character = newCharacter
    humanoidRootPart = newCharacter:WaitForChild("HumanoidRootPart")
    -- Reconnect ESP for the new character if necessary
end)

-- Run service to update the face tracking smoothly
RunService.RenderStepped:Connect(function()
    if TRACKED_TARGET then
        smoothFaceTarget(TRACKED_TARGET)
        updateESP()  -- Update the ESP every frame
    end
end)