Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local player = game.Players.LocalPlayer
- local mouse = player:GetMouse()
- local camera = game.Workspace.CurrentCamera
- local lockOn = false
- local targetPlayer = nil
- -- UI Setup (Button Less Long)
- local screenGui = Instance.new("ScreenGui")
- screenGui.Parent = player:WaitForChild("PlayerGui")
- local toggleButton = Instance.new("TextButton")
- toggleButton.Size = UDim2.new(0, 100, 0, 30) -- Less long, width reduced to 100
- toggleButton.Position = UDim2.new(0, 20, 0, 20) -- Left corner, a little padding
- toggleButton.Text = "Lock On"
- toggleButton.Parent = screenGui
- toggleButton.BackgroundColor3 = Color3.fromHSV(0, 1, 1)
- -- Making the UI movable
- local dragging = false
- local dragStart
- local startPos
- toggleButton.MouseButton1Down:Connect(function(input)
- dragging = true
- dragStart = input.Position
- startPos = toggleButton.Position
- end)
- toggleButton.MouseMoved:Connect(function(input)
- if dragging then
- local delta = input.Position - dragStart
- toggleButton.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
- end
- end)
- toggleButton.MouseButton1Up:Connect(function()
- dragging = false
- end)
- -- Rainbow Effect for UI (optional)
- local function updateRainbowColor()
- local time = tick()
- toggleButton.BackgroundColor3 = Color3.fromHSV(time % 5 / 5, 1, 1)
- end
- game:GetService("RunService").RenderStepped:Connect(updateRainbowColor)
- -- Toggle Lock-On Functionality (Button Click and "E" Key)
- local function toggleLockOn()
- lockOn = not lockOn
- if lockOn then
- toggleButton.Text = "Lock Off"
- -- Find the nearest player to lock on to (based on looking direction)
- local closestDistance = math.huge
- for _, otherPlayer in pairs(game.Players:GetPlayers()) do
- if otherPlayer ~= player and otherPlayer.Character and otherPlayer.Character:FindFirstChild("HumanoidRootPart") then
- local direction = (otherPlayer.Character.HumanoidRootPart.Position - camera.CFrame.Position).unit
- local dotProduct = direction:Dot(camera.CFrame.LookVector) -- Check if the player is in front of you
- -- Lock only on players you are looking at
- if dotProduct > 0.5 then
- local distance = (player.Character.HumanoidRootPart.Position - otherPlayer.Character.HumanoidRootPart.Position).magnitude
- if distance < closestDistance then
- closestDistance = distance
- targetPlayer = otherPlayer
- end
- end
- end
- end
- else
- toggleButton.Text = "Lock On"
- targetPlayer = nil
- end
- end
- game:GetService("UserInputService").InputBegan:Connect(function(input, gameProcessed)
- if gameProcessed then return end -- Ignore if the input is already processed (like in chat)
- -- Handle E key press
- if input.KeyCode == Enum.KeyCode.E then
- toggleLockOn()
- end
- end)
- toggleButton.MouseButton1Click:Connect(function()
- toggleLockOn()
- end)
- game:GetService("RunService").Heartbeat:Connect(function()
- if lockOn and targetPlayer then
- local targetPos = targetPlayer.Character.HumanoidRootPart.Position
- camera.CFrame = CFrame.new(camera.CFrame.Position, targetPos) -- Camera always looks at the target
- elseif not lockOn then
- camera.CameraSubject = player.Character.Humanoid
- end
- end)
- player.CharacterAdded:Connect(function()
- -- Reset lock-on when player respawns
- lockOn = false
- targetPlayer = nil
- toggleButton.Text = "Lock On"
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement