Look Line Open Source
Key Required

Look Line Open Source

[UPD] Blind Shotp1bubp1bub 873 views 34 executesUpdated Dec 19, 2025
0.0/ 5(1 votes)
010% Positive
Lua Script•381 lines (13368 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer

local CONFIG = {
    LineDistance = 500,
    LineThickness = 2,
    LineThicknessAlert = 4,
    NormalColor = Color3.fromRGB(255, 80, 80),
    AlertColor = Color3.fromRGB(255, 0, 0),
    DetectionRadius = 3,
    EnableVFX = true,
    FlashSpeed = 8,
    VignetteIntensity = 0.3,
    HeadCircleRadius = 12,
    HeadBoxSize = 24,
}

local playerLines = {}
local playerHeadCircles = {}
local playerHeadBoxes = {}
local playerNameTags = {}
local warningUI = nil
local connections = {}
local isRunning = true

local function createWarningUI()
    local screenGui = Instance.new("ScreenGui")
    screenGui.Name = "LookWarningVFX"
    screenGui.ResetOnSpawn = false
    screenGui.IgnoreGuiInset = true
    screenGui.DisplayOrder = 999
    
    local vignette = Instance.new("Frame")
    vignette.Name = "Vignette"
    vignette.Size = UDim2.new(1, 0, 1, 0)
    vignette.BackgroundTransparency = 1
    vignette.BorderSizePixel = 0
    vignette.Parent = screenGui
    
    local warningText = Instance.new("TextLabel")
    warningText.Name = "WarningText"
    warningText.Size = UDim2.new(0, 300, 0, 50)
    warningText.Position = UDim2.new(0.5, -150, 0, 50)
    warningText.BackgroundTransparency = 1
    warningText.Text = "WARNING: SOMEONE IS LOOKING AT YOU"
    warningText.TextColor3 = Color3.fromRGB(255, 0, 0)
    warningText.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    warningText.TextStrokeTransparency = 0
    warningText.Font = Enum.Font.GothamBold
    warningText.TextSize = 24
    warningText.TextTransparency = 1
    warningText.Parent = screenGui
    
    local directionIndicator = Instance.new("TextLabel")
    directionIndicator.Name = "DirectionIndicator"
    directionIndicator.Size = UDim2.new(0, 200, 0, 30)
    directionIndicator.Position = UDim2.new(0.5, -100, 0, 95)
    directionIndicator.BackgroundTransparency = 1
    directionIndicator.Text = ""
    directionIndicator.TextColor3 = Color3.fromRGB(255, 150, 150)
    directionIndicator.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
    directionIndicator.TextStrokeTransparency = 0.5
    directionIndicator.Font = Enum.Font.Gotham
    directionIndicator.TextSize = 16
    directionIndicator.TextTransparency = 1
    directionIndicator.Parent = screenGui
    
    pcall(function()
        screenGui.Parent = game:GetService("CoreGui")
    end)
    
    if not screenGui.Parent then
        screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
    end
    
    return {
        Gui = screenGui,
        Vignette = vignette,
        Text = warningText,
        Direction = directionIndicator
    }
end

local function createDrawingLine()
    local line = Drawing.new("Line")
    line.Thickness = CONFIG.LineThickness
    line.Color = CONFIG.NormalColor
    line.Transparency = 0.8
    line.Visible = false
    return line
end

local function createHeadCircle()
    local circle = Drawing.new("Circle")
    circle.Radius = CONFIG.HeadCircleRadius
    circle.Color = CONFIG.NormalColor
    circle.Thickness = 2
    circle.Filled = false
    circle.Transparency = 0.8
    circle.Visible = false
    return circle
end

local function createHeadBox()
    local lines = {}
    for i = 1, 4 do
        local line = Drawing.new("Line")
        line.Thickness = 2
        line.Color = CONFIG.NormalColor
        line.Transparency = 0.8
        line.Visible = false
        table.insert(lines, line)
    end
    return lines
end

local function createNameTag()
    local text = Drawing.new("Text")
    text.Size = 14
    text.Color = Color3.fromRGB(255, 255, 255)
    text.Center = true
    text.Outline = true
    text.OutlineColor = Color3.fromRGB(0, 0, 0)
    text.Visible = false
    return text
end

local function checkIfLookingAtMe(player)
    local character = player.Character
    local myCharacter = LocalPlayer.Character
    
    if not character or not myCharacter then 
        return false, nil, nil 
    end
    
    local head = character:FindFirstChild("Head")
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    local myHRP = myCharacter:FindFirstChild("HumanoidRootPart")
    
    if not head or not myHRP or not humanoid or humanoid.Health <= 0 then 
        return false, nil, nil 
    end
    
    local lookVector = head.CFrame.LookVector
    local eyePosition = head.Position + Vector3.new(0, 0.5, 0)
    local endPosition = eyePosition + (lookVector * CONFIG.LineDistance)
    
    local rayParams = RaycastParams.new()
    rayParams.FilterType = Enum.RaycastFilterType.Exclude
    rayParams.FilterDescendantsInstances = {character}
    
    local rayResult = workspace:Raycast(eyePosition, lookVector * CONFIG.LineDistance, rayParams)
    
    local hitMe = false
    local actualEndPos = endPosition
    
    if rayResult then
        actualEndPos = rayResult.Position
        local hitModel = rayResult.Instance:FindFirstAncestorOfClass("Model")
        if hitModel == myCharacter then
            hitMe = true
        end
    else
        local toMe = (myHRP.Position - eyePosition).Unit
        local dot = lookVector:Dot(toMe)
        local distance = (myHRP.Position - eyePosition).Magnitude
        
        if dot > 0.98 and distance < CONFIG.LineDistance then
            local projection = eyePosition + lookVector * distance * dot
            local perpDistance = (myHRP.Position - projection).Magnitude
            
            if perpDistance < CONFIG.DetectionRadius then
                hitMe = true
                actualEndPos = myHRP.Position
            end
        end
    end
    
    return hitMe, eyePosition, actualEndPos
end

local function drawHeadBox(boxLines, headPos, size, color, visible)
    if not visible then
        for _, line in ipairs(boxLines) do
            line.Visible = false
        end
        return
    end
    
    local halfSize = size / 2
    local corners = {
        Vector2.new(headPos.X - halfSize, headPos.Y - halfSize),
        Vector2.new(headPos.X + halfSize, headPos.Y - halfSize),
        Vector2.new(headPos.X + halfSize, headPos.Y + halfSize),
        Vector2.new(headPos.X - halfSize, headPos.Y + halfSize)
    }
    
    for i, line in ipairs(boxLines) do
        local nextIndex = i % 4 + 1
        line.From = corners[i]
        line.To = corners[nextIndex]
        line.Color = color
        line.Visible = true
    end
end

local function updateSystem()
    if not isRunning then return end
    
    local camera = workspace.CurrentCamera
    local watchingPlayers = {}
    
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            if not playerLines[player] then
                playerLines[player] = createDrawingLine()
                playerHeadCircles[player] = createHeadCircle()
                playerHeadBoxes[player] = createHeadBox()
                playerNameTags[player] = createNameTag()
            end
            
            local line = playerLines[player]
            local headCircle = playerHeadCircles[player]
            local headBox = playerHeadBoxes[player]
            local nameTag = playerNameTags[player]
            
            local character = player.Character
            local head = character and character:FindFirstChild("Head")
            local humanoid = character and character:FindFirstChildOfClass("Humanoid")
            
            if head and humanoid and humanoid.Health > 0 then
                local isLooking, startPos, endPos = checkIfLookingAtMe(player)
                local headScreen, headOnScreen = camera:WorldToViewportPoint(head.Position)
                
                if headOnScreen and headScreen.Z > 0 then
                    local headPos2D = Vector2.new(headScreen.X, headScreen.Y)
                    local distanceFactor = math.clamp(50 / headScreen.Z, 0.5, 2)
                    local dynamicRadius = CONFIG.HeadCircleRadius * distanceFactor
                    local dynamicBoxSize = CONFIG.HeadBoxSize * distanceFactor
                    
                    local currentColor = CONFIG.NormalColor
                    local pulse = 1
                    
                    if isLooking then
                        pulse = math.abs(math.sin(tick() * CONFIG.FlashSpeed))
                        currentColor = CONFIG.AlertColor
                        table.insert(watchingPlayers, player)
                    end
                    
                    headCircle.Position = headPos2D
                    headCircle.Radius = dynamicRadius + (isLooking and pulse * 4 or 0)
                    headCircle.Color = currentColor
                    headCircle.Thickness = isLooking and 3 or 2
                    headCircle.Visible = true
                    
                    drawHeadBox(headBox, headPos2D, dynamicBoxSize + (isLooking and pulse * 6 or 0), currentColor, true)
                    
                    nameTag.Text = player.Name
                    nameTag.Position = Vector2.new(headPos2D.X, headPos2D.Y - dynamicRadius - 20)
                    nameTag.Color = isLooking and CONFIG.AlertColor or Color3.fromRGB(255, 255, 255)
                    nameTag.Size = math.clamp(14 * distanceFactor, 10, 18)
                    nameTag.Visible = true
                    
                    if startPos and endPos then
                        local startScreen = camera:WorldToViewportPoint(startPos)
                        local endScreen = camera:WorldToViewportPoint(endPos)
                        
                        if startScreen.Z > 0 then
                            line.From = Vector2.new(startScreen.X, startScreen.Y)
                            line.To = Vector2.new(endScreen.X, endScreen.Y)
                            
                            if isLooking then
                                line.Color = CONFIG.AlertColor
                                line.Thickness = CONFIG.LineThicknessAlert + (pulse * 2)
                                line.Transparency = 0.4 + (pulse * 0.3)
                            else
                                line.Color = CONFIG.NormalColor
                                line.Thickness = CONFIG.LineThickness
                                line.Transparency = 0.6
                            end
                            line.Visible = true
                        else
                            line.Visible = false
                        end
                    else
                        line.Visible = false
                    end
                else
                    line.Visible = false
                    headCircle.Visible = false
                    drawHeadBox(headBox, Vector2.new(0, 0), 0, CONFIG.NormalColor, false)
                    nameTag.Visible = false
                end
            else
                line.Visible = false
                headCircle.Visible = false
                drawHeadBox(headBox, Vector2.new(0, 0), 0, CONFIG.NormalColor, false)
                nameTag.Visible = false
            end
        end
    end
    
    if warningUI and CONFIG.EnableVFX then
        local isBeingWatched = #watchingPlayers > 0
        
        if isBeingWatched then
            local pulse = math.abs(math.sin(tick() * CONFIG.FlashSpeed))
            
            warningUI.Vignette.BackgroundColor3 = CONFIG.AlertColor
            warningUI.Vignette.BackgroundTransparency = 1 - (CONFIG.VignetteIntensity * (0.5 + pulse * 0.5))
            
            warningUI.Text.TextTransparency = 0.2 + (pulse * 0.3)
            warningUI.Text.TextSize = 24 + (pulse * 4)
            
            local names = {}
            for _, p in ipairs(watchingPlayers) do
                table.insert(names, p.Name)
            end
            warningUI.Direction.Text = table.concat(names, ", ")
            warningUI.Direction.TextTransparency = 0.3
        else
            warningUI.Vignette.BackgroundTransparency = 1
            warningUI.Text.TextTransparency = 1
            warningUI.Direction.TextTransparency = 1
        end
    end
end

local function cleanupPlayer(player)
    if playerLines[player] then
        playerLines[player]:Remove()
        playerLines[player] = nil
    end
    if playerHeadCircles[player] then
        playerHeadCircles[player]:Remove()
        playerHeadCircles[player] = nil
    end
    if playerHeadBoxes[player] then
        for _, line in ipairs(playerHeadBoxes[player]) do
            line:Remove()
        end
        playerHeadBoxes[player] = nil
    end
    if playerNameTags[player] then
        playerNameTags[player]:Remove()
        playerNameTags[player] = nil
    end
end

local function fullCleanup()
    isRunning = false
    
    for _, conn in pairs(connections) do
        pcall(function() conn:Disconnect() end)
    end
    
    for player, _ in pairs(playerLines) do
        cleanupPlayer(player)
    end
    
    if warningUI and warningUI.Gui then
        warningUI.Gui:Destroy()
    end
end

warningUI = createWarningUI()

table.insert(connections, Players.PlayerRemoving:Connect(cleanupPlayer))
table.insert(connections, RunService.RenderStepped:Connect(updateSystem))

spawn(function()
    while isRunning do
        wait(0.5)
        if _G.StopLookChams then
            fullCleanup()
            _G.StopLookChams = false
            break
        end
    end
end)

Features & Information

Look Line Name Tag Head Circle

Community Comments (6)

thesenutsthesenutsDec 19, 2025

not all lasers are visible during the arena

Replying to @thesenuts
p1bubp1bubDec 19, 2025

@thesenuts sure?

Replying to @p1bub
thesenutsthesenutsDec 19, 2025

@p1bub yea some disappear

Replying to @thesenuts
p1bubp1bubDec 19, 2025

@thesenuts let me check

Replying to @p1bub
YggrrtfYggrrtfDec 19, 2025

@p1bub W script yes I am sure

kunidevskunidevsDec 19, 2025

e

More Scripts for [UPD] Blind Shot